Začátek psát program, moderní vývojář by měl nejprve zvážit architekturu budoucího projektu. Z hlediska objektově orientovaného přístupu k vývoji softwaru to znamená, že programátor musí vytvořit kód, který bude sestávat z logických bloků (tříd a objektů) a přemýšlet o jejich interakci. Kód musí být podporován. To znamená, že v budoucnu může být tento program bezbolestný doplnit nebo rozšířit bez změny jeho hlavních komponent.
Dědičnost
Jak je popsáno v programovacím jazyce?
třída Ivan: Osoba
{
//tělo třídy
{
třída Osoba
{
public int Age {get;
třída Ivan: Osoba
{
public void Talk ()
{
//Ivan rozhovory
}
{
{
{{39} {39} {{41} [] args)
{
Ivan ivan = nový Ivan ();
ivan.Age = 29; //označit věk
Peter peter = nový Peter ();
peter.Age = 35
ivan.Talk ();
peter.Walk () ();
}
}
Na základě základní třídy Osoba se vytvářejí dědicové a pro obě třídy je k dispozici vlastnost Age.
Vytvoření třídy s deklarovaným konstruktérem a třídním dědicem existuje logická otázka: Které konstruktéři budou zodpovědní za vytváření objektů těchto tříd?
Je-li zadán pouze v zděděné třídě, je konstruktér při vytváření objektu dědice ve výchozím nastavení volán.(rodiče) a potom jeho přijímačem.
Pokud jsou konstruktéři uvedeni jak v mateřské, tak ve vedlejších třídách, základní klíčové slovo se používá k volání základní. S oznámením této konstrukce dědictví problém designer používá následující syntaxi:
& lt; script type = "text /javascript" & gt;
var blockSettings2 = {blockId: "R-A-271049-5", renderTo "yandex_rtb_R-A-70350 - 39", async :! 0};
pokud (document.cookie.indexOf ("abmatch =") & gt; = 0) blockSettings2.statId = 70350;
! Funkce (a, b, c, d, e) {a [c] = a [c] || [], a [c] .push (funkce () {Ya.Context.AdvManager.render (blockSettings2)}), e = b.getElementsByTagName ("scénář") , d = b.createElement ("scénář"), d.type = "text /javascript", d.src = „//an.yandex .ru /systém /context.js "d.async = 0e.parentNode.insertBefore (d, e)} (to, this.document,!" yandexContextAsyncCallbacks „);
veřejné Ivan (int věk): základnu (věk)
{
//konstruktor těleso
}
dědičnost metod třídy - důležitým znakem OOP Při vytváření objekt třídy nástupnických argumenty základní třídy konstruktoru předány k němu, pak to je voláno konstruktér, a pak dělat jiné konstrukční výzvy dědice.
přístup k oblasti dětské třídě
Inheritance přístupu k vlastnosti a metody základní třídy třídního-nástupce stává možným, když oznámili následující klíčová slova:
1. Veřejné
Poskytuje neomezený přístup členům třídy: Main, z po sobě jdoucích tříd, od ostatních protějšků.
2. Chráněno.
Přístup k členu zůstává pouze z původní třídy nebo odvozen z analogů.
3. Interní.
Omezení na člena je lokalizováno pouze v tomto projektu.
4. Chráněné vnitřní.
Omezení na člena je omezeno pouze tímto doplněnímprojekt nebo odvozené třídy.
Dědění přístupu k členům třídy závisí na klíčových slovech. Pokud člen není jako takový určen, je dostupnost nastavena na soukromou (soukromou).
Vícenásobná dědičnost
rozhraní - smlouva, která poskytuje záruku, že soubor metod bude proveden ve třídě nástupce rozhraní. Ty neobsahují statické členy, pole, konstanty nebo konstruktory. Je nelogické a nemůžete vytvářet objekty rozhraní.
& lt; script type = "text /javascript" & gt;
var blockSettings3 = {blockId: "R-A-271049-6", renderTo "yandex_rtb_R-A-70350 - 44", async :! 0};
, pokud (document.cookie.indexOf ("abmatch =") větší nebo rovno 0) blockSettings3.statId = 70350;
! Funkce (a, b, c, d, e) {a [c] = a [c] || [], a [c] .push (funkce () {Ya.Context.AdvManager.render (blockSettings3)}), e = b.getElementsByTagName ("scénář") , d = b.createElement ("scénář"), d.type = "text /javascript", d.src = „//an.yandex .ru /systém /context.js "d.async = 0e.parentNode.insertBefore (d, e)} (to, this.document,!" yandexContextAsyncCallbacks „);
Tyto struktury jsou vytvořeny mimo tříd jsou deklarovány pomocí rozhraní klíčové slovo:
rozhraní IMyInterfave
{
void MyMethod (int someVar);
}
, dobré chování při tvorbě rozhraní - start název konstrukce s velkým I, aby i nadále byly snáze rozlišit. V těle rozhraní jsou oznámeny podpisy svých členů.
Chcete-li určit, že třída bude implementovat rozhraní, stejně jako obvykle za sebou, zadejte název návrhu po deklaraci třídy:
Třída MyClass: IMyInterface (108 ) {
void MyMethod (int someVar)
}
rozhraní požadované pro provádění více rozhraní. V programovacím jazyce C ++klasická dědičnost tříd je možná; V rozhraní C # se pro tyto účely používají rozhraní. Třída může realizovat velký počet rozhraní, v takovém případě jsou přeloženy čárku po deklaraci třídy:
třída MyClass: IMyFirstInterface, IMySecondInterface
{
//třída těleso
}
Ve výchozím nastavení jsou všechny vlastnosti a metody rozhraní rozhraní veřejné, protože musí definovat funkci, která bude implementována ve třídě. Dědictví v C # téměř vždy zahrnuje použití tohoto šikovného nástroje.