projektni uzorci

13
Пројектни узорци Уникат / Singleton / објектни, креирања Обезбеђује једниственост Униката. Склоп / Composition / објектни, структуре Склоп садржи произвољан број Елемената. Применљивост: када се жели да постоје хијерархије објеката целина-део такве да су целина и део исте врсте; када се жели да клијенти могу да игноришу разлике изме у композиција и појединих објеката. Често се веза елемент-родитељ користи за узорак Ланац одговорности ако елемент не може да одговори на захтев – прослеђује га родитељском објекту. Допуна има сличну структуру класа и често се користи са Склоп; када се користе заједно обично имају заједничку наткласу. Мува дозвољава дељење елемената, али они не могу да приступају својим родитељима. Итератор се користи често за обилазак структуре Склоп. Посетилац локализује операције и понашање које би иначе било дистрибуирано између класа Склоп и Лист. Прототип / Prototype / објектни, креирања Умножава KонкретанПрототип и враћа га Клијенту. Применљивост: клијент захтева од прототипа да се клонира. Апстрактна Фабрика је алтернативан узорак, али се може и допунити Прототипом – фабрика може садржати скуп прототипова на основу којих клонира и враћа производе. Пројекти који интензивно користе узорци Склоп и Допуна могу имати користи и од узорка Прототип. 1

Upload: milos-mihajlovic

Post on 27-Apr-2015

97 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Projektni uzorci

Пројектни узорци

Уникат / Singleton /

објектни, креирања

Обезбеђује једниственост Униката.

Склоп/ Composition /

објектни, структуре

Склоп садржи произвољан број Елемената.

Применљивост: • када се жели да постоје хијерархије објеката целина-део такве да су целина и део исте врсте;• када се жели да клијенти могу да игноришу разлике изме у композиција и појединих објеката.

Често се веза елемент-родитељ користи за узорак Ланац одговорности ако елемент не може да одговори на захтев – прослеђује га родитељском објекту.Допуна има сличну структуру класа и често се користи са Склоп; када се користе заједно обично имају заједничку наткласу.Мува дозвољава дељење елемената, али они не могу да приступају својим родитељима.Итератор се користи често за обилазак структуре Склоп.Посетилац локализује операције и понашање које би иначе било дистрибуирано између класа Склоп и Лист.

Прототип/ Prototype /

објектни, креирања

Умножава KонкретанПрототип и враћа га Клијенту.

Применљивост: клијент захтева од прототипа да се клонира.

Апстрактна Фабрика је алтернативан узорак, али се може и допунити Прототипом – фабрика може садржати скуп прототипова на основу којих клонира и враћа производе.Пројекти који интензивно користе узорци Склоп и Допуна могу имати користи и од узорка Прототип.

1

Page 2: Projektni uzorci

Посматрач/ Observer /

објектни, понашања

inform := signal или inform := sendСубјекат обавештава све евидентиране Посматраче о премени свог стања.

Применљивост: • када једна апстракција има барем два међусобно зависна апсекта таква да промена било ког утиче на промену

других;• када измена једног објекта захтева измену непознатог броја других објеката;• када један објекат треба да сигнализира промену другим објектима не знајући ко су ти објекти.

За капсулирање комплексне семантике ажурирања Посредника може да посредује између Субјекта и Посматрача.

Итератор/ Iterator /

објектни, понашања

Обезбеђује приступ елементима Збирке по редоследу дефинисаном у Итератору без експонирања унутрашње структуре Збирке.Врсте: празан, унутрашњи, спољашњи.

Применљивост: • када желимо да се подрже вишеструки симултани обиласци агрегата;• када желимо да се обезбеди униформни интерфејс за обилазак разли итих агрегата;• када желимо да се ни клијент ни агрегат не оптерете политиком обиласка.

Итератор се често примењује на рекурзивне структуре као што је Састав.Полиморфни итератори се заснивају на Фабричком методу: – апстрактна операција агрегата (фабрике) за креирање итератора;– конкретизује се у поткласи конкретног агрегата;– објекат конкретног агрегата ствара објекат конкретне поткласе итератора.Итератор интерно може да користи Подсетник за ување стања итерације.

2

Page 3: Projektni uzorci

Допуна/ Decorator /

објектни, структуре

Динамички проширује функционалност Субјекта Допуном.

Применљивост:• када је потребно динамички додавати одговорности објектима на транспарентан начин;• када проширење извођењем није практично (када је могу велики број независних проширења, при ему се она

могу комбиновати, што води експлозији броја класа).

