Obiektowe modelowanie systemów informatycznych



Pobieranie 8,01 Mb.
Strona2/113
Data23.10.2017
Rozmiar8,01 Mb.
1   2   3   4   5   6   7   8   9   ...   113

Reprezentacja nierelacyjna


Rozpatrzymy poprzedni przykład w środowisku nierelacyjnym. Zakładamy, że te środowisko ma następujące cechy:

  1. Deklaracje typów danych są tak elastyczne jak C++ lub innym języku programowania.

  2. Obiekty mogą być identyfikowane unikatowo niezależnie od ich wartości. Służą temu identyfikatory obiektów, umożliwiające odwołania między obiektami.

  3. Możliwe jest ponowne użycie informacji przez:

  • Odwoływanie się do obiektów z różnych miejsc, a więc nowe informacje mogą być zestawiane z informacji istniejących. Inaczej mówiąc, nowe obiekty są tworzone z obiektów istniejących, które stają się ich składnikami i mogą być traktowane jako podobiekty; technika ta nosi nazwę agregacji lub, czasem asocjacji.

  • Definiowanie specjalizacji między pewnymi informacjami przez dziedziczenie struktury i zachowanie.

Baza danych firmy może być opisana w następujący sposób:

Firma : [

Nazwa: String,

Centrala: Adres,

Oddziały: { Oddział},

Dyrektor: Pracownik ]

Oddział: [

Nazwa: String,

Biuro: Adres,

Kierownik: Pracownik,

Pracownicy: {Pracownik}]

Adres: [


Ulica: String,

Miejscowość: String]

W powyższych definicjach zastosowane są notacje: [...] – typ krotkowy, {...} – typ zbiorowy. Dla definicji firmy jest wykorzystana agregacja. Firma składa się z łańcucha znaków (Nazwa), obiektu typu Adres (Centrala), zbioru obiektów z elementami typu oddział (Oddziały) oraz z obiektu typu Pracownik (Dyrektor). Trzeba podkreślić, że odwołanie jest realizowane bezpośrednio do nazwy danego typu. W wyniku tego dla konkretnej firmy wartość atrybutu „Centrala” stanowi odwołanie do konkretnego obiektu typu Adres, wartość atrybutu Dyrektor jest odwołaniem do obiektu typu Pracownik. Identyfikatory obiektów potrzebne w takim schemacie odwołań mogą być zrealizowane za pomocą nazw unikatowych na poziomie logicznym lub za pomocą adresów (wirtualnych) na poziomie przechowywania. W porównaniu z modelem relacyjnym nie ma tu potrzeby dodawania kluczy obcych FOREIGN KEY, ponieważ atrybuty są powiązane z nazwanymi typami.

Niżej są wyznaczone pracownicy firmy. Każdy pracownik jest specjalizacją osoby:

Osoba: [

Nazwisko: String,

Wiek: Integer,

MiejsceZam: Adres,

Tabor: {Pojazd}]

Pracownik is-a Osoba: [

Kwalifikacje: {String},

Wynagrodzenie: Integer,

Rodzina: {Osoba}]

Tutaj, poprzez dziedziczenie, struktura „Osoba” jest ponownie użyta dla pracowników. Dlatego wszystkie atrybuty zdefiniowane dla osoby - „Nazwisko”, „Wiek”, „MiejsceZam”, „Tabor” – są również zdefiniowane dla pracownika, oprócz atrybutów, które są dla niego specyficzne – „Kwalifikacje”, „Wynagrodzenie” i „Rodzina”. W sposób analogiczny jest opisana informacja dotycząca pojazdu:

Pojazd: [

Model: String,

Producent: Firma,

Kolor: String]

Samochód is-a Pojazd: [

Napęd: NapędPojazdu,

Nadwozie: String]

NapędPojazdu : [

Silnik: SilnikSpalinowy,

SkrzyniaBiegów: String]

SilnikSpalinowy: [

Moc: Integer,

Pojemność: Integer]

Dla definicji polecenia, wywalającego dani pro pracownika o nazwisku „Kowalski”, który jest zatrudniony w oddziale „Koszalin” firmy „Emka” w obiektowej adaptacji trzeba zapisać:

SELECT e.Nazwisko, e.Wiek, e. MiejsceZam, e.kwalifikacje, e. Wynagrodzenie, e.Rodzina(0).Wiek

FROM e IN Pracownik, c IN Firma, s IN Oddział

WHERE c.Nazwa =’Emka’ AND

s IN c.Oddziały AND

s.Biuro.Miejscowość = ‘Koszalin’ AND

e IN s.Pracownicy AND

e.Nazwisko = ‘Kowalski’

