• Nie Znaleziono Wyników

Analiza obiektowa Analiza obiektowa

N/A
N/A
Protected

Academic year: 2021

Share "Analiza obiektowa Analiza obiektowa"

Copied!
11
0
0

Pełen tekst

(1)

OBIEKTOWE METODY INŻYNIERII OPROGRAMOWANIA

© UKSW, WMP. SNS, Warszawa 1 2

Obiektowe metody inżynierii oprogramowania

1. Analiza obiektowa (OOA –

Object Oriented Analysis) 2. Projektowanie obiektowe (OOD –

Object Oriented Design) 3. Programowanie obiektowe (OOP –

Object Oriented Programming)

Peter Coad, Edward Yourdon

© UKSW, WMP. SNS, Warszawa

ANALIZA OBIEKTOWA

© UKSW, WMP. SNS, Warszawa 3 4

Analiza obiektowa

Analiza obiektowa

służy zbudowaniu modelu rzeczywistości wg pewnych zasad.

Trzymanie się tych zasad:

• daje spójną reprezentację stanowiącą podstawę analizy (co budować) i projektowania (jak budować),

• pozwala na identyfikację wspólnych cech atrybutów i usług,

• pozwala na budowę specyfikacji poddających się zmianom,

• pozwala na powtórne wykorzystanie wyników analizy dla rodzin systemów,

• pozwala na lepsze wzajemne zrozumienie analityka i eksperta w danej dziedzinie zastosowania.

© UKSW, WMP. SNS, Warszawa

5

Analiza obiektowa

Zarządzanie złożonością w analizie:

• Przyjęcie powszechnie stosowanych metod organizacji – tworzenie klas obiektów i rozróżnianie ich; rozróżnienie między obiektem a jego atrybutami; rozróżnienie między całym obiektem a jego składowymi.

Abstrakcja proceduralna

– pomijanie niektórych szczegółów rzeczy lub procesów wybierając tylko pewną istotną część na danym poziomie uogólnienia; definiujemy atrybuty oraz usługi, które mają wyłączność na manipulowanie tymi atrybutami.

© UKSW, WMP. SNS, Warszawa 6

Analiza obiektowa

Zarządzanie złożonością w analizie:

• Hermetyzacja – zasada używana przy budowie całościowej struktury programu:

– każda składowa programu powinna zamykać w sobie jedną decyzję projektową;

– styk z każdym modułem powinien być zdefiniowany tak, aby odkrywać możliwie mało ze swej wewnętrznej struktury.

• Dziedziczenie

– uproszczenie definicji klas podobnych do już definiowanych przez wykorzystanie tych zdefiniowanych w definicji nowych;

– opisuje generalizację i specjalizację czyniąc wspólne atrybuty i usługi jawnymi wewnątrz hierarchii klas.

© UKSW, WMP. SNS, Warszawa

(2)

7

Zarządzanie złożonością w analizie:

• Skojarzenie

– wiązanie ze sobą idei podobnych lub rzeczy które zdarzają się w tym samym czasie lub w podobnych okolicznościach.

• Komunikaty

– porozumiewanie się między obiektami.

• Skala

– pokazanie relacji między obiektami (części do całości) dla wyobrażenia sobie np. dużego lub bardzo małego obiektu.

© UKSW, WMP. SNS, Warszawa 8

Zarządzanie złożonością w analizie:

• Kategorie zachowania – reakcja na zdarzenie,

– zachowanie ze względu na podobieństwo ewolucji (zmiany w czasie),

– zachowanie ze względu na podobieństwo funkcji.

© UKSW, WMP. SNS, Warszawa

9

Analiza obiektowa

Metody analizy:

1. inne niż obiektowe

– Rozkład funkcjonalny

– Metoda przepływu danych (Data Flow Diagrams) – Modelowanie informacji (Entity Relationship Diagrams)

2. podejście obiektowe

© UKSW, WMP. SNS, Warszawa 10

Analiza obiektowa

Rozkład funkcjonalny (nieobiektowy)

Dekompozycja algorytmiczna –

podział algorytmu na odrębne czynności: każdy projektowany moduł programowy systemu określa znaczący krok w procesie przetwarzania.

© UKSW, WMP. SNS, Warszawa

