Razredi OOP. Objektno usmerjeno programiranje

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)

Izkušeni razvijalci se dobro zavedajo jezikov COBOL in C. Programi, ki so tam napisani, predstavljajo zaporedna navodila. Uporabili so postopke in funkcije, da bi program modularni. Ta paradigma je bila osredotočena na logiko, ne na podatke, ampak na metode njihovega združevanja.


Sodobni programski jeziki Delphi, Java, C # in drugi sledijo objektno usmerjenemu pristopu. Hkrati je podan pomen podatkov, ne le pisanje navodil za nalogo. Predmet je stvar ali ideja, ki jo želite simulirati. Lahko so karkoli, na primer zaposleni, bančni račun, avto, različne stvari v situaciji in tako naprej. Pojem objektno usmerjenega programiranja (OOP) je neločljivo povezan z naslednjimi merili:
  • Abstrakcija.
  • Inkapsulacija.
  • Dedovanje.
  • Polimorfizem.
  • Razmislite o vsakem od njih podrobneje.

    Abstrakcija

    To merilo vam omogoča, da se osredotočite na to, kaj je predmet sam, vendar ne na kajNa ta način se ti ukrepi izvajajo v programiranju. OOP predpostavlja, da je abstrakcija poznavanje predmeta največje količine podatkov. Pomaga pri ustvarjanju neodvisnih modulov, ki lahko med seboj delujejo na nek način.


    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.
    Vsakodnevni objekti, ki jih uporabljamo, imajo abstrakcije, ki se uporabljajo na različnih ravneh. Primer objektno usmerjenega programiranja je uporaba zaviranja v avtomobilu. Ta sistem je abstrakten: dovolj je, da voznik pritisne na pedal, tako da vozilo upočasni hitrost in se ustavi. Spreminjanje pospeševalnega sistema ne vpliva na zavorni sistem, saj so neodvisni. Vozniku ni treba razumeti notranjega delovanja zavor. Potrebno je le časovno pritisniti pedal. V tem primeru bodo zavore (disk in boben) delovale in avtomobil bo upočasnil hitrost.

    Inkapsulacija

    Ta koncept je tesno povezan z odvzemom. Encapsulacija je rešitev za reševanje problemov in od uporabnika ne zahteva, da v celoti razume njeno področje. Povezuje podatke in vedenje z eno samo enoto in preprečuje, da bi odjemalec ali uporabnik modula spoznaval notranjegapredstavitev, v kateri se izvaja vedenje abstrakcije.
    Podatki niso neposredno na voljo. Dostop do njih poteka prek določenih funkcij. Skrivanje notranjih elementov objekta ščiti njegovo celovitost, kar uporabnikom onemogoča prevajanje notranjih podatkov komponente v neveljavno ali nezdružljivo stanje.

    Dedovanje

    To je mehanizem za ponovno uporabo kode, ki lahko pomaga zmanjšati njegovo podvajanje. Ta koncept je močna značilnost objektno usmerjenih programskih jezikov. Pomaga pri organiziranju razredov v hierarhiji in jim omogoča, da posnemajo atribute in vedenje od komponent, ki so višje. Primer imitacije: papiga je ptica, ruski rubelj je vrsta valute. Vendar pa je izraz "banka bančni račun" napačna. Ta povezava je očitna, ko je v opisu problema treba opisati nekaj bistva. Z dedovanjem lahko določite celotno izvajanje OOP-a in njegovega obnašanja, nato pa za specializirane razrede prekličete ali spremenite te kazalnike za nekaj bolj specifičnega. Dedovanje ne deluje nazaj. Vir (tako imenovani oče) ne bo imel lastnosti izpeljave (otroškega razreda). Pomembno je omeniti, da pri poskusu simulacije rešitve ne smete dodajati več ravni dedovanja. Poskusiti morate določiti splošne atribute in vedenje v objektih, ki so modelirani. Nato na podlagi tega lahko nadaljujete s preoblikovanjem kode, ki definira ustrezen razred starševstva. Vanj je mogoče prenesti splošno izvajanje.

    Polimorfizem

    Ta koncept dopuščarazširiti računalniške sisteme z ustvarjanjem novih specializiranih objektov. Hkrati omogoča trenutni različici interakcijo z novim, ne da bi se posvetili njenim specifičnim lastnostim. Na primer, če imate nalogo pisanja sporočila na papirju, lahko uporabite pero, svinčnik, marker ali pero. Dovolj je, da se je orodje lahko prilegalo roki in je lahko pri trčenju s papirjem pustilo sled. Izkazalo se je, da določena dejanja osebe ustvarjajo opombo na listu in pri uporabi orodja to ni tako pomembno za prenos informacij. Drug primer polimorfizma v sistemu objektno usmerjenega programiranja je letalo in vesoljski shuttle, ki ga lahko imenujemo leteči objekti. Kako točno se gibljejo v prostoru? Jasno je, da je v njihovem delu velika razlika. Načini uresničevanja njihovih gibanj so različni. Vendar pa z vidika gledalca oba objekta letita.
    Dedovanje je eden od načinov za doseganje polimorfizma, ko je mogoče vedenje, definirano v podedovanem razredu, ponovno opredeliti s pisanjem uporabnika za izvajanje metode. To se imenuje redefiniranje (polimorfizem časa kompilacije). Obstaja tudi druga oblika polimorfizma, imenovana preobremenitev, pri kateri se dedovanje ne upošteva. Ime metode bo enako, vendar so argumenti v metodi različni.

    Značilnosti konceptov "razred" in "predmet"

    Za začetek dela z objektno usmerjenim programiranjem moramo ugotoviti, kaj je razred OOP in objekt. Pomembno je razumeti razliko med njimi. Razred je načrt zaustvarjanje predmeta. Določa lastnosti in vedenje. Izgleda kot tehnična risba hiše. Objekt je primerek razreda. Tu je razlika med njimi. Naslednji primer prikazuje, kako so razred TForml in Forml deklarirani v programskem jeziku Delphi:



    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:

    1. Podatkovna polja: shranjevanje statusa razreda z uporabo spremenljivk in struktur.
    2. Metode: podprogrami za manipuliranje določenih podatkov.
    3. 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

    Kakšne so prednosti razredov

    Prednosti organizacije programske opreme v razredih predmeti so razdeljeni v tri kategorije:
  • Hiter razvoj.
  • Enostavno vzdrževanje.
  • Ponovna uporaba kode in zasnove.
  • Razredi in PLO-ji na splošno prispevajo k hitremu razvoju, saj zmanjšujejo pomensko vrzel med kodo in uporabniki. To je vrednoštevilni programerji. S tem sistemom lahko analitiki komunicirajo z razvijalci in uporabniki, ki uporabljajo isti slovar, govorijo o računih, strankah, računih in tako naprej. Objektni razredi pogosto prispevajo k hitremu razvoju, saj ima večina objektno usmerjenih okolij zmogljiva orodja za odpravljanje napak in testiranje. Primerke razredov lahko preverite med izvajanjem, da zagotovite pravilno delovanje sistema. Poleg tega večina objektno usmerjenih okolij namesto dajanja jedra v jedro interpretira zmožnosti za odpravljanje napak. Posledično lahko razvijalci natančno analizirajo, kje je prišlo do napake v programu, in vidijo, katere metode, argumente in vrednosti so bile uporabljene.

    Sorodne publikacije