background image

Programowanie Obiektowe

(c) W

2

Model Obiektowy

Model Obiektowy

background image

Programowanie Obiektowe

(c) W

2

Koszty 

Koszty 

oprogramowa-nia 

oprogramowa-nia 

vs

vs

 wyniki

 wyniki

$3.2 M

$2.0M

$1.3M

2%

29%

19%

3%

47%

używane

bez zmian

dostarczone ale

nieużywane

zapłacone ale

niedostarczone

zaniechane lub

przerobione

używane po

przeróbkach

background image

Programowanie Obiektowe

(c) W

2

Programowanie 

Programowanie 

Obiektowe

Obiektowe

Nie tyle technika kodowania, co technika pakowania.
Stosowany przez producenta oprogramowania sposób
ukrycia większości aspektów funkcjonalnych przed 
konsumentem.

Różnica między podejściem klasycznym i
obiektowym:
Zwiększony nacisk na powiązania producenta i
konsumenta oprogramowania.

background image

Programowanie Obiektowe

(c) W

2

Budowanie 

Budowanie 

programów 

programów 

vs

vs

 

 

budowanie systemów

budowanie systemów

Programowanie
konwencjonalne

Programowanie
obiektowe

Narzędzia do programowania konwencjonalnego uwypuklają związek
pomiędzy programistą i jego kodem,
a do programowania obiektowego - producentem i konsumentem kodu.

Komputer

Producent

Konsument

background image

Programowanie Obiektowe

(c) W

2

Wi

Wi

ą

ą

zanie

zanie

Wiązanie jest procesem integrowania elementów funkcjo-
nalnych różnych producentów przez konsumenta.

Wiązanie jest czymś więcej niż linkowanie:
określanie modułów binarnych, które mają być połączone
w program wykonawczy, przypisywanie im adresów i 
zamiana odwołań zewnętrznych na określone miejsca
w pamięci operacyjnej.

Wiązanie jest procesem, w którym operatory i operandy
potencjalnie wielu różnych typów są wydawane przez 
producenta i używane przez konsumenta. 

background image

Programowanie Obiektowe

(c) W

2

Wi

Wi

ą

ą

zanie

zanie

Producent

Producent

Producent

Producent

Wiązanie

Wiązanie jest procesem łączenia komponentów pochodzących od 
różnych producentów (dostawców) w większy komponent, przeka-
zywany konsumentowi.

background image

Programowanie Obiektowe

(c) W

2

Wczesne i pó

Wczesne i pó

ź

ź

ne 

ne 

wi

wi

ą

ą

zanie

zanie

Wczesne wiązanie jest stosowane w przypadku zamkniętej
przestrzeni
, w której wszystkie potencjalne interakcje pomiędzy
komponentami oprogramowania mogą być zdefiniowane w trak-
cie tworzenia tych komponentów przez kompilator.

Późne wiązanie jest przydatne w przypadku otwartej 
przestrzeni
, kiedy komponenty, które mogą współdziałać
są znane dopiero po uruchomieniu programu.

x

y

POCZTA

background image

Programowanie Obiektowe

(c) W

2

Otwarta 

Otwarta 

vs

vs

 

 

zamkni

zamkni

ę

ę

ta 

ta 

przestrze

przestrze

ń

ń

Przestrzeń zamknięta
silnik

Przetrzeń otwarta
bagażnik

Zawartość wcześniej znana     Zawartość znana później

FloatingPointNumber: mantissa, exponent

Point: xCoordinate, yCoordinate

Rectangle: originPoint, cornerPoint

Mailbox:

Envelope:

DeskTop:

PaperClip:

background image

Programowanie Obiektowe

(c) W

2

Wi

Wi

ą

ą

zanie w 

zanie w 

lu

lu

ź

ź

nych

nych

 

 

kolekcjach

kolekcjach

Kalendarz

Katalog plików

Koperta

Kiedy Cię nie było

Wydatki

Skrzynka pocztowa

Wiązanie realiz. przez konsumenta

