WYKŁAD dr inż. Paweł Jarosz Instytut Informatyki Politechnika Krakowska mail: pjarosz@pk.edu.pl LABORATORIUM dr inż. Paweł Jarosz (3 grupy) mgr inż. Piotr Szuster (3 grupy)
warunki zaliczenia Obecność na wykładach (nie)obowiązkowa Obecność na laboratoriach obowiązkowa Kolokwium na lab w I połowie grudnia Projekt Kolokwium z wykładu na ostatnim wykładzie Ocena z przedmiotu: 60% - ocena z laboratorium 40% - ocena z wykładu
Plan wykładu 1. Ugruntowanie wiedzy związanej z obiektowością. 2. Modelowanie obiektowe 3. Zasady projektowania obiektowego 4. Wzorce projektowe 5. Zagadnienia zaawansowane: ORM, SOA, WCF
Czym jest obiekt? Ludzie z natury myślą w kategoriach obiektów Każdy obiekt charakteryzuje się atrybutami i zachowaniem Obiekty służą do łączenia danych metodami (instrukcjami) operującymi na nich Każdy obiekt współdziała z otoczeniem i ma wpływ na inne obiekty
Programowanie obiektowe Podstawowa definicja obiektu mówi, że Jest to pewna jednostka, która składa się zarówno z danych, jak i z zachowań W programowaniu proceduralnym kod dzieli się na całkowicie niezależne od siebie funkcje i procedury. Czarne skrzynki, które przyjmują dane na wejściu i zwracają wyniki na wyjściu. Dane umieszcza się w osobnych strukturach, na których te funkcje mogą operować.
Programowanie obiektowe Obiekty to z jednej strony struktury danych i podstawowe typy. Z drugiej strony to metody, które wykonują operacje na tych danych W obiekcie można kontrolować dostęp do jej składników. Dane obiektu atrybuty Zachowania obiektu - metody
Klasy Klasa działa jak szablon do tworzenia obiektów. Wszystkie obiekty tej samej klasy zawierają te same metody i te same zmienne instancji. Klasa jest konstrukcją logiczną, a obiekt jest zdolny do wykorzystywania czynności wykorzystywanych przez klasę. Obiekt klasy instancja klasy
Interfejs a implementacja
Interfejs Interfejs składa się z usług, z których może korzystać użytkownik końcowy. W idealnej sytuacji udostępniane są tylko te usługi, które są niezbędne. ZASADA MINIMALNEGO INTERFEJSU Interfejs klasy powinien składać się wyłącznie z tego co jest użytkownikowi potrzebne
Implementacja Szczegóły implementacyjne są ukryte przed użytkownikiem ZMIANA W IMPLEMENTACJI KLASY NIE POWINNA POWODOWAĆ KONIECZNOŚCI WPROWADZANIA ZMIAN W KODZIE, KTÓRY Z NIEJ KORZYSTA Jeden z najważniejszych celów projektowych Dobrze zaprojektowany interfejs!!! Niezbędny warunek: wymagania interfejsu musi spełniać zarówno użytkownik jak i implementacja.
Abstrakcja Kiedy obiekt (lub system) jest określony lub przedstawiony w prostszy, mniej szczegółowy sposób niż rzeczywisty odpowiednik, taką specyfikacją nazywa się abstrakcją. Tylko właściwości, które są częścią określonego obiektu Abstrakcja a interfejs klas.
Hermetyzacja Hermetyzacja mechanizm ukrywania zmiennych instancji i nieistotnych metod klasy przed innymi obiektami. Eksponowane są tylko te metody, które są niezbędne do zastosowania obiektu klasy Hermetyzacja powoduje powstanie warstwy, której zadaniem jest komunikowanie się ze światem zewnętrznym. Świat zewnętrzny może komunikować się z obiektem tylko przez tę powłokę Tę warstwę ochronną, która powinna zawierać tylko metody określa się mianem interfejsu.
Modyfikatory dostępu private ukrywanie metody i zmiennych instancji przed innymi obiektami public udostępnianie innym obiektom Metody private mogą być wywoływane tylko przez metody należące do tego samego obiektu metody pomocnicze/usługowe.
Uwagi o hermetyzacji Uwzględnienie warstwy abstrakcji programista nie musi znać szczegółów realizacji danej klasy Oddzielenie interfejsu od jego realizacji można ulepszyć realizację, przy zachowaniu interfejsu Otoczenie obiektu ochronnym opakowaniem ochrona przed niepożądanym dostępem Dostęp do zmiennych instancji powinien zawsze odbywać się przez metodę (lub własności)
Metody pobierające i ustawiające Koncepcja ukrywania danych metody pobierające i ustawiające. gettery/settery akcesory/mutatory Udostępniany jest interfejs metod a nie szczegóły implementacji. private string title; public string Title { get { return title; } set { title = value; } }
Anatomia klasy Klasa dostarcza projektu do tworzenia obiektu. Klasa jest uogólnieniem obiektu z realnego świata. Szablon pojedynczej klasy może być wykorzystany do tworzenia wielu obiektów, które wszystkie dzielą cechy specyficzne dla tej pojedynczej klasy. Składowe klasy, są elementami języka tworzącymi wnętrze klasy: Składowe danych zmienne instancji zmienne statyczne Składowe funkcyjne metody konstruktory
Anatomia klasy Zmienne instancji (pola) - używane do reprezentowania danych opisujących obiekty - przynależy do pojedynczej instancji - powinien charakteryzować każdy obiekt Zmienne statyczne (klasy) - dane skojarzone z całą grupą obiektów danej klasy - jedna zmienna przyporządkowana wszystkim obiektom
Anatomia klasy Metody instancji - jest wykonywana w związku z określonym obiektem, potrzebuje obiektu, aby była wykonywana Metoda statyczna jest wykonywana w związku z klasą i nie potrzebuje pojedynczego obiektu. Wszystkie obiekty współdzielą tylko jedną kopię każdej metody instancji Metody, które nie wskazują dokładnie na jeden obiekt, powinny być statyczne. W niektórych wypadkach należy użyć metody statycznej, aby umożliwić dostęp do statycznej zmiennej składowej. Nie mamy wprost dostępu i nie możemy wywołać zmiennych instancji i metod instancji z wnętrza metod statycznych tej samej klasy.
Klasa - UML Osoba +Imie : string +Nazwisko : string +RokUrodzenia : int -Pensja : double +SetPensja() +GetPensja() : double +Urlop() Nazwa klasy Zmienne instancji Metody instancji