Inżynieria oprogramowania

Podobne dokumenty
UML a kod. C++, Java i C#

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Inżynieria oprogramowania

Inżynieria oprogramowania

Inżynieria oprogramowania I

Inżynieria oprogramowania

Specyfikacja klas. Opis Lista pól Lista metod Ograniczenia. Szacowana lub dokładna liczba obiektów tej klasy Trwałość

Ogólne określenie wymagań. Ogólny projekt. Budowa systemu. Ocena systemu. Nie. Tak. System poprawny. Wdrożenie. Określenie.

Dziedzina problemu. System. Model. Uzytkownik. Przewoznik. Zleceniodawca Wydawanie opinii. Zarzadzanie pojazdami

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

UML w Visual Studio. Michał Ciećwierz

Zagadnienia (1/3) Data-flow diagramy przepływów danych ERD diagramy związków encji Diagramy obiektowe w UML (ang. Unified Modeling Language)

Podstawy programowania III WYKŁAD 4

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl

Podstawy modelowania programów Kod przedmiotu

Zasady organizacji projektów informatycznych

Co to jest jest oprogramowanie? 8. Co to jest inżynieria oprogramowania? 9. Jaka jest różnica pomiędzy inżynierią oprogramowania a informatyką?

Cel wykładu. Literatura. Wyższa Szkoła Menedżerska w Legnicy. Modelowanie wymagań Wykład 2

Etapy życia oprogramowania

Wykład 1 Inżynieria Oprogramowania

PRZEWODNIK PO PRZEDMIOCIE

Nazwa przedmiotu: MODELOWANIE I ANALIZA SYSTEMÓW INFORMATYCZNYCH. Modeling and analysis of computer systems Forma studiów: Stacjonarne

Etapy życia oprogramowania. Modele cyklu życia projektu. Etapy życia oprogramowania. Etapy życia oprogramowania

INŻYNIERIA OPROGRAMOWANIA. laboratorium

WPROWADZENIE DO UML-a

PRZEWODNIK PO PRZEDMIOCIE

Analiza i projektowanie obiektowe 2016/2017. Wykład 10: Tworzenie projektowego diagramu klas

PRZEWODNIK PO PRZEDMIOCIE

Podstawy Programowania Obiektowego

Analiza i programowanie obiektowe 2016/2017. Wykład 6: Projektowanie obiektowe: diagramy interakcji

Inżynieria oprogramowania. Jan Magott

Klasy abstrakcyjne i interfejsy

Projekt systemu informatycznego

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

Laboratorium modelowania oprogramowania w języku UML. Ćwiczenie 2 Ćwiczenia w narzędziu CASE diagram klas. Materiały dla nauczyciela

Egzamin / zaliczenie na ocenę*

PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH S Y L A B U S

KARTA MODUŁU KSZTAŁCENIA

12) Wadą modelu kaskadowego jest: Zagadnienia obowiązujące na egzaminie z inżynierii oprogramowania: 13) Wadą modelu opartego na prototypowaniu jest:

KARTA PRZEDMIOTU. 1. Informacje ogólne. 2. Ogólna charakterystyka przedmiotu. Inżynieria oprogramowania, C12

Analiza i projektowanie obiektowe w UML Kod przedmiotu

Podstawy projektowania systemów komputerowych

Diagramy czynności Na podstawie UML 2.0 Tutorial

Błędy procesu tworzenia oprogramowania (Badania firmy Rational Software Corporation)

Laboratorium 5 - Projektowanie programów zorientowanych obiektowo. Indywidualny projekt programistyczny

Programowanie obiektowe

Inżynieria Oprogramowania. Inżynieria Oprogramowania 1/36

In ż ynieria oprogramowania wykład II Modele i fazy cyklu życia oprogramowania


Laboratorium modelowania oprogramowania w języku UML. Ćwiczenie 1 Wprowadzenie do narzędzia CASE. Materiały dla nauczyciela

Wzorce projektowe i refaktoryzacja

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

Laboratorium modelowania oprogramowania w języku UML. Ćwiczenie 4 Ćwiczenia w narzędziu CASE diagram czynności. Materiały dla nauczyciela

Modelowanie i analiza systemów informatycznych

Uniwersytet w Białymstoku Wydział Ekonomiczno-Informatyczny w Wilnie SYLLABUS na rok akademicki 2012/2013

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

Projektowanie oprogramowania cd. Projektowanie oprogramowania cd. 1/34

Zalety projektowania obiektowego

Diagramy klas. dr Jarosław Skaruz

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

Narzędzia CASE dla.net. Łukasz Popiel

KARTA PRZEDMIOTU. 1) Nazwa przedmiotu: INŻYNIERIA SYSTEMÓW I ANALIZA SYSTEMOWA. 2) Kod przedmiotu: ROZ-L3-20

PRZEWODNIK PO PRZEDMIOCIE

Spis treúci. 1. Wprowadzenie... 13

Programowanie obiektowe - 1.

Laboratorium modelowania oprogramowania w języku UML. Ćwiczenie 5 Ćwiczenia w narzędziu CASE diagram przypadków uŝycia. Materiały dla nauczyciela

Modelowanie obiektowe - Ćw. 3.

Programowanie zespołowe

Technologie informacyjne - wykład 12 -

Projektowanie systemów informatycznych. wykład 6

Laboratorium modelowania oprogramowania w języku UML. Ćwiczenie 4 Ćwiczenia w narzędziu CASE diagram czynności. Materiały dla studenta

PRZEWODNIK PO PRZEDMIOCIE

Zakres wykładu. Podstawy InŜynierii Oprogramowania

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Michał Adamczyk. Język UML

Inżynieria oprogramowania II

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

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

Programowanie obiektowe 1 - opis przedmiotu

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA realizacja w roku akademickim 2016/17

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

Rok akademicki: 2014/2015 Kod: IEL s Punkty ECTS: 5. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

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

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Podstawy inżynierii oprogramowania

Techniki modelowania programów Kod przedmiotu

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2012/2013

SVN. 10 października Instalacja. Wchodzimy na stronę i pobieramy aplikację. Rysunek 1: Instalacja - krok 1

KARTA PRZEDMIOTU. 1. Informacje ogólne. 2. Ogólna charakterystyka przedmiotu. Projekt zespołowy D1_10

Procesowa specyfikacja systemów IT

Analiza i projektowanie aplikacji Java

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2012/2013. Przedmioty kierunkowe

Inżynieria oprogramowania

KARTA PRZEDMIOTU. Projekt zespołowy D1_10

Paweł Kurzawa, Delfina Kongo

Programowanie obiektowe

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

Kurs programowania. Wykład 12. Wojciech Macyna. 7 czerwca 2017

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

Transkrypt:

Politechnika Poznańska, Instytut Informatyki, Studia niestacjonarne Inżynieria oprogramowania część I dr inż. Bartłomiej Prędki Bartlomiej.Predki@cs.put.poznan.pl Pok. 124 CW, tel. 61665 2932 http://zajecia.predki.com Semestr letni 2014/2015

Literatura A. Jaszkiewicz, Inżynieria oprogramowania, Helion, Gliwice, 1997. B. Begier, Inżynieria oprogramowania problemy jakości, Wydawnictwo Politechniki Poznańskiej, Poznań, 1999. Janusz Górski (red.). Inżynieria oprogramowania w projekcie informatycznym. Mikom, Warszawa, 2000, wyd. II. G. Booch, J. Rambaugh, I. Jacobson, UML przewodnik użytkownika, WNT, Warszawa, 2000. C. Larman, UML i wzorce projektowe., Helion 2011 D. Hamlet, J. Maybee, Podstawy techniczne inżynierii oprogramowania, WNT 2003

Literatura S. Maguire, Niezawodność oprogramowania, Helion, Gliwice, 2002 E. Freeman, B. Bates, K. Sierra, Wzorce projektowe. Rusz głową!, Helion, 2010 Z. Szyjewski, Zarządzanie projektami informatycznymi, Placet 2001 K. Beck, M. Fowler, W. Opdyke, D. Roberts, Refaktoryzacja. Ulepszanie struktury istniejącego kodu, WNT 2006 E. Gamma, R. Helm, R. Johnson, J. Vlissides, Wzorce projektowe, WNT 2008

Rynek oprogramowania 2011 Świat 292.9 miliardów dolarów (42.6% Ameryka) Bez oprogramowania wytwarzanego na własne potrzeby Wzrost 6.6% rocznie + 125 miliardów euro dodatkowych usług W UE 60-70% oprogramowania jest wytwarzane w firmach, dla których nie jest to główną działalnością W 2016 ponad 396 mld dolarów

Rynek oprogramowania

Rynek oprogramowania

Rynek oprogramowania

Najwięksi gracze IBM Microsoft Oracle SAP

Trochę historii Lata 50-te Sprzęt o bardzo ograniczonych możliwościach Ograniczone zastosowania Małe programy Programy pisane często dla własnych potrzeb lub potrzeb dobrze znanych osób Dobrze wyspecyfikowane zadania

Rozwój technik wytwarzania oprogramowania Lata 60-te Profesjonalni programiści Nowe języki programowania COBOL, Fortran, Algol Sprzęt o dużo większych możliwościach, np. pamięć wirtualna Nowe zastosowania np. w biznesie Próba realizacji wielu dużych przedsięwzięć programistycznych

Kryzys oprogramowania Rozwój technik wytwarzania oprogramowania nie nadąża za rozwojem sprzętu komputerowego Czy kryzys oprogramowania trwa do dzisiaj? Nadal większość przedsięwzięć przekracza czas i/lub budżet Około 25% przedsięwzięć programistycznych nie jest kończona 90% firm przyznaje, że dość często zdarzają im się opóźnienia przedsięwzięć Powszechna akceptacja kiepskiej jakości oprogramowania (w pewnych obszarach)

Zależność osiągnięcia-oczekiwania w wytwarzaniu oprogramowania Efekty Oczekiwania Rzeczywiste osiągnięcia Czas

Przyczyny kryzysu oprogramowania Duża złożoność systemów informatycznych Złożoność, zmienność, nieadekwatność wymagań Niepowtarzalność poszczególnych przedsięwzięć Nieprzejrzystość procesu budowy oprogramowania Pozorna łatwość wytwarzania i modyfikowania oprogramowania Potrzeba kreatywności Czynnik ludzki Mało wymagający rynek Niedoskonałość narzędzi

Przykład - system dla PKW błędy po stronie klienta zbyt krótki czas na zrealizowanie prac brak oceny złożoności problemu i wymagań brak samokrytycyzmu błędy po stronie kontrahenta brak doświadczenia zbyt swobodne podejście

Początek inżynierii oprogramowania 1968 NATO Conference on Software Engineering

Podejście amatorskie a inżynierskie Co by tu wymyślić!? Do pracy.

Definicje inżynierii oprogramowania Duże systemy wymagające pracy wielu osób praca grupowa Wielowersyjność oprogramowania

Definicja inżynierii oprogramowania Wiedza techniczna, dotycząca wszystkich faz cyklu życia oprogramowania, której celem jest uzyskanie wysokiej jakości produktu - oprogramowania.

Jakość oprogramowania Użyteczność (usefulness) Niezawodność (reliability) Ergonomia (usability) Efektywność (efficiency) Łatwość konserwacji (maintability) Bezpieczeństwo użytkownika (user safety) Koszt?

Zakres inżynierii oprogramowania Wytwarzanie oprogramowania i innych produktów (np. dokumentacji) Zarządzanie wytwarzaniem oprogramowania

Plan wykładów I semestr Wprowadzenie i podstawowe modele cyklu życia oprogramowania Analiza/modelowanie systemów z wykorzystaniem języka UML, w tym elementy analizy wymagań UML jako narzędzie projektowania i dokumentowania oprogramowania Projektowanie oprogramowania Niezawodność oprogramowania Dokumentacja techniczna i użytkowa Narzędzia inżynierii oprogramowania

Zaliczenie Wykład jest zaliczany w trakcie testu na ostatnim wykładzie, czyli 27 kwietnia 2014 r.

Modele cyklu życia oprogramowania Uporządkowanie prac. Ustalenie kolejności prac. Planowanie i monitorowanie realizacji.

Programowanie odkrywcze Ogólne określenie wymagań Ogólny projekt Budowa systemu Ocena systemu Wdrożenie Tak System poprawny Nie

Model kaskadowy Określenie wymagań Projektowanie Implementacja Testowanie Konserwacja

Dodatkowe fazy w modelu kaskadowym

Ścisłe i elastyczne rozumienie modelu kaskadowego Określenie wymagań Projektowanie Implementacja Testowanie Konserwacja

Przykład elastycznego podejścia do modelu kaskadowego

Wady i zalety modelu kaskadowego (rozumianego ściśle) +Łatwość zarządzania planowanie i monitorowanie -Wysoki koszt błędów popełnionych we wstępnych fazach Koszt błędu w wymaganiach 100-1000 razy większy od kosztu błędu programistycznego! -Długa przerwa w kontaktach z klientem -Nie lubiany przez wykonawców

