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



Podobne dokumenty
Polimorfizm, metody wirtualne i klasy abstrakcyjne

Dokumentacja do API Javy.

Wykład 7: Pakiety i Interfejsy

Klasy abstrakcyjne, interfejsy i polimorfizm

Definiowanie własnych klas

Klasy abstrakcyjne i interfejsy

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Java: interfejsy i klasy wewnętrzne

Kurs WWW. Paweł Rajba.

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

Programowanie w Javie wykład 8 Interfejsy

Programowanie w Internecie. Java

Kompozycja i dziedziczenie klas

Wykład 4: Klasy i Metody

Polimorfizm. dr Jarosław Skaruz

Programowanie obiektowe

Programowanie obiektowe

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

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

Enkapsulacja, dziedziczenie, polimorfizm

Dziedziczenie. dr Jarosław Skaruz

Dziedziczenie. Tomasz Borzyszkowski

Definiowanie własnych klas

Interfejsy i klasy wewnętrzne

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

KLASY, INTERFEJSY, ITP

Programowanie obiektowe

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Wykład 6: Dziedziczenie

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Język Java część 2 (przykładowa aplikacja)

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Przykład -

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

Programowanie obiektowe

Aplikacje w środowisku Java

Język Java część 2 (przykładowa aplikacja)

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

1 Atrybuty i metody klasowe

Rozdział 4 KLASY, OBIEKTY, METODY

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Programowanie obiektowe i zdarzeniowe

Aplikacje w Javie wykład 5 Klasy c.d. (przeciążanie metod, polimorfizm) Metody i klasy abstrakcyjne Interfejsy

Projektowanie obiektowe. Roman Simiński Polimorfizm

Wykład 5: Więcej o Klasach i Metodach

Programowanie obiektowe

Typy sparametryzowane

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

Platformy Programistyczne Podstawy języka Java

Język Java wątki (streszczenie)

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

TEMAT : KLASY DZIEDZICZENIE

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

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

Programowanie obiektowe

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

Kompozycja i dziedziczenie klas

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

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

Java Język programowania

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Diagramy klas. dr Jarosław Skaruz

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

2. Składnia, środowisko i konwencje w Javie

Podstawy i języki programowania

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

PHP 5 język obiektowy

Wykład 2: Podstawy Języka

PARADYGMATY PROGRAMOWANIA Wykład 4

Programowanie w Javie - wykład 3

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Wywoływanie metod zdalnych

Programowanie obiektowe

Podejście obiektowe do budowy systemów rozproszonych

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

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

Definicje klas i obiektów. Tomasz Borzyszkowski

JAVA- wykład 2 Klasy

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

Programowanie obiektowe


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

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Technologie i usługi internetowe cz. 2

Aplikacje RMI

Kolekcje - pakiet Java Collections Framework

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

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

Współbieżność w środowisku Java

Języki i metody programowania Java INF302W. Wykład 1 (część 1) na podstawie Autor Dr inż. Zofia Kruczkiewicz

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

PODEJŚCIE OBIEKTOWE. Przykład 1 metody i atrybuty statyczne

Projektowanie aplikacji internetowych laboratorium

Programowanie obiektowe. Wykład 03. Maciej Wołoszyn 17 marca Polimorfizm oraz wczesne i późne wiazanie

Materiały do zajęć VII

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

Transkrypt:

Programowanie obiektowe Interfejsy Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Interfejsy Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 1 / 14

Interfejs programistyczny i jego implementacja Interfejs programistyczny klasy to sposób komunikowania się z jej obiektami, który jest opisany przez zestaw metod (i ewentualnie atrybutów), dostępnych do użycia z poziomu innej klasy. Standardowym sposobem opisu interfejsu programistycznego jest dokumentacja generowana przez program javadoc. Implementacja klasy to konkretne definicje wszystkich metod opisanych w interfejsie programistycznym oraz wszystkich innych metod i atrybutów o dostępie prywatnym będących składowymi klasy. /** * To jest przykładowa klasa <code>komunikat</code> * zawierająca komentarze <i>javadoc</i>. * @author Paweł Rogalinski * @version v1.0 (2006r.) */ class Komunikat /** * metoda drukuje komunikat. * @param tekst treść komunikatu * @return zawsze zwraca 1. */ public int drukujkomunikat(string tekst) System.out.println(tekst); return 1; Interfejsy Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 2 / 14

