Interfejsy.
Polimorfiz
m
Przegląd zagadnień
Interfejsy
Polimorfizm obiektów
Metody polimorficzne
Polimorfizm parametryczny
Podsumowanie
Pytania sprawdzające
Laboratorium
Interfejsy (1)
Interfejsy są „w pełni abstrakcyjnymi
klasami”
Interfejs zawiera deklaracje metod,
które musi realizować klasa
implementująca interfejs
interface
Jadalny
{
void Jedz();
}
class Chleb
: Jadalny
{
public void Jedz()
{
Console.WriteLine("zjedzono chleb");
}
}
<<interface>
>
Jadalny
+ Jedz()
Chleb
+ Jedz()
Gruszka g = new Gruszka();
g.Jedz();
Cytryna c = new Cytryna();
c.Jedz();
abstract class Owoc
: Jadalny
{
protected string Smak;
public void Jedz()
{
Console.Write(ToString());
Console.Write(" ma smak ");
Console.WriteLine(Smak);
}
}
class Gruszka
: Owoc
{
public Gruszka()
{ Smak = "slodki";
}
}
class Cytryna
: Owoc
{
public Cytryna()
{ Smak = "kwasny";
}
}
Interfejsy (2)
<<interface>
>
Jadalny
+ Jedz()
Gruszka
+
<<construc
tor>>
Gruszka()
Owoc
# Smak :
string
+ Jedz()
Cytryna
+
<<construc
tor>>
Cytryna()
Gruszka g = new Gruszka();
Cytryna c = new Cytryna();
Konsument k = new Konsument();
k.JedzCokolwiek(g);
k.JedzOwoc(c);
class Konsument
{
public void JedzCokolwiek(
Jadalny
j)
{
j.Jedz();
}
public void JedzOwoc(
Owoc
o)
{
o.Jedz();
}
}
Interfejsy (3)
<<interface>
>
Jadalny
+ Jedz()
Gruszka
+
<<construc
tor>>
Gruszka()
Owoc
# Smak :
string
+ Jedz()
Cytryna
+
<<construc
tor>>
Cytryna()
Konsument
+
JedzCokolwiek(J
adalny)
+ JedzOwoc(Owoc)
Polimorfizm (1)
Obiekt może występować jako
instancja klasy
lub jej klasy bazowej
Metoda abstrakcyjna może mieć różną
funkcjonalność
w zależności od implementacji w klasie
pochodnej
(metoda polimorficzna)
Metoda może mieć różną fukcjonalność
w zależności od zestawu parametrów
(polimorfizm parametryczny)
Polimorfizm (2)
Polimorfizm obiektu
<<interface>
>
Jadalny
+ Jedz()
Gruszka
+
<<construc
tor>>
Gruszka()
Owoc
# Smak :
string
+ Jedz()
Cytryna
+
<<construc
tor>>
Cytryna()
Chleb
+ Jedz()
Chleb ch = new Chleb();
Gruszka g = new Gruszka();
Cytryna c = new Cytryna();
Konsument k = new Konsument();
k.JedzCokolwiek(ch);
k.JedzCokolwiek(g);
Konsument
+
JedzCokolwiek(J
adalny)
+ JedzOwoc(Owoc)
Metody polimorficzne
Polimorfizm metody
<<interface>
>
Jadalny
+ Jedz()
Gruszka
+
<<construc
tor>>
Gruszka()
Owoc
# Smak :
string
+ Jedz()
Cytryna
+
<<construc
tor>>
Cytryna()
Chleb
+ Jedz()
Chleb ch = new Chleb();
Gruszka g = new Gruszka();
Cytryna c = new Cytryna();
ch.Jedz();
g.Jedz();
c.Jedz();
Polimorfizm parametryczny
Polimorfizm parametryczny metody
class Obywatel
{
private string Wzrost;
public void PodajWzrost(double m)
{
int cm = (int) m;
PodajWzrost(cm);
}
public void PodajWzrost(int cm)
{
if (cm > 160)
Wzrost = "wysoki";
else
Wzrost = "niski";
}
public void PodajWzrost(string opis)
{
Wzrost = opis;
}
}
Podsumowanie
Interfejs zawiera tylko deklaracje metod
Klasa, która implementuje interfejs, musi
zawierać wszystkie metody interfejsu
Każdy obiekt w języku C# ma metodę
ToString
Obiekt należy do klasy, którą implementuje,
oraz do wszystkich jej klas bazowych
Metoda klasy może mieć różne
funkcjonalności
w zależności od klasy pochodnej, w której
została przeciążona
Metoda może mieć różne funkcjonalności w
zależności od zestawu parametrów
Pytania sprawdzające
Czym jest intefejs?
Jak zachowuje się obiekt
polimorficzny?
Czym są metody polimorficzne?
Na czym polega polimorfizm
parametryczny?
Laboratorium