Programowanie obiektowe

Podobne dokumenty
Programowanie obiektowe

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Enkapsulacja, dziedziczenie, polimorfizm

Przykład -

Java: interfejsy i klasy wewnętrzne

Polimorfizm. dr Jarosław Skaruz

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

Programowanie obiektowe i zdarzeniowe

Programowanie obiektowe

Klasy abstrakcyjne, interfejsy i polimorfizm

Dokumentacja do API Javy.

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

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

Programowanie obiektowe

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Wykład 7: Pakiety i Interfejsy

Wykład 6: Dziedziczenie

KLASY, INTERFEJSY, ITP

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

Klasy abstrakcyjne i interfejsy

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Programowanie obiektowe w języku

Programowanie w Javie wykład 8 Interfejsy

Programowanie obiektowe

Wykład 4: Klasy i Metody

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Programowanie obiektowe

Programowanie obiektowe

Podstawa: Bruce Eckel, Thinking in Java, Second Ed., Prentice Hall, 1998 The JavaLanguage Environment, A white Paper, Sun, Oct.

Podstawy programowania III

Dziedziczenie. dr Jarosław Skaruz

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

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

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

Kurs WWW. Paweł Rajba.

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

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

PARADYGMATY PROGRAMOWANIA Wykład 4

1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4);

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

Programowanie obiektowe

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

Zaawansowane programowanie w C++ (PCP)

Programowanie w Internecie. Java

Projektowanie obiektowe. Roman Simiński Polimorfizm

PHP 5 język obiektowy

Aplikacje w środowisku Java

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

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

Definiowanie własnych klas

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

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

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

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

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

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

Java SE Laboratorium nr 2. Temat: Obiektowość

Zaawansowane programowanie w C++ (PCP)

Typy sparametryzowane

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

Przypomnienie o klasach i obiektach

Programowanie obiektowe i język Java

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

DOSTĘP DO METOD I ZMIENNYCH. Dostęp do zmiennych (na podstawie:l.lemay,r.cadenhead,java 2 dla każdego, Helion 2001)

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 w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

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

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

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

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

Programowanie obiektowe

TYPY GENERYCZNE (GENERICS)

1 Atrybuty i metody klasowe

Definicje klas i obiektów. Tomasz Borzyszkowski

Programowanie obiektowe

Programowanie obiektowe

Podstawy Języka Java

10. Programowanie obiektowe w PHP5

Podejście obiektowe do budowy systemów rozproszonych

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

Kompozycja i dziedziczenie klas

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


Template method (metoda szablonowa)

PWSG Ćwiczenia 12. Wszystkie ukończone zadania należy wysłać na adres: lub

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

Podstawy programowania obiektowego

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4

Materiały do zajęć VII

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

PARADYGMATY PROGRAMOWANIA Wykład 2

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

Interfejsy i klasy wewnętrzne

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

MAS dr. Inż. Mariusz Trzaska. Realizacja różnych modeli dziedziczenia w obiektowych językach programowania

Programowanie obiektowe

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

Transkrypt:

