170 likes | 308 Views
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?
E N D
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
Szybkieprzypomnienie • 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(); PrintText(hPrinter, "Hello world!"); hPrinter = GetPrinter(); hPrinter.PrintText(hPrinter,”Hello World!”);
Obiektowość classSamochod { Kolo kola [4]; Silnik silnik; Drzwi drzwi[2]; } Samochod[10] listaStartowa; Kolo[40] listaStartowa_kola; Silnik[10] listaStartowa_silnik; Drzwi[20] listaStartowa_drzwi; 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; • Samochód • Koło • Drzwi • Silnik • Motocykl • Koło • Silnik
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 tworzenienowejklasynapodstawiejednejlubkilkuistniejącychwcześniejklasbazowych Ź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 classAnimal // Zwierzę { floatm_fMasa; intm_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 { voidPlyn(); }; classMammal : Animal // Ssak { void Biegnij(); }; class Bird : Animal // Ptak { void Lec(); };
ZOO classHomeDog: 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 classChessPiece{ /* definicja */ }; // Figura szachowa // klasy pochodne classPawn: ChessPiece{ /* ... */ }; // Pionek classKnight : ChessPiece{ /* ... */ }; // Skoczek classBishop : ChessPiece{ /* ... */ }; // Goniec classRook: ChessPiece{ /* ... */ }; // Wieża classQueen: ChessPiece{ /* ... */ }; // Hetman classKing : ChessPiece{ /* ... */ }; // Król
Polimorfizm • Kwintesencja dziedziczenia • Operowanie na typie bazowym • A de facto na typie rzeczywistym
Polimorfizm class Fish : Animal { void Oddychaj() // redefinicjametodywirtualnej { Console.WriteLine("Oddychamskrzelami...„); } void Plyn(); }; class Mammal : Animal { void Oddychaj() // redefinicjametodywirtualnej { Console.WriteLine("Oddychampłucami...„); } void Biegnij(); };
Polimorfizm publicclassDocument { publicString Author { get; set; } publicString Title { get; set; } publicDateTime Date{ get; set; } } publicclassProgram { publicstaticvoidShowDocument(Documentdoc) { Console.WriteLine("Author:" + doc.Author); Console.WriteLine("Title:" + doc.Title); Console.WriteLine("Date:" + doc.Date); } }
RTTI • RunTimeType Info • Podstawa refleksji i meta-programowania • Klasa Type