Programowanie obiektowe i zdarzeniowe

Podobne dokumenty
Podstawy programowania obiektowego

Programowanie obiektowe i zdarzeniowe

Podstawy programowania obiektowego

Programowanie obiektowe i zdarzeniowe

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Podstawy programowania obiektowego

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

Mechanizm dziedziczenia

Dokumentacja do API Javy.

Wykład 5 Okna MDI i SDI, dziedziczenie

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Dziedziczenie. dr Jarosław Skaruz

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

Wykład 4: Klasy i Metody

Programowanie obiektowe

Mechanizm dziedziczenia

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Enkapsulacja, dziedziczenie, polimorfizm

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

Definiowanie własnych klas

Wykład 6: Dziedziczenie

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie obiektowe

Decorator (dekorator)

Przypomnienie o klasach i obiektach

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

Obiekty: co i jak. Wykonał: Piotr Pięda dla koła naukowego KNI

Kompozycja i dziedziczenie klas

Programowanie obiektowe

Aplikacje w środowisku Java

Technologie i usługi internetowe cz. 2

Wykład 12. Programowanie serwera MS SQL 2005 w C#

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

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

Instrukcja 3 Laboratorium z Podstaw Inżynierii Oprogramowania

Podstawy Języka Java

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

Dziedziczenie. Ogólna postać dziedziczenia klas:

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

TEMAT : KLASY DZIEDZICZENIE

Programowanie obiektowe

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

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

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

Metody Metody, parametry, zwracanie wartości

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

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

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

Kompozycja i dziedziczenie klas

Programowanie obiektowe

Wykład 7: Pakiety i Interfejsy

Programowanie obiektowe

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

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

Rozdział 4 KLASY, OBIEKTY, METODY

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

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 20 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32

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

Programowanie obiektowe w języku

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

Zaawansowane programowanie w C++ (PCP)

Java: interfejsy i klasy wewnętrzne

Programowanie obiektowe

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

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

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

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

Aplikacje w środowisku Java

Klasy abstrakcyjne, interfejsy i polimorfizm

Informatyka II Laboratorium 3 : Programowania obiektowe C++ - dziedziczenie

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

PARADYGMATY PROGRAMOWANIA Wykład 4

11.6 Klasa do obsługi liczb wymiernych

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

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Programowanie obiektowe

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

PHP 5 język obiektowy

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

Zaawansowane programowanie w C++ (PCP)

Programowanie obiektowe

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

Kurs WWW. Paweł Rajba.

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

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

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

Polimorfizm. dr Jarosław Skaruz

PARADYGMATY PROGRAMOWANIA Wykład 3

.NET Klasy, obiekty. ciąg dalszy

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

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

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

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

Podstawy programowania obiektowego

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

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

Transkrypt:

Marek Tabędzki Programowanie obiektowe i zdarzeniowe 1/22 Programowanie obiektowe i zdarzeniowe wykład 5 dziedziczenie Dziedziczenie jest sposobem na utworzenie nowej klasy na podstawie klasy już istniejącej. Dziedziczenie tworzy szczególną (bardziej specyficzną) odmianę klasy istniejącej. Klasa istniejąca (z której dziedziczymy) nazywana jest klasą bazową. Nowa klasa (utworzona przez dziedziczenie) nazywana jest klasą pochodną.

