GRASP

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

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

Каталог шаблонаў

[правіць | правіць зыходнік]

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

1. Інфармацыйны эксперт (Information Expert)

[правіць | правіць зыходнік]

Шаблон вызначае базавы прынцып размеркавання адказнасцей:

Адказнасць мае быць прызначана таму, хто валодае максімумам патрэбнай інфармацыі для выканання — інфармацыйнаму эксперту.

Гэты шаблон — самы яскравы і важны з дзевяці. Калі яго не ўлічыць — атрымаецца спагеці-код, у якім цяжка разабрацца.

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

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

2. Стваральнік (Creator)

[правіць | правіць зыходнік]

Клас павінен ствараца экзэмпляры тых класаў, якія ён можа:

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

Можна сказаць, што шаблон «Creator» - гэта інтэрпрэтацыя шаблону «Information Expert» (глядзіце пункт № 1) у пытаннях стварэння аб'ектаў.

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

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)

[правіць | правіць зыходнік]

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

Зноскі

  1. Larman, Craig. Applying UML and Patterns — Third Edition. [1]