Допуна задржава интерфејс, а Адаптер мења интерфејс.Композиција има сличну структуру. Допуна је по структури дегенерисани Склоп – објекат Допуна садржи само једну компоненту, а објекат Композиција више; по намени је Допуна сасвим различит, јер додаје одговорности и није намењен груписању.Допуна и Стратегија су алтернативе за промену понашања објекта. Допуна мења спољашњост објекта, а Стратегија унутрашњост.

Стратегија/ Strategy /

објектни, понашања

Дефинише фамилију алгоритама и омогућава једноставну промену алгоритама.

Применљивост:• када се више сродних класа разликују само по понашању узорак омогућава конфигурисање класе једним од

више понашања;• када су потребне различите варијанте неког алгоритма;• када алгоритам користи податке о којима клијенти не треба ништа да знају: избегава се експонирање

комплексних структура података специфичних за алгоритам – потребно капсулирање алгоритма и података;• када класа контекста дефинише више понашања која се појављују као гране условне наредбе у разним

операцијама: гране условне наредбе треба капсулирати у њима одговарају е класе стратегије.

Објекти Стратегије често представљају добре објекте Муве.

3

Page 4: Projektni uzorci

Шаблонски метод/ Template Method /

класни, понашања

Дефинише костур алгоритма у Класи омогућавајући да одређене кораке алгоритма поткласа КонкретнаКласа измени.

Применљивост:• када се зели да се имплементирају инваријантни делови алгоритма једном, а да се оставе поткласама за

имплементацију делови који могу варирати;• када заједничко понашање међу поткласама треба локализовати да се избегне дуплирање.

Фабрички метод се често позива из Шаблонског метода.Шаблонски метод статички варира део алгоритма, а Стратегија динамички варира цео алгоритам.

Адаптер/ Adapter /

класни/објектни, структуре

Адаптира Адаптирани да би се уклопио у неки уређени систем.Врсте: класни (наслеђује Адаптер), објектни (агрегира Адаптер).

Применљивост:• генерално, узорак треба користити када: желимо да користимо неку расположиву класу која нема интерфејс

какав нам одговара или желимо да креирамо реупотребљиву класу која сара ује са неповезаним и непредви еним класама, т.ј. класама ији интерфејси нису неопходно компатибилни.

• објектни адаптер треба користити када: треба користити неколико постоје их поткласа, али је непрактично адаптирати њихове интерфејсе вишеструким извођењем из сваке од тих класа.

И Допуна и објектни Адаптер праве омотаче неког објекта: Допуна допуњује други објекат не мењају и му интерфејс, а Адаптер управо мења интерфејс адаптираног објекта (последица: Допуна подржава рекурзивне композиције, које нису могу е са адаптерима).Мост има сличну структуру, али је намењен другим стварима.

Стање/ State /

објектни, понашања

Промена функционалности Контекста без измене саме класе.

Применљивост:• када понашање објекта зависи од стања и мора се мењати у време извршавања;• када операције имају велике условне наредбе са више грана, чије извршење зависи од стања објекта: често

више операција садржи исту условну наредбу, па узорак Стање прави од сваке гране посебну класу која одређује понашање операције у датом стању.

4

Page 5: Projektni uzorci

Мува објашњава када се објекти стања могу делити.Објекти стања се често реализују као Уникати.

Подсетник/ Memento /

објектни, понашања

Чувар чува стање Ствараоца у Подсетнику.

Применљивост: • када треба направити снимак стања неког објекта да би се стање касније рестаурирало;• када директан интерфејс за добијање стања експонира имплементационе детаље.

У узорку Команда, Подсетник се може користити за чување стања поништивих операција.У узорку Итератор, Подсетник се може користити за чување податка о текућем елементу.

Мува/ Flyweight /

објектни, структуре

Омогућава дељење лаких објеката ради избегавања хиперпродукције објеката. Лаки објекти су објекти без стања или са константним стањем (не зависе од стања контекста).

Применљивост (ако су испуњени сви услови):• апликација користи велики број објеката који троше значајан меморијски простор;• већи део стања објекта може да се пребаци у „спољашње“ стање;• када се уклони спољашње стање многе групе објеката могу да се замене дељеним објектима са унутрашњим

стањем;• идентитет објекта није битан: тестови идентитета враћају true за све његова појаве у контексту.

Често се комбинује са узорком Склоп за формирање ацикличног графа са дељеним чворовима у листовима.Често се објекти узорака Стање и Стратегија праве као муве.

5

Page 6: Projektni uzorci

Фабрички метод/ Factory Method /

класни, креирања

