OOP, Desing Patterns … and more Michał Dubel
Clean Code – krótkie wprowadzenie, bardzo krótkie Podstawy OOP - pojęcia SOLID Design Patterns Bibliografia Q&A A wszystko okraszone kodem Agenda
Kod nie musi być długi, aby być nieczytelny public List getThem() { List list1 = new ArrayList<>(); for (int[] x : theList) if (x[0] == 4) list1.add(x); return list1; } Co biznesowo robi ta metoda? Clean Code
Kod nie musi być długi, aby być nieczytelny public List getFlaggedCells() { List flaggedCells = new ArrayList<>(); for (int[] cell : gameBoard) if (cell[STATUS_VALUE] == FLAGGED) flaggedCells.add(cell); return flaggedCells; } Clean Code
Jeszcze lepsze uporządkowanie kodu public List getFlaggedCells() { List flaggedCells = new ArrayList<>(); for (Cell cell : gameBoard) if (cell.isFlagged()) flaggedCells.add(cell); return flaggedCells; } Clean Code – możemy nawet lepiej !
OOP – paradygmat programowania – obiekty mające stan i zachowanie Znamy też: Programowanie Imperatywne (jak działa program) Programowanie proceduralne Programowanie deklaratywne (co chcemy osiągnąć ? Warunki końcowe – a nie jak to osiągnąć) Programowanie funkcyjne (funkcje należą do wartości podstawowych) …oraz wiele innych OOP - podstawy
Klasa (stan, zachowanie) Hermetyzacja (aka enkapsulacja) Dziedziczenie Polimorfizm OOP - pojęcia
Zwierzęta jako przykład polimorficzny OOP – szybki przykład polimorfizmu
S ingle responsibility principle O pen/closed principle L iskov substitution principle I nterface segregation principle D ependency inversion principle SOLID - mnemonic acronym introduced by Michael Feathers for the "first five principles" named by Robert C. Martin in the early 2000s that stands for five basic principles of object- oriented programming and design. SOLID Principles
Wstrzykiwanie zależności oraz luźne powiązania na rycerskim przykładzie P.S. Nie mylcie „Injection” z „Inversion” ! Dependency Injection - przykład
Preferuj kompozycję (MA) nad dziedziczenie (JEST) Open-Closed principle Dependency Inejction Przykład: Kacze Opowieści OOP
OOP – chcielibyśmy dodać możliwość latania
Czyli wszystko (prawie) o tworzeniu obiektów co chcieliście wiedzieć ale baliście się zapytać. Przykład: Pizza Tworzenie obiektów
Jak pozbyć się IF’ów ? No more IF Polimorficznie ! Jak pozbyć się IF’ów ?
Design patterns classification: Creational patterns: Singleton Factory Factory Method Structural patterns: Adapter Facade Decorator Proxy Behavioarl patterns: Template Method Observer Strategy O czym nie powiedzieliśmy ?
Polecane lektury: Robert C. Martin „Clean Code” Joshua Bloch „Effective Java” Eric Freeman, Elisabeth Freeman „Head First, Design Patterns” Bibliografia
Dziękuję za uwagę