Programowanie Obiektowe
(c) W
2
Model Obiektowy
Model Obiektowy
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
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.
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
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.
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.
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
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:
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
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?
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
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.
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.
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.
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.
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
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.
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]
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”.
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.
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