SOLID principy v OOP návrhu

Slides:



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

Seminář C++ 5. cvičení Dědičnost Ing. Jan Mikulka.
Funkce Připomeňme si program pro výpočet faktoriálu:
Ať se postará někdo jiný, najmeme si programátory z Číny. Čuníkům vstup zakázán.
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
Uživatelská rozhraní Uživatelská rozhraní 9. cvičení.
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.
Alg51 Rozklad problému na podproblémy Postupný návrh programu rozkladem problému na podproblémy –zadaný problém rozložíme na podproblémy –pro řešení podproblémů.
Singleton 1 1.
Polymorfismus Dědičnost
Zend Framework 2. Svět se změnil! Zapomeňte! Všechno je jinak!
Čtvrté cvičení Objektové programování Objektový model v Javě
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
Chain of responsibility Martin Malý prezentace na předmět Návrhové vzory (PRG024) na MFF UK
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
Proč programovat v LS objektově Jiří Krákora, Alliance Healthcare.
C# - funkce a procedury Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
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 -
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
PRÁCE S VLÁKNY A APLIKAČNÍ DOMÉNY V.NET FRAMEWORK APLIKACÍCH Architektura technologie.NET Jan Martinovič, FEI - Katedra Informatiky.
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
Seminář C++ 4. cvičení Objekty Ing. Jan Mikulka. Co je objekt ► obraz třídy i instance ► třída – definovaná za pomocí klíčového slova class ► instance.
Dependency injection Předávání závislostí Petr Kalivoda
Alg91 Textové soubory Na rozdíl od jiných typů souborů jsou textové soubory určené pro gramotné lidské oko. Textový soubor je posloupnost znaků členěná.
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.
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í.
PB161 Principy OOP - rozhraní, dědičnost PB161 | Principy OOP - Dědičnost, rozhraní
IB111 Programování a algoritmizace
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
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.
13/04/20151 Indexery (1) Členy třídy (struktury) umožňující třídě (struk- tuře) používat hranaté závorky a pracovat s ní podobně jako s polem (používat.
Šesté cvičení Výjimky Balíky.
Decorator. Rozšiřuje objekty o dodatečné chování  rozšiřuje konkrétní objekty, ne třídy  rozšiřuje objekt dynamicky, tj. za běhu Upřednostňuje kompozici.
Návrh podle kontraktu - klasická metodika a moderní nástroje Tomáš Pitner Masarykova univerzita v Brně Fakulta informatiky
FEL Komunikátor. Memory Leak program konsumuje operační paměť, kterou neumožňuje uvolnit o uvolnění paměti stará Garbage Collector ▫plně v režii Java.
Pokročilé programování v C++ (část B)
Kam se ubírá jazyk C#? Dr. Ing. Dalibor Kačmář Academic Developer Evangelist Developer & Platform Evangelist Group Microsoft Czech & Slovakia Anders Hejlsberg.
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í.
Visitor. Visitor - motivace Existující struktura typů Unit Character Main Hero Monster Environment Wall Magic Wall Stone Tree Mnoho nezávislých operací.
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.
Proxy. Popis  Klient má přístup k nějakému objektu  Potřebujeme tento přístup ošetřit, aniž bychom přidělali klientovi práci Kontrola přístupu Vzdálený.
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ř.
FUN WITH C# EPISODE XIII INTERFACES STRIKE BACK CLI Type System All types Reference types (allocated on managed heap) PointersValue types (allocated.
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é.
Jak psát „Čistý kód“ A hlavně se v něm pak neztratit Jan Pospíšil Senior Technology
Testování aplikací v Javě Petr Adámek IBA CZ, s.r.o. © 2010.
TDD - Test Driven Development
Úvod do C# - OOP Jaroslav BURDYS 4IT.
Mediator Několik slov o překladu slova do češtiny (prostředník, zprostředkovatel), vyzdvihnutí počeštěného slova mediátor. 1 1.
Martin Dybal Microsoft MSP, MCP
Typový příklad 3 – zadání 1
Návrhový vzor Flyweight
Martin Dybal Microsoft MSP, MCP
Abstract Factory.
Polymorfismus = Mnohotvarost
TNPW1 JavaScript Ing. Jiří Štěpánek.
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í.
Vázání dat Data Binding
Monitor Object 1.
Dfdfdf.
Mediator Několik slov o překladu slova do češtiny (prostředník, zprostředkovatel), vyzdvihnutí počeštěného slova mediátor. 1 1.
Proxy 1.
Composite “Spojuj a panuj”.
Bridge.
Transkript prezentace:

SOLID principy v OOP návrhu Tomáš Vichta 18. března 2017

S ingle-responsiblity O pen-closed L iskov substitution SOLID principy S ingle-responsiblity O pen-closed L iskov substitution I nterface segregation D ependency inversion

Proč SOLID? Snadnější a bezpečnější rozšiřitelnost Přehlednost Znovupoužívání kódu Jednotné chování aplikace Lépe testovatelný kód unit testy i mocky pro testovací prostředí Méně bugů

Single Responsibility Principle 1 třída má 1 zodpovědnost Není dobré jít do extrému (třídy s 1 řádkem kódu) Ale když váhám, tak kód raději hned rozdělím na více tříd SINGLE RESPONSIBILITY PRINCIPLE Just Because You Can, Doesn't Mean You Should

Single Responsibility Principle class BigClass { public void Load() { } public void Compute() { } } class Loader { public void Load() { } } class Calculator public void Compute() { }

Dependency Inversion Principle Třída má záviset na abstrakci Interface, base (často abstract) class Tzn. implementaci dodáme třídě zvenku Constructor, Property, Method Injection Souvisí s Inversion of Control/Dependency Injection 2 1 3 1 2 3

Dependency Inversion Principle – příklad class BadComputeController { public void Process(object model) new Calculator().Compute(); if (true) new Mailer().Send("computed successfully"); } class BetterComputeController { private readonly ICalculator _calc; public IMailer Mailer { get; set; } public BetterComputeController(ICalculator calc) { _calc = calc; } public void Process(object model) _calc.Compute(); Mailer?.Send("computed successfully"); } -příklady -ukázat test

Open-closed Principle Nová funkcionalita se přidává novým kódem, nikoli modifikací starého Open Nová funkcionalita = nová třída Děděním Novou implementací stávajících interfaces Closed Nesahám do stávajících tříd Netýká se bugfixingu, refaktoringu, většinou ani změn

Open-closed Principle – příklad

Liskov substitution Principle Subclass se chová navenek stejně jako base class Rozšiřuje Open-closed princip Metody v Subclass Nevyhazovat žádné nové výjimky (kromě poděděných), protože s nimi klient nemusí počítat. Nesmí vyžadovat větší omezení na vstupní argumenty "Postconditions cannot be weakened in a subtype." Neměnit vnější stav, pokud to klient nečeká Typický příklad čtverec vs. obdélník a metody SetWidth(), SetHeight(), ComputeArea()

Liskov substitution Principle – příklad Others příklad - NotSupportedEx

Interface Segregation Principle Každá funkcionalita má svůj, co nejmenší interface Klient: Používám interface/třídu jsou tam jen metody, které potřebuji Implementuji interface ten by neměl mít metody, které v mojí implementaci nemají smysl tj. nepotřebuji NotSupportedException jako jediný řádek metody Souvisí se Single Responsibility z pohledu konzumenta (klienta) Ale není to to samé, je legitimní dělit 1 responsibility do více interfaces

Interface Segregation Principle – příklad interface IRepository { object Read(); void Save(object data); } class BadRepository : IRepository public object Read() { return null; } public void Save(object data) { } interface IReader { object Read(); } interface IWriter { void Save(object data); } interface IRepository : IReader, IWriter{} class BetterRepository : IReader, IWriter, IRepository { public object Read() { return null; } public void Save(object data) { } }

Interface Segregation Principle – příklad public struct Int32 : IComparable, IFormattable, IConvertible public abstract class Controller : ControllerBase, IActionFilter, IAuthorizationFilter, IDisposable, IExceptionFilter, IResultFilter, IAsyncController, IController, IAsyncManagerContainer Ukázat Controller

Jak poznat non-SOLID kód? Varovné znaky Mnoho velkých if, velký počet if ve třídě typeof(Subclass) if(x is Subclass) Přetypování: var concreteObject = (Subclass)someObject Mnoho public metod, mnoho metod v interface Potřeba implementovat metody vyhozením .NET: NotSupportedException Java: UnsupportedOperationException Lze špatně nebo vůbec testovat -nazvý tříd -složitější?

Diskuze

Děkujeme za pozornost