11

Analiza obiektowa

Metoda przepływu danych (Data Flow Diagrams) (nieobiektowy)

Graficzna prezentacja, tzw.

diagram przepływu danych w procesie;

zawiera następujące rodzaje elementów:

- funkcje (procesy), - magazyny danych, - źródła i odbiorcy, - przepływy (znaki pokazujące

kierunek przesyłu danych)

© UKSW, WMP. SNS, Warszawa 12

Analiza obiektowa

Modelowanie informacji (Entity Relationship Diagrams) (nieobiektowy)

Graficzna prezentacja logicznej struktury danych w bazie danych.

Występujące pojęcia: encje (grupy lub kategorie danych) oraz atrybuty (podgrupy wewnątrz encji)).

Relacje wewnątrz modelu:

1. Obowiązkowe 2. Opcjonalne 3. Wielu-do-wielu 4. Jeden-do-wielu 5. Jeden-do-jeden 6. Rekurencyjne

© UKSW, WMP. SNS, Warszawa

(3)

13

Analiza obiektowa

Modelowanie informacji (Entity Relationship Diagrams) (nieobiektowy)

Graficzna prezentacja logicznej struktury danych w bazie danych:

© UKSW, WMP. SNS, Warszawa

kierowca posiada Prawo jazdy

PESEL

adres

imię nazwisko

1 1

Data i miejsce urodzenia

Data wydania

Data ważności

Organ wydający numer

kategorie

14

Analiza obiektowa

Podejście obiektowe

Rodzaj dekompozycji, w której zamiast wyszczególniać czynności wyodrębnia się obiekty, na których dokonywane mogą być operacje.

Różnice:

 Dekompozycja algorytmiczna – opisuje kolejność czynności

 dekompozycja obiektowa – opisuje uczestniczące w czynnościach obiekty oraz wzajemne oddziaływanie obiektów na siebie.

Dekompozycja algorytmiczna i obiektowa są sobie przeciwstawne – nie można ich przeprowadzić jednocześnie.

© UKSW, WMP. SNS, Warszawa

15

Analiza obiektowa

Podejście obiektowe – składowe modelu:

• Pojęcia

• Obiekty

• Związki miedzy pojęciami

• Atrybuty obiektów

• Usługi obiektów

• Komunikaty między obiektami

© UKSW, WMP. SNS, Warszawa 16

Analiza obiektowa

Pojęcia – są środkiem służącym do rozpoznawania:

• Materialne – osoba, ołówek, samochód

• Niematerialne – czas, jakość, firma

• Role – doktor, pacjent, właściciel

• Opinie – wydajna praca, wysoka płaca, dobry przykład

• Relacyjne – małżeństwo, posiadanie

• Zdarzenia – sprzedaż, zakup, załamanie rynku

• Inne – zestaw, liczba, ikona, obraz, sygnał, proces

Pojęcia pozwalają nadać znaczenie obiektom w naszym świecie.

© UKSW, WMP. SNS, Warszawa

17

Analiza obiektowa

Trójka pojęciowa

:

1. Symboliczna reprezentacja, np. : nazwa, ikonka, znaczek 2. Intensja – treść pojęcia, pełna definicja pojęcia

3. Ekstensja – zakres pojęcia, zbiór wszystkich rzeczy i wyobrażeń abstrakcyjnych, do których stosuje się dane pojęcie.

© UKSW, WMP. SNS, Warszawa

18

Analiza obiektowa

Typ obiektowy

– opis obiektu z jednolitym zbiorem atrybutów i usług, zawierający opis tworzenia nowych obiektów w klasie Obiekty

– coś, do czego da się zastosować jakieś pojęcie.

Obiekt jest egzemplarzem pojęcia (instancją).

Struktura i zachowanie obiektu są określone przez pojęcia, które się do niego odnoszą:

Pojęcie  typ obiektowy

Obiekt to kapsułka ze zdefiniowanymi wartościami atrybutów i wyłącznie na nich działającymi usługami. Większość obiektów istnieje tylko przez pewien okres.

© UKSW, WMP. SNS, Warszawa

(4)

19

Struktury - związki między typami obiektowymi

Odwzorowania:

