Interfejsy i klasy wewnętrzne

Podobne dokumenty
Programowanie obiektowe

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

Dokumentacja do API Javy.

Klasy abstrakcyjne i interfejsy

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

Wykład 8: klasy cz. 4

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Pakiety i interfejsy. Tomasz Borzyszkowski

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Kurs WWW. Paweł Rajba.

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

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

Wykład 9: Polimorfizm i klasy wirtualne

Definiowanie własnych klas

Aplikacje w środowisku Java

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

Programowanie obiektowe

.NET Klasy, obiekty. ciąg dalszy

Dziedziczenie. Tomasz Borzyszkowski

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

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Polimorfizm. dr Jarosław Skaruz

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Klasy abstrakcyjne, interfejsy i polimorfizm

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

PHP 5 język obiektowy

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

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

10. Programowanie obiektowe w PHP5

TEMAT : KLASY DZIEDZICZENIE

Programowanie obiektowe - 1.

Programowanie obiektowe w języku

Programowanie obiektowe

Enkapsulacja, dziedziczenie, polimorfizm

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

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Rozdział 4 KLASY, OBIEKTY, METODY

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

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

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

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

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

Język C++ Programowanie obiektowe

Wzorce projektowe. dr inż. Marcin Pietroo

Języki i techniki programowania Ćwiczenia 2

Dziedziczenie i interfejsy

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

Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt

Programowanie w Internecie. Java

Podstawy Programowania Obiektowego

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

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

PARADYGMATY PROGRAMOWANIA Wykład 4

Klasy cd. Struktury Interfejsy Wyjątki

Programowanie w Javie wykład 9 Klasy wewnętrzne, klasy anonimowe Klasy opakowujące

Definiowanie własnych klas

Dziedziczenie. dr Jarosław Skaruz

Programowanie zdarzeniowe

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

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

Definicje klas i obiektów. Tomasz Borzyszkowski

Java Język programowania

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

Java: interfejsy i klasy wewnętrzne

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Programowanie obiektowe

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

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

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Programowanie obiektowe

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

Programowanie obiektowe

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

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

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

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

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

Funkcje wirtualne. Wskaźniki do klas pochodnych są podstawą dla funkcji wirtualnych i polimorfizmu dynamicznego.

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

Wykład 5: Klasy cz. 3

Wprowadzenie do projektu QualitySpy

Programowanie obiektowe i zdarzeniowe

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Programowanie Obiektowe i C++

Multimedia JAVA. Historia

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?

Przeciążanie operatorów

KLASY, INTERFEJSY, ITP

Programowanie obiektowe

Zaawansowane programowanie w C++ (PCP)

Programowanie w Javie wykład 8 Interfejsy

Platformy Programistyczne Wykład z Javy dla zaawansowanych

Programowanie 2. Język C++. Wykład 9.

Podstawy Programowania Obiektowego

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Transkrypt:

Interfejsy i klasy wewnętrzne mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Interfejs klasy sposób komunikacji z jej obiektami (zestaw składowych publicznych). Określa on zestaw możliwych do użycia z poziomu innej klasy metod. Interfejs deklarujemy za pomocą słowa kluczowego interface. Jest to zestaw publicznych, abstrakcyjnych metod i/lub publicznych składowych stałych (pól, metod). Po co stosować interfejsy? Umożliwia to wprowadzenie mechanizmu podobnego do dziedziczenia wielobazowego

Java nie odnosi się do tych problemów. Ale owa funkcjonalność może się przydać, więc wprowadzono interfejsy jako trochę uboższe wielodziedziczenie.

Implementacja interfejsu w klasie zdefiniowane w tej klasie wszystkich metod interfejsu. Fakt ten oznacza się wykorzystując słowo kluczowe implements: Klasa, która implementuje interfejs, musi określić ciało wszystkich metod danego interfejsu lub być zadeklarowana jako klasa abstrakcyjna. Klasa może implementować wiele interfejsów naraz (podając je jako lista rozdzielona przecinkami). Interfejsy również wyznaczają typy zmiennych można więc dokonać upcastingu lub użyć operatora instanceof do stwierdzenia czy obiekt implementuje dany interfejs.

Wynik: Pojazd.toString(): Rower.start()

