ОБП – программалау технологиясы ретінде. ОБП-ның негізгі түсініктері

 

Дәріс мақсаты: объектіге бағытталған программалау түсінігін қалыптастыру, программалаудың негізгі принциптері мен қасиеттерін меңгерту, объектіге бағытталған программалау тілдеріне шолу жасау. 

Кілттік сөздер: объектіге бағытталған программалау; инкапсуляция; полиморфизм; мұрагерлік; абстрактілеу; қатынауды шектеу; модульділік; иерархиялық.

Жоспар:

  1. Объектілі-бағытталған программалау тарихы
  2. Объектілі-бағытталған программалаудың негізгі принциптері
  3. Объектілі-бағытталған программалаудың қасиеттері
  4. ОБП тілдері

 

  1. Объектілі-бағытталған программалау тарихы

Объектілі-бағытталған программалау – процедуралық программалау идеологиясының дамуы нәтижесінде пайда болды. Одан да басқа, қазіргі  объектілі бағытталған программалауда – оқиға (оқиғалы бағытталған программалау деп те атайды) және компонент (компоненттік программа) түсінігі көптеген мағына береді.

Бұл программалаудың алғашқы тілі – Симула болып табылады. 1967 жылы пайда болған бұл тіл шындыққа революциялық идеяны: объектіні, класстарды, виртуальді әдістерді және т.б ұсынды, сондықтан мұның барлығы қазіргі замандағыларға қабылдана қоймады. Соған қарамастан, көптеген концепциялар Smalltalk тілінде Алан Кей және Дэн Ингаллспен бірге дамытты. Дәл осы тіл ең алғашқы ұзақ таратылған  объектілі бағытталған программалау тілі болып табылады.

Қазіргі уақытта программаның қолданбалы тілінің саны басқа парадигмаларға қарағанда көбірек. Прогаммалық жүйенің облысында әлі де процедуралық программаның парадигмасы қолданылады және де программаның жалпы қабылданған тілі – С тілі болып табылады. Операциялық жүйенің жүйелік және қолданбалы деңгейдегі өзара іс-әрекеттерде объектілі бағытталған программалау тілдері ғана өз ықпалын көрсетті. Мысалы, мультиплатформалық программаның кітапханаларының ішінде ең көп таралғаны – С++ тілінде жазылған Ot объектілі бағытталған кітапхана болып табылады.

 

  1. Объектілі-бағытталған программалаудың негізгі принциптері

Программалау түсінігінде объектілі бағытталған программалау программаны программалық объектілер жиынтығы түрінде көрсетуге негізделген күрделі программалық қамсыздандыруды құру технологиясы түрінде анықталады. Бұл жерде объектінің өзі қандай да бір тип (класс) экземпляры болып табылады, ал кластар қасиеттерді тұқым қуалау арқылы иерархия құрады. Мұндай жүйеде программалық объектілер қарым қатынасы хабарламаларды жіберу арқылы іске асырылады. Объектілі бағытталған программалаудың негізгі артықшылығы модульдік программалаумен салыстырғанда модульдер арасында жіберілген ақпарат көлемінің азаюы және модуларалық байланыстар санының қысқаруы. Объектілі программалау программа құрудың жаңа технологиялық құралдарын ұсынады. Олар тұқымқуалаушылық, полиморфизм, компазиция, толтыру, паралелизм. Объектілі бағытталған программалаудың негізгі кемшілігі программалық жүйе құрастырылуының күрделілігі есебінен жылдамдықтың азаюы. Объектілі бағытталған программалау негізіне абстрактілеу, қатынауды шектеу, модулділік, иерархиялық, типтеу, параллельділік және тұрақтылық принциптері жатады.

Абстрактілеу — есептің пәндік облысында абстрактілерді ерекшелеу процесі. Абстракция дегеніміз қандай да бір объектінің оны барлық басқа объект түрлерінен ерекшелейтін сипаттамалар жиынтығы. Осылайша берілген объект ерекшеліктерімен шешілетін есептің әрі қарай қарастырылуы және талдануы жағынан нақты анықтайды. Анықтамаға сәйкес нақты затқа қолданатын абстракция шешілетін есепке тәуелді болады. Мысалы, бір жағдайда бізді заттың формасы қызықтырса, екіншісінде оның самағы, үшіншісінде жасалған материалы және т.с.с. Объектілі бағытталған программалау абстракцияның барлық қасиеттерін бүтін практикалық бірлікке, яғни қандай да бір абстрактілік типке біріктіруді қарастырады.

Қатынауды шектеу — абстракцияны іске асыратын жеке элементтерін шектеу. Қатынауды шектеу қажеттігі абстракцияны сипаттауда екі бөлікті шектеуді қарастырады:

  • Интерфейс абстракцияны жүзеге асырудың қолжеткізуге мүмкіндігі бар элементтің жиынтығы.
  • Реализация немесе жүзеге асыру. Абстракцияны жүзеге асырудың қолжеткізуге мүмкіндігі жоқ элементтің жиынтығы.

