Úvod do objektového návrhu

Slides:



Advertisements
Podobné prezentace
Uvedení autoři, není-li uvedeno jinak, jsou autory tohoto výukového materiálu a všech jeho částí. Tento projekt je spolufinancován ESF a státním rozpočtem.
Advertisements

Informace z ČŠI Jiří Machačný školní inspektor Porada ředitelů škol a školských zařízení zřizovaných LK ( )
Hodnocení kvality výuky 2014 – 2015 LS Říjen 2015.
Operační program Vzdělávání pro konkurenceschopnost Název projektu: Inovace magisterského studijního programu Fakulty ekonomiky a managementu Registrační.
RŮZNOST KANCELÁŘSKÝCH BALÍKŮ je řada za sebou následujících snímků (slidů) předváděných na PREZENTACE monitoru počítače plátně prostřednictvím dataprojektoru.
Programování v jazyce C++ Dědičnost a polymorfismus.
Číslo projektu školy CZ.1.07/1.5.00/ Číslo a název šablony klíčové aktivity III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo materiáluVY_32_INOVACE_OdP_S2_07.
1 Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Mgr. Vladimír Mikulík. Slezské gymnázium, Opava, příspěvková organizace. Vzdělávací materiál.
Podnik ro Název projektu: Nové ICT rozvíjí matematické a odborné kompetence Číslo projektu: CZ.1.07/1.5.00/ Název školy: Střední odborná.
Prostředí pro provoz IS Vývoj informačních systémů.
Číslo projektuCZ.1.07/1.5.00/ Číslo materiáluVY_32_INOVACE_30-03 Název školy Střední průmyslová škola stavební, České Budějovice, Resslova 2 AutorRNDr.
Operační program Vzdělávání pro konkurenceschopnost Název projektu: Inovace magisterského studijního programu Fakulty ekonomiky a managementu Registrační.
Software Licence a distribuce Karel Nymsa Dotkněte se inovací CZ.1.07/1.3.00/
Postup modelování Kateřina Růžičková. Postup modelování Rozhodnutí modelovat Definice problému Existence modelu, pro daný problém Identifikace modelu.
Microsoft Excel verze 2010 Mgr. Přemysl Kejzlar.
Věcné autority v roce 2016
C# konzole – TEST Program spotřeba vody
PŘESHRANIČNÍ VLIVY Gijs van Luyn InfoMil
Vytvořil: Robert Döring
Evaluace předmětů studenty (Anketky)
Veřejná správa, Regionální rozvoj Litoměřice Jan Jůna 2012
Rozhodování 1.
Lineární funkce - příklady
Způsoby zápisu algoritmů
State 1.
Algoritmizace - opakování
eRecept – komunikace se základními registry
Algoritmizace - opakování
Programování v jazyce C++
Financováno z ESF a státního rozpočtu ČR.
Jednotné principy klasifikace na GJKT
ZŠ Masarykova, Masarykova 291, Valašské Meziříčí Martin Havlena
PB071 – Programování v jazyce C
Sémantické aspekty katalogizace VI
Inf Tabulkový procesor - formátování
Základní jednorozměrné geometrické útvary
Název školy Základní škola Jičín, Husova 170 Číslo projektu
Abstract Factory.
Hotelová škola, Obchodní akademie a Střední průmyslová škola Teplice,
Rovnice a nerovnice Lineární nerovnice Mgr. Jakub Němec
karel oliva Akademie věd ČR
Gymnasium Jižní Město Praha
ZÁKLADNÍ ŠKOLA, JIČÍN, HUSOVA 170 Číslo projektu
USMĚRŇOVAČE V NAPÁJECÍCH OBVODECH
Stavební fakulta ČVUT, B407
BIBS Informatika pro ekonomy přednáška 2
Informatika pro ekonomy přednáška 8
Výroková logika Analyzuje způsoby skládání jednoduchých výroků do výroků složených pomocí logických spojek. 1.
Pravidla a doporučené postupy pro vytváření studijních programů
Microsoft Office Access
ŠABLONY PRO STŘEDNÍ ŠKOLY
Dotazovací jazyk SQL I.
Portál PUBLIKACE jako nástroj evidence výsledků vědeckovýzkumných aktivit Situace ke konci roku 2016 Cíl na rok 2017 – z nástroje dílčích sběrů vytvořit.
Materiál byl vytvořen v rámci projektu
Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Průvodní list Šablona: VI/2 Vytváření podmínek pro rozvoj znalostí, schopností a dovedností v oblasti finanční gramotnosti   Vzdělávací materiál: Prezentace.
A5M33IZS – Informační a znalostní systémy
Informace k tezím rekodifikace
Implementace BAT závěrů do integrovaných povolení v Moravskoslezském kraji Krakow.
Nádherné prezentace navrhnete a předvedete snadno a s jistotou.
MS Access Tabulka letní semestr 2013.
ČÍSLO PROJEKTU ČÍSLO MATERIÁLU NÁZEV ŠKOLY AUTOR TÉMATICKÝ CELEK
Analýza informačního systému
Požadované vlastnosti E-R modelu
Informatika pro ekonomy přednáška 8
Lineární funkce a její vlastnosti
Rezervy x rezervní fond
Grafy kvadratických funkcí
Bridge.
Class Diagrams.
Transkript prezentace:

