SOLIDnie śmierdzący kod. http://www.benedykt.net

Podobne dokumenty
Programowanie Zespołowe

Wprowadzenie do zasad SOLID - czyli jak pisać SOLIDny kod

Metodyki zwinne wytwarzania oprogramowania

Czym są zasady SOLID?

Technologie cyfrowe semestr letni 2018/2019

Metodyki zwinne wytwarzania oprogramowania

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2017

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

XML extensible Markup Language. część 5

Funkcje i instrukcje języka JavaScript

Wskazówki projektowe. Programowanie Obiektowe Mateusz Cicheński

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Zaawansowane programowanie w języku C++ Programowanie obiektowe

TEMAT : KLASY DZIEDZICZENIE

Podstawy programowania obiektowego

Wykład 4. Projektowanie. MIS n Inżynieria oprogramowania Październik 2014

Operatory cd. Relacyjne: ==!= < > <= >= bool b; int i =10, j =20; dzielenie całkowitych wynik jest całkowity! Łączenie tekstu: + string s = "Ala ma ";

JAVA W SUPER EXPRESOWEJ PIGUŁCE

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Microsoft IT Academy kurs programowania

Różne odmiany budowniczego. Po co używać wzorca budowniczy? Kiedy używać budowniczego

Język ludzki kod maszynowy

Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI

Ćwiczenie 1 Galeria zdjęć

Programowanie - wykład 4

Program szkolenia: Zaawansowane programowanie w C++

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Programowanie MorphX Ax

Optimizing Programs with Intended Semantics

Programowanie obiektowe i zdarzeniowe

Ćwiczenie 22 Dynamiczne wczytywanie tekstu z pliku.txt

Programowanie obiektowe

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2015

Java: interfejsy i klasy wewnętrzne

W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby

10. Programowanie obiektowe w PHP5

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

KOTLIN. Język programowania dla Androida

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

DYNAMICZNE PRZYDZIELANIE PAMIECI

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Programowanie obiektowe

Wstęp do Programowania 2

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Programowanie obiektowe

1 Wielokrotne powtarzanie tych samych operacji

Wskaźniki. Informatyka

Podstawy i języki programowania

Przypomnienie o klasach i obiektach

Projektowanie obiektowe oprogramowania Wykład 4 - SOLID GRASP Wiktor Zychla 2012

Zasady projektowania obiektowego

Dobry start do profesjonalnego programowania w C++ dla. początkujących programistów

Technologie cyfrowe semestr letni 2018/2019

PHP: bloki kodu, tablice, obiekty i formularze

1 Podstawy c++ w pigułce.

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Języki i metodyka programowania. Język C# pętle, sterowanie, wyjątki

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Podstawy i języki programowania

Podstawy programowania III

Rozdział 4 KLASY, OBIEKTY, METODY

Baza danych do przechowywania użytkowników

Wstęp. Ale po co? Implementacja

Programowanie zorientowane obiektowo. Mateusz Kołecki

Informatyka I. Wykład 3. Sterowanie wykonaniem programu. Instrukcje warunkowe Instrukcje pętli. Dr inż. Andrzej Czerepicki

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

Podstawy programowania obiektowego

Programowanie obiektowe

Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.

Program szkolenia: Wzorce projektowe w C++

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

3. Instrukcje warunkowe

Dziedziczenie. dr Jarosław Skaruz

do MATLABa programowanie WYKŁAD Piotr Ciskowski

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Diagramy czynności Na podstawie UML 2.0 Tutorial

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

Zaawansowane programowanie w C++ (PCP)

Wstęp do programowania obiektowego. Wykład 1 Algorytmy i paradygmaty Podstawowe pojęcia PO

Aplikacje w środowisku Java

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Wstęp do Programowania potok funkcyjny

Języki i metody programowania Java Lab1 Zofia Kruczkiewicz

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

Programowanie - instrukcje sterujące

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Dokumentacja do API Javy.

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Python wstęp. Michał Bereta

NAJLEPSZE STRATEGIE SKUTECZNYCH PROGRAMISTÓW. TECHNIKI PRACY Z KODEM KOD: NSKOD

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Programowanie obiektowe

Transkrypt:

SOLIDnie śmierdzący kod http://www.benedykt.net abenedykt

produktywność skuteczność pracy w czasie 120% 100% 80% 60% 40% 20% 0%

ile kosztuje pracownik 5 programistów x 2000PLN BRUTTO x 24 miesiące = 240 000 PLN 2000PLN Brutto = Kwota netto Rodzaj zatrudnienia 1420 zł umowa o pracę 1480 zł umowa zlecenie 1700 zł umowa zlecenie - student do 26 lat 1800 zł umowa o dzieło 1639 zł faktura Vat

co można kupić za 240 000? 1.8 TFSI, 120KM 116 200 PLN BRUTTO 3.0 TDI quattro 245KM 215 600 PLN BRUTTO

co można kupić za 240 000? ~240 000 PLN 520i 6-man R4 / 1 997 135 (184) 8,9 / 5,5 / 6,8 157 141 382 173 900 535i 6-man R6 / 2 979 225 (306) 11,1 / 6,3 / 8,1 188 194 634 239 400

produktywność skuteczność pracy w czasie 120% 100% 80% 60% 40% 20% 0%

smrodki

źródło smrodu var obj = new SomeClass();

panaceum Fabryka Rozwiązuje problem tworzenia -> zadanie fabryki to stworzenie obiektu i nic ponad to, Single Responsibility Principle

jesteśmy jedno zadaniowi Ludzie są tak skonstruowani że najlepiej robią jedną rzecz w danej chwili Procesory robią jedną rzecz w jednej chwili 1 core 1 akumulator 1 obliczenie w danej chwili

źródło smrodu if( val<0 && val < 1000 (person== kierownik && val>0 && val <= 5000) podobne smrodki: for, foreach, while z operacjami break lub continue

panaceum 1 bool ValueCanBeAcceptedAutomaticly(){ if(valuecanbeacceptedautomaticly){.. return ValueInRangeForEmployee ValueInRangeForManager; } bool ValueInRangeForManager(){ reutrn person== kierownik && val>0 && val <= 5000; }

demo demo refaktoryzacja if-a

panaceum 2 zamiast if(savetoxml){ //zapisz do xml } else { // zapisz do txt } var filesaver= Factory.Get(fileFormat); filesaver.save(data); Fabryka zwraca odpowiedni obiekt dla zadanego formatu pliku.

demo demo fabryka zamiast if

metoda pomiaru : ZŁOŻONOŚĆ CYLKOMATYCZNA Idealna złożoność to złożoność = 1 Przytaczane są poniższe wartości złożoności cyklomatycznej: od 1 do 10 kod dość prosty stwarzający nieznaczne ryzyko od 11 do 20 kod złożony powodujący ryzyko na średnim poziomie od 21 do 50 kod bardzo złożony związany z wysokim ryzykiem powyżej 50 kod niestabilny grożący bardzo wysokim poziomem ryzyka. Źródło: wikipedia (http://pl.wikipedia.org/wiki/z%c5%82o%c5%bcono%c5%9b%c4%87_cyklomatyczna)

źródło smrodu var a = 100; var b = 100; a = Add(a, ref b); return a + b;

źródło smrodu var a = 100; var b = 100; a = Add(a, ref b); return a + b; function int Add(int a, ref int b){ b = a + b; return b; }

demo demo out i ref

źródło smrodu Długie metody, bardzo długie metody które mają dużo kodu, Bardzo dużo kodu, Nieczytelnego Ciągnącego się kodu Z wieloma linijkami Funkcjami Metodami Zmiennymi Przełącznikami I innymi długimi niepotrzebnie zaciemniającymi Arfetaktami rzekomo pokazującymi biegłość i przebiegłość żegomego super programisty Który myśli że jak wrzuci wyszstko do jednego wielkiego pliku A najlepiej do jednej długiej linii to jest mistrzem świata. Wszak było trudno napisać to niech będzie trudno zrozumieć

panaceum SINGLE RESPONSIBILITY PRINCIPLE

źródło smrodu Kopiowanie kodu Klasa A zależy od Klasy B, Klasa B zależy od klasy A nie można użyć klasy A w innym projekcie (związane przez operator new) zatem kopiujemy kod To powoduje że błędy są powielane, błąd rozwiązany w klasie A w jednym projekcie nie oznacza rozwiązania go w projekcie B

panaceum DEPENDENCY INVERSION PRINCIPLE Klasy zależą od abstrakcji, Od interfejsów i ewentualnie klas abstrakcyjnych

źródło smrodu Nieprzewidywalny kod Niepotrzebne, źle użyte dziedziczenie robi więcej złego niż dobrego. Jeśli klasa nie robi tego czego się spodziewamy po niej to. if( obj is XmlWriter){. } else if(obj is TxtWriter){

demo demo kwadrat i prostokąt

panaceum LISKOV SUBSTITUTION PRINCIPLE Obiekty w programie powinny być wymienialne na instancje ich podtypów bez zmiany poprawności działania programu

S O L I D ingle responsibility principle pen/close principle iskov substituton principle nterface segregation principle ependancy inversion principle

SOLID nie = śmierdzący kod

SOLID = nie śmierdzący kod

panaceum Foto:Henryka Pakuła

droga na skróty T D D est riven evelopment

dziękuję więcej na http://www.benedykt.net