Модульділікпрограммалық жүйелерді құруда программаны жеке бөліктер түрінде жүзеге асыру принципі.

Иерархиялық — абстрактордың реттелген немесе ранжирленген жүйесі. Иерархиялық принципі программалық жүйелерді құруда иерархияларды қолдануды қарастырады. Объектілі бағытталған программалауда иерархияның екі түрі қолданылады:

  • “бүтін / бөлік“ иерархиясы кейбір абстрактор қарастырып отырған абстракцияға оның бөлігі ретінде кіретінін көрсетеді. Иерархияның бұл нұсқасы жобалаудың әр кезеңдерінде жүйені бөліктерге бөлу процесінде қолданылады.
  • “жалпы / жеке” иерархиясы қандай да бір абстракция, басқа абстракцияның жеке жағдайы болатынын көрсетеді. Мысалы, тамақтанатын үстел үстелдің нақты түрі, ал үстел жихаздың нақты түрі. Иерархияның бұл нұсқасы класс құрылымын құруда күрделі кластар қарапайым кластар негізінде оларға жаңа сипаттамалар қосу жолымен құрылған кезде қолданылады. Объектілі бағытталған программалаудың негізгі механизмдерінің бірі жалпы жеке иерархиясында қасиеттерді тұқымқаулау. Тұқымқуалау абстрактор арасындағы қатынас. Бұл кезде қандай да бір абстракция бір немесе бірнеше басқа абстракцияның құрылымдық немесе функционалдық бөлігін қамтиды.

Типтеу — объектілер қасиеттеріне салынатын және әр түрлі типті абстракцияның өзара алмасуына жол бермейтін шектеу. Типтеу приципін қолдану:

  • Программалық объектіге қолданатын мүмкін емес амалдармен байланысты қателерді ертерек табуға;
  • Құжаттауды жеңілдетуге;
  • Эффективтік кодты генерациялауға мүмкіндік береді.

Параллельділік — бірнеше абстракцияның қасиеттері бір уақытта активт күйде болады.

Тұрақтылық  — абстракцияның процестен тәуелсіз болу қасиеті.

Осы аталған 7-принциптің  төртеуі жүзеге асырылатын болса, онда тіл – объектілі бағытталған болып саналады.

 

  1. Объектілі-бағытталған программалаудың негізгі қасиеттері:

Объектілі – бағытталған программалаудың негізгі үш қасиеті бар: инкапсуляция, полиморфизм және мұрагерлік (тұқым қуалау).

Инкапсуляция. Кластың мәліметтер структурасы сыртынан Си тіліндегі структураға және Паскальда немесе QuickBasic-тегі жазба тәрізді объектілі бағытталған тілдер мәліметтерінің типіне ұқсас. Сондықтан, осындай структура элементтері (класс мұшелері) тек мәліметтер ғана емес, сондай-ақ әдісте (яғни процедура мен функция) бола алады. Мұндай біріктіру – инкапсуляция деп аталады.

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

Полиморфизм. Полиморфизм – бұл әдістің мәліметтерін шақыру кезінде қандай класстың объектісі қолданылатынан тәуелді болып келетін әр түрлі программалық кодқа (полиморфты код) – бір атпен берілген функцияның сәйкес келу құбылысы. Полиморфизм – класс  ұрпақтарының міндетті түрдегі сигнатуралық әдіспен берілген  класстың алдыңғы ұрпақтарының реализациялық әдісін өзгертумен қамтамасыз етіледі. Бұл класс ұрпақтарының өзгермейтін интерфэйсінің сақталуын қамтамасыз етеді және әр түрлі класпен берілген кодта әдіс атымен байланысуды жүзеге асырады. Мұнда шақыру қай кластың  объектісімен жүзеге асырылады, мәліметтер атымен берілген әдіс те сол кластан алынады. Мұндай механизм динамикалық (жай) байланысу деп атайды.

Жай және күделі палиморфизм. Кез – келген прогаммалау тілінде класстар иерархиясын құру үшін полимарфизм механизмі қарастырылған. Ол иерархияның әр түрлі деңгей класстары үшін қандай да бір аты бойынша біріккен әдістің әр түрлі аспектілерін анықтауға мүмкіндік береді. Полимарфизмді жай және күрделі деп бөледі. Жай полимарфизм ерте байланысу механизміне негізделеді. Ал күрделі полимарфизм кеш байланысу механизмін қолданылады.

Жай немесе статикалық полимарфизм С++ тілінде компиляция кезінде қолданылады және функцияларды қайта анықтау механизмі көмегімен іске асырылады. Мұндай полиморфты функциялар С++ -те қайта анықталатындар деп аталады. Жалпы ережелерге сәйкес олар қайталанатын параметр типімен және сигнатурамен яғни жіберілетін параметр сонымен типімен және кезектесу ретімен ерекшеленеді.

