Klase OOP-a. Objektno orijentirano programiranje

Izrazi "predmet" i "klasa" poznati su svakoj osobi. Međutim, za računalne dizajnere oni imaju svoj vlastiti podtekst. To su osnovni pojmovi u objektno orijentiranom programiranju. Klase - tip podataka određuje programer, koji je karakteriziran načinom njihovog prijenosa i pohrane, profilom korištenja i skupom akcija koje mogu obavljati. Razlikuju se po tome što se može implementirati kao sučelje.

Što je OOP (objektno orijentirano programiranje)

Iskusni programeri dobro poznaju COBOL i C jezike.Programi koji su tamo napisani predstavljaju niz postupnih uputa. Koristili su procedure i funkcije kako bi program modularni. Ova paradigma bila je usredotočena na logiku, ne na podatke, već na metode njihove povezanosti.


Suvremeni programski jezici Delphi, Java, C # i drugi slijede objektno orijentirani pristup. Istovremeno se daje važnost podataka, a ne samo pisanje uputa za zadatak. Objekt je stvar ili ideja koju želite simulirati. Oni mogu biti bilo što, na primjer, zaposlenik, bankovni račun, automobil, razne stvari situacije i tako dalje. Pojam objektno orijentiranog programiranja (OOP) neraskidivo je povezan sa sljedećim kriterijima:
  • Apstrakcija.
  • Inkapsulacija.
  • Nasljeđivanje.
  • Polimorfizam.
  • Razmotrite svaki od njih detaljnije.

    Apstrakcija

    Ovaj kriterij omogućuje vam da se usredotočite na ono što sam objekt čini, ali ne na štoNa način, ove akcije se ostvaruju u programiranju. OOP pretpostavlja da je apstrakcija znanje o objektu maksimalne količine podataka. Pomaže u stvaranju neovisnih modula koji mogu međusobno djelovati na neki način.


    Pokušavamo se selektivno usredotočiti samo na one stvari koje su nama važne (u životu) ili na naš modul (u programiranju). Promjena jednog nezavisnog modula ne utječe na druge. Jedino što trebate znati je ono što nam on daje. Osoba koja koristi ovaj modul ne mora brinuti o tome kako je zadatak riješen, što se događa u pozadini.
    Svakodnevni objekti koje koristimo imaju apstrakcije koje se primjenjuju na različitim razinama. Jedan primjer objektno-orijentiranog programiranja je uporaba kočenja u automobilu. Ovaj sustav je apstraktan: dovoljno je vozaču da pritisne pedalu tako da vozilo usporava brzinu i zaustavlja se. Promjena sustava ubrzanja ne utječe na kočni sustav jer su neovisni. Vozač ne mora razumjeti unutarnji rad kočnica. Potrebno je samo pritisnuti papučicu na vrijeme. U ovom slučaju, kočnice (disk i bubanj) će raditi, a automobil će usporiti brzinu.

    Inkapsulacija

    Ovaj je pojam usko povezan s apstrakcijom. Inkapsulacija je rješenje za rješavanje problema i ne zahtijeva od korisnika da u potpunosti razumije svoje predmetno područje. Povezuje podatke i ponašanje s jednom jedinicom i sprječava klijenta ili korisnika modula da uči o internompredstavljanje u kojem se provodi ponašanje apstrakcije.
    Podaci nisu dostupni izravno. Pristup njima se obavlja preko određenih funkcija. Sakrivanje unutarnjih elemenata objekta štiti njegov integritet, sprječavajući korisnike da prevedu podatke internih komponenti u nevažeće ili nekompatibilno stanje.

    Nasljeđivanje

    Ovo je mehanizam za ponovno korištenje koda koji može pomoći smanjiti njegovo dupliciranje. Ovaj koncept je moćna značajka objektno-orijentiranih programskih jezika. Pomaže organizirati klase u hijerarhiji, dopuštajući im da oponašaju atribute i ponašanje komponenti koje su veće. Primjer imitacije: papiga je ptica, ruska rublja je vrsta valute. Međutim, izraz "banka je bankovni račun" nije ispravan. Ta je veza očita kada je potrebno opisati neku bit u ovoj tvrdnji problema. Nasljeđivanjem možete odrediti cjelokupnu provedbu OOP-a i njegovo ponašanje, a zatim i specijalizirane klase za otkazivanje ili izmjenu tih pokazatelja za nešto specifičnije. Nasljeđivanje ne radi unatrag. Izvor (tzv. Otac) neće imati svojstva izvedenice (klase podređene). Važno je napomenuti da prilikom pokušaja simuliranja rješenja ne biste trebali dodavati više razina nasljeđivanja. Morate pokušati odrediti opće atribute i ponašanje u objektima koji su modelirani. Zatim na temelju toga možete nastaviti s refaktoriranjem koda koji definira odgovarajući razred roditeljstva. U njega se može premjestiti opća implementacija.

    Polimorfizam

    Ovaj koncept dopuštaproširiti računalne sustave stvaranjem novih specijaliziranih objekata. Istovremeno, trenutna verzija omogućuje interakciju s novom, bez obraćanja pozornosti na njezina specifična svojstva. Na primjer, ako imate zadatak pisanja poruke na komad papira, možete koristiti olovku, olovku, marker ili olovku. Dovoljno je da se alat može smjestiti u ruku i da je mogao ostaviti trag prilikom sudara s papirom. Ispostavlja se da određene radnje osobe prave bilješke na listu, a dok koristite alat, to nije toliko važno za prijenos informacija. Drugi primjer polimorfizma u sustavu objektno-orijentiranog programiranja je zrakoplov i svemirski shuttle koji se može nazvati letećim objektima. Kako se točno kreću u prostoru? Jasno je da u njihovom radu postoji velika razlika. Naime, načini ostvarivanja njihovih kretanja su različiti. Međutim, s gledišta gledatelja, oba objekta lete.
    Nasljeđivanje je jedan od načina za postizanje polimorfizma, kada se ponašanje definirano u naslijeđenoj klasi može redefinirati pisanjem korisnika za implementaciju metode. To se naziva redefiniranje (polimorfizam vremena kompilacije). Postoji još jedan oblik polimorfizma, nazvan preopterećenje, u kojem se ne uzima u obzir nasljeđivanje. Naziv metode bit će isti, ali argumenti u metodi su različiti.

    Značajke pojmova "klasa" i "objekt"

    Da bismo počeli raditi s objektno orijentiranim programiranjem, moramo shvatiti što je klasa OOP-a i objekta. Važno je razumjeti razliku između njih. Klasa je plan zastvaranje objekta. On definira atribute i ponašanje. Izgleda kao inženjerski crtež kuće. Objekt je instanca klase. Ovo je razlika između njih. Sljedeći primjer pokazuje kako je izjavio klasa "TForml" i "Forml" programski jezik Delphi:



    tip
    TForml = klasa (TForm)
    Buttonl: TButton;
    postupak ButtonlClick (pošiljatelj: TObject);
    kraj;
    može
    Formal: TForml;

    Ako želimo da se model u našem programu, kao što je auto, ona mora definirati svoje atribute: model, gorivo, brand, boju, njegovo ponašanje i tzv, pokretanje motora, kočenja, ubrzanja, itd , Jasno je da su ti pokazatelji karakteristični ne samo za jednu marku ili model vozila.

    U objektno orijentiranom pristupu nastojimo generalizirati naš objekt (auto), tvrdeći da ćemo model u našem programu će imati broj atributa i metoda. Postoji svibanj biti drugih parametara i karakteristike vozila, ali mi smo navedeni dovoljno da shvate kako je klasa u PLO.

    Kada koristimo ove podatke, stvaramo automobil s određenim parametrima. Kod programiranja isti predmet (iz auta), možemo uzeti različite karakteristike, kao što je prikazano u tablici u nastavku:

    1 objekt 2 Predmet
    model: VAZ 2107 Model: VAZ 2109
    gorivo: benzin gorivo: dizel
    boja: crvena boja: zelena
    postupak pokretanja motora: Početak () postupak za pokretanje motora: Početak()
    metoda kočenja: prekid () metoda kočenja: prekid ()
    Metoda ubrzanja: ubrzanje () Metoda ubrzanja: ubrzanje ()
    Tako objektno orijentirano programiranje olakšava simulaciju ponašanja složenog sustava stvarnog svijeta. Iz OOP-a podaci i funkcije (atributi i metode) se kombiniraju u objektu. Time se sprječava potreba za općim ili globalnim podacima OOP-a. Ovaj pristup je glavna razlika između objektno orijentiranih i proceduralnih pristupa.

    Razredi OOP-a sastoje se od elemenata različitih tipova:

    1. Polja podataka: pohraniti status klase pomoću varijabli i struktura.
    2. Metode: potprogrami za manipuliranje navedenim podacima.
    3. Neki jezici dopuštaju da treća vrsta imovine bude. To je nešto između prva dva.

    Metode

    Ponašanje klase ili njezinih primjera određuje se metodama. To je potprogram s mogućnošću upravljanja objektima. Ove operacije mogu promijeniti status objekta ili jednostavno omogućiti načine pristupa.


    & lt; script type = "text /javascript" & gt;
    može 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)} (ovaj, ovaj.dokument," yandexContextAsyncCallbacks ");

    Postoje mnoge metode. Njihova podrška ovisi o jeziku. Neki su kreirani i pozvani pomoću koda programera, drugi (posebni, kao što su konstruktori,destruktori i operateri pretvorbe) stvaraju i pozivaju generirani kod kompilatora. Jezik može omogućiti programeru da definira ove posebne metode.

    Sučelje

    Ovo je definicija skupine apstraktnih djelovanja. On otkriva kakvo bi ponašanje trebalo prikazati određeni objekt bez navođenja načina na koji ga treba primijeniti.

    Objekt može imati više uloga, a korisnici ga mogu koristiti s različitih gledišta. Na primjer, objekt tipa "ljudski" može imati ulogu:

    • Vojnik (s ponašanjem "pucaj u neprijatelja").
    • Čovjek (s ponašanjem "voli svoju ženu").
    • Porezni obveznik (s ponašanjem "plaća poreze") i tako dalje.
    Međutim, svaki objekt svoje ponašanje shvaća na svoj način: Miša plaća poreze na vrijeme, Andrej je već zakasnio, a Petar to uopće ne čini. Isto se može reći za svaki objekt i druge uloge.

    Postavlja se pitanje zašto osnovna klasa svih objekata nije sučelje. Razlog je u tome što će u ovom slučaju svaka klasa morati provesti malu, ali vrlo važnu skupinu metoda koje će oduzeti nepotrebnu količinu vremena. Ispada da nisu sve klase zahtijevaju određenu provedbu - zadano po defaultu u većini slučajeva je dovoljno. Nema potrebe ignorirati bilo koje metode, ali ako situacija to zahtijeva, moguće je provesti njihovu zamjenu.

    Dobar primjer su gumbi na prednjoj strani televizora. Može se reći da su sučelje između korisnika i ožičenja s druge strane kućišta uređaja.Osoba klikne gumb za uključivanje i isključivanje kako bi uključila i isključila uređaj. U ovom primjeru određeni TV je instanca, svaka metoda predstavljena je gumbom, a svi zajedno tvore sučelje. U svom najčešćem obliku, to je specifikacija skupine srodnih metoda bez njihove primjene.

    Dizajner

    Ovaj je kriterij odgovoran za pripremu objekta za djelovanje, na primjer, za postavljanje početnih vrijednosti za sve njegove podatke i njihove elemente. Iako igra posebnu ulogu, konstruktor je samo još jedna funkcija koja vam omogućuje prosljeđivanje informacija kroz popis argumenata. Možete ih koristiti za inicijalizaciju. Ime dizajnera klasa je isto.

    Sljedeći primjer objašnjava koncept konstruktora klase u C ++ (zajednički programski jezik):

    # uključiti
    koristeći prostor naziva std;

    klasa Linija {
    public:
    void setLength (double len);
    double getLength (void);
    linija (); //Izjava dizajnera
    privatna: dvostruka duljina;
    };

    //Definicija funkcija, uključujući konstruktora

    Line :: Line (void) {
    cout "Object created" endl;
    }

    void Line :: setLength (double len) {
    dužina = len;
    }

    double Line :: getLength (void) {
    povratna dužina;
    }

    //Tijelo programa

    int main () {
    Linija crte;

    //Duljina linije

    line.setLength (6.0);
    cout "Duljina retka:" line.getLength () endl;
    povratak 0;
    }

    Kada se gornji kod kompilira i izvrši, daje sljedeći rezultat:

    Objekt stvoren

    Duljina crte: 6

    Destructor

    Ovo je posebna funkcija klase koja uništava objekt kaozavršava se samo područje djelovanja. Kada je objekt izvan vidokruga, automatski se poziva destruktor.

    Sintaksa za destruktor je ista kao i za konstruktora, ali se ime klase u ovom slučaju koristi s oznakom "~" kao prefiksom.

    Sljedeći primjer u C ++ objašnjava pojam destruktora:

    # uključiti
    koristeći prostor imena std;

    klasa Linija {
    public: void setLength (double len);
    double getLength (void);
    Red (); //Dizajnerske napomene
    ~ Line (); //Najava razarača
    privatna: dvostruka dužina;
    }

    //Definicija funkcija, uključujući konstruktora

    Line :: Line (void) {
    cout "Object created" endl;
    }

    Linija :: ~ Red (void) {
    cout "Objekt je udaljen" endl;
    }

    void Line :: setLength (double len) {
    dužina = len;
    }

    double Line :: getLength (void) {
    povratna dužina;
    }

    //Tijelo programa

    int main () {
    Linija crte;

    //Duljina linije

    line.setLength (6.0);
    cout "Duljina retka:" line.getLength () endl;
    povratak 0;


    }

    Kada se gornji kod kompilira i izvrši, daje sljedeći rezultat:

    Objekt stvoren]

    Dužina crte: 6

    Objekt je udaljen

    Koje su prednosti klasa

    Prednosti organizacije softvera u klasama objekti su podijeljeni u tri kategorije:
  • Brzi razvoj.
  • Jednostavno održavanje.
  • Ponovna upotreba koda i dizajna.
  • Klase i PLO-ovi općenito doprinose brzom razvoju, jer smanjuju semantički jaz između koda i korisnika. Vrijedilo jeocijenili mnogi programeri. S ovim sustavom, analitičari mogu komunicirati s programerima i korisnicima koji koriste isti rječnik, govoreći o računima, klijentima, računima i tako dalje. Objektne klase često pridonose brzom razvoju, budući da većina objektno orijentiranih okruženja ima moćne alate za otklanjanje pogrešaka i testiranje. Primjeri klasa mogu se provjeriti tijekom izvršavanja kako bi se osiguralo da sustav radi ispravno. Osim toga, umjesto dobivanja kernel dumpa, većina objektno-orijentiranih okruženja interpretira mogućnosti otklanjanja pogrešaka. Kao rezultat, programeri mogu točno analizirati gdje je došlo do pogreške u programu i vidjeti koje su metode, argumenti i vrijednosti korišteni.

    Povezane publikacije