Metodyki zwinne wytwarzania oprogramowania



Podobne dokumenty
Metodyki zwinne wytwarzania oprogramowania

Programowanie obiektowe

Programowanie obiektowe

Język ludzki kod maszynowy

Programowanie obiektowe

Programowanie obiektowe

Programowanie obiektowe i zdarzeniowe

Java: interfejsy i klasy wewnętrzne

Polimorfizm. dr Jarosław Skaruz

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Testowanie oprogramowania

Plik pobrano z Tytuł: Wzorce projektowe, cz. 2 Strategy Ostatnia aktualizacja:

Wprowadzenie do metodologii modelowania systemów informacyjnych. Strategia (1) Strategia (2) Etapy Ŝycia systemu informacyjnego

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

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

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Zaawansowane programowanie w C++ (PCP)

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

Wskazówki projektowe. Programowanie Obiektowe Mateusz Cicheński

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

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Zaawansowane programowanie w C++ (PCP)

Wprowadzenie do szablonów klas

Co nie powinno być umieszczane w plikach nagłówkowych:

Problem Próby rozwiązania Maszyna stanów Inne zastosowania Podsumowanie. Maszyny stanów. Programowanie gier bez Unity, cz. 3.

Wykład 7 Abstrakcyjne typy danych słownik (lista symboli)

SOLIDnie śmierdzący kod.

C++ - [4-7] Polimorfizm

Szablony funkcji i szablony klas

Microsoft IT Academy kurs programowania

Przykład -

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

Wprowadzenie do zasad SOLID - czyli jak pisać SOLIDny kod

Programowanie obiektowe

3.1. Obliczanie obwodu koła.

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

Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

Wprowadzenie do szablonów szablony funkcji

Abstract Factory (fabryka abstrakcyjna)

Wprowadzenie do szablonów szablony funkcji

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

Logger. Następnie w klasie Bootstrapper muimy zarejestrować nasz nowy logger:

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

Programowanie - instrukcje sterujące

PWSG Ćwiczenia 12. Wszystkie ukończone zadania należy wysłać na adres: lub

Programowanie bez fabryki. Po co używać wzorca fabryki?

Zaawansowane programowanie w C++ (PCP)

Procesowa specyfikacja systemów IT

C++ Przeładowanie operatorów i wzorce w klasach

Programowanie Zespołowe

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

