Projektowanie i programowanie obiektowe II - Wykład I dr inż. Wojciech Tarnawski e-mail:wojciech.tarnawski@pwr.wroc.pl www.pwsz.legnica.edu.pl/~tarnawskiw Copyright by Wojciech Tarnawski
Cel przedmiotu (wykład + lab.): Zapoznanie z metodami projektowania i analizy obiektowo zorientowanych systemów informatycznych. (podstawy modelowania obiektowego i notacji graficznej w ujednoliconym języku modelowania UML - Unified Modeling Language, niezależnie od konkretnego języka programowania) Copyright by Wojciech Tarnawski
Literatura Oprogramowanie P. Coad, E. Yourdon, Analiza obiektowa, Oficyna Wydawnicza READ ME, Warszawa 1994. P. Coad, E. Yourdon, Projektowanie obiektowe, Oficyna Wydawnicza READ ME, Warszawa 1994. M. Flasiński, Wstęp do analitycznych metod projektowania systemów informatycznych, WNT Warszawa 1997. J. Grębosz, Symfonia C++ t. III, Oficyna Wydawnicza Kallimach, Kraków 1996. Gamma Erich, Helm Richard, Johnson Ralph, Vlissides John, Wzorce projektowe, seria Inżynieria oprogramowania Oprogramowanie STAR UML ObjectIf Środowisko MS Visual 2005-2008 … Copyright by Wojciech Tarnawski
Plan przedmiotu Wprowadzenie, przegląd i porównanie stosowanych technik programowania, podstawowe koncepcje programowania obiektowego: abstrakcja, modularność i hermetyzacja, relacyjność, typowanie, współbieżność Analiza i identyfikacja zachowań systemu obiektowo zorientowanego Projektowanie systemu obiektowo zorientowanego przy pomocy języka modelowania UML (języka graficznego (grafów, diagramów) do modelowania różnych perspektyw systemu informatycznego) Wzorce projektowe – teoria i praktyka Copyright by Wojciech Tarnawski
Przegląd technik programowania (wg historycznej hierarchii): Programowanie liniowe (BASIC, ASSEMBLER, ...) Programowanie proceduralne (Pascal, C, Fortran,...) Programowanie z ukrywaniem danych (C, Pascal - wprowadzenie pojęć: rekord, struktura) Programowanie oparte o obiekty (C++, Object Pascal - wprowadzenie pojęć: klasa, obiekt) Programowanie obiektowo zorientowane lub programowanie obiektowe (C++, SmallTalk, Java - wprowadzenie pojęć: dziedziczenie, polimorfizm (funkcje wirtualne) ) Copyright by Wojciech Tarnawski
Podstawowe koncepcje i pojęcia programowania obiektowego ABSTRAKCJA - zasada ignorowania tych aspektów przedmiotu, które nie są istotne z punktu widzenia bieżącego problemu, by móc pełniej skoncentrować się na właściwych. Programowanie obiektowe = modelowanie świata rzeczywistego na wysokim poziomie abstrakcji (np. C++ - język wysokiego poziomu, gdzie program widziany jest jako sekwencja instrukcji operujących na pojęciach (danych) z dziedziny problemu (liczby, znaki, obiekty). Copyright by Wojciech Tarnawski
Formowanie klasy i obiektu ABSTRAKCJA DANYCH- zasada polegająca na zdefiniowaniu nowego typu danych tzw. KLASY, która jak najlepiej odzwierciedla fragment otaczającego nas świata wraz z operacjami, które możemy na tych danych zrealizować. WNIOSEK: Stosując abstrakcję danych projektant systemu obiektowo zorientowanego może zdefiniować pewien wycinek rzeczywistości (klasę) przez skoncentrowanie się na pewnym zasadniczym pojęciu (problemie) ignorując szczegóły. Klasa opisana składa się ze składników: tj. atrybutów (pól) oraz operacji (metod), które mają wyłączność na operowanie tymi atrybutami. Podając określone szczegóły (np. nadając wartości atrybutom klasy) opisujemy OBIEKT, czyli element danej klasy Copyright by Wojciech Tarnawski
- stan obiektu (stan wewnętrzny) - wartości atrybutów obiektów (pola) OBIEKTEM (instancją, przejawem), nazywamy element należący do pewnej dziedziny (klasy), który jest specyfikowany w tej dziedzinie przez: - stan obiektu (stan wewnętrzny) - wartości atrybutów obiektów (pola) - sposób zachowania - interakcje z innymi obiektami (także innych klas) - tożsamość unikatową - każdy obiekt w systemie posiada unikalny identyfikator Copyright by Wojciech Tarnawski
Przykład formowania klasy i obiektu Przypadek ze świata realnego: audycja telewizyjna typu talk-show o tytule: „Szymon Majewski Show” z poniedziałku 12.12.2005 Audycja jest nagrywana, emitowana i oglądana przez widzów Do uformowania klasy i obiektu potrzebujemy np.: tytułu - „Szymon Majewski Show” czasu emisji - poniedziałek, 12.12.2005, godz. 21:30 kto był zaproszony - Doda Elektroda, ... ... Copyright by Wojciech Tarnawski
Klasa: audycja telewizyjna typu talk-show nr audycji czas emisji OBIEKT Klasa: audycja telewizyjna typu talk-show nr audycji czas emisji kto był zaproszony ... zmodyfikuj czas emisji zmień zaproszonych gości Obiekt: „Szymon Majewski Show” 23 poniedziałek, 12.12.2005, godz. 21:30 Doda Elektroda,... Zmiana z 21:30 na 22:00 zmień Dodę na Mandarynę Nazwa Atrybuty Operacje Copyright by Wojciech Tarnawski
Każda klasa musi mieć nazwę, która ją jednoznacznie identyfikuje Atrybut to nazwana właściwość klasy, określa zbiór wartości, jakie mogą przyjmować obiekty klasy. Operacje to implementacje pewnej usługi, której wykonania można zażądać od każdego obiektu tej klasy. Operacje możemy określić także przy pomocy tzw. Sygnatury : nazwy i listy parametrów Przykład sygnatury: zmodyfikuj czas emisji (string godzina) Podstawowe rodzaje operacji realizowanych przez obiekty: - konstrukcja (tworzenie) obiektu - modyfikacja stanu obiektu - selekcja (udostępnienie informacji o obiekcie) - iteracja ( sekwencyjny dostęp do składowych obiektu) - destrukcja (niszczenie) obiektu Operacje charakteryzujemy przy pomocy: warunków wstępnych, semantyki (opis przebiegu), warunków końcowych, sytuacji wyjątkowych Copyright by Wojciech Tarnawski
Podział obiektów ze względu na ich związki operatorowe z innymi obiektami w systemie obiektowo zorientowanym: Aktorzy - obiekty, które dokonują operacji na innych obiektach, ale nigdy nie podlegają operacjom ze strony innych obiektów Serwery - obiekty podlegające operacjom ze strony innych obiektów i nie operujące na innych obiektach Agenci - obiekty, które operują na innych obiektach i mogą być przedmiotem operacji ze strony innych obiektów Inne uwagi: klasa może mieć dowolną liczbę atrybutów, a nawet nie mieć ich wcale symbol klasy nie musi zawierać wszystkich atrybutów i operacji, jeśli jest ich wiele (wtedy w odpowiedniej sekcji na końcu umieszczamy wielokropek Copyright by Wojciech Tarnawski
Rodzaje hermetyzacji składowych klasy: MODULARNOŚĆ (enkapsulacja=„kapsułkowanie”) cecha umożliwiająca utrzymanie razem powiązanych ze sobą składników obiektu. Dzięki kapsułkowaniu otrzymujemy pewien moduł zawierający dane i metody na nich operujące. TYPOWANIE - pojedynczy obiekt jest określonego typu (obiekt z danej klasy) HERMETYZACJA (widoczność składników klasy, ukrywanie informacji zawartych w klasie) - wynikająca z abstrakcji danych cecha zapewniająca bezpieczeństwo obiektowi (jego składnikom), uniemożliwiająca dostęp z zewnątrz poprzez inne obiekty Rodzaje hermetyzacji składowych klasy: - składowe publiczne (+) : widzialne dla wszystkich innych obiektów klas widzialnych z danej klasy - składowe chronione (#): widzialne tylko dla obiektów podklas tej klasy (p. dziedziczenie) - składowe prywatne (-): najbardziej „intymny” obszar klasy, który nie jest widzialny przez obiekty innych klas. Istnieje możliwość dopuszczenia składowych prywatnych danego obiektu dla innych obiektów przez tzw. „zaprzyjaźnienie” Copyright by Wojciech Tarnawski
Wyróżniamy następujące rodzaje związków (relacji): Relacyjność (hierarchizacja) - cecha umożliwiająca podanie relacji (związków, hierarchii) między obiektami z wcześniej zdefiniowanych klas. Wyróżniamy następujące rodzaje związków (relacji): - powiązanie (agregacja, komunikacja) - uogólnienie (dziedziczenie) - zależność (związek użycia) Szersze omówienie w dalszej części wykładu Copyright by Wojciech Tarnawski
Ze względu na współbieżność modelowane systemy dzielimy na: WSPÓŁBIEŻNOŚĆ - możliwość konstrukcji systemu informatycznego w oparciu o system wieloprocesorowy lub wielowątkowy Ze względu na współbieżność modelowane systemy dzielimy na: - systemy sekwencyjne: w danym momencie mamy do czynienia z jednym obiektem, który jest czynny, pozostałe są nieczynne. Aktywacja innego obiektu następuje po przesłaniu komunikatu od obiektu czynnego - systemy współbieżne: więcej niż jeden obiekt może być czynny w danym momencie, obiekty takie są przez cały czas czynne i nie potrzebują aktywacji z zewnątrz. Copyright by Wojciech Tarnawski
System obiektowy Model logiczny Model fizyczny Model klas Model dynamiczny Model funkcjonalny Opisuje zachowanie się systemu w czasie, umożliwia definicję wzajemnej współpracy i komunikacji między obiektami Opisuje wszystkie możliwe stany obiektów i związane z nimi zdarzenia (cykle życiowe obiektów) Opisuje: Tożsamość Atrybuty Operacje Związki Copyright by Wojciech Tarnawski
Projektowanie systemów informatycznych obiektowo zorientowanych (plan projektu) 1. Identyfikacja zachowań systemu 2. Identyfikacja klas obiektów występujących w systemie 3. Klasyfikacja obiektów - pod względem dziedziczenia ( związek uogólniania) - pod względem zawierania się w sobie (powiązanie:agregacja) 4. Określenie powiązań komunikacji i związków użycia między obiektami ze zdefiniowanych klas. 5. Precyzyjna specyfikacja składowych klas (atrybutów i operacji) 6. Składanie modelu logicznego - określenie sekwencji działań obiektów (model funkcjonalny, model dynamiczny, przesyłanie komunikatów) Copyright by Wojciech Tarnawski
Ad. 1 Identyfikacja zachowań systemu (usystematyzowanie wiedzy o problemie) A) Przedstawienie krótkiego streszczenia. Powinno ono zawierać jasne i zwięzłe podanie tego, co chce się zaprojektować, czyli cel przedsięwzięcia, motywację, genezę itp. B) Analiza wymagań użytkownika . Szczegółowy opis rzeczywistości (tzw. „scenariusz działania”), którą zamierzamy informatyzować, np. w formie eseju lub w postaci wypunktowanej. Określamy podstawowe założenia projektowe. Jeśli informatyzujemy tylko część systemu, to powinniśmy określić jego miejsce, jakie zajmuje on w całej architekturze. W szczególności opisujemy komunikację z resztą systemu. Copyright by Wojciech Tarnawski