GRASP (англ.: general responsibility assignment software patterns — агульныя шаблоны размеркавання адказнасцей; таксама існуе англійскае слова "grasp" — «кантроль, хватка») — шаблоны, якія выкарыстоўваюцца у аб'ектна-арыентаваным праектаванні для вырашэння агульных задач па прызначэнню адказнасцей класам і аб'ектам.
У кнізе Крэга Лармана «Ужыванне UML і шаблонаў праектавання» 9 такіх шаблонаў: кожны дапамагает вырашыць некаторую праблему, якая ўзнікае як у аб'ектна-арыентаваным аналізе, гэтак і ў практычна ўсякім праекце па распрацоўцы праграмнага забяспечвання.[1] Такім вобразам, шаблоны «G.R.A.S.P.» — добра дакументаваныя, стандартызаваныя і правераныя часам прынцыпы аб'ектна-арыентаванага аналізу, а не спроба прыўнесці нешта прынцыпова новае.
Сціслая характарыстыка дзевяці шаблонаў:
Шаблон вызначае базавы прынцып размеркавання адказнасцей:
Адказнасць мае быць прызначана таму, хто валодае максімумам патрэбнай інфармацыі для выканання — інфармацыйнаму эксперту.
Гэты шаблон — самы яскравы і важны з дзевяці. Калі яго не ўлічыць — атрымаецца спагеці-код, у якім цяжка разабрацца.
Лакалізацыя ж адказнасцей, якая праводзіцца згодна шаблону:
Клас павінен ствараца экзэмпляры тых класаў, якія ён можа:
Можна сказаць, што шаблон «Creator» - гэта інтэрпрэтацыя шаблону «Information Expert» (глядзіце пункт № 1) у пытаннях стварэння аб'ектаў.
Альтэрнатыва — шаблон «Фабрыка» (стварэнне аб'ектаў канцынтруецца ў асобным класе).
«Ступень зачэплівання» — мера неадрыўнасці элемента ад іншых элементаў (альбо мера даных, якую ён мае пра іх).
«Слабае» зачэпліванне з'яўляецца ацэначнай мадэллю, якая дыктуе, як размеркаваць абавязкі, якія трэба падтрымваць.
«Слабае» зачэпліванне — размеркаванне адказнасцей і даных, якія забяспечваюць узаемную незалежнасць класаў. Клас з «слабым» зачэпліваннем:
Высокая злучанасць класа — гэта ацэнкавая мадэль, скіраваная на ўтрыманне аб'ектаў належным чынам сфакусаванымі, кіраванымі і зразумелымі. Высокая злучанасць звычайна выкарыстоўваецца для падтрымання нізкага зачаплення. Высокая злучанасць азначае, што абавязкі дадзенага элемента цесна злучаны і сфакусаваны. Разбіццё праграм на класы і падсістэмы з'яўляецца прыкладам дзейнасці, якая павялічвае злучанасць сістэмы.
І наадварот, нізкая злучанасць — гэтая сітуацыя, пры якой дадзены элемент мае замнога незвязаных абавязкаў. Элементы з нізкай злучанасцю часта пакутуюць ад таго, што іх цяжка зразумець, цяжка скарыстаць, цяжка падтрымваць.
Злучанасць класа — мера сфакусаванасці прадметных абласцей яго метадаў:
Будова і паводзіны сістэмы:
Прыклад: Адаптацыя камерцыйнай сістэмы да разнастайнасці сістэм уліку падаткаў можа быць забяспечана праз знешні інтэрфейс аб'ектаў-адаптараў.
Не адносіцца да прадметнай вобласці, але:
«Pure Fabrication» адлюстроўвае канцэпцыю сэрвісаў у мадэлі праблемна-арыентаванага праектавання.
Прыклад задачы: Не выкарыстоўвая сродкі класа «А», унесці яго аб'екты ў базу даных.
Вырашэнне: Стварыць клас «Б» для запісу аб'ектаў класа «А».
Слабае зачэпліванне між элементамі сістэмы (і магчымасць паўторнага выкарыстання) забяспечваецца прызначэннем прамежкавага аб'екта іх пасярэднікам.
Прыклад: У архітэктуры Model-View-Controller, кантролер (англ. controller) саслабляе зачэпліванне даных (англ. model) з іх прадстаўленнем (англ. view).
Шаблон бароніць элементы ад змянення іншымі элементамі (аб'ектамі ці падсістэмамі) з дапамогай вынясення ўзаемадзеяння ў фіксаваны іінтэрфейс, праз які (і толькі праз які) магчыма ўзаемадзеянне між элементамі. Паводзіны могуць вар'іравацца толькі праз стварэнне іншай рэалізацыі інтэрфейса.