Jak psát „Čistý kód“ A hlavně se v něm pak neztratit Jan Pospíšil Senior Technology

Slides:



Advertisements
Podobné prezentace
(instance konkrétní třídy)
Advertisements

Ať se postará někdo jiný, najmeme si programátory z Číny. Čuníkům vstup zakázán.
Přednáška č. 3 Normalizace dat, Datová a funkční analýza
Přednáška č. 5 Proces návrhu databáze
ÚVOD DO CPP 7 Dědičnost - pokračování
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
CrossFire (Beilstein on-line) Jan Šarek, katedra organické chemie, UP, PřF, web: Motto: Sekundární chemická.
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
Polymorfismus Dědičnost
Zend Framework 2. Svět se změnil! Zapomeňte! Všechno je jinak!
Programování v C++ Cvičení.
Čtvrté cvičení Objektové programování Objektový model v Javě
Koreferát: LISp-Miner a (lékařské) ontologie Vojtěch Svátek.
State. State – kontext a problém Kontext  chování objektu má záviset na jeho stavu, který se typicky mění za běhu Neflexibilní řešení  metody obsahují.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
Dependency injection Jiří Matula Neruším? Ráda bych vám pomohla
KONCEPTUÁLNÍ MODELOVÁNÍ
Proč programovat v LS objektově Jiří Krákora, Alliance Healthcare.
13AMP 6. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled Synchronizace procesů Synchronizace procesů Producent-Konzument Producent-Konzument.
Michael Juřek Software Architect Microsoft s.r.o.
Objektové programování
Sémantická analýza Jakub Yaghob
Jedenácté cvičení Vlákna. Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading -
C# - OOP (object oriented programming)
4IT445 – Testování a ladění v PHP Ing. Jan Mittner
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
6. cvičení Polymorfismus
PB161 Právo friend, přetěžování operátorů, přetypování PB161 | Friend, operátory PB161 – Programování v jazyce C++ Objektově Orientované Programování.
Memento. Obnovení operačního systému ( Windows | Linux...) Všichni víme, co jsou transekce v databázi Memento – zálohování databáze.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
Algoritmizace a programování Objektově orientované programování - 16 Mgr. Josef Nožička IKT Algoritmizace a programování
PB161 Principy OOP - rozhraní, dědičnost PB161 | Principy OOP - Dědičnost, rozhraní
IB111 Programování a algoritmizace
Vývoj aplikací v jazyku Ruby Bakalářská práce Tomáš Kohout VTI.
Tento výukový materiál vznikl v rámci Operačního programu Vzdělávání pro konkurenceschopnost 1. KŠPA Kladno, s. r. o., Holandská 2531, Kladno,
Dokumentace informačního systému
AJAX nejmodernější webová technologie… seminář pro učitele ZŠ a SŠ Mgr. Marek Osuchowski Ostravská univerzita © 2011.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
Richard Lipka Department of Computer Science and Engineering Faculty of Applied Sciences University of West Bohemia, Pilsen, Czech Republic 1.
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
Šesté cvičení Výjimky Balíky.
Akademie ZENU Ukázková aplikace. Tak o tomhle to nebude…
Pokročilé programování v C++ (část B)
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Service layer. Service layer – úvod Problém  Vytvoření API aplikace  Odstínění bussiness logiky a transakčního chování od zbytku aplikace  Kam s aplikační.
Podprogramy (subroutines) Pojmenované kousky programu, které –tvoří logicky ucelené části –se v programu opakují Jsou zapsány na jednom místě a v případě.
Strategy. Motivace Různé algoritmy pro stejnou akci Hromada kódu v mnoha podmínkách Důsledky  Komplexnost  Špatná čitelnost  Těžká správa kódu  Těžka.
Template Method. Motivační příklad – reálný svět Čaj 1) Uvař vodu 2) Dej do hrnku sáček čaje 3) Zalij hrnek 4) Přisyp cukr a vymačkej citrón Káva 1) Uvař.
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Datové typy a operátory Základní programové.
1 Kurz XHTML a CSS Část 1: Náš první XTHML dokument a jeho publikace na internetu.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
Testování aplikací v Javě Petr Adámek IBA CZ, s.r.o. © 2010.
PJV15 1 Vnořené ( nested ) a vnitřní ( inner ) členy Třídy či interfejsy mohou být členy tříd či interfejsů. Je-li X obalem Y a Y obalem Z, pak Z získá.
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY MVC vs MVP.
Webdesign prakticky Jak probíhá tvorba webu pro střední a velké společnosti?
SOLID principy v OOP návrhu
Martin Dybal Microsoft MSP, MCP
Programování v jazyce C++
Návrhový vzor Flyweight
Unit testování v JavaScriptu
Strategy „Definujte rodinu algoritmů, zapouzdřuje je aby byly vzájemně zaměnitelné. Strategie umožňuje, aby se algoritmus nebyl závislý na klientech, kteří.
Bridge.
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Decorator.
Monitor Object 1.
Dfdfdf.
GRASP Patterns.
Composite “Spojuj a panuj”.
Transkript prezentace:

Jak psát „Čistý kód“ A hlavně se v něm pak neztratit Jan Pospíšil Senior Technology

SOLID  SOLID: SRP - OCP - LSP - ISP - DIP  SRP - Single Responsibility Principle  OCP - Open Closed Principle  LSP - Liskov Substitution Principle  ISP - Interface Segregation Principle  DIP - Dependency Inversion Principle IoC/DI - Inversion of Control/ D epen dency Injection

