Programování

Zkoumání zobecnění, specializace a závislosti v OOP

OOP (objektově orientované programování) je paradigma, které je zaměřeno spíše na objekty a data než na akce a logiku. Při práci s OOP je bezpodmínečně nutné identifikovat objekty a jejich vztahy.

V OOP je problém rozložen na řadu objektů a jejich vzájemný vztah - proces známý jako datové modelování. Mezi základní vztahy mezi objekty patří: asociace, generalizace, specializace, agregace, závislost a složení. V tomto článku bychom diskutovali o vztazích závislostí a dědičnosti v OOP s příklady kódu v C # pro ilustraci konceptů.

Závislost

Závislost je vztah mezi dvěma nebo více objekty, ve kterém je objekt závislý na druhém objektu nebo objektech pro svou implementaci. Pokud se jeden z těchto objektů změní, mohou být ovlivněny ostatní objekty. Vztah závislostí mezi dvěma nebo více objekty je zobrazen v UML pomocí přerušovaných šipek. Jinými slovy, pokud existuje vztah závislosti mezi dvěma nebo více objekty, musí objekt vědět o ostatních objektech, na kterých závisí.

Zvažte třídy BlogEntry a View. Zatímco první obsahuje všechny související informace související s položkami blogu, druhá se týká zobrazení dat přijatých ze třídy BlogEntry na uživatelské rozhraní. Třída View je tedy závislá na třídě BlogEntry k zobrazení obsahu (položky blogu) v uživatelském rozhraní. Proto existuje vztah závislostí mezi View a BlogEntry třídami. Vztah závislosti je v UML reprezentován pomocí přerušované šipky.

veřejná třída BlogEntry

    {

// Členové třídy BlogEntry

    }

veřejné třídy Zobrazit

    {

// Členové třídy View

    }

Zobecnění a specializace

Zobecnění může být definováno jako technika extrakce základních charakteristik (mezi ně patří atributy, vlastnosti a metody) ze dvou nebo více podtříd a jejich kombinování uvnitř zobecněné základní třídy (nazývané také nadtřída). Naopak, specializace je opakem zobecnění - používá se k reprezentaci vztahu typu typu vytvořením podtříd ze stávajících základních tříd.

Dědičnost je definována jako schopnost třídy rozšířit jednu nebo více tříd (označovaných také jako základní třídy). Všimněte si, že zobecnění je nejsilnější formou třídních vztahů, protože třídy účastnící se generalizačního vztahu jsou úzce spojeny navzájem - většina vnitřních složitostí nadřazené třídy je podřízené třídě viditelná.

Třída, která rozšiřuje základní nebo nadřazenou třídu, je také známá jako podřízená třída nebo odvozená třída. Zděděná nebo zobecněná třída rozšiřuje nebo dědí svou základní nebo nadřazenou třídu. V dědičnosti dědí podřízená třída metody a atributy základní nebo nadřazené třídy kromě těch, které jsou soukromé. Soukromí členové základní třídy v zásadě nejsou zděděni, protože patří „pouze“ do třídy, které jsou součástí. Z tohoto důvodu byste měli zobecnit výhodu pouze v případě, že potřebujete reprezentovat třídu, která je ve skutečnosti specializovanější formou jiné třídy.

Dědičnost je následujících typů:

  • Singl
  • Násobek
  • Víceúrovňový
  • Hierarchický
  • Hybridní

Single dědičnost je nejjednodušší forma dědičnosti, ve které jedna třída rozšiřuje další třídu. Následující fragment kódu ilustruje tuto formu dědičnosti - všimněte si, jak třída BlogAuthor rozšiřuje třídu Author.

veřejná třída Autor

    {

// Členové třídy Author

    }

public class BlogAuthor: Autor

    {

// Členové třídy BlogAuthor

    }

Ve vícenásobném dědictví máte několik základních tříd, ze kterých je odvozena třída. Všimněte si, že vícenásobná dědičnost není podporována v programovacích jazycích OOP, jako je Java nebo C #.

Dalším typem dědičnosti v našem seznamu je víceúrovňová dědičnost. V této formě dědičnosti máte třídy zděděné jeden od druhého, aby vytvořily řetězec. Následující fragment kódu to ilustruje.

veřejná třída Osoba

    {

// Členové třídy Person

    }

public class Autor: Osoba

    {

// Členové třídy Author

    }

public class BlogAuthor: Autor

    {

// Členové třídy BlogAuthor

    }

V hierarchické dědičnosti máte třídy, které představují hierarchickou strukturu prostřednictvím dědičnosti, podobně jako rodokmen. V tomto typu dědičnosti máte více než jednu podřízenou třídu se stejnou základní nebo nadřazenou třídou. Jinými slovy, jedná se o typ dědičnosti, ve kterém má jedna nebo více odvozených tříd společnou základní nebo nadřazenou třídu.

Hybridní dědičnost je typ dědičnosti, ve kterém jsou dvě nebo více forem dědičnosti sloučeny do jedné. Tento typ dědičnosti je v zásadě kombinací dvou nebo více forem dědičnosti za účelem vytvoření uzavřené struktury. Všimněte si, že hybridní dědičnost také není podporována v programovacích jazycích OO, jako je C # nebo Java.