Інші теоретичніі відомості більш детально викладені у трьох лекціях

Тема: Об’ктно-орієнтоване програмування мовою 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').

Інші теоретичніі відомості більш детально викладені у трьох лекціях

Наши рекомендации