np. „zatrudnia” przypisuje obiekt typu „organizacja” związanym z nim obiektom typu „zatrudniony”. Odwzorowania mogą być jedno- lub wielowartościowe.

1. A jest zawsze związane z jednym B

2. A jest zawsze związane z jednym lub wieloma B 3. A jest zawsze związane z żadnym lub tylko jednym B 4. A jest zawsze związane z żadnym, jednym lub wieloma B

© UKSW, WMP. SNS, Warszawa 20

Struktury - związki między typami obiektowymi

Relacje:

Mogą obejmować kilka typów obiektów,

np. „umowa o prace” jest typem związków, którego krotki są niezmiennymi parami obiektów typu „osoba”

i „organizacja”

© UKSW, WMP. SNS, Warszawa

21

Analiza obiektowa

Struktury - podtypy i nadtypy obiektów:

Podtyp – typ obiektowy, którego zbiór wszystkich elementów zawiera się w większym zbiorze, oraz definicja jest bardziej wyspecjalizowana niż definicja innego typu

Nadtyp - typ obiektowy, którego zbiór zawiera wszystkie elementy jednego lub więcej typów, oraz definicja jest ogólniejsza niż definicja innych typów

Np.: organizm – zwierzę – ssak - pies

© UKSW, WMP. SNS, Warszawa 22

Analiza obiektowa

Atrybuty – dane (stan systemu), dla których każdy obiekt ma swoją własną wartość

Każdy typ obiektowy jest opisany przez atrybuty.

Atrybuty są szczegółowo opisane w specyfikacji obiektu.

Atrybuty opisują wartości trzymane w obiekcie, aby wyłącznie usługi tego obiektu mogły nimi manipulować. Atrybuty i specjalne usługi na nich działające traktujemy jako nierozłączną całość.

Jeżeli inny obiekt chce odczytać wartości w obiekcie lub działać na nich w inny sposób, musi zrobić to poprzez specyfikację powiązania odpowiadającego komunikatowi, który spowoduje realizację usługi zdefiniowanej dla tego projektu.

© UKSW, WMP. SNS, Warszawa

23

Analiza obiektowa

Definiowanie usług

Usługa – zdefiniowane zachowanie obiektu, które jest on zobowiązany przejawić.

Usługi stosują się do atrybutów obiektu.

Definiując nowe usługi wyróżniamy następujące działania:

• Identyfikacja stanów obiektu

• Identyfikacja wymaganych usług

• Identyfikacja powiązań odpowiadających komunikatom

• Specyfikacja usług

• Zebranie w jedną całość dokumentacji analizy

© UKSW, WMP. SNS, Warszawa

Analiza obiektowa

• Zbiór powiązanych ze sobą obiektów o pewnej funkcjonalności można nazywać systemem.

• Raz uruchomiony system działa – obiekty oddziałują na siebie, zmieniając swój stan i tworząc nowe obiekty powiązane z tym systemem, a także usuwając już istniejące.

Perpetuum mobile – projekt: Leonardo da Vinci , Muzeum w Monachium, Niemcy

http://www.leifiphysik.de/themenbereiche/arbeit-energie-und-leistung/geschichte

© UKSW, WMP. SNS, Warszawa 24

(5)

25

Analiza obiektowa

• Stan obiektu – kolekcja powiązań obiektu z innymi obiektami i typami obiektowymi w pewnym okresie czasu

© UKSW, WMP. SNS, Warszawa 26

Analiza obiektowa

„życie” obiektu:

• W systemie obiekty powstają, istniejąc zmieniają wielokrotnie swój stan, oraz są usuwane

• Zmiana stanu jest zmianą powiązań (atrybutów i/lub związków) obiektu

• Istotna zmiana stanu obiektu nazywana jest zdarzeniem

• Rodzaje zdarzeń: tworzenie, kończenie, łączenie/rozłączanie, inne

• Analityk nie potrzebuje wiedzy o każdym możliwym zdarzeniu:

klasyfikuje je tworząc typy zdarzeń, np. zamiast definiowania zdarzenia

„wczoraj mój pies ugryzł nowego listonosza w lewą nogę”

tworzy typ:

„pies ugryzł osobę”

• Zdarzenia są historią obiektów

© UKSW, WMP. SNS, Warszawa

27

Analiza obiektowa

