Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






Паскальдағ ы Объект – ол жазба (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 сө зіне қ айтарым ретінде Турбо-Паскаль генерациялайтын код та орындайды.


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.01 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал