Java – język programowania zorientowany

Transkrypt

Java – język programowania zorientowany
Java – język programowania zorientowany obiektowo
Artur Piętas
Poniższy artykuł przedstawia ideę programowania zorientowanego obiektowo
w kontekście jednego z najpopularniejszych języków programowania, jakim jest Java.
W pracy został zawarty opis kluczowych założeń podejścia obiektowego oraz podstawowe
informację na temat technologii Java.
1. Programowanie zorientowane obiektowo
Programowanie obiektowe dostarcza programistom wyższy poziom abstrakcji, aniżeli
programowanie strukturalne czy proceduralne. Zaletami języków obiektowych są w głównej
mierze łatwość pisania i konserwacji kodu, możliwość wielokrotnego wykorzystania jego
fragmentów w różnych projektach oraz zgodność modeli obiektowych ze światem
rzeczywistym.[1,2]
Bruce Eckel w swoich publikacjach przytacza pięć głównych cech Smalltalka,
będącego pierwszym językiem obiektowym. Cechy te w przejrzysty sposób obrazują ideę
podejścia obiektowego:
1. Wszystko jest obiektem. Obiekt jest pewnego rodzaju zmienną przechowującą nie
tylko dane, ale umożliwiającą również realizowanie na sobie pewnych operacji.
Dowolne pojęcie ze świata rozwiązywanego problemu (pojazdy, budynki, zwierzęta,
usługi, itd.) można wyrazić w programie za pomocą obiektu.
2. Program to zbiór obiektów, które poprzez wysyłanie komunikatów, mówią sobie
nawzajem, co robić. „Wysłanie komunikatu” do obiektu jest równoznaczne
z zażądaniem wykonania przez niego pewnej operacji. Innymi słowy wywoływana jest
funkcja należąca do danego obiektu.
3. Każdy obiekt ma własną pamięć, w skład której wchodzą inne obiekty. Oznacza
to, że nowy obiekt powstaje poprzez połączenie w jeden pakiet grupę już istniejących
obiektów. W ten sposób powstają rozbudowane aplikacje, których złożoność ukryta
jest za prostotą obiektów.
1
4. Każdy obiekt posiada swój typ. Innymi słowy każdy obiekt jest instancją określonej
klasy, gdzie „klasa” jest synonimem „typu”. Kluczowa cechą wyróżniającą daną klasę
jest odpowiedź na pytanie: „Jakie komunikaty można do niej wysyłać?”.
5. Wszystkie obiekty danego typu mogą otrzymywać te same komunikaty. To
stwierdzenie okazuje się być nieco mylące. Ponieważ obiekt typu „okrąg” jest
jednocześnie obiektem typu „figura”, co za tym idzie „okrąg” może otrzymywać
komunikaty odpowiednie dla „figury”. Oznacza to, że istnieje możliwość pisania kodu
odwołującego się do „figury”, który będzie automatycznie obsługiwał wszystkie
obiekty pasujące do opisu typu „figura”. Ta „zastępowalność” jest jedną
z najpotężniejszych idei programowania zorientowanego obiektowo.[1,2]
2. Ukrywanie implementacji
Ukrywanie implementacji (inaczej hermetyzacja, enkapsulacja) polega na czynieniu
pewnych atrybutów danego obiektu niedostępnymi w bezpośredni sposób – dane są ukryte
i traktowane jako nierozdzielna całość z usługami. Twórca danej klasy udostępnia
programiście – klientowi tylko te pola i metody, które są mu realnie potrzebne aby wykonać
określone zadanie. Użytkownik w prosty sposób odróżnia to co jest dla niego istotne, od tego
co może zignorować, nie ingerując przy tym w określone fragmenty kodu, a tym samym
powodując powstawanie błędów. Z drugiej strony, twórca klasy może w prosty sposób
przebudowywać swoją klasę, bez obawy o jej działanie po stronie klienta.[1]
Java posiada trzy słowa kluczowe, zwane specyfikatorami dostępu służące do
ustalania rozgraniczeń w klasach:
1. public (publiczny) – definicje są dostępne dla każdego,
2. private (prywatny) – dostęp do nich ma tylko twórca danej klasy wewnątrz jej
funkcji składowych,
3. protected (chroniony) – działa podobnie jak private, z tą różnicą, że klasy
pochodne mają dostęp do elementów chronionych swojej klasy bazowej.[1]
2
3. Dziedziczenie
Idea dziedziczenia wprowadza dwa podstawowe pojęcia: klasy bazowej i klasy
potomnej. Klasa potomna jest wywodzona z klasy bazowej i przejmuje jej wszystkie składowe
i właściwości. Do klasy potomnej można dodać nowe atrybuty bądź zmienić istniejące. Taka
zmiana określana jest jako przesłonięcie (ang. overriding) i polega na redefinicji w klasie
potomnej istniejącej już metody bazowej w celu zmiany jej zachowania. [1]
Rys. 1 Przykładowy diagram UML przedstawiający hierarchię klas
Powyższy diagram UML przedstawia klasyczny przykład dziedziczenia z figurami
geometrycznymi. Bazowym typem jest „Figura”. Posiada pięć metod (w tym wypadku
publicznych) pozwalających na wykonywanie na niej pewnych operacji. Poprzez
dziedziczenie wywodzone są z niej specyficzne typy figur: „Okrąg”, „Prostokąt” i „Trójkąt”.
Każdy z podtypów przesłania dwie metody rysuj() i wymaz() z interfejsu klasy bazowej, które
teraz będą działały inaczej. Dodatkowo z klasy „Prostokąt” wywiedziono klasę „Kwadrat”,
która otrzyma wszystkie cechy klas „Figura” i „Prostokąt” oraz nową metodę obliczPole().
W rezultacie otrzymano wielopoziomową hierarchie klas. [1]
W architekturze języka Java, oprócz typów podstawowych jakimi są int, float, etc,
wszystko jest obiektem. Wszystkie klasy wywodzą się z klasy bazowej Object. Można zatem
powiedzieć że owa architektura posiada wielopoziomową hierarchię klas o strukturze drzewa
z korzeniem. Tym korzeniem jest klasa Object.[1]
3
4. Polimorfizm
Polimorfizm (zwany również wiązaniem dynamicznym, późnym wiązaniem,
wiązaniem czasu wykonania) jest trzecim kluczowym składnikiem języka programowania
zorientowanego obiektowo, zaraz pod dziedziczeniu i abstrakcji danych. Jest to potężne
narzędzie pozwalające programiście wyabstrahować od konkretnego typu. [3]
Polimorficzne wywołanie metod daje możliwość danemu typowi odróżnienie siebie od
innych, podobnych. Trwa to tak długo, jak długo są one wywiedzione z tego samego typu
bazowego. Odróżnienie to polega na odmiennym działaniu metod, które mogą być
wywoływane poprzez interfejs wspólnej klasy bazowej.[3]
5. Java – język programowania zorientowany obiektowo
Java jest to uniwersalny, wieloplatformowy, obiektowy język programowania
stworzony przez zespół pod kierownictwem Jamesa Goslinga z firmy Sun Microsystems.
Został zaprojektowany z myślą o prostocie i niezawodności. Składnia języka jest wzorowana
na C++, ale zaznaczają się wyraźne różnice w organizacji obydwu języków. Wiele aspektów
z języka C++ zostało pominiętych, za to pewne mechanizmy zostały zaczerpnięte z innych
języków programowania. [4]
Java jest językiem silnie typowanym. Taka specyfikacja wprowadza wyraźną granicę
pomiędzy błędami kompilacji, które mogą i muszą być wykryte w czasie kompilacji oraz
błędami czasu wykonywania. W czasie kompilacji kod źródłowy programu zostaje
przetłumaczony na kod pośredni, tzw. bytecode, który jest sekwencją instrukcji dla Wirtualnej
Maszyny Javy. Na czas wykonania składają się ładowanie i podpięcie klas niezbędnych do
działania danej aplikacji oraz właściwe wykonanie programu. [4]
Obecnie technologia Java należy do firmy Oracle Corporation i jest stale rozwijana.
Najnowsza wersja języka – Java Standard Edition 7, jest zaimplementowana na dwóch
produktach tejże firmy: Java SE Development Kit (JDK) 7 oraz Java SE Runtime
Environment (JRE) 7.[4]
JRE 7 dostarcza bibliotek, Wirtualną Maszynę Javy (JVM) oraz inne komponenty
potrzebne do uruchomienia aplikacji napisanych w języku Java. JDK 7 zawiera wszystkie
elementy JRE 7, a ponadto narzędzia programistyczne takie jak kompilatory i debuggery
niezbędne przy tworzeniu oprogramowania. [4]
4
Platforma Java stanowi potężne narzędzie programistyczne. W jej skład wchodzą
biblioteki do obsługi protokołów sieciowych, multimediów, grafiki 3D, plików, baz danych
i wiele innych. Posiada rozbudowany moduł do tworzenia graficznych interfejsów
użytkownika (GUI). Poniższy diagram przedstawia strukturę komponentów technologii
Java:[4]
Rys. 2 Diagram komponentów języka Java SE 7
6. Bezpieczeństwo technologii Java
Architekci języka Java dołożyli wszelkich starań, aby aplikacje w nim tworzone były
maksymalnie niezawodne i bezpieczne. Zrezygnowano z kilku aspektów obecnych w języku
C++ oraz dodano nowe mechanizmy. W ten sposób zminimalizowano liczbę przypadków
przysparzających najwięcej problemów programistom i generujących najwięcej błędów. [1,4]
Jedną z cech języka Java zwiększającą jego niezawodność jest brak wielokrotnego
dziedziczenia. Oznacza to, że obiekt nie może być więcej niż jednego typu. Wyeliminowano
przez to powstawanie struktur kratowych oraz mogące wyniknąć niejednoznaczności
dziedziczenia. [1,4]
Kolejny ważnym aspektem jest kontrola zakresu indeksów tablic uniemożliwiająca
odwołanie się do istniejącego indeksu podczas działania programu. W języku Java tablica jest
obiektem posiadającym atrybut określający jej rozmiar. [1,4]
5
Istotnym mechanizmem jest tzw. odśmiecacz pamięci (ang. Garbage Collector)
eliminujący potencjalne zagrożenie związane z wyciekiem pamięci. Programista został
odciążony z obowiązku jawnego niszczenia obiektów (destruktory). W momencie kiedy dany
obiekt nie jest już potrzebny, pamięć po nim zostaje automatycznie zwolniona. [1,4]
W
technologii
Java
zrezygnowano
z
arytmetyki
wskaźników.
Większość
programistów C++ uważa, że jest to pewne ograniczenie nałożone na twórców
oprogramowania, nie mniej jednak zabieg ten poprawił niezawodność aplikacji.
Wyeliminowano możliwość fałszowania bądź zmiany wskazań uchwytów do obiektów na
inny obszar pamięci. [1,4]
Język Java posiada bardzo rozbudowany mechanizm obsługi wyjątków. Już sam
kompilator wymusza na programiście napisanie kodu obsługującego sytuację wyjątkową
mogącą wystąpić w danym momencie. Dzięki temu nie występuje przypadkowość obsługi
(bądź braku obsługi) błędów, co więcej zostaje ułatwiona czytelność i pielęgnacja kodu. [1,4]
Nie są to wszystkie aspekty czyniące Javę językiem bezpiecznym. Z całą pewnością
Javę można implementować na urządzeniach o znaczeniu krytycznym, bez obawy o sprzęt
i dane, zakładając oczywiście, że twórcy systemu mają odpowiednie kwalifikacje. [1,4]
7. Podsumowanie
Język Java jest obecnie najpopularniejszym język programowania. Według portalu
tiobe.com zajmuje on pierwsze miejsce w rankingu języków nie tylko obiektowych
posiadając 17,874% udziału (dane z października 2011r.). Technologia firmy Oracle jest
wykorzystywana w bardzo dużej liczbie projektów komercyjnych. Istniej możliwość
tworzenia aplikacji webowych, desktopowych, mobilnych, implementacji na różnego rodzaju
urządzeniach elektronicznych. Coraz więcej osób uczy się tego języka. Przyczynia się do tego
jego prostota i otwartość kodów źródłowych Javy.
6
Literatura
[1]
Eckel Bruce: Thinking in Java, wydanie IV, Wydawnictwo Helion, 2006, pp. 37 – 90
[2]
Eckel Bruce: Thinking in C++, Wydawnictwo Helion, pp. 25 – 66
[3]
Wierzbicki Marek: Java – programowanie obiektowe, Wydawnictwo Helion, 2005, pp.
11 – 31
Strony www:
[4] Dokumentacja Javy ze strony Oracle: http://docs.oracle.com/javase/7/docs/ (11.2011)
7

Podobne dokumenty