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) {... } }
Określanie wymagań
Cele przedsięwzięcia Klienta, np. Wzrost efektywności, spadek kosztów, rozszerzenie rynku, unikanie błędów Wykonawcy Biznesowe Techniczne Priorytety!
Kontekst przedsięwzięcia Użytkownicy role Istniejące oprogramowanie Specyficzny sprzęt
Określanie wymagań Współpraca klienta i wykonawcy! Źródła: Wywiady z przedstawicielami klienta Analiza materiałów dostarczonych przez klienta, przepisów prawnych Porównanie z innymi systemami
Rodzaje wymagań Wymagania funkcjonalne funkcje wspomagane przez oprogramowania - przypadki użycia (use cases) Wymagania niefunkcjonalne ograniczenia
Hierarchia wymagań funkcjonalnych Przykład: Ewidencja klientów Dodawanie klienta Edycja danych klienta Usuwanie klienta Wyszukiwanie klientów Wyszukiwanie proste Wyszukiwanie złożone
Sposoby poszukiwania wymagań funkcjonalnych Wykorzystanie hierarchii wymagań Z góry na dół Z dołu do góry Podejście mieszane Wykorzystanie informacji o rolach użytkowników Śledzenie procesów biznesowych Analiza scenariuszy
Z góry na dół
Z dołu do góry
Metoda mieszana
Wykorzystanie informacji o rolach użytkowników
Śledzenie procesów biznesowych Proces zbiór czynności wykonywanych przez różne osoby i działy organizacji scharakteryzowany przez: Wejście Wyjście (wynik) Cele Zadania Proces biznesowy proces, którego wynik ma wartość biznesową
Proces obsługi klienta pół-hurtowego 1.Dział sprzedaży wybór produktów, sformułowanie zamówienia połączone z weryfikacją dostępności produktów 2.Magazyn ponowna weryfikacja, skompletowanie zamówienia 3.Księgowość wystawienie faktury, rozliczenie finansowe 4.Magazyn wydanie towarów
Analiza scenariuszy Scenariusz słowny opis przykładowego sposobu (scenariusza) korzystania z systemu Z reguły obejmuje wiele funkcji
Analiza scenariuszy - przykład Użytkownik podaje podstawowe informacje o planowanym wyjeździe. Chce odwiedzić Polskę, spędzić tam tydzień, wjedzie i wyjedzie od strony Czech. Interesują go ciekawe miasta, wykopaliska archeologiczne i wydarzenia muzyczne (muzyka klasyczna). Określa ograniczenia finansowe. System generuje proponowany plan podróży biorąc pod uwagę podane preferencje i ograniczenia.
Analiza scenariuszy przykład Użytkownik może szczegółowo przeglądać proponowaną trasę korzystając m. in. z prezentacji multimedialnych System proponuje użytkownikowi potencjalne modyfikacje trasy, biorąc pod uwagę położenie geograficzne poszczególnych atrakcji oraz wybory innych użytkowników o podobnych preferencjach
Analiza scenariuszy przykład Użytkownik modyfikuje trasę dodając do niej wizytę w Biskupinie i rezygnując z wizyty w Gnieźnie Użytkownik akceptuje trasę i otrzymuje jej szczegółowy opis (wydruk, plik) Użytkownik wybiera funkcję rezerwacji hoteli. Po dokonaniu niewielkiej opłaty system współpracując z zewnętrznym systemem rezerwacji hotelowej dokonuje odpowiednich rezerwacji
Funkcje wynikające ze scenariusza Definiowanie ograniczeń i preferencji Generowanie planu podróży Przeglądanie trasy Wizualizacja geograficzna Prezentacja harmonogramu trasy Multimedialne prezentacje atrakcji Generowanie i prezentacja proponowanych zmian
Funkcje wynikające ze scenariusza Modyfikowanie trasy Akceptowanie trasy Przygotowanie szczegółowego opisu trasy Rezerwacja hoteli Pobieranie opłaty Rezerwacja hotelu
Analiza scenariuszy Użytkownik wchodzi na naszą stronę i ponieważ korzystał z niej już wcześniej wybiera od razu opcję wyszukiwania. Najpierw określa kraj, który go interesuje Szwajcaria, a następnie miasto Zurich. Użytkownik wybiera rodzaj oferty turystycznej narty. Ponieważ uprawianie narciarstwa w samym Zurichu nie jest możliwe otrzymuje listę kilku pobliskich stacji narciarskich. Użytkownik zapoznaje się z informacjami o kilku stacjach narciarskich trasy, wyciągi, ceny, możliwość wypożyczenia sprzętu oraz aktualne warunki śniegowe. Użytkownik sprawdza możliwość dojazdu z Zurichu do stacji narciarskiej Flumsberg. Sprawdza też możliwości zakwaterowania w (pobliżu) Flumsbergu. Ostatecznie dokonuje rezerwacji biletu rail&ski i pokoju w pensjonacie we Flumsbergu.
Funkcje wynikające ze scenariusza Wybór obszaru zainteresowania Wybór kraju Wybór miasta Wybór rodzaju oferty turystycznej Przeglądanie ofert stacji narciarskich Wyszukiwanie możliwości dojazdu Wyszukiwanie możliwości zakwaterowania Rezerwacja Rezerwacja biletów Rezerwacja miejsc noclegowych
Analiza scenariuszy Do magazynu zgłasza się klient, który złożył zamówienie w dziale sprzedaży. Klient podaje numer zamówienia, lub inną informację identyfikującą klienta. Magazynier odszukuje zamówienie w systemie i weryfikuje czy zamówiony towar został już zablokowany dla potrzeb klienta. Jeżeli tak, to potwierdza przyjęcie zamówienia do realizacji i prosi klienta o przejście do księgowości. Magazynier otrzymuje listę towarów do wydania wraz z ich lokalizacjami. Po skompletowaniu zamówienia potwierdza ten fakt w systemie. Po wydaniu towaru klientowi potwierdza ten fakt w systemie.
Funkcje wynikające ze scenariusza Realizacja zamówienia Identyfikacja zamówienia Weryfikacja zablokowania towaru Potwierdzenie przyjęcia zamówienia do realizacji Potwierdzenie skompletowania zamówienia Potwierdzenie wydania towaru
Specyfikacja wymagań Język naturalny Metody formalne Formularze
Elementy specyfikacji wymagań Nazwa Opis Dane wejściowe i ich źródła Wynik Warunki początkowe i końcowe Efekty uboczne Wyjątki Priorytet Źródło wymagania Wymagania powiązane Uzasadnienie
Wymagania niefunkcjonalne Ograniczenia dotyczące Produktu Procesu Współpracy z systemami zewnętrznymi Problem specyfikacji wymagań niefunkcjonalnych w sposób
Specyfikacja wymagań niefunkcjonalnych w sposób weryfikowalny Wydajność Liczba transakcji obsłużonych w ciągu sekundy Czas odpowiedzi Szybkość odświeżania ekranu Rozmiar Wymagana pamięć RAM Wymagana pamięć dyskowa Łatwość użytkowania Czas niezbędny dla przeszkolenia użytkowników Liczba stron dokumentacji Zgodność ze standardami
Specyfikacja wymagań niefunkcjonalnych w sposób weryfikowalny Niezawodność Prawdopodobieństwo błędnego wykonania podczas realizacji transakcji Częstotliwość występowania błędnych wykonań Średni czas pomiędzy błędnymi wykonaniami Dostępność (procent czasu, w którym system jest dostępny) Odporność (ang. robustness) Czas restartu po awarii systemu Prawdopodobieństwo zniszczenia danych w przypadku awarii
Specyfikacja wymagań niefunkcjonalnych w sposób weryfikowalny Przenośność Procent kodu zależnego od platformy docelowej Liczba platform docelowych Koszt przeniesienia na nową platformę