Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Об’єктно-орієнтоване програмування(ООП).doc
Скачиваний:
5
Добавлен:
18.09.2019
Размер:
128 Кб
Скачать

5.Наслідування як один з основних принципів об’єктно-орієнтованого програмування.

Наслідування – цей принцип означає, що при створенні нового класу, який лише трохи відрізняється від попереднього, не потрібно переписувати існуючі поля та методи, потрібно обявити що новий клас є нащадком попереднього класу.

TNewObject=class(TOldObject)

Старий клас називається батьківським класом, потрібно ще додати нові поля, методи і властивості. Всі класи є потомками TObject

Клас може мати утворені від нього підкласи. При побудові підкласів здійснюється спадкування даних і методів обробки об'єктів вихідного класу. Механізм спадкування дозволяє чи перевизначити додати нові дані та методи їх обробки, створити ієрархію класів.

Наслідування – це принцип, згідно якого клас-нащадок наслідує таку саму структуру даних та методів (поведінку), що і у його предка

Поняття класу приводить нас до поняття наслідування. В повсякденному житті ми часто стикаємося з розбиттям класів на підкласи: наприклад, клас “хордові” можна розбити на підкласи риби, земноводні, плазуни, птахи, ссавці. Клас “міський транспорт” поділяється на підкласи трамваї, тролейбуси, автобуси, метро, таксі тощо. Принцип, покладений в основу такого ділення, полягає в тому, що кожен підклас володіє властивостями, притаманними тому класу, з якого виділений даний підклас. Крім тих властивостей, які є загальними для класу та підкласу, підклас може володіти й власними властивостями.

В програмуванні клас також може породити безліч підкласів. Ця можливість називається наслідуванням. Наслідування – це можливість, яка дозволяє одному класу наслідувати властивості іншого. Роль наслідування в ООП – скоротити розмір коду та спростити зв’язки між елементами програми.

6.Поліморфізм як один з основних принципів об’єктно-орієнтованого програмування.

Поліморфізм - здатність об'єкта реагувати на запит (виклик методу) згідно своєму типу, при цьому те саме ім'я методі може використовуватися для різних класів об'єктів.

Поліморфізм означає залежність поведінки від класу, в якому ця поведінка викликається, тобто, два або більше класів можуть реагувати по різному на однакові повідомлення. Наприклад, якщо Собака отримує команду голос(), то у відповідь можна отримати Гав; якщо Свиня отримує команду голос (), то у відповідь можна отримати Хрю.

Поліморфізм – це принцип, коли одне і те ж імя може означати об’єкти різних типів, але, оскільки їх класи мають одинакового предка, то такі об’єкти мають спільну сукупність операцій, що можна над ними виконувати.

Поліморфізм Поліморфізм означає залежність поведінки від класу, в якому ця поведінка викликається, тобто, два або більше класів можуть реагувати по різному на однакові повідомлення. Наприклад, якщо натиснути на сигнал в машині, то у відповідь можна отримати якийсь звук; якщо в посигналити в простій машині то (), а якщо посигналити в міліцейській машині то почуємо сирену.

7.Основні методи класу TObject

У відповідності до того, які дії відбуваються при виклику методи поділяються на 3 групи

  1. Статичні – ці методи можна без обмежень перекривати старі імена і при цьому змінювати тип методів. Код нового статичного методу повністю перекриває, заміняє собою код старого статичного методу.

  2. Віртуальні та динамічні методи повинні бути обявленими за допомогою додавання директиви virtual або відповідно dynamic. З точки зору наслідування віртуальні і динамічні методи тотожні, вони можуть бути перекритими в дочірньому класі лише одноіменними методами, які мають той же тип. Різниця між вірт і динам методами полягає в особливості пошуку адреси, є таблиці віртуальних методів Virtual Method Table(VMT) і таблиця динамічних методів Dynamic Method Table (DMT).

  3. Перезаванатжувальні overlot – ними можуть бути статичні, віртуальні і динамічні. Вони потрібні для того щоб виконати однакові або схожі дії з даними різних типів. Для перекриття вірт і динам але не статичних методів служить директива override.

  4. Абстрактні методи – це методи, які не визначені в класі, не містять ніяких дій, ніколи не викликаються і обоаязково повинні бути перевизначені в нащадках коасу. Абстрактними можуть бути лише віртуальні або/та/ динамічні методи.