„życie” systemu:

• Zmienność systemu wyraża się przez procesy

• Procesy odczytują i zmieniają stany obiektów

• Operacje to jednostki przetwarzania, z których składają się procesy

• Każda operacja wymaga obiektów, na których może operować (jeden lub więcej)

• Operacje mogą zwraca nowe obiekty

• Operacje są też związane z typami zdarzeniowymi – efektem operacji mogą być zdarzenia

• Ograniczenia, przy spełnieniu których operacja wykona się poprawnie, to warunki wstępne

• Ograniczenia jakie musza zachodzić w wyniku zakończenia operacji to warunki końcowe

• Operacje zegarowe: emitują zdarzenia - tyknięcia zegara

• Specyfikacja sposobu wykonania operacji to metoda

© UKSW, WMP. SNS, Warszawa 28

Analiza obiektowa

Metody

• są izolowane od rozważań o przyczynach i skutkach, tj.:

– Metoda działa tak samo niezależnie od tego, jakie zdarzenie ją wywołało i jaki jest stan obiektów (wystarczy że spełniają ograniczenia)

– Metoda w swym działaniu nie uwzględnia tego, jakie następne metody wywoła zdarzenie jej zakończenia

• Można je specyfikować jako moduły zawierające różnorodne składniki: ciągi zdarzeń, wywołań i warunków sterujących;

są to zagnieżdżone struktury operacji.

© UKSW, WMP. SNS, Warszawa

29

Analiza obiektowa

Wyzwalacz

• połączenie zdarzenia i wywoływanego procesu Rodzaje wyzwalaczy == reguły wyzwalania

• Wyzwalacz może wyzwalać wiele procesów, które mogą być wykonywane sekwencyjnie lub równolegle

© UKSW, WMP. SNS, Warszawa 30

Analiza obiektowa

Reprezentowanie struktury obiektów

model relacji binarnych (diagram obiektowy) – wyraża związki między typami

© UKSW, WMP. SNS, Warszawa

(6)

31

Reprezentowanie zachowania obiektów

• Maszyny skończone: stany, przejścia między stanami (zależą od zdarzeń).

• Specyfikacje oparte na scenariuszach (diagramy sieci Petriego).

• Specyfikacje decyzyjne wyrażone za pomocą tabeli decyzyjnej i drzewa decyzyjnego.

© UKSW, WMP. SNS, Warszawa 32

Podejścia do analizy obiektowej - historia – Martin/Odell

– Booch – Coad/Yourdon – Jacobson – Shlaer/Mellor – Rumbaugh i in.

Źródło: „Podstawy metod obiektowych”

J. Martin, J.J. Odell, WNT, 1997

© UKSW, WMP. SNS, Warszawa

33

Analiza obiektowa

Martin/Odell Booch Coad/Yourdon Jacobson Shlaer/Mellor Rumbaugh i in.

Typ obiektowy Klasa Klasa i obiekt Typ obiektowy Obiekt Klasa

Obiekt Obiekt Obiekt Obiekt,

Egzemplarz

Egzemplarz Obiekt

Typ związków Używanie relacji

Związek obiektów

Związek Powiązanie

Odwzorowanie Rola Związek

znajomości Związek, Odwzorowanie

Rola

Uogólnianie, Specjalizowa-

nie

Dziedziczenie Gen-Spec Dziedziczy Podtyp-Nadtyp Uogólnianie

Składanie Zawieranie Część-Całość Agregacja

© UKSW, WMP. SNS, Warszawa 34

Analiza obiektowa

Odwzorowania:

© UKSW, WMP. SNS, Warszawa

35

Analiza obiektowa

Analizą obiektowa wg metody Coad/Yourdon:

5 głównych czynności:

1. znajdowanie klas i obiektów 2. identyfikacja struktur 3. identyfikacja tematów 4. definiowania atrybutów 5. definiowania usług

model analizy obiektowej zawiera 5 warstw:

1. warstwa tematów 2. warstwa klas i obiektów 3. warstwa struktury 4. warstwa atrybutów 5. warstwa usług

© UKSW, WMP. SNS, Warszawa 36

Analiza obiektowa

Analizą obiektowa wg metody OMT (Rumbaugh):