Prototypowanie Cel lepsze określenie wymagań Fazy: Ogólne określenie wymagań. Budowa prototypu. Weryfikacja prototypu przez klienta. Pełne określenie wymagań. Realizacja pełnego systemu zgodnie z modelem kaskadowym.

Sposoby budowy prototypu Prototyp musi być zbudowany szybko i niskim kosztem. Niepełna realizacja. Języki wysokiego poziomu. Wykorzystanie gotowych komponentów. Generatory interfejsu użytkownika. Szybkie programowanie (quick-and-dirty programming). Papier. Programowanie odkrywcze.

Wady i zalety prototypowania +Mniejsze ryzyko popełnienia kosztownych błędów we wczesnych fazach. +Możliwość szybkiej demonstracji prototypu i szkolenia użytkowników. -Koszt budowy prototypu, który może się nie zwrócić. -Możliwość nieporozumień z klientem.

Realizacja przyrostowa Określenie wymagań i wstępny projekt Wybór przyrostu - podzbioru funkcji Proces realizowany iteracyjnie Realizacja przyrostu Wdrożenie przyrostu

Wady i zalety realizacji przyrostowej + Możliwość wcześniejszego korzystania z pewnych funkcji systemu. + Skrócenie przerw w kontaktach z klientem. + Możliwość elastycznego reagowania na opóźnienia. -Kłopoty z integracją oddzielnie realizowanych modułów.

Realizacja przyrostowa Zalecana w większości lekkich (żwawych) metodyk np. w programowaniu ekstremalnym często małe przyrosty (kilka tygodni) Dobrze opisuje realizację wielu (zwłaszcza udanych) projektów wolnego oprogramowania (free/open source)

Wybór modelu do konkretnego przedsięwzięcia Duże przedsięwzięcia, np. > 6 miesiecy realizacja przyrostowa, mniejsze m. kaskadowy W lekkich metodykach także dla mniejszych przedsięwzięć Trudności w określeniu wymagań: nowatorski system z punktu widzenia klienta mała znajomość dziedziny problemu przez wykonawcę: Jeżeli tak, to prototypowanie

Unified Modeling Language - UML Obiektowa notacja graficzna służąca do modelowania, projektowania i specyfikacji oprogramowania Następca licznych notacji obiektowych z lat 80- tych i 90-tych Powstał na bazie metod Boocha, Rumbaugh (OMT) i Jacobsona stworzony przez tych właśnie autorów

Unified Modeling Language - UML Standard Object Management Group (OMG) Wspierany przez firmę Rational De facto standard przemysłowy Pierwsza wersja w 1997 Notacja, a nie metodyka

Analiza/modelowanie Opracowanie logicznego modelu dziedziny problemu Cele: Lepsze zrozumienie dziedziny problemu i lepsze określenie wymagań Podstawa przyszłego projektu

Dziedzina problemu System Dziedzina problemu W pw p Model

Dlaczego notacje graficzne w modelowaniu Ogromny wzrost precyzji Ogromna poprawa efektywności Zapis modelu Analiza modelu Wprowadzanie zmian Łatwe przejście do projektowania

Diagramy przypadków użycia use case diagrams modelowanie wymagań Użytkownik, klasa użytkowników, system zewnętrzny (ang. actor) Grupa użytkowników wykorzystujących system w podobny sposób Przypadek użycia, wymaganie funkcjonalne, funkcja (ang. use case)

Korzystanie z funkcji (ang. actor flow)

Związki używania (use) i rozszerzania (extend)

Przykład i związek generalizacji (generalization)

Diagramy klas Model statyczny

Obiekt Składowa dziedziny problemu posiadająca: tożsamość dane ją opisujące zachowanie Obiekty wewnętrzne systemu, dane np. wektor, plik, raport, drzewo binarne, okno, dokument elektroniczny Obiekty zewnętrzne, metadane osoba, samochód, dokument papierowy, projekt

Klasa Wzorzec, uogólnienie grupy obiektów opisywanych za pomocą podobnych danych i mających podobne zachowanie Samochody

Związek generalizacji-specjalizacji Pojazd Samochód ciężarowy Samochód W p Samochód osobowy

Wiele generalizacji

Związek klas Uogólnienie możliwych powiązań obiektów

Krotności związków 0..1 zero lub jeden, opcjonalny 1 dokładnie jeden, wymagany * - dowolna liczba 1..* - jeden lub więcej N..M od N do M N dokładnie N

Przykłady

Opisy związków Rola Nazwa

Różne związki pomiędzy tymi samymi klasami

Związek pomiędzy obiektami tej samej klasy