Programowanie obiektowe Wykład 6: Klasy abstrakcyjne. Interfejsy. 4/7/2013 S.Deniziak: Programowanie obiektowe - Java 1 Klasy ostateczne class Ogon { final class Dinozaur { int i = 7; int j = 1; Ogon x = new Ogon(); void f() { //! class Potomek extends Dinozaur { // Błąd: Nie można rozszerzać klasy ostatecznej Dinozaur public class Jura { Dinozaur n = new Dinozaur(); n.f(); n.i = 40; n.j++; 4/7/2013 S.Deniziak: Programowanie obiektowe - Java 2 1

Metody ostateczne class OverridingPrivate2 class WithFinals { extends OverridingPrivate { // To samo co "private": public final void f() { private final void f() { System.out.println("OverridingPrivate2.f()"); System.out.println("WithFinals.f()"); public void g() { // Automatycznie "final": System.out.println("OverridingPrivate2.g()"); private void g() { System.out.println("WithFinals.g()"); public class FinalOverridingIllusion { OverridingPrivate2 op2 = class OverridingPrivate extends WithFinals { new OverridingPrivate2(); private final void f() { op2.f(); op2.g(); System.out.println("OverridingPrivate.f()"); // Można rzutować w górę: OverridingPrivate op = op2; private void g() { // Ale nie można wywoływać tych metod: //! op.f(); System.out.println("OverridingPrivate.g()"); //! op.g(); // Podobnie: WithFinals wf = op2; //! wf.f(); //! wf.g(); 4/7/2013 S.Deniziak: Programowanie obiektowe - Java 3 Zmienne ostateczne class Value { int i = 1; public class FinalData { final int i1 = 9; static final int VAL_TWO = 99; public static final int VAL_THREE = 39; final int i4 = (int)(math.random()*20); static final int i5 = (int)(math.random()*20); Value v1 = new Value(); final Value v2 = new Value(); static final Value v3 = new Value(); final int[] a = { 1, 2, 3, 4, 5, 6 ; public void print(string id) { System.out.println( id + ": " + "i4 = " + i4 + ", i5 = " + i5); FinalData fd1 = new FinalData(); fd1.i1++; fd1.v2.i++; fd1.v1 = new Value(); for(int i = 0; i < fd1.a.length; i++) fd1.a[i]++; fd1.v2 = new Value(); fd1.v3 = new Value(); fd1.a = new int[3]; fd1.print("fd1"); System.out.println("Creating new FinalData"); FinalData fd2 = new FinalData(); fd1.print("fd1"); fd2.print("fd2"); 4/7/2013 S.Deniziak: Programowanie obiektowe - Java 4 2

Argumenty ostateczne class Gizmo { public void spin() { public class FinalArguments { void with(final Gizmo g) { //! g = new Gizmo(); // Niedozwolone: g jest ostateczny void without(gizmo g) { g = new Gizmo(); // OK: g nie jest ostateczy g.spin(); // void f(final int i) { i++; // Nie można zmieniać i // Można tylko czytać wartości ostateczne: int g(final int i) { return i + 1; FinalArguments bf = new FinalArguments(); bf.without(null); bf.with(null); 4/7/2013 S.Deniziak: Programowanie obiektowe - Java 5 Klasy i metody abstrakcyjne abstract class Instrument { public void graj(nuta n) { System.out.println("Instrument.graj()"); abstract class Ksztalt { abstract void rysuj(); abstract void usun(); 4/7/2013 S.Deniziak: Programowanie obiektowe - Java 6 3

Metody polimorficzne w konstruktorach abstract class Ksztalt { abstract void rysuj(); Ksztalt() { System.out.println( Ksztalt() przed rysuj()"); rysuj(); System.out.println( Ksztalt() po rysuj()"); public class PolyConstructors { public static void main(string[ ] args) { new Kolo(5); Wynik? class Kolo extends Ksztalt { int radius = 1; Kolo(int r) { radius = r; System.out.println( "Kolo.Kolo(), radius = " + radius); void rysuj() { System.out.println( "Kolo.rysuj(), radius = " + radius); Ksztalt() przed rysuj() Kolo.rysuj(), radius = 0 Ksztalt() po rysuj() Kolo.Kolo(), radius = 5 4/7/2013 S.Deniziak: Programowanie obiektowe - Java 7 Problem wielodziedziczenia class Pojazd { int ustaw_pozycję(..){ class Broń { int ustaw_pozycję(){ class Czołg extends Pojazd, Broń { void jedź() { ustaw_pozycję(kierunek, szybkość);? 4/7/2013 S.Deniziak: Programowanie obiektowe - Java 8 4

Interfejsy Jak klasa czysto abstakcyjna (tzn. wszystkie metody bez implementacji) wszystkie pola statyczne (static) wszystkie pola ostateczne (final) wszystkie pola i metody publiczne można implementować wiele interfejsów 4/7/2013 S.Deniziak: Programowanie obiektowe - Java 9 Deklaracja interfejsu klasa interfejs class interface extends implements interface A {. class B implements A { interface C extends A { interface D {. class E extends B implements C,D {. 4/7/2013 S.Deniziak: Programowanie obiektowe - Java 10 5

Wielodziedziczenie interface Walczący { void fight(); interface Pływający { void swim(); interface Latający { void fly(); class Wojownik { public void fight() { public class GraPrzygodowa { static void t(walczący x) { x.fight(); static void u(pływający x) { x.swim(); static void v(latający x) { x.fly(); static void w(wojownik x) { x.fight(); Bohater h = new Bohater(); t(h); u(h); v(h); w(h); class Bohater extends Wojownik implements Walczący, Pływający, Latający { public void swim() { public void fly() { 4/7/2013 S.Deniziak: Programowanie obiektowe - Java 11 Kolizje nazw metod interface I1 { void f(); interface I2 { int f(int i); interface I3 { int f(); class C { public int f() { return 1; class C2 implements I1, I2 { public void f() { public int f(int i) { return 1; //przeciążenie class C4 extends C implements I3 { // Identyczna deklaracja public int f() { return 1; // To jest niepoprawne: //! class C5 extends C implements I1 { //! interface I4 extends I1, I3 { class C3 extends C implements I2 { public int f(int i) { return 1; // przeciążenie 4/7/2013 S.Deniziak: Programowanie obiektowe - Java 12 6

Podsumowanie Klasy abstrakcyjne: Klasy bazowe z niekompletną implementacją Wspólny interfejs dla klas pochodnych Zastosowanie interfejsów: wielodziedziczenie polimorfizm deklaracje stałych 4/7/2013 S.Deniziak: Programowanie obiektowe - Java 13 Pytania 1. Czy klasa abstrakcyjna może zawierać metody ostateczne? 2. Co może zawierać interfejs? 3. Czy metody statyczne mogą być ostateczne, abstrakcyjne lub polimorficzne? 4/7/2013 S.Deniziak: Programowanie obiektowe - Java 14 7

Koniec 4/7/2013 S.Deniziak: Programowanie obiektowe - Java 15 8