Post on 06-Aug-2020
Programowanie obiektowe
Tomasz Koszlajda
Literatura Historia języków obiektowych 1. Graham M. Birtwistle, O.J. Dahl, B. Myhrhaug, K. Nygaard
Simula BEGIN 1973. 2. Goldberg A.J., A.D.Robson Smalltalk-80: The Language and its
Implementation, Addison-Wesley 1983. 3. Brad Cox, Object oriented programming: an evolutionary ap-
proach, Addison-Wesley Longman Publishing Co., 1986. 4. Bjarne Stroustrup, Język C++; Wydanie V, WNT, Warszawa
2010. 5. Ken Arnold, James Gosling, David Holmes, The Java(TM) Pro-
gramming Language (3rd Edition), Addison Wesley Professional, 2000
6. Bertrand Mayer, Eiffel : The Language, Prentice Hall, 1991 Obiektowe metodyki w analizie, projektowaniu i progra-mowaniu 7. Ian Graham, Metody obiektowe w teorii i praktyce, WNT, rok
2004. 8. Bertrand Mayer, Programowanie zorientowane obiektowo,
Helion, tłumaczenie wydania II, rok 2005. 9. UML Przewodnik użytkownika, Booch, Rumbaugh, IJacobson,
WNT 2002 10. Peter Coad, Edward Yourdon, Analiza obiektowa, Read Me
1994. 11. Peter Coad, Edward Yourdon, Programowanie obiektowe,
Read Me 1994. 12. Andrei Alexandrescu , "Nowoczesne projektowanie w C++ za-
stosowania generyczności i wzorców projektowych", WNT 2005 13. Artykuły z konferencji OOPSLA Programowanie 14. Programista doskonały, Steve McConnell, LTP Oficyna Wy-
dawnicza 2003. 15. Wzorce projektowe, Erich Gamma, Richard Helm, WNT 2005 16. Wzorce projektowe: elementy oprogramowania obiektowego
wielokrotnego użytku, Erich Gamma, Helion 2010
Sukces modelu obiektowego Model obiektowy istotnie zmienił kształt wielu dyscyplin in-formatyki • Obiektowe języki programowania
Historia: lata 70/80/90; Simula, SmallTalk, C++, Delphi, Eiffel, Java, C#, PHP, Phyton, Ruby ≈95% rynku?
• Obiektowe metodyki analizy i projektowania opro-gramowania
Historia: lata 80/90/00; OOA/OOD, OODA, OMT, Objectory, BON, UML ≈ 85% rynku ?
• Obiektowe (obiektowo-relacyjne) bazy danych Historia: lata 80/90/00; GemStone, O2, Versant, ObjectStore, Objectivity, Illustra, db4o ≈ 75% ?
• Obiektowe platformy integracyjne Historia: lata 80/90/00/10; CORBA, DCOM, SOAP ≈ 70% ?
Przesłanki obiektowego modelu danych
1. Słabość inżynierii oprogramowania
Trudności w implementacji złożonych systemów in-formatycznych: • Niska jakość programów komputerowych • Trudność zrozumienia kodu • Pielęgnacja programów komputerowych • Mała produktywność programistów • Niska współużywalność modułów programowych • Krótki czas eksploatacji
2. Niska siła wyrazu języków programowania
• Ograniczony zbiór prostych predefiniowanych typów danych
• Rozwój przez budowę i wykorzystanie procedur
Technologia programowania
Reprezentacja problemów
użytkowników
Architektura programów komputerowych
Dobra, a zła konstrukcja programów komputerowych • liczne i niejasne zależności z innymi modułami • odporność architektury na modyfikacje
Zależność między modyfikacjami funkcjonalnymi i implementacyjnymi
Moduł A
Moduł B spoistość
odwołania do zmiennych globalnych
powiązania międzymodułowe
funkcjonalność
implementacja
Δf
Δi
Δi Δf
≈1
Obiektowy paradygmat programowania
Poszukiwania paradygmatu programowania sprzyja-jącego budowaniu programów o dobrej architekturze • Proceduralny Świat jest modelowany jako algorytm Problemy są modelowane w procesie dekompozycji funkcjonalnej jako hierarchie algorytmów. Znaczenie danych jest drugorzędne. Programy są budowane jako zbiór procedur imple‐mentujących zdefiniowane algorytmy. Programowanie strukturalne – unikanie efektów ubocznych (jedno wejście, jedno wyjście, brak skoków i odwołań do zmiennych globalnych)
• Obiektowy Świat jest modelowany jako zbiór obiektów Problemy są modelowane jako hierarchie specyfikacji klas obiektów (abstrakcyjnych typów danych). Znacze-nie algorytmów jest drugorzędne. Programy są budowane jako zbiór klas implementują-cych operacje abstrakcyjnych typów danych. Ukrywanie struktur danych wewnątrz modułów progra-mowych
Zależność między paradygmatem programowania, a architekturą
programów
Paradygmat proceduralny
• Modułami architektury programów są proce-dury
• Hierarchia funkcji • Model przepływu danych
Paradygmat obiektowy
• Modułami architektury programów są klasy obiektów
• Zbiór powiązanych, kooperujących obiektów • Model przepływu danych
…funkcja funkcja funkcje moduł
…funkcje
moduł dane
funkcje
dane
Zależność między paradygmatem programowania, a architekturą
programów
W konstrukcji złożonych systemów informa-
tycznych paradygmat obiektowy pozwala tworzyć systemy o lepszej jakości:
• Łatwość utrzymania • Odporność architektury na modyfikacje • Łatwość wielokrotnego użycia • Lepsze zrozumienie kodu
u
DobraOdzwie
Analiza
Zła arcNie od
SkładoApach
utrzy
a architerciedla
a skład
chitektdzwierci
owanie e Tomc
yman
tekturaa probl
dniowa X
tura iedla pr
informcat.
Łania i
a emy i p
XML w
roblemó
macji o
atworozu
pojęcia
w Apach
ów i po
zachow
ść umie
he Tom
ojęć
waniu
enia k
cat.
aplikac
kodu
cji w lo
u
ogach --
Architektura odzwierciedlająca dekompozycję funkcjonalną
Algorytm działania systemu operacyjnego DOS
Ładowanie systemu
Wyświetlenie znaku zachęty
Wykonanie po-lecenia
Analiza polecenia
Załadowanie programu
[wbudowane] [ niewbudowane ]
[niepoprawne]
[koniec pracy]
[niepoprawne]
[poprawne] [poprawne]
Edycja polecenia
Architektura odzwierciedlająca dekompozycję obiektową
Diagram klas systemu operacyjnego DOS
Plik # nazwa # rozmiar + otwórz() + zamknij() + czytaj()
Katalog# nazwa # rozmiar + czytaj() + dodajPlik()+ usuńPlik()
Program # nazwa # rozmiar + uruchom() + przydziel(Zasób)+ zwolnij(Zasób)
Moduł pamięci # rozmiar + przydziel(int) + zwolnij()
Zasób # id + czytaj() + przydziel() + zwolnij()
[0..1] [1..*]
jestPrzy-dzielonuDo
Zależność między paradygmatem programowania, a
architekturą programów
Teza: Dzięki temu języki obiektowe umożliwiły bu-dowanie bogatszych bibliotek: kolekcje da-nych, elementy graficzne, itp.
Paradygmat obiektowy ułatwia lepsze odwzorowanie problemów i pojęć użyt-kowników w architekturę programów komputerowych
Język programowania o rozszerzalnym
systemie typów danych
• Klasyczne języki programowania Zamknięty zbiór predefiniowanych typów danych i operatorów
• Obiektowe języki programowania Możliwość nieograniczonego rozszerzania typów danych i skojarzonych z nimi operacji
Symulacja lotu wahadłowca
int, float, char, …+, -, *, /, … [ ], struct
Reprezentowana rzeczywistość
Siła języka programowania
Symulacja lotu wahadłowca
class Zespolone {…}; class Wahadłowiec {…}; … Zespolone z1(2.39, 1.92); z3 = z2 + z1; Wahadłowiec Columbia();
Reprezentowana rzeczywistość
Siła języka programowania
Historia języków obiektowych Liderzy Simula 67 – Bazujący na Algol-u pierwszy język obiektowy wprowadzający koncepcje obiektów i klas. SmallTalk 71, 72, 76, 80 – Interaktywne środowisko obiektowe dla wsparcia wydajności programistów. Czysty język obiektowy, implementowany za pomocą maszyny wirtualnej Eifell (rok 1985) – Bazujący na języku Ada język obiektowy wprowadzający pojęcia asercji logicznych i klas generycznych. Java (1991, 1995) – Integrujący programowanie obiektowe z Internetem C# (rok 2000) – Środowisko uruchomieniowe, wydaj-ność interpretacji kodu Czyste języki obiektowe vs. języki hybrydowe
Historia języków obiektowych Simula
Simula I - (1964 - 1965) Simulation language - Wyspecjali-zowany język do symulacji procesów bazujący na Algolu 60
Simula 67 - (1967 - 1971) Simple universal language - uniwersalny język obiektowy
Class Rectangle (Width, Height); Real Width, Height; Begin Real Area, Perimeter; Procedure Update; Begin Area := Width * Height; Perimeter := 2*(Width + Height) End of Update; Boolean Procedure IsSquare; IsSquare := Width=Height; Update; ! Aktywacja obiektu; OutText("Rectangle created: "); OutFix(Width,2,6); OutFix(Height,2,6); OutImage; End of Rectangle;
Ref(Rectangle) R; (Class reference variable)
R := New Rectangle(50, 40);
H
SmallTreflektyopraco| rectrectan
wibowibo
aPointcollis [
Histo
Talk 71ywny +owany wtanglengles ith: (Rottom: ith: (Rottom: t := Psions [:aRect
oria jS
1, 72, 7+ interakw Xeroxes aPoi:= OrdRectan200) Rectan210).
Point x:= rect | aR
językSma6, 80 –ktywne x Palo int | deredCongle le
ngle le x: 20 yctangleRect co
ków allTal– język środowAlto Re
ollecteft: 0
eft: 1
y: 20.es selontain
obielk-80obiektowisko, mesearch
tion right
0 righ
lect: nsPoint
ektow0 owy, niemaszynh Cente
t: 10 t
ht: 10
t: aPoi
wych
etypowna wirtuer
top: 1
top:
int]
h
any, ualna
100
110
Historia języków obiektowych - Eiffel Bazujący na języku Ada – język obiektowy wspierający me-todykę programowania przez kontrakt. Jako pierwszy wpro-wadził koncepcję klas generycznych. class STACK [G] … remove is
require -- warunki początkowe not_empty: not empty
do …
ensure -- warunki końcowe not_full: not full one_fewer_item: count = old count – 1
end end
Historia języków obiektowych - Java Składnia wzorowana na języku C++, architektura na środo-wisku SmaalTalk-80. Środowisko uruchomieniowe języka Java jest zintegrowane z Internetem – weryfikacja zdalnego kodu programów przed uruchomieniem. class MySecurityManager extends SecurityManager { public void checkRead (String file) {
if (file.endWith(".doc") ) throw new SecurityException ("Dostêp do
pliku " + file + "zabroniony"); }
}
zewnętrzny program źródłowy
program wynikowy
Security ManagerClass Loader
Verifier
Zasoby systemowePliki Porty Pamięć
Historia języków obiektowych – C#
Język o składni bazującej na języku C++. Nowe kon-cepcje własności obiektów: cechy, zdarzenia. Maszyna wirtualna JIT. class TimePeriod { private double seconds; public double Hours { get { return seconds / 3600; } set { seconds = value * 3600; } } } �class Button { // deklaracja zdarzenia public event ButtonEventHandler ButtonClick; // metoda wyzwalająca zdarzenie public void clicked(int count) { // wywołanie obsługi zdarzenia if (ButtonClick != null) ButtonClick (this,count); } } � �
h
Pop
http://ww
Posi-tion Sep 2013
1
2
3
4 5
6 7
8 9
10 11
12 13
14 15
16 17
18 19
20
pular
ww.tiob
Posi-tion Sep 2012
1
2
4
3 6
5 7
8 11
14 15
9 10
12 16
13 19
24 20
25
rność
be.com
DeltaPosit
ć języ
/conten
a in tion
C
Ja
C
OP
C
(V
Py
Ja
Tr
V
Pe
R
DPa
Li
P
RM
C
yków
nt/pape
PrograLang
C
ava
C++
Objective-HP
C#
Visual) Ba
ython
avaScript
ransact-Sisual Bas
erl
Ruby
elphi/Objascal
isp
L/SQL
R
MATLAB
COBOL
w pro
erinfo/tp
ammingguage
C
asic
t
SQL
sic .NET
ject Pasc
ogram
pci/inde
Ra-
tingSep201316.97
% 16.15
% 8.664
8.5616.430
5.5644.837
3.1692.015
1.9971.844
1.6921.382
cal 0.8970.888
0.7700.676
0.6460.639
0.628
mowa
ex.html
-s
p 3
DeltSep201
75 -2.32
54 -0.11
4% -0.48
% -1.210% +0.82
4% -1.037% -0.69
9% -0.695% +0.69
7% +1.124% +1.00
2% -0.572% -0.34
7% -0.108% +0.06
0% -0.206% +0.07
6% +0.219% +0.08
8% +0.20
ania
ta p 2
Sta-tus
% A
% A
% A
% A 2% A
% A % A
% A 9% A
2% A 0% A
% A % A
% A- 6% A
% A 7% A-
% B 8% B
0% B
Pop
Oct 201
1 2 3 4 5 6 7 8 9 10
pular
13 PositOct 2
126345879
10
rność
tion 2012
Depos
2 6 3 4 5 8 7 9 0
ć języ
elta in sition
P
J P
P C C C O J
V R
yków
rogramlangua
ava PHP Python C#
C++ C Objectiveavascrip
Visual BaRuby
w pro
ming age
SO
e-C pt asic
ogram
hare in ct 2013 26.8 % 13.2 %9.8 % 9.5 %9.1 %8.4 % 8.1 %7.6 % 3.1 %2.6 %
mowa
Twelve
tren
ania
e monthnds -1.7 % -0.5 % +1.9 %+0.4 %-0.7 % -0.8 %+0.7 %+1.2 %-0.7 %
+0.2 %
h
%%%
%%%%%%
Rozszerzenia modelu obiektowego
• Współbieżność aktywnych obiektów – model Actor
Integracja pojęcia obiektów i procesów. Program jest zbiorem aktywnych i kooperujących obiektów. • Trwałość obiektów – odwzorowanie O/RM
Obiekty mogą przeżyć sesje programów powołujących je do życia i wyłącznie komputera. • Deklaratywna weryfikacja poprawności działania programów
Rozszerzenie języka programowania o aksjomaty definiu-jące poprawne zachowanie kodu. • Programowanie aspektowe
Architektura programu uwzględniająca przecinające się koncepcje
Podstawowe pojęcia modelu obiektowego
• obiekt Obiekt jest elementarną jednostką programową charakte-ryzująca się strukturą, stanem i zachowaniem. Obiekt integruje zbiór logicznie powiązanych danych ze zbiorem przetwarzających je operacji. Operacje związane z obiek-tem umożliwiają dostęp do jego stanu. Struktura obiektu jest zbiorem zmiennych zewnętrznych z punktu widzenia przetwarzających je operacji.
Struktura: String imię; String nazwisko; String etat; Float płaca; Int zespół; Operacje: void Zatrudnij(); void awansuj(String); …
Strukturalne własności obiektów są nazywane cechami. Wyróżnia się dwa rodzaje cech: atrybuty przechowujące stan obiektu i powiązania między obiektami. Operacje sko-jarzone z obiektem są implementowane przez metody bę-dące specyficznymi procedurami występującymi jedynie w kontekście danego obiektu. Metody określają zachowanie obiektu.
zatrudnij
awansujzwolnij
daj podwyżkę
przydziel do zespołu
przenieś
etat: prezes
imię: Jan nazwisko: Buła
płaca: 15 000 złzespół: 10
• komunikat Komunikaty służą do uaktywniania procedur związanych z obiektem. Oprócz nazwy procedury komunikat może za-wierać parametry wejściowe wywołania metody. Po wy-konaniu procedury obiekt może zwrócić odpowiedź do miejsca wysłania komunikatu. Zbiór wszystkich komunika-tów rozumianych przez obiekt stanowi interfejs obiektu.
zatrudnij
aawwaannssuujjzwolnij
daj podwyżkę
przydziel do zespołu
przenieś
etat: referent
imię: Jannazwisko: Buła
płaca: 1500 zł zespół: 10
awansuj ("prezes")
Różnice między wywoływaniem procedur, a przesła-niem komunikatów Komunikaty są luźniej powiązane z właściwym kodem programu niż nazwy procedur. Obiekt posiada autonomię wyboru metody właściwej dla danego komunikatu. procedura: przesuń(kwadrat, wektor) przesuń(koło, wektor)
komunikat: kwadrat.przesuń(wektor) koło.przesuń(wektor)
• klasa Klasa jest specyfikacją i implementacją definiowanego przez programistę abstrakcyjnego typu danych. Klas jest podstawowym modułem programu. Obiekty są wy-stąpieniami klas. Klasy definiują stałe cechy obiektów: strukturę danych (zbiór atrybutów i powiązań) oraz meto-dy.
zatrudnij
awansujzwolnij
daj podwyżkę
przydziel do zespołu
przenieś
etat: prezes
imię: Jan nazwisko: Buła
płaca: 15 000 zł zespół: 10
zatrudnij
awansujzwolnij
daj podwyżkę
przydziel do zespołu
przenieś
etat: prezes
imię: Jan nazwisko: Buła
płaca: 15 000 zł zespół: 10
zatrudnij
awansuj zwolnij
daj podwyżkę
przydziel do zespołu
przenieś
etat: prezes
imię: Jannazwisko: Buła
płaca: 15 000 zł zespół: 10
zatrudnij
awansujzwolnij
daj podwyżkę
przydziel do zespołu
przenieś
Etat etat;
char* imię; char* nazwisko;
float płaca; int zespół;
Klasa Pracownik
Obiekty – wystąpienia klasy Pracownik
etat: portier
imię: Jan nazwisko: Icek
płaca: 1000 zł zespół: 10
etat: kierowca
imię: Jan nazwisko: Dera
płaca: 1500 zł zespół: 10
etat: prezes
imię: Jan nazwisko: Buła
płaca: 15 000 zł zespół: 10
Struktura + metody
Stan
Podstawowe własności języków obiektowych
• Wsparcie dla definicji abstrakcyjnych typów danych możliwość definiowania przez użytkownika własnych ty-pów danych, które mogą być stosowane tak samo jak ty-py wbudowane
• Budowa programów jako zbioru klas klasy są podstawowymi (jedynymi) modułami programu
• Hermetyczność – ukrywanie informacji zwiększenie autonomii obiektów przez ukrycie ich imple-mentacji przed użytkownikiem obiektu
• Przesyłanie komunikatów przesyłanie komunikatów jest podstawowym mechani-zmem uaktywniania przetwarzania danych
• Dziedziczenie klasy mogą być tworzone poprzez ich dziedziczenie z in-nych klas
• Polimorfizm możliwość podstawiania pod zmienną określonego typu wystąpień różnych klas
• Dynamiczne wiązanie wyszukiwanie metod w obiekcie realizowane w trakcie działania programu
Zadanie domowe Literatura uzupełniająca: • Rozdział nr 2 (strony 43 – 78): Zalety programowania obiektowego i metod obiektowych w Metody obiektowe w teorii i praktyce, Iana Grahama.
• Część I rozdział 1: Jakość oprogramowania w Programowanie zorientowane obiektowo, Bertranda Meyera.
Plan przedmiotu
1. Modelowanie klas - UML 2. Pojęcie i własności klas na przykładzie różnych języków
obiektowych • Moduły programowe • Abstrakcyjne typy danych • Obiekty złożone • Hermetyczność
3. Dziedziczenie • Współdzielenie kodu • Relacja podtypu • Polimorfizm, przesłanianie, późne wiązanie
4. Klasy generyczne 5. Obsługa wyjątków 6. Programowanie aspektowe 7. Semantyka ADT
• Specyfikacja semantyki ADT • Assercje w językach obiektowych
8. Ozwzorowanie obiektowo-relacyjne Powyższe zagadnienia będą ilustrowane przykładami w ję-zykach programowania: C++, Java, C#, Eiffel, SmallTalk, Aspect-J
Zasady zaliczenia • Kolokwium końcowe ‐ grudzień 2013 • Ocena z laboratorium • Aktywność (merytoryczna) na zajęciach