Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / Программирование!!!.docx
Скачиваний:
18
Добавлен:
04.04.2018
Размер:
219.34 Кб
Скачать

Событийно – ориентированное программирование

Идеология здесь основана на событиях (нажал клавишу, меню щелк). В ответ в windows генерируется подходящее сообщение, которое отсылается окну соответствующей программы.

Структура программы в событийном программировании следующая: главная часть программы представляет собой один бесконечный цикл, который опрашивает windows, следя за тем, не появилось ли новое сообщение. При его обнаружении вызывается программа, отвечающая за обработку соответственного сообщения. Цикл опроса будет продолжаться, пока не будут получены сообщения завершения работы.

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

Объективно-ориентирование программирование

В основе этого программирования лежит идея объединения в одной структуре данных и действия над ними (действия над методами). Оно базируется на трех основных методах:

  1. Инкапсуляция

  2. Наследования

  3. Полиморфизм

1 – Комбинирование или объединения данных с процедурами и функциями, которые манипулируют этими данными, в итоге объединения получаем новый тип данных объект (object;)

2 – Возможность использования уже определенных объектов для построения иерархических объектов, производных от них. Каждый из наследников наследует описание данных родителя и методом их обработки. Наследных может дополнять, расширять.

3- Возможность определяется одноименного действия ко всем объектам иерархии. Причем каждый объект заказывает это действия. (перекрытие методов потомков)

Главное преимущество ООП – возможность расширить область применения сложных программ, е переделывая их полностью, а только добавляя новые уровни иерархии.

Объект – структура, компонентами которой является взаимосвязанные данные различных типов и используются эти данные процедуры и функции. Данные называются полями объекта. Компоненты, процедуры и функции называются методами.

Классы и объекты

Классы в object pascal – специальные типы, которые содержат поля, методы и свойства. Класс служит образцом для создания конкретных экземпляров этого класса, которые называются объектами.

Отличие класса от других типов является то, что объекты класса распределяются в «куче»(область динамической памяти)

Var

V:TObject;

Объект переменная – это указатель на динамическую область памяти.

Для доступа к данным разыменовывать объект не требуется.

Type TMyclass=class(TObject) ifield:integer; var VM:Tmyclass; begin VM.ifield:=10

В основе классов лежат инкапсуляция, наследование и полиморфизм. Класс представляет собой единство 3-х сущностей: полей, методов и свойств.

Объединение их в одно цело называется инкапсуляцией. Инкапсуляция делает класс самодостаточным для решения конкретной задачи.

Класс TForm содержит в себе все необходимое для создания Windows окна.

Var

V:object TForm

Наследование. Любой класс может быть порождён от другого класса – родителя. TChildClass=class(TParentClass)

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

Полиморфизм. Свойство классов решать схожие по смыслу проблемы разными способами.

В Object Pascal поведенческие свойства класса определяются набором входящих в него методов. Для изменения метода необходимо «перекрыть» его в потомки. Т.е. открытие нового метода и реализуется в нем нужные действия. В результате в родителях и потомках новые методы с разной функциональностью. Они передают объектам разные свойства. Полиморфизм можно достигнуть виртуализацией, который позволяет родительским методам обращаться к методам потомков.

Составляющие класса

  1. Поля – инкапсулированные в классе данных Каждый объект получает уникальный набор полей, по общей для всех объектов данного класса набор методов и свойств. Классические обращения к полям идет с помощью методов и классов.

  1. Методы – это инкапсулированные процедуры и функции, они объявляются так же, как обычные подпрограммы.

Type TMyClass=class(TOdject) Ifield:integer; function F(pos:integer):integer; procedure proc; end;

Обратиться к методу можно как и к полю составным именем

Begin var aobj:TMyClass begin aobj.proc; Перекрытия в потомках: type TParent=class procedure word; end;

Если есть такое перекрытие, то потомки классов могут выполнять процедуру work по-разному. Такое замещение методов называется статическим. В object пакаль используются динамическое использование методов, тогда замещающий метод в родительском классе должен быть объявлен как динамический или виртуальный (dynamic of virtual). Сделая такие объявления компилятор создает таблицы (DMT,VMT) и он размещает в них адреса точек входа динамических и виртуальных методов. При каждом обращение к заменяемому методу компилятор вставляет код позволяющий извлечь адрес точки входа в подпрограмму из той или иной таблицы. В классе потомки замещающий метод объявляется с директивой override. Тогда компилятор создаст код, который на этапе прогона поместит в родовую таблицу точку входа в метод класса потомка.

Разница между динамическим и виртуальным методом состоит в том, что таблица DMT содержит адреса только тех методов, которые объявлены как динамик в данном текущем классе. Виртуальная таблица VMT содержит адреса виртуальных методов данного класса и всех его родителей. Обеспечивает более быстрый поиск по таблице.

В состав любого класса входят 2 специальных метода: конструктор и деструктор. У класса TObject Create и Destroy.

Конструктор распределяет объекты в динамической памяти. Помещает адрес этой памяти в переменную selt – сохраняет истину на себя. Автоматически объявляет в классе.

Деструктор удаляет объекты из кучи. Конструктор и деструктор является процедурами, по объявлению с помощью зарезервированных слов Constructor, Destructor.

Type TMyclass=class int:integer; Constructor Create (value:integer); Destructor Destroy; end;

Var TObj:TMyClass; begin vobj:=TMyclass.Create; //Создание объекта, т.е. распределение объекта в динамической памяти. vobj.int:=1; ….. vobj.Destroy;

Деструктор вызывает метод Free (освобождение памяти).

Свойства – специальный механизм классов, регулирует доступ к полям. Свойства объявляются с помощью зарезервированных слов property, read, write. Свойства связаны с полем и указывает те методы класса, которые должны использоваться при записи в это поле или при чтении из него. Type TMyclass=class int:integer; Constructor Create (value:integer); Destructor Destroy; procedure SetField(var:integer); function GetField:integer property GetField:integer; read GetField write SetField; end;

Дальше внутри программы ведет как обычное поле.

пр.

Экземпляр класса a:Tmyclass; begin ……. a.field:=1; a.intval:=1;

Разница заключается в том, что при обращении к свойству intval автоматически подключается метод setfielt, который может быть реализованы специальными действиями.

Label1.Caption:=’строка’;

Свойства caption компонента label вызывает метод SetText, который не только запоминает строку «строка» во внутренней переменной, но и напишет ее в поле метки, т.е. визуализирует.

Если необходимо чтобы поле было достаточно только для чтения или для записи следует в предложении property не указывать write или read.

Фактически свойства содержат один или два метода, осуществляемые некоторым действием над данными того же типа, что и свойства.