Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмдеу жане багдарламалау негиздери 4 г.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
2.73 Mб
Скачать

30 Дәріс тақырыбы: Объектіге-бағытталған программалау.

Объектіге-бағдарланған программалау (ОБП) бағыт ретінде 60 жылдардың соңында пайда болды. ОБП алғаш рет Симула-67 тілінде іске асырылды (немесе «Симула кластарымен»). ОБП негізгі ұғымы класс және объекті болып табылады. Класс деп программист құрастыратын жаңа күрделі типті айтады. Объекті-бұл класстың жеке данасы, іс жүзінде ол класс айнымалысын білдіреді. Турбо Паскалда класс объектілік тип немесе «объект» типі, ал объектілер осы типтің айнымалылары болып табылады. ООП негізгі идеясы – деректерді (өрістерді) және осы деректермен жасалатын амалдарды (әдістерді) бір тұтасқа біріктіру, яғни Объект = өріс + әдістер.

Мұндай біріктіру ОБП жасайды, жекелеп алғанда, конструкциялау кезінде қолайлы құрал АТД.

«Объект» типінің анықтамасы мынадай:

type

TObj = object

P1; P2; …; Pn;

M1; M2; …; Mk;

end;

мұнда TObj – типтің аты, P1; P2; …; Pn – объекті өрісінің сипаттамасы, ол жазба өрісінің сипаттамасына ұқсас, M1; M2; …; Mkобъекті өрісінің тақырыптары, кіші программаның тақырыбына ұқсас. Әдістердің толық анықтамасы объектілік типтен кейін орналасады және әдеттегі кіші программалардың анықтамасын еске салады. Бірақ соңғысынан айырмашылығы әдістің атының алдында қосымша пайда болады: TObj. Әдістің аты. Сондай-ақ әдеттегі процедуралар мен функциялардан басқа ерекше әдістер болады- олар конструкторлар және деструкторлар. Объектінің өрістері мен әдістердің көрінетін саласы объектінің барлық әдістерінің денесіне таралады.

«Объект» типті айнымалының өрістері мен әдістеріне қатынау – тікелей және толықтай жазба өрістеріне қатынауға ұқсас, соның ішінде қосу операторының көмегімен қатынау да.

ОБП үшін үш принцип тән: инкапсуляция, иелену және полиморфизм.

Инкапсуляция - өрістер мен әдістерді объектіге біріктіру. Мұнан басқа бұл принцип объекті өрістеріне тікелей қатынауға қарамастан бұл қатынауды пайдалану нашар стиль болып табылатынын ұйғарады. Жақсы стиль өріспен кез келген операция үшін сәйкес әдіс тартылуы тиістігін білдіреді.

Иелену объектілік типтер –тектердің өрістері мен әдістерін иеленетін және жаңа өрістер мен әдістер қосатын типтер-ұрпақтарды конструкциялау мүмкіндігін білдіреді. Бұл жағдайда тип-ұрпақты анықтау келесідей түрде басталады: TNew = object (TOld), мұнда TOld - тип-тектің аты, ал TNew – тип-ұрпақтың аты. Тектің өрістері мен әдістерінің көрінетін саласы әдетте оның ұрпақтарының әдістеріне таралады. Туындайтын объектілік типтер жүйесі ағаштық құрылым түзейді.

Полиморфизм тектердің әдістерін ұрпақтардың бір аттас әдістерімен иелену кезінде «жабу» мүмкіндігін білдіреді. Осылайша, әртүрлі, бірақ ұқсас, көмекші алгоритмдер бір атпен аталатын болады.

Объектінің қажетті әдісін шақыру алдында объектіні әдістермен байланыстыру жүреді. Ерте (немесе статикалық) байланыстыру –ол компиляциялау кезеңінде жүреді және кеш байланыстыру – ол программаны орындау кезеңінде жүреді, болып бөлінеді. Бірінші жағдайда өзінің жабатын әдісін тегінің әдісі арқылы шақыру кезінде дұрыс емес байланыстыру жүреді – жабу әдісі шақырылатын болады. Екінші жағдайда орындау кезеңінде сырттай әдістер кестесі (СӘК) құрылады және оның көмегімен дұрыс байланыстыру жүреді. Кеш байланыстыру кезінде жабу әдістерін сырттай деп виртуальды деп жариялау қажет – тақырыптан кейін virtual түйінді сөзін көрсету қажет; (нүктелі үтір – міндетті!). Статикалық жабылатын әдістердің тақырыптары формальды параметрлердің түрлі жиындарынан тұруы мүмкін, виртуальды әдістер үшін формальды параметрлердің тізімдері бірдей болуы тиіс.

ТВМ құру үшін конструктор деп аталатын арнайы әдіс қажет. Оның жариялануы әдіс-процедуранікіндей, бірақ procedure орнына constructor жазылады. Конструкторлардың мынадай қасиеттері болады:

1) конструктордың денесі бос болуы мүмкін;

2) конструкторлар бірнешеу болуы мүмкін;

3) конструкторлар бір бірін жабуы мүмкін;

4) конструктор еш уақытта виртуальды болмауы мүмкін,

5) конструкторды шақыру объектінің кез келген виртуальды шақыруынан бұрын болуы тиіс. Типтелген константтар-объектілер типтелген констант-жазбаларға ұқсс.

Объектінің әдістері мен өрістеріне қатынаудан басқа бір біріне бір типтес объектілер беруге, сондай-ақ объекті-ұрпақтарды объекті-тектерге беруге рұқсат етілген. Объекті-тектерді объекті-ұрпақтарға беруге тыйым салынған.

Динамикалық объектілерді пайдалануға рұқсат етіледі, бұл ретте объектіге көрсеткіштер үшін беру ережесі объектілердің өздері үшін сияқты. Әдетте динамикалық объектілерді жадыдан алып тастау кезінде деструктор деп аталатын тағы бір арнайы әдіс қолданлады. Ол босатылатын жадының байттары санын дәл анықтауға арналған. Оның жариялауы әдіс-процедуранікі сияқты, бірақ procedure орнына destructor жазылады. Деструкторлар виртуальды болуы мүмкін, олар бірнешеу болуы да мүмкні, олардың денесі бос болуы мүмкін. Динамикалық объектілер үшін New и Dispose процедураларына қатынау синтаксисі кеңейтілген:

var

PObj: ^TObj;

begin

New(PObj, Init(S1, …, Sn));

Dispose(PObj, Done(T1, …, Tm));

мұнда PObj - динамикалық объектіге көрсеткіш, Init – объектінің конструкторына қатынау, а Done –объектінің деструкторына қатынау. Бұл жағдай үшін конструкторды және деструкторды шақыру синтаксисі кеңейтілген: Init және Done функциялар сияқты шақырылады, ал олардың аттарының алдында (PObj^) динамикалық объектінің атын көрсетіп қажет емес өйткені New шақырған кезде динамикалық объекті болған жоқ!