Студопедия

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

Разделы сайта

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






Инкапсуляция






Нысанды сипаттау барлық басқ а типтер сияқ ты сипаттау бө лімінде болу қ ажет. Нысан қ амтитын мә ліметтер нысан ө рістері деп аталады. Қ арапайым нысандық типтің сипаттамасы жазбалар сипаттамасына ө те ұ қ сас, тек record резервтелген сө зінің орнына object сө зі қ олданылады.

Type

Dot = object

a, b: integer;

end;

Бұ л 2 ө рістен тұ ратын нысандық тип, ол экранда a, b кординаталары бар нү кте болып табылады. Ө ріс тү рінде берілген мә ліметтерден басқ а нысан осы ө рістерге мү мкін ә рекеттерді сипаттайтын ішкі программмалардан тұ руы мү мкін. Мұ ндай ішкі программалар ә дістер деп аталады. Ә діс нысан ө рістеріне қ атынас жасай отырып, оғ ан параметр ретінде берілуді қ ажет етпейді. Ө зінде тек қ ана ө рістерді ғ ана емес, сонымен қ атар осы ө рістерге мү мкін ә рекеттердің сипаттамасын қ амтитын нысанның қ асиетін инкапсуляция деп атайды. Мұ нда нысанның сипатталуында тек ішкі программаның тақ ырыптары болады, ал ә рбір ішкі программаның денесі жеке кө рсетіледі. Алдың ғ ы мысалдағ ы Dot типін қ ажетті ә дістермен толық тырайық.

Type

Dot = object

a, b: integer;

procedure Init(x, y: integer);

procedure Show;

procedure Hide;

procedure Move(Da, Db: integer);

end;

{- - - - - - - - - - - - -}

Procedure Dot.Init;

Begin

a: =x; b: =y;

end;

{- - - - - - - - - - - - -}

Procedure Dot.Show;

Begin

PutPixel (a, b, white);

end;

{- - - - - - - - - - - - -}

Procedure Dot.Hide;

Begin

PutPixel (a, b, black);

end;

{- - - - - - - - - - - - -}

Procedure Dot.Move;

Begin

Hide;

a: =a+Da; b: =b+Db;

Show;

End.

 

Бұ л мысалда нысан 4 ә дістен тұ рады. Init ә дісі объектіні инициализациялайды, яғ ни нү ктеге бастапқ ы мә н береді. Show жә не Hide ә дістері экрандағ ы нү ктені «жандырады» жә не «сө ндіреді». Move ә дісі экрандағ ы нү ктенің орнын ауыстырады. Нысандық тип жарияланғ аннан кейін осы типтік айнымалыларды жасауғ а болады немесе НБП терминологиясы бойынша нысан экземплярын жасаймыз. Олар айнымалыларды сипаттау бө лімінде жарияланатын статикалық айнымалылар, New стандартты процедура арқ ылы жасалғ ан динамикалық айнымалылар болуы мү мкін.

Var

Dot1: Dot;

Мұ нда Dot типіне жататын Dot1 айнымалысы жарияланғ ан. Нысан экземпляры жасалынғ аннан кейін оның ө рістерінен ә дістерге қ атынас жасай аламыз. Нысан ө рісіне қ андай-да бір стандартты ішкі программаны қ олдану ү шін оның қ ұ рылымдық атауын қ олдану жеткілікті – нысан идентификаторы мен нү кте арқ ылы ажыратылғ ан ө ріс идентификаторын кө рсету.

НБП-да нысан ө рістерімен жұ мыс істеу кезінде тек оның ә дістері қ олданылады.

Dot1.Init(100, 100);

Dot1.Show;

Dot1.Move(50, 50);

Жазбаларғ а қ олданылатын сияқ ты, объектілерге де with операторын қ олдануғ а болады.

With Dot1 do begin

Init (100, 100);

Show;

Move (50, 50);

End.

Жоғ арыда кө рсетілген операторлар тізбегі бірдей. Тө менде жоғ арыда қ арастырылғ ан мысалдардың толық программасы кө рсетілген. Бұ л программа экранда нү ктені бейнелейді жә не де бейнеленген нү ктені бағ дарша-пернелердің кө мегімен 4 бағ ытта жылжытуғ а болады.

Program ObjDot;

Uses crt, graph;

Type

Dot=object

a, b: integer;

procedure Init(x, y: integer);

procedure Show;

procedure Hide;

procedure Move(Da, Db: integer);

end;

{-------------------------------------}

Procedure Dot.Init;

Begin

a: =x; b: =y;

end;

{-------------------------------------}

Procedure Dot.Show;

Begin

PutPixel (a, b, white);

End;

{--------------------------------------}

Procedure Dot.Hide;

Begin

PutPixel(a, b, 0);

End;

{--------------------------------------}

Procedure Dot.Move;

Begin

Hide;

a: =a+Da; b: =b+Db;

Show;

End;

{--------------------------------------}

Var

i, j, k, Err: integer;

a: char;

Dot1: Dot;

{-------------------------------------}

Begin

i: =detect;

InitGraph(i, j, ’ ‘);

Err: =GraphResult;

If Err< > grOK then

Writeln(GraphErrorMsg(Err))

Else

begin

Dot1.Init(GetMaxX div 2, GetMaxY div 2);

Dot1.Show;

While KeyPressed do a: =ReadKey;

Repeat

Begin

a: =ReadKey;

case ord(a) of

72: Dot1.Move(0, -5);

80: Dot1.Move(0, 5);

77: Dot1.Move(5, 0);

75: Dot1.Move(-5, 0)

End

End;

Until a=chr(27)

End

End.

 

Программада Dot нысаны жарияланды. Оның 2 ө рісі, 4 ә дісі бар. Ары қ арай Dot1 нысан экземпляры басқ а айнымалылар сияқ ты жарияланды. Программа денесі графикалық режимге ө туді жү зеге асыратын оператордан басталады. Содан кейін Repeat операторы белгілі пернені басуды анық тайды.Case операторы 4 нұ сқ аудан тұ рады, олар 4 бағ дарша пернелеріне сә йкес келеді. Нұ сқ алардың ә рбіреуі нақ ты параметрлері бар Move ә дісін шақ ырады, бұ л ә діс нү ктені қ ажетті бағ ытта 5 пиксельге жылжытады. Repeat операторы арқ ылы ұ йымдастырылғ ан циклдың тоқ тау шарты 27 Scan кодын беретін < Esc> пернесінің басылуы болып табылады.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.