Adapter klasa implementująca metody interfejsu pozostawiając puste ciało (czyli brak jest kodu metody) void start() { //pusto } Przydatne jeśli chcemy w klasie implementować interfejs, ale będziemy korzystać tylko z kilku metod tego interfejsu.

Downcasting konwersja w dół hierarchii dziedziczenia. Załóżmy, że mamy zdefiniowaną klasę Ryba, która dziedziczy po klasie Zwierz. Można wykonać następujący downcasting: Ryba r = new Ryba(); Zwierz z = r; Ryba r2 = (Ryba) z; Można zastosować ten mechanizm również dla interfejsów.

Ryba jest konwertowana do Zwierz. Polimorficznie wywoływana jest gettyp dla Ryby (bo Java wie, że ten zwierz to ryba). Ryba implementuje ZdolnoscPorusznia, więc odwołuje się do start(). Ryba może machać płetwami..

Klasa wewnętrzna klasa zdefiniowana wewnątrz innej klasy. Klasa B jest klasą wewnętrzną w klasie A. Po co stosować klasy wewnętrzne: Względy bezpieczeństwa. Unikanie kolizji nazw. Lepsze pogrupowanie kodu.

Być zadeklarowana jako private (zwykłe klasy nie), uniemożliwiając jakikolwiek dostęp spoza klasy otaczające. Odwoływać się do niestatycznych składowych klasy otaczającej. Być zadeklarowana jako static (zwykłe klasy nie), przez co może się ona odwoływać do składowych statycznych klasy otaczającej. Mieć lub nie mieć nazwy (klasa anonimowa) Być lokalna zdefiniowana w jakimś bloku (np. wewnątrz instrukcji warunkowej) Odwoływać się do stałych lokalnych. Stworzenie klasy wewnętrznej nie oznacza, że obiekty klasy otaczającej zawierają składowe obiektów klasy wewnętrznej. Obiekt niestatycznej klasy wewnętrznej zawiera referencje do obiektu klasy otaczającej, co pozwala odwoływać mu się do jej składowych.

Problem: dostarczyć w klasie Samochód mechanizmu spalającego paliwo i zatrzymującego pojazd. Mechanizm powinien być niedostępny dla innych klas i powinien się odwoływać bezpośrednio do prywatnej składowej paliwo. Założenie: w każdej sekundzie zużywana jest podana ilość paliwa. Realizacja: Wykorzystana zostanie klasa Timer z pakietu javax.swing. Metoda start() wywołana na rzecz obiektu klasy Timer, z zadaną częstotliwością wywołuje funkcję actionperformed() na rzecz obiektu podanego jaki drugi parametr konstruktora. Klasa tego obiektu implementuje interfejs ActionListener i metodę void actionperformed(actionevent e).

Reszta klasy nie ulega zmianie To działa.. Ale dobrze byłoby znać wątki by przetestować..

Gdyby klasa wewnętrzna byłaby oznaczona jako publiczna to można się do niej odwołać w następujący sposób: NazwaKlasyOtaczającej.NazwaKlasyWewnętrznej Ale należy pamiętać, że takie odwołanie wymaga istnienia obiektu klasy otaczającej (i obiektu klasy wewnętrznej). Przykład: Samochod s = new Samochod( ); Samochod.Paliwo pal = Samochod.new Paliwo(); Względnie jeśli nie potrzebujemy zmiennej s: Samochod.Paliwo pal = new Samochod().new Paliwo();

Anonimowe klasy wewnętrzne nie posiadają nazwy. Czasem nie ma sensu ją na siłę wymyślać. W poprzednim przykładzie nazwa klasy (Paliwo) jest nam do niczego niepotrzebna bo interesuje nas tylko implementacja interfejsu ActionListener. Można więc napisać: Anonimowe klasy wewnętrzne nie mogą mieć konstruktorów. Za pomocą anonimowej klasy wewnętrznej można stworzyć tylko jeden obiekt. Anonimowe klasy wewnętrzne są kompilowane do plików.class o nazwach automatycznie nadawanych przez kompilator (np. Samochod$1.class). Definiowanie klas wewnętrznych to jedyny dopuszczalny przypadek użycia nazwy interfejsu w wyrażeniu new.

Gdy klasy wewnętrzne definiowane są w blokach lokalnych np. wewnątrz ciała metody to nazywa się je klasami lokalnymi. Klasy lokalne: Są bardzo dobrze odseparowane (nie ma do nich dostępu spoza bloku, w którym są zdefiniowane) Mogą się odwoływać do składowych klasy otaczającej oraz do stałych lokalnych. Po co klasy lokalne? Wiele rzeczy z GUI wykorzystuje ten mechanizm (mniej lub bardziej jawnie, więc warto go poznać by wiedzieć co się w obiektach GUI dzieje i dlaczego).

1. Mając daną klasę zdefiniowaną w sposób następujący: Określ czy podany kod się skompiluję. Odpowiedź uzasadnij. 2. Uzupełnij klasę MojaStrukturaDanych, której zadaniem jest stworzenie tablicy liczb całkowitych uporządkowanych rosnąco o zadanym wcześniej rozmiarze.

Korzystając z kodu klasy Samochód zawartego na: http://www.tomaszx.pl/materialy/ztp_lab3_samochod.zip napisać podobną klasę przedstawiającą konto bankowe, do którego automatycznie (co sekundę) doliczane są odsetki. Zapewnić bezpieczeństwo funkcjonalności odpowiedzialnej za doliczanie odsetek (użyć prywatnej klasy wewnętrznej). Aby przetestować: