Triedy OOP. Objektovo orientované programovanie

Pojmy "objekt" a "trieda" sú každému známe. Avšak pre návrhárov počítačov majú svoj vlastný podtext. Toto sú základné pojmy v objektovo-orientovanom programovaní. Triedy - dátový typ vývojár, vyznačujúci sa prostredníctvom zariadenia na prenos a ukladanie, profil využitie a sadu akcií, ktoré môžu byť vykonané nimi. Odlišujú sa v tom, čo môže byť implementované ako rozhranie.

Čo je OOP (objektovo orientovaného programovania)

Skúsení vývojári sú si dobre vedomí jazyka COBOL a C. písaný na ne bol priebeh programu krok za krokom. Použili postupy a funkcie na to, aby bol program modulárny. Táto paradigma bola zameraná na logiku, nie na údaje, ale na metódy ich spojenia.


Moderné programovacie jazyky Delphi, Java, C # a ďalšie sa riadia objektovo orientovaným prístupom. Súčasne je dôležitá dáta, nielen písanie pokynov pre úlohu. Objekt je vec alebo myšlienka, ktorú chcete simulovať. Môžu to byť čokoľvek, napríklad zamestnanec, bankový účet, auto, rôzne veci a tak ďalej. Pojem objektovo orientovaného programovania (OOP) je integrálne spojená s nasledujúcimi kritériami:
  • abstrakcie.
  • Zapuzdrenie.
  • dedičstvo.
  • Polymorfizmus.
  • Zvážte každú z nich podrobnejšie.

    Abstrakcia

    Toto kritérium umožňuje zamerať sa na to, čo objekt sám robí, ale nie na čomTýmto spôsobom sa tieto činnosti realizujú v programovaní. OOP predpokladá, že abstrakcia je znalosť predmetu maximálneho množstva údajov. Pomáha pri vytváraní nezávislých modulov, ktoré môžu vzájomne ovplyvňovať.


    Snažíme sa selektívne sústrediť len na tie veci, ktoré sú pre nás dôležité (v živote) alebo pre náš modul (v programovaní). Zmena jedného nezávislého modulu nemá vplyv na ostatné. Jediná vec, ktorú potrebujete vedieť, je to, čo nám dáva. Osoba, ktorá používa tento modul, sa nemusí starať o to, ako sa úloha rieši, čo sa deje na pozadí.
    Každodenné objekty, ktoré používame, majú abstrakcie, ktoré sa používajú na rôznych úrovniach. Jedným príkladom objektovo-orientovaného programovania je použitie brzdenia v aute. Tento systém je abstraktný: stačí, aby motorista stlačil pedál, aby vozidlo spomalilo rýchlosť a zastavilo sa. Zmeny v systéme zrýchlenia neovplyvňujú brzdový systém, pretože sú nezávislé. Vodič nemusí pochopiť vnútornú prácu bŕzd. Je potrebné iba stlačiť pedál včas. V takomto prípade bude fungovať brzda (ako disk, tak aj bubon) a auto spomalí rýchlosť.

    Zapuzdrenie

    Tento koncept úzko súvisí s abstrakciou. Zapuzdrenie je riešením riešenia problémov a nevyžaduje, aby používateľ úplne pochopil jeho oblasť. Spája údaje a správanie s jedinou jednotkou a zabraňuje tomu, aby sa klient alebo používateľ modulu dozvedeli o internej jednotkereprezentácia, v ktorej sa implementuje abstrakčné správanie.
    Údaje nie sú k dispozícii priamo. Prístup k nim sa vykonáva prostredníctvom určitých funkcií. Skrytie Vnútri zariadenia chráni svoju integritu, a to umožňuje užívateľom prekladať vnútorné komponenty dát je neplatné alebo nekonzistentné stav.

    Dedičnosť

    Jedná sa o mechanizmus opätovného použitia kódu, ktorý môže pomôcť znížiť jeho duplicitu. Tento koncept je silnou funkciou objektovo orientovaných programovacích jazykov. Pomáha organizovať triedy v hierarchii, čo im umožňuje napodobňovať atribúty a správanie zo zložiek, ktoré sú vyššie. Príklad imitácie: papagáj je vták, ruský rubeľ je druhom meny. Avšak fráza "banka je bankový účet" je nesprávna. Toto spojenie je zrejmé, keď je potrebné opísať určitú podstatu v tomto vyhlásení problému. S dedičnosť, môže určiť celkovú implementáciu OOP a jej správania a špecializovaných triedach kedykoľvek zrušiť alebo zmeniť tieto čísla na niečo konkrétnejšie. Dedičstvo nefunguje dozadu. Zdroj (takzvaný otec) nebude mať vlastnosti derivátu (trieda detí). Je dôležité poznamenať, že pri snahe simulovať riešenie by ste nemali pridávať viac úrovní dedičnosti. Musíte sa pokúsiť určiť všeobecné atribúty a správanie objektov, ktoré sú modelované. Na základe toho môžete pokračovať v refaktorovaní kódu, ktorý definuje príslušnú triedu rodičovstva. Všeobecnú implementáciu je možné doň presunúť.

    Polymorfizmus

    Tento koncept umožňujerozšíriť počítačové systémy vytvorením nových špecializovaných objektov. Súčasne umožňuje súčasnej verzii komunikovať s novou, bez toho, aby venovala pozornosť jej špecifickým vlastnostiam. Napríklad, ak máte úlohu písať správu na papier, môžete použiť pero, ceruzku, značku alebo pero. Stačí, aby sa nástroj mohol zapadnúť do ruky a bol schopný zanechať stopu pri zrážke s papierom. Ukazuje sa, že niektoré činy človeka vytvárajú poznámku na hárku a pri používaní nástroja to nie je dôležité pre prenos informácií. Ďalším príkladom polymorfizmu v systéme objektovo orientovaného programovania je lietadlová a vesmírna kyvadlová doprava, ktorá sa dá nazvať lietajúcimi sa objektmi. Ako sa presne pohybujú v priestore? Je zrejmé, že v ich práci je veľký rozdiel. To znamená, že spôsoby realizácie ich pohybov sú odlišné. Avšak z hľadiska diváka obiehajú oba predmety.
    Dedičstvo je jedným zo spôsobov, ako dosiahnuť polymorfizmus, keď správanie definované v dedičnej triede môže byť predefinované napísaním používateľa na implementáciu metódy. Toto sa nazýva predefinovanie (polymorfizmus času kompilácie). Existuje aj iná forma polymorfizmu, nazývaná preťaženie, v ktorom dedičstvo nie je zohľadnené. Názov metódy bude rovnaký, ale argumenty v metóde sú rôzne.

    Vlastnosti pojmov "trieda" a "objekt"

    Aby sme začali pracovať s objektovo orientovaným programovaním, musíme zistiť, čo je trieda OOP a objekt. Je dôležité pochopiť rozdiel medzi nimi. Trieda je plán prevytvorenie objektu. Definuje atribúty a správanie. Vyzerá to ako inžinierske kreslenie domu. Objekt je inštanciou triedy. Tu je rozdiel medzi nimi. Nasledujúci príklad ukazuje, ako deklarovaná trieda "TForml" a "Forml" programovací jazyk Delphi:



    typu
    TForml = trieda (TForm)
    Tlačidlo: TButton;
    postup ButtonlClick (odosielateľ: TObject);
    konca;
    môže byť
    forma: TForml;

    Ak chceme modelovať v našom programe, ako je napríklad auto, je nutné definovať jeho atribúty: model, palivo, značku, farbu, jeho správanie a tzv, štartovanie motora, brzdenie, zrýchlenie, atď. , Je jasné, že tieto ukazovatele sú charakteristické nielen pre jednu značku alebo model vozidla.

    V objektovo orientovanom prístupe snažíme zovšeobecniť náš objekt (auto) s tým, že budeme modelovať v našom programe bude mať niekoľko atribútov a metód. Môžu existovať aj iné ukazovatele a charakteristiky vozidla, ale dostatočne sme na to, aby sme pochopili, ako trieda funguje v PLO.

    Keď použijeme tieto údaje, vytvoríme auto s konkrétnymi parametrami. Pri programovaní toho istého objektu (zariadenia) môžeme mať rôzne charakteristiky, ako je uvedené v nasledujúcej tabuľke:

    Objekt Object
    1 2
    model: Vaz 2107 model: Vaz 2109
    palivo: benzín palivo: nafta
    farba: červená farba: zelená
    Spustenie motora: Štart () Spustenie motora: Štart()
    brzdná metóda: prestávka () brzdná metóda: prestávka ()
    spôsob zrýchlenie: zrýchlenie () spôsob podľa zrýchlenie: zrýchlenie ()

    Objektovo orientované programovanie umožňuje jednoduché simulovanie správania komplexného reálneho systému. Z OOP dáta a funkcie (atribúty a metódy) sú kombinované v objekte. Toto zabraňuje potrebe akýchkoľvek všeobecných alebo globálnych údajov OOP. Tento prístup je hlavným rozdielom medzi objektovo orientovanými a procedurálnymi prístupmi.

    Triedy OOP pozostávajú z prvkov rôznych typov:

    1. Dátové polia: ukladanie stavu triedy pomocou premenných a štruktúr.
    2. Metódy: podprogramy na manipuláciu so špecifikovanými údajmi.
    3. Niektoré jazyky umožňujú, aby bol tretí typ vlastníctva. To je niečo medzi prvými dvoma.

    Metódy

    Správanie triedy alebo jej príkladov sa určuje metódami. Toto je podprogram s možnosťou ovládania objektov. Tieto operácie môžu zmeniť stav objektu alebo jednoducho poskytnúť spôsoby prístupu k nemu.


    Toto je definícia skupiny abstraktných akcií. Zistí, aké správanie by malo zobrazovať konkrétny objekt bez toho, aby určil, ako by sa mal implementovať.

    Objekt môže mať viacero rolí a používatelia ho môžu používať z rôznych hľadísk. Napríklad objekt typu "človek" môže mať určitú úlohu:

    • Vojak (s chovaním "strieľať v nepriateľovi").
    • Muž (s chovaním "milovať svoju ženu").
    • Daňovník (s chovaním "platenia daní") a tak ďalej.

    Avšak každý objekt si uvedomuje svoje správanie svojou vlastnou cestou: Míša platí dane včas, Andrew s omeškaním, a Peter to vôbec neurobí. To isté možno povedať o každom objekte a iných rolach.

    Vzniká otázka, prečo základná trieda všetkých objektov nie je rozhraním. Dôvodom je, že v tomto prípade každá trieda bude musieť implementovať malú, ale veľmi dôležitú skupinu metód, ktorá bude trvať zbytočne dlhý čas. Ukazuje sa, že nie všetky triedy vyžadujú konkrétnu implementáciu - vo väčšine prípadov je vo väčšine prípadov štandardne predvolená hodnota. Nie je potrebné ignorovať žiadne metódy, ale ak si to situácia vyžaduje, je možné vykonať ich výmenu.

    Dobrým príkladom sú tlačidlá na prednej strane televízora. Dá sa povedať, že ide o rozhranie medzi používateľom a zapojením na druhej strane puzdra zariadenia.Človek klikne na tlačidlo napájania, čím zapne a vypne spotrebič. V tomto príklade je konkrétny televízor inštancia, každá metóda reprezentovaná tlačidlom a všetky spolu tvoria rozhranie. Vo svojej najbežnejšej forme je špecifikáciou skupiny súvisiacich metód bez ich implementácie.

    Design

    Toto kritérium je zodpovedná za prípravu objektu k akcii, napríklad nastavenie počiatočnej hodnoty pre všetky dáta a jeho prvky. Aj keď hrá zvláštnu úlohu, projektant - je to len ďalšie funkcie, s ktorou informácie možno prejsť zoznamu argumentov. Môžete ich použiť na ich inicializáciu. Názov mena triedy je rovnaký.

    Nasledujúci príklad vysvetľuje koncepciu dizajnu triedy C ++ (populárny programovací jazyk):

    #include 
    , za použitia namespace std;

    class linky {
    public:
    void setlength (double ľan);
    double getLength (void);
    riadok (); //vyhlásenie o dizajne
    súkromné: double length;
    };

    //definície funkcií vrátane dizajnéra

    Linka :: linka (void) {
    cout "objekt vytvoril" Endl;
    }

    void linka :: setlength (dvojitá ľan) {
    , dĺžka = ľan;
    }
    ,
    , dvojitá čiara :: getLength (void) {
    dĺžky návrat;
    }

    //Telo programu

    int main () {
    , združené;

    //Dĺžka linky

    line.setLength (6,0);
    cout "Dĺžka riadku:" line.getLength () endl;
    návrat 0;
    }

    Ak je uvedený vyššie uvedený kód je zostavený a vykonaný, že má nasledujúce výsledok:

    zariadenia založená

    Dĺžka linky: 6

    destructor

    Táto špeciálna funkcia trieda, ktorá zničí objekt akoiba oblasť jeho konania končí. Deštruktor kompilátora sa automaticky zavolá, keď je objekt mimo dohľadu.

    Syntax destruktor je rovnaký ako pre konštruktéra, ale názov triedy používané v tomto prípade pre neho podpísať vlnovky "~" ako predponu.

    V nasledujúcom príklade je jazyk C ++ destructor vysvetľuje pojem:

    #include
    pomocou namespace std;

    trieda Line {
    public: void setLength (double len);
    double getLength (void);
    riadok (); //Anotácie dizajnérov
    ~ Riadok (); //Destroyer Oznámenie
    súkromné: double length;
    }

    //definície funkcií, vrátane dizajnér

    linka :: Linka (void) {
    cout "Objekt vytvoril" Endl;
    }

    Linka :: ~ Line (void) {
    cout "Objekt je vzdialený" endl;
    }

    void Line :: setLength (double len) {
    dĺžka = len;
    }

    dvojitý riadok :: getLength (void) {
    návratová dĺžka;
    }

    //Body programu

    int main () {
    Line line;

    //Dĺžka riadku

    line.setLength (6,0);
    cout "Dĺžka riadku:" line.getLength () endl;
    návrat 0;

    }

    , ak je podávaný vyššie uvedený kód je zostavený a vykonaný, dá nasledujúce výsledok:

    zariadenia založená [193 ]

    Dĺžka linky: 6

    vzdialený predmet

    , aké sú triedy výhody

    výhody usporiadanie softvér v triedach o ' objekty sú rozdelené do troch kategórií:
  • Rýchly vývoj.
  • Jednoduchá údržba.
  • Opätovné použitie kódu a dizajnu.
  • Triedy a PLO vo všeobecnosti prispievajú k rýchlemu vývoju, pretože znižujú sémantickú medzeru medzi kódom a používateľmi. Stojí to za tohodnotené mnohými programátormi. Pomocou tohto systému môžu analytici komunikovať s vývojármi aj používateľmi, ktorí používajú ten istý slovník, hovoria o účtoch, klientoch, účtoch atď. Triedy objektov často prispievajú k rýchlemu vývoju, pretože väčšina objektovo orientovaných prostredí má výkonné ladiace a testovacie nástroje. Inštancie triedy je možné skontrolovať počas vykonávania, aby sa zabezpečilo správne fungovanie systému. Navyše namiesto získavania výpisu jadra väčšina objektovo orientovaných prostredí interpretuje možnosti ladenia. V dôsledku toho môžu vývojári presne analyzovať, kde sa vyskytla chyba v programe, a zistiť, aké metódy, argumenty a hodnoty boli použité.

    Súvisiace publikácie