Single Responsibility Principle ● Blok kódu (třída, funkce) musí dělat jen jednu věc a dělat jí dobře. ● Počet public parametrů či atributů by neměl překročit 5. ● Funkci nebo třídu musí jít snadno, krátce a výstižně pojmenovat. ● Definice třídy, nebo kód fce by se měl vejít na jednu obrazovku a na první pohled musí být jasné co dělá. ● Jen jedna úroveň abstrakce.

Open Closed Principle ● Programové entity (třídy, moduly, funkce, apod.) by měly být otevřeny pro rozšiřování, ale uzavřeny pro modifikaci. ● Otevřený pro rozšiřování - Chování entity může být dále rozšiřováno. Tím je zajištěna reakce na změnu požadavků v aplikaci. Rešením je použití interface a proxy tříd. ● Uzavřený pro modifikaci - Zdrojový kód entity je nedotknutelný. Nikdo nemá povoleno kód změnit. Zejména kvůli dopadům v místech kde je kód použit. ● Navržené rozhraní musí být univerzální, ale minimalistické.

Liskov Substitution Principle ● Je-li třída B potomkem třídy A, pak musí být třída B použitelná všude, kde je vyžadována třída A bez toho, aniž by o tom nadřazená třída věděla. ● Rodiče lze kdekoliv nahradit potomkem, aniž by to způsobilo chybu. ● Odvozené třídy nesmí nikdy vyžadovat více a poskytovat méně než bázová třída. ● Tento princip neplatí u neveřejné dědičnosti.

Interface Segregation Principle ● Více menších specializovaných rozhraní je lepší než jedno velké generické rozhraní. ● Rozhraní musí být co nejmenší možné a třídy by neměly být nuceny používat rozhraní, která nepotřebují. ● Musí pomáhat porozumění abstrakce, ne komplikovat implementaci. ● Uživatelé třídy by pak měli záviset pouze na těch rozhraních, která používají. ● Rozhraní musí držet jen jeden business význam a jednu úroveň abstrakce.

Dependency Inversion Principle ● Konkrétní musí záviset na abstraktním, nikoliv naopak. ● Když třída potřebuje využít jinou třídu, deklaruje že bude potřebovat využívat dané rozhraní a o dodání implementace se postará vyšší moc. ● SOLIDní aplikace pak vypadá tak, že každá třída implementuje nějaké rozhraní a sama používá jiná rozhraní. ● Žádná třída nezná žádnou jinou třídu – ví jen o rozhraních.

Inversion of Control ● Spřažení objektů probíhá až při runtime. ● Běh programu je řízen interakcí instancí objektů mezi sebou na základě abstraktní mapy interakcí definované pomocí rozhraní. ● Obrácené řízení. Neřešíme běh programu, řešíme jen dílčí úlohy. ● Aplikaci reprezentuje kontainer dodaný FWem. ● Příkladem jsou WEB aplikace. Kontainerem je web server, který volá jednotlivé stránky dle URL pro obsloužení požadavku.

Dependency Injection ● DI odebírá třídám zodpovědnost za získávání objektů, hodnot a všeho co potřebují pro svou činnost. ● Constructor dependency Veškeré závislé objekty, hodnoty,... jsou předány jako parametry konstruktoru. ● Property dependency Veškeré závislé objekty, hodnoty,... jsou předány skrze public property.

Pište kód tak, jak byste ho chtěli dostat od ostatních.

Smysluplné pojmenovávání mdlMainMathConversionToIntegralTrue () mdlMainMathConversionTakeOutDecimal () Round() Trunc() Zaokrouhli() Orizni()

Smysluplné pojmenovávání  public List GetAll(Item[] i) {{  List list1 = new List ();  foreach (Item t in i)  {  if(t.crd < 8)  {  list1.Add(t);  }  return list1; }}  public List GetAccountsHavingLowCredit(Account[] accounts) {{  List lowCreditAccounts =new List ();  foreach (Account account in accounts)  {  if(account.Credit < AccountCreditThreshold)  {  lowCreditAccounts.Add(account);  }  return lowCreditAccounts; }}

Smysluplné pojmenovávání 0,O,1,l int 每周五天 = 5; Mix jazyků Maďarská notace, prefixy

Smysluplné pojmenovávání Názvy třídy by měly být podstatné jména Account, Customer, AddressParser Pozor na pojmenování Data, Info, Processor Názvy metod by měly být slovesa post..., delete..., save... get..., set..., is... Přetížené konstruktory Ideální je použití statických metod Complex.FromRealNumber(...)

Smysluplné pojmenovávání Používejte vždy jen jedno pojmenování pro stejnou věc fetch, retrieve, get controller, manager Definujte si kdo bude číst váš kód Používejte jen obecně známé termíny Pro združení parametrů je vhodné používat kontext addrFirstname, addrLastname, addrStreet, addrState...

Smysluplné pojmenovávání Vlastní složité konstrukce a pojmenování není znakem geniality, ale arogance.

Funkce  Funkce max na 1 stránku (24x80)  Bloky a odsazení  Nebojte se rozložení  Funkce by měla dělat jen jednu věc  Zapomeňte že existuje SWITCH  Lepší návratová hodnota, než výstupní parameter  Bez vedlejších efektů  Exceptions vs. Return Error Code

Neopakujte se  Nikdy nepsat stejný kód dvakrát Problém hlavně kódu svázaného s UI a/nebo eventy  Deklarace konstant Pokud se používají konstanty, mít je deklarované a ideálně v jediné statické třídě.  Načítání konfigurace Jediná statická třída v aplikaci  Jeden vstup, jeden výstup Každá fce by měla mít jen jeden výstup (jen jediné return)

Jan Pospíšil – Senior Technology