GRASP * : Návrh Objektů se Zodpovědnostmi. * Genenal Responsibility Assignment Software Patterns

Podobné dokumenty
Vývoj informačních systémů. Architektura, návrh Vzory: Doménová logika

Principy objektového návrhu. Přednáška 8, LS 2013/2014

Vývoj informačních systémů. Architektura, návrh Vzory: Doménová logika

Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování.

Introduction to MS Dynamics NAV

Návrhové vzory OMO, LS 2014/2015

UP - fáze rozpracování (Elaboration) I. J. Zendulka (s využitím obrázků a tabulek z knihy C.Larmana)

Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2009 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 25

Úvod do datového a procesního modelování pomocí CASE Erwin a BPwin

Principy OOP při tvorbě aplikací v JEE. Michal Čejchan

Budování architektury pomocí IAA

Design Patterns. Tomáš Herceg Microsoft MVP (ASP.NET)

ČÁST 1. Zahřívací kolo. Co je a k čemu je návrhový vzor 33

Problém identity instancí asociačních tříd

2 Axiomatic Definition of Object 2. 3 UML Unified Modelling Language Classes in UML Tools for System Design in UML 5

Postup objednávky Microsoft Action Pack Subscription

Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2008 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 24

EURO přeshraniční platba

6 Objektově-orientovaný vývoj programového vybavení

