Dziedziczenie, polimorfizm, Interfejsy

Slides:



Advertisements
Podobne prezentacje
Klasy abstrakcyjne i interfejsy
Advertisements

Programowanie obiektowe PO PO - LAB 2 Wojciech Pieprzyca.
Dziedziczenie. Po co nam dziedziczenie? class osoba { char * imie, char * imie, * nazwisko; * nazwisko;public: void wypisz_imie(); void wypisz_imie();
Programowanie obiektowe w Javie
Programowanie obiektowe Wykład 7 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Programowanie w języku C++
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Sporządził: Jacek Kruszewski Szkolenie biblioteczne Wyższej Szkoły Inżynierii i Zdrowia w Warszawie SZKOLENIE BIBLIOTECZNE.
Tworzenie odwołania zewnętrznego (łącza) do zakresu komórek w innym skoroszycie Możliwości efektywnego stosowania odwołań zewnętrznych Odwołania zewnętrzne.
PRACA Z APLIKACJAMI SYSTEM PRZEMIESZCZANIA oraz NADZORU WYROBÓW AKCYZOWYCH EMCS PL 1.
Wyszukiwanie informacji w Internecie. Czym jest wyszukiwarka? INTERNET ZASOBY ZAINDEKSOWANE PRZEZ WYSZUKIWARKI Wyszukiwarka to mechanizm, który za pomocą.
Mam prawo do ochrony swoich danych osobowych Twoje dane – Twoja sprawa. Skuteczna ochrona danych osobowych. Inicjatywa edukacyjna skierowana do nauczycieli.
Poczta elektroniczna – e- mail Gmail zakładanie konta. Wysyłanie wiadomości.
Literary Reference Center Przewodnik
EWALUACJA JAKO ISTOTNY ELEMENT PROJEKTÓW SYSTEMOWYCH Sonia Rzeczkowska.
Zapraszamy na naszą stronę. Zależy nam na kontakcie z Wami. Czytajcie, komentujcie i dyskutujcie na forum. Nic o Was bez Was Zapraszamy na naszą stronę.
Porównywarki cen leków w Polsce i na świecie. Porównywarki w Polsce.
„Książki nie mają właściwości róż, dlatego nie szukajmy wciąż najświeższych”
BIBLIOTEKA SZKOLNA I JEJ WARSZTAT INFORMACYJNY INFORMACYJNY.
- nie ma własnego kształtu, wlana do naczynia przybiera jego kształt, - ma swoją objętość, którą trudno jest zmienić tzn. są mało ściśliwe (zamarzając.
Sieci komputerowe. Podział sieci. Podstawowe pojęcia związane z sieciami. Internet - określenia podstawowych terminów. Komunikacja w sieci.
Python. Języki Programistyczne Microcode Machine code Assembly Language (symboliczna reprezentacja machine code) Low-level Programming Language (FORTRAN,
Usługa ePodatki (MF) Michał Dobrzyński, Departament Informatyki MRPiPS tel
5 KROKÓW DO SZKOŁY PONADGIMNAZJALNEJ Jak dostać się do szkoły ponadgimnazjalnej? Instrukcja dla uczniów, którzy uczą się w gimnazjach które przekazują.
Jak tworzymy katalog alfabetyczny? Oprac.Regina Lewańska.
Język Java Paweł Rajba
Programowanie Obiektowe – Wykład 6
Test analizy wariancji dla wielu średnich – klasyfikacja pojedyncza
Programowanie Obiektowe – Wykład 1
Programowanie Obiektowe – Wykład 7
Schematy blokowe.
DEFINICJA I ZASTOSOWANIE W JĘZYKU HASKELL
On-the-Fly Garbage Collection
Prezentacja o Ubuntu Jakub Kociemba 2TI.
Wyniki projektu naukowego
Mikołaj Radwan JUnit Mikołaj Radwan
Full Text Finder Przegląd Publication Finder
Liczby pierwsze.
Akademia C# - Lab2 Zmienne, instrukcje warunkowe, pętle, debugger,
Kurs języka C++ – wykład 6 ( )
Rekursje Tak jak w innych językach funkcje mogą odwoływać się same do siebie Możemy regulować głębokość przed stwierdzeniem błędu (MaxRecursion, $RecursionLimit,
Akademia C# lab. 9 Zdarzenia i delegaty.
Programowanie Obiektowe – Wykład 2
Programowanie obiektowe
Wstęp do Informatyki - Wykład 3
Przewodnik Udoskonalanie listy wyników w wyszukiwarce naukowej
Lekcja 1 – Hello World! Visual Studio, coś łatwego na początek 
Programowanie obiektowe
Kurs języka C++ – wykład 13 ( )
Dodawanie liczb całkowitych
Git - system kontroli wersji
Bezpieczeństwo dostępu do danych w systemie Windows
Języki programowania.
Programowanie obiektowe
Koszyk danych.
Podstawy informatyki Zygfryd Głowacz.
Strukturalne wzorce projektowe
Zmienne i typy danych w C#
PGO Kolekcje Michail Mokkas.
Iteracyjno-rozwojowy cykl oprogramowania 2
Zdarzenia (eventy) Zdarzenia służą do powiadomienia użytkownika, gdy w używanej klasie dojdzie do pewnych wydarzeń zdefiniowanych przez twórcę klasy.
Implementacja rekurencji w języku Haskell
Tytuł prezentacji szkoleniowej
Język C++ Preprocesor Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła.
Współrzędne Stosowanie procedur (pomocników)
Autor: Magdalena Linowiecka
Projektowanie systemów informatycznych Wykład 3 – Obiekt a klasa
pracę programu Outlook
Zapis prezentacji:

Dziedziczenie, polimorfizm, Interfejsy Akademia C# - Lab 4 Dziedziczenie, polimorfizm, Interfejsy

Dziedziczenie

Dziedziczenie  Dziedziczenie to kluczowy mechanizm obiektowości. Dziedziczenie pozwala na powielanie funkcjonalności wobec różnych klas w ten sposób nie musimy pisać ciągle samego kodu. . W dziedziczeniu używamy następujących terminów: -klasa bazowa (klasa z której dziedziczymy) -klasa pochodna (klasa która dziedziczy) Klasa pochodna może dziedziczyć tylko z jednej klasy bazowej. Dziedziczenie jest przechodnie, tzn jak klasa A dziedziczy po klasie B, która dziedziczy po klasie C to klasa A również dziedziczy po klasie C

Dziedziczenie class Figury { public string kolorWypelnienia; public string kolorObramowania; public int wielkoscObramowania; } class Prostokąt :Figury { } Klasa pochodna dziedziczy po klasie bazowej . W wyniku tej operacji wszystkie pola, metody, właściwości nieoznaczone modyfikatorem private są dostępne dla klasy pochodnej. W C# dziedziczenie zawsze jest publiczne.

Wywoływanie konstruktorów klas bazowych Wywołanie konstruktora klasy bazowej w klasie pochodnej odbywa się za pomocą słowa kluczowego “base” , a w nim trzeba podać odpowiednie argumenty.  class Figury { public Figury(string kolowyp, string kolobr) { kolorWypelnienia = kolowyp; kolorObramowania = kolobr; } public string kolorWypelnienia; public string kolorObramowania; } class Prostokąt :Figury { public Prostokąt(string kolowyp, string kolobr) : base(kolowyp,kolobr) { } } W tym przykładzie konstruktor klasy bazowej (Figury) wykona się najpierw potem wykona się konstruktor klasy pochodnej (Prostokąt)  Ta sztuczka działa pod warunkiem , że konstruktor w klasie bazowej nie jest prywatny.

Wywołanie konstruktora klasy bazowej w klasie pochodnej class KlasaPochodna : KlasaBazowa { public KlasaPochodna(int x) : base(x){} } class KlasaBazowa { public KlasaBazowa(int x) {} public KlasaBazowa() {} } W tym przypadku najpierw wykona się konstruktor klasy bazowej ,a potem klasy pochodnej.

Polimorfizm class Ssak { public void Spij() { } } class Kot : Ssak { new public void Spij() { } public void Miauczenie() { } } Kiedy dodamy do metody w klasie pochodnej słowo kluczowe new to informujemy kompliator, że wiemy co robimy i jest to celowo przesłonięta metoda klasy bazowej

Przesłanianie a nadpisywanie metod Pamiętaj, że nadpisanie metody, a jej przysłonięcie to dwie różne rzeczy. Metoda, która celowo ma być nadpisana jest metodą wirtualną. Nadpisywanie metody jest to mechanizm, który oferuje różne implementacje dla tej samej metody.  Cel metody jest zawsze taki sam tylko dostosowany do danego obiektu. 

Metody virtual i override public override void SenRem() { base.SenRem(); } Użyj słowa kluczowego base. //Użyj słowa ‘virtual’ do deklaracji tej metody. class Ssak { public virtual void Sen() { //ciało } } //Użyj słowa ‘override’ aby napisać metodę z klasy bazowej.  class Kot : Ssak { public override void Sen() { //inne ciało } }

Metody wirtualne i metody nadpisane (przysłanianie i nadpisywanie metod) Zasady użycia metod wirtualnych i metod nadpisanych Istnieje pewna grupa zasad, które muszą być przestrzegane , aby mechanizm metod wirtualnych działał poprawnie. Metody wirtualne i metody nadpisujące nie mogą być być prywatne. Nazwy metody wirtualnej i nadpisującej muszą być takie same. Wielkość znaków się liczy. Metoda wirtualna i metoda nadpisująca muszą mieć ten sam poziom dostępności. Czyli muszą mieć taki sam modyfikator dostępu. Możesz nadpisać tylko metodę wirtualną. Jeśli metoda nadpisująca nie ma słowa kluczowego override kompilator uznaje ,że chcesz przysłonić metodę, czyli stworzyć kompletnie inną implementacje. Jeśli chodzi o mechanizm dziedziczenia każda klasa dziedzicząca po klasie, która nadpisała metodę X może nadpisać ją jeszcze raz na swój sposób.

Klasa z modyfikatorem sealed Klasa z modyfikatorem sealed jest klasą „zamkniętą”, to znaczy że nie może być ona użyta jako klasa bazowa. sealed class Klasa { //ciało klasy }

Interfejsy Interfejs nie zawiera  żadnego  kodu użycia natomiast zawiera  tylko  specyfikacje metod i jej właściwości. Interfejsy można traktować jak kontrakt, który gwarantuje ,że dana klasa lub struktura, która po nim dziedziczy obsługuje dane zachowania.  Kiedy klasa obsługuje dany interfejs musi udostępniać wszystkie elementy tego interfejsu. namespace System { public interface IComparable int CompareTo(object obj); }

Implementowanie interfejsów class Test :IComparable { public int CompareTo(object obj) throw new NotImplementedException(); } Klasa bądź struktura, która dziedziczy po interfejsie musi implementować wszystkie jej metody w przeciwnym wypadku zobaczymy błąd. 

Ważne! Klasa może mieć tylko jedną klasę bazową ,ale klasa może mieć wiele interfejsów 

Zadanie Stwórz klasy: • Osoba z polami: imie, nazwisko, wiek, konstruktorem inicjującym wszystkie pola oraz metodą Wypisz. • Książka z polami: tytul, autor (typu Osoba), data wydania oraz metodą Wypisz Utwórz różne obiekty stworzonych klas. Wykonaj metody Wypisz.

Zadanie Stwórz klasę Czytelnik, dziedziczącą z klasy Osoba. Dodatkowo klasa Czytelnik powinna posiadać pole – listę / tablicę obiektów typu Książka - listę książek przeczytanych przez danego czytelnika oraz metodę WypiszKsiążki - wypisujące tytuły książek, które czytelnik przeczytał. Stwórz 3-5 książek, 2-4 czytelników, przypisz książki do tablic / list przeczytanych książek czytelników, wykonaj metody WypiszKsiążki.

Zadanie Zdefiniuj interfejs IOsoba. Powinien on nakazywać implementację właściwości Nazwa oraz metody Opisz. Następnie stwórz klasę Student dziedziczącą po tym interfejsie i implementującą go. Utwórz Studenta i przetestuj działanie metody

Zadanie