- ОБП тілдеріндегі объект. Олардың өзара қатынасы
Өткен тақырыпта ОБП ұғымдарын жалпылама абстрактілі қарастырдық. Бұл ұғымдарды нақтылай түсеміз. Объектіге бағытталған программалау тілдері тұрғысынан объектке келесі анықтаманы беруге болады.
Объект — бұл жеке локал жадыға ие және төмендегі әрекеттерді орындай алатын программалау тілінің абстракциясы(«бір нәрсе»):
- Қайсыбір әрекеттерді орындайды.
- Локал жадыда қайсыбір мәліметті сақтайды.
- Өзге объекттермен өзара қатынас жасайды.
Объекттер хабарламалар арқылы өзара қатынас жасайды.
(MS Windows операциялық жүйелерінде «хабарлама» ұғымы қолданылады. Бірақ бұл ұғымның мағынасы өзгешелеу).
Өзарақатынас жасауға екі объект қатысады: хабарлама жіберуші мен қабылдаушы. Хабарламада жіберуші қабылдаушыға қандай әрекет орындалу керек екеін білдіріп, бұл үшін керектіпараметрлерлі жібереді. Қабылдаушы әрекетті орындап, жіберушіге нәтижені қайтарады.
Өзара қатынастың басқа түрі қарастырылмаған.
ОБП-ң мықты тілі – Смолток тілінде (қазір қолданылмай кеткен) хабарламада селектор және параметр болып ажыратылады.
Селектор – бұл қабылдаушы объекттен қандай әрекет (мағынасы бойынша) талап етілетіндігін білдіретін хабарламаның бөлігі.
Әрбір хабарламаға селектор қатысады.
Хабарлама параметрлері процедураның нақты параметрлері сияқты қажетті бастапқы берілгендерді беріп, әрекетті нақтылай түседі. Хабарламада параметр біреу не бірнеше не тіпті жоқ болуы да мүмкін.
Мысалы, әрекет «объектті экранда қайсыбір позицияда көрсету» дегенді білдіруі мүмкін. Онда хабарламаның селекторы ShowAtPosition идентификаторы болып, ал параметрлері – талап етілген экран позициясының X және Y координаталары болып табылуы мүмкін.
Бірқатар ОБП тілдерінде идентификатор ғана емес, әріпті-цифрлық тізбек және қызметші символдар да (мысалы, +,-,*,/,->, = ) селектор ретінде беріле алады.Бұл мысалыға, арифметикалық өрнекті хабарламалардың тізбегі ретінде жазуға мүмкіндік береді. Айталық, барлық сандар объект болып табылса, «+» селекторлы хабарлама «параметр мен өзін қосып нәтижені қайтару» дегенді білдіреді: өрнектің жазылуы былай болады: 2+3, ал нәтиже ретінде 5 қайтарылады. Мұндай жазылу адамға түсінікті. Егер қызметші символдарды селектор ретінде пайдалануға рұқсат етілмесе (Паскалда сияқты), онда конструкцияны келесі түрдегі сияқты жазуға тура келеді:
2.add(3)
Алайда программаның оқып, түсінілуі қиындайтыны белгілі.
Объектті өңдеуге қабілетті хабарламалардың жиыны объект интерфейсі деп аталады.
Объектке интерфейсінде бар хабарламалар ғана жіберілуге тиіс.
- Тәсілдер
Өзіне жіберілген хабарламаларды өңдеу үшін объект тәсілдер(кейде ережелер деп аталады) деп аталатын ерекше процедураларды пайдаланады.
Объекттің мінез-құлығы деп оның тәсілдерінің бірлестігін айтады.
Тәсіл хабарлама параметрлерін қабылдап,оларды және объекттің локал жадысындағы мәліметтерді басшылыққа ала отырып, қайсыбір әрекеттерді (есептеулерді) орындап, нәтижені хабарламаны жіберген объектке қайтарады.
Си++, Паскаль сияқты тілдердің жасақшылары Смолток тіліндегідей хабарламаны символдық идентификаторлармен бірге жіберуден бас тартты. Себебі, мұндай механизм өте үлкен және сәйкес тәсілді таңдау үшін кестелерден хабарлама идентификаторын іздеп отыру қажет. Мұның орнына хабарламаны жіберу бұл тілдерде тәсілді процедура ретінде шақырумен алмастырылған. Хабарламаның бастапқы идеясына сәйкестендіру үшін тәсілді шақыру қарапайым процедураны шақырудан өзгешелеу етілді.
Объекттің локал жадысы. Инкапсуляция принципі
Объекттің локал жадысы өз құрылымына ие. Програмалаудың әртүлі тілдерінде объекттің локал жадысының құрылымдық бірлігін белгілеу үшін түрлі термин қабылданған. Мысалы, өріс (Турбо Паскальда), объект жағдайының айнымалысы(Си++-те), немесе экземпляр-айнымалы(Смолток-та).
ОБП идеясы нақты объекттің тәсілдері ғана оның локал жадысымен жұмыс істей алады дейді, және локал жадының құрылымы тәсілдің ішінде ғана белгілі деп есептейді.Осы көзқарас тұрғысынан «Бұл тәсіл объекттің мынадай айнымалысының (өрісінің) мәнін қайтару үшін қызмет етеді» деу дұрыс емес. Өйткені сырт көзге объекттің локал жадысында осындай айнымалының бар екендігі белгісіз.
Мысалы, жолаушы лифтінің мінез-құлқын моделдейтін объектті сипаттайтын болсақ, және локал жадыныңpassengerCount деп аталатын бір ұяшығында кабинадағы жолаушылардың ағымдық саны сақталса, онда «кабинадағы жолаушылар санын қайтаратын» тәсіл құруға болады. Бірақ, ол туралы «passengerCount өрісінің мәнін қайтаратын» тәсіл деп айту дұрыс емес (ол осылай жұмыс істеуі де мүмкін).
Жоғарыда айтылған мәліметтерді қорытындылай келе, объекттерді «қара жәшік» ретінде елестету мүмкін, оның кірісіне қайсыбір әсер(хабарлама) беріледі, ал шығысынан жауап сигналы(нәтиже) алынады. Қара жәшіктің ішінде дәл не орындалатындығы, оның құрылымы– сырткөзге көрінбейді.
Инкапсуляция принципі объектпен тек бір бүтін ретінде ғана жұмыс істеуді талап етеді. Объектті бір бүтін ретінде құруға, көшіруге, жоюға немесе «қолынан келетін нәрсені өтініш етуге»(хабарлама жіберуге) болады. Бірақ, сырттан тұрып объекттің бөлігіне(өрісіне) қол жеткізуге болмайды.
Паскальда Си++, Смолток және ОБП-ң басқа тілдерінде объект өрісі ретінде басқа бір объектті алуға болады. Бұл жағдайда инкапсуляция принципі бойынша тәсілдің ішінде мұндай объект-өріспен жұмыс тек хабарлама жіберу жолымен жүргізілуі керек. Объект-өрістердің өрісіне қолжеткізу тек олардың өз тәсілдері арқылы мүмкін болады.