(Microsoft PowerPoint - UML Kod [tryb zgodno\234ci])

Transkrypt

(Microsoft PowerPoint - UML Kod [tryb zgodno\234ci])
UML a kod w C++ i Javie
Projektowanie oprogramowania
Dokumentowanie oprogramowania
Znaczenie notacji graficznych w
projektowaniu
Ułatwienie projektowania
Komunikacja
Podstawa (zautomatyzowanej)
implementacji
Czytelność diagramów i kodu
Uzytkownik
class Client {
Client
Vector subject;
Subject
}
1
*
Request()
0..1
1
Proxy
class Subject {
...request (...);
}
Diagramy
przypadków
użycia
Wydawanie opinii
Zarzadzanie
pojazdami
class Proxy extends Subject {
Real subject
Przewoznik
RealSubject realSubject;
Optymalizacja
Zarzadzanie
uzytkownikami
Zleceniodawca
Zarzadzanie
ladunkami
...request (...) {
Request()
if (realSubject == NULL)
Request()
realSubject = new RealSubject;
realSubject.request (...);
if (rReal subject = NULL)
rReal subject := new Real subject;
rReal subject.Request (...)
}
}
class RealSubject {
...request (...) {...}
}
Administrator
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
Przypadki użycia
Funkcje systemu
Elementy interfejsu użytkownika
menu, podmenu, polecenia w menu
dialogi
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
1
Związki pomiędzy przypadkami
użycia
Związki używania (use) i
rozszerzania (extend)
Struktura menu
Polecenia dostępne w dialogach, np.
wywoływanie innych dialogów
Kreatory (creators, wizards)
Związek extends sugeruje, że
do funkcji „Dodawanie kategorii
pojazdów” można „dojść” także
inną (główną) drogą
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
...
...
...
...
}
Na przykład:
Pola Java
CPojazd {
class
...
...
...
}
Nazwa;
CenaKilometra;
CenaGodziny;
class CPojazd {
protected:
char* Nazwa;
double CenaKilometra;
double CenaGodziny;
}
Na przykład:
Pojazd {
nazwa;
cenaKilometra;
cenaGodziny;
class CPojazd {
protected String nazwa;
protected double cenaKilometra;
protected double cenaGodziny;
}
2
Symbole widoczności pól i
operacji
+ public – publiczne
# protected – zabezpieczone/chronione
- private – prywatne
class CPojazd {
public:
... Nazwa;
protected:
... CenaKilometra;
private:
... CenaGodziny;
}
Typy pól
class Pojazd {
public ... nazwa;
protected ... cenaKilometra;
private ... cenaGodziny;
}
W javie dodatkowo domyślny - dostęp dla całego pakietu
Operacje i metody C++
class CPojazd {
...
public:
... Koszt (...);
};
...
... CPojazd::Koszt (...) {
...
}
Operacje i metody Java
class Pojazd {
...
public ... koszt (...) {
...
}
}
Nagłówki operacji C++
class CPojazd {
...
public:
double Koszt (double Czas, double Droga);
};
...
double CPojazd::Koszt (double Czas, double
Droga) {
...
}
3
Nagłówki operacji Java
Generalizacja-specjalizacja Generalizacjadziedziczenie
Student
class Pojazd {
...
public double koszt (double czas, double droga) {
...
}
}
Student dzienny
class StudentDzienny
extends Student {
...
}
Klasy abstrakcyjne
Student
Student dzienny
Pochyła czcionka
class CStudentDzienny :
public CStudent {
...
}
Klasy abstrakcyjne C++
Student zaoczny
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 {
...
Klasy, które nie mogą posiadać obiektów
(bezpośrednio tej klasy)
virtual CGrupa* PodajGrupe () = 0;
}
Klasy abstrakcyjne Java
Interfejsy (interfaces)
abstract class Student {
...
}
albo
abstract class Student {
...
abstract Grupa podajGrupe ();
Zbiór operacji (deklaracji metod)
Przypomina klasę zawierającą wyłącznie
operacje abstrakcyjne
Może zawierać stałe
«interface»
Obiekt graficzny
+Rysuj()
}
4
Interfejsy w C++
Interfejsy w Javie
Nie wspierane?
interface IObiektGraficzny {
void rysuj ();
}
Implementacja interfejsu
class IObiektGraficzny {
public:
class Rysunek implements IObiektGraficzny
{
virtual void Rysuj () = 0;
...
}
public void rysuj () {}
}
Związki klas
Pracownik
Kolo naukowe
1
Związki klas
Pracownik
*
Ogólnie dowolny sposób pozwalający na
przechowanie informacji o powiązanych
obiektach
Kolo naukowe Pracownik
Każdy obiekt klasy Koło naukowe będzie
przechowywał informacje o powiązanym obiekcie
(dokładnie jednym) klasy Pracownik
Każdy obiekt klasy Pracownik będzie przechowywał
informacje o powiązanych obiektach (dowolnej
liczbie) klasy Koło naukowe
Zieliński
Sposób przechowywania
informacji o powiązanych
obiektach
*
Najczęściej dodatkowe pola przechowujące
informacje o powiązanych obiektach
Np. tablica zawierająca
K. Informatyki Nowak
pary powiązanych
obiektów
K. Fizyki
Kamiński
K. Chemii
Kolo naukowe
1
Związki w C++
Pracownik
Identyfikatory (np. nazwy)
Wskaźniki/referencje
Kolo naukowe
1
*
Najczęściej wskaźniki
class CPracownik {
class CKoloNaukowe {
...
...
protected:
protected:
vector <CKoloNaukowe*> rKoloNaukowe;
}
CPracownik* rPracownik;
}
5
Związki w C++
Związki w Javie
Pracownik
Krotność 1
Krotność 0..1
Krotność *, 1..*
1
Wskaźnik, który musi wskazywać na powiązany
obiekt
Wskaźnik, który może mieć wartość NULL
Klasa vector (biblioteka STL) – dla 1..* nie może
być pusty
Tablica wskaźników
Inna struktura danych
class Pracownik {
...
protected Vector koloNaukowe;
protected Pracownik
pracownik;
// lub
}
Wykorzystanie nazw ról w
związkach
Opiekun
Krotność 0..1
Krotność *, 1..*
}
protected KoloNaukowe[] koloNaukowe;
Referencja, która musi wskazywać na powiązany
obiekt
class KoloNaukowe {
...
Krotność 1
*
Najczęściej referencje i ich kolekcje
Związki w Javie
Kolo naukowe
Referencja, która może mieć wartość NULL
Obiekt klasy z biblioteki standardowych
struktur danych Javy – dla 1..* nie moze byc
pusty
Tablica referencji
Inna struktura danych
Pracownik
class KoloNaukowe {
...
...
protected:
protected Pracownik opiekun;
CPracownik* rOpiekun;
}
}
Związek kompozycji
(composition)
Opiekun
Wydzial
Pracownik
Kolo naukowe
*
class CPracownik {
class CKoloNaukowe {
...
...
}
protected:
CPracownik* rPracownik;
}
Instytut
0..1
Brak informacji o powiązanych
obiektach klasy Kolo naukowe
*
class CKoloNaukowe {
Związki skierowane
1
Kolo naukowe
1
1..*
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)
6
Związek kompozycji
(composition)
Wydzial
Diagramy sekwencji
Instytut
0..1
1..*
Wywoływanie metod w programie
Podstawa implementacji metod
W C++ czasami wykorzystanie obiektów
zamiast wskaźników
class CWydzial {
...
protected:
vector <CInstytut> rInstytut;
}
Dla powiązanych obiektów w
C++
Wywołanie metody (call)
oRysunek : ::Rysunek
: ::Linia
Rysunek
Rysuj()
Linia
1
Rysuj()
*
void CRysunek::Rysuj () {
...
void CRysunek::Rysuj () {
rLinia->Rysuj ();
...
...
oLinia.Rysuj ();
}
...
}
Tworzenie i usuwanie
obiektów w C++
Czy wywołanie w pętli?
Wnioskowanie
z diagramu klas
Rysunek
Linia
1
oKlient : ::Klient
*
Pobierz dane()
Sequence
text, np. „*”
oRysunek : ::Rysunek
Rysuj()
*: Rysuj()
: ::Linia
void CKlient::PobierzDane ()
{
Create()
: ::Polaczenie
...
oPolaczenie = new
CPolaczenie ();
Brak
nazwy
obiektu
...
Odczytaj()
Destroy()
oPolaczenie->Odczytaj (...);
...
delete oPolaczenie;
...
Komentarz
}
Dla kazdej linii
7
Tworzenie i usuwanie
obiektów w Javie
Dostęp do pól
public class Klient {
...
oKlient : ::Klient
void pobierzDane () {
Pobierz dane()
Create()
...
: ::Polaczenie
Operacje:
Polaczenie polaczenie =
new Polaczenie ();
...
polaczenie.odczytaj (...);
Odczytaj()
Mogą być implementowane jako
odczyt/zapis pól
...
Destroy()
Pobierz dane / Get data
Ustaw dane / Set data
Pobierz pole / Get field
Ustaw pole / Set field
}
...
}
Nie ma jawnego usuwania obiektów
Dostęp do pól i
samowywołanie
oRysunek : ::Rysunek
Rysuj
: ::Linia
Wywołania pochodzące z
zewnątrz
Klasa interfejsowa
void CRysunek::Rysuj ()
{
Pobierz punkty()
...
oRysunek : ::Rysunek
RysujLinie
(rLinia->Punkty);
Rysuj linie()
Rysuj()
: ::CMyWindow
=
Update()
oRysunek : ::Rysunek
Rysuj
...
}
Pobranie danych
Samowywołanie
Operacje polimorficzne
(wirtualne )
Rysunek
Rysuj(){sequential}
Figura
1
*
Operacje polimorficzne
(wirtualne )
Rysuj(){polymorphic,sequential}
W Javie domyślne
W C++
Linia
Punkt
Rysuj(){polymorphic,sequential}
Rysuj(){polymorphic,sequential}
virtual void Rysuj ();
8
Punkt widzenia klasy Rysunek
: ::Rysunek
Czy poprawne
w UML dla klasy
abstrakcyjnej?
: ::Figura
Rzeczywiste wywołania metod
dla obiektów
: ::Rysunek
: ::Linia
: ::Punkt
Rysuj
*: Rysuj()
Rysuj()
*: Rysuj()
*: Rysuj()
Ilustracja efektu operacji
polimorficznej
W rzeczywistości ta
metoda nie istnieje
: ::Rysunek
Rysuj
: ::Figura
: ::Linia
Diagramy stanów
Realizacja klasyczna – pole przechowujące
stan i odpowiednia reakcja metod
: ::Punkt
*: Rysuj()
Nieodpowiedni
Przyjscie nowego artykulu
[Obiekt klasy linia]: Rysuj()
Ocena zakresu [Niezgodny z profilem]
Artykul
Tytul
Slowa kluczowe
Lokalizacja
Stan
Nowy
[Obiekt klasy punkt]: Rysuj()
Ocena zakresu [Zgodny z profilem]
Przydzial receznta(ów)
Zaakceptowany do receznji
Zmiany stanów w metodach
void CArtykul::OcenaZakresu (TZakres
Zakres) {
Przydzielony
Akcje/czynności -> metody
(fragmenty metod)
Nieodpowiedni
if (Stan == _NOWY) {
if (Zakres == _ZGODNY)
Ocena zakresu [Niezgodny z profilem] / Powiadom autora
Nowy
Stan = _ZAAKCEPTOWANY_DO_RECENZJI;
else
Stan = _NIEODPOWIEDNI;
...
if (Zakres == _ZGODNY)
Stan = _ZAAKCEPTOWANY_DO_RECENZJI;
}
else {
else
Stan = _NIEODPOWIEDNI;
// Niepoprawne
PowiadomAutora ();
...
}
}
}
9
Akcje/czynności -> metody
(fragmenty metod)
Związek zależności
(dependency)
void CArtykul::Monitoruj () {
if (Stan == _U_RECENZENTA) {
U recenzenta
Zmiana jednego elementu może powodować
zmianę drugiego
...
do / Monitoruj
Rysunek
Figura
Rysuj(){sequential}
Rysuj(){polymorphic,sequential}
}
}
Linia
Punkt
Rysuj(){polymorphic,sequential}
Rysuj(){polymorphic,sequential}
Związek zależności
(dependency)
Pakiety
Często oznacza uogólnienie (być może
wielu) wywołań metod i dostępów do pól
: ::Rysunek
: ::Figura
1
Klient
1
Flota
Optymalizacja
*
Pojazd
Rysuj()
*
1
*: Rysuj()
*
Wolny pojazd
Rozwiazanie
1..*
*
Typ pojazdu
1
1
1
Populacja
*
Trasa
Diagramy wdrożenia –
deployment diagrams
Client machine
Interactive analysis module
Broker server
Broker
Modelling tool
Komponent
(klasa
komponentów)
Broker interface
Modelling tool server
Węzeł
(klasa węzłów)
Solver server
Solver
Modelling tool interface
Solver interface
Interfejs
*
Solver server
Distributed solver
1
Solver interface
10