Читайте также:
|
|
Данные объекта можно рассматривать как поля записи в базе данных или как данные, описываемые в структуре. И пользователь и другие объекты программы должны иметь возможность читать, изменять и записывать данные в объект.
При проектировании процедур доступа к данным необходимо использовать принципы инкапсуляции (добавления данных в объект в соответствии с принципами разграничения доступа) и скрытия данных. Скрытие данных заключается в запрещении прямого доступа к данным пользователю и внешним объектам. Под прямым доступом заключается возможность совершать операции над переменными объекта функциям внешних объектов.
Делается это для решения следующих задач:
1. Необходимость поддержки целостности и непротиворечивости данных объекта. Если не обеспечить эти требования, то пользователь или внешний объект смогут внести неверные данные, и объект будет функционировать с ошибками.
2. Изоляция внешних объектов и пользователей от особенностей внутренней реализации данных объекта. Для внешних потребителей данных должен быть доступен пользовательский интерфейс, т.е. описание того, какие имеются данные и как их использовать (например, для объекта кнопка в интерфейсе программы пользователю необходимо манипулировать лишь с её координатами на форме приложения, размерами, цветом, но совсем необязательно знать как осуществляется их прорисовка). Внутренняя реализация данных объекта целиком остаётся в ведении разработчика. В этой ситуации разработчик всегда может модернизировать внутреннюю структуру объекта, и если пользовательский интерфейс не затронут, то в поведении пользователя и во внешней программе не придётся ничего менять.
Чтобы обеспечить скрытие данных при описании объекта необходимо указать все процедуры и функции, обеспечивающие необходимые операции с данными, т. е. их чтение, преобразование и запись. Эти функции и процедуры называют методами объекта, и только через них происходит общение с данными объекта.
Совокупность данных и методов их чтения называется свойством. Свойства объектов можно устанавливать во время проектирования (например, с помощью инспектора объектов Borland C++ Builder), можно изменять программно во время выполнения приложения в зависимости от действий пользователя и других объектов.
Кроме методов, работающих с отдельными данными, есть методы, оперирующие с их совокупностью, а так же меняющие их структуру. Исходя из вышесказанного, можно определить объект как совокупность свойств и методов.
Для составления окончательного определения необходимо рассмотреть взаимодействие объектов.
Средой взаимодействия объектов являются сообщения, которые генерируются объектами (включая пользователя и ОС) в результате событий. События наступают, прежде всего, вследствие действий пользователя – перемещение курсора мыши, нажатие клавиш мыши или клавиатуры. Также события могут наступать в результате работы самих объектов. В каждом объекте описано множество событий, на которые он может реагировать. В конкретном экземпляре объекта (т. е. объявленном в программе) могут быть определены обработчики каких либо из этих событий, которые определяют реакцию этого объекта на это событие. В программе это выглядит как функция, которая выполнится только в том случае, если произойдёт конкретное событие. В обработчике прежде всего анализируется сгенерированное событие, а затем предпринимаются действия: изменение свойств объекта, выполнение каких либо методов, генерирование новых событий и т.д.
При разработке пользовательского интерфейса в Borland C++ Builder часто всё программирование сводится к написанию обработчиков событий, т.к. все остальные действия максимально автоматизированы и выполняются с помощью среды визуального программирования.
Например, простейшая программа-калькулятор для сложения чисел может быть рализована следующим образом:
Организуется форма с элементами для ввода чисел (Edit1, Edit2), вывода результата (Label) и сигнала к расчету и выводу результата на форму (Button).
Если необходимо, чтобы по нажатию на кнопку осуществился расчет и вывод результата на форму, необходимо сгенерировать событие OnClick (одиночное нажатие на кнопку Button) и функцию обработчика этого события, в которой в случае нажатия произойдет расчет и вывод результатов
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Label1->Caption=FloatToStr(StrToFloat(Edit1->Text)+StrToFloat(Edit2->Text));
}
После компиляции и запуска получим приложение
Взаимодействие объектов можно показать следующим образом
Окончательное определение объекта – совокупность свойств и методов, а также событий. на которые он может реагировать.
Условно это изображено на рис. 3.
Рис. 3
Внешнее управление объектом осуществляется через обработчики событий. Эти обработчики обращаются к методам и свойствам объекта. Начальные значения данных объекта могут задаваться также в процессе проектирования установкой различных свойств. В результате выполнения методов объекта могут генерироваться новые события, воспринимаемые другими объектами программы или пользователем.
В процессе работы объекты могут создаваться и уничтожаться. Таким образом, структура программы является динамическим образованием, меняющимся в процессе выполнения. Основная цель создания и уничтожения объектов — экономия ресурсов компьютера и, прежде всего, памяти. Память практически всегда лимитирует возможности сложных приложений. Это связано с тем, что сложность программных проектов растет такими же быстрыми, темпами, что и техническое обеспечение. Поэтому от объектов, которые не нужны на данной стадии выполнения программы, нужно освобождаться. При этом освобождаются и выделенные им области памяти, которые могут использоваться вновь создаваемыми объектами.
Например— окно-заставка с логотипом, появляющееся при запуске многих приложений. После начала реального выполнения приложения эта заставка исчезает с экрана и никогда больше не появляется в данном сеансе работы. Было бы нерационально не уничтожить этот объект и не освободить занимаемую им память для более продуктивного использования.
С целью организации динамического распределения памяти во все объекты заложены методы их создания — конструкторы и уничтожения — деструкторы. Конструкторы объектов, которые изначально должны присутствовать в приложении (прикладной программе), запускаются при запуске программы. Деструкторы всех объектов, имеющихся в данный момент в приложении, запускаются при завершении его работы. Но нередко и в процессе выполнения новые различные объекты (например, новые окна документов) динамически создаются и уничтожаются с помощью их конструкторов и деструкторов.
Включать объекты в свою программу можно двумя способами: вручную включать в нее соответствующие операторы (это приходится делать не очень часто) или путем визуального программирования, используя соответствующие программные заготовки в виде объектов или наборов объектов, хранящихся в библиотеках. В Borland C++ Builder их называют компоненты. Стандартный набор компонент с наиболее часто встречающимися элементами интерфейса находятся в библиотеке VCL Visual Components Library и входит в комплект поставки Borland C++ Builder. Они доступны с палитры компонент сразу после установки пакета Borland C++ Builder.
Дата добавления: 2015-07-07; просмотров: 184 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Отличия ООП от процедурных программ | | | Лекция №5 Данные-элементы, статические данные, константные данные |