3 części składowe modelu, pokazujące różne jego aspekty:

Model Obiektów (OMT Object Model): statyczny obraz struktury modelu - klasy

- atrybuty - operacje

- relacje między klasami i instancjami

Model Dynamiczny (OMT Dynamic Model): współdziałanie obiektów (powiązania wyznaczone przez komunikaty).

Tu mieszczą się różne diagramy pokazujące przepływ sterowania, także ograniczenia i warunki na wartości atrybutów.

Model Funkcyjny (OMT Functional Model)

specyfikacja operacji jako funkcji przekształcających wejście na wyjście, warunki poprawności (asercje).

© UKSW, WMP. SNS, Warszawa

(7)

PROJEKTOWANIE OBIEKTOWE

37

© UKSW, WMP. SNS, Warszawa 38

Projektowanie obiektowe

• Za budowę modelu odpowiedzialni są analitycy, którzy mają kontakt z klientem

• Analitycy uzgadniają z inżynierami oprogramowania poprawność budowanego modelu, dostosowując go do możliwości narzędzia programistycznego, które zostanie użyte podczas fazy implementacji

• Rola inżyniera oprogramowania:

– jednocześnie znać kilka metodyk projektowania lub przynajmniej zdawać sobie sprawę z różnic, jakie między nimi występują – potrafić przekładać niejasne żądania klientów na precyzyjne

specyfikacje

– umieć rozmawiać z zamawiającym oprogramowanie posługując się terminami z dziedziny aplikacji, a nie terminami informatycznymi

© UKSW, WMP. SNS, Warszawa

39

Projektowanie obiektowe

Obszary wiedzy inżyniera oprogramowania

• Inżynieria oprogramowania, informatyka

• Znajomość środowiska programistycznego (język programowania, platforma systemowa, środowisko projektowe)

• Znajomość organizacji (przedsiębiorstw, administracji publicznej)

• Znajomość dziedziny aplikacji (np. awioniki, operacji bankowych, logistyki, chemii, itp.)

• Psychologia i socjologia (etyka, komunikatywność, gospodarowanie czasem, itp.)

© UKSW, WMP. SNS, Warszawa 40

Projektowanie obiektowe

• Podczas analizy wzajemne oddziaływania między obiektami są reprezentowane jako zdarzenia.

• Projektant ma za zadanie wybrać rodzaj przepływu sterowania, jaki będzie implementowany w projekcie.

• Zewnętrzne sterowanie:

– Sekwencyjne proceduralne – Sekwencyjne zdarzeniowe – Współbieżne

• Wewnętrzne sterowanie

© UKSW, WMP. SNS, Warszawa

41

Projektowanie obiektowe

Systemy sterowane procedurami

• Sterowanie proceduralne umiejscowione jest w kodzie programu:

– zaczyna się na wierzchołku hierarchii podprogramów i przez wywołania podprogramów przechodzi do niższych poziomów, albo – jeden z komponentów jest menedżerem systemu: steruje

rozpoczynaniem, zatrzymywaniem i koordynacją innych

© UKSW, WMP. SNS, Warszawa 42

Projektowanie obiektowe

Systemy sterowane procedurami

• Procedury generują żądania wprowadzenia danych i czekają na ich pojawienie się. Po wprowadzeniu danej sterowanie przekazywane jest zwrotnie do procedury. Wartość licznika rozkazów, zmiennych lokalnych i stosu, na którym odkładane są wywołania procedur, definiują stan systemu.

• Można stosować tylko, gdy schemat zmiany stanów wykazuje regularne następstwo zdarzeń wejściowych i wyjściowych.

• Trudno jest stworzyć elastyczne interfejsy użytkownika.

© UKSW, WMP. SNS, Warszawa

(8)

43

Systemy sterowane zdarzeniami

• Sterowanie zdarzeniowe rezyduje wewnątrz programu koordynującego lub monitorującego.

• Procedury aplikacji są przywiązane do zdarzeń i są

wywoływane, gdy pojawiają się odpowiadające im zdarzenia, tj. podsystemy same decydują, które zdarzenia są dla nich interesujące.

• Odwołania do programu koordynującego pozwalają na wprowadzanie danych wejściowych oraz wysyłanie danych wyjściowych (procedury nie zachowują sterowania np.

czekając na dane).