Úvod do objektového návrhu Petr Adámek adamek@fi.muni.cz

Obsah Organizace předmětu Osnova předmětu Nejdůležitější pravidlo Rekapitulace ostatních důležitých zásad Úvod do objektové dekompozice

Organizace a osnova předmětu Organizace předmětu https://is.muni.cz/auth/el/1433/jaro2017/PV168/op/Organizace.html Osnova předmětu https://is.muni.cz/auth/el/1433/jaro2017/PV168/index.qwarp

Nejdůležitější pravidlo KISS

Základní pravidla pro tvorbu udržovatelného kódu Přečíst si Effective Java  Důsledně preferovat jednoduchý a přehledný kód, vyhýbat se předčasné optimalizaci Dodržovat konvence pro zápis kódu (např. identifikátory) Používat srozumitelné identifikátory Psát kód tak, aby nebyly potřeba komentáře Vyhýbat se duplicitnímu kódu Používat existující knihovny a Java Core API, nevynalézat znovu kolo Nezneužívat dědičnost, používat ji pouze pro modelování vztahu generalizace/specializace Používat vyjímky pouze pro ošetření chyb nebo nestandardních situací Být defenzivní, vždy kontrolovat dodržení kontraktu

Zdroje Effective Java (2nd Edition) Joshua Bloch http://amazon.com/dp/0321356683/

Objektová dekompozice Dekompozice je rozklad problému na dílčí podproblémy, které se pak řeší samostatně. V případě programování se jedná zejména o rozdělení programu do modulů, objektů a metod. Dobrá dekompozice je důležitou součástí dobrého návrhu programu. Princip Rozděl a panuj.

Jak se pozná dobrá dekompozice Dobře provedená dekompozice: Je jednoduchá (vyhýbáme se zbytečně komplikovaným návrhům a neřešíme problémy, které řešit nemusíme). Každá komponenta (třída nebo metoda) je co nejjednodušší (ale aby dávala smysl). Mezi komponentami je co nejméně závislostí. Neobsahuje duplicitní kód Využívá výhody zapouzdření (skrývání složitosti). Používá správně definovanou hierarchii výjimek.

Jak se pozná dobrá dekompozice Další tipy pro dekompozici Pokud je to možné, používejte neměnitelné třídy. Pro definici typů, služeb a potenciálně vyměnitelných nebo obecných komponent používejte rozhraní. Mezi komponentami je co nejméně závislostí. Omezte použití dědičnosti (často je vhodnější kombinace kompozice nebo agregace a delegování). Klíčem je využití existujících komponent (knihovny, Java Core API, jakarta- commons, frameworky, apod.)

Jak na dekompozici Snažíme se identifikovat jednotlivé části problému, které je vhodné modelovat pomocí tříd. U databázových aplikací obvykle narazíme na: třídy s charakterem entit (Student, Car, Course, apod.); třídy reprezentující operace či sady operací (StudentCatalog, QueryParser, StorageManager).

