C# cz.3 Obiektowość w C# Krzysztof Fediuk krzysiek.fediuk@gmail.com
Agenda Szybkie przypomnienie Co to jest dziedziczenie? Dlaczego dziedziczenie jest fajne Przykłady Polimorfizm RTTI
Szybkie przypomnienie Jakie mamy encje? Co to znaczy, że metoda jest statyczna? Jak zadeklarować property? Czy metoda Console.Write() przechodzi do nowej linii? Z ilu interfejsów możemy dziedziczyć?
Co jest lepsze? hPrinter = GetPrinter(); hPrinter.PrintText(hPrinter,”Hello World!”); Który kod jest lepszy? Co widać? Drukowanie czy drukarkę? hPrinter = GetPrinter(); PrintText(hPrinter, "Hello world!");
Obiektowość Samochód Koło Drzwi Silnik Motocykl class Motocykl { Kolo kola [2]; Silnik silnik; } Motocykl[10] listaStartowaM; Samochod[10] listaStartowa; Kolo[40] listaStartowa_kola; Silnik[10] listaStartowa_silnik; Drzwi[20] listaStartowa_drzwi; Kolo[20] listaStartowaM_kola; Silnik[10] listaStartowaM_silnik; class Samochod { Kolo kola [4]; Silnik silnik; Drzwi drzwi[2]; } Samochod[10] listaStartowa; Kolo[40] listaStartowa_kola; Silnik[10] listaStartowa_silnik; Drzwi[20] listaStartowa_drzwi; Samochód Koło Drzwi Silnik Motocykl Enkapsulacja Więcej elementów do kontroli Drobne różnice nie wychwycalne
Co to jest dziedziczenie? Źródło: „Od zera do gier kodera”, http://xion.org.pl/productions/texts/coding/megatutorial/
Dziedziczenie w C# Dziedziczenie (ang. inheritance) to tworzenie nowej klasy na podstawie jednej lub kilku istniejących wcześniej klas bazowych Źródło: „Od zera do gier kodera”, http://xion.org.pl/productions/texts/coding/megatutorial/
Abstrakcja (3rok TOiK) Umiejętność pomijania niepotrzebnych elementów i ustalania odpowiedniego poziomu szczegółowości
Dlaczego dziedziczenie jest fajne? Enkapsulacja danych i zachowania Ponowne użycie kodu Ułatwia abstrahowanie 7 ± 2
ZOO class Animal // Zwierzę { float m_fMasa; int m_uWiek; public Animal() { m_uWiek = 0; } void Patrz(); void Oddychaj(); float Masa{ get { return m_fMasa; } set { m_fMasa = value; } } int Wiek{ get { return m_uWiek; } } };
ZOO class Fish : Animal // Ryba { void Plyn(); }; class Mammal : Animal // Ssak void Biegnij(); class Bird : Animal // Ptak void Lec();
ZOO class HomeDog : Mammal // Pies domowy { RACE m_Rasa; COLOR m_KolorSiersci; // metody void Aportuj(); void Szczekaj(); // propertisy RACE Rasa { get {return m_Rasa; } } COLOR KolorSiersci { get {return m_KolorSiersci; } } };
Szachy // klasa bazowa class ChessPiece { /* definicja */ }; // Figura szachowa // klasy pochodne class Pawn : ChessPiece { /* ... */ }; // Pionek class Knight : ChessPiece { /* ... */ }; // Skoczek class Bishop : ChessPiece { /* ... */ }; // Goniec class Rook : ChessPiece { /* ... */ }; // Wieża class Queen : ChessPiece { /* ... */ }; // Hetman class King : ChessPiece { /* ... */ }; // Król
Polimorfizm Kwintesencja dziedziczenia Operowanie na typie bazowym A de facto na typie rzeczywistym
Polimorfizm class Fish : Animal { void Oddychaj() // redefinicja metody wirtualnej { Console.WriteLine("Oddycham skrzelami...„); } void Plyn(); }; class Mammal : Animal void Oddychaj() // redefinicja metody wirtualnej { Console.WriteLine("Oddycham płucami...„); } void Biegnij();
Polimorfizm public class Document { public String Author { get; set; } public String Title { get; set; } public DateTime Date{ get; set; } } public class Program public static void ShowDocument(Document doc) Console.WriteLine("Author:" + doc.Author); Console.WriteLine("Title:" + doc.Title); Console.WriteLine("Date:" + doc.Date); Dodać klasy Online document i Book Wypisać zawartośc
RTTI RunTime Type Info Podstawa refleksji i meta-programowania Klasa Type