Інші теоретичніі відомості більш детально викладені у трьох лекціях
Тема: Об’ктно-орієнтоване програмування мовою Turbo Рascal.
Мета роботи : Навчитись створювати об’єктові типи, користуючись основними властивостями об’єктів, та написати програму для їх використання
Об'єктно-орієнтоване програмування (ООП) - це методологія програмування, яка заснована на представленні програми у вигляді сукупності об'єктів, кожен з яких є реалізацією певного класу ( особливого вигляду типу), а класи створюють ієрархію на принципах спадкування
Три основні властивості характеризують ООП:
1. Інкапсуляція це комбінування запису з процедурами і функціями, які маніпулюють цим записом для отримання нового типу даних - об'єкта.
2. Наслідування - це визначення об'єкта і потім використання його для побудови ієрархії довільних об'єктів, причому, кожний із них ("спадкоємець") наслідує доступ до коду і даних всіх своїх "прабатьків".
3. Поліморфізм - це присвоєння методам одного і того ж імені, яке спільно використовується об'єктами всієї ієрархії, причому кожний об'єкт ієрархії реалізує цю дію своїм особистим методом, який підходить для даного об'єкта.
Об'єкт.
Формально об'єктові типи мови Turbo Pascal дуже схожі на комбіновані типи ( записи ).Іншими словами, об'єктові типи також є складеними типами, елементи (поля) яких можуть мати любий тип.
Об'єкт складається з полів (як записи) та процедур і функцій, які здійснюють різні дії, - методів - це і є першою властивістю об'єкта - інкапсуляцією.
Хороший стиль програмування з об’єктами виключає пряме звернення до їх полів.
Наприклад, для того, щоб працювати з позиціями шахової фігури, можна створити наступні методи:
Type
TColumns ='a'..'h'; { Координати на шаховій дошці}
TRows = 1..8;
{Об'єкт, який описує позицію фігури на шаховій дошці}
TPosition =object {Для формування об'єкта використовується службове слово Object}
Column : TColomns; {Інформаційні поля }
Row: TRows ;
Procedure Init (C1:TColumns; Rw:TRows ); {Методи об'єкта }
Function GetColumn : TColomns;
Function GetRow : TRows ;
end;
УВАГА! В розділі типів при осуванні об’єктних типів указуються тільки заголовки методів. Реалізація методів - їхнє тіло - розміщується у розділі опису процедур та функцій.
{Реалізація методів}
{Об'єкт TPosition}
Procedure TPosition. Init (C1: TColomns; Rw: TRows);
begin
Colomn := C1;
Row := Rw;
end;
Function TPosition. GetColomn: TColomns;
Begin
GetColomn: = Colomn;
End;
Function. GetRow: TRowss;
Begin
GetRow: =;
End;
...............................................
Важливою особливістю опису реалізації методів є те, що доступ до інформаційних полів Colomn і Row об’єкта та типу TPosition, до якого належать методи, які визначаються - Init, GetColomn, GetRow, здійснюється так, як би операторні блоки методів були оточені невидимим оператором With.
Приклад використання змінних об’єктового типу.
Var
KingCol: TColumns;
KingRow: TRows;
WKingPos: TPosition; {Опис змінних об’єктного типу (екземплярів)}
Begin
WKingPos. Column: ='e';
WKingPos. Row: = 1;
KingCol: = WKingPos. Column;
KingRow: =WKingPos .Row;
End.
Замість селектора можна так само використовувати аналогічно записам оператор приєднання With.
Наприклад:
Begin
With WKingPos do
Begin
Init ('e', 1);
KingCol: =Getcolemn;
KingRow: =GetRow;
End
Спадкування
Після слова object - об’єкта спадкоємця приводиться ім'я безпосереднього батька, яке береться у круглі дужки.
Наприклад TChessMan ( об'єкт, у якому описується характеристика абстрактної, узагальненої шахової фігури) - є спадкоємцем типу TPosition.
Type
TColour=(WhiteColour, BlackColour); {Колір фігури}
TChessMan =object (TPosition)
Private
Colour: TColour
Present: Boolean;
Procedure Init (C1: TColomns; Rw: TRows; BW: TColour);
Procedure Put (Name: String);
Public
Function GetColour: TColour;
Function IsPresent: Boolean;
Procedure Clear;
Procedure Del;
Procedure Display;
End;
Поле Present - присутність фігури на дошці, Colour - колір (білий або чорний) - це нові поля об’єкта - спадкоємця.
Нові методи :
Ø функція GetColour, яка повертає колір фігури:
Function TChessMan. GetColour: TColour;
Begin
GetColour: = Colour;
End;
Ø функція IsPresent , яка перевіряє присутність фігури на дошці
Function TChessMan. IsPresent: Boolean;
Begin
IsPresent: =;
End;
Ø процедура Clear , яка стирає зображення фігури на старій позиції для переміщення її на нову позицію дошки
Procedure TChessMan. Clear;
Begin
Put (' ');
ErrorMesage (' ');
End;
Ø процедура Del, яка стирає зображення фігури на екрані за допомогою виклику Clear і відмічає її як видалену з дошки;
Procedure. Del;
Begin
Clear
Present: = False;
End;
Ø процедура Display, яка висвічує зображення фігури на її поточній позиції.
Procedure TChessMan. Display;
Begin
Put ('CM');
End;
процедура Put, яка викликає метод GetCoords для перетворення шахових координат в екранні, встановлює відповідні полю і фігурі кольори і виводить зображення фігури на її поточній позиції.
Procedure TChessMan. Put (Name: String);
var
x, y : Word;
begin
GetCoords (x, y);
Goto (x, y);
if (Row +Ord(Colomn)) mod 2 = 0 then
TextBackGround (Black);
else TextBackGround (White);
case Colour of
WhiteColour : TextColor (LightRed);
BlackColour : TextColor (LightGreen);
end;
Write(Name);
end;
Методи GetCoords і ErrorMesage добавлені в об'єктний тип TPosition і разом з методом Put служать для прив'язки шахових дій і повідомлень, які виводяться до зображення фігури на екрані.
Метод GetCoords перетворює логічні шахові координати в фізичні екранні і повертає їх у точку виклику. Оскільки тип TPosition спадкується всіма шаховими фігурами, то кожна з них при виконанні ходу може перетворити свої шахові координати в екранні і після цього показувати себе на екрані.
Один із можливих варіантів реалізації методу GetCoords має вигляд:
Procedure TPosition. GetCoords (var x, y: Word) ;
const
BagX=20; BagY=23;
StepX=7; StepY=-3;
begin
X:= BagX + StepX*(Ord(Colomn)-Ord('a'));
Y:= BagY+ StepY* (Row-1);
end;
Метод ErrorMesage виводе на екран повідомлення про полмилки.
Procedure TPosition. ErrorMesage (Mes:String);
Const
BegY=23;
Begin
GotoXY (1,BegY);
TextBackGrond (Blue);
TextColor (LightRed+Blink);
Write (Mes);
End;
Опис Короля
TKing = object (TChessMan);
Procedure Init (C1: TColomns; RW: TRows; BW: TColor);
Procedure Move (C1: TColomns; RW: TRows);
Function IsMoveRight (C1: TColomns; RW: TRows): Boolean;
Procedure Display;
End;
Procedure TKing. Init (C1: TColomns; RW: TRows; BW: TColor);
Begin
TChessMan.Init (C1, Rw, BW); {Або для версії ТР70 - inherited Init(C1,Rw,BW);}
End;
Procedure TKing. Move (C1: TColomns; RW: TRows);
Begin
If IsMoveRight (C1, RW) then
Begin
Clear;
Colomn: = C1;
Row: = Rw;
Display;
End
Else ErrorMesage ('Не вірний хід!');
End;
Function TKing.IsMoveRight (C1: TColomns; RW: TRows): Boolean;
Var DeltaC1, DeltaRw: Word;
Begin
DeltaC1: =Abs (Ord (Colomn) - Ord (C1));
DeltaRw: = Abs (Row - Rw);
If (DeltaC1 >1) or (DeltaRw >1)
Or (DeltaC1 =0) or (DeltaRw =0)
Then IsMoveRight: = False
Else IsMoveRight: = True;
End;
Procedure TKing. Display;
Begin
Put ('Kg');
End;
Нові методи:
Ø процедура Move для переміщення фігури;
Ø функція IsMoveRigh для перевірки відповідності ходу, що виконується правилам переміщення конкретної фігури.
Ø процедура Display подавляє дію однойменної процедури об’єктного типу TChessMan, для того, щоб вивести на екран зображення "своєї" фігури (символ 'Kg').
Інші теоретичніі відомості більш детально викладені у трьох лекціях