Ograniczenia dotyczące związków

Związek kompozycji

Przykład - giełda usług przewozowych

Przykład grafika wektorowa

Przykład czasopismo naukowe

Diagramy stanów Model dynamiczny Zastosowania: Modelowanie zmian stanów (grup) obiektów Modelowanie reakcja na zdarzenia Modelowanie algorytmów

Zdarzenie Zjawisko, które zachodzi w pewnym punkcie czasu, np.: odjazd pociągu do Gdańska, wprowadzenie danych, wybranie polecenia z menu, przekroczenie temperatury 50 C.

Zdarzenia Zdarzenie zewnętrzne zachodzi poza systemem, np.: wprowadzenie danych, wybranie polecenia z menu, przerwanie przez użytkownika wykonywania operacji. Zdarzenie wewnętrzne zachodzi w ramach systemu, np.: zakończenie wykonywania metody, błąd arytmetyczny, przekroczenie czasu.

Stan Okres czasu ograniczony przez dwa zdarzenia System (fragment systemu) znajdując się w różnych stanach reaguje w sposób jakościowo różny na zachodzące zdarzenia. (Stan artykułu w czasopiśmie naukowym)

Stany początkowy i końcowy Początkowy Końcowy

Przejście Zmiana stanu w wyniku zdarzenia Może być obwarowane warunkami Zachodzi natychmiastowo (w przybliżeniu) Zdarzenia Warunek

Akcja Czynność wykonywana (w przybliżeniu) natychmiastowo w momencie zajścia zdarzenia

Czynność Działanie wykonywane w czasie kiedy system jest w pewnym stanie Może zostać przerwana w momencie zajścia zdarzenia, które powoduje wyjście ze stanu Jeżeli kończy się samoczynnie, to generuje zdarzenie, które powoduje przejście do innego stanu.

Akcje wejściowe, wyjściowe i wewnętrzne =

Stan złożony

Przykład stany artykułu

Przykład zaznaczanie i przesuwanie obiektów w programie graficznym

Diagramy sekwencji Przepływ komunikatów pomiędzy elementami dziedziny problemu

Obiekt Lina życia Czas Nazwa obiektu:nazwa klasy : Osoba - nieokreślony obiekt klasy Osoba, Jan Nowak : Osoba - obiekt Jan Nowak klasy Osoba, Jan Nowak : - obiekt Jan Nowak nieokreślonej klasy.

Komunikaty Synchroniczny Asynchroniczny

Przykład korzystanie z bankomatu

Specyfikacja modelu UML jest językiem graficznym Na diagramach można umieszczać szereg dodatkowych informacji ograniczenia, stereotypy, komentarze W praktyce diagramy często wspiera się dodatkową specyfikacją wspiera to szereg narzędzi CASE

Specyfikacja klas Opis Lista pól Lista metod Ograniczenia Np. Wzrost > 0 Płaca minimalna < Płaca maksymalna Szacowana lub dokładna liczba obiektów tej klasy Trwałość

Specyfikacja metod opis specyfikacja deklaratywna dane wejściowe dane wyjściowe algorytm warunki wstępne warunki końcowe wyjątki złożoność czasowa złożoność pamięciowa

Specyfikacja pól i parametrów typ przechowywanych wartości jednostka miary zakres dopuszczalnych wartości lista możliwych wartości wymagana precyzja wartość domyślna czy pole może być puste ograniczenia metody, które mogą czytać, ustawiać i modyfikować wartości tego pola.

Specyfikacja algorytmów Algorytm klasyfikacji na podstawie reguł decyzyjnych Dane wejściowe Uporządkowana (wg. ważności) lista reguł decyzyjnych w postaci: Jeżeli (A1 =...) i... i (An...) to Decyzja =... Reguła domyślna z pustą częścią warunkową Obiekt do zaklasyfikowania opisany atrybutami A1 do An

Algorytm klasyfikacji na podstawie reguł decyzyjnych powtarzaj od reguły najważniejszej do najmniej ważnej jeżeli obiekt spełnia warunki reguły, to podejmowana jest decyzja wskazywana przez regułę dopóki nie podjęto decyzji lub nie sprawdzono wszystkich reguł jeżeli nie podjęto decyzji, to podejmij decyzję wskazywaną przez regułę domyślną

Budowa statycznego modelu klas Identyfikacja klas Identyfikacja związków klas Identyfikacja pól Identyfikacja metod

