Professional Documents
Culture Documents
Programowanie Obiektowe
Programowanie Obiektowe
Katedra Informatyki
Akademia Górniczo-Hutnicza w Krakowie
{olekb,doroh}@agh.edu.pl
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).
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 ;
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.
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).
− 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
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
@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
/ / 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 ’ | ) .
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.