УМКД Делфи. УМК_прог_DELPHI. азастан Республикасыны Білім жне ылым Министрлігі Атбе мемлекеттік педагогикалы институты
Скачать 1.95 Mb.
|
ӘдебиеттерХалықова К.З., Тұрғанбаева А.Р., Бостанов Б.Ғ., Программалау тілдерін оқыту. Delphi ортасы. Алматы, 2005г. Поган А.М. Delphi. Руководство программиста. М.:2006. Ерекешева М.М.,Әмірғалиева Т.А. Delphi ортасында программалау негіздері. Ақтөбе, 2005. Гофман В., Хомоненко А., Delphi 5, Санкт-Петербург, 2001г. Культин Н., Delphi в задачах и примерах. – СПб.: БХВ-Петербург, 2004 Айен Синклер. Большой толковый словарь компьютерных терминов. Дәріс сабақтарының мазмұны Дәріс 1-2. Анықтамалық жүйе құру Жоспар: 1. Анықтамалық жүйе ұғымы 2. Анықтамалық ақпарат құжатының файлы 3. Анықтамалық жүйе жобасын құру 1. Анықтамалық жүйе ұғымы. Ақпараттық – анықтамалық іздеу жүйелері қолданушыға қандай да бір ақпаратты белгілі бір белгілері бойынша тез іздеп табуға мүмкіндік береді. Олар көбіне иерархиялық құрылымды болады. Осындай электрондық құралдардың бірі – Delphi программалау ортасында құрылған анықтамалық жүйе программасы. Бұл программаны жоғарғы сынып оқушыларына факультативтік сабақтарда немесе ЖОО студенттеріне Delphi программалау ортасын өткен кезде көмекші құрал ретінде қолдануға болады. Программа оқушының өз бетінше жұмыс жасауына септігін тигізеді және қолдануға өте қарапайым. Біздің құрған программамызда анықтамалық ақпарат файлы ретінде осы анықтамалық жүйенің өзін құру сатыларынан тұратын тексті алдық. Яғни, оқушы бұл программамен танысып болғаннан кейін өз бетінше қандай да бір ақпараттар бойынша анықтамалық жүйе программасын жасауына болады. Әрбір программа қолданушыға программа туралы толық ақпарат және осы программамен қалай жұмыс жасау керектігі туралы толық мәлімет беретін анықтама жүйесіне қатынаудың қамтамасыз етуі қажет. Windows-тың құрама бөлігі болып табылатын Winhelp программалары белгілі бір құрылымдағы файлдардың жиынтығын білдіретін Delphi-дің анықтамалық жүйесі және Windows-та жұмыс жасайтын программалардың анықтамалық жүйесін қолдана отырып, қолданушылардың сұранысы бойынша анықтамалық ақпаратты шығарады. Анықтамалық ақпарат құрамына кіретін HLP файлдары анықтамалық жүйенің негізгі элементі болып табылады. Қарапайым жағдайда программаның анықтамалық жүйесі бір HLP-файлынан тұрады. Анықтамалық жүйені, мысалы Delphi-мен бірге берілетін Microsoft Help Workshop программалары көмегімен құруға болады. RTF-файл түрінде берілген анықтамалық жүйе мәтіні HLP-файлын құруда бастапқы «материал» болып табылады. Анықтамалық жүйе (HLP-файлы) құру процесін келесі екі қадам ретінде ұсынуға болады: Анықтамалық ақпаратты дайындау (анықтамалық ақпарат құжатының файлын құру). Анықтамалық ақпарат файлын анықтамалық жүйе файлына түрлендіру. 2. Анықтамалық ақпарат құжатының файлы. Анықтамалық ақпарат құжатының файлы белгілі бір құрылымдағы RTF-файлы болып табылады. Анықтамалық ақпараттың RTF-файлы мысалға Microsoft Word программасы көмегімен құруға болады. Алдымен анықтама бөлімдерінің мәтінін теріп, және бөлімдер тақырыптарын Тақырып стилінің бірімен беруге болады, мысалы Тақырып 1. Мұнда бөлімнің әрбір мәтіні құжаттың бөлек бетінде орналасу қажет. 1-сурет. Сносканың диалогтық терезесі Бөлімдердің мәтіні терілгеннен кейін, нұсқамалар көмегімен (1-кесте) анықтамалық ақпарат бөлімдерінің тақырыптарын белгілеу қажет (анықтама файлы, RTF-файлын HLP-файлына түрлендіру процесі кезінде компилятор нұсқамалары қолданылады). 1-кесте. RTF-файлын белгілеу үшін қолданылатын нұсқамалар
Бөлім тақырыбын нұсқамамен белгілеу үшін бөлім тақырыбының бірінші әрпінің алдына курсорды қойып және Кірістіру → Нұсқама командасын таңдау қажет. Ашылған нұсқама диалогтық терезесінен (1-сурет) Нұсқаманы кірістіру тобынан кәдімгі қосқышын қосып, ал нөмерлеу тобынан басқа қосқышын қосамыз. Нұсқама нөмерін енгізу өрісінде «#» символын енгізгеннен кейін ОК батырмасын басу керек. Нәтижесінде құжатқа # нұсқамасы қойылады және құжат терезесінің төменгі бөлігінде сноска мәтінін енгізу терезесі пайда болып, осы терезеде нұсқама белгісінің жанына белгіленетін анықтама бөлімінің идентификаторын енгізу керек (2-сурет). 2-сурет Идентификатор ретінде мысалы, TI (Topic Identifier) әріптерін бөлімнің тізбе қатар нөмерінің немесе анықтама бөлімінің тақырыбының аббревиатурасының алдына қойып қолдануға болады. Бірақта анықтама бөлімінің идентификаторы IDH_префиксінан басталғаны дұрыстау. Бұл жағдайда RTF-файлда жоқ жоба файлының [MAP] бөлімінде бар идентификатор тізімін шығарады. Әдетте, анықтама бөлімдері басқа бөлімдерге сілтемелерден тұрады. Анықтама бөлімі терезесіндегі түсінікті таңдау басқа анықтама бөліміне ауысуды шақырады, негізгі анықтама мәтін түсінен басқа түспен ерекшеленіп, сызылады. Анықтамалық ақпарат мәтінін дайындау барысында, сілтеме-сөз таңдалуы анықтаманың басқа бөліміне өтуді қамтамасыз ететін сілтеме-сөзді екі сызықпен астын сызып, және осы сөзден кейін өтуге қажетті бос орынсыз анықтама бөлімінің идентификаторын орналастыру. Қойылған идентификаторды жасырын мәтін ретінде көркемдеу керек. Басқа анықтама бөліміне өтуді қамтамасыз ететін сілтемеден басқа қалқымалы терезеде болатын мәтін – түсіндірме сілтеме қоюға болады. Анықтамалық жүйемен жұмыс жасау барысында түсіндірме сілтемелер басқа түспен ерекшеленіп, үзік-үзік сызықпен сызылады. Анықтамалық жүйе құжатын дайындауда комментарийлер анықтама бөлімдері сияқты бөлек бетте орналасады, бірақта түсіндірме мәтінінде тақырып болмау керек. Түсіндірме мәтінінің алдына # сноскасы қойылады. Түсіндірме сілтеме келесі түрде болады: ең алдымен түсіндірменің пайда болуына әкелетін сөзді бір өлшемді сызықпен ерекшелеп, екіншіден осы сөзден кейін түсіндірме идентификаторын қойып оны жасырын мәтін етіп жасау керек. 3. Анықтамалық жүйе жобасын құру. Анықтамалық ақпарат жүйесінің (RTF-файл) файлы құрылғаннан кейін анықтамалық жүйе (HLP-файл) құруға болады. Бұл үшін HCW.exe файлында орналасқан Delphi-мен бірге берілетін Microsoft Help Workshop программасын қолданған ыңғайлы. Microsoft Help Workshop программасын Windows немесе Delphi-дегі Tools => Help Workshop командасы көмегімен қосуға болады. Егер Tools менюінде Help Workshop жоқ болса, онда Tools => Configure Tools таңдағаннан кейін Tool Options диалогтық терезесінен Add батырмасын шертеміз. Ашылатын Tool Properties диалогтық терезесінен Title өрісіне программа атын енгіземіз – Help Workshop, ал Program өрісіне – C:\Program\Files\Borland\Delphi 7\Help\Tools\HCW.exe. Программа атын енгізу үшін Browse батырмасын қолдануға болады. Microsoft Help Workshop программасы іске қосылғаннан кейін экранда программаның негізгі терезесі пайда болады (3-сурет). 3-сурет Анықтамалық жүйені құруға кірісу үшін File => New командасын орындап, ашылған диалогтық терезеден (4-сурет) құрылатын файл типін – Help Project көрсетеміз. 4-сурет Осы әрекеттер нәтижесінде Project File Name (5-сурет) терезесі ашылады. 5-сурет Осы терезеден алдымен анықтамалық жүйе құрылатын программа бумасын таңдап және анықтамалық жүйе құжатының файлы қайда орналасатынын таңдау қажет. «Файл аты» өрісіне анықтамалық жүйе жобасының файлының атын енгіземіз. Сақтау батырмасын шерткеннен кейін анықтамалық жүйе жобасының терезесі ашылады. Құрылған анықтамалық жүйе сынақ түрінде іске қосу және жобаны компиляциялау, анықтамалық жүйе терезесінің мазмұнын беру және жобаға керекті көмегімен қосуға болады. Дәріс 3-4. Кластар мен интерфейстер Жоспар: Объектілі-бағдарланған программалау негіздері Класс және объект ұғымдары Көріну спецификаторлары Өрістер. Қасиеттер. Әдістер 1. Объектілі-бағдарланған программалау негіздері. Айналамызға қарасақ, бізді көптеген объектілер қоршайтынын көреміз. Әрбір объект өзінің атрибуттарымен, әрекетімен және сыртқы факторларға әсер етумен сипатталады. Көптеген объектілер сипаттамалары ұқсас болып келеді, яғни олар қандай да бір категорияға тиісті деп айтуға болады. Мысал ретінде қарапайым ағашты алайық. Оның атрибуттары биіктігі, діңгек диаметрі және жасы болып табылады. Ағаш әрекеті оның әрдайым өсу және ауа-райы жағдайларына ыңғайлана білу қабілеттерімен сипатталады. Ал осы ауа-райы жағдайлары ағаш атрибуттарының өзгерісіне септігін тигізетін сыртқы факторлар болып табылады. Объектілі-бағдарланған программалау - объектілер қасиетін толық ашатын үш маңызды қағидаларға негізделеді. Инкапсуляция. Мәліметтер мен оларды өңдеу логикасының бір бүтінге, яғни объектіге біріктіруді инкапсуляция деп түсінеміз. Бұл қағида бойынша, объект өзінің ішкі құрылымын жасырып, басқаруға мүмкіндік беретін қандай да бір «рычагтарын» ұсынады. Мысалы, кәдімгі компьютерлік тышқанды алайық. Оның жұмыс жасайтын барлық күрделі механизмдері қолданушыдан кішкентай ыңғайлы корпус ішіне жасырылған (инкапсуляцияланған). Инкапсуляцияның негізгі артықшылығы – объектіні программаның кез келген жерінде бірнеше рет пайдалану үшін оның құрылымын бір рет сипаттасақ жеткілікті. Мұрагерлік. Бұл қағида объектілер арасында «ата-ана - ұрпақ» типті байланыс құруға мүмкіндік береді. Мұндай байланыс болған кезде ұрпақ-объект ата-ана - объектінің барлық атрибуттары мен әрекет ету ерекшеліктерін мұрагерлікке алады. Сонымен қатар ұрпақта жаңа атрибуттар мен жаңа функционалдық мүмкіндіктер пайда болуы мүмкін. Мұрагерлік қағидасын келесі мысалмен түсіндіруге болады. Көлік құралы максимал жылдамдығымен, жолаушылар сиымдылығымен сипатталады, ал оның әрекеті орын ауыстыра алу қабілетімен анықталады. Әрі қарай үш абстрактілі объектілерден тұратын көлік құралының типтері бөлінеді: әуе, су және жер көліктері. Мысалы, әуе қозғалыс құралының қосымша атрибуты ұшудың максимал биіктігі болып табылады. Төменгі деңгейде әдеттегідей нақты объектілер орналасады. Біздің жағдайда олар: ұшақ, кеме, поезд және т.б. Олардың әрқайсысында ата-аналарының ерекшеліктерін толықтыратын өз ерекшеліктері болады. Полиморфизм. Ата-анасы ортақ объектілердің бір әрекетті әр түрлі тәсілдермен орындау қасиеттерін сипаттайды. Мысалы, «орын ауыстыру» әрекеті барлық көлік құралдарына қатысты әрекет. Ал поездтар рельс бойымен қозғалса, ұшақтар кеңістікте әуе бойымен қозғалады. 2. Класс және объект ұғымдары. ОБП ядросы класс болып табылады. Object Pascal тіліндегі кластар деп өрістен, әдістен және қасиеттерден тұратын арнайы типтерді айтады. Кез-келген басқа типтер тәрізді класс объект деп аталатын нақты экземплярды құру қызметін атқарады. Object Pascal тілінде объект атрибуттары өрістер деп аталады, ал әрекет алгоритмдері – оның әдістері деп аталады. Сонымен қатар кластың өрістері мен әдістері оның мүшелері болып табылады. Кластың нақты экземплярларын пайдаланбас бұрын, оны типтер бөлімінде сипаттап алуымыз керек. Жалпы клас құрылымы келесі түрде болады. Type <класс аты>=class(<ата-ана класының аты>) <класс өрістерінің сипаттамасы>; <класс әдістерінің сипаттамасы>; End; Класты сипаттау кезінде оны анықтайтын class қызметші сөзі болып табылады. Одан кейін дөңгелек жақшалар ішіне ата-ана класының аты көрсетіледі. Егер ата-анасы көрсетілмесе, онда бұл класс объектілері TObject базалық абстрактілі класынан мұрагерлікке ие болады. Бұл класс визуальды компоненттер кітапхаансының барлық кластарының жалпы ата-тегі (предок) болып табылады. Мұнда барлық ұрпақтар үшін ортақ әрекеттер біріктірілген (инкапсуляцияланған). Мысалы, белгіленген объектілерді құру және өшіру, т.б. Жоғарыда айтылғандарды ескере отырып, көлік құралын сипаттайтын класс құрылымының мысалын келтірейік. Type TCarrier=class // өрістерді сипаттау Name: String; //көлік құралының аты MaxSpeed: integer; //шектік жылдамдығы Speed: integer; //ағымдық жылдамдығы PassCount: integer; //жолаушылар сиымдылығы //әдістерді сипаттау Procedure MoveFaster; //жылдамдықты арттыру Procedure MoveSlower; //жылдамдықты кеміту Procedure TakePassenger(count: integer); //жолаушылады енгізу End; Бұл мысалда TCarrier класының төрт өрісі (Name, MaxSpeed, Speed, PassCount) және үш әдісі (MoveFaster, MoveSlower, TakePassenger) бар. Класс әдістерінің сипатталуы кластың өзі сипатталғаннан кейін орналасуы керек. Сонымен қатар, тақырыбында әр әдіс атының алдына өзі мүше болып тұрған кластың атын көрсету керек. Мысалы, MoveFaster әдісінің сипаттамасы келесі түрде болуы мүмкін. Procedure TCarrier.MoveFaster; Begin If Speed+1<=MaxSpeed then Inc(Speed) Else Speed:=MaxSpeed; End; Енді осы TCarrier класының (көлік құралдары) ұрпақтарының құралған түрін қарастырайық. Type TAirCarrier = class(TCarrier) //әуе көлік құралы //қосымша өрістер MaxHeight: integer; //шектік биіктік Height: integer; //ағымдық биіктік //қосымша әдістер Procedure Land; //жерге түсуі Procedure TakeOff; //ұшуы End; Type TAirPlane = class(TAirCarrier) //ұшақ //қосымша өрістер EngineCount: integer; //двигатель саны PlaneType: (military, civil); //ұшақ типі: әскери, азаматтық End; Кластардың осылай сипатталуын қарастыра келе, TAirPlane типті объектілерге Name, MaxSpeed, PassCount, MaxHeight, Height, EngineCount, PlaneType өрістері мен MoveFaster, MoveSlower, TakePassenger, Land, TakeOff әдістері тиісті (будут доступны) болады. Класс экземплярлары кәдімгі айнымалылар секілді хабарланады. Мысалы: Var AirCarrier: TAirCarrier; SomePlane: TAirPlane; Объектілердің өрістері мен әдістеріне екі тәсіл арқылы қатынас жасауға болады: Объект аты мен нүкте арқылы ажыратылған оның мүшесінің атынан тұратын құрама ат көмегімен. Мысалы: SomePlane.Speed, SomePlane.MoveFaster; With .. do операторы көмегімен. Мысалы: With SomePlane do Begin Speed:=MaxSpeed; End; Объект мүшелерін шақырмастан бұрын, оның мүшелерін құрып, инициализациялау керек. Объектіні TObject класының арнайы Create әдісін пайдалану арқылы құруға болады. Бұл әдісті шақырғаннан кейін объектінің жаңа экземпляры үшін жадыдан орын бөлініп, объектіге сілтеме қайтарылады. Біздің жағдайда ол былайша жазылады: SomePlane:= TAirPlane.Create; Өз класымызды құру кезінде программист ресурстарды өзі босата алады. Объектіні өшіру немесе олар алып тұрған жады орнын босату үшін Free процедурасын пайдалану керек. Мысалы: SomePlane.Free; 3. Көріну спецификаторлары. Объект мүшелерінің көрінуі әр түрлі деңгейде болады. Көріну деңгейлері класты сипаттау кезінде арнайы директивалар көмегімен анықталады: private, protected және public. Private директивасы кластың өзі жазылған модульдің сыртында хабарланған объектілер үшін көрінбейтін класс өрістері мен әдістерін біріктіреді. Осылайша, сыртқы көздерден алынған мәліметтердің бұзылу мүмкіндігін тудырмайды. Сипаттау кезінде protected директивасымен біріктірілген объект мүшелерін тек осы объект класы сипатталған модульде ғана емес, осы класс ұрпақтары сипатталатын модульдерде де шақыруға болады. Осылайша бұл директива кластардың туыстық қатыстарын анықтайды. Ал public директивасы өзінен кейін сипатталған объект мүшелерінің көрінуіне қойылған барлық шектеулерді алып тастайды. Жоғарыда айтылғандарды ескере отырып, класс құрылымын жалпы түрде былай көрсетуге болады: Type <класс аты> = class (<ата-аналық класс аты>) Private <жасырынды мүшелерді сипаттау>; Protected <қорғалған мүшелерді сипаттау>; Public <жалпы көрінетін мүшелерді сипаттау>; End; 4. Өрістер. Қасиеттер. Әдістер. Өрістердің көріну деңгейі төмен болғандықтан, олар рrivate секциясында сипатталады. Егер класс сырқы қолданыс үшін арналса, онда өріс аттарын f (free) символынан бастаған дұрыс. Сондықтан, біз өзіміздің TCarrier класымызды келесі түрде сипаттаймыз. Type TCarrier = class Private fName: string; fMaxSpeed: integer; fSpeed: integer; fPassCount: integer; public procedure MoveFaster; procedure MoveSlower; procedure TakePassenger(count: integer); end; Объект өрістерін шақырудың дұрыс әдісі болып, қасиеттер деп аталатын объектінің арнайы мүшесін қолдану болып табылады. Класс әдістері осы кластың әрбір объектісі үшін орындалатын, мәліметтерді өңдеу алгоритмдерін сипаттайды. Нақты түрде олар объектінің әрекеттік жағын айқындайды. Жаңа класты сипаттау үшін жеке модуль құрылатыны белгілі. Модуль құрылымы екі секциядан тұрады: interface және implementation. Класс құрылымының сипатталуы interface секциясында, ал класс әдістерінің сипатталуы implementation секциясында орналасады. Жоғарыда айтылып кеткендей, белгілі бір класс ұрпақтары оның барлық мүшелерін (соның ішінде қасиеттерін) мұрагерлікке алады. Полиморфизм қағидасы бойынша ұрпақтар әрекеті ата-ана әрекетінен ерекшеленуі мүмкін. Әдістерді мұрагерлікке қабылдау режиміне байланысты оларды статикалық, виртуалдық және алмастырылған әдістер деп бөледі. Үнсіз келісім бойынша барлық әдістер статикалық болып табылады. Статикалық әдіс алмастыруға мүмкіндік бермей өз ұрпақтарына тура мұрагерлікті қамтамасыз етеді. Егер сіз ұрпақ-класта мұрагерлікке алынған әдіс логикасын өзгерткіңіз келсе, онда бұл әдісті ата-аналық класта вируальды етіп (virtual директивасы көмегімен) сипаттау керек, ал ұрпақ-класта оны алмастырылған түрде (override директивасы көмегімен) анықтау керек. Статикалық және динамикалық әдістердің айырмашылығын келесі мысал арқылы көрсетейік. Type TVehicle = class Name: string; Constructor Create(s: string); Procedure Move; Procedure Stop; virtual; Сонымен, класс қандай да бір басқарушылықты атқарады. Мысалы, TForm класы Windows – терезесін құруға қажеттілерден, TMemo класы – толық басқарылатын мәтіндік редактор жұмысын, TTimer класы программа жұмысын таймермен қамтамасыз ететін құралдарды қамтиды (немесе инкапсуляциялайды). Ендеше, инкапсуляция дайын программалық жабдықтаумен жұмыс істеуге арналған қуатты құрал болып табылады. Delphi жүйесінің кластар кітапханасы – бұл программа құруға арналған Borland фирмасының программистері құрған кірпіштер жиынтығы екен. Сонымен, кез-келген класс басқа кластан туындайды. Ол үшін оны хабарлағанда ата-ана кластың аты көрсетіледі: TchildClass=class(TParentClass) Туындаған кластан автоматты түрде өзінің ата-анасының өрісі, әдісі және қасиеті шығады және олардың жаңамен толықтырылуы мүмкін. Сөйтіп, мұрагерлік принципі күрделі кластарды кезеңмен құруды және өзінің жеке кластар кітапханасын жасауға мүмкіндік береді. Object Pascal-дың барлық кластары жалғыз ата-ана TObject класынан туындаған. Бұл кластың өрісі және қасиеттері жоқ, бірақ өзіне кез-келген объектілердің барлық өмірлік қасиеттерін қамтитын жалпы тағайындаудың әдістері қамтиды. Программист TObject класы ата-ана болмайтын класс құра алмайды. Оған төмендегідей бейнелеулер тән: TaClass=Class(TObject) TaClass=Class Мұрагерлік принципі TObject класынан оның ұрпақтарына қарай дами отырып, біртіндеп кеңейетін тармақталған кластар құруға әкеледі. Әрбір ұрпақ өзінің ата-анасының мүмкіндіктерін толықтырып (жаңартып), оны өзінің ұрпақтарына беріп отырады. Delphi-дегі кластар тармағы Сонымен, полиморфизм – бұл мағынасы ұқсас мәселелерді әр түрлі тәсілдермен шешетін кластар қасиеті. Object Pascal-ң шеңберінде кластардың қасиеті оған кіретін әдістердің жиынтығымен анықталады. Клас ұрпақтарындағы қандай да бір әдістің алгоритмін өзгерте отырып, программист бұл ұрпаққа ата-анасында жоқ ерекше қасиетті бере алады. Әдісті өзгерту үшін оны сол ұрпақта жабу қажет, яғни ұрпақта бір атаулы әдісті хабарлап, оған қажетті әрекетті жүзеге асыру қажет. Нәтижесінде объект – ата-ана мен объект-ұрпақта әр түрлі алгоритмдік негізі бар, объектілерге әр түрлі қасиет беретін екі бір атаулы әдіс жұмыс істейтін болады. Класта инкапсуляцияланған процедуралар мен функциялар әдістер деп аталады. Олар әдеттегі қосалқы программа тәрізді хабарланады: Type TMyClass=class Function MyFunc(aPar:integer): integer; Procedure MyProc; End; Кластың әдістеріне кіру оның өрістеріне кіргендей құрама атаулардың көмегімен жүзеге асырылады. Var AObject: TmyClass; Begin ……. AObject: MyProg; ……. End; Жоғарыда айтылғандай кластың әдістері ұрпақтарында жабылып тұруы мүмкін. Мысалы: Type TParentClass=Class Procedure DOWork; End; TChildClass=Class(TParentClass); Procedure DOWork; End; Екі кластың ұрпақтары да DOWork процедурасының атауы бойынша ұқсас әрекеттерді орындауы мүмкін. Бірақ, бұл жалпы жағдайда әр түрлі орындалады. әдістерді мұндай ауыстыру статикалық деп аталады, яғни, компилятормен программаны жүргізу кезеңінде жүзеге асырылады. Object Pascal тілінде программаны жүргізу кезеңінде әдістерді динамикалық ауыстыру жиі пайдаланылады. Мұны жүзеге асыру үшін аталық класта орналасқан әдіс динамикалық немесе виртуалды түрде хабарлануы тиіс. Осындай хабарлауды кездестіргеннен кейін компилятор екі кесте құрады: DMT (Dynamic Method Table) және VMT (Virtual Method Table), оларды сәйкес динамикалық немесе виртуалдық әдістердің кіру нүктесіндегі адреске орналастырады. Әрбір ауыстырылатын әдіске оралған компилятор сәйкес кестелердің бірінен қосалқы программаға кіру нүктесінің адресін шығаруға мүмкіндік беретін кодты қояды. Класс ұрпағында әдісті алмастыру override (жабу) дерективасы мен хабарланады. Осы нұсқауды алғаннан кейін, компилятор программаны жүргізу кезеңінде ата-аналық кестесіне класс-ұрпақ әдісінің кіру нүктесіне оранластырады, ал аталыққа жаңа әдістің көмегімен қажетті әректті орындауға мүмкіндік береді. Мысалы, аталық класс SHOW және Hide әдістерінің көмегімен экранда бейнені көрсетеді немесе жасырады. Бейнені құру үшін логикалық параметрі бар DRAW әдісін пайдаланады: Type Tvisual Object=class(TWinControl) Procedure Hide; Procedure Show; Procedure DRAW(IsShow: Boolean): Virtual; End; SHOW және Hide әдістерінің жүзеге асырылуы өте қарапайым: Procedure TVisual ObjectSHOW; Begin DRAW(True); End; Procedure TVisual ObjectHide; Begin DRAW(False); End; Аталық және ұрпақта DRAW әдісінің жүзеге асырылуы әр түрлі және әр түрлі бейнелер құрылады. Нәтижесінде SHOW және Hide аталық әдістері - өзінің кез-келген ұрпағындағы DRAW әдісінің нақты жүзеге асырылуына тәуелді болады. Динамикалық байланыстыру толығымен кластар полиморфизмін жүзеге асырады. Динамикалық және виртуалдық әдістерінің арасындағы айырмашылығы – динамикалық әдістер кестесінде осы класта тек dynamic ретінде хабарланған әдістер адрестері болады, ал виртуалық кестесінде сол кластың виртуалдық әдістерімен қатар, оның барлық аталықтарының да адрестері сақталады. Көлемі айтарлықтай VMT кестесі жылдам іздеуді жүзеге асырады, содай-ақ, динамикалық әдіске оралғанда программа алдымен DMT объектісінің кестесін қарап шығады, одан кейін аталық класын қажетті кіру нүктесі табылғанша іздейді. Динамикалық жабылатын әдістер ешнәрсе орындамауы мүмкін. Мұндай әдістер абстрактілі әдістер деп аталады, олар ұрпақтарында жабылуға міндетті. Программист abstract директивасымен хабарлау арқылы абстракт әдісті шақыруға тосқауыл қоя алады. |