Кіріспе

Компьютерлік бағдарламалауда жоғары деңгейдегі нысан түрлерін құру әдісі

Компьютерлік ғылымда нысан құрастыру және нысан жинақтау – нысандарды немесе дерек түрлерін күрделірек нысандарға біріктірудің өте байланысты тәсілдері. Әдетте, құрастыру мен жинақтау арасындағы айырмашылыққа көңіл бөлмейді. Құрастырудың кең таралған түрлері – нысанға бағытталған бағдарламалауда қолданылатын нысандар, тегтелген біріктірулер, жиынтар, тізбектер және әртүрлі график құрылымдары. Нысан құрастыру дерек құрылымдарымен байланысты, бірақ олардан өзгеше. Нысан құрамы – ақпаратты бейнелеу үшін қолданылатын іске асыру немесе физикалық дерек құрылымы емес, ақпараттың логикалық немесе түсіндірмелік құрылымы. Мысалы, тізбек жиыннан өзгеше, себебі (басқа факторлармен қатар) құрастырылған элементтердің реті біріншісі үшін маңызды, ал екіншісі үшін емес. Массивтер, тізбекті тізімдер, хэш-кестелер және тағы басқа дерек құрылымдары олардың кез келгенін іске асыру үшін қолданылуы мүмкін. Көбінесе шатастыратын, кейбір бірдей терминдер дерек құрылымдары мен құрастырулар үшін қолданылады. Мысалы, "екілік ағаш" екі нәрсені де білдіре алады: дерек құрылымы ретінде ол элементтердің сызықтық тізбегіне қол жеткізу құралы болып табылады, ал ағаштағы элементтердің нақты орны маңызды емес (ағаш ішкі жағынан өз мағынасын өзгертпей, қалай қаласа солай реттелген болуы мүмкін). Дегенмен, нысан құрамында орны маңызды, оларды өзгерту мағынаны өзгертеді (мысалы, кладограммаларда).

Бағдарламалау техникасы

Нысанға бағытталған бағдарламалау деректер мен мінез-құлқын капсулалау үшін нысандарға негізделген. Ол функционалдықты күрделірек құрылымдарға біріктіру және құрастыру үшін екі негізгі техниканы қолданады: субтипизация және нысан композициясы. Нысан композициясы – бұл нысандарды күрделі нысандардың ішінде біріктіру, сонымен бірге әр нысанның жақсы анықталған интерфейсі арқылы инкапсуляциясын қамтамасыз ету, олардың ішкі құрылымын жасыру. Осы тұрғыдан алғанда, нысан композициясы дерек құрылымдарынан өзгеше, себебі дерек құрылымдары инкапсуляцияны міндетті түрде сақтамайды. Нысан композициясы бірнеше байланысты нысандар тобын, мысалы, жиынтық немесе нысандар тізбегін де білдіре алады. Делегация композицияны күшейтуге мүмкіндік береді, күрделі нысанға жасалған сұрауларды немесе шақыруларды оның ішкі компоненттерінің біріне бағыттап. Сыныпқа негізделген және типтелген бағдарламалау тілдерінде типтер құрама және құрама емес типтерге бөлінеді, ал композиция типтер арасындағы қатынас ретінде қарастырылады: құрама типтегі нысан (мысалы, автомобиль) басқа типтегі нысандарға (мысалы, дөңгелек) "ие". Құрама нысан бір типтегі бірнеше қосалқы нысандарды қамтыса, оларға нақты рөлдер тағайындалуы мүмкін, көбінесе атаулар немесе нөмірлер арқылы ажыратылады. Мысалы, нүкте нысаны әртүрлі ось бойындағы қашықтықты білдіретін 3 саннан тұруы мүмкін, мысалы, 'x', 'y' және 'z'. Бөлік-бүтін қатынастарын зерттеу – мереология. Композицияны субтипизациядан ажырату қажет, ол жалпы дерек типіне толықтырулар қосып, одан арнайырақ дерек типін жасау процесі. Мысалы, автомобильдер көлік түрінің бір түрі болуы мүмкін: автомобиль – көлік. Субтипизация әртүрлі нысандар арасындағы қатынасты сипаттамайды, керісінше, бір типтегі нысандар басқа типтегі нысандардың да қатарына жататынын көрсетеді. Мұндай қатынастарды зерттеу – онтология. JavaScript сияқты прототипке негізделген бағдарламалау тілдерінде нысандар прототип нысанынан мінез-құлқын нысан жасалған сәтте динамикалық түрде мұралай алады. Композицияны прототиптеуден ажырату керек: жаңадан жасалған нысан прототипінің композициясын мұралайды, бірақ ол өзі де дербес композицияланған болуы мүмкін. Күрделі нысандар сақтауда құрама нысандарды, сілтемелерді немесе басқа да әртүрлі тәсілдермен орналастыру арқылы бейнеленуі мүмкін. Күрделі нысанның элементтері атрибуттар, өрістер, мүшелер, қасиеттер немесе басқа да атаулармен белгіленуі мүмкін, ал нәтижедегі композиция құрама тип, сақтау жазбасы, құрылым, топтама немесе пайдаланушы анықтаған тип (UDT) ретінде танылуы мүмкін. Толық мәліметтер үшін төмендегі жинақтау бөлімін қараңыз.

UML модельдеу техникасы

UML модельдеуде объектілерді бағдарламалау тілімен іске асырылуына қарамастан, тұжырымдық тұрғыдан құрастыруға болады. UML-де объектілерді құрастырудың төрт тәсілі бар: қасиет, қауымдастық, агрегация және композиция.

Қасиет – сыныптың атрибутын көрсетеді. Қауымдастық – байланысты кластардың мысалдары арасындағы семантикалық қатынасты көрсетеді. Қауымдастықтың мүшелік ұшы байланысты кластың қасиетіне сәйкес келеді. Агрегация – агрегаттың (бүтін) және байланысты компоненттер тобының (бөліктердің) арасындағы бөлік/бүтін қатынасын модельдейтін қауымдастықтың бір түрі. Композиция, сондай-ақ композициялық агрегация деп те аталады, композиттың (бүтін) және эксклюзивті түрде меншікке алынған бөліктер тобы арасындағы бөлік/бүтін қатынасын модельдейді. Агрегат пен оның компоненттері арасындағы қатынас – әлсіз «иеленеді» қатынасы болып табылады: компоненттер бірнеше агрегаттардың құрамында болуы мүмкін, агрегат арқылы өтпей басқа объектілерден қолжетімді болуы мүмкін және агрегат объектісінен кейін де сақталуы мүмкін.

Құрастыру

Бірнеше композицияланған дерек түрінің даналарын сақтауға қолданылатын құрылым контейнер деп аталады. Мұндай контейнерлердің мысалдары: массивтер, ассоциативтік массивтер, екілік ағаштар және тізбекті тізімдер. UML-де контейнерлік қатынас 0 * немесе 1 * көптікпен көрсетіледі, бұл құрама объектінің құрамында құрастырылған кластың белгісіз санынан тұратынын білдіреді.

Рекурсивті композиция

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

Құрама үлгі

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