© UKSW, WMP. SNS, Warszawa

Sterowanie wewnętrzne Proceduralne

•przekazywanie sterowania (wywołania procedur, wywołania między zadaniowe) jest kontrolowane przez program i jest poza kontrolą użytkownika

Zdarzeniowe

•wzajemne oddziaływania między obiektami są takie same jak zewnętrzne, za wyjątkiem braku oczekiwań na zdarzenia: obiekty mogą wymuszać odpowiedzi innych obiektów

Sterowanie zewnętrzne Proceduralne

•Jest kontrolowane przez użytkownika (trudne w realizacji)

Zdarzeniowe

•Oczekiwanie na zdarzenia, które są pod kontrolą użytkownika (dość intuicyjne)

© UKSW, WMP. SNS, Warszawa 44

45

Projektowanie obiektowe

• W procesie rozwoju oprogramowania:

• Faza analizy – opisuje wymagania

• Faza projektu – definiuje strategię rozwiązania, tj. projekt klas obiektów przez:

– Zdefiniowanie interfejsów

– Zdefiniowanie algorytmów użytych do zaimplementowania operacji

– Optymalizowanie struktur danych i algorytmów

W fazie projektu wprowadza się również dodatkowe

„wewnętrzne” klasy obiektów niezbędne dla implementacji

© UKSW, WMP. SNS, Warszawa 46

Projektowanie obiektowe

Kolejność tworzenia projektu obiektów

1. Wpisać do klas obiektów wszystkie operacje z modeli analitycznych.

2. Zaprojektować algorytmy implementujące operacje, biorąc pod uwagę złożoność obliczeniową, łatwość implementacji, zrozumiałość i elastyczność.

3. Zoptymalizować ścieżki dostępu do danych.

4. Zaimplementować sterowanie, które odwzoruje model dynamiczny (system sterowany procedurami lub zdarzeniami).

5. Zmienić strukturę klas aby rozszerzyć związki dziedziczenia.

6. Zaprojektować implementacje związków klas (nadmiarowe związki gmatwają analizę, ale na etapie implementacji mogą poprawić wydajność i uprościć realizację niektórych procesów).

7. Określić reprezentację obiektu.

8. Umieścić klasy i związki w modułach.

© UKSW, WMP. SNS, Warszawa

PROGRAMOWANIE OBIEKTOWE

© UKSW, WMP. SNS, Warszawa 47 48

Programowanie obiektowe

• Język programowania C++ pozwala na obiektową realizację projektu systemu

• Język C++ jest nadzbiorem języka C (prawie..)

• Występują różnice między C i C++ w obszarze właściwości programowania strukturalnego, jednak program napisany wg reguł C w większości przypadków zostanie zaakceptowany przez kompilator C++.

© UKSW, WMP. SNS, Warszawa

(9)

C++ - KLASY

© UKSW, WMP. SNS, Warszawa 49 50

C++ - klasy

• C++ jest językiem programowania obiektowego – pozwala na budowaniu programów działających na obiektach.

• Obiekty, to egzemplarze/instancje utworzone wg opisu zawartego w definicji typu.

• Typy obiektowe w C++ są rozszerzeniem typów używanych do tworzenia zmiennych w C

• Rozszerzenie polega na:

– dodaniu reguł dostępu do składników/atrybutów/pól obiektu – dodaniu właściwości usługowych – metod, które mogą wykonywać

działania wykorzystując składniki obiektu

– dodaniu usługi inicjalizacji przy tworzeniu i usługi kończenia przy usuwaniu obiektów

© UKSW, WMP. SNS, Warszawa

51

C++ - klasy

Deklarowanie klasy przypomina deklarowanie typu strukturalnego:

struct osoba1 class osoba2

{ {

public :

char imie[20]; char imie[20];

char nazwisko[30]; char nazwisko[30];

int wiek; int wiek;

}; };

© UKSW, WMP. SNS, Warszawa 52

C++ - klasy

Deklaracja instancji:

osoba1 PanX;

osoba2 PanY;

Odwołanie:

strcpy(PanX.imie,"Mel");

strcpy(PanX.nazwisko, "Gibson");

PanX.wiek = 58;

