Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AEP_LEKTsII.doc
Скачиваний:
90
Добавлен:
28.03.2015
Размер:
1.27 Mб
Скачать

15.2 Объекттер және олардың негізгі қағидалары

Паскальдағы Объект – ол жазба (record) құрылымын жалпылайтын түрлі типті деректердің өрістерін және әдістердің тақырыптарын қамтитын деректер құрылымы:

<ҰрпақтыңАталуы>= objесt<ТегініңАталуы> өріс;… әдіс;…. әдіс; end;

Жазбаға қарағанда өбъекттің өрістері деректермен қатар осы деректерді өндейтін әдістер де бола алады.

Әдіс – ол объеттің сипаттау бөлімінде жарияланған процедуралар немесе функциялар:

procedure <Тақырып>(<Параметр1>, <Параметр2>:integer);

Әдіс объекттің деректер өрістерін оған параметрлер түрде жіберуді талап етпей оларға қол жеткізе алады. Объектілі типтің жариялау бөлімінің ішінде әдісті жариялау тек тақырыпты қамтиды. Әдістің тұлғасы объекттен тыс анықталады. Оның тақырыбы әдісті қамтитын объекттің аталуын қамтуы тиіс. Мысалы:

procedure <ОбъектТипі.Әдіс>

(<Параметр1>, <Параметр2> : integer);

begin

….

end;{Әдіс}

Әдістерді статикалық және виртуалдыларға жіктейді. Виртуалды әдістің статикалықтан айырмашылығы оны жүзеге асырушы код орындалатын программаға компиляциялау үрдіс барысында емес орындалу барысында қосылады, ол кеш байланыстыру деп аталатын үрдіс арқылы жүзеге асырылады. Бұл әдістерінің атаулары бірдей бырақ әртүрлі кодтар арқылы жүзеге асырылатын объекттердің иерархиясын құруға мүмкіндік береді:

procedure <Әдіс> (<Параметр1>, <Параметр2> : integer) : virtual;

Кәдімгі процедуралар мен функциялар қатар Паскаль әдістердің екі арнайы типтерін жүзеге асырады:

  • конструктор – виртуалды әдістерді қамтитын объектті инициализациялайтын арнайы әдіс, ол constructor сөзі арқылы жарияланады; конструктор объект пен виртуалды әдістерді жүзеге асырушы кодтардың адрестерін қамтитын виртуалды әдістердің арнайы кестесі арасындағы байланыстарды орнату арқылы объектті инициализациялайды; конструктор сонымен қатар объекттің деректер өрістерін инициализациялау үшін де пайдаланылуы мүмкін;

  • деструктор – ол жадыны «үйінділерді» динамикалық объекттерден босататын арнайы әдіс, ол destructor сөзі арқылы жарияланады.

Объекттің негізгі ерекшеленетін қасиеттері:

  • инкапсуляция – жазбаларды осы жазбалармен жұмыс жасайтын процедуралар және функциялармен біріктіру;

  • мұрагерлік – объектті беру, одан кейін оны туындылаған объекттер иерархиясын құру үшін пайдалану, туындылаған әр объект тегінің кодына және деректеріне қол жеткізуге мұрагерленеді;

  • полиморфизм – объекттер иерархиясы бойынша жоғарыға және төменге беріле беретін амалға бір атау беру, бұл амал иерархиядағы әр объектке сәйкес болатын тәсіл арқылы жүзеге асырылады.

Аталған қасиеттердің әрқайсысының мағынасын дисплейдің экранында түрлі түсті нүктелерді (жұлдызды аспанды) құру мысалында қарастырайық.

Инкапсуляция. Есепті шешудің негізі X және Y координаталары арқылы сипатталатын жеке нүктенің экранда орналасқан орнын (позициясын) беру болып табылады. Координаталарды беру үшін «жазба» тип лайықты:

Pozition = record

X, Y: integer;

end;

Одан кейін координаттардың мәндерін беру қажет болуы мүмкін (мұндай процедура инициализациялау деп аталады). Сәйкесінше процедураны құрайық:

procedure Init(CoordX, CoordY : integer);

begin

X: = CoordX;

Y: = CoordY;

end;

Одан кейін координаттардың нақты мәндерін беру қажет. Ол үшін екі функцияны ендіреміз:

function GetX: integer;

begin

GetX : = X;

end;

function GetY:integer;

begin

GetY : = Y;

end;

Біздің ойымыз бойынша Init процедура және GetX пен GetY функциялары тек Pozition жазбаның өрістерімен ғана жұмыс жасауы тиіс. Объекттерді ендіру өрістерді де оларға қолданылатын амалдарды да бірыңғай конструкцияда жариялап, осы ережені бекітуге мүмкіндік береді:

Pozition = object

X, Y: integer;

procedure Init(CoordX, CoordY: integer);

function GetX: integer;

function GetY: integer;

end;

