Wyznaczanie klas dziedziczonych w Javie. Aleksander Nałęczyński

Podobne dokumenty
Programowanie obiektowe

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

Dokumentacja do API Javy.

Interfejsy i klasy wewnętrzne

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

Klasy abstrakcyjne i interfejsy

Klasy cd. Struktury Interfejsy Wyjątki

Polimorfizm. dr Jarosław Skaruz

Klasy abstrakcyjne, interfejsy i polimorfizm

Aplikacje w środowisku Java

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

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

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

Enkapsulacja, dziedziczenie, polimorfizm

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie obiektowe

PHP 5 język obiektowy

Dziedziczenie. dr Jarosław Skaruz

Wykład 7: Pakiety i Interfejsy

Polimorfizm, metody wirtualne i klasy abstrakcyjne

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

Mechanizm dziedziczenia

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

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

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

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

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

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

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

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

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

.NET Klasy, obiekty. ciąg dalszy

Rozdział 4 KLASY, OBIEKTY, METODY

KLASY, INTERFEJSY, ITP

Pakiety i interfejsy. Tomasz Borzyszkowski

Programowanie obiektowe

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

10. Programowanie obiektowe w PHP5

Wykład 8: klasy cz. 4

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

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

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

Kompozycja i dziedziczenie klas

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017


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

Programowanie obiektowe

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

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

Programowanie obiektowe

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

Kompozycja i dziedziczenie klas

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

Programowanie w Javie - wykład 3

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

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

Dziedziczenie. Ogólna postać dziedziczenia klas:

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Interfejsy w Java. Przetwarzanie równoległe. Wątki.

Programowanie obiektowe

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

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

Wykład 5: Klasy cz. 3

Programowanie zdarzeniowe

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


Programowanie w języku Java WYKŁAD

KOTLIN. Język programowania dla Androida

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

Kurs WWW. Paweł Rajba.

Język C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.

Programowanie obiektowe i język Java

Definiowanie własnych klas

Podstawy Języka Java

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Zaawansowane programowanie w języku C++ Klasy w C++

Platformy Programistyczne Podstawy języka Java

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

Java: interfejsy i klasy wewnętrzne

Na przykładzie języków Java, C# i odrobiny C++ Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

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

TEMAT : KLASY DZIEDZICZENIE

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Programowanie obiektowe i zdarzeniowe

Programowanie 2. Język C++. Wykład Relacje między klasami, klasy zagnieŝdŝone, klasy lokalne

SpecVer - metodyka tworzenia oprogramowania integrująca zadania specyfikacji, implementacji i weryfikacji modułów programów

Kontenery i komponenty graficzne

Programowanie w Internecie. Java

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

Przypomnienie o klasach i obiektach

Programowanie obiektowe

Języki programowania imperatywnego

Technologie i usługi internetowe cz. 2

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

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

Wykład 6: Dziedziczenie

Programowanie w Javie - wykład 2

Programowanie w środowisku graficznym- wykład 2 Java - Klasy

Programowanie w Javie wykład 7 Klasy c.d. (przeciążanie metod, polimorfizm) Metody i klasy abstrakcyjne Bloki inicjalizacyjne

Transkrypt:

Wyznaczanie klas dziedziczonych w Javie Aleksander Nałęczyński

Klasy zagnieżdżone Klasa zagnieżdżona to klasa, która jest składową (member( member) ) innej klasy. Klasa A dziedzicząca z klasy C otrzymuje własną kopię pól i metod z C Klasy A i B zagnieżdżone w klasie C korzystają wspólnie z tych samych pól i metod z klasy C

Klasy zagnieżdżone Kiedy używamy klas zagnieżdżonych? Gdy klasa ma sens tylko w kontekście klasy otaczającej, np. klasa kursora w kontekście klasy określającej komponent tekstowy. W API Javovym często występują klasy zagnieżdżone Component.AccessibleAWTComponent.AccessibleAWTFocusHandler

