Wstęp do systemów informatycznych Diagramy klas
Odbiór świata Myślenie o dziedzinie problemu powinno być możliwie zbliżone do myślenia o systemie ułatwia to budowę systemu jego projektowanie jego zrozumienie Różne ideologie próbują to ułatwiać aktualnie dominujące jest programowanie (i projektowanie) obiektowe w żadnym wypadku nie „zorientowane obiektowo” ang. Object Oriented Programming
Podstawowe pojęcia Obiekt - struktura danych, występująca łącznie z operacjami dozwolonymi do wykonywania na niej, odpowiadająca bytowi wyróżnialnemu w analizowanej rzeczywistości. Tożsamość obiektu - wewnętrzny identyfikator obiektu, który pozwala na odróżnienie go od innych obiektów. Hermetyzacja - rozróżnienie pomiędzy interfejsem do obiektu opisującym co obiekt robi, a implementacją definiującą, jak jest zbudowany i jak robi, to co ma zrobić.
Podstawowe pojęcia Klasa - zbiór własności grupy obiektów o tych samych charakterystykach. Dziedziczenie - wielokrotne użycie tego, co wcześniej zostało zrobione: definiowanie klas, które mają wszystkie cechy zdefiniowane wcześniej (z nadklasy) plus cechy nowe. Polimorfizm - wybór nazwy dla operacji jest określony wyłącznie semantyką operacji. Decyzja o tym, która z metod implementujących daną operację zostanie wybrana, zależy od przynależności obiektu do odpowiedniej klasy.
Obiekt Byt lub idea zmapowane na konstrukt programistyczny nazwa dobrze określone granice zamknięty element większej konstrukcji może być złożony może być powiązany z innymi obiektami ma typ
Identyfikator obiektu Fakt istnienia wystarcza do identyfikacji niezależnie od własności Dwa byty mogą wyglądać identycznie, lecz być dwoma osobnymi bytami Implementacja przypisuje obiektowi unikalny identyfikator może być tymczasowy lub stały pozwala na odróżnianie i identyfikowanie obiektów
Własności obiektu tożsamość, odróżniająca go od innych obiektów stan – wartości atrybutów i powiązań z innymi obiektami zachowanie – zestaw operacji, jakie można wykonać na obiekcie
Numer = Stan konta = PLN Właściciel = Jan Kowalski Upoważniony =... Podpis = ….... Wypłać Wpłać Sprawdź stan Upoważnij Podaj osoby upoważnione Porównaj podpis Zlikwiduj konto Nalicz procent Obiekt
Relatywizm obiektów Obiekt powinien zawierać wszystkie informacje związane z bytem, który reprezentuje istotne w kontekście systemu przechowywane w atrybutach obiektu atrybuty mogą mieć wartości będące obiektami (podobiekty) Model koncepcyjny nie powinien być ograniczony środowiskiem implementacji
Pracownicy..... Pracownik Zatrudnienia..... Zatrudnienie Stanowisko Nazwisko Dzieci... Dziecko Pracownik Zatrudnienia..... Zatrudnienie Stanowisko Nazwisko Dzieci... Dziecko Złożony obiekt
Asocjacje Uogólnienie zbioru połączeń pomiędzy obiektami Mają nazwę i liczności ew. też inne własności Zwykle implementowane jako referencje lub pointery (lub ich kolekcje)
PRACOWNIK Nazwisko = Nowak Zarobek = 1500 Pracuje_w o FIRMA Nazwa = Relax Ltd. Szef o Zatrudnia o Asocjacje
Klasa - definicje 1. Klasa jest nazwanym zbiorem obiektów o podobnych własnościach (podobna semantyka, podobne atrybuty, zachowania, podobne związki z innymi obiektami). Własności te są określone w definicji klasy. Stosunek klasa/podklasa oznacza zawieranie się zakresów znaczeniowych. Np. zbiór obiektów Student zawiera się w zbiorze Osoba. 2. UML: Klasa jest nazwanym opisem grupy obiektów, które współdzielą ten sam zbiór własności (inwariantów). Klasa nie jest zbiorem obiektów, lecz jest używana do opisywania (deklarowania) obiektów. Stosunek klasa/podklasa oznacza, że obiekty podklasy posiadają wszystkie inwarianty nadklasy, plus (ewentualnie) inwarianty swoje. Np. klasa Student ma wszystkie inwarianty klasy Osoba, plus inwarianty własne.
Inwarianty Wybrane możliwe inwarianty klasy: nazwa typ (opis struktury danych) metody zdarzenia (+obsługa) wyjątki (+obsługa) interfejsy ograniczenia
Numer = Stan konta = Właściciel = Jan Kowalski Upoważniony =... Wypłać Wpłać Sprawdź stan Upoważnij Podaj osoby upoważnione Porównaj podpis Zlikwiduj konto Nalicz procent Numer: integer Stan konta: integer Właściciel: string Upoważniony: Numer = Stan konta = Właściciel = Adam Nowak Upoważniony =... Klasa wszystkich kont Obiekty KONTO import inwariantów Metody jako inwarianty klasy nie każdy obiekt musi przechowywać definicje metod – do tego służy klasa
Generalizacja, specjalizacja, dziedziczenie Relacja generalizacji/specjalizacji między klasami łączy klasę bardziej ogólną (nadklasę) z jedną lub więcej bardziej specjalizowanymi (podklasami) Podklasy mają wszystkie inwarianty nadklasy plus zwykle swoje własne mogą niektóre inwarianty przedefiniowywać Relacja generalizacji/specjalizacji może być (i zwykle jest) implementowana dziedziczeniem ale są inne możliwości Dziedziczenie inwariantów jest relacją przechodnią
generalizacja specjalizacja Pracownik AsystentAdiunkt ProfesorDocent nazwisko data ur. wiek pole atrybutów pole metod pensja Osoba pole nazwy klasy Dziedziczenie
Hermetyzacja Opakowanie struktury i implementacji jako pojedynczego bloku Oddzielenie specyfikacji od implementacji Ukrycie struktury i implementacji obiektu Jedna z reguł inżynierii oprogramowania (Parnas, 1972): programista powinien wiedzieć o obiekcie tylko tyle, by go efektywnie używać. To, co może być ukryte, powinno być ukryte
Hermetyzacja Trzy podejścia: Ortodoksyjne (Smalltalk) – metody są widoczne, atrybuty ukryte Ortogonalne (C#, Java, C++) – dowolna własność może być publiczna lub prywatna „Uważamy, że programiści są rozsądni” (Python) – wszystko jest publiczne
PRAC NAZWISKO Nowak ROK_UR 1961 ZAROBEK 2500 ZmieńZarobek(...)Podatek()ZarobekNetto() Wiek() begin return RokBież() - ROK_UR end; DZIAŁ Zabawki PRAC NAZWISKO Nowak ROK_UR 1951 ZAROBEK 2500 ZmieńZarobek(...) Podatek() ZarobekNetto() DZIAŁ Zabawki Wiek() begin return RokBież() - ROK_UR end; Wewnętrzna struktura obiektu Zewnętrzna struktura obiektu Wiek()
Operacje i metody Operacja – działanie, którego możemy użyć na obiekcie. Własność klasy Metoda – implementacja operacji w jednej z klas. Wiele metod może implementować operację Operacja: co mogę zrobić? Metoda: jak mogę to zrobić?
Wołanie metod vs wołanie funkcji Wołanie funkcji – obiekt jako jeden z parametrów function(object,arg1,arg2,…) Wiadomość (wołanie metody) – obiekt przed wywołaniem operacji object.operation(arg1,arg2,…) obiekt jest parametrem domyślnym
Wołanie metod vs wołanie funkcji Funkcje – wczesne wiązanie specyfikuje wołaną implementację Metody – późne wiązanie wołana implementacja ustalona w czasie wykonania programu
Numer = Stan konta = PLN Właściciel = Jan Kowalski Upoważniony =... Podpis = … Wypłać Wpłać Sprawdź stan Upoważnij Podaj osoby upoważnione Porównaj podpis Zlikwiduj konto Nalicz procent Wypłać 1000 PLN OK, wypłaciłem Graj Co proszę...?
Polimorfizm „Wiele form” pojedynczego bytu Wiele form polimorfizmu ;) np. metody polimorficzne polimorfizm parametryczny (parametryzowane typy)
Podstawy notacji
Okno rozmiar czy widoczne Okno rozmiar czy widoczne wyświetl schowaj Okno Rozmiar : Obszar czy widoczne: Boolean wyświetl() schowaj() Klasy - notacja Cztery pola: nazwa klasy atrybuty metody informacje dodatkowe (rzadko używane)
Klasy - notacja Nazwa klasy: zwykle rzeczownik, w liczbie pojedynczej nazwa w liczbie mnogiej, jeśli jeden obiekt opisuje całą grupę Student – obiekt opisuje pojedynczego studenta Studenci – obiekt opisuje grupę/wszystkich studentów Jedyna obowiązkowa informacja na diagramie
specjalizacja generalizacja Pracownik Osoba AsystentAdiunkt ProfesorDocent AsystentAdiunkt Profesor Docent Pracownik Osoba Dziedziczenie
Struktura typu pętla jest zabroniona PracownikStudent Osoba Student_asystent Struktura typu krata jest dopuszczalna K1 K2 K3 Dziedziczenie
Asocjacje Opis zbioru relacji Wspólna semantyka Relacja jest instancją asocjacji Asocjacja binarna – łączy obiekty należące do 2 klas FirmaPracownik pracuje w 1..*1
Asocjacje :Osoba imię=Kasia :Firma typ=IT works_in :Osoba imię=Joe :Firma typ=restauracja :Osoba imię= works_in Osoba imię Firma typ works_in Obiekty i relacje na diagramie obiektów Klasy i asocjacje na diagramie klas
Liczności AAAA B A BB AB: min = 0, max = 1 BA: min = 1, max = 2 AB: min = 1, max = 3 BA: min = 2, max = 3 A B A B a) b) ,2 AAAA B A BB ,3 b) a)
Liczności 1 1, 2, 3,... 2, 3, 4,... 3, 4, 5 2, 4, 18 1, ? 0, 1 0, 1, 2, * 2..* ,4, * * UMLznaczenie KrajStolica Firma Pracownik Osoba Adres 1* 0..*0..1 Przykłady:
Dziękuję za uwagę Pytania?