КонкретанСтваралац ствара објекат непознатог власништва.

Применљивост:• када класа не може да антиципира класу објеката које мора да креира;• када класа жели да њене поткласе одреде објекте које ће она креирати.

Фабрички метод се обично позива из Шаблонски метод.Прототип не захтева извођење поткласе из класе Стваралац он захтева clone() операцију у Прототип класи, коју позива Стваралац. Фабрички метод не захтева такву операцију.Апстрактна фабрика се често имплементира Фабричким методом.

Апстрактна фабрика/ Abstract Factory /

објектни, креирања

Фабрика предвиђа производњу објеката (КонкретанПроизвод) изведених из неке апстрактне класе (Производ).

Применљивост: • када систем треба да буде независан од начина креирања и представљања производа;• када систем треба да буде конфигурисан једном од више фамилија производа;• када је потребно форсирати да производи из фамилије буду коришћени заједно;• када је потребно понудити класну библиотеку производа откривајући само интерфејсе, не имплементације.

Апстрактна фабрика се често имплементира Фабричким методом или користећи Прототип: конкретне фабрике могу реализовати фабричке методе (уобичајено), али могу се и параметризовати прототипским објектима производа и правити њихове колонове.Конкретна фабрика је често Уникат.

6

Page 7: Projektni uzorci

Фасада/ Facade /

објектни, структуре

Интерфејс за обједињену устљену примену функционалности подсистема без забране појединачог коришћења функционалности делова подсистема.

Применљивост:• када je потребно дати једноставан интерфејс сложеном подсистему: сложеност подсистема расте током развоја;

примена узорака поспешује пораст броја мањих класа; подсистем постаје тежи за употребу клијентима; већини клијената је довољан интерфејс подсистему преко фасаде;

• када постоје бројне зависности између клијената и класа подсистема: фасада раздваја подсистем од клијената и других подсистема

• када постоји потреба да се раслоје подсистеми: фасада се може користити за улазну тачку сваког нивоа подсистема.

Апстрактна фабрика може да се користи уз фасаду као интерфејс за креирање објеката подсистема.Потребан је само један објекат фасаде, па се релизује као Уникат.Медиатор је сличан фасади само што он апстрахује произвољне комуникације између објеката (подсистема), а Фасада апстрахује интерфејс подсистема; Медијатор може да додаје функциналност и објекти знају за њега за разлику од Фасаде.

7

Page 8: Projektni uzorci

Посредник/ Mediator /

објектни, понашања

Дефинише објекат који капсулира понашање скупа објеката који интерагују (нпр. у GUI-у зависност једне компоненте од стања неке друге компоненте).

Применљивост:• када скуп објеката комуницира на добро дефинисан али сложен начин; међузависности нису структуриране и

тешко се схватају;• када је реупотреба објеката тешка зато што реферишу и комуницирају са многим другим објектима;• када треба омогућити прилагођавање понашања дистрибуираног на више класа, а да се избегне много поткласа.

Фасада се разликује од узорка Посматрач, јер она апстрахује подсистем објеката да обезбеди погоднији интерфејс и при томе користи једносмеран протокол (само се објекат фасаде обраћа класама подистема).Медиатор користи двосмерни протокол у комуникацији са колегама.Колеге могу да комуницирају са медиатором коришћењем Посматрача.

Заступник/ Proxy /

објектни, структуре

Приступ неком објекту (Субјекту) без промене или проширивања интерфејса тог објекта преко Заступника.Врсте проксија према примени:• Удаљени заступник (Remote Proxy): обезбеђује локални репрезент објекта који се налази у другом адресном

простору; Колпин ову категорију проксија назива „амбасадором“;• Виртуелни заступник (Virtual Proxy): креира релативно скуп објеката на захтев (ImageProxy је пример);• Прокси за заштиту (Protection Proxy): контролише право приступа оригиналном објекту• паметна референца (Smart Reference): замена за обични показивач, обавља додатне акције приликом приступа• типичне примене (бројање референци на објекат, да би се овај деалоцирао аутоматски кад је број 0; пуњење

перзистентног објекта у меморију при првом реферисању; провера да ли је објекат закључан, т.ј. да га неко други тада не мења).

Применљивост: узорак је применљив када постоји потреба за софистицираном референцом на објекат.

Адаптер обезбеђује различит интерфејс објекту који адаптира, док Заступник обезбеђује исти интерфејс.Допуна може имати сличну имплементацију као Заступник, али има различиту намену: декоратер додаје једну или више одговорности објекту, а прокси контролише приступ објекту.Заступник за заштиту може бити имплементиран баш као Допуна.

8

Page 9: Projektni uzorci

Мост/ Bridge /

објектни, структуре

Све операције Апстракције се имплементирају коришћењем апстрактних метода Имплементације.

Применљивост:• када треба избећи трајно везивање апстракције и њене имплементације нпр. ако је потребно имплементацију

мењати у време извршења;• када и апстракцији и имплементацији је потребно проширивање кроз поткласе: мост омогућава комбиновање

различитих апстракција и имплементација;• када промена у имплементацији апстракције не сме да утиче на клијенте;• у језику C++: када је потребно потпуно сакривање имплементације класе од клијента: дефиниције класа су у .h

фајловима – делимично се открива имплементација;• када постоји опасност од превеликог броја класа: нпр. у примеру се види квадратни раст (број система пута

број типова прозора);• када се жели да исту имплементацију дели више објеката а да то буде сакривено од клијента (евентуално уз

бројање референци).

Апстрактна фабрика може да креира и конфигурише Мост.Адаптер је намењен сарадњи класа које нису сродне, обично се примењује на системе после пројектовања; Мост се пројектује унапред да би се апстракције и имплементације независно развијале.

Команда/ Command /

објектни, понашања

Капсулира захтев у један објекат. Позната функција објекта као параметар.

Применљивост:• када треба параметризовати објекте акцијом коју треба да обаве замена за цаллбацк функцију у

традиционалним језицима• када треба специфицирати, стављаити у ред чекања и извршавати захтеве у различитим тренуцима: објекат

команде може имати различит животни век од оног ко издаје захтев; објекат команде се може препустити

9

Page 10: Projektni uzorci

другом процесу (промена адресног простора), ако се прималац може адресирати универзално;• када треба подржати undo: execute() операција може сачувати у самом објекту стање за растаурацију;

интерфејс треба да садржи и unexecute() oперацију која рестаурира стање; неограничен ниво undo и редо се постиже смештањем објеката извршених команди у листу, односно проласком кроз листу уназад и унапред;

• имати промене да би се оне могле поново урадити; у интерфејс Цомманд се додају операције за перзистенцију дневника промен; опоравак се постиже учитавањем дневника са диска и поновним извршавањем execute();

• када треба подржати трансакције: трансакције су сложене операције састављене од примитивних; трансакције капсулирају скуп промена података.

Склоп се користи за креирање макрокоманди (скриптова).Мементо може да чува стање пре извршења команде потребно за undo.Команда која се мора копирати пре него што се стави у листу историје се понаша као Прототип.

Ланац одговорности/ Chain of Responsibility /

објектни, понашања

Повезује објекте примаоца захтева у ланац и прослећује захтев низ ланац док га неки не обради.

Применљивост:• када више објеката може да обради захтев, али се не зна унапред који ће обрадити;• кад се хоће издати захтев једном од неколико објеката, а да се не одреди експлицитно прималац;• када скуп објеката који обрађују захтев треба да се одреди динамички.

Често се примењује са узорком Склоп; родитељ компоненте може да игра улогу „следећег“ у ланцу.

10

Page 11: Projektni uzorci

Градитељ/ Builder /

објектни, креирања

Раздваја конструкцију комплексног објекта од његове репрезентације омогућавајући тако различите репрезентације истог објекта.

Применљивост: • када алгоритам за креирање сложеног објекта треба да буде независан: од делова који чине објекат; од начина

на који се делови склапају у целину;• када процес конструкције мора да допусти различите репрезентације за објекат који се конструише.

Апстрактна фабрика је слична Градитељу по томе што може да конструише комплексне објекте. Oсновна разлика је што се Градитељ фокусира на конструкцију комплексног објекта корак-по-корак, а код Апстрактне фабрике је нагласак на фамилијама објеката производа (једноставних или комплексних). Градитељ враћа производ као финални корак, док га Апстрактна фабрика враћа одмах.Градитељ често гради објекат Склопа.Управљач узорка Градитеља се параметризује објектом Градитеља, као што се Контекст параметризује објектом Стратегије у одговарајућем узорку. Осим у намени, разлика је што се Стратегија најчешће имплементира у једној методи док су код Градитеља имплементирани поједини кораци градње као посебне методе.Шаблонска метода позива апстрактне методе сопствене класе, док код узорка Градитељ, Управљач садржи конкретну методу која позива апстрактне методе Градитеља.

Посетилац/ Visitor /

објектни, понашања

Капсулира по операцију за сваку врсту структура којима се прослеђује да би оне позвале ту операцију у зависности од врсте структуре којој припадају.

Применљивост:• када једна објектна структура садржи објекте разних класа, а потребно је над тим објектима извршити

операције које зависе од њихових конкретних класа;• када више неповезаних операција треба извршавати над објектима структуре, а не желимо да „загадимо“

њихове класе тим операцијама: Посетилац омогућава груписање повезаних операција (које одговарају једној примени) у једној класи; ако је објектна структура дељена од стране више функционалности, Посетилац допушта да се операције сместе у оне функције које их захтевају;

• када класе које дефинишу структуру објеката се ретко мењају, а често се дефинишу нове операције над елементима структуре; промена класа објектне структуре захтева промену свих посетилаца, што може много да кошта, па ако је ово често, вероватно је боље дефинисати операције у тим класама.

У Склопу Посетилац може да се користи да би се нека операција применила на структуру објеката дефинисану као

11

Page 12: Projektni uzorci

склоп.Итератор се често користи заједно са Посетиоцем, служи за систематичан обилазак објеката структуре којима се шаљу посетиоци.У Интерпретатору Посетилац се може користити да обави интерпретацију.

Интерпретатор/ Interpreter /

класни, понашања

За дати језик дефинише репрезентацију његове граматике и интерпретер који је користи да интерпретира исказе језика.

Применљивост:• када узорак треба применити када постоји језик који треба интерпретирати и искази језика се могу представити

као стабла апстрактне синтаксе;• најбољи резултати се добијају под следећим условима граматика је једноставна; за комплексне граматике број

класа у хијерархији постаје превелики за одржавање; ефикасност није критична; најефикаснији интерпретери се обично не имплементирају интерпретирањем стабала парсирања директно, већ се најпре она транслирају у неку другу форму; на пример – регуларни изрази се често трансформишу у аутомате стања, али и тада се транслатор може имплементирати помоћу узорка Интерпретер.

Стабла апстрактне синтаксе (САС) је примерак пројектног узорка Склоп.Мува омогућава да се ефикасно деле терминални симболи у САС.Интерпретер може да користи Итератор за обилазак САС ако се interpret() операција реализује у посебној класи, онда је могуће лако додавати друге начине интерпретације – Посетилац.

12

Page 13: Projektni uzorci

Дијаграми UML-а

Дијаграм Приказује Елементи

Диаграми структуре

Дијаграм класа/ Class Diagram /

класe, интерфејсe, сарадњe и њиховe релацијe ствари, везе

Дијаграм пакета/ Package Diagram /

декомпозицију модела у организационе јединице и зависности између њих

пакети, везе

Дијаграм објеката/ Object Diagram /

објекте са стањем и везама у конкретном тренутку

објекти, везе

Дијаграм сложене структуре/ Composite Structure Diagram /

хијерархијску декомпозицију класификатора на делове његове унутрашње структуре и коришћење сарадњи у дешавањима сарадњи (енгл. collaboration occurrence)

делови, портови, везе

Дијаграм компонената/ Component Diagram /

организацију и зависност између компонената ствари: компоненте, артефакти, портови, интерфејси, класе, пакети;релације: зависности, асоцијације, реализације, генерализације

Дијаграм распоређивања/ Deployment Diagram /

статичке физичке аспекте система, хардверску и софтверску извршну архитектуру система, кофигурацију чворова и софтверских артефаката који живе на њима

ствари: чворови, артефакти, подсистеми, пакети;релације: зависности, асоцијације, генерализације

Диаграм профила/ Profile Diagram /

Диаграми понашања

Дијаграм интеракције/ Interaction Diagram /

динамичке аспкете модела (под)систем, операција, класа, случај коришћења

Дијаграм секвенце/ Sequence Diagram /

наглашено временско уређење интеракције

Дијаграм комуникације/ Communication Diagram /

наглашену структуру веза у интеракцији

Дијаграм прегледа интеракције

/ Interaction Overview Diagram /

комбинацију дијаграма активности са диаграмом секвенце

Временски дијаграм/ Timing Diagram /

промене стања једног објекта или улоге током времена

Дијаграм случајева коришћења/ User Case Diagram /

скуп случајева коришћења и актера случајеви коришћења, актери, везе, пакети

Дијаграм активности/ Activity Diagram /

динамичке аспекте (понашање) система чворови: акције и активности, објекти, слања сигнала, прихватања догађаја, прихватања временског догађаја, контролни чворови, псеудочворови, конектори;гране: прелази, ток објеката

Дијаграм стања/ State Diagram /

аутомат стања стања, псеудостања, прелази, догађаји, акције

13