Entity Entita je třída reprezentující nějaký objekt, který existuje v problémové domény. Objekt může být konkrétní (auto, osoba, faktura) i abstraktní (úkol, dovednost, předmět). Každá entita by měla mít (pouze): ID (primární klíč); příslušné atributy a k nim get/set metody; bezparametrický konstruktor; metody equals() a hashCode(); vhodná bývá i metoda toString(), případně compareTo().

Entity Při vytváření dodržujeme následující zásady: ID (primární klíč) by mělo být syntetické, nevolíme atributy z problémové domény (např. rodné číslo, RZ). Až na výjimky nevytváříme jiný než bezparametrický konstruktor. Entita slouží jako schránka na data, nikdy nesmí obsahovat aplikační logiku.

Příklad entity public class Person { private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean equals(Object o) { if (this == o) { return true; } if (getId() == null) { return false; } if (o instanceof Person) { return getId().equals(((Person) o).getId()); } else { return false; } public int hashCode() { return id==null?0:id.hashCode(); }

Závislosti mezi komponentami Třída A závisí na třídě B pokud: Metody třídy A používají třídu nebo rozhraní B Třída A rozšiřuje třídu B Třída A implementuje třídu B Potom třídu A nelze použít bez třídy B. Podobně to funguje i na ostatních úrovních (metody, komponenty, moduly, apod.) Závislosti mohou být tranzitivní

Problémy se závislosti komplikují údržbu kódu (změny jsou složité); brání znovupoužitelnosti kódu; indikují chybu v dekompozici (pokud je jich moc). Zásadní chybou jsou cyklické závislosti: nikdy se nesmí objevit; vždy jsou důsledkem špatné dekompozice; vždy se dají odstranit.

Příklad problematických závislostí

Vazby mezi entitami Co musíme vzít v úvahu: Druh vazby (asociace, agregace, kompozice). Kardinalitu (1:1, 1:N, M:N) Přítomnost referencí jako atributu v třídě entity (jednosměrné, obousměrné, bez přímé reference)

Přítomnost referencí v entitě Ne vždy je dobrý nápad do třídy entity vkládat atributy pro všechny vazby, které daná entita má. Můžeme se dostat do situace, kdy kvůli tranzitivním závislostem budeme zbytečně načítat velké množství nepotřebných dat. Proto je někdy užitečné modelovat vazbu jako jednosměrnou (je přístupná pouze z jedné entity a z druhé nikoliv), nebo atributy pro přístup k asociovaným entitám úplně vypustit. Přístup k asociovaným entitám pak zajistíme pomocí vhodné metody v servisní vrstvě.

Jak řešíme kardinalitu Na úrovni datového modelu 1:N – do tabulky entity s kardinalitou N přidáme cizí klíč, který bude odkazovat na primární klíč druhé entity. M:N – musíme přidat skrytou vazební tabulku nebo vazební entitu. 1:1 – podobně jako pro vztah 1:N Pokud je daná vazba nepovinná, u sloupce s příslušným cizím klíčem povolíme hodnotu NULL

Druh vazby Agregace i kompozice jsou speciálním případem asociace a proto se modelují a implementují stejným způsobem. Druh vazby však může být vodítkem pro to, zda zahrnout reference do entity. Pro rozhodnutí o jaký typ vazby se jedná vizte např. blogspot René Steina.

Kompozice, vztah 1:N, obousměrná vazba

Agregace, vztah 1:N, bez referencí

Asociace, vztah M:N, skrytá vazební tabulka, bez referencí

Asociace, vztah M:N, s vazební entitou, jednosměrné vazby

Refaktoring Refaktoring je změna struktury kódu, aniž by došlo ke změně funkčnosti. Málokdy se podaří vše navrhnout správně hned napoprvé, případně může dojít v průběhu vývoje ke změně či upřesnění požadavků. Proto je občas potřeba strukturu kódu změnit. Řada agilních metodik (TDD, XP, apod.) používá refaktoring jako jeden ze základních nástrojů.

Zásady při refaktoringu Při refaktoringu nikdy nepřidáváme novou funkcionalitu, pouze měníme strukturu kódu. Klíčem k úspěchu jsou jednotkové testy

Zdroje Refactoring: Improving the Design of Existing Code Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts http://amazon.com/dp/0201485672/

Závěr ?