Download as pdf or txt
Download as pdf or txt
You are on page 1of 29

Programowanie obiektowe

Aleksander Byrski, Marek Kisiel-Dorohinicki

Katedra Informatyki
Akademia Górniczo-Hutnicza w Krakowie
{olekb,doroh}@agh.edu.pl

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
1 / 35
Cechy jezyków
˛ programowania obiektowego

rozszerzenia obiektowe jezyków


˛ funkcjonalnych (CLOS) czy
proceduralnych (C++, Object Pascal), jezyki
˛ obiektowe (Smalltalk,
Eiffel), jezyki
˛ inspirowane innymi jezykami
˛ obiektowymi (Java, C#).
kryteria oceny „obiektowości” jezyka:
˛
obecność obiektów object-based languages
obecność klas class-based languages
dziedziczenie object-oriented languages
obiekt jako jednostka hermetyzacji, mechanizmy ukrywania
informacji.

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
8 / 35
Klasy i typy

klasa w roli typu, typy podstawowe jako klasy,


separacja klasy i typu, klasa jako implemetacja typu,
kontrola typów typing: statyczna i dynamiczna (kontrola weak i
strong),
polimorfizm, statyczne i dynamiczne wiazanie
˛ metod binding
klasy jako obiekty, atrybuty i usługi statyczne,
klasy parametryczne templates, generics

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
9 / 35
Mechanizmy dziedziczenia

Dziedziczenie interfejsu/implementacji, obecność klas


abstrakcyjnych oraz „czystych” interfejsów.
Hierarchia dziedziczenia: o wspólnym korzeniu i niezależnych
klasach bazowych.
Dziedziczenie wielokrotne, wsparcie dla konstrukcji typu mixin,
trait.

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
10 / 35
Zagadnienia natury technicznej

interpretacja vs. kompilacja, kompilacja do kodu pośredniego,


kompilacja „w locie”, dostepność
˛ „obrazów”.
automatyczne zarzadzanie
˛ pamieci
˛ a˛ garbage collection,
obsługa wyjatków
˛ exceptions,
wsparcie dla wielowatkowości:
˛ aktywne obiekty, synchronizacja,
automatyczna dokumentacja kodu,
integracja z innymi jezykami,
˛ możliwość użycia istniejacego
˛ kodu.

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
11 / 35
Simula

Zaprojektowana na poczatku
˛ lat 60-tych specjalnie do zastosowań
symulacyjnych (Simula I), a nastepnie
˛ rozwinieta
˛ w oparciu
o Algol-60 w jezyk
˛ ogólnego użytku (Simula-67).
Nie była stosowana w szerokim zakresie, ale zaproponowane
koncepcje wywarły ogromny wpływ na współczesne jezyki
˛
obiektowe i metody programowania.
Oparta na koncepcji klasy jako procedury zwracajacej ˛ wskazanie
na rekord aktywacji, który pełni role˛ obiektu i może zawierać
atrybuty oraz procedury.
Kolejne wersje wprowadzaja˛ inne elementy obiektowości:
jednokrotne dziedziczenie,
polimorfizm wspierany przez metody wirtualne (inner podobne do
super),
hermetyzacje˛ – pełna˛ (hidden) i w strukturze dziedziczenia
(protected).

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
12 / 35
Begin
Class Glyph ;
V i r t u a l : Procedure p r i n t I s Procedure p r i n t ; ;
Begin
End ;

Glyph Class Char ( c ) ;


Character c ;
Begin
Procedure p r i n t ;
OutChar ( c ) ;
End ;

Glyph Class L i n e ( elements ) ;


Ref ( Glyph ) Array elements ;
Begin
Procedure p r i n t ;
Begin
Integer i ;
For i : = 1 Step 1 U n t i l UpperBound ( elements , 1 ) Do
elements ( i ) . p r i n t ;
OutImage ;
End ;
End ;

Ref ( Glyph ) r g ;
Ref ( Glyph ) Array r g s ( 1 : 4 ) ;

! Main program ;
r g s ( 1 ) : − New Char ( ’A ’ ) ;
r g s ( 2 ) : − New Char ( ’b ’ ) ;
r g s ( 3 ) : − New Char ( ’b ’ ) ;
r g s ( 4 ) : − New Char ( ’a ’ ) ;
r g :− New L i n e ( r g s ) ;
rg . p r i n t ;
End ;

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
13 / 35
Smalltalk

Zaprojektowany na poczatku
˛ lat 70-tych jako pierwszy jezyk
˛ ściśle
obiektowy.
Pierwotna koncepcja opierała sie˛ tylko na klasach (z jezyka
˛
Simula-67) oraz przesyłaniu komunikatów.
Kolejne wersje wprowadzaja˛ mechanizm jednokrotnego
dziedziczenia, a ostateczna˛ postać uzyskuje Smalltalk-80.
Główna zasada konstrukcji jezyka:
˛ wszystko jest obiektem, do
obiektów przesyła sie˛ komunikaty.
Struktura jezyka
˛ jest maskymalnie uproszczona: dwa operatory
(przypisania i zwrócenia wartości) i pieć
˛ słów kluczowych (true,
false, nil, self, super); podstawowa fukcjonalność
wbudowana jest w zestaw standardowych klas.

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
14 / 35
Smalltalk – elementy obiektowości

Klasa opisuje interfejs i implementacje˛ obiektu (atrybuty oraz


komunikaty wraz z metodami).
Klasa jest jednocześnie obiektem, który przechowuje atrybuty
i udostepnia
˛ usługi statyczne, w tym do tworzenia nowych
obiektów (najcz˛eściej new).
Model pełnej hermetyzacji atrybutów, wszystkie komunikaty
publiczne.
Jednokrotne dziedziczenie o wspólnym korzeniu (Object).
Pojecie
˛ typu utożsamione z pojeciem
˛ klasy, można mówić o
dynamicznym typowaniu na podstawie zdolności obiektu do
obsługi określonych komunikatów.
Polimorfizm oparty na dynamicznym wiazaniu
˛ wszystkich metod,
brak potrzeby specyfikacji operacji abstrakcyjnych.

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
15 / 35
Account subclass: #Savings
instanceVariableNames: ’interest’
classVariableNames: ’’
poolDictionaries: ’’
category: nil !

!Savings methodsFor: ’initialization’!


init
interest := 0.
super init
!!

!Savings methodsFor: ’interest’!


interest: amount
interest := interest + amount.
self deposit: amount
!

Account subclass: #Checking


instanceVariableNames: ’checknum checksleft’
classVariableNames: ’’
poolDictionaries: ’’
category: nil
!

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
16 / 35
C++

Jeden z najpopularniejszych obecnie jezyków


˛ zorientowanych
obiektowo.
uniwersalny jezyk
˛ programowania niskiego i wysokiego poziomu,
statycznie typowany, kompilowany, wspierajacy
˛ programowanie
proceduralne, abstrakcyjne typy danych, programowanie
obiektowe i szablony.
Stworzony przez Bjarne Stroustrupa w 1979 w Bell Labs jako
rozszerzenie C (na poczatku
˛ zwany „C z klasami”, nazwa
zmieniona w 1983).

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
17 / 35
C++ elementy obiektowości

Dziedziczenie wielokrotne, samoistne klasy (bez nadklasy).


Ograniczenie widoczności składników klasy (public, private,
protected), funkcje i klasy zaprzyjaźnione.
Obiekty zadeklarowane za pomoca˛ wskaźnika moga˛ być
polimorficzne, w przeciwieństwie do zmiennych
niewskaźnikowych. Metody wirtualne sa˛ polimorficzne.
Możliwość istnienia klas abstrakcyjnych.
Zaleta: efektywność kodu (statyczne wiazania
˛ i statyczna kontrola
typów).
Wady: złożoność jezyka,
˛ dwoistość systemu typów.
Zaleta i wada: bardzo szczegółowe sterowanie dostepem
˛ przy
dziedziczeniu.

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
18 / 35
Objective-C

Stworzony na poczatku
˛ lat 80tych, nazywany również ObjC lub
Obj-C.
Refleksyjny, zorientowany obiektowo jezyk
˛ programowania, w
którym dodano komunikaty w stylu Smalltalka do C.
Aktualnie używany głównie w Mac OS X i GNUStep.
Dokładnie zdefiniowany nadzbiór C (można skompilować dowolny
program w C za pomoca˛ kompilatora Objective-C).
Składnia preprocesora, wyrażeń, deklaracji funkcji, wywołań
funkcji została przejeta
˛ od C, natomiast obiektowość pochodzi od
Smalltalka.
Dynamicznie typowany, choć można umieścić informacje nt. typu
przy argumentach, co zostanie sprawdzone w czasie kompilacji
(ostrzeżenie).

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
19 / 35
Objective-C – elementy obiektowości

Kod w Objective-C nie wywołuje metody tylko przesyła komunikat


(styl Smalltalka kontra styl Simuli). Obiekt może odebrać
komunikat, mimo że nie jest w stanie nań poprawnie zareagować
(może go natomiast przekazać dalej).
Interfejs i implementacja klasy sa˛ definiowane w osobnych
blokach kodu (podobnie jak pliki nagłówkowe w C++).
Możliwe istnienie metod instancyjnych i klasowych.
Wielobazowe dziedziczenie przy użyciu protokołów (nieformalny i
formalny zestaw metod które może/musi implementować klasa).
Pojecie
˛ kategorii – zbiór podobnych metod, które moga˛ być
wykorzystane przez programiste w klasie w czasie działania
programu, bez konieczności rekompilacji.
Klasa może zastapić
˛ (pose) dowolnego swojego przodka i przejać
˛
wszystkie jego komunikaty.

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
20 / 35
// definicja interfejsu
@ i n t e r f a c e classname : s u p e r c l a s s name
{
instance variables
}
+ classMethod1
+ classMethod2

− instanceMethod1
− do_something : ( i n t ) i
@end

/ / w osobnym p l i k u implementacja
@implementation classname
+ classMethod
{
/ / implementation
}
− ( i n t ) do_something : ( i n t ) i
{
r e t u r n [ s e l f square_root : i ] ;
}
@end

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
21 / 35
# i m p o r t <Foundation / NSObject . h>
@ i n t e r f a c e Rectangle : NSObject {
i n t width ;
i n t height ;
}
−( Rectangle ∗ ) i n i t W i t h W i d t h : ( i n t ) w h e i g h t : ( i n t ) h ;
−( v o i d ) s e t W i d t h : ( i n t ) w ;
−( v o i d ) s e t H e i g h t : ( i n t ) h ;
−( v o i d ) s e t W i d t h : ( i n t ) w h e i g h t : ( i n t ) h ;
−( i n t ) w i d t h ;
−( i n t ) h e i g h t ;
−( v o i d ) p r i n t ;
@end

# i m p o r t " Rectangle . h "


# i m p o r t < s t d i o . h>
@implementation Rectangle
−( Rectangle ∗ ) i n i t W i t h W i d t h : ( i n t ) w h e i g h t : ( i n t ) h {
s e l f = [ super i n i t ] ;

i f ( self ) {
[ s e l f setWidth : w height : h ] ;
}

return self ;
}
−( v o i d ) s e t W i d t h : ( i n t ) w {
width = w;
}
...
@end

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
22 / 35
@ i n t e r f a c e Square : Rectangle
−(Square ∗ ) i n i t W i t h S i z e : ( i n t ) s ;
−( v o i d ) s e t S i z e : ( i n t ) s ;
−( i n t ) s i z e ;
@end

@implementation Square
−(Square ∗ ) i n i t W i t h S i z e : ( i n t ) s {
s e l f = [ super i n i t ] ;

i f ( self ) {
[ s e l f setSize : s ] ;
}

return self ;
}

−( v o i d ) s e t S i z e : ( i n t ) s {
width = s ;
height = s ;
}
@end

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
23 / 35
Self

Stworzony w drugiej połowie lat 80-tych jako jezyk


˛ ściśle
obiektowy bezklasowy.
Oparty na koncepcji prototypu, która łaczy
˛ pojecia
˛ konkretyzacji i
dziedziczenia poprzez klonowanie (każdy obiekt posiada
odwołanie do swojego „rodzica”).
Brak rozróżnienia miedzy
˛ stanem a zachowaniem, pojecie
˛ „slotu”
łaczy
˛ dane i procedury w pojedyncza˛ konstrukcje,
˛ informacja o
stanie jest uzyskiwana przez przesłanie komunikatu.
Dziedziczenie wielokrotne z priorytetami, możliwość modyfikacji
struktury dziedziczenia w czasie życia obiektu.

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
24 / 35
Self – elementy obiektowości

Prototypowanie ma na celu ułatwienie zmiany zachowania


dziedziczacych
˛ klas.
Instancjonowanie polega na wykonaniu kopii klasy bazowej
(prototypu) i dodanie nowych funkcjonalności.
Każdy obiekt w Self jest niezależny, jednak w przypadku, gdy nie
rozumie otrzymanego komunikatu, może go delegować do
przodka.
Dziedziczenie na podstawie cech („trait”). Najpierw definiuje sie˛
prosty obiekt, potem nastepuje
˛ łańcuch instancjonowania. Gdy
zmieniony zostanie ten obiekt, wszystkie pozostałe również
zostana˛ zmienione (również w runtime).

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
25 / 35
/ / h e l l o world
l a b e l W i d g e t copy l a b e l : ’ H e l l o , World ! ’ .

/ / w y s w i e t l e n i e okna
( desktop activeWindow ) draw : ( l a b e l W i d g e t
copy l a b e l : ’ H e l l o , World ! ’ )

/ / nowy o b i e k t , , samochod ’ ’
_AddSlots : ( | v e h i c l e <−
( | parent ∗ = t r a i t s clonable | ) |).

/ / nazwa o b i e k t u
v e h i c l e _AddSlots : ( | name <− ’ a ut o m o b il e ’ | ) .

/ / k o p i a samochodu −− samochod sportowy ,


/ / dodana metoda , , j e d z do pracy ’ ’
_AddSlots : ( | s p o r t s C a r <− v e h i c l e copy | ) .
s p o r t s C a r _AddSlots :
( | driveToWork = (KOD METODY) | ) .

/ / nowy o b i e k t −− samochod sportowy Porsche


_AddSlots : ( | porsche911 <− s p o r t s C a r copy | ) .
porsche911 name : ’ Bobs Porsche ’ .

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
26 / 35
Eiffel

Stworzony w połowie lat 80-tych w celach komercyjnych jako


ściśle obiektowy jezyk
˛ o bardzo dużych możliwościach.
Oparty na klasach, które łacz
˛ a˛ pojecia
˛ modułu i typu (tak jak w
Adzie, Moduli i Javie).
Szczególna˛ cecha˛ jest możliwość specyfikacji warunków
wstepnych
˛ i końcowych dla poszczególnych metod oraz
niezmiennych dla obiektu design by contract.

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
27 / 35
Eiffel – elementy obiektowości

Klasa opisuje interfejs(y) i implementacje˛ obiektu (atrybuty oraz


operacje wraz z metodami).
Domyślnie wszystkie własności dostepne
˛ publicznie (atrybuty do
odczytu), hermetyzacja realizowana przez wskazanie zakresu
uprawnionych klas.
Dziedziczenie wielokrotne, struktura dziedziczenia w postaci grafu
z elementem minimalnym (None – dziedziczy od wszystkich klas),
oraz maksymalnym (General – dziedzicza˛ po nim wszystkie
klasy), istnieje wspólny korzeń dziedziczenia (Any).
pojecie
˛ typu utożsamione z pojeciem
˛ klasy, statyczna kontrola
typów.
polimorfizm wspierany przez dynamiczne wiazanie
˛ metod.
dostepne
˛ klasy parametryczne.

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
28 / 35
indexing
d e s c r i p t i o n : " Simple bank accounts "
class
ACCOUNT
f e a t u r e −− Access
balance : INTEGER
−− C u r r e n t balance
d e p o s i t _ c o u n t : INTEGER i s
−− Number o f d e p o s i t s made s i n c e opening
do
KOD
end
f e a t u r e −− Element change
d e p o s i t ( sum : INTEGER ) i s
−− Add sum t o account .
require
non_negative : sum >= 0
do
KOD
ensure
one_more_deposit :
d e p o s i t _ c o u n t = old d e p o s i t _ c o u n t + 1
updated : balance = old balance + sum
end
f e a t u r e { NONE } −− I m p l e m e n t a t i o n
a l l _ d e p o s i t s : DEPOSIT_LIST
−− L i s t o f d e p o s i t s s i n c e account ’ s opening .
invariant
c o n s i s t e n t _ b a l a n c e : ( a l l _ d e p o s i t s / = Void ) implies
( balance = a l l _ d e p o s i t s . t o t a l )
z e r o _ i f _ n o _ d e p o s i t s : ( a l l _ d e p o s i t s = Void ) implies
( balance = 0 )
end −− c l a s s ACCOUNT

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
29 / 35
indexing
d e s c r i p t i o n : " Savings accounts "
class
SAVINGS_ACCOUNT
inherit
ACCOUNT
r e d e f i n e d e p o s i t end
f e a t u r e −− Element change
d e p o s i t ( sum : INTEGER ) i s
−− Add sum t o account .
do
NOWA IMPLEMENTACJA
end
end −− c l a s s SAVINGS_ACCOUNT

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
30 / 35
Sather

Stworzony na poczatku
˛ lat 90-tych jako ściśle obiektowy jezyk
˛
cechujacy
˛ sie˛ wydajnościa,
˛ elegancja˛ oraz duża˛ funkcjonalnościa.
˛
Separacja pojecia
˛ typu (opisujacego
˛ interfejs) oraz klasy
(opisujacej
˛ implementacje).˛
Dziedziczenie wielokrotne, niezależne staruktury dziedziczenia
klas i typów.
Statycznie typowany, obsługa wyjatków,
˛ garbage collector
(programista może jednak zwolnić pamieć
˛ recznie).
˛
Może być kompilowany do kodu w C.

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
31 / 35
Sather – elementy obiektowości

Sather zawiera klasy szablonowe.


Postawiono nacisk na usuniecie
˛ niejawności (np. każdy
konstruktor musi być zdefiniowany przez programiste,˛ nie ma
konstruktorów domyślnych, automatycznego rzutowania itp.)
Przeciażanie
˛ operatorów ortogonalne do jezyka
˛ (np. a+b to to
samo co a.plus(b)).
Abstrakcyjne iteratory zdefiniowane dla wielu struktur danych
takich jak kolekcje, grafy, drzewa.
Posiada asercje, warunki wstepne,
˛ końcowe i niezmienniki.
Domkniecia
˛ funkcji, podobne do wskaźnika do funkcji, pozwalaja˛
na wiazanie
˛ cz˛eści jej argumentów (z kontrola˛ typów)
pozostawiajac
˛ kontrole˛ reszty do runtime.
Obiekty referencyjne (moga˛ być zmodyfikowane) i niezmienne
(immutable).

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
32 / 35
c l a s s MAIN i s
main i s
loop
i : = 1 . upto ! ( 1 0 ) ;
#OUT + i + " \ n " ;
end ;
end ;
end ;

upto ! ( once m: INT ) : SAME i s


i : INT : = s e l f ; −− parametr
loop
i f i >m then
q u i t −− l e a v e t h e l o o p when i goes beyond m
end ;
y i e l d i ; −− else use i as r e t u r n v a l u e and s t a y i n t h e
i : = i + 1 ; −− and i n c r e m e n t
end ;
end ;
Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki
Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
33 / 35
Java
Java została stworzona w firmie Sun w 1995. Zapożycza
wiekszość
˛ składni z C i C++, operuje jednak prostszym modelem
obiektowym i posiada mniej mechanizmów niskopoziomowych.
Aplikacje Javy sa˛ zwykle kompilowane do kodu pośredniego, który
może być uruchamiany na wirtualnych maszynach, niezależnie od
architektury sprz˛etowej.
Cechy jezyka,
˛ wsparcie przemysłu oraz przenośność sprawiło, że
Java jest jednym z najpopularniejszych i najszybciej rozwijajacych
˛
sie˛ nowoczesnych jezyków.
˛
Pierwotne typy skalarne nie sa˛ obiektami, pozostałe tak, co
wymusza „opakowywanie” prostych typów w obiekty-pojemniki.
Wszystkie klasy pochodza˛ od klasy Object, nie ma klas
samoistnych.
Obiekty alokowane dynamicznie, usuwanie niejawne (garbage
collector).
Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki
Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
34 / 35
Java – elementy obiektowości

Dziedziczenie jednokrotne, ale można implementować wiele


interfejsów (klas abstrakcyjnych), które moga˛ zawierać jedynie
deklaracje metod.
Mechanizm ten posiada cechy dziedziczenia wielokrotnego bez
typowych problemów (problem kraty).
Prócz tego można definiować metody i klasy abstrakcyjne
(abstract).
Wywołania metod sa˛ wiazane
˛ dynamicznie, chyba że metoda jest
zadeklarowana jako final, static lub private (wówczas nie można
jej przedefiniować).
Zalety: jezyk
˛ bardziej jednorodny (pod wzgledem
˛ obiektowym) niż
C++, prostsze sterowanie dostepem.
˛
Wada: dwoistość typów.

Aleksander Byrski, Marek Kisiel-Dorohinicki ( Katedra Informatyki


Programowanie
Akademia
obiektowe
Górniczo-Hutnicza w Krakowie {olekb,doroh}@agh.edu.pl
35 / 35

You might also like