Obiektowe modelowanie systemów informatycznych.

Zasady obiektowości


Stworzenie oprogramowania systemów informatycznych może być realizowane przez następne sposoby:

  • Proceduralny,

  • Predykatywny,

  • Obiektowy.

Proceduralny sposób jest skierowany na przedstawienie programu jako mnóstwa procedur, które są wywoływane w wyznaczonej kolejności. Proceduralny sposób jest skojarzony z projektowaniem strukturalnym. Głównym etapem projektowania strukturalnego jest dekompozycja funkcjonalna. Wadami projektowania strukturalnego są:

  • Niemożliwość przekazywania odpowiedzialności do innych komponent funkcjonalnych;

  • Problemy z obsługą zmian w projektu;

  • Problemy z zabezpieczeniem danych globalnych przez nieprawidłowo działające funkcji.

Dekompozycja funkcjonalna stanowi naturalne podejście do każdego złożonego problemu. Jednym z problemów związanych ze stosowaniem dekompozycji funkcjonalnej jest to, że prowadzi ona do powstania jednego programu „głównego” odpowiedzialnego za kontrolowanie wszystkich podprogramów. Jest to naturalny rezultat podziału dużych funkcji na mniejsze, niemniej jednak metoda ta nakłada na program główny zbyt dużą odpowiedzialność- musi on zapewnić, że wszystko będzie działać poprawnie, jak również koordynować pracę funkcji i wywołać je w odpowiedniej kolejności, dlatego też zastosowanie dekompozycji funkcjonalnej często powoduje powstanie bardzo złożonego kodu.

Predykatywny sposób jest skierowany na realizację celu za dopomogą teorii predykatów oraz na realizację reguł typu „If - Then” . W ten sposób realizują się systemy ekspertowe.

Obiektowy sposób jest skierowany na przedstawieniu programu jako mnóstwa obiektów, które komunikują pomiędzy sobą.

Teraz nie można wyznaczyć sposób najlepszy we wszystkich dziedzinach praktycznego zastosowania. Każdy sposób ma swoje zalety. Razem z tym sposób obiektowy może być wykorzystany w dużej ilości przypadków. Przy wykorzystaniu sposobu proceduralnego programista tworzy procedury, które w celu realizacji zadań muszą wywołać jedna drugą. Każda procedura realizuje swój algorytm obróbki danych. Przy wykorzystaniu sposobu obiektowego programista tworzy obiekty programowe z wyznaczonym zachowaniem oraz reakcją na zdarzenia zewnętrzne. Te obiekty współdziałają między sobą, realizują zadania, otrzymają oraz dostarczają dani do innych obiektów.

Z programowaniem obiektowym jest skojarzone projektowanie obiektowe. Programowanie jest skierowane do prawidłowego oraz skutecznego wykorzystania wyznaczonych języków oprogramowania. Projektowanie obiektowe zawiera analizę oraz konstruowanie systemu w wyglądu zbioru obiektów, które połączone między sobą.

Projektowanie dowolnego systemu potrzebuje wykorzystania technik dekompozycji – to znaczy rozdzielenia złożonego systemu na odrębne komponenty. Istnieją dwa główne schematy dekompozycji: dekompozycja algorytmiczna oraz dekompozycja obiektowa.

Dekompozycja algorytmiczna polega na rozdzieleniu złożonego procesu na odrębne czynności lub algorytmy. Ta dekompozycja wykorzysta się przy projektowaniu programów dla komputerów w sposób proceduralny.

Dekompozycja obiektowa zawiera rozdzielenie systemu komplikowanego na oddzielne autonomiczne komponenty, które są obiektami światu rzeczywistego (lub wirtualnego). Te komponenty nazywają się prosto obiektami. Obiekt zawiera opis czynności oraz dane, które są skojarzone tylko z tym obiektem.

Dekompozycja obiektowa systemów informatycznych zawiera następne zasady:


  • Abstrakcja (abstraction)

  • Hermetyzacja lub kapsułkowanie (encapculation)

  • Modularność (modularity)

  • Hierarchia (hierarchy).

Abstrakcja

Abstrakcja jest:



  • ukrycie lub pominięcie mniej istotnych szczegółów rozważanego przedmiotu lub mniej istotnej informacji;

  • wyodrębnianie cech wspólnych i niezmiennych dla pewnego zbioru bytów oraz wprowadzanie pojęć lub symboli oznaczających takie cechy.

