Жоспар:
-
Инкапсуляция
-
Мұрагерлік
-
Полиморфизм.
Әдебиеттер:
1.А.Г.Гольцев «Объектно-ориентированное программирование и его реализация в языке Паскаль», Москва-2005
2. В.В.Фараонов «Турбо Паскаль 7.0», Москва-2001
3. Электронный учебник: «Введение в объектно-ориентированное программирование», 2006
1. Инкапсуляция
Біз объекттер әлемінде өмір сүреміз. Стол, автомобиль, ручка, тақта – бұлардың бәрі объекттер. Осындай физикалық объекттермен қатар абстрактілі объекттер де бар. Мысалы: сандар. Демек, объект – бұл кез-келген физикалық не абстрактілі айқындалған барлық(сущность). Объект – бұл жалпы философиялық ұғым. Оны ұзақ уақыттан бері философтар зерттеп келеді.
Объекттер атрибуттарымен сипатталады. Мысалы, автомобильдің атрибуттары – ең жоғары жылдамдығы, двигателінің қуаты, кузов түсі т.б.
Атрибуттардан бөлек объекттер қайсы бір функционалды мүмкіндіктерге ие болады. Бұл мүмкіндік объектті-бағыттталған программалауда (ОБП) амал не тәсіл делінеді. Мысалы, автомобиль жүре алады, бұл оың функционалды мүмкіндігі, яғни, орындай алатын амалы(тәсілі), корабль – жүзе алады, компьютер – есептеулер жүргізеді. Осылайша, объект атрибуттар мен тәсілдерді инкапсуляция жасайды, яғни басқа объекттерден (өзара әсерететін) өз тәсілінің қалай құрылғандығын жасырады. Мысалы, теледидар каналын ауыстыру үшін пульттегі керекті батырманы басу жеткілікті, күрделі механизм іске түсіп, нәтижеде керекті каналға ауыстырылады. Бізге телевизор мен пультте қандай механизмдер іске түсіп, қалай орындалатындығын білу міндетті емес, телевизордың мұндай мүмкіндігі(тәсілі) бар екендігін және оны қалай іске түсірудібілу жеткілікті. Инкапсуляция, яғни құрылымын жасыру қасиеті ОБП-ң базалық қасиеті болып табылады. Ол талап етілген тәсілдерге ие пайдаланушы объекттерін құруға мүмкіндік береді. Пайдаланушы бұл объекттердің құрылымын білмей-ақ, олармен жұмыс істей беруіне болады.
2. Мұрагерлік. Полиморфизм
Әрбір объект қайсыбір объектер класының экземпляры болып табылады. Мысалы, Audi 6 автомобилі осы модель автомобильдері классының экземпляры болып табылады, ал, мысық сүтқоректілер классының экземпляры. Осылайша, класс – бұл абстрактілі ұғым. Класстар бір-бірімен әртүрлі қатынаста болады. Осындай қатынастардың негізгілерінің бірі: клас-ішкі класс қатынасы. Бұл объектті-программалауда мұрагерлік қатынасы ретінде белгілі. Мысалы, Audi 6 автомобильдер классы жеңіл автомобильдер классына ішкі класс болып табылады. Жеңіл автомобильдер классы көліктер классының ішкі классы. Көліктер өз кезегінде транспорт құралдары классының ішкі классы. Транспорт құралдарына көліктермен қатар самолеттер, поезд, корабль т.б. жатады.
Мұрагерлік қатынасында берлық атрибуттар мен тәсілдер аталық класстанн ұрпақ-классқа беріледі. Мұрагерлік көпдеңгейлі болуы мүмкін. Бұл жағдайда, иерархияның төменгі деңгейіндегі класстар тікелей не жанама аталық класстардың барлық қасиеттерін мұраға алады.
Бірегей мұрагерліктен бөлек көпмұрагерлік те бар. Бұл жағдайда класс бірден бірнеше класстардың мұрагері болып табылады, және оларың барық қасиеттерін мұраға алады. Көпмұрагерлік қатынасын қолдану барысында мынаған көңіл аудару керек: ұрпақ класс бірдей атаулы бірақ, мазмұны әртүрлі қасиеттерге ие болып қалуы мүмкін.
Мұрагерлікте бір тәсілдің орнын басқа бір тәсіл алмастыруы мүмкін. Мысалы, транспорт құралдары классы қозғалу қасиетіне ие(жалпыға бірдей). Бұл әдіс ұрпақ-класстарда нақтыланады: автомобиль – жүреді, самолет – ұшады, корабль – жүзеді. Тәсіл семантикасының осылайша өзгеруі полиморфизм делінеді. Полиморфизм – бұл сол бір атаулы тәсілдің контекстке тәуелді(дербес жағдайда, қайсы классқа тиістілігіне байланысты) әртүрлі әрекеттер орындауы.
Лекция 10
Объектті-бағытталған программалау ұғымы
Жоспар:
1. ОБП тілдеріндегі объект. Олардың өзара қатынасы
2. Тәсілдер
3. Класс
4. Мұрагерлік механизмі
5. Объекттер полиморфизмі
6. Кеш байланысу механизмі
Әдебиеттер:
1.А.Г.Гольцев «Объектно-ориентированное программирование и его реализация в языке Паскаль», Москва-2005
2. В.В.Фараонов «Турбо Паскаль 7.0», Москва-2001
3. Электронный учебник: «Введение в объектно-ориентированное программирование», 2006
1. ОБП тілдеріндегі объект. Олардың өзара қатынасы
Өткен тақырыпта ОБП ұғымдарын жалпылама абстрактілі қарастырдық. Бұл ұғымдарды нақтылай түсеміз. Объектіге бағытталған программалау тілдері тұрғысынан объектке келесі анықтаманы беруге болады.
Объект - бұл жеке локал жадыға ие және төмендегі әрекеттерді орындай алатын программалау тілінің абстракциясы(«бір нәрсе»):
1. Қайсыбір әрекеттерді орындайды.
2. Локал жадыда қайсыбір мәліметті сақтайды.
3. Өзге объекттермен өзара қатынас жасайды.
Объекттер хабарламалар арқылы өзара қатынас жасайды.
(MS Windows операциялық жүйелерінде «хабарлама» ұғымы қолданылады. Бірақ бұл ұғымның мағынасы өзгешелеу).
Өзарақатынас жасауға екі объект қатысады: хабарлама жіберуші мен қабылдаушы. Хабарламада жіберуші қабылдаушыға қандай әрекет орындалу керек екеін білдіріп, бұл үшін керекті параметрлерлі жібереді. Қабылдаушы әрекетті орындап, жіберушіге нәтижені қайтарады.
Өзара қатынастың басқа түрі қарастырылмаған.
ОБП-ң мықты тілі – Смолток тілінде (қазір қолданылмай кеткен) хабарламада селектор және параметр болып ажыратылады.
Селектор – бұл қабылдаушы объекттен қандай әрекет (мағынасы бойынша) талап етілетіндігін білдіретін хабарламаның бөлігі.
Әрбір хабарламаға селектор қатысады.
Хабарлама параметрлері процедураның нақты параметрлері сияқты қажетті бастапқы берілгендерді беріп, әрекетті нақтылай түседі. Хабарламада параметр біреу не бірнеше не тіпті жоқ болуы да мүмкін.
Мысалы, әрекет «объектті экранда қайсыбір позицияда көрсету» дегенді білдіруі мүмкін. Онда хабарламаның селекторы ShowAtPosition идентификаторы болып, ал параметрлері – талап етілген экран позициясының X және Y координаталары болып табылуы мүмкін.
Бірқатар ОБП тілдерінде идентификатор ғана емес, әріпті-цифрлық тізбек және қызметші символдар да (мысалы, +, -, *, /, ->, = ) селектор ретінде беріле алады. Бұл мысалыға, арифметикалық өрнекті хабарламалардың тізбегі ретінде жазуға мүмкіндік береді. Айталық, барлық сандар объект болып табылса, «+» селекторлы хабарлама «параметр мен өзін қосып нәтижені қайтару» дегенді білдіреді: өрнектің жазылуы былай болады: 2+3, ал нәтиже ретінде 5 қайтарылады. Мұндай жазылу адамға түсінікті. Егер қызметші символдарды селектор ретінде пайдалануға рұқсат етілмесе (Паскалда сияқты), онда конструкцияны келесі түрдегі сияқты жазуға тура келеді:
2.add(3)
Алайда программаның оқып, түсінілуі қиындайтыны белгілі.
Объектті өңдеуге қабілетті хабарламалардың жиыны объект интерфейсі деп аталады.
Объектке интерфейсінде бар хабарламалар ғана жіберілуге тиіс.
2. Тәсілдер
Өзіне жіберілген хабарламаларды өңдеу үшін объект тәсілдер(кейде ережелер деп аталады) деп аталатын ерекше процедураларды пайдаланады.
Объекттің мінез-құлығы деп оның тәсілдерінің бірлестігін айтады.
Тәсіл хабарлама параметрлерін қабылдап, оларды және объекттің локал жадысындағы мәліметтерді басшылыққа ала отырып, қайсыбір әрекеттерді (есептеулерді) орындап, нәтижені хабарламаны жіберген объектке қайтарады.
Си++, Паскаль сияқты тілдердің жасақшылары Смолток тіліндегідей хабарламаны символдық идентификаторлармен бірге жіберуден бас тартты. Себебі, мұндай механизм өте үлкен және сәйкес тәсілді таңдау үшін кестелерден хабарлама идентификаторын іздеп отыру қажет. Мұның орнына хабарламаны жіберу бұл тілдерде тәсілді процедура ретінде шақырумен алмастырылған. Хабарламаның бастапқы идеясына сәйкестендіру үшін тәсілді шақыру қарапайым процедураны шақырудан өзгешелеу етілді.
Объекттің локал жадысы. Инкапсуляция принципі
Объекттің локал жадысы өз құрылымына ие. Програмалаудың әртүлі тілдерінде объекттің локал жадысының құрылымдық бірлігін белгілеу үшін түрлі термин қабылданған. Мысалы, өріс (Турбо Паскальда), объект жағдайының айнымалысы(Си++-те), немесе экземпляр-айнымалы(Смолток-та).
ОБП идеясы нақты объекттің тәсілдері ғана оның локал жадысымен жұмыс істей алады дейді, және локал жадының құрылымы тәсілдің ішінде ғана белгілі деп есептейді. Осы көзқарас тұрғысынан «Бұл тәсіл объекттің мынадай айнымалысының (өрісінің) мәнін қайтару үшін қызмет етеді» деу дұрыс емес. Өйткені сырт көзге объекттің локал жадысында осындай айнымалының бар екендігі белгісіз.
Мысалы, жолаушы лифтінің мінез-құлқын моделдейтін объектті сипаттайтын болсақ, және локал жадының passengerCount деп аталатын бір ұяшығында кабинадағы жолаушылардың ағымдық саны сақталса, онда «кабинадағы жолаушылар санын қайтаратын» тәсіл құруға болады. Бірақ, ол туралы «passengerCount өрісінің мәнін қайтаратын» тәсіл деп айту дұрыс емес (ол осылай жұмыс істеуі де мүмкін).
Жоғарыда айтылған мәліметтерді қорытындылай келе, объекттерді «қара жәшік» ретінде елестету мүмкін, оның кірісіне қайсыбір әсер(хабарлама) беріледі, ал шығысынан жауап сигналы(нәтиже) алынады. Қара жәшіктің ішінде дәл не орындалатындығы, оның құрылымы– сырткөзге көрінбейді.
Инкапсуляция принципі объектпен тек бір бүтін ретінде ғана жұмыс істеуді талап етеді. Объектті бір бүтін ретінде құруға, көшіруге, жоюға немесе «қолынан келетін нәрсені өтініш етуге»(хабарлама жіберуге) болады. Бірақ, сырттан тұрып объекттің бөлігіне(өрісіне) қол жеткізуге болмайды.
Паскальда Си++, Смолток және ОБП-ң басқа тілдерінде объект өрісі ретінде басқа бір объектті алуға болады. Бұл жағдайда инкапсуляция принципі бойынша тәсілдің ішінде мұндай объект-өріспен жұмыс тек хабарлама жіберу жолымен жүргізілуі керек. Объект-өрістердің өрісіне қолжеткізу тек олардың өз тәсілдері арқылы мүмкін болады.
3. Класс
Егер жеке-жеке әрбір объект үшін интерфейсі, локал жадысының құрылымы, тәсілдері сипатталатын болса, онда программа өте үлкен болып кетеді. Сондықтан ОБП-ң барлық тілдерінде класстар механизмі енгізілген.
Класс деп бірдей объекттердің, яғни, бірдей интерфейске, локал жадының құрылымына(өрістердің бірдей жиыны), және мінез-құлыққа (жіберілген хабарламаларды өңдеу үшін бірдей тәсілдер қолданатын) ие объекттердің жиынын атайды.
Программа жазу кезінде программист алдымен классты сипаттайды, яғни, ішіне енетін барлық объекттердің интерфейсін, ішкі құрылымын және тәсілдерін (мінез-құлқын) сипаттайды. Бұдан соң, нақты объектті сипаттаған уақытта оның берілген классқа тиістілігін білдіреді. Және мұндай объектті берілген класстың экземпляры деп айтады. Әрбір объект қайсыбір класстың экземпляры болып табылады.
4. Мұрагерлік механизмі
Кластардың өзін сипаттауды қысқартып, ыңғайлы ету үшін ОПБ тілдеріне мұрагерлік механизмі ендірілген. Егер программада қайсыбір объекттердің класы сипатталған болса және оларға ұқсас (яғни, ұқсас, бірақ кейбір айырмашылығы бар, сипатталған класстың басқа жаңа түрі болып табылатын) объекттердің классын сипаттау қажет болса, сипатталып қойылған класстың қасиеттерін жаңа класс мұраға алатындығын, бұдан соң жаңа класста қандай айырмашылық бар екендігін ОБП тілінің құралдарымен көрсету керек.
Қасиеттерді мұраға алған классты ұрпақ-класс не ішкі класс деп атайды.
Өз кезегінде ішкіклассты тудырған классты аталық-класс не суперкласс деп атайды.
Біреулік мұрагерлікте ұрпақ-класс тек бір аталық класстың қасиеттерін мұраға алады. Мұрагерліктің бұл түрі ОБП-ң барлық тілдерінде жүзеге асқан. Ал, кейбір тілдерде мысалы С++, көп мұрагерлік яғни, ұрпақ-класста бірнеше аталық класстардың қасиетері бірігу механизмі де жүзеге асқан.
Мұрагерлік – бұл бар класстардың қасиеттерін жаңа класстарды сипаттағанда пайдалануға және жаңа классты түгел емес, тек бастапқы класстан айырмашылығын ғана сипаттауға мүмкіндік беретін ОБП тілінің механизмі
Бұл айырмашылықтар мыналар болуы мүмкін:
1. Интерфейстің өзгеруі (әдетте, бұл жаңа хабарламалар енгізу)
2. Локал жадының құрылымы өзгеруі (әдетте, жаңа өрістерді қосу)
3. Аталық класс құрамындағы тәсілдің хабарламаға жауап қатуындағы өзгеріс
Мұрагерлік механизмі жаңа программалардың құрылуын тездетеді және объектіге бағытталған програмаларды оңай бейімделгіш етеді.
Программада сипатталған класстардың бірде-бір экземпляры болмауы мүмкін. Мұндай класстарды абстрактілі деп атайды. Әдетте мұндай класстар үлгі (шаблон) болып табылады (ең алдымен – интерфейс шаблоны). Осы үлгілер арқылы пограммадағы реал объекттердің классы құрылады(мұрагерлік арқылы).
5. Объекттер полиморфизмі
Объектігі бағытталған программалауды қолдану барысында объекттердің полиморфизмі қамтамасыз етіледі. Бұл термин нені білдіреді?
Объекттердің полиморфизмі мынаны білдіреді: әртүрлі объекттерге жіберілген бір және сол бір хабарлама программаның орындалу этапында нақты қайсы объект осы хабарламаның қабылдаушысы болуына байланысты әртүрлі әрекеттердің орындалуына (әртүрлі тәсілдердің шақырылуы)әкелуі мүмкін.
Басқаша айтқанда: қасиеті, қызметі, ішкі құрылымы бойынша әртүрлі объекттер мағынасы бойынша бірдей(програмисттің көзқарасы тұрғысынан) әрекеттерді табиғаты мен ішкі құрылымына байланысты әртүрлі орындауы мүмкін.
Егер хабарламаны жіберу тәсілдің процедура сияқты шақырылуына алмастырылған болса(Си, Паскаль тілдерінде), онда полиморфизм мынаны білдіреді: тәсіл шақыруы сақталған программа кодының сол және тек сол бір бөлігі кодтың орындалу кезінде қайсы класстың экземпляры әрекетті орындаушы боп табылуына байланысты әртүрлі тәсілдердің шақырылуына әкеледі.
Мысал.
Қазірше нақты бір тілдің синтаксисін қолданып жатпаймыз. Айталық, Р – объект көрсеткіші болсын. Р көрсеткіші програмаманың орындалу кезінде түрлі класстарға нұсқауы мүмкін. Айталық, ол параметр ретінде қайсыбір ррр процедураға берілсін. Хабарлама жіберу тілдің құралдарымен былайша жазылатын болсын
P.Show;
ppp процедурасы "паскалдік" стилде былайша сипатталсын
procedure ppp(P);
begin
P.Show;
end;
ppp процедурасын шақыру кезінде, Р ретінде түрлі класстардың көрсеткіші берілуі мүмкін. Полиморфизм әсері мынадан көрінеді: сол және сол бір код (P.Show) Show хабарламасына жауап ретінде процедура параметрі ретінде берілген Р көрсеткіші қайсы классты нұсқауына байланысты түрлі тәсілдің шақырылуына әкеледі.
6. Кеш байланысу механизмі
Полиморфизмді жүзеге асыру үшін ОБП тілі кеш байланысу механизмін қолдауы қажет. Кеш байланысу механизмінің мәні мынада: жіберілген хабарламаға жауап қату үшін керекті нақты тәсілдің адресі компиляция этапында емес, прогрмманың орындалу барысында – хабарламаны жіберу кезінде анықталады
Кеш байланысуды жүзеге асыру үшін объект тәсілі жөніндегі мәлімет оның өзінде бар болуы керектігі айқын. Әдетте, қайсыбір класстың экземплярында өз тәсілдерінің көрсеткіші бар болады немесе класстың барлық экземплярлары үшін ортақ осындай көрсеткіштер кестесіне сілтеме жасайды. Хабарлама жіберу компилятор арқылы осы мәліметті объекттің экземплярынан оқу және қажет адрес бойынша тәсілді шақыруға алмастырылады. Класстың барлық экземплялары үшін тәсілдер бірдей болғандықтан оларды компьтер жадысында бір мәрте сақтаған дұрыс.
Си++ және Турбо Паскаль тілдерінде кеш байланысу арқылы virtual кілттік сөзімен сипатталған тәсілдер шақырылады. Ал, Смолток тілінде кеш байланысу арқылы барлық тәсілдер шақырылады.
Осылайша, ОБП-ң идеяларын тиімді пайдалану үшін сол тілде объект, хабарлама, объект инкапсуляциясы, класс механизмі, мұрагерлік механизмі, полиморфизм терминдерінде программалау қолдау табу керек.
Лекция 11
Қарапайым объекттің сипаттамасы.
Жоспар:
1. Объектілі типті жариялау
2. Объект және тәсілді жариялау мысалы
3. Объект экземплярын көрсеткіш арқылы пайдалану
4. Объект экземплярларымен жұмыс істеуде WITH операторын қолдану
Достарыңызбен бөлісу: |