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

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

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

Dokumentacja do API Javy.

Wykład 5 Okna MDI i SDI, dziedziczenie

Programowanie obiektowe i zdarzeniowe

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

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

Programowanie obiektowe

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

Aplikacje w środowisku Java

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

Kurs WWW. Paweł Rajba.

Programowanie obiektowe

Klasy abstrakcyjne i interfejsy

TEMAT : KLASY DZIEDZICZENIE

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

Programowanie obiektowe

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Wykład 7: Pakiety i Interfejsy

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

Programowanie obiektowe

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Aplikacje w środowisku Java

Java: interfejsy i klasy wewnętrzne

Programowanie obiektowe

Laboratorium 6 DIAGRAM KLAS (Class Diagram)

Klasy i obiekty cz II

Technologie i usługi internetowe cz. 2

Enkapsulacja, dziedziczenie, polimorfizm

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ę

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ę

Klasy abstrakcyjne, interfejsy i polimorfizm

PHP 5 język obiektowy

Definiowanie własnych klas

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

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.

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

Podstawy Programowania Obiektowego

Modelowanie obiektowe

Podstawy projektowania systemów komputerowych

Diagramy klas. dr Jarosław Skaruz

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

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

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

1 Atrybuty i metody klasowe

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

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

Wstęp do programowania obiektowego. Wykład 2

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

dr inż. Piotr Czapiewski Tworzenie aplikacji w języku Java Laboratorium 1

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

Programowanie obiektowe


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

Polimorfizm. dr Jarosław Skaruz

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

Multimedia JAVA. Historia

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Aplikacje RMI

PARADYGMATY PROGRAMOWANIA Wykład 2

TEMAT : KLASY POLIMORFIZM

Zaawansowane programowanie w C++ (PCP)

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

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

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

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

Interfejsy i klasy wewnętrzne

Builder (budowniczy) Cel: Przykład:

Abstrakcyjny typ danych

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.

Wywoływanie metod zdalnych


0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

UML w Visual Studio. Michał Ciećwierz

Materiały do zajęć VII

Programowanie w Internecie. Java

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

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Dziedziczenie jednobazowe, poliformizm

Programowanie Obiektowe Ćwiczenie 4

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

Zaawansowane programowanie w C++ (PCP)

Do czego służą klasy?

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

Tutorial prowadzi przez kolejne etapy tworzenia projektu począwszy od zdefiniowania przypadków użycia, a skończywszy na konfiguracji i uruchomieniu.

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

Programowanie obiektowe

BEAN VALIDATION. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

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

Transkrypt:

UML a kod C++, Java i C#

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! Kolo naukowe Pracownik Np. tablica zawierająca pary powiązanych obiektów 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 Realizacja klasyczna pole przechowujące stan i odpowiednia reakcja metod

Zmiany stanów w metodach void CArtykul::OcenaZakresu (TZakres Zakres) {! if (Stan == _NOWY) {!! if (Zakres == _ZGODNY)! Stan = _ZAAKCEPTOWANY_DO_RECENZJI;! else! else! 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) {!!