strcpy(PanY.imie, "Danny");

strcpy(PanY.nazwisko, "Glover");

PanY.wiek = 68;

Czym różnią się te dwa obiekty?

© UKSW, WMP. SNS, Warszawa

C++ - klasy

Projektując klasę należy odpowiedzieć sobie na kilka pytań:

1. Co charakteryzuje stan wewnętrzny obiektów i jak go reprezentuje?

2. Czy można definiować jakieś niezmienniki stanu wewnętrznego obiektów?

3. Które z cech obiektu można udostępniać publicznie, a które powinny być kontrolowane?

4. Jak będą tworzone i inicjowane obiekty; czy dopuszczamy istnienie obiektów z nieokreślonym stanem wewnętrznym?

5. Czy likwidacja obiektu wymaga czynności porządkowych?

6. Jakie operacje będą wykonywane na obiektach?

7. Jak program ma korzystać z definicji klasy?

© UKSW, WMP. SNS, Warszawa 53

C++ - klasy

Odpowiedzi dla klasy reprezentującej butelkę mleka:

1. Co charakteryzuje stan wewnętrzny obiektów i jak go reprezentuje?

- Maksymalna pojemność butelki i jej zawartość.

2. Czy można definiować jakieś niezmienniki stanu wewnętrznego obiektów?

- Zawartość niemniejsza od zera i nie większa od pojemności.

3. Które z cech obiektu można udostępniać publicznie, a które powinny być kontrolowane?

- Pojemność musi pozostać niezmienna, zawartość może być modyfikowana tylko tak, aby zachować niezmienniki.

4. Jak będą tworzone i inicjowane obiekty; czy dopuszczamy istnienie obiektów z nieokreślonym stanem wewnętrznym?

- Tworzony obiekt – butelka mleka musi być na początku pusta (zawartość równa zero). Nie ma butelek z niekreślonym stanem wewnętrznym.

© UKSW, WMP. SNS, Warszawa 54

(10)

Odpowiedzi dla klasy reprezentującej butelkę mleka:

5. Czy likwidacja obiektu wymaga czynności porządkowych?

- Jeżeli w butelce jest mleko, to należy najpierw je wylać.

6. Jakie operacje będą wykonywane na obiektach?

- Wlać mleko i wylać mleko. Można jeszcze umyć, wstawić kwiatki ..

7. Jak program ma korzystać z definicji klasy?

Może tworzyć obiekty, a może to być tylko klasa bazowa (o tym później).

© UKSW, WMP. SNS, Warszawa 55 56

Prawa dostępu:

• public - składniki są widoczne wszędzie gdzie jest użyty obiekt danej klasy

• private - składniki są widoczne tylko wewnątrz danej klasy. W praktyce oznacza to, że tylko funkcje danej klasy mogą czytać i zapisywać tego typu składniki

• protected – w porównaniu z private, zakres widoczności jest poszerzony o klasy wywodzące się z aktualnej klasy, tzw. klasy dziedziczące (to zostanie wyjaśnione przy okazji omawiania dziedziczenia)

Po co komu prawa dostępu?

© UKSW, WMP. SNS, Warszawa

57

C++ - klasy

kapsułkowanie/hermetyzacja

ukrywaniu pewnych danych składowych lub metod obiektów danej klasy tak, aby były one dostępne tylko metodom wewnętrznym danej klasy lub funkcjom z nią zaprzyjaźnionym (o funkcjach zaprzyjaźnionych będzie jeszcze mowa).

Kapsułkowanie uodparnia tworzony model systemu na błędy

nieprawidłowego zapisu lub niepowołanego odczytu składowych klasy (kto te błędy może popełnić? – nieumiejętny programista)

Kapsułkowanie nie ma sensu w przypadku struktur w C, bo struktury nie mają własnych metod, stąd kapsułkowanie zamknęłoby całkowicie dostęp do składowych struktury

© UKSW, WMP. SNS, Warszawa 58

C++ - klasy

• Abstrakcja proceduralna i hermetyzacja to fundamentalne założenia modelu obiektowego: na danym poziomie szczegółowości użytkownikowi (programiście) udostępnia się tylko te właściwości obiektu, które są istotne z punktu widzenia jego potrzeb na tym poziomie szczegółowości.