Interfejsy Interfejs w Javie to deklarowany za pomocą słowa kluczowego interface nazwany zbiór deklaracji zawierający: publiczne abstrakcyjne metody (bez implementacji), publiczne statyczne zmienne finalne (stałe) o ustalonych typach i wartościach. Implementacja interfejsu w klasie polega na zdefiniowaniu w tej klasie wszystkich metod zadeklarowanych w implementowanym interfejsie. Interfejsy Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 3 / 14

Interfejsy cd. Ogólna postać definicji interfejsu w języku Java: public interface NazwaInterfejsu typ nazwazmiennej = wartosc;... typ nazwametody(lista_parametrów);... Uwagi: modyfikator dostępu public przed słowem interface może nie występować - wówczas interfejs jest dostępny tylko w bieżącym pakiecie, zmienne są zawsze typu static final i mają przypisaną wartość stałą, metody są zawsze abstrakcyjne (bez implementacji). Interfejsy Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 4 / 14

Implementacja interfejsu Ogólna postać definicji klasy implementującej interfejs w języku Java: Uwagi: public class NazwaKlasy extends KlasaBazowa implements NazwaInterfejsu_1,..., NazwaInterjejsu_n... modyfikator dostępu public przed słowem class może nie występować - wówczas klasa jest dostępna tylko w bieżącym pakiecie, klasa może ale nie musi dziedziczyć inną klasę (słowa extends KlasaBazowa mogą nie występować) klasa może implementować wiele interfejsów, klasa musi definiować WSZYSTKIE metody implementowanych interfejsów albo pozostać klasą abstrakcyjną. klasa może zawierać własne (nie będące częścią interfejsu) atrybuty i metody. Interfejsy Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 5 / 14

Implementacja interfejsu przykład Przykład zawiera implementację klas reprezentujących różne gatunki zwierząt. Cześć zwierząt potrafi pływać, Niektóre potrafią wydawać odgłosy. Interfejsy Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 6 / 14

Implementacja interfejsu przykład /** * Interfejs definiujący metody * dla obiektów pływających w wodzie */ interface Plywa float podajglebokosc(); /** * Interfejs definiujący metody * dla obiektów wydających glosy */ interface WydajeGlos String podajglos(); /** * Klasa abstrakcyjna reprezentująca zwierzęta */ abstract class Zwierz String nazwa; Zwierz(String nazwa) this.nazwa = nazwa; public String podajnazwe()return nazwa; public abstract String podajgatunek(); public abstract void info(); Interfejsy Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 7 / 14

Implementacja interfejsu przykład cd. Klasa Ryba jest klasą pochodną Zwierz, która implementuje interfejs Plywa, natomiast klasa Kot implementuje interfejs WydajeGlos class Ryba extends Zwierz implements Plywa float glebokosc; Ryba(String nazwa, float glebokosc) super(nazwa); this.glebokosc = glebokosc; public String podajgatunek() return "Ryba"; public float podajglebokosc() return glebokosc; public void info() System.out.println(podajNazwe() + " pływa na głębokości " + podajglebokosc() ); class Kot extends Zwierz implements WydajeGlos Kot(String nazwa) super(nazwa); public String podajgatunek() return "Kot"; public String podajglos() return "Miauuu"; public void info() System.out.println(podajNazwe() + " mówi " + podajglos()); Interfejsy Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 8 / 14