Class function:

className: shortstring – метод повертає імя класу

classNamets(const Name:string):boolean- повертає Істина якщо імя класу співпадає із заданим

classParent:Tclass- повертає вказівник на батьківський клас

classInfo:Pointer – повертає вказівник на структуру з додатковими даними про опубліковані методи і властивості

InstanceSize:LongInt – повертає номер екземпляра класу

Inheritsfrom(Aclass:Tclass):Boolean – повертає Істина, якщо даний клас наслідує від заданого параметром Aclass

Methodadress(constName:shortstring):Pointer – повертає адресу методу по його імені. Це лише для опублікованих методів

Methodname(Adress:Pointer):shortstring – повертає імя методу по його адресу. Для опублікованих методів.

У класі TObject є ще 2 віртуальні методи

AfterConstruction

BeforeConstruction

Вони викликаються відразу ж після створення екземпляру або безпосередньо перед його знищенням. Ці методи можна використовувати, якщо за якихось умов не вистачає конструктора або деструктора.

Класс TObject инкапсулирует основные функции, свойственные всем объектам Delphi. Интерфейс TObject обеспечивает:

  • возможность создания, управления и разрушения экземпляров объектов, включая выделение под них памяти, инициализацию и освобождение памяти после их уничтожения;

  • поддержку информации об объектах и типах;

  • поддержку обработки сообщений.

    Все классы в Delphi являются прямыми или косвенными наследниками TObject. Прямое наследование используется только при объявлении простых классов, объекты которых не являются компонентами, не могут присваиваться друг другу и не участвуют в операциях обмена с потоками. Подавляющее большинство классов являются косвенными наследниками TObject и образуются от производных классов. Если при объявлении нового типа объектов не указывается класс-предок, то Delphi считает TObject предком нового класса.

Во всех объектах, которые используются в программах, допустимо применять методы, определенные в классе TObject. Перечислим основные из них (таблица 1):

   

Таблица 1. Основные методы TObject

Метод

Описание

constructor Create;

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

destructor Destroy; virtual;

Деструктор. Производит действия по уничтожению экземпляра объекта. Рекомендуется вызывать не Destroy, а Free.

procedure Free;

Уничтожает объект и освобождает выделенную под него память. Автоматически вызывает Destroy, если объект существует.

class function NewInstance: TObject; virtual;

Выделяет область памяти под объект и возвращает указатель на нее. Автоматически вызывается всеми конструкторами. Использует InstanceSize. Может перегружаться в классах-наследниках.

class procedure InitInstance (Instance: Pointer) : TObject;

Инициализирует экземпляр объекта и указатель на его таблицу виртуальных методов. Вызывается автоматически методом NewInstance. Не может быть перегружен.

procedure FreeInstance; virtual;

Освобождает память, выделенную ранее методом NewInstance. Автоматически вызывается деструктором Destroy. Непосредственный вызов пользователем не требуется. Должен быть перегружен, если перегружен метод NewInstance. Использует InstanceSize для определения размера выделенной области памяти.

function ClassType: TClass;

Возвращает указатель на класс вызвавшего объекта.

class function ClassName: string;

Возвращает строку с именем класса.

class function ClassParent: TClass;

Возвращает указатель на класс-предок.

class function ClassInfo: Pointer;

Возвращает указатель на структуру, содержащую информацию о классе.

class function InstanceSize: LongInt;

Возвращает размер экземпляра объекта.

class function InheritsFrom(AClass: TClass): Boolean;

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

class function ClassNameIs(const Name: string): Boolean;

Возвращает True, если передаваемое в функцию имя совпадает с именем данного класса.

class function MethodAddress (const Name: string): Pointer;

Возвращает адрес метода вызвавшего объекта с заданным именем.

class function MethodName(Address: Pointer): string;

Возвращает имя метода с заданным адресом.

function FieldAddress (const Name: string): Pointer;

Возвращает адрес поля вызвавшего объекта с заданным именем.