MODELE CYKLU ŻYCIA OPROGRAMOWANIA (1) Model kaskadowy (często stosowany w praktyce do projektów o niewielkiej złożonoś

Języki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk. tel: Konsultacje: piątek:

Programowanie w środowiskach graficznych. Wykład 3 Język C#

Wykład 7: Pakiety i Interfejsy

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Wzorce projektowe. Wstęp

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C

Klasy generyczne. ZbiórLiczb. ZbiórCzegokolwiek. Zbiór

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Ekspert radzi. mechanizm w enova, umożliwiający wskazanie domyślnej drukarki dla danego stanowiska i wydruku. Strona 1 z 8. Ekspert radzi.

Podstawy wykorzystania bibliotek DLL w skryptach oprogramowania InTouch

1 Definiowanie prostych klas

Ilustracja metody Monte Carlo do obliczania pola obszaru D zawartego w kwadracie [a, b] [a, b].

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Praktyka Programowania

Języki i metody programowania Java Lab2 podejście obiektowe

Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid

XII. Warunek wielokrotnego wyboru switch... case

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

Klasy abstrakcyjne i interfejsy

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

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

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com

Tworzenie aplikacji rozproszonej w Sun RPC

Zasady organizacji projektów informatycznych

Programowanie obiektowe

1 Podstawy c++ w pigułce.

Wzorce projektowe. dr inż. Marcin Pietroo

Dziedziczenie. » Dodawanie nowych elementów klasy (składowych funkcyjnych, danych składowych)» Modyfikacje odziedziczonych składowych funkcyjnych

INŻYNIERIA OPROGRAMOWANIA. laboratorium

Podstawy programowania obiektowego

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Wywoływanie metod zdalnych

Programowanie obiektowe

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Architektura Systemu. Architektura systemu umożliwia kontrolowanie iteracyjnego i przyrostowego procesu tworzenia systemu.

Klasy i obiekty cz II

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

Technologie cyfrowe semestr letni 2018/2019

Projekt architektury systemów informatycznych Uniwersytetu Warszawskiego w oparciu o metodykę TOGAF. Tomasz Turski

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Transkrypt:

Metodyki zwinne wytwarzania oprogramowania Wykład 7 Marcin Młotkowski 25 listopada 2014

Plan wykładu 1 Zasada pojedynczej odpowiedzialności 2 Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 2 / 32

Single Responsibility Principle (SRP) Definicja Za chwilę... Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 3 / 32

Przykład Zasada pojedynczej odpowiedzialności Prostokąt +rysowanie() +pole(): double Aplikacja graficzna Geomertia obliczeniowa Interfejs graficzny Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 4 / 32

Co robi klasa Prostokąt Geometria Modeluje matematyczny obiekt prostokąt, dzięki czemu może obliczyć jego pole. Grafika Wizualizuje prostokąt za pomocą interfejsu graficznego. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 5 / 32

Zmiana projektu Zmiana interfejsu graficznego z 2D na 3D. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 6 / 32

Zmiana projektu Zmiana interfejsu graficznego z 2D na 3D. Zmiana wymaga Ponowna implementacja metody rysowanie() Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 6 / 32

Zmiana projektu Zmiana interfejsu graficznego z 2D na 3D. Zmiana wymaga Ponowna implementacja metody rysowanie() Konieczne Skompilowanie, przetestowanie i wdrożenie Aplikacji geometrycznej, czy przypadkiem coś się nie zmieniło. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 6 / 32

Zmiana projektu ProstokątGeometryczny +pole(): double Aplikacja graficzna Interfejs graficzny Prostokąt Geomertia obliczeniowa +rysowanie() Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 7 / 32

Obserwacje Zmiana projektu wymusiła zmiany tylko części klasy, tj. części graficznej. Może być druga przyczyna zmiany projektu: zmiana części geometrycznej. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 8 / 32

Zasada pojedynczej odpowiedzialności Definicja Żadna klasa nie może być modyfikowana z więcej niż jednego powodu. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 9 / 32

Inny przykład Klasa Pracownik + ObliczPensję(): decimal + Zapisz() + EdycjaGUI() Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 10 / 32

Plan wykładu 1 Zasada pojedynczej odpowiedzialności 2 Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 11 / 32

Tydzień temu na wykładzie: Sztywność Drobna zmiana w specyfikacji powoduje kaskadowe zmiany Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 12 / 32

Cel Zasada pojedynczej odpowiedzialności Chcemy aby: rozbudowa systemu wymagała tylko dodawania kodu, a nie jego modyfikacji. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 13 / 32

(open close principle, OCP) Definicja Składniki oprogramowania (klasy, moduły, procedury etc.) muszą być otwarte na rozbudowę, ale zamknięte na dla modyfikacji. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 14 / 32

Objaśnienia Otwarte na rozszerzenia łatwo rozbudować funkcjonalność modułu Zamknięte na modyfikacje Zmiany nie mogą skutkować modyfikacją kodu źródłowego, ani nawet zmianami na poziomie binariów. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 15 / 32

Przykład niezgodności z zasadą OCP: architektura klient-serwer Dokument DotPrinter Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 16 / 32

Kod źródłowy public class DotPrinter {... } public class Dokument { } public void drukuj(dotprinter prn) {... } Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 17 / 32

Kod źródłowy public class DotPrinter {... } public class Dokument { } public void drukuj(dotprinter prn) {... } Wymiana sprzętu public class LaserPrinter {... } Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 17 / 32

Rozwiązanie nr 1: wzorzec projektowy Strategia Dokument <<interface>> ClientInterface DotPrinter Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 18 / 32

Implementacja public interface Printer {... } public class DotPrinter : Printer {... } public class Dokument { } public void drukuj(printer prn) {... } Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 19 / 32

Rozwiązanie nr 2: wzorzec projektowy Template Method Dokument Drukarka DotPrinter Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 20 / 32

Inny przykład złego projektu: figury geometryczne enum ShapeType { circle, square }; typedef struct Shape *ShapePointer; void DrawAllShapes(ShapePointer list[], int n) { int i; for(i = 0; i < n; i++) { struct Shape *s = list[i]; switch (s->itstype) { case square: DrawSquare( (struct Square*)s); break; case circle: DrawCircle( (struct Circle*)s); break; } } }

Ocena takiego systemu Dodanie nowej figury, np. trójkąta: wyszukanie wszystkich warunków sprawdzających typ figury; konieczność ponownej kompilacji modułu i wszystkich modułów zależnych; konieczność ponownej instalacji bibliotek. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 22 / 32

Wady Zasada pojedynczej odpowiedzialności Sztywność Dodanie nowego elementu do wyliczenia wymusza serię działań: kompilacja, testowanie, instalacja. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 23 / 32

Wady Zasada pojedynczej odpowiedzialności Sztywność Dodanie nowego elementu do wyliczenia wymusza serię działań: kompilacja, testowanie, instalacja. Wrażliwość Rozszerzenie implementacji wymaga starannego przejrzenia kodu w poszukiwaniu switch--case i if--else badających typ figury. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 23 / 32

Dobre rozwiązanie public interface Shape { void Draw(); } public class Square : Shape { public void Draw() {... } } public class Circle : Shape { public void Draw() {... } } Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 24 / 32

Zgodność z zasadą Otwartość Łatwość zmian w zakresie dodawania nowych figur. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 25 / 32

Zgodność z zasadą Otwartość Łatwość zmian w zakresie dodawania nowych figur. Zamkniętość Nie ma konieczności modyfikacji istniejącego kodu przy rozbudowie. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 25 / 32

A jakie są wady Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 26 / 32

A jakie są wady Trzeba przewidzieć kierunek zmian projektu. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 26 / 32

Kiedy ten projekt zawiedzie Shape shapes[]; foreach (Shape sh in shapes) sh.draw(); Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 27 / 32

Kiedy ten projekt zawiedzie Shape shapes[]; foreach (Shape sh in shapes) sh.draw(); Dodatkowe założenie Chcemy, aby najpierw były kwadraty, a potem okręgi. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 27 / 32

Kiedy ten projekt zawiedzie Shape shapes[]; foreach (Shape sh in shapes) sh.draw(); Dodatkowe założenie Chcemy, aby najpierw były kwadraty, a potem okręgi. Smutny wniosek Nie da się zaprojektować tak system, aby był otwarty na dowolne zmiany. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 27 / 32

Próba poprawienia public interface Shape : IComparable { void Draw(); }... shapes.sort(); foreach (Shape sh in shapes) sh.draw(); Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 28 / 32

Przypomnienie public interface IComparable { int CompareTo(Object obj) } Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 29 / 32

Próba implemetacji public class circle : Shape { public int CompareTo(object o) { if (o is Square) return -1; else return 0; } } Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 30 / 32

Ocena implementacji Czy ta implementacja spełnia warunek ocp? Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 31 / 32

Przewidywanie kierunku zmian szybkie wydania; Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 32 / 32

Przewidywanie kierunku zmian szybkie wydania; szybkia prezentacja; Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 32 / 32

Przewidywanie kierunku zmian szybkie wydania; szybkia prezentacja; szybkie uzyskanie informacji zwrotnej od klienta. Marcin Młotkowski Metodyki zwinne wytwarzania oprogramowania 32 / 32