Identyfikacja klas Typowe klasy: przedmioty namacalne (np. samochód, czujnik), role pełnione przez osoby (np. pracownik, wykładowca, polityk), zdarzenia, o których system przechowuje informacje (np. lądowanie samolotu, zamówienie, dostawa), interakcje pomiędzy osobami i/lub systemami, o których system przechowuje informacje (np. pożyczka, spotkanie, konferencja), lokalizacje, tj. miejsca przeznaczone dla ludzi lub przedmiotów,

Identyfikacja klas Typowe klasy grupy przedmiotów namacalnych (samochody, czujniki), organizacje (np. firma, wydział, związek), koncepcje (np. miara jakości, zadanie), dokumenty (np. prawo jazdy, faktura), klasy będące interfejsami dla systemów zewnętrznych, klasy będące interfejsami dla urządzeń sprzętowych.

Identyfikacja klas Analiza dziedziny problemu (problem domain analysis) wykorzystanie wiedzy dziedzinowej literatura seminaria prezentacje rysunki inne modele np. modele procesów biznesowych

Analiza opisu w języku naturalnym Rzeczowniki - potencjalne klasy, obiekty lub pola Czasowniki - potencjalne operacje lub związki klas Ma, posiada, obejmuje, składa się, jest częścią, - związki kompozycji Rzeczowniki odczasownikowe związki klas Rzeczowniki mogą oznaczać role pełnione w związkach

Przykład Każdy projekt jest realizowany przez konsorcjum złożone z co najmniej trzech organizacji. Organizacja może być firmą komercyjną, jednostką badawczą lub organizacją publiczną. Organizacja może realizować wiele projektów badawczych. Każdy projekt ma jednego koordynatora.

Przykład

Identyfikacja klas Wykorzystanie związków klas i obiektów Czy klasa ma potencjalne specjalizacje i/lub generalizacje? Czy klasa ma części składowe i/lub jest częścią większej całości? Czy klasa pozostaje w związkach z innymi klasami?

Identyfikacja klas Analiza funkcji Jakie obiekty, jakich klas będą niezbędne do realizacji poszczególnych funkcji

Weryfikacja klas Nieobecność pól i operacji Nieliczne (pojedyncze) pola i operacje Brak związków z innymi klasami Tylko jeden obiekt w klasie Dobrą klasą jest klasa Samochód, złymi Samochód Kowalskiego i Samochód Nowaka.

Identyfikacja krotności związków Analiza przykładowych (rzeczywistych lub wymyślonych) powiązań obiektów

Weryfikacja związków obligatoryjnych np. 1 lub 1..* Czy instytut musi mieć pracowników?

Identyfikacja związków kompozycji Zwroty pojawiające się w słownym opisie systemu jak: zawiera, składa się, obejmuje Klasy posiadające części składowe Klasy będące zbiorami pewnych elementów

Części składowe

Zbiory

Identyfikacja związków generalizacji-specjalizacji Dziedziczenie pól i metod

Identyfikacja związków generalizacji-specjalizacji Nazwy zawierające się w sobie pracownik i pracownik naukowy samochód i samochód osobowy Wspólne części nazw pracownik naukowy i pracownik techniczny -> generalizacja pracownik

Identyfikacja związków generalizacji-specjalizacji Pola, którym nie zawsze można przypisać wartości Metody, które nie zawsze mają sens

Związki, które mogą dotyczyć tylko pewnych obiektów

Pola służące do rozróżniania obiektów

Identyfikacja pól Co jest potrzebne do opisu danej klasy w ramach dziedziny problemu? Jakie dane będą potrzebne operacjom danej klasy do realizacji ich zadań? Jakie pola należy wprowadzić, aby opisać stany w jakich mogą znajdować się obiekty danej klasy? Klasa czy pole?

Przykład

Weryfikacja związków Czy sensownie brzmi zdanie "A jest rodzajem B" (jeżeli klasa A jest specjalizacją klasy B)? Czy sensownie brzmi zdanie "A [czasownik] B" (jeżeli klasy A i B są związane związkiem klas)? Czy sensownie brzmią zdania "A jest częścią B" lub "B składa się (zawiera) A" (jeżeli obiekty klasy A są składowymi obiektów klasy B)?

UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania

Diagramy przypadków użycia

Klasy użytkowników i wykorzystywane funkcje Mogą sugerować podział systemu na odrębne aplikacje, np. aplikacja dla użytkowników systemu aplikacja dla administratora Elementy interfejsu użytkownika, np. różne tryby pracy, np. różne systemy menu oddzielne fragmenty w strukturze menu blokowanie dostępu do pewnych funkcji

