#3 jirkab
Ahoj Jirko, zcela chápu jak to myslíš. Vsadím se, že si začal programovat nějaký klasický příklad na OOP a chtěl sis ho vyzkoušet. Teď si možná říkáš: "sakra k čemu tam vlastně to rozhraní je?".
Když jsem já začínal, byl jsem na tom stejně.
Tak tedy od začátku:
K čemu je rozhraní (interface)?
Rozhraní jako takový bylo zavedeno proto, abychom se vyvarovali problematice s mnohonásobnou dědičností.
Pěkná věta, ale její důsledek není asi na první pohled viditelný. Teď mi napadá, to samé si asi řekneš o "E = mc^2". Kdo by si kdy představil, že dnešní jaderná energie stojí na takto pěkném vzorečku :)
Problém s vícenásobnou dědičností je ten, že pokud oba předci obsahují stejnou proměnnou, tak kterou si vybrat?
// ber to jako pseudokod, samozrejme, c# nema mnohonasobnou dedicnost, ale napr. c++ ano
public class Matka {
public string oci;
public string usi;
}
public class Otec {
public string nos;
public string oci;
}
public class Dite : Otec, Matka {
// ci pak oci dite dostane?
}
Samozřejmě tento problém lze řešit různě a plno jazyků se s ním potýká (C++, python a kdoví co ještě). Ale pak přišli chytří pánové, dali hlavy dohromady a řekli si, co když pouze předepíšeme, že daná třída musí obsahovat danou vlastnost (metodu, udalost..) a o implementaci se již starat nebudeme.
Takže zpět k tvýmu dotazu, jestli když je property non-public, tak ji do inteface nepíšu.
Svým způsobem ty ani interface používat nemusíš, můžeš používat přímo objekty/třídy. Rozhraní má tu výhodu, že pokud chceš různé objekty používat stejným způsobem, tak si nadefinuješ rozhraní, do kterého předepíšeš metodu, kterou ty potřebuješ zvenčí používat a všech objektech si danou metodu doimplementuješ dle tvojí potřeby.
Automaticky to tedy neznamená, že do interface musíš přepisovat všechny public metody či property. Pouze ty, které pro daný interface jsou pro tebe důležitý a který musí všechny objekty typu IAuto mít. Navíc těch rozhraní můžeš mít víc ;)
Abstraktní třída pak slouží tobě k tomu, abys nemusel pořád psát stejný kód ve všech třídách dokola, zejména je to dobré, pokud tuto vlastnost (metodu) potřebuješ zpětně upravit. Stačí ti jedna změna v jednom souboru.