В Камаев - Технологии программирования

Тут можно читать онлайн В Камаев - Технологии программирования - бесплатно полную версию книги (целиком) без сокращений. Жанр: Прочая околокомпьтерная литература, издательство Издательство «Высшая школа», год 2006. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.

В Камаев - Технологии программирования краткое содержание

Технологии программирования - описание и краткое содержание, автор В Камаев, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
В книге изложены технологии структурного программирования, объектно-ориентированного проектирования, визуального программирования, технология, основанная на абстракции данных Дейкстеры. Рассмотрено использование средств автоматизации проведения программных разработок.
Второе издание (1-е — 2005 г.) дополнено главами по структуре данных и основам инженерии создания программ.
Для студентов вузов, обучающихся по направлению «Информатика».

Технологии программирования - читать онлайн бесплатно полную версию (весь текст целиком)

Технологии программирования - читать книгу онлайн бесплатно, автор В Камаев
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

В этом примере вне объекта значение свойства можно лишь прочитать. Попытка присвоить значение Aproperty вызовет ошибку компиляции.

5. ОБЪЕКТЫ И ИХ ЖИЗНЕННЫЙ ЦИКЛ

Как создаются и уничтожаются объекты? В Object Pascal экземпляры объектов могут быть только динамическими ! Это означает, что в приведенном в начале раздела фрагменте переменная AMyObject хотя и выглядит как статическая переменная языка Pascal, на самом деле является указателем, содержащим адрес объекта. Любая переменная объектного типа и есть указатель (указатель — переменная, содержащая значение адреса оперативной памяти).

Память под конкретные объекты (динамические экземпляры классов) выделяется диспетчером памяти в периоде выполнения программы в особой heap -области, где должно еще быть свободное место для размещения новых объектов. Heap — "куча мусора". Диспетчер памяти может как размещать в heap -области новые объекты, так и удалять уже ненужные, освобождая память под все новые объекты. Как раз при размещении объекта в памяти инициализируется значение переменной объектного типа адресом объекта. При удалении объекта переменная объектного типа инициализируется значением nil (пустой указатель) — нет объекта в памяти. При размещении нового объекта в памяти может оказаться, что общая свободная память имеет большой объем, но любой из освободившихся участков памяти, занимаемых уже удаленными объектами, оказывается меньше объема нового большого объекта. Для избежания такой ситуации при использовании объектных программ устанавливают в ЭВМ оперативную память заведомо большого объема. Новый экземпляр объекта создается особым методом — конструктором, а уничтожается специальным методом — деструктором:

AMyObject:= TMyObject.Create; {действия с созданным объектом}

AMyObject.Destroy; {уничтожение объекта}

В Object Pascal конструкторов у класса может быть несколько. Общепринято называть конструктор Create. Типичное название деструктора — Destroy. Рекомендуется использовать для уничтожения экземпляра объекта метод Free, который первоначально проверяет указатель (не равен ли он nil) и затем уж вызывают Destroy.

Для того чтобы правильно проинициализировать в создаваемом объекте поля, относящиеся к классу-предку, нужно сразу же при входе в конструктор вызвать конструктор предка:

constructorTmyObject.Create;

begin

inheritedCreate;

end;

Метод Create объекта MyObject типа TMyObject унаследован от класса предка TObject.

Взяв любой из примеров, поставляемых вместе с Delphi, мы обнаружим, что там почти нет вызовов конструкторов и деструкторов. Дело в том, что любой компонент, попавший при визуальном проектировании в приложение из Палитры компонентов, включается в определенную иерархию. Иерархия эта замыкается на форме (TForm): для всех ее составных частей конструкторы и деструкторы вызываются автоматически, незримо для программиста.

Кто создает и уничтожает формы? Это делает приложение (глобальный объект с именем Application). В файле проекта (.DPR) можно увидеть вызов функции CreateForm, предназначенный для этой цели. Что же касается объектов, создаваемых динамически (во время выполнения приложения), то здесь нужен явный вызов конструктора.

6. НАСЛЕДОВАНИЕ

Вторым "столпом" ООП, помимо инкапсуляции, является наследование. Этот простой принцип означает, что если нужно создать новый класс, лишь немного отличающийся от старого, то совершенно нет необходимости в переписывании заново уже существующих полей и методов. Новый класс

TNewObject = class(TOldObject);

является потомком, или дочерним классом старого класса, называемого предком, или родительским классом. Добавляются к нему лишь новые поля, методы и свойства.

В Object Pascal все классы являются потомками класса TObject. Поэтому если строится дочерний класс прямо от TObject, то в определении TOject можно не упоминать. Следующие два выражения одинаково верны:

TMyObject = class(TObject);

TMyObject = class;

Использование последнего выражения оправдано, если разработчик хочет показать, что, согласно его замыслу, проектируемый класс как бы не имеет предков.

Приведем объявление базового для всех объектных типов класса TObject:

TObject = class

constructorCreate;

destructorDestroy; virtual;

procedureFree;

class functionNewlnstance: TObject; virtual;

procedureFreelnstance; virtual;

class procedureInitlnstance(Instance: Pointer):

TObject;

functionClassType: TClass;

class functionClassName: string;

class functionClassParent: TClass;

class functionClassInfo: Pointer;

class functionInstanceSize: Word;

class functionInheritsFrom(AClass: TClass):

Boolean;

procedureDefaultHandler(var Message); virtual;

procedureDispatch(var Message);

class functionMethodAddress(const Name: string):

Pointer;

class functionMethodName(Address: Pointer):

string;

function FieldAddress(const Name: string):

Pointer;

end;

Такая архитектура возможна только при наличии механизма поддержки информации о типах — RTTI (RunTime Type Information). Основой такого механизма является внутренняя структура классов и, в частности, возможность доступа к ней за счет использования методов классов, описываемых конструкцией class function…

Унаследованные от предка поля и методы доступны в дочернем классе; если имеет место совпадение имен методов, то эти методы перекрываются.

По тому, какие действия происходят при вызове, методы делятся на группы:

• статические ( static);

• виртуальные ( virtual);

• динамические ( dynamic);

• абстрактные ( abstract).

Статические методы, а также поля в объектах-потомках ведут себя одинаково: можно без ограничений перекрывать старые имена и при этом изменять тип методов:

type

T1stObj = class

I: Real;

procedureSetData(Avalue: Real);

end;

T2ndObj = class(T1stObj)

I: Integer;

procedureSetData(Avalue: Integer);

end;

procedureT1stObj.SetData;

begin

i: = v;

end;

procedureT2nd0bj.SetData;

begin

i:= 0;

inheritedSetData(0.99);

end;

В этом примере разные методы с именем SetData присваивают значения разным полям с именем i. Перекрытое поле предка недоступно в потомке. В отличие от поля внутри других методов перекрытый метод доступен при указании зарезервированного слова inherited. Методы объектов по умолчанию являются статическими — их адрес определяется еще на стадии компиляции проекта. Они вызываются быстрее всего.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


В Камаев читать все книги автора по порядку

В Камаев - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Технологии программирования отзывы


Отзывы читателей о книге Технологии программирования, автор: В Камаев. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x