Przypadki użycia Funkcje systemu Elementy interfejsu użytkownika menu, podmenu, polecenia w menu dialogi

Związki pomiędzy przypadkami użycia Struktura menu Polecenia dostępne w dialogach, np. wywoływanie innych dialogów Kreatory (creators, wizards)

Diagramy klas Bezpośrednie przełożenie na kod Wiele dodatkowych elementów wykorzystywanych na etapie projektowania

Klasa class Pojazd {... } Nazwy - prefixy, suffixy, zamiana spacji i niedozwolonych znaków class CStudentDzienny {... }

Pola C++ class CPojazd {...... Nazwa;... CenaKilometra;... CenaGodziny; } Na przykład: class CPojazd { protected: char* Nazwa; double CenaKilometra; double CenaGodziny; }

Pola Java, C# class Pojazd {... nazwa;... cenakilometra;... cenagodziny; } Na przykład: class CPojazd { protected String nazwa; protected double cenakilometra; protected double cenagodziny; }

Symbole widoczności pól i operacji + public publiczne # protected zabezpieczone/chronione - private prywatne ~ - w ramach pakietu

class CPojazd { public:... Nazwa; protected:... CenaKilometra; private:... CenaGodziny; } class Pojazd { public... nazwa; protected... cenakilometra; private... cenagodziny; } C++ Java, C#

Typy pól

Operacje i metody C++ class CPojazd {... public:... Koszt (...); };...... CPojazd::Koszt (...) {... }

Operacje i metody Java, C# class Pojazd {... public... koszt (...) {... } }

Nagłówki operacji C++ class CPojazd {... public: double Koszt (double Czas, double Droga); };... double CPojazd::Koszt (double Czas, double Droga) {... }

Nagłówki operacji Java, C# class Pojazd {... public double koszt (double czas, double droga) {... } }

Generalizacja-specjalizacja C++ Java C# class CStudentDzienny : public CStudent {... } class StudentDzienny extends Student {... } class StudentDzienny: Student {... }

Klasy abstrakcyjne Pochyła czcionka Klasy nie posiadające obiektów (bezpośrednio tej klasy)

Klasy abstrakcyjne C++ Brak tworzenia obiektów tej klasy w kodzie Operacje abstrakcyjne muszą być zdefiniowane w każdej ze specjalizacji, której obiekty będą tworzone class CStudent {... virtual CGrupa* PodajGrupe () = 0; }

Klasy abstrakcyjne Java, C# abstract class Student {... } albo abstract class Student {... abstract CGrupa podajgrupe (); }

Interfejsy (interfaces) Zbiór operacji (deklaracji metod) Przypomina klasę zawierającą wyłącznie operacje abstrakcyjne Może zawierać stałe

Interfejsy w C++ Nie wspierane? class CObiektGraficzny { public: virtual void Rysuj () = 0; }

Interfejsy w Javie interface IObiektGraficzny { } void rysuj (); Implementacja interfejsu class Rysunek implements IObiektGraficzny {... } public void rysuj ();

Interfejsy w C# interface IObiektGraficzny { void Rysuj(); } Implementacja interfejsu class Rysunek: IObiektGraficzny {... public void Rysuj(); }

Związki klas Ogólnie dowolny sposób pozwalający na przechowanie informacji o powiązanych obiektach Np. tablica zawierająca pary powiązanych obiektów Kolo naukowe Pracownik K. Informatyki Nowak K. Fizyki Kamiński K. Chemii Zieliński

Związki klas Najczęściej dodatkowe pola przechowujące informacje o powiązanych obiektach Każdy obiekt klasy Pracownik będzie przechowywał informacje o powiązanym obiekcie (dowolnej liczbie) klasy Kolo naukowe Każdy obiekt klasy Kolo naukowe będzie przechowywał informacje o powiązanych obiektach (dokładnie jednym jednym) klasy Pracownik

Sposób przechowywania informacji o powiązanych obiektach Identyfikatory (np. nazwy) Wskaźniki/referencje

Związki w C++ Najczęściej wskaźniki class CPracownik {... protected: vector <CKoloNaukowe*> rkolonaukowe; } class CKoloNaukowe {... protected: CPracownik* rpracownik; }

Związki w C++ Krotność 1 Wskaźnik, który musi wskazywać na powiązany obiekt Krotność 0..1 Wskaźnik, który może mieć wartość NULL Krotność *, 1..* Klasa vector (biblioteka STL) dla 1..* nie może być pusty Tablica wskaźników Inna struktura danych