Implementacja interfejsu przykład cd. Klasa Kaczka jest klasą pochodną Zwierz, która implementuje zarówno interfejs Plywa jak i interfejs WydajeGlos class Kaczka extends Zwierz implements Plywa, WydajeGlos Kaczka(String nazwa) super(nazwa); public String podajgatunek() return "Kaczka"; public float podajglebokosc() return 0.0F; public String podajglos() return "Kwa Kwa"; public void info() System.out.println(podajNazwe() + " pływa po powierzchni i mówi + podajglos() ); Interfejsy Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 9 / 14

Interfejs i zmienne referencyjne Interfejsy, podobnie jak klasy wyznaczają typy zmiennych referencyjnych. Przykład: Deklaracja zmiennej, której typem jest interfejs WydajeGlos wg1, wg2; Wartością takiej zmiennej może być odwołanie do obiektu dowolnej klasy, która implementuje ten interfejs. wg1 = new Kaczka( Dziwaczka ); wg2 = new Kot( Bonifacy ); Przy wykonywaniu powyższych przypisań następuje referencyjna konwersja rozszerzająca referencji wskazującej na nowy obiekt do typu interfejsu (implementowany interfejs jest traktowany podobnie jak klasa bazowa). Interfejsy Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 10 / 14

Interfejs i zmienne referencyjne cd. Przez zmienną której typem jest interfejs można wywołać dowolną metodę zadeklarowaną w tym interfejsie: System.out.println( wg1.podajglos() ); // wypisze Kwa Kwa System.out.println( wg2.podajglos() ); // wypisze Miauuu Wywoła się poprawna wersja metody, odpowiednio dla faktycznego obiektu wskazywanego przez zmienną. Wywołanie innej metody, która nie została zdefiniowana w interfejsie, jest możliwe wyłącznie po użyciu jawnej konwersji zawężającej: ((Zwierz)wg1).info(); // wypisze Dziwaczka pływa po powierzchni i mówi Kwa Kwa ((Zwierz)wg2).info(); // wypisze Bonifacy mówi Miauuu Interfejsy Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 11 / 14

Implementacja interfejsu przykład cd. class ZOO static void dialog_1(wydajeglos z1, WydajeGlos z2) System.out.print ("dialog_1: "); System.out.println( z1.podajglos() + " <===> " + z2.podajglos()); static void dialog_2(zwierz z1, Zwierz z2) System.out.print ("dialog_2: "); System.out.println( ((WydajeGlos)z1).podajGlos() + " <===> " + ((WydajeGlos)z2).podajGlos() ); static void dialog_3(zwierz z1, Zwierz z2) System.out.print ("dialog_3: "); if (z1 instanceof WydajeGlos && z2 instanceof WydajeGlos) System.out.println( ((WydajeGlos)z1).podajGlos() + " <===> " + ((WydajeGlos)z2).podajGlos() ); else System.out.println( " Dialog niemozliwy!" ); // ciąg dalszy na następnej stronie Zawężająca konwersja referencyjna do typu WydajeGlos. Sprawdzanie czy zawężająca konwersja referencyjna do typu WydajeGlos jest możliwa. Interfejsy Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 12 / 14

Implementacja interfejsu przykład cd. // ciąg dalszy klasy ZOO public static void main(string [] args) Kaczka kaczka = new Kaczka("Dziwaczka"); Kaczka kaczor = new Kaczka("Donald"); Ryba rybka = new Ryba("Zlota rybka", 0.32F); Kot kot = new Kot("Filemon"); kaczka.info(); kaczor.info(); rybka.info(); kot.info(); Przy przekazywaniu argumentów następuje konwersja referencyjna do typu WydajeGlos. System.out.println("\n<--- dialog_1 --------------->"); dialog_1(kaczka, kaczor); dialog_1(kaczor, kot); // dialog_1(kot, rybka); System.out.println("\n<--- dialog_2 --------------->"); dialog_2(kaczka, kaczor); dialog_2(kaczor, kot); dialog_2(kot, rybka); System.out.println("\n<--- dialog_3 --------------->"); dialog_3(kaczka, kaczor); dialog_3(kaczor, kot); dialog_3(kot, rybka); // koniec klasy ZOO Klasa Ryba nie implementuje interfejsu WydajeGlos, a więc konwersja referencyjna do typu WydajeGlos nie jest możliwa Interfejsy Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 13 / 14

Implementacja interfejsu przykład cd. // ciąg dalszy klasy ZOO public static void main(string [] args) Kaczka kaczka = new Kaczka("Dziwaczka"); Kaczka kaczor = new Kaczka("Donald"); Ryba rybka = new Ryba("Zlota rybka", 0.32F); Kot kot = new Kot("Filemon"); kaczka.info(); kaczor.info(); rybka.info(); kot.info(); System.out.println("\n<--- dialog_1 --------------->"); dialog_1(kaczka, kaczor); dialog_1(kaczor, kot); // dialog_1(kot, rybka); System.out.println("\n<--- dialog_2 --------------->"); dialog_2(kaczka, kaczor); dialog_2(kaczor, kot); dialog_2(kot, rybka); System.out.println("\n<--- dialog_3 --------------->"); dialog_3(kaczka, kaczor); dialog_3(kaczor, kot); dialog_3(kot, rybka); // koniec klasy ZOO Interfejsy Autor: Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki PWr 14 / 14