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



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

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

Inżynieria oprogramowania

Programowanie obiektowe

Programowanie obiektowe i zdarzeniowe

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

Dokumentacja do API Javy.

Wykład 5 Okna MDI i SDI, dziedziczenie

Aplikacje w środowisku Java

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Programowanie obiektowe

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

Laboratorium 6 DIAGRAM KLAS (Class Diagram)

Kurs WWW. Paweł Rajba.

Programowanie obiektowe

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Klasy abstrakcyjne i interfejsy

Wykład 7: Pakiety i Interfejsy

Programowanie obiektowe

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Enkapsulacja, dziedziczenie, polimorfizm

Programowanie obiektowe

PHP 5 język obiektowy

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Aplikacje w środowisku Java

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Java: interfejsy i klasy wewnętrzne

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Laboratorium z przedmiotu: Inżynieria Oprogramowania INP

Programowanie obiektowe

Definiowanie własnych klas

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Biuro Podróży 0. Stwórz projekt aplikacja konsolowa lub WPF (przemyśl wybór, bo zmiana może być czasochłonna). 1. Stwórz abstrakcyjną klasę

Modelowanie obiektowe

Technologie i usługi internetowe cz. 2

Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

TEMAT : KLASY DZIEDZICZENIE

Zaawansowane programowanie w C++ (PCP)

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Biuro Podróży 0. Stwórz projekt aplikacja konsolowa lub WPF (przemyśl wybór, bo zmiana może być czasochłonna). 1. Stwórz abstrakcyjną klasę

Diagramy klas. dr Jarosław Skaruz

Programowanie obiektowe

Multimedia JAVA. Historia

Podstawy projektowania systemów komputerowych

Klasy i obiekty cz II

Klasy abstrakcyjne, interfejsy i polimorfizm

Podstawy Programowania Obiektowego

Zaawansowane programowanie w C++ (PCP)

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy

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

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

Polimorfizm. dr Jarosław Skaruz

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

1 Atrybuty i metody klasowe

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

Przychodnia 0. Stwórz projekt aplikacja konsolowa lub WPF (przemyśl wybór, bo zmiana może być czasochłonna). 1. Stwórz abstrakcyjną klasę Osoba.

Wstęp do programowania obiektowego. Wykład 2

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

Dziedziczenie. dr Jarosław Skaruz

Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

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


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

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

TEMAT : KLASY POLIMORFIZM

Java Platform Micro Edition

Współbieżność w środowisku Java

Programowanie obiektowe

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Programowanie obiektowe zastosowanie języka Java SE

.NET Klasy, obiekty. ciąg dalszy

dr inż. Jarosław Forenc

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Interfejsy i klasy wewnętrzne

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Builder (budowniczy) Cel: Przykład:


Abstrakcyjny typ danych

Przypomnienie o klasach i obiektach

Materiały do zajęć VII

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

Dziedziczenie jednobazowe, poliformizm, tablice wskaźników na obiekty

Programowanie Obiektowe Ćwiczenie 4

Dziedziczenie jednobazowe, poliformizm

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

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

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.

PARADYGMATY PROGRAMOWANIA Wykład 2

Programowanie w Internecie. Java

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Programowanie 2. Język C++. Wykład 3.

Transkrypt:

UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami Zleceniodawca Zarzadzanie ladunkami 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 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 { Nazwy - prefixy, suffixy, zamiana spacji i niedozwolonych znaków class CStudentDzienny { Student dzienny Nazwa Cena kilometra Cena godziny Na przykład: Pola C++ class C { Nazwa; CenaKilometra; CenaGodziny; class C { char* Nazwa; double CenaKilometra; double CenaGodziny; Nazwa Cena kilometra Cena godziny Na przykład: Pola Java class { nazwa; cenakilometra; cenagodziny; class C { protected String nazwa; protected double cenakilometra; protected double cenagodziny; Symbole widoczności pól i operacji + public publiczne # protected zabezpieczone/chronione - private prywatne class C { public: Nazwa; CenaKilometra; private: CenaGodziny; +Nazwa #Cena kilometra -Cena godziny class { public nazwa; protected cenakilometra; private cenagodziny; Typy pól +Nazwa : char* #Cena kilometra : double -Cena godziny : double 2

Operacje i metody C++ Operacje i metody Java class C { public: Koszt (); ; +Koszt() class { public koszt () { +Koszt() C::Koszt () { Nagłówki operacji C++ +Koszt(in Czas : double, in Droga : double) : double class C { public: double Koszt (double Czas, double Droga); ; double C::Koszt (double Czas, double Droga) { Nagłówki operacji Java +Koszt(in Czas : double, in Droga : double) : double class { public double koszt (double czas, double droga) { Generalizacja-specjalizacja - dziedziczenie Student Student dzienny class CStudentDzienny : public CStudent { class StudentDzienny extends Student { Klasy abstrakcyjne Student Pochyła czcionka Student dzienny Student zaoczny Klasy nie posiadające obiektów (bezpośrednio tej klasy) 3

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 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 «interface» Obiekt graficzny + Interfejsy w C++ Nie wspierane? class CObiektGraficzny { public: virtual void Rysuj () = 0; Interfejsy w Javie Związki klas interface IObiektGraficzny { void rysuj (); Implementacja interfejsu class Rysunek implements IObiektGraficzny { public void rysuj (); Ogólnie dowolny sposób pozwalający na przechowanie informacji o powiązanych obiektach Np. tablica zawierająca pary powiązanych obiektów K. Informatyki K. Fizyki K. Chemii Nowak Kamiński Zieliński 4

Związki klas Najczęściej dodatkowe pola przechowujące informacje o powiązanych obiektach Każdy obiekt klasy będzie przechowywał informacje o powiązanym obiekcie (dokładnie jednym jednym) klasy Każdy obiekt klasy będzie przechowywał informacje o powiązanych obiektach (dowolnej liczbie) klasy Sposób przechowywania informacji o powiązanych obiektach Identyfikatory (np. nazwy) Wskaźniki/referencje Związki w C++ Najczęściej wskaźniki class C { class CKoloNaukowe { vector <CKoloNaukowe*> rkolonaukowe; C* r; Krotność Związki w C++ Wskaźnik, który musi wskazywać na powiązany obiekt Krotność 0.. Wskaźnik, który może mieć wartość NULL Krotność *,..* Klasa vector (biblioteka STL) dla..* nie może być pusty Tablica wskaźników Inna struktura danych Związki w Javie Najczęściej referencje i ich kolekcje class { protected Vector rkolonaukowe; // lub protected KoloNaukowe[] rkolonaukowe; class KoloNaukowe { protected pracownik; Krotność Związki w Javie Referencja, która musi wskazywać na powiązany obiekt Krotność 0.. Referencja, która może mieć wartość NULL Krotność *,..* Obiekt klasy z biblioteki standardowych struktur danych Javy dla..* nie moze byc pusty Tablica referencji Inna struktura danych 5

Wykorzystanie nazw ról w związkach Opiekun Związki skierowane Opiekun class CKoloNaukowe { C* ropiekun; class KoloNaukowe { protected opiekun; class C { Brak informacji o powiązanych obiektach klasy class CKoloNaukowe { C* r; Wydzial Związek kompozycji (composition) 0....* 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) Instytut Wydzial Związek kompozycji (composition) 0....* W C++ czasami wykorzystanie obiektów zamiast wskaźników class CWydzial { vector <CInstytut> rinstytut; Instytut Diagramy sekwencji Wywołanie metody (call) Wywoływanie metod w programie Podstawa implementacji metod orysunek : ::Rysunek : ::Linia void CRysunek::Rysuj () { olinia.rysuj (); 6

Dla powiązanych obiektów w C++ Rysunek void CRysunek::Rysuj () { rlinia->rysuj (); Linia Wnioskowanie z diagramu klas Komentarz Czy wywołanie w pętli? Dla kazdej linii Rysunek orysunek : ::Rysunek *: : ::Linia Linia Sequence text, np. * Brak nazwy obiektu Tworzenie i usuwanie obiektów w C++ Tworzenie i usuwanie obiektów w Javie oklient : ::Klient Pobierz dane() Create() Odczytaj() Destroy() : ::Polaczenie void CKlient::PobierzDane () { opolaczenie = new CPolaczenie (); opolaczenie->odczytaj (); delete opolaczenie; oklient : ::Klient Pobierz dane() Create() Odczytaj() Destroy() : ::Polaczenie public class Klient { void pobierzdane () { Polaczenie polaczenie = new Polaczenie (); polaczenie.odczytaj (); Dostęp do pól Dostęp do pól i samowywołanie 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 orysunek : ::Rysunek Rysuj Pobierz punkty() Rysuj linie() : ::Linia void CRysunek::Rysuj () { RysujLinie (rlinia->punkty); Samowywołanie Pobranie danych 7

Wywołania pochodzące z zewnątrz Klasa interfejsowa Rysunek Operacje wirtualne (polimorficzne) Figura orysunek : ::Rysunek = : ::CMyWindow Update() Rysuj orysunek : ::Rysunek {sequential {polymorphic,sequential Linia Punkt {polymorphic,sequential {polymorphic,sequential Operacje wirtualne Punkt widzenia klasy Rysunek W Javie domyślne W C++ virtual void Rysuj (); : ::Rysunek : ::Figura *: Czy poprawne w UML dla klasy abstrakcyjnej? Rzeczywiste wywołania metod dla obiektów Rysuj : ::Rysunek *: : ::Linia : ::Punkt Rysuj Ilustracja efektu operacji wirtualnej : ::Rysunek *: : ::Figura W rzeczywistości ta metoda nie istnieje [Obiekt klasy linia]: : ::Linia : ::Punkt *: [Obiekt klasy punkt]: 8

Diagramy stanów Realizacja klasyczna pole przechowujące stan i odpowiednia reakcja metod Nieodpowiedni Ocena zakresu [Niezgodny z profilem] Ocena zakresu [Zgodny z profilem] Zaakceptowany do receznji Przyjscie nowego artykulu Nowy Przydzial receznta(ów) Przydzielony Artykul Tytul Slowa kluczowe Lokalizacja Stan Zmiany stanów w metodach void CArtykul::OcenaZakresu (TZakres Zakres) { if (Stan == _NOWY) { if (Zakres == _ZGODNY) Stan = _ZAAKCEPTOWANY_DO_RECENZJI; else Stan = _NIEODPOWIEDNI; else // Niepoprawne Akcje/operacje -> metody (fragmenty metod) Nieodpowiedni Ocena zakresu [Niezgodny z profilem] / Powiadom autora Nowy if (Zakres == _ZGODNY) Stan = _ZAAKCEPTOWANY_DO_RECENZJI; else { Stan = _NIEODPOWIEDNI; PowiadomAutora (); Akcje/operacje -> metody (fragmenty metod) U recenzenta do / Monitoruj void CArtykul::Monitoruj () { if (Stan == _U_RECENZENTA) { Związek zależności (dependency) Zmiana jednego elementu może powodować zmianę drugiego Rysunek {sequential Figura {polymorphic,sequential Związek zależności (dependency) Często oznacza uogólnienie (być może wielu) wywołań metod i dostępów do pól : ::Rysunek : ::Figura Linia {polymorphic,sequential Punkt {polymorphic,sequential *: 9

Pakiety Klient Flota * Optymalizacja * * * Typ pojazdu Rozwiazanie *..* Populacja Wolny pojazd Trasa 0