Кіріспе

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

Композиттік дизайн үлгісі қандай проблемаларды шеше алады?

Клиенттерге бөліктер мен тұтастарды біркелкі пайдалану мүмкіндігін беру үшін, бөлік-тұтас иерархиясы көрсетілуі керек. Бөлік-тұтас иерархиясы ағаш тәрізді құрылым ретінде ұсынылуы мүмкін. (1) Бөлік нысандары мен (2) Бөлік нысандарына контейнер ретінде қызмет ететін тұтас нысандарын анықтағанда, клиенттер оларды жеке-жеке қарауы тиіс, бұл клиенттік кодты қиындатады.

Мотивация

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

Түрлілігі

Дизайн үлгілерінде сипатталғандай, бұл үлгіде негізгі компонент интерфейсіне бала элементтерді өңдеу әдістерін де қосу көзделеді, тек Composite кіші класына ғана емес. Жақындағы сипаттамаларда кейде бұл әдістер кездеспейді.