Statyczne klasy zagnieżdżone Klasy zagnieżdżone mogą być oznaczone jako statyczne (nested( static class) Możemy dowolnie tworzyć instancje statycznych klas zagnieżdżonych

Klasy wewnętrzne Niestatyczne klasy zagnieżdżone nazywamy klasami wewnętrznymi (inner( class) Instancja klasy wewnętrznej jest ściśle związana z instancją klasy otaczającej. Klasy wewnętrzne nie mogą mieć własnych składowych typu static, ale mogą je odziedziczyć

Klasy wewnętrzne Instancje klasy wewnętrznej można tworzyć tylko, jeśli istnieje instancja klasy otaczającej jeśli chcemy tworzyć je poza kodem klasy otaczającej, używamy składni: <nazwa instancji>.new <konstruktor>;

Jak to wygląda w UMLu? class A { class B {...

Klasy zagnieżdżone Można również deklarować klasy zagnieżdżone wewnątrz treści metod oraz jako klasy anonimowe

Przykład klasa wewnętrzna class Counter { int i; class Listener implements ActionListener { public void actionperformed(actionevent e) { i++; void listento(button B) { b.addactionlistener(new Listener());

Przykład anonimowa klasa wewnętrzna class Counter { int i; void listento(button B) { b.addactionlistener(new ActionListener(){ public void actionperformed(actionevent e) { i++; );

private, protected, public Klasy zagnieżdżone mają dostęp do wszystkich pól klasy otaczającej również tych oznaczonych jako private UWAGA w pierwszej wersji prezentacji znalazło się tutaj nieprawdziwe zdanie o podklasach klas zagnieżdżonych przepraszam za błąd

Problem class A { class B { class A { class C extends A { class D { class A { class E extends D.A { Po której klasie dziedziczy klasa C? A klasa E?

Rozwiązanie On correctness & completeness of an algorithm determining inherited classes and on uniqueness of solutions - Hans Langmaack, Andrzej Salwicki, Marek Warpechowski

Struktura klas Classes zbiór klas zadeklarowanych w programie plus Root i Object Id zbiór identyfikatorów klas Paths zbiór ciągów identyfikatorów rozdzielonych kropkami

Oznaczenia decl: Classes {Root -> > Classes decl(k) oznacza klasę zawierającą K name: Classes {Root -> > Id name(k) oznacza nazwę klasy K, name(root) jest niezdefiniowane, name(object) = Object ext: Classes {Root, Object -> > Paths ext(k) oznacza ścieżkę rozszerzenia wpisaną w tekście programu

Właściwości struktury klas decl(object) = Root para <Classes, decl> jest drzewem, którego korzeniem jest Root Jeśli K M i decl(k) = decl(m), to name(k) name(m)

Definicja funkcji bind Funkcja bind określa, do której klasy się odwołujemy używając identyfikatora klasy w tekście programu bind(ε in K) = Object bind(c in K) = (inh i decl j (K)).C ).C gdzie para (j,i) jest najmniejszą parą w porządku leksykograficznym taką, że klasa (inh i decl j (K)).C ).C jest zdefiniowana

Definicja funkcji bind bind(x.c in K) = (inh i (bind(x in K))).C gdzie i jest najmniejszą liczbą taką, że klasa (inh i (bind(x in K))).C jest zdefiniowana

Definicja relacji dep Definicja intuicyjna - <K,C> dep wtw gdy do obliczenia inh(k) potrzebujemy obliczonego inh(c) dep = {<K, bind(ext(k) i in decl(k)))> : 0 < i length(ext(k)) gdzie ext(k) i oznacza prefiks ext(k) długości i

Funkcja dziedziczenia Szukamy funkcji inh: Classes {Root, Object -> > Classes Dla każdej klasy K {Root, Object inh(k) = bind(ext(k) in decl(k)) to znaczy, że e określamy klasę,, po której dziedziczy K na podstawie tego, jak jest wiązana ścieżka ext(k) w klasie otaczającej. cej. Indukowana relacja dep nie może e mieć cykli

Algorytm Visited := {Root; Object; inh := Ø; while Visited Classes do Candidates := {K : decl(k) Visited K Visited if ( K Candidates) bind(ext(k) in decl(k)) Visited then let K be a Candidate found in the above test; M := bind(ext(k) in decl(k)); inh := inh {< K,M >; Visited := Visited {K else Error endif endwhile

class A { class B { class A { class C extends A { class D { class A { class E extends D.A { A B A C D E A

class A { class B { class A { class C extends A { class D { class A { class E extends D.A { A B A C D E A

class A { class B { class A { class C extends A { class D { class A { class E extends D.A { Object A B A C D E A

class A { class B { class A { class C extends A { class D { class A { class E extends D.A { Object A B A C D E A

class A { class B { class A { class C extends A { class D { class A { class E extends D.A { Object A B A C D E A

class A { class B { class A { class C extends A { class D { class A { class E extends D.A { Object A B A C D E A

class A { class B { class A { class C extends A { class D { class A { class E extends D.A { Object A B A C D E A

class A { class B { class A { class C extends A { class D { class A { class E extends D.A { Object A B A C D E A

class A { class B { class A { class C extends A { class D { class A { class E extends D.A { Object A B A C D E A

class A extends B.C { class B extends A.D { class G { class D { class C extends G { class I { class C { class D extends I{ Object A B G I D C C D

class A extends B.C { class B extends A.D { class G { class D { class C extends G { class I { class C { class D extends I{ Object A B G I D C C D

class A extends B.C { class B extends A.D { class G { class D { class C extends G { class I { class C { class D extends I{ Object A B G I D C C D

class A extends B.C { class B extends A.D { class G { class D { class C extends G { class I { class C { class D extends I{ Object A B G I D C C D

class A extends B.C { class B extends A.D { class G { class D { class C extends G { class I { class C { class D extends I{ A Object B G D I C C D

class A extends B.C { class B extends A.D { class G { class D { class C extends G { class I { class C { class D extends I{ A Object B G D I C C D

class A extends B.C { class B extends A.D { class G { class D { class C extends G { class I { class C { class D extends I{ A Object B G D I C C D

class A extends B.C { class B extends A.D { class G { class D { class C extends G { class I { class C { class D extends I{ A Object B G D I C C D

class A extends B.C { class B extends A.D { class G { class D { class C extends G { class I { class C { class D extends I{ A Object B G D I C C D Error!

class A extends B.C { class B extends A.D { class G { class D { class C extends G { class I { class C { class D extends I{ A Object B G D I C W relacji dep jest cykl: <A,B> dep i <B,A> dep Istnieją dwa możliwe rozwiązania: 1. inh(a) = G$D$C, inh(b) = G$D 2. inh(a) = I$C, inh(b) = I$C$D C Error! D