Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Основные свойства ООП: инкапсуляция и полиморфизм




Инкапсуляция — один из важнейших механизмов объектно-ориентированного программирования (наряду с наследованием и полиморфизмом). Класс представляет собой единство трёх сущностей: полей, свойств и методов, что и представляет собой инкапсуляцию.
Инкапсуляция позволяет создавать класс как нечто целостное, имеющее определенную функциональность. Например, класс TForm содержит в себе (инкапсулирует) всё необходимое, чтобы создать диалоговое окно.
Основная идея инкапсуляции — защитить поля от несанкционированного доступа. Поэтому поля целесообразно объявлять в разделе private. Прямой доступ к полям объекта — чтение и обновление их содержимого — должны производиться посредством вызова соответствующих методов. В FreePascal для этого служат свойства класса.

Свойства — это специальный механизм классов, регулирующий доступ к полям. Свойства объявляются с помощью зарезервированных слов property, read и write. Обычно свойство связано с некоторым полем и указывает те методы класса, которые должны использоваться при записи в это поле или при чтении из него. Синтаксис объявления свойств следующий:

property имя_свойства: тип read имя_чтения wгite имя_записи

Зарезервированное слово read описывает метод чтения свойств объекта, а слово write описывает метод записи свойств объекта.
Имя чтения и имя_записи — соответственно имена методов, обеспечивающих чтение или запись свойства.

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

Второй основополагающей составляющей объектно-ориентированного программирования является наследование. Смысл наследования заключается в следующем: если нужно создать новый класс, лишь немного отличающийся от старого, то нет необходимости в переписывании заново уже существующих полей и методов. В этом случае объявляется новый класс, который является наследником уже имеющегося, и к нему добавляются новые поля, методы и свойства. При создании новый класс является наследником членов ранее определённого базового класса (родителя). Класс-наследник является производным от базового, причём он сам может выступать в качестве базового класса для вновь создаваемых классов.

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




Методы классов. Полиморфизм

    Производный класс наследует от класса-предка поля и методы. Если имеет место совпадения имен методов, то говорят, что они перекрываются. В зависимости от того, какие действия происходят при вызове, методы делятся на следующие группы:

- статические методы;

- виртуальные методы;

- динамические;

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

Виртуальные и динамические методы имеют в базовом и производном классе те же имена и типы. В классах-наследниках эти соответственно и вызывается метод этого класса.

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

Таким образом, использование виртуальных методов требует больший расход памяти из-за необходимости хранения массивных VMT всех классов, зато они вызываются быстрее.

Изменяя алгоритм того или иного метода в производных классах, программист может придавать этим потомкам отсутствующие у родителя специфические свойства. Для изменения метода необходимо перегрузить его в потомке, т.е объявить в наследнике одноименный метод и реализовать в нем нужные действия. В результате в объекте-родителе и объекте-потомке будут действовать два одноименных метода, имеющих разную алгоритмическую основу. Это называется полиморфизмом объектов.

Виртуальные и динамические методы объявляются так же, как и статические, только в конце описания метода добавляются служебные слова virtualили dynamic:

Type

имя _класса_родителя=  class

метод;  virtual;

end;

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

end;

имя_класса_наследника= class; (имя_класса_родителя)

метод;   override;

end;

Абстрактный метод - это виртуальный вид или динамический метод, реализация которого не определена в том классе, где он объявлен. Предполагается, что этот метод будет перезагружен в классе-наследника. Вызывают метод только в тех классах, где он перезагружен. Абстрактный метод объявляются при помощи служебного слова abstract после слов virtualили dynamic.

Перезагрузка операций

В FreePascalможно перезагрузить не только функции, но и операции. Например, можно запрограммировать, чтобы операция * при работе с матрицами осуществляла умножение матриц, а при работе с комплексными числами - умножение комплексных чисел.

Для этого в программе нужно написать специальную функцию - метод. Объявление методы перегрузки записывается после объявления класса и выглядит так:

operator symbols(параметры: тип) имя_переменной_результата:

тип;

где

- operator -служебное слово;

- symbols -символ перезагружаемой операции;

- параметры - имена переменных, участвующих в перезагрузке оператора.

Описывают метод перезагрузки так же, как и другие методы, после ключевого слова implemention того модуля, в котором объявлен класс.

Компоненты - это особый вид объектов - визуальных компонентов.     Библиотека визуальных компонентов (Visual Component Library, VCL) содержит больщое количество классов, предназначенных для быстрой разработки приложений. Библиотека написана на Object Pascal и имеет непосредственную связь с интегрированной средой разработки приложений Delphi. В VCL содержатся не визуальные и визуальные компоненты, а так же другие классы, начиная с абстрактного класса TObject. При этом все компоненты являются классами, но не все классы являются компонентами.       Все классы VCL расположены на определенном уровне иерархии и образуют дерево (иерархию) классов.

 

 

Тема 2.5 Создание собственных компонентов

1. Основные этапы создания компонент. Выбор базового класса.

2. Создание модуля компонента.

3. Тестирование и установка компонента.

4. Ресурсы компонента.










Последнее изменение этой страницы: 2018-04-12; просмотров: 272.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...