Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Объекттер және олардың негізгі қағидалары
Паскальдағ ы Объект – ол жазба (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 сө зіне қ айтарым ретінде Турбо-Паскаль генерациялайтын код та орындайды.
|