Sodobni razvijalec naj bi začel pisati program najprej razmisliti o arhitekturi prihodnjega projekta. Z vidika objektno usmerjenega pristopa k razvoju programske opreme to pomeni, da mora programer ustvariti kodo, ki bo sestavljena iz logičnih blokov (razredov in objektov), in razmišljati o njihovi interakciji. Koda mora biti podprta. To pomeni, da bo v prihodnosti ta program lahko brez bolečin dopolnjen ali razširjen, ne da bi se pri tem spremenile njegove glavne komponente.
Dedovanje
Kako je to opisano v programskem jeziku?
razred Ivan: Oseba
{
//telo razreda
{
Primer mehanizma dedovanja razredov:
razred Oseba
{
javno int Starost {get; set;}
}
class Ivan: Oseba
{
javni void Talk ()
{
//Ivan govori
}
}
razred Peter :(Oseba
{
public void Walk () {40} {{41} //Peter goes
}
}
razred Program
{
statični void Glavni (niz) [] args)
{
Ivan ivan = novi Ivan ();
ivan.Age = 29; //označimo starost
Peter peter = novi Peter ();
peter.Age = 35
ivan.Talk ();
peter.Walk () ();
}
}
Na podlagi osnovnega razreda oseb se ustvarijo dediči in lastnost Age je na voljo za oba razreda.
Baselski konstruktor
Ustvarjanje razreda z deklariranim konstruktorjem in dedičem razreda je logično vprašanje: za katere oblikovalce bodo odgovorni pri ustvarjanju objektov teh razredov?
Če je podan samo v podedovanem razredu, se konstruktor privzeto imenuje pri ustvarjanju predmeta dediča.(nadrejeni) in nato njegov prejemnik.
Če so konstruktorji podani tako v nadrejenem kot v pomožnem razredu, se osnovna ključna beseda uporablja za klicanje osnovnega. Ko prijavljate to strukturo dedovanja dedovanja, uporabite naslednjo skladnjo:
& lt; script type = "text /javascript" & gt;
lahko blockSettings2 = {blockId: "R-A-271049-5", renderTo: "yandex_rtb_R-A-70350-39", async: 0};
if (document.cookie.indexOf ("abmatch =") & gt; = 0) blockSettings2.statId = 70350;
Funkcija (a, b, c, d, e) {a [c] = a [c] || [], a [c] .push (funkcija () {Ya.Context.AdvManager.render (blockSettings2)}), e = b.getElementsByTagName ("script") , d = b.createElement ("script"), d.type = "text /javascript", d.src = "//an.yandex .ru /system /context.js ", d.async =! 0e.parentNode.insertBefore (d, e)} (ta, ta.dokument," yandexContextAsyncCallbacks ");
javno Ivan (int age): baza (starost)
{
//konstruktorsko telo
}
Naslednje metode razredov so najpomembnejša lastnost OOP Pri ustvarjanju predmeta razreda-dediča se posredujejo argumenti konstruktorja osnovnega razreda, nato pa se imenuje njegov konstruktor, nato pa se izvedejo drugi klici konstruktorja dediča.
Dostop do pomožnih polj
Dedovanje dostopa do lastnosti in metod osnovnega razreda iz razreda dediča postane mogoče, če so vse deklarirane z naslednjimi ključnimi besedami:
1. Javno
Omogoča neomejen dostop članom razreda: Main, iz zaporednih razredov, od drugih sodelavcev.
2. Zaščitena.
Dostop do člana ostane le iz prvotnega razreda ali izpeljan iz analogov.
3. Notranji.
Omejitev na člana je omejena samo s tem projektnim sklopom.
4. Zaščitena notranja.
Omejitev na člana je omejena samo s tem dodatkomprojektnih ali izpeljanih razredov.
Dedovanje članov razreda je odvisno od ključnih besed. Če član ni določen kot tak, je razpoložljivost nastavljena na zasebno (zasebno).
Večkratno dedovanje
Vmesniki so pogodba, ki zagotavlja, da se bo niz metod izvajal v vmesniku razreda naslednika. Slednji ne vsebujejo statičnih članov, polj, konstant ali konstruktorjev. To je nelogično in ne morete ustvariti vmesniških objektov.
& lt; script type = "text /javascript" & gt;
lahko blockSettings3 = {blockId: "R-A-271049-6", renderTo: "yandex_rtb_R-A-70350-44", async:!
if (document.cookie.indexOf ("abmatch ="))> = 0) blockSettings3.statId = 70350;
Funkcija (a, b, c, d, e) {a [c] = a [c] || [], [c] .push (funkcija () {Ya.Context.AdvManager.render (blockSettings3)}), e = b.getElementsByTagName ("script") , d = b.createElement ("script"), d.type = "text /javascript", d.src = "//an.yandex .ru /system /context.js ", d.async =! 0e.parentNode.insertBefore (d, e)} (ta, ta.dokument," yandexContextAsyncCallbacks ");
Te strukture so ustvarjene zunaj razreda, deklariranega z uporabo vmesnika ključnih besed:
vmesnik IMyInterfave
{
void MyMethod (int someVar);
}
Pravilo dobrega tona pri ustvarjanju vmesnikov je začeti ime konstrukcije s kapitalizacijo črke I, da bi jih dodatno ločili. V telesu vmesnika so napovedani podpisi njegovih članov.
Da bi označili, da bo razred izvedel vmesnik, je treba, tako kot se običajno podeduje, podati ime konstrukcije po deklaraciji razreda:
class MyClass: IMyInterface
) {
public void MyMethod (int someVar)
}
Za izvedbo večkratne dediščine so potrebni vmesniki. V programskem jeziku C ++možno je klasično dedovanje razredov; V C # se za te namene uporabljajo vmesniki. Razred lahko izvede veliko število vmesnikov, v tem primeru se po deklaraciji razredov prenesejo z vejicami:
razred }
Privzeto so vse lastnosti in metode vmesnikov javne, ker morajo definirati funkcijo, ki bo izvedena v razredu. Dedovanje v C # skoraj vedno vključuje uporabo tega priročnega orodja.