Слайд 1“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Метод
в ООП
Методи (Method) класу (процедури і функції, оголошення яких включено
в опис класу) виконання деяких дій над об’єктами класу (що характеризує поведінку об’єктів). Для того щоб метод був виконаний, необхідно вказати ім’я об’єкту і методу, відокремивши ім’я від методу точкою. Наприклад, інструкція
викликає застосування метода ShowInfo до об’єкта boss. Фактично інструкція застосування методу до об’єкта - це специфічний спосіб запису інструкції виклику процедури.
Методи класу визначаються в програмі так само, як і звичайні процедури і функції, за виключенням того, що ім’я процедури або функції, що є методом, складаються з двох частин: імені класу, якому належить метод, і імені метода. Ім’я класу від імені метода відокремлюється точкою.
Нижче в лістінгу 1 наведений приклад визначення метода showinfo класу TPersonal.
Слайд 2“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Слайд 3“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
unit
UnitMain_OOP;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TFMainOOP = class(TForm)
EdName: TEdit;
EdGrupDep: TEdit;
GroupBox1: TGroupBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
LblName: TLabel;
LblGrupDep: TLabel;
BtnAddList: TButton;
BtnViewList: TButton;
MemViewList: TMemo;
procedure BtnAddListClick(Sender: TObject);
procedure BtnViewListClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Слайд 4“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
type
// базовий клас
TPerson = class
fName:
string; // имя
constructor Create(name:string);
function info:string; virtual;
end;
// клас Студент
TStud = class(TPerson)
fGr:integer; // номер групи
constructor Create(name:string;gr:integer);
function info:string; override;
end;
// клас Викладач
TProf = class(TPerson)
fdep:string; // назва кафедри
constructor Create(name:string;dep:string);
function info:string; override;
end;
const
SZL = 100; // розмір списка
var
FMainOOP: TFMainOOP;
List: array[1..SZL] of TPerson; // список
n:integer = 0; // кіл-сть людей в //списку
Implementation
Слайд 5“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
constructor
TPerson.Create(name:string);
begin
fName := name;
end;
constructor TStud.Create(name:string;gr:integer);
begin
inherited create(name); // викликати
//конструктор базового класу
fGr := gr;
end;
constructor TProf.create(name:string; dep:string);
begin
inherited create(name); // викликати
//конструктор базового класу
fDep := dep;
end;
function TPerson.Info:string;
begin
result := fname;
end;
function TStud.Info:string;
begin
result := fname + ' гр.' + IntToStr(fGr);
end;
function TProf.Info:string;
begin
result := fname + ' каф.' + fDep;
end;
Слайд 6“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
//
Клік на кнопці Додати
procedure TFMainOOP.BtnAddListClick(Sender: TObject);
begin
if n < SZL then
begin
// додати об'єкт в список
n:=n+1;
if Radiobutton1.Checked
then // створити об'єкт TStud
List[n]:=TStud.Create(Edit1.Text,StrToInt(Edit2.Text))
else // створити об'єкт TProf
List[n]:=TProf.Create(Edit1.Text,Edit2.Text);
// очистити поля вводу даних
Edit1.Text := '';
Edit2.Text := '';
Edit1.SetFocus; // курсор в полі Прізвище
end
else ShowMessage('Список заповнений!');
end;
Слайд 7“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
procedure
TFMainOOP.BtnViewListClick(Sender: TObject);
var
i:integer; // индекс
st:string; // список
begin
for i:=1
to SZL do
if list[i] <> NIL then st:=st + list[i].info + #13;
MemViewList.Lines.Add(st+#13);
//ShowMessage('Список'+#13+st);
end;
end.
Слайд 8“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Слайд 9“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Основні
принципи об’єктно-орієнтованого програмування
Інкапсуляція і властивості об’єктів
Інкапсуляція (Encapsulation) - це механізм,
що об’єднує дані і методи їх обробки, а також захищає від зовнішнього втручання або неправильного використання. В об’єктно-орієнтованому програмуванні методи і дані можуть бути об’єднанні разом; в цьому випадку кажуть, що створюється «чорна скриня».
В середині об’єкта методи і дані можуть бути закритими. Закриті методи або дані доступні тільки для інших частин цього об’єкта. Таким чином, закриті коди і дані недоступні для тих частин програми, які існують назовні об’єкта. Якщо методи і дані є відкритими, то, не дивлячись на то що вони задані в середині об’єкта, вони доступні для інших частин програми. Характерною є ситуація, коли відкрита частина об’єкта використовується для того, щоб забезпечити контролюємий інтерфейс закритих елементів об’єкта.
Слайд 10“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №3
Властивість
(Property) об’єкта - характеристика об’єкта, яка визначається полем, що зберігає
значення властивості, і двома методами, що забезпечують доступ до поля властивості. Метод встановлення значення властивості називається методом запису властивості (write), а метод отримання значення властивості - методом читання властивості (read).
В описі класу перед ім’ям властивості записують слово property (властивість). Після імені властивості вказується його тип, потім - імена методів, що забезпечують доступ до значення властивості. Після слова read вказується ім’я метода, що забезпечує читання властивості, після слова write – ім’я метода, що відповідає за запис властивості. Якщо не треба обрабки при запису або читанні властивостей, то можна вказувати ім’я поля після ключевих слів write і read.
Нижче в лістінгу 2 наведений приклад опису класа TPersonal, що містить дві властивості: Name і Age.
Слайд 11“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №3
Лістінг
Приклад опису класу, що містить властивості Name и Age
Слайд 12“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Зовнішне
застосування властивостей в програмі нічим не відрізняється від використання полів
об’єкта. Однак між властивостями і полями об’єкта існує принципова відмінність: при присвоєнні і читанні значення властивості автоматично викликається процедура (функція), яка виконує деяку роботу. Наприклад, інструкція
насправді буде перетворена компілятором в інструкцію виду:
В програмі, на методи властивості можна покласти деякі додаткові задачі. Наприклад, за допомогою метода можна перевірити коректність значень що присвоюється властивості, встановити значення інших полів, що логічно зв’язані з властивістю, викликати додаткову процедуру і т.п.
Слайд 13“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Оформлення
даних об’єкта як властивості дозволяє обмежити доступ до полів, що
зберігає значення властивостей об’єкта, наприклад можна дозволити тільки читання. Для того щоб інструкції програми не могли змінити значення властивості, в описі властивості треба вказати лише ім’я метода читання. Спроба присвоїти значення властивості, що призначена тільки для читання, викликає помилку часу компіляції.
В наведеному попередньо описі класу TPersonal властивість Name доступно тільки для читання, а властивість Age - для читання і запису.
Встановити значення властивості, захищеного від запису, можно під час ініціалізації об’єкта (під час виклику конструктора).
Повний текст програми (з описом конструктора, процедур і функцій) наведений в лістінгу 3(в додатку).
Слайд 14“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Концепція
об’єктно-орієнтованого програмування передбачає можливість визначати нові класи за допомогою додавання
полів, властивостей і методів до вже існуючих класів. Такий механізм отримання нових класів називається новоутворенням. При цьому новий, новоутворений клас (називається нащадком) успадковує властивості і методи свого базового, батьківського класу.
Спадкування
Слайд 15“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Таким
чином спадкування (Inheritance) – це процес, за допомогою якого один
об’єкт може отримувати властивості іншого. Об’єкт може успадковувати основні властивості іншого об’єкта і добавляти до них риси, характерні тільки для нього. Спадкування є важливим, оскільки воно дозволяє підтримувати концепцію ієрархії класів. Використання ієрархії класів робить керованими великі потоки інформації. Наприклад, представимо опис житлового будинку. Будинок - це частина загального класу, що називається будова. З іншого боку, будова - це частина більш загального класу - конструкції, що є частиною ще більш загального класу об’єктів, який можна назвати творінням рук людини. В кожному випадку новоутворений клас успадковує всі властивості що пов’язані з батьком і додає до них свої власні, характеристики. Без використання ієрархії класів для кожного об’єкта необхідно було задати всі характеристики, які би його визначали. Однак при використанні спадкування можна описати об’єкт шляхом визначення того спільного класу (або класів), до якого від відноситься, з тими спеціальними рисами, які роблять об’єкт унікальним.
Слайд 16“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
При
оголошенні класу-нашадка вказують клас батька.
Наприклад, клас TEmployee (конкретний співробітник компанії)
може бути утворений від розглянутого попередньо класу TPersonal шляхом додавання поля FDepartment (відділ). Оголошення класу TEmployee в цьому випадку може бути, як показано в лістінгу .
Лістінг Оголошення класу-нашадка TEmployee
Слайд 17“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Ім’я
класу Tpersonal, що заключено в дужки показує, що клас Temployee
є похідним від класу TPersonal. В свою чергу клас TPersonal є базовим для класу TEmployee.
Клас TEmployee повинен мати свій власний конструктор, який забезпечує ініціалізацію класа-батька і своїх полів. В лістінгу 4.8 наведений приклад реалізації конструктора класу TEmployee.
Лістінг Конструктор для класу Temployee
Слайд 18“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
В
наведеному прикладі директивою inherited викликається конструктор батьківського класу. Після цього
присвоювання значення полю класу-нащадка.
Після створення об’єкта похідного класу в програмі можна використовувати поля і методи батьківського класу. В лістінгу (в додатку 2) наведений текст програми, демонструє цю можливість.
Слайд 19“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Директива
inherited вказує компілятору, що треба викликати метод базового (батьківського) класу
з тим самим ім’ям, що і метод, в якому вона вказана. При цьому якщо сигнатура методів батьківського класу і його нащадків співпадає (нагадаємо, що сигнатурою методу є його ім’я і набір параметрів), то вказувати повний формат виклику не треба. Наприклад, створимо нащадка класу TEmployee, який відрізняється від свого батька тільки тим, що при виклику конструктора зразу викликається повідомлення з інформацією з полей об’єкта:
Слайд 20“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Директива
inherited вказує компілятору, що треба викликати метод базового (батьківського) класу
з тим самим ім’ям, що і метод, в якому вона вказана. При цьому якщо сигнатура методів батьківського класу і його нащадків співпадає (нагадаємо, що сигнатурою методу є його ім’я і набір параметрів), то вказувати повний формат виклику не треба. Наприклад, створимо нащадка класу TEmployee, який відрізняється від свого батька тільки тим, що при виклику конструктора зразу викликається повідомлення з інформацією з полів об’єкта:
Слайд 21“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Директива
inherited вказує компілятору, що треба викликати метод базового (батьківського) класу
з тим самим ім’ям, що і метод, в якому вона вказана. При цьому якщо сигнатура методів батьківського класу і його нащадків співпадає (нагадаємо, що сигнатурою методу є його ім’я і набір параметрів), то вказувати повний формат виклику не треба. Наприклад, створимо нащадка класу TEmployee, який відрізняється від свого батька тільки тим, що при виклику конструктора зразу викликається повідомлення з інформацією з полів об’єкта:
Слайд 22“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Як
бачимо, в конструкторі вказується директива inherited, a компілятор сам підставляє
за нею виклик конструктора батьківського об’єкта з правильними параметрами.
При розгляді лістінгу 4.9, а точніше – опису об’єкта TPersonal і реалізації його конструктора - може виникнути наступне питання: чому, в описі об’єкта відсутне вказівка класу-батька, а в конструкторі ми звертаємось до конструктора базового класу?
Справа в тому, що в Delphi всі класи вибудувані в єдину ієрархію, на вершині якої стоїть клас TObject. Коли при описі класу пропускається вказівка його батька, то в цьому випадку компілятор рахує, що батьком такого класу є TObject.
Слайд 23“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
З
попереднього прикладу ми, побачили одну важливу особливість.
Клас TEmployee успадковує
метод Showlnfo класу TPersonal, але даний метод для класу TEmployee не дуже корисний, в зв’язку з тим що відображається тільки частина інформації – ім’я і вік. Бажано, щоб, при використанні даного методу для класу TEmployee відображалася повна інформація – ім’я, вік та відділ. Така заміна методів при відсутності зовнішніх відмінностей у викликах може бути реалізована за допомогою третьої концепції ООП - поліморфізма.
Поліморфізм
Слайд 24“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Поліморфізм
(Polymorphism) - це можливість використовувати однакові імена для методів, що
входять в різні класи. Концепція поліморфізму забезпечує у випадку використання методів до об’єкту використання саме того методу, який відповідає класу об’єкта.
З попереднього прикладу в нас визначені два класи: TPersonal і TEmployee, причому перший є базовим для другого.
В базовому класі визначений метод Showlnfo, що забезпечує вивід інформації (ім’я і вік) про співробітника на екран. Щоб дочірній клас (нащадок) міг використовувати метод з тим самим ім’ям, зміст якого складали би деякі інші дії, даний метод в базовому класі треба оголосити з директивю virtual. Оголошення методу віртуальним дає можливість дочірньому класу здійснити заміну віртуального методу своїм власним. Нижче в лістінгу 4.10 наведений приклад опису базового класу з використанням директиви virtual.
Слайд 25“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Лістінг
4.10 Метод showinfо оголошений в базовому класу як віртуальний
Слайд 26“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
В
дочірньому класі TEmployee також визначений свій метод Showlnfo (лістінг 4.11),
який заміщає відповідний метод батьківського класу. Метод породженого класу, що заміщає віртуальний метод батьківського класу, помічається директивою override.
Лістінг 4.11 Метод showinf о в описі класу TEmployee відмічений директивою override
Слайд 27“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Клас
визначається як список своїх членів. До членів класу відносяться його
поля (властивості) і функції (методи). Кожному члену класу можна встановити його область доступу (access control level). Область доступу члена класу визначає ділянки коду, з яких до цього члену буде можливо звертатися. У більшості об'єктно-орієнтованих мов програмування підтримуються наступні області доступу:
private (закритий, внутрішній член класу) - звернення до члена допускаються тільки з коду методів класу, в якому цей член визначений. Будь-які спадкоємці класу вже не зможуть отримати доступ до цього члену;
protected (захищений, внутрішній член ієрархії класів) - звернення до члена допускаються з коду методів класу, в якому цей член визначений, або з будь-яких його класів-спадкоємців;
public (відкритий член класу) - звернення до члена допускаються з будь-якого коду.
Директиви protected, private, public
Слайд 28“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Зазвичай
в секцію protected розміщують опис методів класу.
Елементи класу, оголошенні в
секції private, видимі тільки всередині модуля. Ці елементи не доступні за межами модуля, навіть в похідних класах. Зазвичай в секції private розміщають опис полів класу, а методи, забезпечують доступ до цих полів, розміщують в секцію protected.
В тих випадках, коли необхідно повністю скрити елементи класу, виділення класу необхідно помістити в окремий модуль, а в програму, яка використовує об’єкти цього класу, розмістити в секції uses вказати посилання на цей модуль.
Директиви protected, private, public
Слайд 29“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Директиви
published, automated
Директива published схожа на інші атрибути видимості тим,
що вона може зустрічатися тільки в оголошенні типу класу. Опубліковане (published) поле або метод може використовуватися не тільки під час виконання програми, але і під час її розробки. Усі компоненти в палітрі компонентів Delphi мають у своєму розпорядженні published-інтерфейс, що використовується в першу чергу інспектором об’єктів. Правила видимості для директиви published – ті ж, що і для public.
Директива automated уведена тільки для сумісності для з Delphi 2.
Слайд 30“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Для
розділення доступу до властивостей і методів екземплярів класів між різними
частинами програми передбачені модифікатори доступу («видимості»), приведені в табл. 5.1.
Модифікатор доступу в Delphi (як і в Pascal, але на відміну від деяких інших мов програмування) відноситься не до конкретної властивості або методу класу, а до всіх елементів класу (властивостям і методам), опис яких розташовується після вказівки модифікатора. Один і той же модифікатор може указуватися в описі класу більше одного разу.
Області видимості елементів класу
Слайд 31“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2012
Лекція №4
Області
видимості елементів класу
Порівняльна таблиця модифікаторів доступу в Pascal і Delphi
Таблиця 5.1
Слайд 32“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2012
Лекція №4
Стандартний
опис класу містить властивості і методи, розташовані в порядку зростання
їх видимості, але це правило не є обов'язковим.
Слайд 33“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Різні
області видимості властивостей і методів об'єкту призначені для спрощення підтримки
цілісності інформації в об'єктах. Розглянемо клас, в якому містяться три властивості, — а, b і c, причому c є добутком а і b. Якщо властивості а, b і с матимуть широку область видимості public, тобто будуть доступні з будь-якого фрагмента програми, то об'єкт — екземпляр такого класу може містити некоректні дані, оскільки існує можливість зміни властивостей а і b без перерахунку властивості с. Для виходу з такої ситуації можна запропонувати два підходи, і обидва вони зв'язані з використанням областей видимості властивостей об'єкту.
Перший підхід (див. лістинг 5.5) полягає в тому, щоб приховати властивості а і b від викликаючих підпрограм, призначивши ним вузькі області видимості, наприклад private або protected. Вибір того або іншого модифікатора визначається необхідністю використання приховуваних властивостей в класах-нащадках даного класу. Якщо такої необхідності немає, то призначається область видимості private, якщо об'єкти-нащадки повинні мати прямий доступ до властивостей, то призначається область видимості protected.
Слайд 34“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2012
Лекція №4
У
будь-якому випадку, зовнішні підпрограми не зможуть звернутися до властивостей а
і b тому доведеться передбачити методи, які їх встановлюють. У цих методах, крім установки значень властивостей, повинен проводитися перерахунок властивості с. Це гарантуватиме цілісність даних об'єкту при зміні властивостей а і b.
Відмітимо, що методи установки повинні мати широку область видимості, щоб до них можна було звернутися з будь-якого місця програми.
Слайд 35“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Слайд 36“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
При
такій конструкції класу викликаюча підпрограма не зможе змінити значення властивостей
а і b, не вплинувши тим самим на значення властивості c, тому цілісність даних не буде порушена. Проте властивість c доступно для зміни, навіть якщо її значення перераховане при установці значень а і b. У результаті воно може змінитися, викликавши невідповідність даних. Таким чином, краще було б приховати властивість, реалізувавши спеціальний метод доступу до його значення (лістинг 5.6).
Слайд 37“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
При
такій конструкції класу цілісність даних не може бути на рушиться
викликаючими підпрограмами, якщо тільки вони не знаходяться в одному модулі з описуваним класом, тобто, в даному випадку, в модулі UsingPrivate2. Єдиним недоліком такого підходу є постійний перерахунок значення с при кожному зверненні до методу GETC. Тому найбільш оптимальним варіантом рішення наший завдання буде заховання всіх властивостей класу і реалізація методів доступу до них через методи (див. лістинг 5.7).
Слайд 38“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Слайд 39“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Класи
дуже зручно збирати в модулі. При цьому їх опис поміщається
в секцію interface, А код методів – в секцію implementation. Employee Створюючи модулі класів, потрібно дотримуватися наступних правил:
всі класи, призначені для використання за межами модуля, слід визначати в секції interface;
опис класів, призначених для вживання усередині модуля, слід розташовувати в секції implementation;
якщо модуль B використовує модуль A, то в модулі B можна визначати класи, породжені від класів модуля A.
Класи в програмних модулях
Слайд 40“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Класи
розробляються для досягнення певної мети. Найчастіше програміст починає з нечітко
обкресленої ідеї, яка поступово, у міру розробки проекту, поповнюється деталями. Іноді справа закінчується декількома класами, вельми схожими один на одного. Щоб уникнути подібного дублювання код в класах, слід розбити їх на дві частини, визначивши загальну частину в батьківському класі, а що відрізняються залишити в похідних. Оголошення класу повинне передувати його використанню. Як правило, прикладний програміст користується готовими базовими класами, причому йому зовсім не обов'язково розбиратися у всіх специфікаціях і у внутрішній реалізації. Проте, щоб використовувати базовий клас, треба обов'язково знати які члени даних і методи доступні.
Розробка класів
Слайд 41“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Мова
Delphi дозволяє розглядати класи об'єктів як свого роду об'єкти, якими
можна маніпулювати в програмі. Така можливість народжує нове поняття – клас класу; Його прийнято позначати терміном метакласи.
Для підтримки метакласи введений спеціальний тип даних – посилання на клас (class reference). Він описується за допомогою словосполучення class of, Наприклад:
Посилання на класи
Змінна-об'єкт, екземпляр об'єкту в пам'яті, змінна-клас і екземпляр класу в пам'яті
Слайд 42“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Посилання
на класи
Змінна типу TTextReaderClass оголошується в програмі звичайним чином:
Значеннями
змінної ClassRef можуть бути клас TTextReader і всі породжені від нього класи. Можливі наступні оператори:
За аналогією з тим, як для всіх класів існує загальний предок TObject, у посилань на класи існує базовий тип TClass, визначений, як:
Змінна типу TClass може посилатися на будь-який клас. Практична цінність посилань на класи полягає в можливості створювати програмні модулі, що працюють з будь-якими класами об'єктів, навіть тими, які ще не розроблені.
Слайд 43“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Клас
- Деяка абстракція сукупності об'єктів, які мають загальний набір властивостей
і мають однакову поведінку, і визначається як список своїх членів. В об'єктно-орієнтованому програмуванні, класи використовуються для групування пов'язаних змінних та функцій. Клас описує набір інкапсульованих змінних екземпляра та методів (функцій), можливо, разом з реалізацією цих типів разом з конструктором, який може використовуватись для створення екземплярів класа.
Клас є зв'язанним пакетом, який складається із спеціальних метаданих часу компіляції. Він описує правила за якими діють об'єкти; ці об'єкти називаються "екземплярами" цього класа. Клас визначає структуру даних, що містить кожний екземпляр, і, також, методи (функції) які обробляють дані екземпляра та виконують завдання; ці методи часто називають "поведінкою". Метод є функцією, що має доступ до даних об'єкта. Клас є найспецифічнішим типом даних об'єкта по відношенню до окремого прошарку. Клас може мати представлення (метаоб'єкт) під час виконання програми, який надає допомогу в роботі з метаданими класа.
Слайд 44“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Клас
визначає абстрактні характеристики деякої сутності, включаючи характеристики самої сутності (її
атрибути або властивості) та дії, які вона здатна виконувати (її поведінки, методи або можливості). Наприклад, клас Собака може характеризуватись рисами, притаманними всім собакам, зокрема: порода, колір хутра, здатність гавкати. Класи вносять модульність та структурованість в об'єктно-орієнтовану програму. Як правило, клас має бути зрозумілим для не-програмістів, що знаються на предметній області, що, у свою чергу, значить, що клас повинен мати значення в контексті. Також, код реалізації класу має бути досить самодостатнім. Властивості та методи класу, разом називаються його членами.
Слайд 45“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4
Базовий
(батьківський) клас
Похідний клас (спадкоємець, нащадок)
Абстрактний (віртуальний) клас
Абстрактні
(abstract) методи і класи тільки оголошуються, клас який містить абстрактні методи повинен оголоситися як абстрактний. На основі абстрактного класу можна тільки створювати інші класи, а вже від них об'єкти. Абстрактний клас може містити і звичайні (не абстрактні) елементи.
Види класів
Слайд 46Питання:
Інкапсуляція і властивості об’єктів.
Спадкування.
Поліморфізм.
Директива protected.
Директива private.
Директива public.
Директива published.
Директива automated.
Області видимості
елементів класу.
Види класів.
“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В.
2014
Лекція №4
Слайд 47 Література:
Гради Буч Обьектно-ориентированный анализ и
проектирование с примерами приложений на С++. 2002 г. - 250
с.
Миронченко А.С. Императивное и обьектно-ориентированое программирование на Turbo Pascal и Delphi.
Т.А. Павловская Паскаль. Программирование на языке высокого уровня.: Учебник для вузов. – СПб.: Питер, 2007. -393 с. Ил.
Архангельский А.Я. Программирование в Delphi для Windows. Версии 2006, 2007, Turbo Delphi, 2007 г. - 1248 с.
Гофман В. Э., Хомоненко А. Д. Delphi. Быстрый старт. — СПб.: БХВ-Петербург, 2003. — 288 с: ил.
Шупрута В.В. Delphi 2005. Учимся программировать.
“Застосування засобів ООП в лінгвістичних задачах” Корпильов Д.В. 2014
Лекція №4