Počevši od pisanja programa, suvremeni programer treba najprije razmotriti arhitekturu budućeg projekta. Sa stajališta objektno orijentiranog pristupa razvoju softvera, to znači da programer mora stvoriti kod koji će se sastojati od logičkih blokova (klasa i objekata), te razmišljati o njihovoj interakciji. Kôd mora biti podržan. To znači da u budućnosti ovaj program može biti bezbolan za dopunu ili proširenje bez mijenjanja glavnih komponenti.
Nasljeđivanje
Kako je to opisano u programskom jeziku?
klasa Ivan: Osoba
{
//tijelo klase
{
Primjer mehanizma nasljeđivanja klasa:
klasa Osoba
{
javno int Age {get; set;}
}
klasa Ivan: osoba
{
javna praznina Talk ()
{
//Ivan govori
}
}
klasa Peter :(Osoba
{
public void Walk () {40} {{41} //Peter goes
}
}
class Program
{
static void Main (string) [] args)
{
Ivan ivan = novi Ivan ();
ivan.Age = 29; //označava dob
Peter peter = novi Peter ();
peter.Age = 35
ivan.Talk ();
peter.Walk () ();
}
}
Na temelju osnovne klase Osoba stvoreni su nasljednici, a svojstvo Age je dostupno za oba razreda.
Baselski konstruktor
Stvarajući klasu s deklariranim konstruktorom i nasljednikom klase, postavlja se logično pitanje: za koje će dizajnere biti odgovorno prilikom stvaranja objekata tih klasa?
Ako je zadana samo u naslijeđenoj klasi, onda se konstruktor po zadanom poziva kada stvara objekt nasljednika.(roditelj), a zatim njegov primatelj.
Ako su konstruktori dani kako u nadređenoj tako iu podređenoj klasi, osnovna ključna riječ koristi se za pozivanje osnovnog. Prilikom deklariranja ove konstrukcijske strukture nasljeđivanja koristi se sljedeća sintaksa:
& lt; script type = "text /javascript" & gt;
može 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)} (ovaj, ovaj.dokument," yandexContextAsyncCallbacks ");
public Ivan (int age): baza (dob)
{
//tijelo konstruktora
}
Nasljedne metode klasa je najvažnija osobina PLO. Prilikom stvaranja objekta klasa-nasljednika, argumenti konstruktora osnovne klase se prosljeđuju njemu, a zatim se poziva njegov konstruktor, a zatim se izvršavaju drugi pozivi konstruktora nasljednika.
Pristup sporednim poljima
Nasljeđivanje pristupa svojstvima i metodama osnovne klase iz klase nasljednika postaje moguće ako su sve one deklarirane sljedećim ključnim riječima:
1. Javno.
Pruža neograničen pristup članovima razreda: Glavnom, iz uzastopnih razreda, od drugih kolega.
2. Zaštićeno.
Pristup članu ostaje samo iz početne klase ili izveden iz analoga.
3. Interno.
Ograničenje na član je lokalizirano samo s ovim skupom projekta.
4. Zaštićena unutarnja.
Ograničenje za člana ograničeno je samo ovim dodatkomprojektne ili izvedene klase.
Nasljeđivanje pristupa članovima razreda ovisi o ključnim riječima. Ako član nije naveden kao takav, dostupnost je postavljena na privatno (privatno).
Višestruko nasljeđivanje
Sučelja su ugovor koji jamči da će se skup metoda primijeniti u sučelju razreda nasljednika. Potonji ne sadrže statične članove, polja, konstante ili konstruktore. To je nelogično i ne možete stvoriti predmete sučelja.
& lt; script type = "text /javascript" & gt;
može blockSettings3 = {blockId: "R-A-271049-6", renderTo: "yandex_rtb_R-A-70350-44", async: 0};
if (document.cookie.indexOf ("abmatch =") & gt; = 0) blockSettings3.statId = 70350;
Funkcija (a, b, c, d, e) {a [c] = a [c] || [], a [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)} (ovaj, ovaj.dokument," yandexContextAsyncCallbacks ");
Ove se strukture stvaraju izvan klase, deklarirane pomoću sučelja ključnih riječi:
sučelje IMyInterfave
{
void MyMethod (int someVar);
}
Pravilo dobrog tona kod stvaranja sučelja jest pokretanje naziva konstrukcije s velikim slovom slova I kako bi se dalje razlikovali. U tijelu sučelja najavljuju se potpisi njegovih članova.
Kako bi se naznačilo da će klasa implementirati sučelje, potrebno je, kao što se obično naslijeđuje, specificirati ime konstrukcije nakon deklaracije razreda:
class MyClass: IMyInterface
) {
javni void MyMethod (int someVar)
}
Potrebna su sučelja za provedbu višestrukog nasljeđivanja. U programskom jeziku C ++moguće je klasično nasljeđivanje klasa; U C #, sučelja se koriste u te svrhe. Klasa može implementirati veliki broj sučelja, u kojem slučaju se prenose kroz zareze nakon deklaracije razreda:
class }
Po defaultu, sva svojstva i metode sučelja su javna, jer moraju definirati funkciju koja će biti implementirana u učionici. Nasljeđivanje u C # gotovo uvijek uključuje korištenje ovog praktičnog alata.