• Pozostałe właściwości, choć istnieją i są konieczne dla poprawnego funkcjonowania obiektu, mogą pozostać dla użytkownika całkowicie nieznane.

Przykład z życia: znajomość budowy silnika samochodowego i swobodny dostęp do jego elementów nie są konieczne do poprawnego korzystania z samochodu

© UKSW, WMP. SNS, Warszawa

59

C++ - klasy

Różnice miedzy struct i class

•Domyślnie wszystkie składowe obiektu typu struct są publicznie dostępne – można ich używać (odczyt/zapis, wywołanie) wszędzie tam, gdzie widoczna jest definicja struktury tego typu

•Domyślnie wszystkie składowe obiektu typu class są publicznie niedostępne. Aby stały się dostępne, musimy je zadeklarować jako dostępne. Kod deklaracji klasy jest podzielony na trzy rodzaje sekcji. Przynależność składowych do sekcji określa prawa dostępu.

•Prawa dostępu do składowych klasy dzielą się:

– typu public – typu private – typu protected

© UKSW, WMP. SNS, Warszawa 60

C++ - klasy

class JakasKlasa { public:

int s1;

int s2;

private:

int s3;

int s4;

int s5;

protected:

int s6;

}

class JakasInnaKlasa {

int d1;// domyślnie: private public:

int d2;

protected:

int d3;

private:

int d4;

public:

int d5;

}

© UKSW, WMP. SNS, Warszawa

(11)

61

C++ - klasy

Metody

Skoro składowe klasy mogą być niedostępne z zewnątrz (private), to po co je w ogóle deklarować – i tak nikt z nich nie skorzysta (nie będzie do nich zapisywał, ani też je odczytywał)?

• Składowymi klasy mogą być nie tylko zmienne (pola), ale również funkcje. Takie funkcje nazywane są metodami klasy.

• Metody podlegają takim samych ograniczeniom praw dostępu co zmienne.

• Wszystkie metody będące składowymi danej klasy mają prawa dostępu do zmiennych zadeklarowanych jako private i protected w tej klasie.

© UKSW, WMP. SNS, Warszawa 62

C++ - klasy

Przykład:

class water_temp {

double t; // składowa private public:

double get_temp() { // metoda – składowa klasy (inline) return t;

};

double set_temp(double nt); // metoda – składowa klasy };

double water_temp::set_temp(double nt) { if (nt<100 && nt>0)

return (t = nt);

else return t;

};

© UKSW, WMP. SNS, Warszawa

Przykład:

Mam pustą szklankę oraz gąbkę.

Nasączam gąbkę 100 ml wody, po czym trzy razy wyciskam wodę z gąbki do szklanki. Jedno wyciśniecie powoduje, że z gąbki ubywa połowa zawartości wody.

Ile wody jest teraz w szklance?

Program #5

C++ - klasy

© UKSW, WMP. SNS, Warszawa 63

Cytaty

Powiązane dokumenty

Mam po wsiach rozstawione te pszczoły, tam gdzie dużo jest rzepaku, dużo jest lipy, tam gdzie kasztan, gdzie jary rzepak, gdzie fasola.. To wyszukuję takie tereny, podwożę,

[r]

W tensorze tym występuje masa spoczynkowa i składowe związane z pędem cząstki, nigdzie natomiast nie występuje „masa relatywistyczna”, tymczasem bardzo wiele

Wtedy nie ma problemu z przecinkiem jako separatorem (czy separator dziesiętny czy separator

Przeedytujmy plik xml, korzystając z Notatnika, zmniejszając wartości właściwości o połowę. Odczytajmy serializacją plik xml po zmianie i wyświetlmy

1, obsługującej zdarzenie btnZapisz_Click() musimy jawnie wskazać o jaki obiekt nam chodzi stąd wpisujemy nazwę obiektu, w tym przypadku

�zięki �o�liwościo� wykracza��ący� poza rozpoznawanie obiektów w obrazie teledetekcy��ny�, analiza obiektowa coraz częście�� określana ��est

W pierwotnej wersji języka C (Kernigham, Ritchie) jedynymi dozwolonymi operacjami na strukturze były pobranie adresu (&amp;) oraz działania na składowych. W wersji C++ możliwe