Pakiety i interfejsy. Tomasz Borzyszkowski



Podobne dokumenty
Wykład 7: Pakiety i Interfejsy

Dziedziczenie. Tomasz Borzyszkowski

Klasy abstrakcyjne, interfejsy i polimorfizm

Programowanie w Internecie. Java

Interfejsy i klasy wewnętrzne

Polimorfizm. dr Jarosław Skaruz

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie obiektowe

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Klasy abstrakcyjne i interfejsy

Programowanie obiektowe

Dokumentacja do API Javy.

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Kurs WWW. Paweł Rajba.

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Aplikacje w środowisku Java

Enkapsulacja, dziedziczenie, polimorfizm

Programowanie obiektowe

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

PHP 5 język obiektowy

Definicje klas i obiektów. Tomasz Borzyszkowski

PROE wykład 4 pozostałe operatory, forward declaration, dziedziczenie. dr inż. Jacek Naruniec

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

1 Atrybuty i metody klasowe

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

Programowanie obiektowe

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Aplikacje RMI

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Multimedia JAVA. Historia

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Java: interfejsy i klasy wewnętrzne

Wykład 9: Polimorfizm i klasy wirtualne

Java jako język programowania

Analiza i projektowanie aplikacji Java

Javadoc. Piotr Dąbrowiecki Sławomir Pawlewicz Alan Pilawa Joanna Sobczyk Alina Strachocka

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Wykład 8: klasy cz. 4

KLASY, INTERFEJSY, ITP

java.util.* :Kolekcje Tomasz Borzyszkowski

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Aplikacje RMI Lab4

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Wykład 6: Dziedziczenie

Wykład 4: Klasy i Metody

Bezpieczne programowanie w Javie kontrola dostępu. Security Programming in Java Access Control

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

PARADYGMATY PROGRAMOWANIA Wykład 4

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

Języki i metody programowania Java. Wykład 2 (część 2)

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Programowanie obiektowe - 1.

Rozdział 4 KLASY, OBIEKTY, METODY

> C++ dziedziczenie. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Programowanie obiektowe

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java Język programowania

Podstawy programowania obiektowego

Dziedziczenie. dr Jarosław Skaruz

Projektowanie obiektowe. Roman Simiński Polimorfizm

Pierwsze kroki. Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

Programowanie obiektowe

Klasy cd. Struktury Interfejsy Wyjątki

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Podstawy programowania III

Programowanie obiektowe. Obiekt Klasa Składnia klasy: Interfejsy Składnia interfejsu: Metody Składnia instrukcji Sub: Składnia instrukcji function:

Java Podstawy. Michał Bereta

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Java podstawy jęyka. Wykład 2. Klasy abstrakcyjne, Interfejsy, Klasy wewnętrzne, Anonimowe klasy wewnętrzne.

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.

Java niezbędnik programisty spotkanie nr 3. Modyfikatory, jednostki kompilacji, tworzenie/inicjalizacja, odśmiecanie/ finalizacja...

Platformy Programistyczne Wykład z Javy dla zaawansowanych

Abstrakcyjny typ danych

TEMAT : KLASY DZIEDZICZENIE

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy

Laboratorium 6 DIAGRAM KLAS (Class Diagram)

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Język C++ Programowanie obiektowe

Programowanie obiektowe

10. Programowanie obiektowe w PHP5

Programowanie obiektowe

Transkrypt:

Pakiety i interfejsy Tomasz Borzyszkowski

Pakiety podstawy W dotychczasowych przykładach nazwy klas musiały pochodzić z jednej przestrzeni nazw, tj. być niepowtarzalne tak, by nie doprowadzić do kolizji nazw. Dbanie o niepowtarzalność nazw stwarzało by wiele problemów w projektach zespołowych, gdyż zmuszało by programistów do uzgadniania nazw klas ze wszystkimi innymi programistami projektu. Java oferuje mechanizm pozwalający na podział przestrzeni nazw klas na niezależne przestrzenie o pełnym zakresie nazw każda. Tym mechanizmem jest podział projektu na pakiety. Pakiet składa się z definicji klas o nazwach niezależnych od nazw klas z innych pakietów oraz daje możliwość kontroli dostępu do klas pakietu z innych klas. Np. możemy utworzyć pakiet zawierający klasę List nie martwiąc się tym, że może kolidować z innymi klasami o takiej samej nazwie umieszczonych w innych pakietach. 2

Pakiety definicje Aby utworzyć pakiet należy w pierwszej linii pliku ze źródłami klas umieścić komendę: package nazwa; nazwa jest nazwą nowej przestrzeni nazw klas (nazwą pakietu). Ominęcie tej komendy na początku pliku (czyli tak jak było do tej pory) powoduje, że wszystkie klasy zdefiniowane w pliku będą umieszczone w domyślnym pakiecie bez nazwy. Umieszczenie komendy package z tą samą nazwą pakietu w kilku plikach z definicjami klas spowoduje umieszczenie klas zdefiniowanych we wszystkich tych plikach w jednym pakiecie. Możemy tworzyć hierarchie pakietów, oddzielając ich nazwy kropką: package nazwa1.nazwa2.nazwa3; Powyższy pakiet musi być przechowywany w katalogu nazwa1/nazwa2/nazwa3. Nie można zmieniać nazwy pakietu bez zmiany nazw katalogów, w których klasy są przechowywane. 3

