Podstawy programowania obiektowego

Wielkość: px
Rozpocząć pokaz od strony:

Download "Podstawy programowania obiektowego"

Transkrypt

1 Podstawy programowania obiektowego Technologie internetowe Wykład 7

2 Program wykładu Dziedziczenie Wywołania konstruktorów w dziedziczeniu Hermetyzacja w dziedziczeniu Dziedziczenie typu, rzutowanie w górę i w dół Mechanizm RTTI Nadpisywanie pól Nadpisywanie metod polimorfizm Klasy i metody finalne Klasy i metody abstrakcyjne

3 Dziedziczenie technika konstruowania nowych klas z wykorzystaniem klas już istniejących (jak kompozycja!) opisuje relację między 2 klasami:... jest szególnym przypadkiem...,... jest rodzajem... rzadziej stosowana i trudniejsza technika od kompozycji Komputer Samochód Figura Trójkąt Czworokąt Notebook Ciężarówka Wyścigówka Prostokąt Kwadrat

4 Dziedziczenie w kodzie class Figura {... class Trojkat extends Figura {... class Czworokat extends Figura {... class Prostokat extends Czworokat {... class Kwadrat extends Prostokat {... Klasa bazowa Nadklasa Klasa dziedziczona Base class Super class Figura Klasa dziedzicząca Podklasa Derived class Base class Subclass Trójkąt Czworokąt Prostokąt Kwadrat

5 Dziedziczenie jako zawieranie się podzbiorów każdy kwadrat jest prostokątem wśród prostokątów niektóre są szczególne: kwadraty kwadrat zatem dziedziczy z prostokąta CZWOROKĄTY FIGURY Figura TROJKĄTY PROSTOKĄTY Trójkąt Czworokąt KWADRATY Prostokąt Kwadrat

6 Konsekwencje dziedziczenia klasa dziedzicząca przejmuje kod z klasy bazowej: class Figura { Punkt srodek; public void przesun(int dx, int dy) { srodek.przesun (dx, dy); class Kolo extends Figura { int r;... Kolo k = new Kolo(); k.srodek = new Punkt(5,5); k.r = 3; k.przesun(1,0); korzyści: mniej kodowania propagowanie zmian

7 Konstruktory w dziedziczeniu Konstruktory nie dziedziczą się!!! class Figura { Punkt srodek; public Figura(Punkt s) { srodek = new Punkt(s); class Kolo extends Figura { int r; public Kolo(Punkt s, int rr) { srodek=new Punkt(s); r=rr;... Figura f=new Figura( new Punkt(0,0)); Kolo k = new Kolo ( new Punkt(10,10), 5); ale to się nie skompiluje dlaczego?

8 Obiekty klas dziedziczących tworzą się po kolei aż 4 obiekty (5)!!! Kwadrat k = new Kwadrat(new Punkt(1,1), 10)); Figura środek Czworokąt Figura środek Prostokąt Czworokąt Figura środek Kwadrat Prostokąt Czworokąt Figura środek new Figura(...) new Czworokat(...) new Prostokat(...) new Kwadrat(...) a każdy obiekt to wywołanie konstruktora który potrzebuje parametrów który konstruktor ma się wywołać (przeciążanie)?

9 Porządek wywołania konstruktorów każdy konstruktor klasy dziedziczącej musi wskazać konkretny konstruktor klasy bazowej, który wywoła się przed nim: nazwa klasy bazowej zastępowana jest słowem super konstruktor wybiera się podając jego parametry (przeciążanie!) wskazanie to musi być pierwszą instrukcją konstruktora jeśli tego nie zrobi kompilator wskaże konstruktor domyślny: class B extends A { public B() { public B() { super(); tu: zanim wywoła się domyślny konstruktor klasy B przed nim wywoła się domyślny konstruktor klasy A

10 Przykład wywołań konstruktorów class A { public A() { System.out.println("A.A()"); public A(int i) { System.out.println("A.A(int)"); class B extends A { public B() {super(0);system.out.println("b.b()"); public B(int i) {System.out.println("B.B(int)"); class C extends B { public C() { System.out.println("C.C()"); public C(int i) {super(i);system.out.println("c.c(int)"); A.A() A.A(int)... new C(); new C(1); A.A(int) B.B() C.C() A.A() B.B(int) C.C(int) B.B() C.C() B.B(int) C.C(int)

11 Konstruktory jeszcze raz brakuje konstruktora domyślnego Figury class Figura { Punkt srodek; public Figura(Punkt s) { srodek = new Punkt(s); class Kolo extends Figura { int r; public Kolo(Punkt s, int rr) { super(); srodek=new Punkt(s); r=rr; to wstawia kompilator... Figura f=new Figura( new Punkt(0,0)); Kolo k = new Kolo ( new Punkt(10,10), 5); lub wskazania innego konstruktora i jego parametrów

12 Konstruktory jeszcze raz wskazanie właściwego konstruktora class Figura { Punkt srodek; public Figura(Punkt s) { srodek = new Punkt(s); class Kolo extends Figura { int r; public Kolo(Punkt s, int rr) { super(s); srodek=new Punkt(s); r=rr;... Figura f=new Figura( new Punkt(0,0)); Kolo k = new Kolo ( new Punkt(10,10), 5); przy okazji inicjacja odziedziczonego pola który powinien być... prywatny?

13 Hermetyzacja w dziedziczeniu czy prywatne pola/metody się dziedziczą? class Figura { private Punkt srodek; public Figura(Punkt s) { srodek = new Punkt(s); class Kolo extends Figura { int r; public Kolo(Punkt s, int rr) { super(s); r=rr; public void przesun(int dx, int dy) { srodek.przesun(dx, dy); BŁĄD HERMETYZACJI dziedziczą się, ale są niedostępne! metoda 'przesun' powinna być zdefiniowana w Figurze albo należy użyć nowego poziomu ochrony... `

14 Poziom ochrony 'protected' pośredni poziom między 'public' a 'private' publiczny dla rodziny (w drzewie dziedziczenia) prywatny dla innych (obcych) klas class Figura { protected Punkt srodek; public Figura(Punkt s) { srodek = new Punkt(s); class Kolo extends Figura { int r; public Kolo(Punkt s, int rr) { super(s); r=rr; public void przesun(int dx, int dy) { srodek.przesun(dx, dy); OK `... Figura f=new Figura( new Punkt(0,0)); f.srodek=null; BŁĄD Kolo k = new Kolo ( new Punkt(10,10), 5); System.out.println(k.srodek); BŁĄD

15 Dziedziczenie nie dziedziczy się: konstruktorów (destruktorów, operatora= w C++) dziedziczy się: pola metody typ `

16 Po co typ? kompilator pilnuje zgodności typów: int i; float f; i = f; BŁĄD void f(int a) {... f( abc ); BŁĄD Samochód s = new Komputer(); BŁĄD ale czasami można go oszukać rzutowanie (casting) ` i = (int)f; OK Samochód s = (Samochód)new Komputer(); BŁĄD

17 Dziedziczenie typu klasa Kwadrat ma 4 typy (5): Figura Czworokat Prostokat Kwadrat więc kompilator dopuści podstawienie: Figura f = new Kwadrat(...); rzutowanie w górę!!! (upcasting) ` Figura Czworokąt Prostokąt Kwadrat

18 Rzutowanie w górę Figura[] figury = new Figura[100]; figura[0] = new Kwadrat(...); figura[1] = new Prostokat(...); figura[2] = new Trojkat(...); rzutowanie to zachodzi tylko w dziedziczeniu zawsze jest możliwe i bezpieczne upraszcza przechowywanie obiektów z 1 rodziny `

19 Klasa Object dlaczego Kwadrat ma 5 typów? każda klasa w Javie dziedziczy z klasy 'Object' (bezpośrednio lub pośrednio) class Figura {... class Figura extends Object {... pojedyncze drzewo dziedziczenia Object Figura składowe klasy Object: public String tostring(); public boolean equals(object o); metody związane z wątkami referencja typu 'Object' Object o = new... ` Czworokąt Prostokąt Kwadrat

20 Utrata dostępu do informacji Figura[] figury; for (Figura f: figury) f.przesun(1, 0); ale Figura f = new Kolo(new Punkt(1,2), 10); System.out.println(f.getR()); skąd wiadomo że 'f' to Koło? Figura f; if (random.nextint(2)%2 == 0) f = new Kolo(new Punkt(1,2), 10); else f = new Prostokat(new Punkt(1,2), 4, 6);

21 Utrata dostępu do informacji obiekt Koło cały czas jest w pamięci nie zmienia typu!!! (obiekt raz stworzony jako Koło zawsze będzie już Kołem) rzutowanie w górę zmienia tylko sposób patrzenia na obiekt kompilator mając referencję 'Figura f' nie zna rzeczywistego typu obiektu na który ona wskazuje wie, że ten obiekt to jakaś Figura i ma metodę 'przesun(int,int)' f - srodek:punkt +przesun(int,int) - r: int + getr(): int

22 Rzutowanie w dół (downcasting) rzutowanie z typu bazowego na typ pochodny ale to zły przykład: Kolo k = (Kolo)new Figura(...); dobry przykład: Figura f = new Kolo(...); Kolo k = (Kolo)f; poprawne rzutowanie w dół może nastąpić tylko po wcześniejszym rzutowaniu w górę odzyskanie utraconego dostępu do informacji Object Figura Czworokąt Prostokąt Kwadrat rzutowanie w dół jest ryzykowne

23 Mechanizm RTTI f? identyfikacja typu w czasie wykonania programu (Run-Time Type Identification) umożliwia świadome i poprawne rzutowanie w dół if (f instanceof Kolo) { Kolo k = (Kolo)f; System.out.println(k.getR()); operator 'instanceof' bada, czy 'f ' ma typ 'Kolo' jego bezpośrednie używanie (nadużywanie) jest uważane za mało eleganckie

24 Wykorzystanie 'instanceof' policzenie figur w tablicy Figura[] figury={ new Kwadrat(...), new Prostokat(...), new Czworokat(...) int lczw, lprost, lkw=0; for (Figura f: figury) { if (f instanceof Kwadrat) ++ lkw; if (f instanceof Prostokat) ++ lprost; if (f instanceof Czworokat) ++ lczw; System.out.println( Kwadraty: +lkw); System.out.println( Prostokąty: +lprost); System.out.println( Czworokąty: +lczw); wynik: 1 2 3!!! przecież każdy prostokąt jest też czworokątem!!!

25 Wykorzystanie 'instanceof' alternatywne policzenie figur w tablicy... if (f instanceof Kwadrat) ++ lkw; else if (f instanceof Prostokat) ++ lprost; else if (f instanceof Czworokat) ++ lczw;... lub: if (f instanceof Kwadrat) ++ lkw; if ( f instanceof Prostokat &&! f instanceof Kwadrat) ++ lprost; if ( f instanceof Czworokat &&! f instanceof Prostokat) ++ lczw; Object Figura Czworokąt Prostokąt Kwadrat

26 Nadpisywanie składowych w dziedziczeniu składowe dziedziczą się ale dopuszczalne jest ich nadpisywanie: class A { int x; class B extends A { int x; w takiej sytuacji obiekt B ma 2 zmienne 'x'!!! w przypadku pól to zwykle pomyłka x x 5 3 B A

27 Nadpisywanie pól class A { int x; class B extends A { int x; class C extends B { int x; public void showall() { System.out.println("A.x="+A.x+",B.x="+super.x+",C.x="+x); C c = new C(); c.x = 30; c.showall(); ((B)c).x = 20; ((A)c).x = 10; c.showall(); ważny jest typ referencji!!! x x x B A C

28 Nadpisywanie metod w zasadzie nadpisywanie metod działa tak samo ale w Javie jest specjalny mechanizm, który komplikuje sprawę: POLIMORFIZM przy wywołaniu metod nie jest ważny typ referencji (jak w przypadku pól) ważny jest typ obiekty który się za nią ukrywa f? metody wywoływane w ten sposób nazywane są metodami/funkcjami wirtualnymi

29 Nadpisywanie a przeciążanie (overriding vs overloading) to nie jest nadpisywanie tylko przeciążanie: class A { String f() { return A.f ; class B extends A { String f(int a) { return B.f ; class C extends B { String f(char c) { return C.f ; C c = new C(); System.out.println(c.f()); System.out.println(c.f(0)); System.out.println(c.f('a')); nadpisywanie: + A.f() + B.f(int) + C.f(char) C B A class A { String f() { return A.f ; class B extends A { String f() { return B.f ; class C extends B { String f() { return C.f ; System.out.println(c.f());??? + B.f() + C.f() + A.f() C B A

30 Wiązanie metod (binding) class A { public String f() { return A.f ; class B extends A { public String f() { return B.f ; class C extends B { public String f() { return C.f ; A a = new C(); System.out.println(a.f()); obiekt klasy C ma 3 metody 'f()' C B A + A.f(): String + B.f(): String + C.f(): String 0x02ca4 0x02cc4 0x02ce4 każda ma inny adres w pamięci kodu kompilator musi wskazać, którą metodę wywołać skompilować znaczy przetłumaczyć na asembler: a.f(); jump 0x02cc4? wiązanie metody

31 Wiązanie wczesne i późne jeśli kompilator faktycznie wiąże metodę wiązanie wczesne a.f(); jump 0x02ca4 jaką metodę wybiera? z tej klasy, jakiego typu jest referencja 'a' (A) jeśli kompilator nie wiąże kodu wiązanie późne a.f(); jump kiedy wykona się te wiązanie? w czasie wykonania programu (run-time) jaka metoda zostanie wybrana? z tej klasy, jakiego typu jest obiekt

32 Funkcje/Metody wirtualne metody wiązane wcześnie zwykłe metody metody wiązane późno metody wirtualne mechanizm późnego wiązania metod polimorfizm w Javie (prawie) wszystkie metody są wirtualne nie trzeba ich oznaczać (jak w C++ 'virtual') metody wirtualne mogą nieznacznie spowalniać wykonanie programu

33 Typowe użycie f. wirtualnych class Figura { public String opis(){return Jestem Figurą ; Trójkąt class Trojkat extends Figura { public String opis(){return Jestem Trójkątem ; class Czworokat extends Figura { public String opis(){return Jestem Czworokątem ; Figura Czworokąt Prostokąt Kwadrat class Prostokat extends Czworokat { public String opis(){return Jestem Prostokątem ; class Kwadrat extends Prostokat { public String opis(){return Jestem Kwadratem ;... Figura f=new??? System.out.println(f.opis());... System.out.println(xxx.opis());??? xxx

34 Metody niewirtualne w Javie wyjątkami (zwykłymi metodami) są metody: finalne statyczne prywatne class A { private String f() { return A.f ; public String g() { return A.g; public String call() { return f()+ +g(); class B extends A { private String f() { return B.f ; public String g() { return B.g;... A a = new B(); System.out.println(a.call());

35 Metody niewirtualne w Javie wyjątkami (zwykłymi metodami) są metody: finalne statyczne prywatne class A { private String f() { return A.f ; public String g() { return A.g; public String call() { return f()+ +g(); class B extends A { private String f() { return B.f ; public String g() { return B.g;... A a = new B(); System.out.println(a.call()); A.f B.g wywołanie wirtualne wywołanie niewirtualne

36 Jeszcze metody niewirtualne class A { private String f() { return A.f ; public String g() { return A.g; class B extends A { private String f() { return B.f ; public String g() { return B.g; public String call() { return f()+ +g();... A a = new B(); System.out.println(a.call());??? metoda 'call' w klasie B

37 Jeszcze metody niewirtualne class A { private String f() { return A.f ; public String g() { return A.g; class B extends A { private String f() { return B.f ; wywołanie wirtualne public String g() { return B.g; public String call() { return this.f()+ +this.g();... wywołanie niewirtualne A a = new B(); System.out.println(a.call()); B.f B.g 'this' w kodzie klasy A jest typu A 'this' w kodzie klasy B jest typu B

38 Poziom kodu class A { protected int x = 10; public int getax() { return x; class B extends A { protected int x = 20; public int getbx() { return x; x 10 class C extends B { protected int x = 30; x 20 public int getcx() { return x;... C c= new C(); x 30 System.out.println( +c.getax()+c.getbx()+c.getcx()); C B A

39 Poziom kodu class A { typu A protected int x = 10; public int getax() { return this.x; class B extends A { typu B protected int x = 20; public int getbx() { return this.x; class C extends B { typu C protected int x = 30; C public int getcx() { return this.x; # x +getcx()... C c= new C(); System.out.println( +c.getax()+c.getbx()+c.getcx()); kod sięga do pola ze swojemu poziomu potem do pól odziedziczonych (do góry) A # x +getax() B # x +getbx() nigdy nie sięga w dół (do klas dziedziczących)

40 Klasy i metody finalne z klasy finalnej nie można dziedziczyć finall class Ostateczna {... class Nowa extends Ostateczna {... metody finalnej nie można nadpisać jest też metodą niewirtualną (m.in. szybciej się wykonuje wiązanie wczesne) class Prostokat { protected double a, b; public final double pole() { return a*b; public Prostokat(double aa, double bb) { a=aa; b=bb; class Kwadrat extends Prostokat { public Kwadrat(int a) { super(a, a); public double pole() { return...

41 Klasy abstrakcyjne z klasy abstrakcyjne nie można utworzyć obiektu abstract class Figura {... new Figura(...); klasa abstrakcyjna służy tylko do dziedziczenia class Kolo extends Figura {... class Trojkat extends Figura {... ale można tworzyć referencje typu abstrakcyjnego Figura f = null; Figura[] figury = new Figura[100]; f=new Kolo(...); figury[0] = new Trojkat(...); klasa abstrakcyjna to zwykła klasa: może mieć pola, metody, konstruktory klasa abstrakcyjna ma 1 przywilej: tylko ona może posiadać metody abstrakcyjne...

42 Metody abstrakcyjne metoda abstrakcyjna to metoda niedokończona, zawiera tylko nagłówek abstract class Figura { protected Punkt srodek; public abstract double pole(); używana kiedy jej definicja nie miałaby sensu (jak policzyć pole jakiejś nieokreślonej figury?) klasa która dziedziczy z klasy abstrakcyjnej metodę abstrakcyjną musi ją zdefiniować do końca class Kolo extends Figura { protected double r; public double pole() { return Math.PI*r*r; metoda abstrakcyjna nigdy nie będzie wywoływana: jest wirtualna a nigdy nie stworzy się obiekt klasy Figura

43 Po co metody abstrakcyjne? kompilator ma wywołanie: Figura f =... f.pole(); musi sprawdzić, czy w klasie Figura metoda 'pole()' nie jest np.: statyczna, finalna, prywatna niewirtualna metoda abstrakcyjna narzuca na klasy dziedziczące obowiązek posiadania kompletnej metody 'pole()' (jeśli same nie chcą być abstrakcyjne): abstract class Figura2D extends Figura { metoda abstrakcyjna definiuje interfejs hierarchii klas

44 Wywoływanie metod zastępowanych konstruktor klasy dziedziczącej woła konstruktor klasy bazowej nowa metoda wirtualna całkowicie zastępuje przesłanianą metodę metoda zastępujące może po raz ostatni wywołać metodę zastępowaną class Figura { public String opis() {return Jestem Figurą ; class Kolo extends Figura { public String opis(){return super.opis()+ i Kołem ;... Figura f=new Koło(); System.out.println(f.opis()); Jestem Figurą i Kołem

45 Metoda 'public String tostring()' metoda zdefiniowana w klasie 'Object' oryginalna definicja wypisuje rzeczywistą nazwę klasy i nr referencji zwraca tekstową reprezentację obiektu często wykorzystywana class Punkt extends Object { private x, y;... Punkt p=new Punkt (1,2); System.out.print(p);<==>System.out.print(p.toString()); Punkt@0x23cd można ją nadpisać i w nowej metodzie wywołać oryginalną definicję: class Punkt extends Object { private x, y; public String tostring() { return super.tostring+ (x: +x+,y: +y+ ) ; System.out.print(p); Punkt@0x23cd(x:1,y:2)

46 Hermetyzacja a funkcje wirtualne przy nadpisywaniu metod wirtualnych nie można zmniejszyć poziomu dostępności (zwiększyć poziomu ochrony): class Figura { public String opis(){return Jestem Figurą ; class Kolo extends Figura { protected String opis(){return Jestem Kołem ; // BŁĄD kompilacji poziom ochrony (dostępności) należy co najmniej zachować class Kolo extends Figura { public String opis(){return Jestem Kołem ; // BŁĄD kompilacji

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

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016 Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac

Bardziej szczegółowo

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java - tablice, konstruktory, dziedziczenie i hermetyzacja Java - tablice, konstruktory, dziedziczenie i hermetyzacja Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU zmienne tablicowe konstruktory klas dziedziczenie hermetyzacja

Bardziej szczegółowo

Dziedziczenie. dr Jarosław Skaruz

Dziedziczenie. dr Jarosław Skaruz Dziedziczenie dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com Dziedziczenie specjalizacja Dziedziczenie generalizacja Generalizacja-specjalizacja jest takim związkiem pomiędzy klasami,

Bardziej szczegółowo

Programowanie obiektowe i zdarzeniowe

Programowanie obiektowe i zdarzeniowe Marek Tabędzki Programowanie obiektowe i zdarzeniowe 1/23 Programowanie obiektowe i zdarzeniowe wykład 6 polimorfizm Na poprzednim wykładzie: dziedziczenie jest sposobem na utworzenie nowej klasy na podstawie

Bardziej szczegółowo

Polimorfizm. dr Jarosław Skaruz

Polimorfizm. dr Jarosław Skaruz Polimorfizm dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com O czym będzie? finalne składowe klasy abstrakcyjne interfejsy polimorfizm Finalne składowe Domyślnie wszystkie pola i metody

Bardziej szczegółowo

Technologie i usługi internetowe cz. 2

Technologie i usługi internetowe cz. 2 Technologie i usługi internetowe cz. 2 Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 15 luty 2014 r. 1 Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to paradygmat programowania,

Bardziej szczegółowo

Wykład 6: Dziedziczenie

Wykład 6: Dziedziczenie Wykład 6: Dziedziczenie Dziedziczenie Jeden z filarów obiektowości. Budowa jednej klasy na bazie drugiej, przez dodawanie/przesłanianie jej składowych: nad-klasa klasa bazowa pod-klasa klasa pochodna od

Bardziej szczegółowo

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

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r. Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r. Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to

Bardziej szczegółowo

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

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Wirtualne destruktory class A int* a; A(int _a) a = new int(_a);} virtual ~A() delete a;} class B: public A double* b;

Bardziej szczegółowo

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

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki Informatyka I Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2017 Dziedziczenie klas

Bardziej szczegółowo

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

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU Konstrukcja obiektów Niszczenie obiektów i zwalnianie zasobów

Bardziej szczegółowo

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

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np Klasy Klasa jest nowym typem danych zdefiniowanym przez użytkownika Wartości takiego typu nazywamy obiektami Najprostsza klasa jest po prostu strukturą, np struct Zespolona { Klasy jako struktury z operacjami

Bardziej szczegółowo

Programowanie obiektowe w języku

Programowanie obiektowe w języku Programowanie obiektowe w języku C++ Stanisław Gepner sgepner@meil.pw.edu.pl Dziedziczenie Wstęp Zacznijmy od przykładu Przykład rolniczy Każde zwierzątko wydaje dźwięk Każde się tak samo porusza Musimy

Bardziej szczegółowo

Dziedziczenie. Tomasz Borzyszkowski

Dziedziczenie. Tomasz Borzyszkowski Dziedziczenie Tomasz Borzyszkowski Podstawy Zobacz: Dziedzictwo1.java Dziedzictwo2.java Dziedziczenie jest jedną z podstawowych cech OOP ponieważ umożliwia łatwe implementowanie klasyfikacji hierarchicznych.

Bardziej szczegółowo

Enkapsulacja, dziedziczenie, polimorfizm

Enkapsulacja, dziedziczenie, polimorfizm 17 grudnia 2008 Spis treści I Enkapsulacja 1 Enkapsulacja 2 Spis treści II Enkapsulacja 3 Czym jest interfejs Jak definuje się interfejs? Rozszerzanie interfejsu Implementacja interfejsu Częściowa implementacja

Bardziej szczegółowo

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

Programowanie 2. Język C++. Wykład 3. 3.1 Programowanie zorientowane obiektowo... 1 3.2 Unie... 2 3.3 Struktury... 3 3.4 Klasy... 4 3.5 Elementy klasy... 5 3.6 Dostęp do elementów klasy... 7 3.7 Wskaźnik this... 10 3.1 Programowanie zorientowane

Bardziej szczegółowo

TEMAT : KLASY DZIEDZICZENIE

TEMAT : KLASY DZIEDZICZENIE TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą

Bardziej szczegółowo

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

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE. C++ - DZIEDZICZENIE Do najważniejszych cech języka C++ należy możliwość wielokrotnego wykorzystywania kodu Prymitywnym, ale skutecznym sposobem jest kompozycja: deklarowanie obiektów wewnątrz innych klas,

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Zaawansowane programowanie w C++ (PCP) Wykład 3 - polimorfizm. dr inż. Robert Nowak - p. 1/14 Powtórzenie Powtórzenie: klasy autonomiczne: konstruktor, konstruktor kopiujacy, operator przypisania, destruktor

Bardziej szczegółowo

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

Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład V - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Programowanie obiektowe Dziedziczenie (inheritance) - mechanizm

Bardziej szczegółowo

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Polimorfizm, metody wirtualne i klasy abstrakcyjne Programowanie obiektowe Polimorfizm, metody wirtualne i klasy abstrakcyjne Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Polimorfizm,

Bardziej szczegółowo

Klasy abstrakcyjne, interfejsy i polimorfizm

Klasy abstrakcyjne, interfejsy i polimorfizm Programowanie obiektowe 12 kwietnia 2011 Organizacyjne Klasówka będzie 20 IV 2011. Sale jeszcze są pertraktowane. Materiał do wyjątków włącznie. Można mieć swoje materiały nieelektroniczne. Wywołanie z

Bardziej szczegółowo

JAVA W SUPER EXPRESOWEJ PIGUŁCE

JAVA W SUPER EXPRESOWEJ PIGUŁCE JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie

Bardziej szczegółowo

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

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne Tematyka wykładów 1. Wprowadzenie. Klasy cz. 1 - Język C++. Programowanie obiektowe - Klasy i obiekty - Budowa i deklaracja klasy. Prawa dostępu - Pola i funkcje składowe - Konstruktor i destruktor - Tworzenie

Bardziej szczegółowo

Dziedziczenie jednobazowe, poliformizm

Dziedziczenie jednobazowe, poliformizm Dziedziczenie jednobazowe, poliformizm 1. Dziedziczenie jednobazowe 2. Polimorfizm część pierwsza 3. Polimorfizm część druga Zofia Kruczkiewicz, ETE8305_6 1 Dziedziczenie jednobazowe, poliformizm 1. Dziedziczenie

Bardziej szczegółowo

Programowanie obiektowe - 1.

Programowanie obiektowe - 1. Programowanie obiektowe - 1 Mariusz.Masewicz@cs.put.poznan.pl Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która

Bardziej szczegółowo

Dokumentacja do API Javy.

Dokumentacja do API Javy. Dokumentacja do API Javy http://java.sun.com/j2se/1.5.0/docs/api/ Klasy i obiekty Klasa jest to struktura zawierająca dane (pola), oraz funkcje operujące na tych danych (metody). Klasa jest rodzajem szablonu

Bardziej szczegółowo

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

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego Iwona Kochaoska Programowanie Obiektowe Programowanie obiektowe (ang. object-oriented programming) - metodyka tworzenia programów komputerowych,

Bardziej szczegółowo

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

DOSTĘP DO METOD I ZMIENNYCH. Dostęp do zmiennych (na podstawie:l.lemay,r.cadenhead,java 2 dla każdego, Helion 2001) DOSTĘP DO METOD I ZMIENNYCH Dostęp do zmiennych (na podstawie:l.lemay,r.cadenhead,java 2 dla każdego, Helion 2001) Zakres public protected domyślny private widzialności metody lub zmiennej Klasa tak tak

Bardziej szczegółowo

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie Języki i techniki programowania Ćwiczenia 3 Dziedziczenie Klasa abstrakcyjna Autor: Marcin Orchel Klasa abstrakcyjna to taka, że nie możemy tworzyć obiektów tej klasy, możemy jednak dziedziczyć po tej

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 4 PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej

Bardziej szczegółowo

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Zaawansowane programowanie w języku C++ Programowanie obiektowe Zaawansowane programowanie w języku C++ Programowanie obiektowe Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2 Marcin Młotkowski 4 marca 2015 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 47 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie;

Bardziej szczegółowo

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

Składnia C++ Programowanie Obiektowe Mateusz Cicheński Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Konstruktory i destruktory

Bardziej szczegółowo

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

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016 Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,

Bardziej szczegółowo

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

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut. Dziedziczenie Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasy Student oraz Pracownik: class Student class Pracownik

Bardziej szczegółowo

Wykład 9: Polimorfizm i klasy wirtualne

Wykład 9: Polimorfizm i klasy wirtualne Programowanie obiektowe Wykład 9: i klasy wirtualne 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD Programowanie obiektowe i metody wirtualne 2 W programowaniu obiektowym polimorfizm

Bardziej szczegółowo

Klasa dziedzicząca posiada wszystkie cechy klasy bazowej (plus swoje własne) dodawanie nowego kodu bez edycji (i ewentualnego wprowadzania

Klasa dziedzicząca posiada wszystkie cechy klasy bazowej (plus swoje własne) dodawanie nowego kodu bez edycji (i ewentualnego wprowadzania Programowanie przyrostowe Rzutowanie w górę Zaleta dziedziczenia i kompozycji jest programowanie przyrostowe: Klasa dziedzicząca posiada wszystkie cechy klasy bazowej (plus swoje własne) dodawanie nowego

Bardziej szczegółowo

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

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? 1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie

Bardziej szczegółowo

.NET Klasy, obiekty. ciąg dalszy

.NET Klasy, obiekty. ciąg dalszy .NET Klasy, obiekty ciąg dalszy Przeciążanie operatorów 1 W języku C# istnieje możliwość zdefiniowania funkcjonalności dużej części operatorów dla typów stworzonych przez użytkownika. Dzięki takiemu zabiegowi,

Bardziej szczegółowo

C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm POLIMORFIZM

C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm POLIMORFIZM POLIMORFIZM Podstawowe pytanie, które nieustannie ma towarzyszyć autorowi programowi: czy gdyby nagle okazało się, że jest więcej... (danych na wejściu, typów danych, czynności, które program ma wykonać,

Bardziej szczegółowo

Języki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk. tel: Konsultacje: piątek:

Języki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk.   tel: Konsultacje: piątek: Języki Programowania Prowadząca: dr inż. Hanna Zbroszczyk e-mail: gos@if.pw.edu.pl tel: +48 22 234 58 51 Konsultacje: piątek: 12.00 13.30 www: http://www.if.pw.edu.pl/~gos/students/jp Politechnika Warszawska

Bardziej szczegółowo

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

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej 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,

Bardziej szczegółowo

Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/

Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Paweł Rajba pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Spis treści Wprowadzenie Automatyczne ładowanie klas Składowe klasy, widoczność składowych Konstruktory i tworzenie obiektów Destruktory i

Bardziej szczegółowo

Klasy abstrakcyjne i interfejsy

Klasy abstrakcyjne i interfejsy Klasy abstrakcyjne i interfejsy Streszczenie Celem wykładu jest omówienie klas abstrakcyjnych i interfejsów w Javie. Czas wykładu 45 minut. Rozwiązanie w miarę standardowego zadania matematycznego (i nie

Bardziej szczegółowo

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

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy Wykład 4, część 1 1 Język JAVA podstawy Plan wykładu: 1. Podstawy modelowania obiektowego 2. Konstruktory 3. Dziedziczenie, związki pomiędzy klasami, UML 4. Polimorfizm 5. Klasy abstrakcyjne

Bardziej szczegółowo

Podstawy Języka Java

Podstawy Języka Java Podstawy Języka Java Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to paradygmat programowania, w którym programy definiuje się za pomocą obiektów elementów łączących

Bardziej szczegółowo

Związek między pojęciami Zasada podstawialności Podklasy muszą realizować kontrakt zawarty przez nadklasy

Związek między pojęciami Zasada podstawialności Podklasy muszą realizować kontrakt zawarty przez nadklasy Janusz Jabłonowski Związek między pojęciami Zasada podstawialności Podklasy muszą realizować kontrakt zawarty przez nadklasy Przedefiniowywanie lub podmienianie (ang. overriding, czasami błędnie tłumaczone

Bardziej szczegółowo

Wykład 5 Okna MDI i SDI, dziedziczenie

Wykład 5 Okna MDI i SDI, dziedziczenie Wykład 5 Okna MDI i SDI, dziedziczenie Autor: Zofia Kruczkiewicz Zagadnienia 1. Aplikacja wielookienkowa. Zakładanie projektu typu CLR Windows Forms 1.1. Aplikacja typu MDI 1.2. Aplikacja typu SDI 2. Dziedziczenie

Bardziej szczegółowo

Wprowadzenie do programowanie obiektowego w języku C++

Wprowadzenie do programowanie obiektowego w języku C++ Wprowadzenie do programowanie obiektowego w języku C++ Część czwarta Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura

Bardziej szczegółowo

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

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE. C++ - DZIEDZICZENIE Do najważniejszych cech języka C++ należy możliwość wielokrotnego wykorzystywania kodu Prymitywnym, ale skutecznym sposobem jest kompozycja: deklarowanie pól obiektowych wewnątrz innych

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Wykład 2 28 lutego 2019 Plan wykładu 1 2 3 4 5 Plan wykładu 1 2 3 4 5 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie; standardy ISO i ECMA; podobny składniowo do C++; Język C Krótka

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Zaawansowane programowanie w C++ (PCP) Wykład 4 - wzorce projektowe. dr inż. Robert Nowak - p. 1/18 Powtórzenie klasy autonomiczne tworzenie nowych typów: dziedziczenie i agregacja dziedziczenie: przedefiniowywanie

Bardziej szczegółowo

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

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java Aplikacje Internetowe Podstawy języka Java Najprostsza aplikacja class Hello { public static void main(string[] args) { System.out.println("Hello World!"); Komponenty Javy JRE Java Runtime Environment

Bardziej szczegółowo

Interfejsy i klasy wewnętrzne

Interfejsy i klasy wewnętrzne 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

Bardziej szczegółowo

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

DOSTĘP DO METOD I ZMIENNYCH, TABLICE. Dostęp do zmiennych (na podstawie:l.lemay,r.cadenhead,java 2 dla kaŝdego, Helion 2001) DOSTĘP DO METOD I ZMIENNYCH, TABLICE Dostęp do zmiennych (na podstawie:l.lemay,r.cadenhead,java 2 dla kaŝdego, Helion 2001) Zakres public protected domyślny private widzialności metody lub zmiennej Klasa

Bardziej szczegółowo

Projektowanie obiektowe. Roman Simiński Polimorfizm

Projektowanie obiektowe. Roman Simiński   Polimorfizm Projektowanie obiektowe Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Polimorfizm Koncepcja polimorfizmu Słowo polimorfizm pochodzi od dwóch greckich słów: poly czyli wiele, morphos czyli

Bardziej szczegółowo

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

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017 Wykład 13 14 czerwiec 2017 Java vs cpp - podobieństwa Podobny sposób definiowania klas. Występowanie typów podstawowych: boolean, char, byte, short, int, long, float, double. Podobna zasada definiowania

Bardziej szczegółowo

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

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this Wstęp do programowania obiektowego WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this 1 Nazwa typu Rozmiar Zakres Uwagi bool 1 bit wartości true albo false stdbool.h TYPY ZNAKOWE

Bardziej szczegółowo

Definiowanie własnych klas

Definiowanie własnych klas Programowanie obiektowe Definiowanie własnych klas Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Definiowanie własnych klas Autor:

Bardziej szczegółowo

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

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

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

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016 Wstęp - wykład 0 22 lutego 2016 Historia Simula 67 język zaprojektowany do zastosowan symulacyjnych; Smalltalk 80 pierwszy język w pełni obiektowy; Dodawanie obiektowości do języków imperatywnych: Pascal

Bardziej szczegółowo

Wykład 7: Pakiety i Interfejsy

Wykład 7: Pakiety i Interfejsy Wykład 7: Pakiety i Interfejsy Plik Źródłowy w Javie Składa się z: instrukcji pakietu (pojedyncza, opcjonalna) instrukcji importujących (wielokrotne, opcjonalne) deklaracji klasy publicznej (pojedyncza,

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe IV. Interfejsy i klasy wewnętrzne Małgorzata Prolejko OBI JA16Z03 Plan Właściwości interfejsów. Interfejsy a klasy abstrakcyjne. Klonowanie obiektów. Klasy wewnętrzne. Dostęp do

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.

Bardziej szczegółowo

Mechanizm dziedziczenia

Mechanizm dziedziczenia Mechanizm dziedziczenia Programowanie obiektowe jako realizacja koncepcji ponownego wykorzystania kodu Jak przebiega proces dziedziczenia? Weryfikacja formalna poprawności dziedziczenia Realizacja dziedziczenia

Bardziej szczegółowo

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

Składnia C++ Programowanie Obiektowe Mateusz Cicheński Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Przeciążanie operatorów Słowo

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja

Bardziej szczegółowo

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

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego

Bardziej szczegółowo

TEMAT : KLASY POLIMORFIZM

TEMAT : KLASY POLIMORFIZM TEMAT : KLASY POLIMORFIZM 1. Wprowadzenie do polimorfizmu i funkcji wirtualnych w języku C++ Język C++ zakłada, że w pewnych przypadkach uzasadnione jest tworzenie klas, których reprezentanci w programie

Bardziej szczegółowo

Materiały do zajęć VII

Materiały do zajęć VII Spis treści I. Klasy Materiały do zajęć VII II. III. Konstruktor Właściwości i indeksatory Klasy Programowanie obiektowe wiadomości wstępne Paradygmat programowania obiektowego Abstrakcja Hermetyzacja

Bardziej szczegółowo

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

Bardziej szczegółowo

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

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu. Zrozumienie funkcji danych statycznych jest podstawą programowania obiektowego. W niniejszym artykule opiszę zasadę tworzenia klas statycznych w C#. Oprócz tego dowiesz się czym są statyczne pola i metody

Bardziej szczegółowo

Dziedziczenie i interfejsy

Dziedziczenie i interfejsy Dziedziczenie i interfejsy Wyróżnia się dwa sposoby ponownego wykorzystania klas: Kompozycję oznacza, że obiekt jest zawarty w innym obiekcie i jest reprezentowana przez relację całość-część. Przykładowo

Bardziej szczegółowo

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

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami. UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami

Bardziej szczegółowo

Platformy Programistyczne Podstawy języka Java

Platformy Programistyczne Podstawy języka Java Platformy Programistyczne Podstawy języka Java Agata Migalska 6 maja 2014 Plan wykładu 1 Sztuka wysławiania się w języku Java 2 Cały świat jest obiektem 3 Kolekcje 4 Zmienne i metody statyczne 5 Słowo

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 3 i 4 - przypomnienie wiadomości o OOP na przykładzie Javy mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 8 marca 2017 1 / 20 mgr inż. Krzysztof Szwarc

Bardziej szczegółowo

Programowanie w Javie - wykład 3

Programowanie w Javie - wykład 3 Pakiety import Klasy dziedziczenie Programowanie w Javie - wykład 3 Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie praktyczne od podstaw, PWN, 2014 http://docs.oracle.com/javase/8/docs/

Bardziej szczegółowo

Programowanie Obiektowe i C++

Programowanie Obiektowe i C++ Programowanie Obiektowe i C++ Marcin Benke Instytut Informatyki UW 30.10.2006 Marcin Benke (IIUW) Programowanie Obiektowe i C++ 30.10.2006 85 / 112 Zgodność typów Rozważmy klasy class A { //... }; class

Bardziej szczegółowo

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

Programowanie obiektowe, wykład nr 6. Klasy i obiekty Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 6 Klasy i obiekty W programowaniu strukturalnym rozwój oprogramowania oparto

Bardziej szczegółowo

Abstrakcyjny typ danych

Abstrakcyjny typ danych Abstrakcyjny typ danych Abstrakcyjny Typ Danych (abstract data type-adt): zbiór wartości wraz z powiązanymi z nimi operacjami; operacje są zdefiniowane w sposób niezależny od implementacji; operacje są

Bardziej szczegółowo

Aplikacje w środowisku Java

Aplikacje w środowisku Java Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Klasy i obiekty - dziedziczenie mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019 W ramach poprzedniego laboratorium

Bardziej szczegółowo

Wykład 02. Programowanie obiektowe. Maciej Wołoszyn 10 marca Spis treści.

Wykład 02. Programowanie obiektowe. Maciej Wołoszyn 10 marca Spis treści. Programowanie obiektowe Wykład 02 Maciej Wołoszyn mailto:woloszyn@fatcat.ftj.agh.edu.pl 10 marca 2009 Spis treści 1 Klasa String 2 2 Przeładowywanie metod 5 2.1 Konstruktory..................................

Bardziej szczegółowo

Czym jest polimorfizm?

Czym jest polimorfizm? Metody wirtualne oraz metody abstrakcyjne są ściśle związane z mechanizmem polimorfizmu. Polimorfizm jest jednym z filarów paradygmatu programowania obiektowego. Jak wiadomo język C# jest w całości językiem

Bardziej szczegółowo

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych mluckner@mini.pw.edu.pl http://www.mini.pw.edu.pl/~lucknerm Programy w Javie składają się z pakietów Pakiety zawierają definicje

Bardziej szczegółowo

Języki i metody programowania Java Lab2 podejście obiektowe

Języki i metody programowania Java Lab2 podejście obiektowe Języki i metody programowania Java Lab2 podejście obiektowe https://docs.oracle.com/javase/tutorial/ http://zofia.kruczkiewicz.staff.iiar.pwr.wroc.pl/wyklady/pojava/javazk4_2.pdf Zofia Kruczkiewicz 1 Zadanie

Bardziej szczegółowo

Java Język programowania

Java Język programowania Java Język programowania Język Java Bazuje i jest zbliżony do C/C++ Porosty zbiór typów danych (podział na typy prymitywne i obiektowe) Zarządzanie pamięcią i Garbage Collection Zintegrowana synchronizacja

Bardziej szczegółowo

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

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static), Tworzenie obiektów Dostęp do obiektów jest realizowany przez referencje. Obiekty w języku Java są tworzone poprzez użycie słowa kluczowego new. String lan = new String( Lancuch ); Obszary pamięci w których

Bardziej szczegółowo

Programowanie urządzeń mobilnych

Programowanie urządzeń mobilnych Programowanie urządzeń mobilnych Najważniejsze platformy mobilne Android ios Windows Mobile / Windows Phone 7 Symbian Bada BlackBerry OS Brew Android Producent systemu: Open Handset Alliance Producenci

Bardziej szczegółowo

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. Metody stałe w klasie

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. Metody stałe w klasie Metody stałe w klasie Zadeklarowanie metody jako stałej stanowi obietnicę, że wykonanie tej metody nie zmieni stanu obiektu, na rzecz którego została wykonana Umieszczamy const między nawiasem zamykającym

Bardziej szczegółowo

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

Programowanie w Javie wykład 7 Klasy c.d. (przeciążanie metod, polimorfizm) Metody i klasy abstrakcyjne Bloki inicjalizacyjne 1 Programowanie w Javie wykład 7 Klasy c.d. (przeciążanie metod, polimorfizm) Metody i klasy abstrakcyjne Bloki inicjalizacyjne Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie

Bardziej szczegółowo

Programowanie w Internecie. Java

Programowanie w Internecie. Java Programowanie w Internecie Java Autor: dr inż. Zofia Kruczkiewicz Literatura: L. Lemay, R. Cadenhead P. Naughton Krzysztof Barteczko Boone Barry Java 2 dla każdego Podręcznik Języka Programowania Java

Bardziej szczegółowo

Podstawy Programowania semestr drugi. Wykład czternasty

Podstawy Programowania semestr drugi. Wykład czternasty Wykład czternasty 1. Polimorfizm Ostatni wykład zakończyliśmy stwierdzeniem, że możemy obiektowi dowolnej klasy przypisa ć obiekt klasy dziedziczącej po tej klasie. Przypisanie takie obejmuje jednak jedynie

Bardziej szczegółowo

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Inicjalizacja agregatowa zmiennej tablicowej int a[5] = 1,2,3,4,5 INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Struktury są również agregatami, dlatego: struct X double f; char c; X x1 = 1, 2.2, 'c' Ale

Bardziej szczegółowo

Wykład 9: Metody wirtualne i polimorfizm

Wykład 9: Metody wirtualne i polimorfizm Języki programowania C i C++ Wykład 9: Metody wirtualne i polimorfizm 1 dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD Podstawy programowania w C++ 2 to funkcje składowe, które przydają się szczególnie,

Bardziej szczegółowo

Podstawy programowania obiektowego

Podstawy programowania obiektowego 1/23 Podstawy programowania obiektowego wykład 8 polimorfizm, wyjątki, kolekcje generyczne Na poprzednim wykładzie: dziedziczenie jest sposobem na utworzenie nowej klasy na podstawie klasy już istniejącej,

Bardziej szczegółowo

Podstawy programowania obiektowego

Podstawy programowania obiektowego Podstawy programowania obiektowego Technologie internetowe Wykład 5 Program wykładu Podejście obiektowe kontra strukturalne do tworzenie programu Pojęcie klasy i obiektu Składowe klasy: pola i metody Tworzenie

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 2

PARADYGMATY PROGRAMOWANIA Wykład 2 PARADYGMATY PROGRAMOWANIA Wykład 2 Definiowanie klas w C++ - ciąg dalszy Lista inicjalizująca konstruktora Przeznaczenie - do inicjalizacji pól klasy z kwalifikatorem const i inicjalizacji obiektów składowych

Bardziej szczegółowo

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego:

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego: Typy klasowe (klasy) 1. Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która definiuje programy za pomocą obiektów

Bardziej szczegółowo