Izraza "predmet" in "razred" sta vsakomur znana. Vendar imajo računalniški oblikovalci svoj podtekst. To so osnovni koncepti v objektno usmerjenem programiranju. Razredi - vrsto podatkov določi nosilec projekta, za katerega je značilen način prenosa in shranjevanja, profil uporabe in niz dejanj, ki jih lahko izvedejo. Razlikujejo se po tem, kaj se lahko izvaja kot vmesnik.
Kaj je OOP (objektno usmerjeno programiranje)
Abstrakcija
Poskušamo se selektivno osredotočiti le na tiste stvari, ki so za nas pomembne (v življenju) ali na naš modul (v programiranju). Spreminjanje enega neodvisnega modula ne vpliva na druge. Edino kar morate vedeti je, kaj nam daje. Osebi, ki uporablja ta modul, ni treba skrbeti, kako je naloga rešena, kaj se dogaja v ozadju.
Inkapsulacija
Dedovanje
Polimorfizem
Značilnosti konceptov "razred" in "predmet"
tip
TForml = razred (TForm)
Buttonl: TButton;
postopek ButtonlClick (Pošiljatelj: TObject);
konec;
lahko
Formul: TForml;
Če želimo v našem programu simulirati, na primer, avto, potem moramo določiti njegove atribute: model, gorivo, znamko, barvo, njeno obnašanje, pa tudi ti metode: zagon motorja, zaviranje, pospeševanje itd. . Jasno je, da so ti kazalniki značilni ne samo za eno blagovno znamko ali model vozila.
V objektno usmerjenem pristopu poskušamo posplošiti naš objekt (stroj), pri čemer trdimo, da bo tisti, ki ga bomo simulirali v našem programu, imeti nekatere lastnosti in metode. Obstajajo lahko tudi drugi kazalniki in značilnosti vozila, vendar smo dovolj navedeni, da razumemo, kako razred deluje v PLO.
Ko uporabimo te podatke, ustvarimo avto s posebnimi parametri. Pri programiranju istega objekta (stroja) lahko uporabimo različne lastnosti, kot je prikazano v spodnji tabeli:
Objekt 1 | Predmet 2 |
model: Vaz 2107 | model: Vaz 2109 |
gorivo: bencin | gorivo: dizel |
barva: rdeča | barva: zelena |
način zagona motorja: zagon () | način zagona motorja: zagon() |
metoda zaviranja: zlom () | metoda zaviranja: prekinitev () |
Metoda pospeševanja: pospešek () | Metoda pospeševanja: pospešek () |
Tako objektno usmerjeno programiranje omogoča preprosto simulacijo obnašanja kompleksnega sistema realnega sveta. Iz OOP-a se podatki in funkcije (atributi in metode) združijo v objekt. To preprečuje potrebo po splošnih ali globalnih podatkih OOP. Ta pristop je glavna razlika med objektno usmerjenimi in proceduralnimi pristopi.
Razredi OOP so sestavljeni iz elementov različnih vrst:
- Podatkovna polja: shranjevanje statusa razreda z uporabo spremenljivk in struktur.
- Metode: podprogrami za manipuliranje določenih podatkov.
- Nekateri jeziki omogočajo, da je tretja vrsta lastnine. To je nekaj med prvima dvema.
Metode
Obnašanje razreda ali njegovih primerov se določi z metodami. To je podprogram z možnostjo upravljanja objektov. Te operacije lahko spremenijo status objekta ali preprosto zagotovijo načine dostopa do njega.
& lt; skript type = "text /javascript" & gt;
lahko blockSettings = {blockId: "R-A-70350-45", renderTo: "yandex_rtb_R-A-70350-45", async:! 0};
if (document.cookie.indexOf ("abmatch ="))> = 0) blockSettings.statId = 70350;
Funkcija (a, b, c, d, e) {a [c] = a [c] || [], a [c] .push (funkcija () {Ya.Context.AdvManager.render (blockSettings}), 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 ");
Obstaja veliko metod. Njihova podpora je odvisna od jezika. Nekateri so ustvarjeni in klicani s kodo programerja, drugi (posebni, kot so konstruktorji,destruktorji in pretvorniki) se ustvarijo in kličejo iz generirane kode prevajalnika. Jezik lahko programerju omogoči, da definira te posebne metode.
Vmesnik
To je definicija skupine abstraktnih dejanj. Ugotovi, kakšno vedenje mora prikazati določen predmet, ne da bi določil, kako ga je treba izvajati.
Objekt ima lahko več vlog, uporabniki pa ga lahko uporabljajo z različnih vidikov. Na primer, predmet tipa "človek" ima lahko vlogo:
- Vojak (z vedenjem "streljaj v sovražnika").
- Človek (z vedenjem "ljubi svojo ženo").
- Davčni zavezanec (z vedenjem "plačati davke") in tako naprej.
Vendar pa vsak predmet svoje vedenje uresničuje na svoj način: Miša pravočasno plača davke, Andrej z zamudo in Peter tega sploh ne stori. Enako lahko rečemo za vsak predmet in druge vloge.
Postavlja se vprašanje, zakaj osnovni razred vseh objektov ni vmesnik. Razlog za to je, da bo v tem primeru vsak razred moral izvajati majhno, a zelo pomembno skupino metod, ki bodo potrebovale nepotrebno količino časa. Izkazalo se je, da vsi razredi ne zahtevajo posebne izvedbe - privzeta privzeta vrednost je v večini primerov dovolj. Nobenih metod ni treba prezreti, če pa to zahtevajo razmere, je mogoče zamenjati.
Dober primer so gumbi na sprednji strani televizorja. Lahko rečemo, da so vmesnik med uporabnikom in ožičenjem na drugi strani ohišja naprave.Oseba klikne gumb za vklop in izklopi napravo. V tem primeru je določena televizija primer, vsaka metoda je predstavljena z gumbom in vsi skupaj tvorijo vmesnik. V najpogostejši obliki je specifikacija skupine sorodnih metod brez njihovega izvajanja.
Designer
To merilo je odgovorno za pripravo objekta za ukrepanje, na primer za določitev začetnih vrednosti za vse podatke in njihove elemente. Čeprav ima posebno vlogo, je konstruktor le še ena funkcija, ki vam omogoča, da posredujete informacije skozi seznam argumentov. Z njimi jih lahko inicializirate. Ime oblikovalca razreda je isto.
Naslednji primer pojasnjuje koncept konstruktorja razreda v C ++ (skupni programski jezik):
# vključi
z uporabo prostora imen std;
razred Line {
public:
void setLength (double len);
dvojno getLength (void);
vrstica (); //Oblikovalska izjava
zasebna: dvojna dolžina;
};
//Opredelitev funkcij, vključno z konstruktorjem
Line :: Line (void) {
cout "Object created" endl;
}
void Line :: setLength (double len) {
dolžina = len;
}
dvojna Line :: getLength (void) {
povratna dolžina;
}
//Telo programa
int main () {
Vrstica;
//Dolžina linije
line.setLength (6.0);
cout "Dolžina vrstice:" line.getLength () endl;
vrnitev 0;
}
Ko se zgornja koda prevede in izvede, dobi naslednji rezultat:
Object created
Dolžina vrstice: 6
Destructor
To je posebna funkcija razreda, ki uničuje objekt kotkonča se samo področje njenega delovanja. Ko je predmet zunaj vidnega polja, se samodejno pokliče destruktor s prevajalnikom.
Sintaksa destruktorja je enaka kot za konstruktorja, vendar se ime razreda uporablja v tem primeru z oznako "~" kot predpone.
Naslednji primer v C ++ pojasnjuje pojem destruktorja: # vključi
z uporabo prostora imen std;
razred Line {
public: void setLength (double len);
dvojno getLength (void);
vrstica (); //Oblikovalske opombe
~ vrstica (); //Obvestilo o uničevalcu
zasebno: dvojna dolžina;
}
//Definicija funkcij, vključno z konstruktorjem
Line :: Line (void) {
cout "Object created" endl;
}
Line :: ~ Line (void) {
cout "Objekt je oddaljen" endl;
}
void Line :: setLength (double len) {
dolžina = len;
}
double Line :: getLength (void) {
povratna dolžina;
}
//Telo programa
int main () {
Linijska črta;
//Dolžina linije
line.setLength (6.0);
cout "Dolžina vrstice:" line.getLength () endl;
vrnitev 0;
}
Ko se zgornja koda zbere in izvede, dobi naslednji rezultat:
Object created
Dolžina vrstice:
Predmet je oddaljen