Мұрагерлік. Мұрагерлік – класс алдындағы ұрпақтың барлық қасиеттерін және әдістерін сақтай отырып, бір кластың басқа кластан пайда болу мүмкіндігі. Мұрагерлік қатынасымен байланысқан кластар жиынтығы – иерархия деп атайды. Нақтырақ  айтқанда, объект келесі объектінің негізгі қасиеттерін мұра ете алады және тек оған ғана сәйкес кескіндер қоса алады. Мұрагерлік маңызды, себебі ол кластар иерархиясын қолдану үлкен информация лектерін басқарылатындай етеді.

 

  1. Объектілі-бағытталған программалау тілдері

Программаларды дайындауда объекттік тәсілді өнімді қолдану үшін осы тәсілді қолдайтын программалау тілі қажет. Яғни объектілер кластарының сипаттамасын алуға, объектілік типтердің деректерін құруға объектілерімен операциялар орындауға мүмкіндік болу керек. 

Осындай тілдердің алғашқысы барлық деректерді кейбір кластардың объектілері болып табылатын, ал кластардың жалпы жүйесі алдын-ала анықталған базалық кластардың негізінде иерархиялық құрылым сияқты салынатын SmallTalk  тілі болды.

Программалау тәжірибесі бойынша программалаудың технологиясындағы кез-келген әдістемелік тәсілді басқа тәсілдерді қарастырмай қолдануға болмайды. Бұл объектіге бағытталған тәсілге де жатады. Объектілі бағытталған программалаудың пайдалылығы бір қатар типтік проблемаларда бар, пайдаланушымен диалогтарды программалау және т.б. Бірақ та тағы да басқа есептер бар, бұнда объектілік тәсілді қолдану артық еңбекті шығындауынан басқа ештемеге әкелмейді. Осыған байланысты объектілік тәсілді  басқа әдіс танымдарымен байланыстыруға мүмкіндік жасайтын программалаудың объектіге бағытталған тілдері көп таралды.

         Сондай-ақ, объектіге бағытталған программалау тілі ретінде Оберон тілін айтуға болады. Ол – жоғары санап шығу құралдарынан басқа ешқандай объектілі құралдардан тұрмайды ( тіпті онда класты хабарлауға арналған жеке кілттік сөз де жоқ). Бірақ көптеген тілдер көрсетілген кішкене жиынтыққа осы немесе басқа да қосымша құралдарды қосады. Оның қатарында:

  • Конструкторлар, деструкторлар, финализатор
  • Қасиеттер (аксессорлар)
  • Индексатор
  • Көпше түрде берілген альтернативтегі мұрагерлік тәрізді интерфэйс
  • Класқа арналған операторды анықтау

         Қазіргі кезде объектіге бағытталған программалау тілі – келесідей синтаксистік құралдар жиынтығын ұсынады:

  • Кластың өрістерімен (класс мүшелерінің мәліметтерімен ) және әдістерімен (класс мүшелерінің функциясымен) берілген хабарлама.
  • Класты кеңейту (мұрагерлік) механизмі – жаңа кластың бұрыннан бар кластың алдыңғы ұрпақтарынан туылуы. Сондықтан, объектіге бағытталған программалау тілдері тек жекеше мұрагерлікті ғана үстанады.
  • Класты ішкі структурадан қорғау құралы. Көбінесе оларға – public, private типті өріске және әдіске берілген қол жетімді модификаторы, кейде protected, кей жағдайда одан да басқалары.
  • Әр түрлі кластың сол бір айнымалы экземплярына рұқсат ететін полиморфты айнымалылар және функция параметрі (әдістері).
  • Виртуалды әдістерді қолдану орнына берілген класс экземплярының полиморфты тәртібі. Көптеген объектіге бағытталған программалау тілдерінде кластың барлық әдістері виртуалды болып табылады.

Қазіргі кезде көп қолданылатын объектіге бағытталған тілдер объектті Паскаль, Си ++, Java,VisualBasic, SmallTalk кездеседі. Мұндай тілдер арнайы объектіге бағытталған программаны оңай етуге құрылған. Сонымен бірге объектілермен жұмыс істеу үшін көп дамыған құралдар С++ құрамында бар.

         С++ іс жүзінде  объектіге бағытталған программалаудың құралдарымен толықтырылған.

 

Бақылау сұрақтары:

  1. Объектіге бағытталған программалау дегеніміз не?
  2. Объектіге бағытталған программалаудың негізгі принциптері қандай?
  3. Объектіге бағытталған программалаудың қасиеттерін қандай?
  4. Қандай объектіге бағытталған тілдер бар?
  5. Қандай программалау технологиялары бар?

 

Әдебиеттер:

  1. Г.С. Иванова и др. ООП: Учебник для вузов, М., Изд-во МГТУ им.Баумана, 2003.- 368 с.
  2. А.В. Замулин. Курс лекций: Объектно-ориентированное программирование (С++)
  3. А.В. Замулин. Курс лекций: ООП (С++, Ява, C#)
  4. Бьерн Страуструп. Язык программирования С++. Третье издание. — М.: Изд. Бином, Невский Диалект, 1999.

 

 

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *