GRASP

*GRASP* ( — агульныя шаблоны размеркавання адказнасцей; таксама існуе англійскае слова «**grasp**» — «кантроль, хватка») — шаблоны, якія выкарыстоўваюцца ў аб’ектна-арыентаваным праектаванні для вырашэння агульных задач па прызначэнню адказнасцей класам і аб’ектам.

У кнізе Крэга Лармана *«Ужыванне UML і шаблонаў праектавання»* 9 такіх шаблонаў: кожны дапамагае вырашыць нейкую праблему, якая ўзнікае як у аб’ектна-арыентаваным аналізе, гэтак і ў практычна ўсякім праекце па распрацоўцы праграмнага забеспячэння. Такім чынам, шаблоны «G.R.A.S.P.» — добра дакументаваныя, стандартызаваныя і правераныя часам прынцыпы аб’ектна-арыентаванага аналізу, а не спроба прыўнесці нешта прынцыпова новае.

## Каталог шаблонаў 
Сціслая характарыстыка дзевяці шаблонаў:

### 1. Інфармацыйны эксперт (Information Expert) 
Шаблон вызначае базавы прынцып размеркавання адказнасцей: Адказнасць мае быць прызначана таму, хто валодае максімумам патрэбнай інфармацыі для выканання — **інфармацыйнаму эксперту**.Гэты шаблон — самы яскравы і важны з дзевяці. Калі яго не ўлічыць — атрымаецца спагеці-код, у якім цяжка разабрацца.

Лакалізацыя ж адказнасцей, якая праводзіцца згодна шаблону:

* Павялічвае:
** Інкапсуляцыю;
** Прастату ўспрымання;
** Гатоўнасць кампанентаў да паўторнага выкарыстання;
* Зніжае:
** ступень зачэплівання.

### 2. Стваральнік (Creator) 
Клас павінен ствараць экзэмпляры тых класаў, якія ён можа:

* Змяшчаць ці агрэгаваць;
* Запісваць;
* Выкарыстоўваць;
* Ініцыялізаваць, маючы патрэбныя даныя.

Можна сказаць, што шаблон «Creator» — гэта інтэрпрэтацыя шаблону «Information Expert» у пытаннях стварэння аб’ектаў.

Альтэрнатыва — шаблон «Фабрыка» (стварэнне аб’ектаў канцэнтруецца ў асобным класе).

### 3. Кантролер (Controller) 
* Адказвае за аперацыі, запыты на якія прыходзяць ад карыстальніка, і можа здзяйсняць сцэнарыі аднаго ці некалькіх варыянтаў выкарыстання (напрыклад, стварэнне і выдаленне);
* Не выконвае працу самастойна, а дэлегуе кампетэнтным выканаўцам;
* Можа ўяўляць сабой:
** Сістэму ў цэлым;
** Падсістэму;
** Каранёвы аб’ект;
** Прыладу.

### 4. Слабае зачэпліванне (Low Coupling) 
«Ступень зачэплівання» — мера неадрыўнасці элемента ад іншых элементаў (альбо мера даных, якую ён мае пра іх).

«Слабае» зачэпліванне з’яўляецца ацэначнай мадэллю, якая дыктуе, як размеркаваць абавязкі, якія трэба падтрымваць.

«Слабае» зачэпліванне — размеркаванне адказнасцей і даных, якія забяспечваюць узаемную незалежнасць класаў. Клас з «слабым» зачэпліваннем:

* Мае слабую залежнасць ад іншых класаў;
* Не залежыць ад знешніх змяненняў (змяненне ў адным класе аказвае слабы ўплыў на іншыя класы);
* Просты для паўторнага выкарыстання.

### 5. Высокая злучанасць (High Cohesion) 
**Высокая злучанасць класа** — гэта ацэнкавая мадэль, скіраваная на ўтрыманне аб’ектаў належным чынам сфакусаванымі, кіраванымі і зразумелымі. Высокая злучанасць звычайна выкарыстоўваецца для падтрымання нізкага зачаплення. Высокая злучанасць азначае, што абавязкі элемента цесна злучаны і сфакусаваны. Разбіццё праграм на класы і падсістэмы з’яўляецца прыкладам дзейнасці, якая павялічвае злучанасць сістэмы.

І наадварот, нізкая злучанасць — гэта сітуацыя, пры якой дадзены элемент мае замнога незвязаных абавязкаў. Элементы з нізкай злучанасцю часта пакутуюць ад таго, што іх цяжка зразумець, цяжка скарыстаць, цяжка падтрымваць.

**Злучанасць класа** — мера сфакусаванасці прадметных абласцей яго метадаў:
* «Высокая» злучанасць — *сфакусаваныя* падсістэмы (прадметная вобласць вызначаная, кіруемая і зразумелая);
* «Нізкая» злучанасць — *абстрактныя* падсістэмы абцяжараны:
** Успрыманне;
** Паўторнае выкарыстоўванне;
** Падтрымка;
** Устойлівасць да знешніх змяненняў.

### 6. Полімарфізм (Polymorphism) 
Будова і паводзіны сістэмы:
* Вызначаюцца данымі;
* Зададзены паліморфнымі аперацыямі яе інтэрфейсу.

**Прыклад**: Адаптацыя камерцыйнай сістэмы да *разнастайнасці* сістэм уліку падаткаў можа быць забяспечана праз знешні інтэрфейс аб’ектаў-адаптараў.

### 7. Чыстая выдумка (Pure Fabrication) 
Не адносіцца да прадметнай вобласці, але:
* Змяншае зачэпліванне;
* Павялічвае злучанасць;
* Спрашчае паўторнае выкарыстанне.

«Pure Fabrication» адлюстроўвае канцэпцыю сэрвісаў у мадэлі праблемна-арыентаванага праектавання.

**Прыклад задачы**: Не выкарыстоўвая сродкі класа «А», унесці яго аб’екты ў базу даных.

**Вырашэнне**: Стварыць клас «Б» для запісу аб’ектаў класа «А».

### 8. Перанакіраванне (Indirection) 
Слабае зачэпліванне між элементамі сістэмы (і магчымасць паўторнага выкарыстання) забяспечваецца прызначэннем прамежкавага аб’екта іх **пасярэднікам**.

**Прыклад**: У архітэктуры Model-View-Controller, *кантролер* (*англ. controller*) саслабляе зачэпліванне даных (*англ. model*) з іх прадстаўленнем (*англ. view*).

### 9. Устойлівасць да змяненняў (Protected Variations) 
Шаблон бароніць элементы ад змянення іншымі элементамі (аб’ектамі ці падсістэмамі) з дапамогай вынясення ўзаемадзеяння ў фіксаваны іінтэрфейс, праз які (і толькі праз які) магчыма ўзаемадзеянне між элементамі. Паводзіны могуць вар’іравацца толькі праз стварэнне іншай рэалізацыі інтэрфейса.

Катэгорыя:Праектаванне праграмнага забеспячэння
Катэгорыя:Аб’ектна-арыентаванае праграмаванне
Катэгорыя:Старонкі з недагледжанымі перакладамі