Objektově orientované jazyky. Základy objektově orientovaného programování

Objektově orientované programování je založeno na prezentaci programu ve formě souboru objektů. Každý objekt patří do třídy, která naopak zaujímá své místo v dědičné hierarchii. Použití OOP minimalizuje redundantní data, což zlepšuje ovladatelnost a pochopení programu.

Co je OOP

Vznikl v důsledku vývoje procedurálního programování. Základem objektově orientovaných jazyků jsou následující principy, jako jsou:
  • zapouzdření;
  • dědictví;
  • polymorfismus.
  • Některé zásady, které byly původně stanoveny v prvních OOP, prošly podstatnou změnou.
    Příklady objektově orientovaných jazyků:
  • Pascal. S uvolněním Delphi 7 na oficiální úrovni se začalo říkat Delphi. Hlavní oblastí použití objektu Object Pascal je psaní aplikačního softwaru.
  • C ++ je široce používán k vývoji softwaru, který je jedním z nejpopulárnějších jazyků. Platí pro tvorbu OS, aplikací, ovladačů zařízení, aplikací, serverů a her.
  • Java je přenášeno v bajtu, zpracované virtuálním strojem Java. Výhodou tohoto způsobu provedení je nezávislost operačního systému a zařízení. Stávající rodiny: Standard Edition, Enterprise Edition, Micro Edition, Card.
  • javascript je používán jako skriptovací jazyk pro webové stránky. Syntaxe většinou připomíná C a Java. Je implementací aplikace Ecmascript. Aplikace Ecmascript samotná se používá jako základ pro vytváření dalších skriptovacích jazyků, jako je například JScript, ActionScript.
  • Cíl-Czaložené na jazyce C a samotný kód C je jasný pro kompilátor Objective-C.
  • Perl - vysoká úroveň je interpretována v dynamickém obecném jazyce microsoft. Má bohaté možnosti pro práci s textem, který byl původně navržen speciálně pro manipulaci s textem. V současné době se používá při správě systému, vývoji síťového programování, bioinformatiky apod.
  • PHP. Zkratka je přeložena jako hypertextový preprocesor. Používá se k vývoji webových aplikací, včetně části serveru. Umožňuje vytvářet aplikace gui pomocí balíčků PHP-GTK, PHP-Qt a WinBinder.
  • Python je jazyk obecného určení zaměřený na zlepšení produktivity vývojářů a čitelnosti kódu. Projekt Cython byl vyvinut k překladu programů napsaných v jazyce Python do kódu C.
  • Abstrakce

    Jakákoli kniha žánru "Object-Oriented Programming for Dummies" zdůrazňuje jeden z hlavních principů - abstrakce. Cílem je rozdělit podrobnosti nebo charakteristiky implementace programu na důležité a nedůležité. Požadováno pro velké projekty, umožňuje pracovat na různých úrovních systémové reprezentace bez specifikování detailů.


    Abstraktní datový typ je prezentován jako rozhraní nebo struktura. Umožňuje nemyslet na úroveň detailů implementace. ATD nezávisí na jiných částech kódu. Dobře známý aforismus Davida Wheelera svědčí: Všechny problémy v informatice mohou být vyřešeny na jiné úrovni abstrakce.

    Dědičnost

    Objektově orientované jazyky jsou k dispozicizděděný je jedním z nejdůležitějších zásad.
    Označuje, že funkce některých typů mohou být znovu použity. Třída, která dědí vlastnosti jiného, ​​se nazývá derivát, potomník nebo podtřída. Ten, z něhož se dědí dědictví, se nazývá předchůdce, základna nebo superclass. Vztah ke dědicům potomstva vytváří zvláštní hierarchii. Existuje několik typů dědičnosti:
  • jednoduché;
  • množné číslo.
  • Když více dědictví může být několik dětí od jednoho předka, když je prostý - pouze jeden. To je hlavní rozdíl mezi typy. Dědičnost vypadá takto: třída Animal {funkce draw () {return "just animal"; } Funkce jíst () {return zvíře žere ";}} class Cow rozšiřuje Animal {function draw () {return" něco, co vypadá jako kráva „;}} Vidíme, že třída Cow dědí všechny metody třídy Animal teď. pokud splní Cow.eat (), dostanete „zvíře žere“, respektive metoda draw () změnila. Cow.draw () vrátí „něco, co vypadá jako kráva“, a Animal.draw () vrátí „jen zvíře "


    Zapouzdření

    Zapouzdření omezuje přístup k ostatním komponentům, váže údaje na způsoby zpracování a pro balení se používá specifikátor soukromého přístupu.
    Obvykle je definována koncepce zapouzdření a utajení, ale některé jazyky tyto koncepty odlišují. Jinými slovy jsou chráněny kritické vlastnosti a jejich změna je nemožná. třída zvířete {private $ name; funkce __construct ($ name) {$ this- & gt; jméno = $ jméno; } funkce getName {} {vrátit $ this-> jméno; }} Název je přijat jako argument konstruktoru. Když se konstruktor používá v jiných částech kódu, nic nemůže změnit název. Jakvidět, je označen uvnitř, pro jiné části kódu není k dispozici.

    Polymorfismus

    Polymorfismus umožňuje, aby jeden a jméno byly použity k řešení podobných, ale technicky odlišných úkolů.
    Ve výše uvedeném příkladu je tabulka. Vidíme třídu CardDesk a třídu GraphicalObject. Oba mají funkci nazvanou draw (). Vykonává různé akce, i když má jedno jméno. Ad hoc polymorfismus nebo speciální polymorfismus využívá:
  • přetížení funkcí, metod;
  • přinášející typy.
  • Přetížení vyžaduje použití několika funkcí s jediným jménem, ​​pokud se během kompilační fáze objeví výběr odpovídajících. Přizpůsobení typů znamená konverzi hodnoty jednoho typu hodnoty na jiný typ. Existuje explicitní transformace - funkce, která přijímá jeden typ, ale vrátí se jinému, implicitnímu, je prováděna překladačem nebo interpretem.
    "Jedno rozhraní - mnoho implementací" Bjorn Stroustrup.

    Třída

    Třída je typ dat, který se skládá z jediné sady polí a metod.
    Má interní i externí rozhraní pro správu obsahu. Při kopírování přes přiřazení je kopírované rozhraní, nikoli však data. Různé typy vzájemně spolupracují prostřednictvím:
  • dědictví;
  • asociace;
  • agregace.
  • Když se zdědí dceřinná třída dědí všechny vlastnosti rodiče, přidružení odkazuje na interakci objektů. Když objekt jedné třídy vstoupí do jiného, ​​nazývá se agregace. Ale když stále žijí v životě, je to kompozice. Jeden z hlavníchcharakteristiky jsou rozsah viditelnosti. Koncept je různě určen různými poslanci. V objektu Pascal je následující: ClassName = třída (rodičovské třídy) soukromých {položek použití je omezeno pouze mimo modul} {zde označuje pole} přísné soukromí {k spetsyfykator byly k dispozici s vydáním Delphi 2007 značí totéž jako soukromých} chráněných {prvky mohou ClassName použity uvnitř nebo v řadě} veřejnosti {} {zveřejněné všechny položky jsou k dispozici, jsou zobrazeny v objektu Inspector'e} konce; Zde nadtřídou - předek, ze kterých je dědičnost. K vytvoření C ++ je následující: class Moje_třída: veřejné rodič {public: Moje_třída (); //konstruktor ~ MyClass (); //destructor protected: private:}; V tomto příkladu je rodič předchůdce, pokud existuje. Specifikátor veřejné, chráněné označení stejně jako v předchozím případě v Pascalu. Také vidíme konstruktéra, destruktora, který je k dispozici libovolné části programu. V C ++ jsou všechny položky ve výchozím nastavení soukromé, což může být vynecháno.

    Funkce

    v centru objektově orientovaných jazyků - objekt, to je část třídy. Skládá se z:
  • polí;
  • .
  • ​​Datové pole popisuje parametry objektu. Představují určitou hodnotu patřící do třídy, popisují její stav, vlastnosti. Jsou ve výchozím nastavení uzavřeny a změny dat nastávají v důsledku použití různých metod. Metoda - sada funkcí, které určují všechny možné akce, které jsou k dispozici pro provádění přes objekt. Všechny objekty interagují s voláním obou metod. Může být externí nebo interníkteré jsou specifikovány modifikátory přístupu.

    Metodologie OOP

    Existují tyto metodiky:
  • Programování orientované na součásti;
  • Programování prototypů;
  • Třídy orientované programování.
  • Programování založené na komponentách se opírá o koncept komponenty - takový integrovaný program, který je určen k opětovnému použití. Realizováno jako soubor návrhů se společným znakem, pravidly, omezeními. Tento přístup se používá v objektově orientovaném jazyku Java, kde je orientace komponent implementována pomocí JavaBeans, napsaného podle stejných pravidel.
    V prototypovém programování neexistuje koncept třídy - dědičnost se provádí klonováním existujícího prototypu. Je základem objektově orientovaných javascriptových jazyků a dalších dialektů dialektů, stejně jako lu nebo lo. Hlavní rysy:
  • potomci by neměli zachovávat strukturní podobnost prototypu (ve vztahu k třídě - kopie se stane přesným způsobem);
  • Při kopírování prototypu jsou všechny metody zděděny jeden k jednomu.
  • Třídy orientované programování se zaměřuje na koncept třídy a instance. Třída definuje celkovou strukturu, chování pro instance, které je vezmou.

    Objektově orientované jazyky

    Všechny OSOA plně v souladu se zásadami prvků OOP jsou objekty, které mají vlastnosti. V tomto případě mohou být dodatečné finanční prostředky.
    OSO nutně obsahuje soubor následujících prvků:
  • deklarace tříd s poli, metodami;
  • rozšíření dědictvímfunkce;
  • polymorfní chování.
  • Kromě uvedeného seznamu mohou být přidány dodatečné finanční prostředky:
  • konstruktor, destruktor, finalizátory;
  • vlastnosti;
  • indexátory;
  • modifikátory přístupu.
  • Některé OSO odpovídají všem hlavním prvkům, jiné - částečně. Ostatní jsou hybridní, tj. Jsou kombinovány se subsystémy jiných paradigmat. Obvykle mohou být zásady OOP aplikovány také na jazyk orientovaný na zkreslení. Použití OBO však stále nečiní kód objektově orientovaný. JAP podporuje více než jednu paradigma. Například PHP nebo javascript podporují funkční, procedurální, objektově orientované programování. Java pracuje s pěti paradigmami: objektově orientovanými, generalizovanými, procedurálními, orientovanými na aspekty, konkurenceschopnými. C # je považován za jeden z nejúspěšnějších příkladů multiparadigmality. Podporuje stejné přístupy jako Java, do tohoto seznamu je přidána reflexní paradigma. MP jako Oz je navržen tak, aby kombinoval všechny pojmy tradičně spojené s různými programovými paradigmaty.

    Související publikace