Zmienna systemowa CLASSPATH CLASSPATH jest zmienną systemową, która określa położenie klas w systemowym drzewie katalogów. Zmienna ta jest używana do odnajdywania definicji klas zarówno przez kompilator jak i maszynę wirtualną. Zobacz: PackTest.java Przykład: oraz: setclasspath Definiujemy klasę PackTest umieszczoną w pakiecie test. Ponieważ hierarchia pakietów musi odpowiadać hierarchii katalogów, musimy utworzyć katalog test i umieścić w nim plik PackTest.java. Przechodzimy do katalogu test i kompilujemy plik PackTest.java. W wyniku otrzymujemy plik PackTest.class w katalogu test. Próba uruchomienia PackTest z katalogu test lub zawierającego test spowoduje błąd. Należy dodać katalog zawierający test do CLASSPATH i uruchomić klasę test.packtest z dowolnego miejsca. Zobacz: MyPack/ccountBalance.java 4

Kontrola dostępu Zakres private nic protected public Klasa TAK TAK TAK TAK Podklasy w pakiecie Inne klasy w pakiecie Podklasy w innym pakiecie Inne klasy w innym pakiecie NIE TAK TAK TAK NIE TAK TAK TAK NIE NIE TAK TAK NIE NIE NIE TAK 5

Kontrola dostępu przykład protection.p1 protection.p2 Protection Derived Protection2 SamePackage OtherPackage Demo Demo Zobacz katalog: protection 6

Importowanie pakietów Wszystkie klasy języka Java są przechowywane w pakietach. Ich użycie wymaga podawania pełnej, pakietowej ścieżki dostępu do klasy. Dla uproszczenia zapisu nazw klas w pakietach zewnętrzych można używać, i zwykle tak się robi, komendy: import pgk1[.pkg2].(nazwa_klasy *); Po zaimportowaniu klasa jest widoczna i można się do niej odwoływać bezpośrednio. Użycie gwiazdki może wydłużyć czas kompilacji. Szczególnie gdy, importujemy kilka dużych pakietów. Dlatego dobrym zwyczajem jest raczej wskazanie konkretnej klasy niż importowanie całego pakietu. Z drugiej strony użycie gwiazdki nie ma wpływu na czas działania programu ani na wielkość kodu wynikowego. Istnienie klasy o takiej samej nazwie w dwóch zaimportowanych pakietach nie spowoduje błędu póki w kodzie nie wystąpi odwołanie do tej klasy. Trzeba wówczas użyć pełnej ścieżki dostępu do klasy. Zobacz: MyPack i plik: TestBalance.java 7

Interfejsy definicja Interfejs specyfikuje co klasa musi implementować, jednak nie specyfikuje jak. Interfejsy są syntaktycznie podobne do klas, nie posiadają natomiast zmiennych instancyjnych, a ich metody nie posiadają ciała. Klasa może implementować dowolną liczbę interfejsów oraz dowolna liczba klas może implementować jeden interfejs. Interfejs nie zakłada sposobu implementacji swoich metod. access interface nazwa{ typ zmienna_finalna1 = wartość; typ nazwa_metody1(lista_param);... } Jeżeli access jest public, to interfejs jest dostępny publicznie i jego elementy są także niejawnie publiczne. Jeżeli access nie występuje, to interfejs jest dostępny tylko wewnątrz pakietu. Zmienne występujące w interfejsie są niejawnie final i static. 8

Interfejsy implementacja Implementacja interfejsu polega na dodaniu słowa kluczowego implements z nazwą interfejsu do nagłówka klasy oraz na dodaniu implementacji metod zadeklarowanych w interfejsie. Postać ogólna: access class klasa [extends superklasa] [implements interfejs [,interfejs]] { // ciało klasy } Tutaj access jest public lub nie występuje wcale. Jeżeli klasa implementuje więcej niż jeden interfejs, są one rozdzielane przecinkiem. Jeżeli dwa implementowane interfejsy deklarują tę samą metodę, to ta sama metoda będzie używana przez klientów obu interfejsów. Metody implementujące metody interfejsu muszą być zadeklarowane jako public. Interfejsów można używać jak typów, zamiast klas. Wówczas odpowienia implementacja interfejsu zostanie wybrana w trakcie wykonania programu. Interfejsy mogą być także implementowane przez klasy abstrakcyjne. Zobacz: Callback.java 9

Zastosowanie interfejsów W poprzednich rozdziałach przezentowaliśmy kilka implementacji stosów. Istnieje wiele możliwych implementacji idei stosu. Np. można implementować stosy o stałej wielkości lub zmiennej, wybierając wewnętrzną implementację w postacji tablic, list, drzew binarnych, itd. Wspólną cechą wszystkich takich stosów będzie to, że możemy przy pomocy metody push(e) dodawać element e na wierzchołek stosu, natomiast za pomocą metody pop() zdejmować element ze stosu. Wspólne cechy stosów liczb całkowitych można wyrazić w postaci następującego interfejsu: patrz IntStack.java Następnie implementujemy powyższy interfejs na dwa sposoby: Stosy o stałej wielkości Stosy o zmiennej wielkości patrz: FixedStack.java patrz: DynStack.java 10

Interfejsy zmienne i rozszerzanie Istnieje możliwość wykorzystania interfejsu do importowania stałych do wszystkich klas implementujących interfejs. Wewnątrz interfejsu stałym powinna zostać nadana odpowiednia wartość. Wszystkie stałe zaimportowane do klasy w taki sposób są niejawnie traktowane jak zmienne final. Zobacz: FinalIF.java Interfejs może być rozszerzeniem innego interfejsu, podobnie jak jedna klasa może rozszerzać inna klasę. Składnia takiego rozszerzenia jest także podobna do rozszerzania klas. Klasa implementujaca interfejs musi implementować wszystkie metody tego interfejsu oraz wszystkie metody dziedziczone przez ten interfejs. Zobacz: ExtendIF.java 11