Marek Tabędzki Programowanie obiektowe i zdarzeniowe 2/22 Relacja między klasą istniejącą (bardziej ogólną), a nową (specjalizowaną) wyraża się poprzez sformułowania: <klasa pochodna> jest szczególnym przypadkiem <klasy bazowej> <klasa pochodna> jest rodzajem <klasy bazowej> <klasa bazowa> jest uogólnieniem <klasy pochodnej> Np.: Koło jest szczególnym przypadkiem figury Przesyłka polecona jest rodzajem przesyłki pocztowej Osoba jest uogólnieniem pracownika class Figura { class PrzesyłkaPocztowa { class Koło : Figura { class PrzesyłkaPolecona : PrzesyłkaPocztowa {

Marek Tabędzki Programowanie obiektowe i zdarzeniowe 3/22 Klasa pochodna dziedziczy pola i metody klasy bazowej: class Osoba { public string imię; public string nazwisko; public override string ToString() { return imię + " " + nazwisko; class Pracownik : Osoba { // pusto

Klasa pochodna dziedziczy pola i metody klasy bazowej: public string imię; public string nazwisko; public override string ToString() { return... // pusto class Program { static void Main(string[] args) { Osoba os = new Osoba(); Jan Kowalski os.imię = "Jan"; os.nazwisko = "Kowalski"; Console.WriteLine(os.ToString()); Pracownik pr = new Pracownik(); pr.imię = "Piotr"; pr.nazwisko = "Nowak"; Console.WriteLine(pr.ToString()); Piotr Nowak Marek Tabędzki Programowanie obiektowe i zdarzeniowe 4/22

Marek Tabędzki Programowanie obiektowe i zdarzeniowe 5/22 Klasa pochodna może dodać własne pola: public string imię; public string nazwisko; public override string ToString() { return imię + " " + nazwisko; public double płaca;

Marek Tabędzki Programowanie obiektowe i zdarzeniowe 6/22 Klasa pochodna może dodać własne pola: public string imię; public string nazwisko; public override string ToString() { return imię + " " + nazwisko; public double płaca; class Program { static void Main(string[] args) { Pracownik pr = new Pracownik(); pr.imię = "Piotr"; pr.nazwisko = "Nowak"; Console.WriteLine(pr.ToString()); Piotr Nowak pr.płaca = 2200.0;

Marek Tabędzki Programowanie obiektowe i zdarzeniowe 7/22 Klasa pochodna może dodać własne metody: public string imię; public string nazwisko; public override string ToString() { return imię + " " + nazwisko; public double płaca; public void Wypłać() { Console.WriteLine(imię + " " + nazwisko + " otrzymuje " + płaca + "zł");

Klasa pochodna może dodać własne metody:... public double płaca; public void Wypłać() { Console.WriteLine(imię + " " + nazwisko + " otrzymuje " + płaca + "zł"); class Program { static void Main(string[] args) { Pracownik pr = new Pracownik(); Piotr Nowak pr.imię = "Piotr"; pr.nazwisko = "Nowak"; Console.WriteLine(pr.ToString()); pr.płaca = 2200.0; pr.wypłać(); Piotr Nowak otrzymuje 2200.0 zł Marek Tabędzki Programowanie obiektowe i zdarzeniowe 8/22

Klasa pochodna może nadpisać (przesłonić) metodę klasy bazowej:... public override string ToString() { return imię + " " + nazwisko;... public override string ToString() { return imię + " " + nazwisko + ": " + płaca; class Program { static void Main(string[] args) { Pracownik pr = new Pracownik(); pr.imię = "Piotr"; pr.nazwisko = "Nowak"; Piotr Nowak: 2200.0 pr.płaca = 2200.0; Console.WriteLine(pr.ToString()); Marek Tabędzki Programowanie obiektowe i zdarzeniowe 9/22

Marek Tabędzki Programowanie obiektowe i zdarzeniowe 10/22 Klasa pochodna może nadpisać (przesłonić) metodę klasy bazowej. Poprzednia (odziedziczona) wersja metody nadal jest dostępna. Można się do niej odwołać przy pomocy słowa kluczowego base.... public override string ToString() { return imię + " " + nazwisko; public override string ToString() { return base.tostring() + ": " + płaca;

Marek Tabędzki Programowanie obiektowe i zdarzeniowe 11/22 Do odziedziczonej wersji metody można się odwołać przy pomocy słowa kluczowego base.... public double płaca; public void Wypłać() {... public override string ToString() { return base.tostring() + ": " + płaca; class Program { static void Main(string[] args) { Pracownik pr = new Pracownik(); pr.imię = "Piotr"; pr.nazwisko = "Nowak"; Piotr Nowak: 2200.0 pr.płaca = 2200.0; Console.WriteLine(pr.ToString());

Marek Tabędzki Programowanie obiektowe i zdarzeniowe 12/22 Klasa pochodna nie dziedziczy konstruktorów z klasy bazowej! public string imię; public string nazwisko; public Osoba(string imię, string nazwisko) { this.imię = imię; this.nazwisko = nazwisko; public override string ToString() {... public double płaca;... class Program { static void Main(string[] args) { Osoba os = new Osoba("Jan", "Kowalski"); Pracownik pr = new Pracownik("Piotr", "Nowak"); Błąd!

Klasa pochodna nie dziedziczy konstruktorów z klasy bazowej. public string imię; public string nazwisko; public Osoba(string imię, string nazwisko) {... public override string ToString() {... public double płaca; Musimy dostarczyć własny konstruktor public Pracownik(string im, string nazw, double płaca) { this.imię = im; this.nazwisko = nazw; this.płaca = płaca;... class Program { Nadal błąd? static void Main(string[] args) { Osoba os = new Osoba("Jan", "Kowalski"); Pracownik pr = new Pracownik("Piotr", "Nowak", 2200.0); Marek Tabędzki Programowanie obiektowe i zdarzeniowe 13/22

Marek Tabędzki Programowanie obiektowe i zdarzeniowe 14/22 Klasa pochodna to klasa bazowa plus dodatki (nowe pola, nowe metody). Obiekt klasy pochodnej jest to obiekt klasy bazowej z dodatkami (z nowymi polami, nowymi metodami). Wewnątrz obiektu klasy Pracownik znajduje się obiekt klasy Osoba. W momencie tworzenia obiektu klasy Pracownik najpierw musi być stworzony obiekt klasy Osoba: pr public Osoba() { Console.WriteLine("Tworzę osobę.");... public Pracownik() { Console.WriteLine("Tworzę pracownika.");...... Pracownik pr = new Pracownik(); Pracownik Osoba imię nazwisko Osoba(...) ToString() płaca Pracownik(...) Wypłać() ToString() Tworzę osobę. Tworzę pracownika.

Marek Tabędzki Programowanie obiektowe i zdarzeniowe 15/22 W momencie tworzenia obiektu klasy pochodnej najpierw musi być wywołany konstruktor klasy bazowej. Jeśli konstruktor przyjmuje jakieś parametry, należy mu je przekazać. Służy do tego słowo kluczowe base. this Pracownik base Osoba public string imię; imię public string nazwisko; nazwisko public Osoba(string imię, string nazwisko) { Osoba(...) this.imię = imię; tostring() this.nazwisko = nazwisko; płaca Pracownik(...) wypłać() tostring() public double płaca; public Pracownik(string im, string nazw, double płaca): base(imię, nazwisko) { this.płaca = płaca;... Pracownik pr = new Pracownik("Piotr", "Nowak", 2200.0);

Marek Tabędzki Programowanie obiektowe i zdarzeniowe 16/22 Przykład: konto z oprocentowaniem. class Konto { private double suma; public Konto(double wkład) { suma = wkład; public void Wpłać(double kwota) { suma += kwota; public void Wypłać(double kwota) { suma -= kwota; public double Saldo() { return suma; class KontoOprocentowane : Konto { private double procent; public KontoOprocentowane(double wkład, double proc) : base(wkład) { procent = proc; public void NaliczProcent() { suma += suma * procent; Błąd!

Marek Tabędzki Programowanie obiektowe i zdarzeniowe 17/22 Przykład: konto z oprocentowaniem. class Konto { protected double suma; public Konto(double wkład) poza { dostępem suma = publicznym wkład; i public void Wpłać(double prywatnym, kwota) { mamy suma do += kwota; public void Wypłać(double dyspozycji kwota) również { suma dostęp -= kwota; public double Saldo() { return chroniony suma; (składowe dostępne dla klas pochodnych) class KontoOprocentowane : Konto { private double procent; public KontoOprocentowane(double wkład, double proc) : base(wkład) { procent = proc; public void NaliczProcent() { suma += suma * procent;

Marek Tabędzki Programowanie obiektowe i zdarzeniowe 18/22 Przykład: konto z oprocentowaniem. class Program { static void Main(string[] args) { KontoOprocentowane konto; konto = new KontoOprocentowane(1000.0, 0.05); konto.wpłać(200.0); konto.naliczprocent(); konto.wypłać(500.0); Console.WriteLine(konto.Saldo()); 760.0

Aby dziedziczyć z klasy, programista nie musi znać jej implementacji. class Zbiór { //... public void Dodaj(int wartość) { /*... */ public void Usuń(int wartość) { /*... */ public bool CzyJest(int wartość) { /*... */ class ZbiórParzysty : Zbiór { public void Dodaj(int wartość) { if (wartość % 2 == 0) base.dodaj(wartość); class Program { static void Main(string[] args) { ZbiórParzysty zbiór = new ZbiórParzysty(); zbiór.dodaj(4); zbiór.dodaj(5); false zbiór.dodaj(6); Console.WriteLine(zbiór.CzyJest(5)); Marek Tabędzki Programowanie obiektowe i zdarzeniowe 19/22

To samo dotyczy kompozycji. class Plik { //... public Plik(string nazwa) { /*... */ public void Zapisz(string tekst) { /*... */ public string Odczytaj() { /*... */ public void Zamknij() { /*... */ class MaszynaSzyfrująca { //... public MaszynaSzyfrująca(int klucz) { /*... */ public string Szyfruj(string tekst) { /*... */ public string Odszyfruj(string tekst) { /*... */ class PlikSzyfrowany : Plik { private MaszynaSzyfrująca ms; public PlikSzyfrowany(string nazwa, int klucz) : base(nazwa) { ms = new MaszynaSzyfrująca(klucz); Marek Tabędzki Programowanie obiektowe i zdarzeniowe 20/22

Marek Tabędzki Programowanie obiektowe i zdarzeniowe 21/22 To samo dotyczy kompozycji. class PlikSzyfrowany : Plik { private MaszynaSzyfrująca ms; public PlikSzyfrowany(string nazwa, int klucz) : base(nazwa) { ms = new MaszynaSzyfrująca(klucz); public void Zapisz(string tekst) { string zaszyfrowany = ms.szyfruj(tekst); base.zapisz(zaszyfrowany); public string Odczytaj() { string zaszyfrowany = base.odczytaj(); string tekst = ms.odszyfruj(zaszyfrowany); return tekst;

class Program { static void Main(string[] args) { PlikSzyfrowany plik; plik = new PlikSzyfrowany("dane.bin", 1234); plik.zapisz("ala ma kota."); plik.zamknij(); Console.ReadKey(); Marek Tabędzki Programowanie obiektowe i zdarzeniowe 22/22