Związki w Javie Najczęściej referencje i ich kolekcje class Pracownik {... protected Vector rkolonaukowe; // lub protected KoloNaukowe[] rkolonaukowe; } class KoloNaukowe { }... protected Pracownik pracownik;

Związki w Javie Krotność 1 Referencja, która musi wskazywać na powiązany obiekt Krotność 0..1 Referencja, która może mieć wartość NULL Krotność *, 1..* Obiekt klasy z biblioteki standardowych struktur danych Javy dla 1..* nie może być pusty Tablica referencji Inna struktura danych

Związki w C# Najczęściej referencje i ich kolekcje jak w Javie class Pracownik {... protected List<KoloNaukowe> rkolonaukowe; // lub protected KoloNaukowe[] rkolonaukowe; } class KoloNaukowe { }... protected Pracownik pracownik;

Związki w C# Krotność 1 Referencja, która musi wskazywać na powiązany obiekt Krotność 0..1 Referencja, która może mieć wartość NULL Krotność *, 1..* Obiekt klasy z biblioteki standardowych struktur danych.net (ArrayList, List<>) dla 1..* nie może być pusty Tablica referencji Inna struktura danych

Wykorzystanie nazw ról w związkach class CKoloNaukowe {... protected: CPracownik* ropiekun; } class KoloNaukowe {... protected Pracownik opiekun; }

Związki skierowane class CPracownik {... } Brak informacji o powiązanych obiektach klasy Kolo naukowe class CKoloNaukowe {... protected: CPracownik* rpracownik; }

Związek kompozycji (composition) W zasadzie na poziomie implementacji nierozróżnialne od związków zwykłych Często obiekt będący całością jest odpowiedzialny za przechowywanie swoich składowych (dodawanie, usuwanie)

Związek kompozycji (composition) W C++ czasami wykorzystanie obiektów zamiast wskaźników class CWydzial {... protected: vector <CInstytut> rinstytut; }

Diagramy sekwencji Wywoływanie metod w programie Podstawa implementacji metod

Wywołanie metody (call) void CRysunek::Rysuj () { }... olinia.rysuj ();...

Dla powiązanych obiektów w C++ void CRysunek::Rysuj () { }... rlinia->rysuj ();...

Czy wywołanie w pętli? Wnioskowanie z diagramu klas Sequence text, np. * Komentarz Brak nazwy obiektu

Tworzenie i usuwanie obiektów w C++ void CKlient::PobierzDane () { }... opolaczenie = new CPolaczenie ();... opolaczenie->odczytaj (...);... delete opolaczenie;...

Tworzenie i usuwanie obiektów w Javie public class Klient {... void pobierzdane () {... Polaczenie polaczenie = new Polaczenie ();... polaczenie.odczytaj (...);... }... }

Dostęp do pól Operacje: Pobierz dane / Get data Ustaw dane / Set data Pobierz pole / Get field Ustaw pole / Set field Mogą być implementowane jako odczyt/zapis pól

Dostęp do pól i samowywołanie void CRysunek::Rysuj () { }... RysujLinie (rlinia->punkty);... Samowywołanie Pobranie danych

Wywołania pochodzące z zewnątrz Klasa interfejsowa =

Operacje wirtualne (polimorficzne)

Operacje wirtualne W Javie domyślnie W C++ i C# virtual void Rysuj ();

Punkt widzenia klasy Rysunek Czy poprawne w UML dla klasy abstrakcyjnej?

Rzeczywiste wywołania metod dla obiektów

Ilustracja efektu operacji wirtualnej W rzeczywistości ta metoda nie istnieje

Diagramy stanów

Zmiany stanów w metodach void CArtykul::OcenaZakresu (TZakres Zakres) { } if (Stan == _NOWY) { } else if (Zakres == _ZGODNY) else Stan = _ZAAKCEPTOWANY_DO_RECENZJI; Stan = _NIEODPOWIEDNI; // Niepoprawne...

Akcje/operacje -> metody (fragmenty metod)... if (Zakres == _ZGODNY) Stan = _ZAAKCEPTOWANY_DO_RECENZJI; } else { } Stan = _NIEODPOWIEDNI; PowiadomAutora ();

Akcje/operacje -> metody (fragment metody) void CArtykul::Monitoruj () { if (Stan == _U_RECENZENTA) {... } }

Do zobaczenia 22 marca 速