PROGRAMOWANIE
PROGRAMOWANIE
OBIEKTOWE.
OBIEKTOWE.
PAKIET
PAKIET
DELPHI
DELPHI
Programowanie
Programowanie
obiektowe
obiektowe
IV
najnowsza
generacja
IV
najnowsza
generacja
metodologii programowania, w
metodologii programowania, w
której program komputerowy jest
której program komputerowy jest
tworzony
tworzony
za
pomocą
„obiektów
za
pomocą
„obiektów
programowych"
stanowiących
programowych"
stanowiących
fragmenty programu zawierające
fragmenty programu zawierające
dane i procedury na tych danych.
dane i procedury na tych danych.
W programowaniu obiektowym
W programowaniu obiektowym
PROGRAM
STANOWI
ZBIÓR
PROGRAM
STANOWI
ZBIÓR
WZAJEMNIE
KOMUNIKUJĄCYCH
WZAJEMNIE
KOMUNIKUJĄCYCH
SIĘ
OBIEKTÓW,
SIĘ
OBIEKTÓW,
WYKONYWUJĄCYCH
ZADANIA
WYKONYWUJĄCYCH
ZADANIA
ZGODNE Z ALGORYTMEM
ZGODNE Z ALGORYTMEM
ROZWIĄZYWANEGO PROBLEMU
ROZWIĄZYWANEGO PROBLEMU
.
.
Podstawowym
celem
Podstawowym
celem
wprowadzenia
programowania
wprowadzenia
programowania
obiektowego -ułatwienie pisania
obiektowego -ułatwienie pisania
programów
przez
programów
przez
wykorzystywanie już wcześniej
wykorzystywanie już wcześniej
napisanych
fragmentów
napisanych
fragmentów
programów, które się powtarzają
programów, które się powtarzają
bądź jako fragmenty obiektów,
bądź jako fragmenty obiektów,
bądź jako całe obiekty.
bądź jako całe obiekty.
POJĘCIA
POJĘCIA
PODSTAWOWE (1)
PODSTAWOWE (1)
Obiekt
Obiekt
- zbiór zadeklarowanych
- zbiór zadeklarowanych
danych
danych
oraz
oraz
metod
metod
:
:
procedur
procedur
i
i
funkcji
funkcji
wykonywanych na danych. Obiekt jest
wykonywanych na danych. Obiekt jest
niepodzielny, mogą być używane
niepodzielny, mogą być używane
wyłącznie
wyłącznie
metody
użytkownika
metody
użytkownika
.
.
Zmienne
obiektu
Zmienne
obiektu
-
właściwości
-
właściwości
statyczne,
statyczne,
metody
metody
- właściwości
- właściwości
dynamiczne.
dynamiczne.
Obiekty - bloki funkcji i danych
Obiekty - bloki funkcji i danych
, na
, na
których wykonywane są operacje.
których wykonywane są operacje.
Sposoby komunikacji obiektów :
Sposoby komunikacji obiektów :
wzajemna komunikacja,
wzajemna komunikacja,
komunikacja
z
systemem
i
z
komunikacja
z
systemem
i
z
programem
programem
,
wykorzystująca
,
wykorzystująca
zdarzenia
zdarzenia
, na które dany obiekt
, na które dany obiekt
reaguje.
reaguje.
Powiązania obiektów
Powiązania obiektów
oraz
oraz
atrybuty
atrybuty
obiektów
obiektów
stanowią
stanowią
cechy rozwiązywanego
cechy rozwiązywanego
problemu.
problemu.
Charakterystyka procedur
Charakterystyka procedur
hermetyzacja danych
hermetyzacja danych
- wzajemna
- wzajemna
niezależność danych w różnych obiektach
niezależność danych w różnych obiektach
,
,
prezentacja podejścia
prezentacja podejścia
: obiekt-atrybut,
: obiekt-atrybut,
całość-fragment programu, klasy
całość-fragment programu, klasy
obiektów
obiektów
i ich rozróżnienie,
i ich rozróżnienie,
wzajemne komunikowanie
wzajemne komunikowanie
się i
się i
powiązania tworzonych i
powiązania tworzonych i
wykorzystywanych obiektów
wykorzystywanych obiektów
.
.
Przykłady
Przykłady
pakietów programowania obiektowego
pakietów programowania obiektowego
narzędzia programowania
narzędzia programowania
DELPHI
DELPHI
,
,
JAVA
JAVA
,
,
VISUAL BASIC
VISUAL BASIC
CECHY OBIEKTÓW
CECHY OBIEKTÓW
( 1 )
( 1 )
Obiekty grupowane są w klasy.
Obiekty grupowane są w klasy.
Klasa jest zbiorem obiektów o jednakowych
Klasa jest zbiorem obiektów o jednakowych
zmiennych
zmiennych
i metodach.
i metodach.
Klasa jest deklaracją typu obiektowego, w której
Klasa jest deklaracją typu obiektowego, w której
obiekt jest zmienną tego typu.
obiekt jest zmienną tego typu.
Stworzenie klasy obiektów wymaga
Stworzenie klasy obiektów wymaga
podania
podania
definicji typu obiektowego
definicji typu obiektowego
implementacji metod obiektu
implementacji metod obiektu
.
.
Przy deklaracji klasy zwykle występuje lista
Przy deklaracji klasy zwykle występuje lista
przodków
przodków
danego obiektu wiążąca się z
danego obiektu wiążąca się z
dziedziczeniem cech
dziedziczeniem cech
.
.
CECHY OBIEKTÓW ( 2 )
CECHY OBIEKTÓW ( 2 )
Dziedziczenie
Dziedziczenie
- cecha pozwalająca na
- cecha pozwalająca na
budowanie
nowych
typów
budowanie
nowych
typów
obiektowych
na
bazie
już
obiektowych
na
bazie
już
istniejących.
istniejących.
Typ
pochodny
Typ
pochodny
(potomek)
(potomek)
dziedziczy
zawsze
dziedziczy
zawsze
wszystkie dane i metody
wszystkie dane i metody
typu
typu
bazowego
bazowego
(rodzica),
(rodzica),
ale metody
ale metody
rodzica
mogą
zostać
dowolnie
rodzica
mogą
zostać
dowolnie
przedefiniowane.
przedefiniowane.
CECHY OBIEKTÓW ( 3 )
CECHY OBIEKTÓW ( 3 )
Hermetyczność
Hermetyczność
- własność
- własność
programowania obiektowego
programowania obiektowego
odseparowywująca zmienne obiektów
odseparowywująca zmienne obiektów
od bezpośredniego oddziaływania na
od bezpośredniego oddziaływania na
nie z zewnątrz.
nie z zewnątrz.
Zaletą hermetyczności jest, że modyfikacje
Zaletą hermetyczności jest, że modyfikacje
w strukturze obiektu oraz implementacji
w strukturze obiektu oraz implementacji
jego metod mają charakter lokalny, są
jego metod mają charakter lokalny, są
ograniczone do samego obiektu.
ograniczone do samego obiektu.
Polimorfizm
Polimorfizm
- operowanie na różnych
- operowanie na różnych
obiektach poprzez
obiektach poprzez
wielokrotne
wielokrotne
używanie kodu programu.
używanie kodu programu.
Polimorfizm wiąże się z dziedziczeniem
Polimorfizm wiąże się z dziedziczeniem
klas:
klas:
ta sama metoda może być
ta sama metoda może być
zastosowana zarówno do danej klasy,
zastosowana zarówno do danej klasy,
jak i do podklas, które ją dziedziczą.
jak i do podklas, które ją dziedziczą.
Sposoby dziedziczenia :
Sposoby dziedziczenia :
klasa może dziedziczyć z :
klasa może dziedziczyć z :
jednej klasy -
jednej klasy -
dziedziczenie jednokrotne
dziedziczenie jednokrotne
jednocześnie z wielu klas -
jednocześnie z wielu klas -
dziedziczenie
dziedziczenie
wielokrotne
wielokrotne
,
,
zbiór własności klas podlegających
zbiór własności klas podlegających
dziedziczeniu stanowią
dziedziczeniu stanowią
metody
metody
i
i
wartości
wartości
zmiennych
zmiennych
.
.
dziedziczenie
może
być
dziedziczenie
może
być
statyczne
statyczne
lub
lub
dynamiczne
dynamiczne
w czasie
w czasie
wykonywania programu
wykonywania programu
.
.
klasy mogą wielokrotnie zmieniać swoje
klasy mogą wielokrotnie zmieniać swoje
zachowanie w trakcie pojedynczego wykonania
zachowanie w trakcie pojedynczego wykonania
programu.
programu.
MECHANIZM
MECHANIZM
PROGRAMOWANIA
PROGRAMOWANIA
OBIEKTOWEGO
OBIEKTOWEGO
wprowadzenie klas i obiektów na
wprowadzenie klas i obiektów na
zadanym poziomie abstrakcji,
zadanym poziomie abstrakcji,
znalezienie relacji klas i obiektów,
znalezienie relacji klas i obiektów,
implementacje klas i obiektów do
implementacje klas i obiektów do
rozwiązywanego zagadnienia,
rozwiązywanego zagadnienia,
uszczegółowienie mechanizmów
uszczegółowienie mechanizmów
dziedziczenia i polimorfizmu :
dziedziczenia i polimorfizmu :
kolejne
kolejne
klasy i obiekty przejmują część atrybutów
klasy i obiekty przejmują część atrybutów
i mechanizmów prostszych z
i mechanizmów prostszych z
zachowaniem
zachowaniem
hierarchicznego porządku
hierarchicznego porządku
.
.
Klasa
Klasa
- struktura łącząca pola (
- struktura łącząca pola (
fields
fields
), metody
), metody
(
(
methods
methods
) oraz właściwości (
) oraz właściwości (
properties
properties
).
).
Pole -
Pole -
zmienna
zmienna
, będąca elementem obiektu.
, będąca elementem obiektu.
Jest to pojęcie analogiczne do pola rekordu.
Jest to pojęcie analogiczne do pola rekordu.
Metoda
Metoda
- procedura lub funkcja związana z
- procedura lub funkcja związana z
klasą
klasą
.
.
Właściwość
Właściwość
- wielkość definiująca jeden
- wielkość definiująca jeden
z atrybutów obiektu, jej wartość jest zwykle
z atrybutów obiektu, jej wartość jest zwykle
przechowywana w jednym z pól obiektu.
przechowywana w jednym z pól obiektu.
Właściwość posiada klauzule dostępu (
Właściwość posiada klauzule dostępu (
access
access
specifiers
specifiers
),
które
określają
jak
dana
),
które
określają
jak
dana
właściwość
jest
odczytywana
i/lub
właściwość
jest
odczytywana
i/lub
modyfikowana.
modyfikowana.
Deklaracja klasy
Deklaracja klasy
type
type
ClassName =
ClassName =
class
class
(AncestorClass)
(AncestorClass)
.............................................
.............................................
MemberList
MemberList
.............................................
.............................................
end
end
;
;
gdzie:
gdzie:
ClassName
ClassName
- nazwa klasy;
- nazwa klasy;
AncestorClass
AncestorClass
- nazwa klasy - przodka w stosunku do
- nazwa klasy - przodka w stosunku do
danej klasy;
danej klasy;
MemberList
MemberList
- lista członów klasy.
- lista członów klasy.
Elementy deklaracji klasy
Elementy deklaracji klasy
AncestorClass
AncestorClass
- element opcjonalny.
- element opcjonalny.
Jeśli nie zostanie podany, to przyjmuje
Jeśli nie zostanie podany, to przyjmuje
się, że przodkiem danej klasy jest klasa
się, że przodkiem danej klasy jest klasa
TObject
TObject
, będący najstarszym
, będący najstarszym
przodkiem wszystkich klas
przodkiem wszystkich klas
w
w
Delphi
Delphi
.
.
MemberList
MemberList
- lista wszystkich członów
- lista wszystkich członów
danej klasy. Pod pojęciem członów
danej klasy. Pod pojęciem członów
rozumie się pola, metody i właściwości.
rozumie się pola, metody i właściwości.
Klasy w
Klasy w
Delphi
Delphi
Klasy w
Klasy w
Delphi
Delphi
stanowią rozbudowane drzewo
stanowią rozbudowane drzewo
dziedziczenia. Każdy komponent w
dziedziczenia. Każdy komponent w
Delphi
Delphi
jest klasą
jest klasą
.
.
Przykładowo: komponent
Przykładowo: komponent
MainMenu
MainMenu
(główne menu aplikacji)
(główne menu aplikacji)
w Delphi 7 jest klasą o nazwie
w Delphi 7 jest klasą o nazwie
TMainMenu
TMainMenu
, która dziedziczy
, która dziedziczy
pola, metody i właściwości w ciągu dziedziczenia klas:
pola, metody i właściwości w ciągu dziedziczenia klas:
TObject - TPersistent - TComponent - TMenu -
TObject - TPersistent - TComponent - TMenu -
TMainMenu
TMainMenu
Szczegóły można odczytywać zaznaczając dany komponent,
Szczegóły można odczytywać zaznaczając dany komponent,
wywołując
wywołując
Help
Help
poprzez
poprzez
Ctrl-F1
Ctrl-F1
oraz wybierając opcję
oraz wybierając opcję
Hierarchy
Hierarchy
,
,
a następnie nazwy poszczególnych klas.
a następnie nazwy poszczególnych klas.
Nie jest to jednak konieczne, można bowiem wykorzystywać
Nie jest to jednak konieczne, można bowiem wykorzystywać
każdy komponent, nie interesując się jego miejscem w
każdy komponent, nie interesując się jego miejscem w
strukturze klas środowiska.
strukturze klas środowiska.
Ważniejsze typy w
Ważniejsze typy w
hierarchii klas
hierarchii klas
TObject
Exception
TStream
Tpesistent
TPrinter
TList
TGraphicsObject
TGraphics
TComponent
TCanvas TPicture Tstrings
TTimer
TScreen
TMenuItem
TMenu
TControl TCommonDialogTGlobalComponent
TGraphicsControl
TWinCintrol
TApplication
TCostomComboBox TCostomControl TCostomEdit TCostomListBox
TScrollingWinControl
TForm
Dziedziczenie i po
Dziedziczenie i po
wtarzanie
wtarzanie
się członów klas
się członów klas
Deklarując klasę, możliwe jest wskazanie jej
Deklarując klasę, możliwe jest wskazanie jej
przodka
przodka
(
(
ancestor
ancestor
). Dana klasa stanie się wówczas
). Dana klasa stanie się wówczas
potomkiem
potomkiem
(
(
descendant
descendant
), który będzie
), który będzie
dziedziczyć od przodka
dziedziczyć od przodka
wszystkie człony tj.
wszystkie człony tj.
pola, metody i właściwości
pola, metody i właściwości
. Można
. Można
zadeklarować nowe dodatkowe człony. Ich zasięg
zadeklarować nowe dodatkowe człony. Ich zasięg
ważności będzie sięgał od miejsca deklaracji i
ważności będzie sięgał od miejsca deklaracji i
rozciągać się na bloki wszystkich metod danej klasy i
rozciągać się na bloki wszystkich metod danej klasy i
na wszystkich potomków danej klasy.
na wszystkich potomków danej klasy.
Jeśli zadeklaruje się u potomka nowe człony o tych
Jeśli zadeklaruje się u potomka nowe człony o tych
samych nazwach jak u przodka, to nowe człony pokryją
samych nazwach jak u przodka, to nowe człony pokryją
(przysłonią) analogiczne człony przodka, jednak nie
(przysłonią) analogiczne człony przodka, jednak nie
zlikwidują ich. Będą one nadal dostępne, ale pod
zlikwidują ich. Będą one nadal dostępne, ale pod
warunkiem ich jawnego wywołania, to znaczy wraz z
warunkiem ich jawnego wywołania, to znaczy wraz z
poprzedzającą nazwą przodka.
poprzedzającą nazwą przodka.
Widoczność - dostęp
Widoczność - dostęp
W
W
Delphi
Delphi
każdy człon klasy cechuje jego
każdy człon klasy cechuje jego
widoczności
przez
inne
elementy
widoczności
przez
inne
elementy
aplikacji (
aplikacji (
visibility
visibility
). Istnieją następujące
). Istnieją następujące
klauzule widoczności – dostępu członów
klauzule widoczności – dostępu członów
klas:
klas:
private
private
(prywatne)
(prywatne)
protected
protected
(chronione)
(chronione)
public
public
published
published
(publikowane)
(publikowane)
automated
automated
(automatyczne)
(automatyczne)
private
private
(prywatne)
(prywatne)
Człony tego typu są widoczne jedynie
Człony tego typu są widoczne jedynie
wewnątrz modułu, w którym
wewnątrz modułu, w którym
znajduje się deklaracja klasy
znajduje się deklaracja klasy
protected
protected
(chronione)
(chronione)
Człony tego typu są widoczne
Człony tego typu są widoczne
jedynie wewnątrz modułu, w
jedynie wewnątrz modułu, w
którym znajduje się deklaracja
którym znajduje się deklaracja
klasy, a także przez wszystkich
klasy, a także przez wszystkich
potomków danej klasy
potomków danej klasy
;
;
public
public
(publiczne)
(publiczne)
Człony tego typu są widoczne przez
Człony tego typu są widoczne przez
wszystkie moduły aplikacji, które
wszystkie moduły aplikacji, które
widzą deklarację danej klasy;
widzą deklarację danej klasy;
published
published
(publikowane)
(publikowane)
Człony tego typu są widoczne przez
Człony tego typu są widoczne przez
wszystkie moduły aplikacji, które widzą
wszystkie moduły aplikacji, które widzą
deklarację
danej
klasy.
deklarację
danej
klasy.
Informacje te nazywają się
Informacje te nazywają się
RTTI - Runtime
RTTI - Runtime
Type Information
Type Information
. Są one dostępne w
. Są one dostępne w
czasie wykonywania aplikacji, a także
czasie wykonywania aplikacji, a także
wykorzystywane
przez
wykorzystywane
przez
inspektora
inspektora
obiektów (Object Inspector);
obiektów (Object Inspector);
automated
automated
(automatyczne)
(automatyczne)
Człony tego typu są widoczne przez
Człony tego typu są widoczne przez
wszystkie moduły aplikacji, które
wszystkie moduły aplikacji, które
widzą deklarację danej klasy.
widzą deklarację danej klasy.
Dodatkowo kompilator wydaje i
Dodatkowo kompilator wydaje i
udostępnia specjalną informację o
udostępnia specjalną informację o
tych członach wymaganą przez
tych członach wymaganą przez
serwery automatyzacji COM.
serwery automatyzacji COM.
Brak jawnej klauzuli
Brak jawnej klauzuli
widoczności
widoczności
Człony zadeklarowane w początkowej
Człony zadeklarowane w początkowej
części deklaracji klasy, dla których
części deklaracji klasy, dla których
nie podano w sposób jawny klauzuli
nie podano w sposób jawny klauzuli
widoczności są standardowo
widoczności są standardowo
traktowane jako
traktowane jako
published
published
, pod
, pod
dodatkowym warunkiem, że aplikacja
dodatkowym warunkiem, że aplikacja
jest skompilowana z dyrektywą
jest skompilowana z dyrektywą
kompilatora {$M+}. W przeciwnym
kompilatora {$M+}. W przeciwnym
razie są traktowane jako
razie są traktowane jako
public
public
.
.
Pole
Pole
Pole jest podobne do zmiennej
Pole jest podobne do zmiennej
należącej do danego obiektu. Pole
należącej do danego obiektu. Pole
może być dowolnego typu, włączając tu
może być dowolnego typu, włączając tu
także klasę (to znaczy, że klasa może
także klasę (to znaczy, że klasa może
być zagnieżdżona w klasie). Pola mają
być zagnieżdżona w klasie). Pola mają
zazwyczaj przypisaną klauzulę
zazwyczaj przypisaną klauzulę
private
private
widoczności.
widoczności.
Deklaracje pól muszą poprzedzać
Deklaracje pól muszą poprzedzać
deklaracje metod i właściwości.
deklaracje metod i właściwości.
Przykład deklaracji pola
Przykład deklaracji pola
type
type
TNumber =
TNumber =
class
class
{klasa TNumber dziedziczy
{klasa TNumber dziedziczy
człony od TObject}
człony od TObject}
Int: integer;
Int: integer;
end
end
;
;
Metody
Metody
Wewnątrz
deklaracji
klasy
umieszcza
się
Wewnątrz
deklaracji
klasy
umieszcza
się
deklarację metody, to znaczy funkcji lub
deklarację metody, to znaczy funkcji lub
procedury.
procedury.
Deklarację klasy wraz z deklaracją metod
Deklarację klasy wraz z deklaracją metod
umieszcza zwykle w części publicznej modułu za
umieszcza zwykle w części publicznej modułu za
słowem kluczowym
słowem kluczowym
interface
interface
(choć można to
(choć można to
zrobić
też
zrobić
też
w części implementacyjnej modułu za słowem
w części implementacyjnej modułu za słowem
kluczowym
kluczowym
implementation
implementation
).
).
Definicje metod muszą być umieszczone wyłącznie
Definicje metod muszą być umieszczone wyłącznie
w części implementacyjnej modułu.
w części implementacyjnej modułu.
Przykład
Przykład
interface
interface
.............................................
.............................................
type
type
TMyClass =
TMyClass =
class
class
.......................................
.......................................
procedure
procedure
DoSomething;
DoSomething;
.......................................
.......................................
end
end
;
;
...............................................
...............................................
...............................................
...............................................
implementation
implementation
...............................................
...............................................
procedure
procedure
TMyClass.DoSomething;
TMyClass.DoSomething;
begin
begin
...................
...................
...................
...................
end
end
;
;
...............................................
...............................................
Deklaracja metod
Deklaracja metod
W deklaracji metody
W deklaracji metody
umieszcza się pełny nagłówek
umieszcza się pełny nagłówek
metody wraz z listą parametrów formalnych i typem
metody wraz z listą parametrów formalnych i typem
zwrotnym, natomiast
zwrotnym, natomiast
w definicji metody
w definicji metody
wystarczy podać nazwę metody, ale
wystarczy podać nazwę metody, ale
z poprzedzającą nazwą klasy oddzieloną kropką bez listy
z poprzedzającą nazwą klasy oddzieloną kropką bez listy
parametrów. Jeśli jednak listę parametrów formalnych
parametrów. Jeśli jednak listę parametrów formalnych
metody i typ zwrotny się powtarza, to muszą być one
metody i typ zwrotny się powtarza, to muszą być one
identyczne jak w deklaracji.
identyczne jak w deklaracji.
Deklaracje metod
Deklaracje metod
mogą być zaopatrzone w
mogą być zaopatrzone w
specjalne
specjalne
dyrektywy
dyrektywy
funkcji lub procedury:
funkcji lub procedury:
reintroduce
reintroduce
,
,
overload
overload
,
,
binding
binding
(w tym:
(w tym:
virtual
virtual
,
,
dynamic
dynamic
,
,
override
override
),
),
calling
calling
convention
convention
(w tym:
(w tym:
register
register
,
,
pascal
pascal
,
,
cdecl
cdecl
,
,
stdcall
stdcall
,
,
safecall
safecall
),
),
abstract
abstract
oraz
oraz
warning
warning
(w tym:
(w tym:
platform
platform
,
,
deprecated
deprecated
,
,
library
library
). Nazwy wyprowadzone kursywą są
). Nazwy wyprowadzone kursywą są
to nazwy grup dyrektyw a nie samych dyrektyw.
to nazwy grup dyrektyw a nie samych dyrektyw.