item = NextItemInMailbox();
switch (item->type) {
case ExpenceAccount: expOp();
case Envelope:
case Calendar:
case FileFolder:
case WhileYouWereOut:
default:

Wiązanie realiz. przez produc.

item = naxtItemIn Mailbox();
[item doThis];

Non-reusable
Ścisłe łączenie

Reusable
Luźne łączenie

background image

Programowanie Obiektowe

(c) W

2

Software’owe 

Software’owe 

uk

uk

ł

ł

ady scalone

ady scalone

Wyzwanie: 
Producenci oprogramowania potrzebują technologii
umożliwiającej czerpanie korzyści podobnych do tych,
które niosą elektronikom układy scalone.

Możliwość dostarczania hermetycznych (zamkniętych)
jednostek adresowanych do określonych zastosowań,
ale niezależnych od konkretnych aplikacji.

Układ scalony jest jednostką wielokrotnego wykorzystania
(ang. reusability) -> boom technologiczny

Czy koncepcja Software-IC może wspomóc
tworzenie oprogramowania?

background image

Programowanie Obiektowe

(c) W

2

Punkty widzenia 

Punkty widzenia 

konsumenta i 

konsumenta i 

producenta

producenta

color

up

down

moveTo:

go:

heading:

position storeOn:

Producent

color=BLACK
position=10,20
heading=180

Obiekt

Konsument

Identyfikator obiektu

mojePióro

Konsument dostrzega jedynie usługi oferowane przez producenta,
a nie sposób ich implementacji

background image

Programowanie Obiektowe

(c) W

2

Obiekty

Obiekty

Obiekt zawiera prywatne dane i zbiór operacji,
które je przetwarzają. 

Operacje są wyzwalane przez przesłanie komuni-
katu do obiektu, mówiącego 

co 

należy zrobić.

Adresat komunikatu odpowiada na niego:
- wybraniem odpowiedniej operacji,
- wykonaniem operacji,
- przekazaniem sterowania do nadawcy.

background image

Programowanie Obiektowe

(c) W

2

Hermetyczno

Hermetyczno

ść

ść

• Obiekt zawiera specyfikację i 

implementację;

• Specyfikacja jest zbiorem operacji, które 

mogą być wykonane na obiekcie;

• Implementacja: struktura fizyczna 

reprezentująca dane zawarte w obiekcie i 

procedury realizujące operacje obiektu 

(metody);

• Programiści “widzą” zarówno strukturę 

fizyczną, jak i procedury;

• Klienci (użytkownicy) “widzą” jedynie 

interfejs.

• Obiekt zawiera specyfikację i 

implementację;

• Specyfikacja jest zbiorem operacji, które 

mogą być wykonane na obiekcie;

• Implementacja: struktura fizyczna 

reprezentująca dane zawarte w obiekcie i 

procedury realizujące operacje obiektu 

(metody);

• Programiści “widzą” zarówno strukturę 

fizyczną, jak i procedury;

• Klienci (użytkownicy) “widzą” jedynie 

interfejs.

background image

Programowanie Obiektowe

(c) W

2

Obiekt

Obiekt

code

color

down
move

Część wspólna

Pen

Część prywatna

isa = Pen

color = BLACK

position = 10, 20

heading = 180

myPen

Obiekt

myPen

Identyfikator
obiektu

Współdzielone części obiektu opisują cechy wspólne obiektów klasy.
Prywatne części obiektu opisują różnice między obiektami.

background image

Programowanie Obiektowe

(c) W

2

Obiekty i 

Obiekty i 

komunikaty

komunikaty

Identyfikator obiektu

“Uchwyt” obiektu, dzięki któremu można na obiekcie 
manipulować w wyrażeniu. Jest to jedyna legalna operacja
na identyfikatorze.

Wyrażenie

Posiadając identyfikator obiektu można korzystać z jego 
usług pisząc odpowiednie wyrażenie.
Jest to zlecenie określające, co obiekt ma zrobić, by móc
oddać sterowanie nadawcy i oczekiwane wyniki.

Przesyłanie komunikatu odpowiada wywołaniu procedury;
różnica polega jedynie na późnym wiązaniu. 

background image

Programowanie Obiektowe

(c) W

2

Tworzenie 

Tworzenie 

wyst

wyst

ą

ą

pie

pie

ń

ń

code

code

color

down

draw

new

delete

instNb

Programowy układ scalony

Wystąpienie utworzone
przez fabrykę

Część
prywatna

Część
wspólna

Część
prywatna

Część
wspólna

Fabryka obiektów
Obiekt budujący inne obiekty

myPen

Pen

color = BLACK
position = 10, 20
heading = 180

Nowe wystąpienie
klasy Pen

background image

Programowanie Obiektowe

(c) W

2

Typy i klasy

Typy i klasy

Obiekty o tej samej naturze należy grupować, a ich wspólne
cechy wydzielić. W ten sposób zbiory obiektów mogą być 
opisane przez ich typ
 lub klasę.

Ident. natura = ident. struktura i zachowanie

Pojęcie klasy jest różne od pojęcia  typu.
Specyfikacja na ogół taka sama.
Klasa ma charakter bardziej dynamiczny: 
- fabryka obiektów
- magazyn obiektów.

Nowe obiekty są tworzone za pomocą operacji new klasy.

background image

Programowanie Obiektowe

(c) W

2

Dziedziczenie 

Dziedziczenie 

zmiennych

zmiennych

 

Producent

Etap kompilacji

Object

Array: Object {int capacity;}

String: Array

Symbol: String {
  unsigned int value; }

Etap uruchomienia

Konsument

Object
instanceSize: 4

Array
instanceSize: 8

String
instanceSize: 8

Symbol
instanceSize: 10

isa

isa

capacity = 0

isa

capacity = 0

value = 0

isa

capacity = 0

mySymbol=[Symbol new]

myString=[String new]

myArray=[Array new]

myObject=[Object new]

background image

Programowanie Obiektowe

(c) W

2

Dziedziczenie

Dziedziczenie

Dziedziczenie jest mechanizmem organizowania, tworze-
nia i stosowania klas wieloktotnego użytku.
Bez dziedziczenia każda klasa byłaby konstruowana
od podstaw.

Wewnętrzna struktura i zachowanie mogą być 
dziedziczone.

Dziedziczenie umożliwia konstrukcję nowego oprogramowa-
nia w podobny sposób do definiowania nowych pojęć przez
porównanie ich ze znanymi, np. “zebra jest jak koń, ale ma
paski”.

background image

Programowanie Obiektowe

(c) W

2

Wyst

Wyst

ą

ą

pienie klasy 

pienie klasy 

Symbol

Symbol

code

code

code

Współdzielone części Symboli

Symbol.o

String.o

Object.o

value

value:

free

size

hash

isEqual:

size

storeOn:

free

isa

capacity

value

prywatna część 
każdego Symbolu

mySymbol

Symbol zawiera część prywatną i współdzieloną.
Część współdzielona jest implementowana jako lista elementów.

background image

Programowanie Obiektowe

(c) W

2

Zwierz

Zwierz

ę

ę

ta ZOO

ta ZOO

 

Bear

Polar

Grizzly

Panda

Ling-ling

Quinn

Dziedziczenie jednokrotne

Bear

Polar

Panda

Ling-ling Quinn

Dziedziczenie wielokrotne

Herbivore

Endangered

Cat

Tiger

Carnivore

ZooAnimal


Document Outline