GRASP (англ. General Responsibility Assignment Software Patterns) — набір патернів (шаблонів, принципів), що дозволяють вирішувати проблеми розподілу обов'язків між різними класами. За своєю суттю, цей набір патернів більш абстрактний, ніж загально відомий каталог шаблонів від «Банди чотирьох» (GOF-шаблони).
До складу шаблонів GRASP входить 9 шаблонів:
- Information Expert
- Creator
- Low Coupling
- High Cohesion
- Controller
- Polymorphism
- Pure Fabrication
- Indirection
- Protected Variations
Відомо дев'ять GRASP шаблонів, спочатку описаних у книзі Крейга Ларман «Застосування UML і шаблонів проектування». На відміну від звичних читачеві патернів з Банди Чотирьох, GRASP патерни не мають вираженої структури, чіткої області застосування і конкретної розв'язуваної проблеми, а лише являють собою узагальнені підходи / рекомендації / принципи, використовувані при проектуванні дизайну системи. «Applying UML and Patterns — An Introduction to Object-Oriented Analysis and Design and Iterative Development»
Предметна область
Для детальнішого розуміння читачем GRASP шаблонів, будуть описані приклади їх використання з предметної області морських вантажоперевезень. Судноплавна компанія «Навігатор +» є найбільшим постачальником послуг морських вантажоперевезень. Головний офіс компанії складається з трьох відділів: відділ по роботі з клієнтами, відділ диспетчеризації рейсів, відділ комплектації рейсів. Менеджери з відділу по роботі з клієнтами оформляють договори на доставку вантажу з пункту А в пункт В. Диспетчери з відділу диспетчеризації рейсів відстежують становище суден. Адміністратори з відділу комплектації рейсів формують вантажні рейси на підставі договорів з клієнтами.
Інформаційний експерт (Information Expert)
Шаблон інформаційний експерт є базовим і в той же час найбільш очевидним з дев'яти. Інформаційний експерт описує основоположні принципи призначення обов'язків класам і об'єктам. Відповідно до опису, інформаційним експертом (об'єктом наділеним деякими обов'язками) є об'єкт, що володіє максимумом інформацією, необхідною для виконання призначених обов'язків.
Як приклад можна розглянути підрахунок загальної кількості вантажу і його вартості як на певному рейсі, так і узагальнено для всіх рейсів компанії. [2] Застосування шаблону інформаційний експерт підвищує зв'язність модулів і не суперечить властивості інкапсуляції.
Творець (Creator)
Клас повинен створювати екземпляри тих класів, які він може:
- Утримувати або агрегувати;
- записувати;
- використовувати;
- Ініціалізувати, маючи потрібні дані.
Так застосовується шаблон «Інформаційний експерт» (дивіться пункт №1) в питаннях створення об'єктів.
Альтернатива - шаблон «Абстрактна фабрика» (створення об'єктів концентрується в окремому класі).
Низька зв'язаність (Low Coupling) і Високе зачеплення (High Cohesion)
Мабуть в будь-якій літературі з об'єктно-орієнтованого проектування зустрічаються ці два поняття. Вважається, що будь-яка спроектована система, повинна задовольняти принципам низькою зв'язності і високого зачеплення модулів. Відповідність даним шаблонами дозволяє легко модифікувати і супроводжувати програмний код а також підвищує ступінь його повторного використання.
Розглянемо поняття міри зв'язності модулів і міри зачеплення модуля. Міра зв'язності модулів визначається кількістю інформації яку має один модуль про природу іншого. У свою чергу, міра зачеплення модуля визначається ступенем сфокусованості його обов'язків.
Варто відзначити, що існують методології, згідно з якими міри зв'язності і зачеплення можна оцінити за шкалою від 1 до 10 для конкретного випадку. Однак, в рамках даної статті вони не розглядаються.
Прикладом хорошого дизайну системи може служити набір утиліт GNU Binutils для Linux. У ньому кожна утиліта (якщо її розглядати як модуль) виконує лише мінімальні обов'язки (високе зачеплення) і майже нічого не знає про природу інших утиліт (низька зв'язність), у зв'язку з чим може бути легко замінена на аналог в деякому варіанті використання.
Стійкий до змін (Protected Variations)
Проблема модифікації системи найбільш актуальна в умовах вимог, що динамічно змінюються. Найчастіше вдається виділити так звані точки нестійкості системи, які найчастіше будуть схильні до зміни / модифікації. Тоді, сутність шаблону "стійкий до змін" полягає в усуненні точок нестійкості, шляхом визначення їх як інтерфейсів і реалізації для них різних варіантів поведінки.
Наприклад, розглянемо ситуацію розширення спектра послуг компанії «Навігатор +». Будемо вважати, що судноплавна компанія почала займатися пасажирськими перевезеннями. Для цього, реалізуємо точку стійкості системи — сутність, що перевозиться (Entity).
Контролер (Controller)
Контролер відповідає за обробку вхідних системних подій, делегуючи обов'язки по їх обробці компетентним класам. У загальному випадку, контролер реалізує один або кілька варіантів використання.
Відомо поняття зовнішнього контролера (Front Controller), який представляє всю систему в цілому (агрегує весь функціонал системи в одному класі).
Прикладом контролера є клас Administrator, який реалізує варіант використання системи адміністратором з відділу комплектації рейсів.
Використання контролерів дозволяє відокремити логіку від представлення, тим самим підвищуючи можливість повторного використання коду.
Поліморфізм (Polymorphism)
Шаблон поліморфізм дозволяє обробляти альтернативні варіанти поведінки на основі типу. При цьому, альтернативні реалізації наводяться до узагальненого інтерфейсу.
Розглянемо інтеграцію системи з зовнішніми компонентами розрахунку тарифів на перевезення вантажу. Класи LocalTarificator і WorldWideTarificator є адаптерами до відповідних зовнішніх компонентів.
Застосування шаблону поліморфізм дозволяє в майбутньому легко модифікувати систему.
Слід зауважити, що композиція, на відміну від поліморфізму, в більшості випадків, є кращою реалізацією бізнес-вимог - написаний код краще підтримується, змінюється, розширюється [3] [Архівовано 24 червня 2017 у Wayback Machine.]
Чиста вигадка (Pure Fabrication)
Існує поняття моделі програмування по предметній області, згідно з якою, кожній сутності з предметної області відповідає один або більше класів програмного середовища. При цьому, обов'язки взаємодії сутностей, як правило накладаються на них самих. Такий підхід має очевидний недолік — висока зв'язність модулів системи. Шаблон чиста вигадка дозволяє вирішити дану проблему, шляхом введення в програмне середовище додаткового класу (що не відображає реальної сутності з предметної області) і наділяє його необхідними обов'язками.
Наприклад, обов'язки по зберіганню інформації про клієнтів судноплавної компанії можна призначити вигаданому класу ClientsSaver.
Застосування шаблону чиста вигадка дозволяє дизайну системи відповідати принципам низької зв'язності і високого зачеплення.
Перенаправлення (Indirection)
Шаблон перенаправлення реалізує низьку зв'язність між класами, шляхом призначення обов'язків щодо їхньої взаємодії додатковому об'єкту — посереднику.
Прикладом даного шаблону може служити клас ClientsSaver (див. Чиста вигадка), який є проміжним шаром між сутностями клієнтів і сховищем, в якому вони будуть збережені. Крім того, контролер з тріади MVC є посередником між даними їх представленнями.
Див. також
Примітки
- [en]. Applying UML and Patterns — Third Edition. [1] [ 30 червня 2003 у Wayback Machine.]
Джерела
- GRASP паттерны проектирования [ 4 травня 2013 у Wayback Machine.]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
GRASP angl General Responsibility Assignment Software Patterns nabir paterniv shabloniv principiv sho dozvolyayut virishuvati problemi rozpodilu obov yazkiv mizh riznimi klasami Za svoyeyu suttyu cej nabir paterniv bilsh abstraktnij nizh zagalno vidomij katalog shabloniv vid Bandi chotiroh GOF shabloni Do skladu shabloniv GRASP vhodit 9 shabloniv Information Expert Creator Low Coupling High Cohesion Controller Polymorphism Pure Fabrication Indirection Protected Variations Vidomo dev yat GRASP shabloniv spochatku opisanih u knizi Krejga Larman Zastosuvannya UML i shabloniv proektuvannya Na vidminu vid zvichnih chitachevi paterniv z Bandi Chotiroh GRASP paterni ne mayut virazhenoyi strukturi chitkoyi oblasti zastosuvannya i konkretnoyi rozv yazuvanoyi problemi a lishe yavlyayut soboyu uzagalneni pidhodi rekomendaciyi principi vikoristovuvani pri proektuvanni dizajnu sistemi Applying UML and Patterns An Introduction to Object Oriented Analysis and Design and Iterative Development Predmetna oblast Dlya detalnishogo rozuminnya chitachem GRASP shabloniv budut opisani prikladi yih vikoristannya z predmetnoyi oblasti morskih vantazhoperevezen Sudnoplavna kompaniya Navigator ye najbilshim postachalnikom poslug morskih vantazhoperevezen Golovnij ofis kompaniyi skladayetsya z troh viddiliv viddil po roboti z kliyentami viddil dispetcherizaciyi rejsiv viddil komplektaciyi rejsiv Menedzheri z viddilu po roboti z kliyentami oformlyayut dogovori na dostavku vantazhu z punktu A v punkt V Dispetcheri z viddilu dispetcherizaciyi rejsiv vidstezhuyut stanovishe suden Administratori z viddilu komplektaciyi rejsiv formuyut vantazhni rejsi na pidstavi dogovoriv z kliyentami Informacijnij ekspert Information Expert Shablon informacijnij ekspert ye bazovim i v toj zhe chas najbilsh ochevidnim z dev yati Informacijnij ekspert opisuye osnovopolozhni principi priznachennya obov yazkiv klasam i ob yektam Vidpovidno do opisu informacijnim ekspertom ob yektom nadilenim deyakimi obov yazkami ye ob yekt sho volodiye maksimumom informaciyeyu neobhidnoyu dlya vikonannya priznachenih obov yazkiv Yak priklad mozhna rozglyanuti pidrahunok zagalnoyi kilkosti vantazhu i jogo vartosti yak na pevnomu rejsi tak i uzagalneno dlya vsih rejsiv kompaniyi 2 Zastosuvannya shablonu informacijnij ekspert pidvishuye zv yaznist moduliv i ne superechit vlastivosti inkapsulyaciyi Tvorec Creator Klas povinen stvoryuvati ekzemplyari tih klasiv yaki vin mozhe Utrimuvati abo agreguvati zapisuvati vikoristovuvati Inicializuvati mayuchi potribni dani Tak zastosovuyetsya shablon Informacijnij ekspert divitsya punkt 1 v pitannyah stvorennya ob yektiv Alternativa shablon Abstraktna fabrika stvorennya ob yektiv koncentruyetsya v okremomu klasi Nizka zv yazanist Low Coupling i Visoke zacheplennya High Cohesion Mabut v bud yakij literaturi z ob yektno oriyentovanogo proektuvannya zustrichayutsya ci dva ponyattya Vvazhayetsya sho bud yaka sproektovana sistema povinna zadovolnyati principam nizkoyu zv yaznosti i visokogo zacheplennya moduliv Vidpovidnist danim shablonami dozvolyaye legko modifikuvati i suprovodzhuvati programnij kod a takozh pidvishuye stupin jogo povtornogo vikoristannya Rozglyanemo ponyattya miri zv yaznosti moduliv i miri zacheplennya modulya Mira zv yaznosti moduliv viznachayetsya kilkistyu informaciyi yaku maye odin modul pro prirodu inshogo U svoyu chergu mira zacheplennya modulya viznachayetsya stupenem sfokusovanosti jogo obov yazkiv Varto vidznachiti sho isnuyut metodologiyi zgidno z yakimi miri zv yaznosti i zacheplennya mozhna ociniti za shkaloyu vid 1 do 10 dlya konkretnogo vipadku Odnak v ramkah danoyi statti voni ne rozglyadayutsya Prikladom horoshogo dizajnu sistemi mozhe sluzhiti nabir utilit GNU Binutils dlya Linux U nomu kozhna utilita yaksho yiyi rozglyadati yak modul vikonuye lishe minimalni obov yazki visoke zacheplennya i majzhe nichogo ne znaye pro prirodu inshih utilit nizka zv yaznist u zv yazku z chim mozhe buti legko zaminena na analog v deyakomu varianti vikoristannya Stijkij do zmin Protected Variations Problema modifikaciyi sistemi najbilsh aktualna v umovah vimog sho dinamichno zminyuyutsya Najchastishe vdayetsya vidiliti tak zvani tochki nestijkosti sistemi yaki najchastishe budut shilni do zmini modifikaciyi Todi sutnist shablonu stijkij do zmin polyagaye v usunenni tochok nestijkosti shlyahom viznachennya yih yak interfejsiv i realizaciyi dlya nih riznih variantiv povedinki Napriklad rozglyanemo situaciyu rozshirennya spektra poslug kompaniyi Navigator Budemo vvazhati sho sudnoplavna kompaniya pochala zajmatisya pasazhirskimi perevezennyami Dlya cogo realizuyemo tochku stijkosti sistemi sutnist sho perevozitsya Entity Kontroler Controller Kontroler vidpovidaye za obrobku vhidnih sistemnih podij deleguyuchi obov yazki po yih obrobci kompetentnim klasam U zagalnomu vipadku kontroler realizuye odin abo kilka variantiv vikoristannya Vidomo ponyattya zovnishnogo kontrolera Front Controller yakij predstavlyaye vsyu sistemu v cilomu agreguye ves funkcional sistemi v odnomu klasi Prikladom kontrolera ye klas Administrator yakij realizuye variant vikoristannya sistemi administratorom z viddilu komplektaciyi rejsiv Vikoristannya kontroleriv dozvolyaye vidokremiti logiku vid predstavlennya tim samim pidvishuyuchi mozhlivist povtornogo vikoristannya kodu Polimorfizm Polymorphism Shablon polimorfizm dozvolyaye obroblyati alternativni varianti povedinki na osnovi tipu Pri comu alternativni realizaciyi navodyatsya do uzagalnenogo interfejsu Rozglyanemo integraciyu sistemi z zovnishnimi komponentami rozrahunku tarifiv na perevezennya vantazhu Klasi LocalTarificator i WorldWideTarificator ye adapterami do vidpovidnih zovnishnih komponentiv Zastosuvannya shablonu polimorfizm dozvolyaye v majbutnomu legko modifikuvati sistemu Slid zauvazhiti sho kompoziciya na vidminu vid polimorfizmu v bilshosti vipadkiv ye krashoyu realizaciyeyu biznes vimog napisanij kod krashe pidtrimuyetsya zminyuyetsya rozshiryuyetsya 3 Arhivovano 24 chervnya 2017 u Wayback Machine Chista vigadka Pure Fabrication Isnuye ponyattya modeli programuvannya po predmetnij oblasti zgidno z yakoyu kozhnij sutnosti z predmetnoyi oblasti vidpovidaye odin abo bilshe klasiv programnogo seredovisha Pri comu obov yazki vzayemodiyi sutnostej yak pravilo nakladayutsya na nih samih Takij pidhid maye ochevidnij nedolik visoka zv yaznist moduliv sistemi Shablon chista vigadka dozvolyaye virishiti danu problemu shlyahom vvedennya v programne seredovishe dodatkovogo klasu sho ne vidobrazhaye realnoyi sutnosti z predmetnoyi oblasti i nadilyaye jogo neobhidnimi obov yazkami Napriklad obov yazki po zberigannyu informaciyi pro kliyentiv sudnoplavnoyi kompaniyi mozhna priznachiti vigadanomu klasu ClientsSaver Zastosuvannya shablonu chista vigadka dozvolyaye dizajnu sistemi vidpovidati principam nizkoyi zv yaznosti i visokogo zacheplennya Perenapravlennya Indirection Shablon perenapravlennya realizuye nizku zv yaznist mizh klasami shlyahom priznachennya obov yazkiv shodo yihnoyi vzayemodiyi dodatkovomu ob yektu poseredniku Prikladom danogo shablonu mozhe sluzhiti klas ClientsSaver div Chista vigadka yakij ye promizhnim sharom mizh sutnostyami kliyentiv i shovishem v yakomu voni budut zberezheni Krim togo kontroler z triadi MVC ye poserednikom mizh danimi yih predstavlennyami Div takozhSOLID DRYPrimitki en Applying UML and Patterns Third Edition 1 30 chervnya 2003 u Wayback Machine DzherelaGRASP patterny proektirovaniya 4 travnya 2013 u Wayback Machine