Jazyky orientované na objekt. Základy objektovo-orientovaného programovania

Objektovo orientované programovanie je založené na prezentácii programu vo forme súboru objektov. Každý objekt patrí do triedy, ktorá naopak zaujme miesto v zdedenej hierarchii. Použitie OOP minimalizuje redundantné dáta, čo zlepšuje ovládateľnosť a pochopenie programu.

Čo je OOP

Vzniklo v dôsledku vývoja procedurálneho plánovania. Základom objektovo orientovaných jazykov sú nasledujúce zásady, ako sú:
  • zapuzdrenie;
  • dedičstvo;
  • polymorfizmus.
  • Niektoré zásady, ktoré boli pôvodne stanovené v prvých OOP, prešli podstatnou zmenou.
    Príklady objektovo orientovaných jazykov:
  • Pascal. S vydaním Delphi 7 na oficiálnej úrovni sa začalo hovoriť o Delphi. Hlavnou oblasťou používania objektu Object Pascal je písanie aplikačného softvéru.
  • C ++ je široko používaný na vývoj softvéru, ktorý je jedným z najpopulárnejších jazykov. Vzťahuje sa na vytváranie operačných systémov, aplikácií, ovládačov zariadení, aplikácií, serverov a hier.
  • Java sa prenáša v byte, ktorý je spracovaný virtuálnym strojom Java. Výhodou tohto spôsobu vykonávania je nezávislosť operačného systému a zariadenia. Existujúce rodiny: štandardné vydanie, Enterprise Edition, Micro Edition, karta.
  • javascript sa používa ako skriptovací jazyk pre webové stránky. Syntax je do značnej miery pripomínajúci C a Java. Je implementácia programu Ecmascript. Aplikácia Ecmascript samotná slúži ako základ pre vytváranie ďalších skriptovacích jazykov, ako napríklad JScript, ActionScript.
  • Cieľ-Czaložené na jazyku C a samotný kód C je jasný pre kompilátor Objective-C.
  • Perl - vysoká úroveň je interpretovaná v dynamickom univerzálnom jazyku Microsoft. Má bohaté možnosti na prácu s textom, pôvodne navrhnuté špeciálne pre manipuláciu s textom. Teraz používa v administrácii systému, vývoj sieťové programovanie, bioinformatiky a tak ďalej. D.
  • PHP. Skratka sa prekladá ako hypertextový preprocesor. Používa sa na vývoj webových aplikácií vrátane serverovej časti. Použiť k vytvoreniu grafického užívateľského rozhrania aplikácie pomocou blokov PHP-GTK, PHP-Qt, WinBinder.
  • Python - general-purpose jazyk, ktorý sa zameriava na produktivitu vývojárov a zlepšiť čitateľnosť kódu. Projekt Cython bol vyvinutý na preklad programov napísaných v jazyku Python do kódu C.
  • Abstrakcia

    Akýkoľvek druh knihy "Objektové programovanie pre nechápavo" poukazuje na jeden z hlavných princípov - abstrakcie. Cieľom je rozdeliť detaily alebo charakteristiky implementácie programu na dôležité a nedôležité. Vyžaduje sa pre veľké projekty, umožňuje pracovať na rôznych úrovniach systémovej reprezentácie bez špecifikácie podrobností.


    Abstraktný typ údajov sa uvádza ako rozhranie alebo štruktúra. Umožňuje vám zamyslieť sa nad úrovňou podrobností implementácie. ATD nezávisí od iných častí kódu. Slávny výrok Davida Wheelera hovorí: Všetky problémy v informatike môžu byť riešené na inej úrovni abstrakcie.

    Dedičnosť

    Objektovo orientované jazyky sú k dispozíciizdedený je jedným z najdôležitejších princípov.
    Označuje, že funkčnosť niektorého typu sa môže opätovne použiť. Trieda, ktorá zdedí vlastnosti iného, ​​sa nazýva derivát, potomok alebo podtrieda. Ten, z ktorého vzniká dedičstvo, sa nazýva predchodca, základňa alebo supertrieda. Vzťah k dedičom potomstva vytvára zvláštnu hierarchiu. Existuje niekoľko druhov dedičstva:
  • jednoduché;
  • množné číslo.
  • Ak viacnásobné dedičstvo môže mať niekoľko detí od jedného predka, keď je to jednoduché - iba jeden. Toto je hlavný rozdiel medzi typmi. Dedičstvo vyzerá takto: trieda Animal {function draw () {return "just animal"; } Funkcia jesť () {return zviera žerie ";}} class Cow rozširuje Animal {function draw () {return" niečo, čo vyzerá ako krava ";}} Vidíme, že trieda Cow dedia všetky metódy triedy Animal teraz. ak sa robí Cow.eat (), dostaneme "zviera jes", potom kreslí () sa zmenil Cow.draw () vráti "niečo, čo vyzerá ako krava" a Animal.draw () sa vráti " ".


    zapuzdrenie

    zapuzdrenie obmedzuje prístup k inými zložkami, prepojenie dát s metódami pre spracovanie. pre obalový používa spetsyfykator súkromný prístup
    .
    Zvyčajne je identifikovaný pojem zapuzdrenia a utajenia, ale niektoré jazyky odlišujú tieto koncepty. Inými slovami, sú chránené kritické vlastnosti a ich zmena je nemožná. trieda Animal {private $ name; funkcia __konštruovať ($ name) {$ this- & gt; name = $ name; } funkcia getName {} {návrat $ this-> name; }} Názov je prijatý ako argument konštruktora. Keď sa konštruktor používa v iných častiach kódu, nič nemôže zmeniť názov prvku. akovidíte, je označený vnútri, pre ostatné časti kódu nie je k dispozícii.

    Polymorfizmus

    Polymorfizmus umožňuje, aby jeden a názov boli použité na riešenie podobných, ale technicky odlišných úloh.
    Vo vyššie uvedenom príklade je tabuľka. Vidíme triedu CardDesk a triedu GraphicalObject. Obaja majú funkciu nazvanú kreslenie (). Vykonáva rôzne akcie, aj keď má jedno meno. Ad hoc polymorfizmus alebo špeciálny polymorfizmus používa:
  • preťaženie funkcií, metód;
  • prinášajúcich typy.
  • Preťaženie zahŕňa použitie viacerých funkcií s jediným názvom, ak sa vo fáze kompilácie uskutoční výber zodpovedajúceho. Uvedenie typov znamená konvertovanie hodnoty jedného typu hodnoty na iný typ. Existuje explicitná transformácia - funkcia, ktorá akceptuje jeden typ, ale vracia sa do iného, ​​implicitného, ​​je vykonaná kompilátorom alebo tlmočníkom.
    "Jedno rozhranie - veľa implementácií" Bjorn Stroustrup.

    Trieda

    Trieda je typ údajov, ktorý pozostáva z jednej sady polí a metód.
    Má interné a externé rozhrania pre správu obsahu. Pri kopírovaní cez priradenie, skopírované rozhranie, ale nie údaje. Rôzne typy navzájom spolupracujú prostredníctvom:
  • dedičnosti;
  • združenia;
  • agregácia.
  • Ak zdedil, dcérska trieda zdedí všetky vlastnosti rodiča, združenie odkazuje na interakciu objektov. Keď objekt jednej triedy vstúpi do inej, nazýva sa to agregácia. Ale keď sú stále závislí na sebe počas života, je to kompozícia. Jeden z hlavnýchcharakteristiky sú rozsah viditeľnosti. Koncept je odlišne určený rôznymi poslancami. V objekte Pascal je nasledujúci: className = trieda (rodičovskej triedy) súkromných {položiek použitie je obmedzené iba mimo modul} {tu označuje pole} prísne súkromia {k spetsyfykator boli k dispozícii s vydaním Delphi 2007 značí to isté ako súkromných} chránených {prvky môžu používané v rámci ClassName alebo dedičstva} verejné {} publikované {položky sú k dispozícii všetkým, sú zobrazené v Object Inspector} end; Tu je SuperClass predchodcom, z ktorého vzniká dedičstvo. Pre C ++ tvorba vyzerá takto: class MyClass: public Parent {public: MyClass (); //konštruktér ~ MyClass (); //destructor protected: private:}; V tomto príklade je rodičom predchodca, ak existuje. Konkrétne súkromné, verejné, chránené špecifikácie sú rovnaké ako v predchádzajúcom príklade v programe Pascal. Tiež vidíme konštruktéra, deštruktora, dostupného pre akúkoľvek časť programu. V C ++ sú všetky položky v predvolenom nastavení súkromné, resp. Môžu byť vynechané.

    Funkcia

    v centre objektovo orientovaných jazykov - objekt, to je časť triedy. Skladá sa z:
  • polí;
  • .
  • ​​Údajové pole opisuje parametre objektu. Predstavujú hodnotu, ktorá patrí do akejkoľvek triedy, opisuje svoje vlastnosti stave. Sú štandardne zatvorené a zmeny údajov sa vyskytujú v dôsledku použitia rôznych metód. Metóda - sada funkcií, ktoré definujú všetky možné kroky k dispozícii pre výkon nad objektom. Všetky objekty komunikujú s volaním vzájomných metód. Môžu byť externé alebo internéktoré špecifikujú modifikátory prístupu.

    Metodológia OOP

    Existujú tieto metodiky:
  • Programovanie orientované na komponenty;
  • Prototypové programovanie;
  • Programovanie zamerané na triedu.
  • Programovanie na základe komponentov závisí od konceptu komponentu - takéhoto integrovaného programu, ktorý je určený na opätovné použitie. Realizované ako súbor návrhov so spoločnou vlastnosťou, pravidlami, obmedzeniami. Tento prístup sa používa v objektovo orientovanom jazyku Java, kde sa orientácia komponentu implementuje pomocou JavaBeans, napísaného podľa rovnakých pravidiel.
    V prototypovom programovaní neexistuje koncepcia triedy - dedenie sa uskutočňuje klonovaním existujúceho prototypu. Je základom objektovo orientovaných javascriptových jazykov a iných dialektov diapozitívov, rovnako ako lua alebo lo. Hlavné črty:
  • potomkovia by nemali zachovávať štrukturálnu podobnosť prototypu (v porovnaní s triedou - kópia toho sa stane presným spôsobom);
  • Pri kopírovaní prototypu sú všetky metódy zdedené jeden na jeden.
  • Triedovo orientované programovanie sa zameriava na koncepciu triedy a inštancie. Trieda definuje celkovú štruktúru, správanie sa pre prípady, ktoré ich berú.

    Objektovo orientované jazyky

    Všetky OSOA sú v plnom súlade s princípmi OOP - prvky sú objekty, ktoré majú vlastnosti. V tomto prípade môžu byť dodatočné finančné prostriedky.
    OSO nevyhnutne obsahuje súbor nasledujúcich prvkov:
  • deklarovanie tried s poľami, metódami;
  • rozšírenie o dedičstvofunkcie;
  • polymorfné správanie.
  • Okrem vyššie uvedeného zoznamu je možné pridať ďalšie finančné prostriedky:
  • konštruktér, deštruktor, finalizátor;
  • vlastnosti;
  • indexátory;
  • modifikátory prístupu.
  • Niektoré OSOs zodpovedajú všetkým hlavným prvkom, ostatné - čiastočne. Ostatné sú hybridné, to znamená, že sú kombinované so subsystémami iných paradigiem. Zvyčajne sa môžu zásady OOP aplikovať aj na orientovaný jazyk. Použitie OBO však stále nečiní kód objektovo orientovaný. JAP podporujú viac ako jednu paradigmu. Napríklad PHP alebo javascript podporujú funkčné, procedurálne, objektovo orientované programovanie. Java pracuje s piatimi paradigmami: objektovo orientovaným, generalizovaným, procedurálnym, aspektovo orientovaným, konkurencieschopným. C # sa považuje za jeden z najúspešnejších príkladov multiparadigmality. Podporuje rovnaké prístupy ako Java, do tohto zoznamu sa pridáva reflexívna paradigma. MP ako Oz je navrhnutý tak, aby kombinoval všetky pojmy tradične spojené s rôznymi programovými paradigmami.

    Súvisiace publikácie