POPIS TUN TAP. Vysvetlivky: Modre - překlad Cervene - nejasnosti Zelene -poznamky. (Chci si ujasnit o kterem bloku z toho schematu se mluvi.

Objekty, třídy, vazby 2006 UOMO 30

Čipové karty Lekařská informatika

GUIDELINES FOR CONNECTION TO FTP SERVER TO TRANSFER PRINTING DATA

2. Začlenění HCI do životního cyklu software

User manual SŘHV Online WEB interface for CUSTOMERS June 2017 version 14 VÍTKOVICE STEEL, a.s. vitkovicesteel.com

SenseLab. z / from CeMaS. Otevřené sledování senzorů, ovládání zařízení, nahrávání a přehrávání ve Vaší laboratoři

Systém pro správu experimentálních dat a metadat. Petr Císař, Antonín Bárta 2014 Ústav komplexních systémů, FROV, JU

Převod prostorových dat katastru nemovitostí do formátu shapefile

Základy objektové orientace I. Únor 2010

Introduction to Navision 4.00 Jaromír Skorkovský, MS., PhD.

Efektivní provoz koncových stanic

Jak efektivně ochránit Informix?

Vazba (volná, těsná) - míra znalosti jedné třídy*komponenty o druhé.

Database systems. Normal forms

VY_32_INOVACE_06_Předpřítomný čas_03. Škola: Základní škola Slušovice, okres Zlín, příspěvková organizace

UP - fáze rozpracování II (návrh) J. Zendulka (s využitím obrázků z knihy C.Larmana a L.A.Maciaszka)

Windows na co se soustředit


Bridge. Známý jako. Účel. Použitelnost. Handle/Body

(item and value entries and related G/L Entries) J.Skorkovský, KPH,ESF MU Brno

Diagram nebo text? Miroslav Benešovský, BenSoft s.r.o

WORKSHEET 1: LINEAR EQUATION 1

POWERSHELL. Desired State Configuration (DSC) Lukáš Brázda MCT, MCSA, MCSE

BPM_09. Hodnotové modelování podnikových procesů

Instalace Pokyny pro instalaci v operačním systému Windows XP / Vista / Win7 / Win8

PRAVIDLA ZPRACOVÁNÍ STANDARDNÍCH ELEKTRONICKÝCH ZAHRANIČNÍCH PLATEBNÍCH PŘÍKAZŮ STANDARD ELECTRONIC FOREIGN PAYMENT ORDERS PROCESSING RULES

Obsah. October 2, Polymorfizmus. Typologie testování. Problém polymorfizmu. Vady/Anomálie. Vazební sekvence ČVUT FEL, K13132

Tento materiál byl vytvořen v rámci projektu Operačního programu Vzdělávání pro konkurenceschopnost.

Transportation Problem

Agile leadership in Czech Rep. Agilia Conference 2011 Brno

CASE nástroje. Jaroslav Žáček

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Správa a sledování SOA systémů v Oracle SOA Suite

KIV/ASWI 2007/2008 Metody získávání a zachycení požadavků. Postupy a UML modely Zachycení požadavků Model užití Popis problémové oblasti

CASTING HAND PRODUCTION USING MOULDS

Karta předmětu prezenční studium

a konverze na úřadech Martin Řehořek

Project Life-Cycle Data Management

TÉMATICKÝ OKRUH Softwarové inženýrství

11 Návrh programového vybavení

aktuality, novinky Ing. Martin Řehořek

valid from 1st November 2011

MVC (Model-View-Controller)

Czech Republic. EDUCAnet. Střední odborná škola Pardubice, s.r.o.

Škola: Střední škola obchodní, České Budějovice, Husova 9. Inovace a zkvalitnění výuky prostřednictvím ICT

Petr Vlk KPCS CZ. WUG Days října 2016

Tvorba informačních systémů

Dolování v objektových datech. Ivana Rudolfová

AIC ČESKÁ REPUBLIKA CZECH REPUBLIC

CASE. Jaroslav Žáček

Jak Vám partnerské programy pomohou v rozvoji podnikání. Víte, že můžete získat software v hodnotě tisíců USD za zlomek ceny?

7.5 Diagram tříd pokročilé techniky

Lukáš Brodský Praha Osnova. Objektový přístup Verze 4, 5, 6 / 7 Developer7 -funkčnost, nové vlastnosti HW

ČESKÉ VYSOKÉ UČENÍ TECHNIKÉ Fakulta elektrotechnická. Microsoft Sharepoint 2007 Workflows Průmyslové informační systémy

7.6 Další diagramy UML

filtrační polomasky disposable respirators

Michal Hroch Server Product Manager Microsoft Česká republika

Návrh IS - UML. Jaroslav Žáček

Sociální sítě jako Velký bratr. Martin Klubal AEC a.s.

Instrukce pro vzdálené připojení do učebny 39d

CAL (CAN Application Layer) a CANopen

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA

7.6 Další diagramy UML

Hiearchical MVC (Model-view-controller) vs. PAC (Presentation-abstraction-control)

Návrh IS - UML. Jaroslav Žáček

Vypsání závodu / Notice of Race strana/page 1/5. Compotech Cup. v lodních třídách / in classes. D-One, 7P CTL

Digitální učební materiál

Microsoft System Center Configuration Manager Jan Lukele

Od Czech POINTu k vnitřní integraci

Metody inventarizace a hodnocení biodiverzity stromové složky

TÉMATICKÝ OKRUH Softwarové inženýrství

X33EJA Web Services. Martin Ptáček, KOMIX s.r.o.

Litosil - application

Risk management in the rhythm of BLUES. Více času a peněz pro podnikatele

Připojení internetového modulu econet300 Do regulátoru ecomax 810P3-L TOUCH.

Informační systémy 2008/2009. Radim Farana. Obsah. Nástroje business modelování. Business modelling, základní nástroje a metody business modelování.

Zpracoval:

Kartografické modelování V Topologické překrytí - Overlay

2011 Jan Janoušek BI-PJP. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Konceptuální datové modely používané při analýze

Transkript:

GRASP * : Návrh Objektů se Zodpovědnostmi * Genenal Responsibility Assignment Software Patterns 1

Doménový Model 0..1 Contained-in Paid-by Payment amount Sales LineItem quantity 1 1 1..* 1 Sale date time * Product Described-by Product Catalog Specification Contains description price 1 1..* 1 1..* * Used-by itemid Describes Store Item 1 address Stocks * Logs-completed * name 1 * 1 Houses Captured-on 1..* POS Manager 1 1 Started-by 1 1 1 Initiated-by 1 Customer 1 Records-sales-on 1 1 Records-sale-of Cashier

Zodpovědnosti a Metody Záměrem objektového návrhu je identifikace tříd a objektů, rozhodnutí které metody patří kam a kde a jak tyto objekty spolupracují. Zodpovědnosti mají vztah k závazku objektu ve smyslu jeho chování. Dva typy zodpovědností: q Doing: q Sám něco dělá (e.g. creating an object, doing a calculation) Spouští akci na jiném objektu. Kontroluje a koordinuje aktivity na jiných objektech. Knowing: Má znalost privátních zapouzdřených dat. Má znalost o vztazích objektů. Zná vše potřebné k derivaci, kalkulaci. 3

Zodpovědnosti a Metody Zodpovědnosti jsou přiřazeny třídám v objektovém návrhu. Např: q q a Sale is responsible for creating SalesLineItems (doing) a Sale is responsible for knowing its total (knowing) Zodpovědnosti s vztahem k knowing jsou často odvozeny z Doménového Modelu (because of the attributes and associations it illustrates) 4

Zodpovědnosti a Metody Překlad zodpovědností do tříd a metod je ovlivněno granularitou zodpovědnosti. q For example, provide access to relational databases may involve dozens of classes and hundreds of methods, whereas create a Sale may involve only one or few methods. Zodpovědnost není to samé jako metoda, nýbrž metody jsou implementovány k naplnění zodpovědností. Metody buď pracují sami nebo spolupracují s dalšími metodami a objekty. 5

Zodpovědnosti a Diagramy Interakce :Sale makepayment( ) create( ) :Payment V UML artefaktech, obecný kontext, kde jsou tyto zodpovědnosti (implemented as methods) uvažovány je při tvorbě diagramů interakce. Sale objekt má zodpovědnost k vytvoření Payments, skrze metodu makepayment. 6

Vzory Zdůrazníme tyto principy (expressed in patterns) jako průvodce voleb, kam přiřadit zodpovědnosti. Vzor je pojmenovaný popis problému a řešení, které může být aplikováno na nové kontexty; poskytuje radu, jak aplikovat řešení v různých situacích. Např: q Pattern name: Information Expert q Problem: What is the most basic principle by which to assign responsibilities to objects? q Solution: Assign a responsibility to the class that has the information needed to fulfil it. 7

Information Expert (or Expert) Problem: co je obecný princip přiřazení zodpovědnosti objektům? Solution: přiřaď zodpovědnosti danému Expertu, tedy třídě co má informace k naplnění zodpovědnosti V NextGen POS aplikaci, kdo je zodpovědný za to znát celkový součet ceny (grand total) prodeje(sale)? Dle Information Expert se díváme po třídě která má informace k určení celkového součtu. 8

Information Expert (or Expert) Kam se budeme dívat abychom analyzovali třídy které mají dané informace? Do Domain Modelu, nebo Design Modelu..? Do obou! Můžeme předpokládat, že nemáme žádný či jen minimální Design Model. Určitě budeme hledat i v Domain Modelu daného information experta. 9

Information Expert (or Expert) Sale date time Contains 1..* SalesLineItem quantity * Described-by 1 Product Specification description price itemid Musíme znát o všech SalesLineItem instancích příslušných k sale a sečíst jejich mezisoučty (subtotals). Sale instance toto vše obsahuje, i.e. it is an information expert for this responsibility. 10

Information Expert (or Expert) t := gettotal() Toto je částečný diagram interakce. :Sale 11

Information Expert (or Expert) t := gettotal() :Sale 1 *: st := getsubtotal() :SalesLineItem Jaké informace jsou třeba k určení mezisoučtu položky (line item subtotal)? q quantity and price. SalesLineItem by mělo určit mezisoučet (subtotal). To znamená že Sale pošle getsubtotal() zprávu do každé SalesLineItem a sečte výsledky. 12

Information Expert (or Expert) Jaké informace jsou třeba k určení mezisoučtu položky (line item subtotal)? q quantity and price. SalesLineItem by mělo určit mezisoučet (subtotal). To znamená že Sale pošle getsubtotal() zprávu do každé SalesLineItem a sečte výsledky. 13

Information Expert (or Expert) t := gettotal() :Sale 1 *: st := getsubtotal() :SalesLineItem 1.1: p := getprice() K naplnění zodpovědnosti knowing and answering jaký je mezisoučet (subtotal), SalesLineItem musí znát cenu produktu (price). ProductSpecification je information expert na poskytnutí své ceny. :ProductSpecification 14

Information Expert (or Expert) K naplnění zodpovědnosti knowing and answering jaký je mezisoučet (subtotal), SalesLineItem musí znát cenu produktu (price). ProductSpecification je information expert na poskytnutí své ceny. 15

Information Expert (or Expert) Class Responsibility Sale Knows Sale total SalesLineItem Knows line item total ProductSpecification Knows product price K naplnění zodpovědnosti knowing and answering sale s total, 3 zodpovědnosti byly přiřazeny 3 design třídám K naplnění zodpovědnosti je často třeba informací rozprostřených po mnoha třídách a objektech. To znamená že je mnoho částečných expertů kteří budou spolupracovat v daném úkolu. 16

Creator Problem: Kdo by měl být zodpovědný za vytvoření nové instance nějaké třídy? Solution: Přiřaď třídě B zodpovědnost za vytvoření nové instance třídy A, pokud je jedna či více podmínek splněno: B aggregates A objects. B contains A objects. B records instances of A objects. B has the initializing data that will be passed to A when it is created (thus B is an Expert with respect to creating A). 17

Creator Sale date time Contains 1..* SalesLineItem quantity * Described-by 1 Product Specification description price itemid V POS aplikaci, kdo je zodpovědný a vytvoření SalesLineItem instance? Sale obsahuje mnoho SalesLineItem objektů, Creator pattern tedy dle podmínek označuje Sale jako kandidáta. 18

Creator :Sale makelineitem(quantity) Toto přiřazení zodpovědnosti požaduje že metoda makelineitem bude definována nad Sale. create(quantity) :SalesLineItem 19

Low Coupling Coupling: je míra jak silně je jeden element spojen, má znalost či spoléhá na dalších elementech. Třída mající high coupling je závislá na mnoha dalších třídách (libraries, tools). Problémy spojené s návrhem s high coupling: q Changes in related classes force local changes. q Harder to understand in isolation; need to understand other classes. q Harder to reuse because it requires additional presence of other classes. Problem: Jak podpořit co možná nejnižší závislosti, minimální dopad změn a zvýšit reuse/recyklaci? Solution: Přiřaď zodpovědnosti, tak že coupling zůstane malý. 20

Low Coupling Je třeba vytvořit instanci Payment a asociovat se Sale. :Register :Payment :Sale Jaká třída by za to měla být zodpovědná? Dle Creatoru, Register je kandidát. 21

Low Coupling makepayment() 1: create() :Register 2:addPayment(p) p:payment :Sale Register pak může poslat addpayment zprávu do Sale, a předat nový Payment jako parametr. Přiřazení zodpovědnosti coupluje Register class do znalosti Payment class. Sale also coupled to knowledge of a Payment. 22

Low Coupling makepayment() 1: makepayment() :Register 1.1. create() :Sale Alternativa řešení je vytvořit Payment a asociovat se Sale. No coupling between Register and Payment. :Payment 23

Low Coupling Kde se vyskytuje coupling: q Attributy: X has an attribute that refers to a Y instance. q Metody: e.g. a parameter or a local variable of type Y is found in a method of X. q Podtřída: X is a subclass of Y. q Typy: X implements interface Y. Není specifické měření couplingu, ale obecně, třídy které jsou generické (šablony) a snadné na reuse/ recyklaci mají low coupling. Vždy bude existovat nějaký coupling mezi objekty, jinak by nemohla být spolupráce mezi objekty. 24

High Cohesion Cohesion: je míra toho jak silně přísluší a účelově se zaměřují zodpovědnosti daného elementu. Třída s low cohesion dělá mnoho nesouvisejících aktivit nebo toho dělá až příliš. Problémy z důvodu návrhu s low cohesion: q q q q Hard to understand. Hard to reuse. Hard to maintain. Delicate, affected by change. Problem: Jak udržet složitost snadno ovladatelnou? Solution: Přiřaď zodpovědnosti tak, že cohesion zůstane high. 25

High Cohesion :Register makepayment() create() p:payment addpayment(p) :Sale Potřebujeme vytvořit Payment instanci a asociovat ji se Sale. Jaká třída za to má být zodpovědná? Dle Creatoru, Register je kandidát. Register se ale může stát vyžraný, pokud mu budeme přidávat další a další systémové operace. 26

High Cohesion :Register :Sale makepayment() makepayment() create() :Payment Alternativní návrh deleguje zodpovědnost vytvoření Payment na Sale Toto má higher cohesion v Registeru. Tedy tento návrh podporuje high cohesion a low coupling. 27

High Cohesion Scénáře ilustrující různé stupně funkční cohesion 1. Very low cohesion: třída zodpovědná za mnoho věcí v mnoha různých oblastech. q e.g.: a class responsible for interfacing with a data base and remote-procedure-calls. 2. Low cohesion: třída zodpovědná za složitý úkol ve funkční oblasti. q e.g.: a class responsible for interacting with a relational database. 28

High Cohesion 1. High cohesion: třída má mírnou zodpovědnost v jedné funkční oblasti a spolupracuje s dalšími třídami k naplnění úkolu. q e.g.: a class responsible for one section of interfacing with a data base. Hrubý odhad: třída s high cohesion má relativně málo metod, s hodně příbuznou funkčností, a nedělá toho moc. Spolupracuje a deleguje. 29

Low coupling VS. High Cohesion Low Coupling Jak moc jsem zavislý na mamince Jak jsem samostatný High cohesion V práci jsem zodpovědný za programování v C, kafe, management týmu V práci jsem zodpovědný za programování perzistence, znám SQL, DB, JPA, JDBC 30

Controller Problem: Kdo je zodpovědný za řízení vstupních systémových událostí? Solution: Přiřaď zodpovědnost k obdržení a zpracování systémové události do třídy reprezentující jedno z následujících: q Represents the overall system (facade controller). q Represents a use case scenario (use case handler). q Represents from a real world (role controller). q Controller je ne-user interface objekt, který definuje metodu pro systémovou operaci. q Note that windows, applets, etc. typically receive events and delegate them to a controller. 31

Controller V POST aplikaci je mnoho systémových operací Kdo by za ně měl být zodpovědný?

Controller Pomocí Controller pattern, jsou volby: o POST celkový system o Store colkový business/organizace o Cashier real-world entita zapojená do úkolů o BuyItemsHandler umělý handler všech systémových operací pro use case

Controller Správná volba je závislá na dalších faktorech (jako coupling a cohesion) ale doporučení jest: Použij façade kontroléry pokud jsou se jedná o pár systémových událostí UseCaseHandler je vhodný pokud máme mnoho systémových událostí mezi různými procesy a façade kotrolery by se staly přeplněné Použij role kontroléry opatrně. o Je snadné přiřadit veškerou práci person-like objektům na místo delegátů Note: Presentation layer does not handle system events

Controller

Controller Důsledek větší potenciál pro reuse = jako MVC možné úvahy o stavu use case o pokud UseCaseHandler užit pro veškeré systémové události náležící use casu, je možné zajistit systémové operace, tak abych se vyskytly jen v legální sekvenci

Polymorfismus Záměr Pokud se alternativy liší typem, přiřaď zodpovědnosti za chování - pomocí polymorfních operací typům pro které se chování liší Pozor, netestuj typ objektu ale použij podmínku k vybrání alternativy Problém Jak řešit alternativy dle typu Pokud program používá podmínky k výběru a nová variace znamená změnu těchto podmínek

Polymorfismus V POST aplikaci, kdo je zodpovědný za autorizace různých plateb? Akceptovat lze cash, check, credit či debit platby a autorizace je pokaždé různá. Z Polymorphismu, přiřadíme zodpovědnost každému typu Payment (inherit interface from abstract Payment class)

Polimorfismus

Polymorfismus Důsledek Snadné rozšíření Podobné Malá závislost Podobné GoF Command, Strategy a State

Pure fabrication Záměr Přiřaď kohezní množinu odpovědností do umělé třídy, která nic nereprezentuje v dané doméně. To potom umožní podporu pro high cohesion, low coupling, and reuse. Only do when desperate? We are often desperate! Problém OO je charakteristické implementací SW tříd jako konceptů reálného světa. Co ale pokud přiřazení odpovědností do doménových tříd znaméná špatnou kohezi veliké spárování (tight coupling)?

Pure fabrication Sale instance jsou uloženy v databázi. Pomocí Experta by Sale měl být za toto zodpovědný. Ale: Tento úkol požaduje veliké množství operací pro spojení s DB, žádná z nich nemá vztah ke konceptu Sale (incohesive) Sale class musí být spárovaná (coupled) s rozhraním DB - tedy coupling roste a to není do jiného doménového objektu! Ukládání objektů do DB je obecná úloha kterou využije více tříd. Přiřazením zodpovědnosti do Sale znamená špatný reuse a noho duplokace v dalších třídách Řešení: vytvoř třídu zodpovědnou jen za ukládání objektů do DB

Pure fabrication Důsledek Reuse, low coupling, high cohesion Podobné GoF Adapter, Visitor, Observer

Indirection Záměr Přiřaď zodpovědnosti do prostředníka aby zprostředkovával komunikaci mezi komponentami servisy, tak aby nebyli přímo spárované Problém Jak odpárovat objekty, tak že low coupling zůstane a reuse je zvýšen

Indirection V POST aplikaci, terminal musí používat modem k odeslání plateb. OS poskytne low-level API pro přístup k modemu. Třída CreditAuthorizationService je zodpovědná za komunikaci s modemem. ALE, pro propojení nechceme aby detaily modemu byly zaneseny do do doménové třídy (highly coupled to OS). Raději, přidáme prostředníka, třídu Modem, která bude reprezentovat rozhraní do doménové třídy. Také známé jako proxy.

Indirection Důsledek Low coupling Podobné GoF: Mediator, Adapter, Facade, Observer

Don t talk to strangers Záměr Přiřaď zodpovědnosti do klientského přímého objektu, ta aby spolupracoval s nepřímím objektem. Tak, že klient neví nic o nepřímém objektu Umísťuje omezení na to jaké objekty mohou odesílat zprávy uvnitř metody. Ty by měly být odeslány pouze na: Sebe, či vlastní atribut nebo vlastní kolekci Parametr metody Objekt vytvořen uvnitř metody Problém Pokud objekt má znalosti vnitřní struktury jiného objektu, potom trpí s high coupling. Pokud klientský objekt musí použít servis k obdržení informací z nepřímého objektu, jak toho může docílit bez spárování do znalosti vnitřní struktury jeho přímého serveru či nepřímého objektu

Don t talk to strangers V POST app, POST instance obsahuje atribut referující na Sale, a ten má atribut referující na Payment. POST instance podporují operaci paymentamount, ta vrací aktualní hodnotu předloženou k platbě. Sale instance podporují operaci payment, ta vrací Payment instanci asociovánu se Sale.

Don t talk to strangers Jedna možnost je

Don t talk to strangers Lepší volba je přidat zodpovědnost do přímého objektu (Sale), aby vrátil Payment amount do POST Známé jako promoting the interface

Don t talk to strangers Proti zákonu Jako každý zákon, někdy se musí porušit Pokud je broker či object server zodpovědný za návrat jiných objektů na bázi vyhledání, pak je možné získat viditelnost do těchto objektů skrze broker a zaslat jim zprávu přímo. Podobné Indirection, Chain of Responsibility