Init процедура және GetX пен GetY функциялары Pozition объекттің әдістері болып табылады. Pozition типті экземплярды инициализациялау үшін ол жазбаның өрісі болғандай оның әдісін шақыру жеткілікті:

var

FirstPozition : Pozition;

….

FirstPozition.Init(10,15);

Әдіс дәл процедура сияқты модульде беріледі: объекттің ішінде тақырып жазылады (модульдің Interface секциясындағы сияқты); бұл кезде әдіс пайдаланатын барлық өрістер әдісті жариялаудың алдында болуы тиіс. Әдісті анықтау (амалда расшифровкалау) объектті жариялаудан тыс орындалады. Әдістің аталуы оны қамтитын объект типінің аталуынан басталуы тиіс, екеуінің арасына нүкте қойылады. Мысалы:

procedure Pozition.Init(CoordX, CoordY: integer);

begin

X: = CoordX;

Y: = CoordY;

end;

Әдістің формальды параметрлерінің атаулары объекттің деректер өрістерінің атауларымен сәйкес болмауы мүмкін емес.

Модуль тұтынушыдан процедураларды жүзеге асыру детальдарын жасыратындай объект те өз өрістері мен әдістерін жасыра алады. Ол үшін private (дербес) кілттік сөз пайдаланылады. Дербес өрістер мен әдістерге тек объекттің ішінен ғана қол жеткізуге болады. Жариялау түрі келесідей:

type

ObjectName=object

өріс;… өріс; әдіс;… әдіс;

private

өріс;… өріс; әдіс;… әдіс;

end;

Мұрагерлік. Координаталары X және Y болатын нүктені қарастырайық. Оны көрінетін немесе көрінбейтін етуге болады, оған түс беруге, оны жылжытуға болады. Осындай мүмкіндіктерге ие болатын объектті құрайық:

Point=object

X,Y: integer;

procedure Init(CoordX, CoordY: integer);

function GetX: integer;

function GetY: integer;

Visible: Boolean;

Color: Word;

procedure Init(CoordX, CoordY: integer; initColor: word);

function Is Visible: Boolean;

procedure Show;{нүктені көрсетеді}

procedure Blind;{нүктені өшіреді}

procedure Jump(NextX, NextY : integer);{нүктені жылжытады}

end;

Бырақ, X,Y өрістері мен GetX, GetY әдістері Pozition объекттің сәйкесінше өрістері және әдістерімен дерлік сәйкес болатындығына назар аударайық. Паскаль мұндай жағдайды ескеруге мүмкіндікті ұсынады. Point объекттің типі Pozition типінен туындылаған деп санау керек, оны келесі түрде жазып:

Point=object(Pozition)

Visible:Boolean;

Color:Word;

procedure Init(CoordX, CoordY: integer; InitColor: Word);

function Is Visible: Boolean/procedure Show;

procedure Blind;

proceduro Jump(NextX, NextY: integer);

end;

Point объектті енді Pozition объекттің қасиеттерін мұра етеді. X,Y өрістері Point-та айқын түрде берілмеген, бырақ мұрагерліктің арқасында Point оларға ие болады, демек: Point.X:=17 деп жазуға болады. Объектіге-бағытталған программалаудың мағынасы объекттің өрістерімен оның әдістері арқылы жұмыс жасауда.

Полиморфизм. «дөңгелек» объектті құру керек болсын дейік. Жаңа объект Point объекттің барлық қасиеттеріне ие болып оған тегі ретінде ие болуы тиіс екендігі айқын, сонымен қатар, ол өлшемі бойынша үлкендеу болуы тиіс. Бырақ, нүкте мен боялған шеңберді бірдей бір командалар арқылы «жарықтандыру» мүмкін емес екендігі анық. Турбо-Паскаль аналық әдістің аталуын «үстінен жауып» ұрпаққа сақтауға рұқсат етеді. Аналық әдісті «үстінен жабу» үшін оның аталуын өзгертпей, бырақ басқа тұлғамен (кодпен) және қажет болса параметрлердің басқа жиынтығымен беру керек. Мұндай әдіс виртуалды болады және оның жариялануына virtual сөзі қосылады. Виртуалды әдістерді пайдалану резервтелген constructor сөзі арқылы жазылуы және ортақ Init атауға ие болуы тиіс болатын инициализациялау процедураларына шектеулер қояды. Объекттің әр жеке экземпляры конструкторды жеке жақыру арқылы инициализациялануы тиіс. Динамикалық таралған объекттерді тазалау және жою үшін арнайы destructorDone процедурасы бар. Деструктор «үйіндідегі» жадыны босату қадамын кейбір басқа есептермен құрамдастырады. Деструктордың әдісі бос болуы мүмкін, себебі жұмысты тек кодтың тұлғасы ғана емес резервтелген destructor сөзіне қайтарым ретінде Турбо-Паскаль генерациялайтын код та орындайды.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]