Aparat abstrakcji jest wygodne narzędzie dla modelowania złożonych systemów (i nie tylko informatycznych !). Przy stworzeniu pojęcia w ramach wyznaczonego zadania skupimy się tylko na istotnych właściwościach konkretnego obiektu oraz wyabstrahujemy od nie istotnych. Na przykład, w abstrakcji „Zegarek” wyróżniamy tylko właściwość „Czas” oraz wyabstrahujemy od formy tego zegarku, producenta itd.

Każda abstrakcja zawiera formowanie wyznaczonych właściwości obiektu, które wyróżniają go od innych. Abstrakcja skupi się na zewnętrznej prezentacji obiektu oraz pozwoli oddzielić główne cechy zachowania obiektu od go realizacji.

Przykład abstrakcji. Przepuszczamy trzeba stworzyć program komputerowy dokładnie symulujący działanie stosu atomowego. Ten program musi zawierać wystarczająco wiele informacji, aby móc uwzględniać, co się zdarzy, gdy dyspozytor będzie kierował procesami w stosie. Ale dla tego rodzaju programu zapewne nieważny okaże się typ oraz numer fabryczny generatora elektrowni, więc można go odfiltrować.

Hermetyzacja lub kapsułkowanie

Hermetyzacja oraz abstrakcja są wzajemne dopełniające pojęcia.

Hermetyzacja lub kapsułkowanie to jest:


  • zamknięcie pewnego zestawu bytów programistycznych w „kapsule” o dobrze określonych granicach;

  • oddzielenie abstrakcyjnej specyfikacji tej kapsuły od jej implementacji;

  • ukrycie części informacji zawartej w tej kapsule dla operacji z zewnątrz obiektu. Abstrakcja skupi się na zewnętrznym zachowaniu obiektu oraz hermetyzacja kryje realizację tego zachowania.

Przykład kapsułkowania. Telewizor prezentuje różne programy telewizyjne. Szczegóły operacji, które potrzebne dla wyświetlania tych programów są ukryte dla użytkownika.

Są rozliczone dwie koncepcji hermetyzacji: hermetyzacja ortodoksyjna oraz hermetyzacja ortogonalna.

W hermetyzacji ortodoksyjnej wszelkie operacje, które można wykonać na obiekcie, są określone przez metody przypisane do obiektu (znajdujące w jego klasie i nadklasach); bezpośredni dostęp do atrybutów obiektów jest niemożliwy. Oznacza to często, że każdy atrybut obiektu musi być wyposażony w dwie metody: CzytajWartość( ) i ZmieńWartość( ); takie założenie przyjmuje np. Standard CORBA.

W hermetyzacji ortogonalnej (C++, Java) dowolny atrybut obiektu i dowolna metoda mogą być prywatnymi (niedostępnymi z zewnątrz) lub publicznymi.



Modularność

Modularność to jest możliwość dekomponowania systemu na części o dobrze określonych granicach oraz o dobre wyspecyfikowanym interfejsie pomiędzy poszczególnymi częściami.

Modularność pozwoli zgrupować logiczne zależne abstrakcje w jedyny moduł.

Hierarchia

Hierarchia jest przeznaczona dla formowania z różnych abstrakcji struktury hierarchicznej systemu. Taka struktura upraszcza system oraz projekt tego systemu pozostaje zrozumiałym dla projektanta tak i dla użytkownika.

Hierarchia jest wykorzystywana na różnych poziomach opisu systemu. W systemach obiektowych są dwa typy hierarchii:


  • Dziedziczenie – związek typu „jest” („is a” – hierarchia)

  • Agregacja – związek typu „część” („part of” - hierarchia).

Dziedziczenie to jest związek pomiędzy klasami obiektów określający przekazywanie cech (definicji atrybutów, metod, itd.) z nadklasy do jej podklas. Np. Obiekt klasy „Pracownik” dziedziczy wszystkie własności (definicji atrybutów, metody) określone w ramach klasy „Osoba”. Dziedziczenie jest podstawowym mechanizmem sprzyjającym ponownemu użyciu wyznaczonej abstrakcji („Osoba”) w innych abstrakcjach („Pracownik”).

Agregacja to jest związek pomiędzy klasami obiektów, modelujący stosunek całości do jej części (np. stosunek samochodu do kół i silnika). Obiekty są powiązane związkiem agregacji, jeżeli jeden z nich można uważać za część drugiego, zaś cykl i czas życia tych obiektów są jednakowe. Agregacja jest dużo korzystna w wykorzystaniu razem z dziedziczeniem:



  1. Agregacja realizuje fizyczne grupowania struktury obiektów

  2. Dziedziczenie pozwala na wielokrotnie wykorzystywanie tej struktury.





1   2   3   4   5   6   7   8   9   ...   113


©operacji.org 2017
wyślij wiadomość

    Strona główna