Refaktoryzacja „Any fool can write a code that computer understands. Good programers write code that human can understand” – Martin Fowler.

Slides:



Advertisements
Podobne prezentacje
1 Dzisiejszy wykład Wzorce funkcji Wzorce klas. 2 Wzorce Często pojawia się konieczność pisania podobnych funkcji lub klas operujących na argumentach.
Advertisements

1 Dzisiejszy wykład Wzorce funkcji Wzorce klas Tablica asocjacyjna Składowe statyczne.
Wskaźniki repetytorium Wskaźniki int Y = 1, X = 2; X = 5; int *p = &X; Y X p 4 4 p = &Y; *p = 4; 5.
Klasy i obiekty.
Algorytmy – zapis struktur programowania
Generics w .NET 2.0 Łukasz Rzeszot.
Bezpieczeństwo wyjątków w C++: OpenGL
Narzędzia współczesnego programisty Wrocławska Grupa.NET Paweł Hofman Wrocławska Grupa.NET Software Engineer Silicon & Software.
Sposoby implementacji asocjacji
Wybrane elementy języka Java
Szablony C++ Leszek Mierzejewski.
Nowa wersja C# Autor: Piotr Sobczak
Visual Studio Codename „Orcas”, LINQ
Plasterkowanie Leszek Mierzejewski.
Licznik template<class Count_Type> class Count { public:
K.Subieta. SSR, Wykład 4, Folia 1 marzec 2009 Standardy w zakresie systemów rozproszonych i baz danych Kazimierz Subieta Polsko-Japońska Wyższa Szkoła.
Szkolenie dla NaviExpert, Wprowadzenie do refaktoryzacji.
DZIEDZICZENIE · klasy bazowe i klasy pochodne WyświetlAutora( ) Autor
Organizacja Przedsięwzięć Programistycznych Projektowanie
Refaktoryzacja czyli odświeżanie kodu
WYZWALACZE (TRIGGERY) Wyzwalacz jest specjalnym rodzajem procedury składowanej, która może być wykonana w odpowiedzi na jedną z trzech sytuacji: UPDATE.
Wykład 8 Wojciech Pieprzyca
Czytanie, pisanie i rysowanie – cd.. Jeszcze jeden strumyk PrintStream działa jak PrintWriter, ale: Używa domyślnego (systemowego) kodowania Nie wyrzuca.
Czytanie, pisanie i rysowanie (czyli klasa I szkoły podstawowej)
Projektowanie warstwy serwera DisplayTag. Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu.
Hibernate relacje.
Hibernate uzupełnienie
Test Doubles Adam Gabryś , v1.1,
Podstawy C# Grupa .NET PO.
Programowanie obiektowe III rok EiT
Programowanie urządzeń mobilnych – wykład IV
Robi bo musi, czy Ruby bo lubi?
Podstawy inżynierii oprogramowania Zofia Kruczkiewicz
PIO 3_2, Zofia Kruczkiewicz1 Wykład 3 – część druga Iteracyjno-rozwojowy cykl oprogramowania 3.
Programowanie obiektowe III rok EiT
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Seminarium problemowe
PIO 2_2, Zofia Kruczkiewicz1 Wykład 2 – część druga Iteracyjno-rozwojowy cykl oprogramowania 2.
Tworzenie Aplikacji Internetowych
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 8.
Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
  ELEMENTY JĘZYKA JAVA komentarze w Javie, słowa kluczowe i operatory, proste typy danych, tablice, podstawowy zestaw instrukcji.
OCPJP Inner classes.
Dobry kod OO Jeżeli zapytamy statystycznego programistę z czym kojarzy mu się dobry kod OO to najprawdopodobniej będzie mówił o wzorcach projektowych.
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Responsywne aplikacje w Windows 8 i.NET 4.5 Jakub Binkowski.
Wydział Elektroniki Kierunek: AiR Zaawansowane metody programowania Wykład 5.
Entity Framework worth it or not?
Bartosz Michalik Jakub Jurkiewicz Sponsor główny: Eclipse IDE Zanim rozpoczniemy naszą pracę...
OOP, Desing Patterns … and more Michał Dubel
Paweł Starzyk Obiektowe metody projektowania systemów
Refactoring in eclipse Mąkosa Norbert Rospądek Bartłomiej.
Wykład 11 Aplikacje SDI PO11-1 / 22 Single Document Interface 1.Klasy aplikacji SDI 2.Menu systemowe aplikacji SDI 3.Serializacja 4.Tworzenie widoku 5.Tworzenie.
Typy i metody sparametryzowane (generics) (c) Krzysztof Barteczko 2014.
do programowania obiektowego w języku Groovy
Oracle Data Modeler (4.1). Aplikacja Wymagania biznesowe Tworzenie systemu informacyjnego Procesy Informacje Analiza Projektowanie Browser: Hollywood.
InMoST, Java – przykładowa aplikacja Bartosz.Michalik
Innowacyjne metody wytwarzania oprogramowania Wprowadzenie do refaktoryzacji Bartosz Walter.
Rachunek Lambda + Obiektowość część 1. – motywacja
Programowanie Obiektowe – Wykład 6
Refaktoryzacja I dług techniczny
Dzisiejsze zajęcia będą wyjątkowe…
Kurs języka C++ – wykład 3 ( )
(według:
Akademia C# - Lab2 Zmienne, instrukcje warunkowe, pętle, debugger,
(c) Krzysztof Barteczko 2014
Iteracyjno-rozwojowy cykl oprogramowania 3
Power Query vs Tableau Prep
Refaktoryzacja czyli odświeżanie kodu
Zapis prezentacji:

Refaktoryzacja „Any fool can write a code that computer understands. Good programers write code that human can understand” – Martin Fowler

Refaktoryzacja – podstawowe zasady Zmiana wewnętrznej struktury kodu Brak zmiany zachowania Składa się z serii niewielkich transformacji Czyści kod minimalizują ryzyko wstawienia bug-a

Po co ? Aby ułatwić wprowadzanie zmian Aby poprawić konstrukcję Aby lepiej poznać kod Aby praca z kodem była przyjemna

Zapachy kodu Duplicated code Long methods Large class Long parameter List Feature Envy Switch Statements Lazy Class Comments i parę innych

Refaktoring Zidentyfikuj problem Napisz testy Przeprowadź refaktoring Sprawdź działanie

Metody Extract method void printOwing(double amount) { printBanner(); //print details System.out.println ("name:" + _name); System.out.println ("amount" + amount); } void printOwing(double amount) { printBanner(); printDetails(amount); } void printDetails (double amount) { System.out.println ("name:" + _name); System.out.println ("amount" + amount) }

Metody Inline Method int getRating() { return (moreThanFiveLateDeliveries()) ? 2 : 1; } boolean moreThanFiveLateDeliveries() { return _numberOfLateDeliveries > 5; } int getRating() { return (_numberOfLateDeliveries > 5) ? 2 : 1; }

Metody Replace Temp with Query double basePrice = _quantity * _itemPrice; if (basePrice > 1000) return basePrice * 0.95; else return basePrice * 0.98; if (basePrice() > 1000) return basePrice() * 0.95; else return basePrice() * 0.98;... double basePrice() { return _quantity * _itemPrice; }

Metody cd. Inline Temp Introduce Explaining Variable Remove Assignments to Parameters Replace Method with Method Object Substitute Algorithm

Pomiędzy obiektami Move method

Pomiędzy obiektami Extract Class

Pomiędzy obiektami Hide Delegate

Pomiędzy obiektami Move field Inline Class Remove Middle Man – odwrotność Hide Delegate Introduce Foreign Method Introduce Local Extension

Organizacja danych Replace Data with Object

Organizacja danych Replace Array with Object String[] row = new String[3]; row [0] = "Liverpool"; row [1] = "15"; Performance row = new Performance(); row.setName("Liverpool"); row.setWins("15");

Organizacja danych Duplicate Observed Data

Organizacja danych Encapsulate Collection

Organizacja danych Replace Type Code with Strategy

Organizacja danych Self Encapsulate Field Change Value to Reference Change Reference To Value Replace Magic Number with Symbolic Constant Encapsulate Field Replace Type Code with Class

Upraszczanie wyrażeń Consolidate Duplicate Conditional Fragment if (isSpecialDeal()) { total = price * 0.95; send(); } else { total = price * 0.98; send(); } if (isSpecialDeal()) total = price * 0.95; else total = price * 0.98; send();

Upraszczanie wyrażeń Replace Conditional With Polymorphism double getSpeed() { switch (_type) { case EUROPEAN: return getBaseSpeed(); case AFRICAN: return getBaseSpeed() - getLoadFactor() * _numberOfCoconuts; case NORWEGIAN_BLUE: return (_isNailed) ? 0 : getBaseSpeed(_voltage); } throw new RuntimeException ("Should be unreachable"); }

Upraszczanie Wyrażeń Inroduce Null Object if (customer == null) plan = BillingPlan.basic(); else plan = customer.getPlan();

Upraszczenie wyrażeń Introduce Assertion Remove Control Flag Consolidate Conditional Expression Decompose Conditional

Uproszczenie wywołań Rename Method

Uproszczenie wywołań Parametrize Method

Upraszczanie wywołań Add Parameter Remove Parameter Replace Parameter with Explicit Method Replace Parameter with Method Replace Error Code with Exception Replace Exception With Test

Dziedziczenie Pull Up Field

Dziedziczenie Push Down Method

Dziedziczenie Extract Superclass

Dziedziczenie Form Template Method

Dziedziczenie Pull Up Method Pull Up Constructor Body Extract Subclass Push Down Field Extract Interface Collapse Hierarchy Replace Inheritance with Delegation

Refaktoring baz danych Ewolucja schematu Zapachy bazodanowe Kolumny i tabele z więcej niż jednym przeznaczeniem Nadmiarowe dane Zbyt dużo kolumn „Inteligentne” kolumy