Prozkoumání principů dědičnosti tříd

Dokončeno 100 XP

Dědičnost je jednou z hlavních charakteristik objektově orientovaného programování. Umožňuje vytvořit hierarchii tříd definováním vztahů mezi třídami. V jazyce C# můžete vytvořit základní třídu, která definuje běžné chování a charakteristiky, a pak vytvořit odvozené třídy, které dědí a rozšiřují toto chování.

Například základní třída s názvem Person může definovat Name a Age vlastnosti. Odvozená třída s názvem Employee může dědit tyto vlastnosti a definovat další vlastnosti, jako jsou EmployeeNumber a Salary.

Tento příklad může být reprezentován pomocí následujícího kódu jazyka C#:

C#
public class Person
{
    public string? Name { get; set; }
    public int Age { get; set; }
}

public class Employee : Person
{
    public int EmployeeNumber { get; set; }
    public decimal Salary { get; set; }
}

Tento vzorový kód definuje Person třídu a potom třídu Employee. Všimněte si dvojtečky (:) znaku v deklaraci třídy Employee. Dvojtečka (:) mezi Employee a Person označuje, že třída Employee dědí z třídy Person. V tomto případě třída Employee dědí vlastnosti Name a Age a definuje dvě další vlastnosti: EmployeeNumber a Salary. Při vytvoření objektu Employee má přístup k Name a Age vlastnosti definované ve třídě Person a také EmployeeNumber a Salary vlastnosti definované ve třídě Employee. Když je vytvořen objekt Person, má přístup pouze k Name a Age vlastnosti.

Dědičnost umožňuje vytvořit hierarchii tříd, které sdílejí společné chování a charakteristiky. Umožňuje opakovaně používat kód a definovat vztahy mezi třídami. Pomocí dědičnosti můžete vytvořit lépe udržovatelný a rozšiřitelný kód.

Výhody dědičnosti

Dědičnost poskytuje několik výhod, mezi které patří:

  • opětovné použití kódu: Dědičnost umožňuje opakovaně používat kód definovaný v základní třídě v odvozené třídě. Tím se zmenšuje duplicita a propaguje opakované použití kódu.
  • rozšiřitelnost: Dědičnost umožňuje rozšířit chování základní třídy přidáním nových členů do odvozené třídy. V odvozené třídě můžete definovat nové vlastnosti, metody a události.
  • zapouzdření: Dědičnost podporuje zapouzdření tím, že umožňuje skrýt podrobnosti implementace základní třídy z odvozené třídy. Dědičnost a zapouzdření umožňují definovat jasné rozhraní pro interakci s objekty odvozené třídy.
  • konzistence: Dědičnost podporuje konzistenci tím, že umožňuje definovat běžné chování v základní třídě. Dědění ze základní třídy zajišťuje, že odvozené třídy sdílejí stejné základní chování.
  • Polymorfismus: Dědičnost umožňuje polymorfismus, který umožňuje považovat objekty odvozené třídy za objekty jejich základní třídy. Polymorfismus umožňuje psát kód, který funguje s objekty různých typů, aniž byste znali jejich konkrétní typ v době kompilace.

Porovnání dědičnosti tříd s implementací rozhraní

Jazyk C# poskytuje dva mechanismy pro definování vztahů mezi třídami: dědičnost tříd a implementace rozhraní. Dědičnost tříd umožňuje třídě dědit členy ze základní třídy, zatímco implementace rozhraní umožňuje třídě implementovat členy definované v rozhraní. Oba mechanismy umožňují opakované použití kódu a podporují polymorfismus, ale mají různé vlastnosti:

Dědičnost tříd má následující charakteristiky:

  • Třída může dědit pouze z jedné základní třídy.
  • Odvozená třída může opakovaně používat, rozšiřovat a upravovat chování definované v základní třídě.
  • Dědičnost vytvoří vztah "is-a" mezi třídami.

Implementace rozhraní má následující charakteristiky:

  • Třída může implementovat více rozhraní.
  • Třída může definovat své vlastní chování a implementovat členy definované v rozhraní.
  • Implementace rozhraní vytvoří vztah "can-do" mezi třídami.

Rozdíl mezi relacemi "is-a" a "can-do" je důležitý při navrhování objektově orientovaných systémů. Obecně byste měli použít dědičnost tříd, pokud je odvozená třída specializovanou verzí základní třídy. Implementace rozhraní byste měli použít, když třída může provádět konkrétní sadu akcí.

Příkladem použití dědičnosti tříd je, když máte základní třídu s názvem Dog a odvozené třídy pojmenované German Shepherd a Golden Retriever. German Shepherd a Golden Retriever jsou specializované verze Dog. V tomto případě můžete pomocí dědičnosti tříd definovat společnou sadu vlastností a metod ve třídě Dog a pak toto chování rozšířit a upravit v German Shepherd a Golden Retriever třídách.

Příkladem použití implementace rozhraní je, když máte rozhraní s názvem IDrawable, které definuje Draw metodu. Rozhraní IDrawable můžete implementovat ve třídách, které lze nakreslit, například Circle a Rectangle. V tomto případě můžete pomocí implementace rozhraní definovat společnou sadu akcí, které jsou sdíleny různými třídami.

Porovnání dědičnosti tříd pomocí polymorfismu

Dědičnost tříd a polymorfismus jsou úzce související koncepty v objektově orientovaném programování. Dědičnost umožňuje definovat hierarchii tříd, které sdílejí společné chování, zatímco polymorfismus umožňuje považovat objekty odvozené třídy za objekty jejich základní třídy.

Představte si například základní třídu s názvem HousePet a odvozené třídy s názvem Dog a Cat. Třída HousePet definuje Speak metodu, která vrací řetězec představující zvuk, který pet dělá. Třída Dog přepíše metodu Speak tak, aby vrátila "Woof" a třída Cat přepíše metodu Speak vrátit "Meow". Můžete vytvořit HousePet objekt s názvem myPet typu Dog nebo Cat a volat metodu Speak získat odpovídající odpověď.

V tomto příkladu třída HousePet definuje společné Speak chování, které Dog a třídy Cat sdílejí. Třídy Dog a Cat přepíší Speak metodu přizpůsobení chování. Při volání Speak metoda na HousePet objekt, který odkazuje na jednu z odvozených tříd, získáte odpovídající odpověď na základě typu objektu. Tady je ukázka kódu, která ukazuje tento koncept:

C#
HousePet myPet1 = new Dog();    // Create a HousePet object named myPet1 that's of type Dog
HousePet myPet2 = new Cat();    // Create a HousePet object named myPet2 that's of type Cat

Console.WriteLine(myPet1.Speak());    // Call the Speak method on myPet1
Console.WriteLine(myPet2.Speak());    // Call the Speak method on myPet2

// Output: Woof
//         Meow

public class HousePet
{
    public virtual string Speak()
    {
        return "Hello";
    }
}

public class Dog : HousePet
{
    public override string Speak()
    {
        return "Woof";
    }
}

public class Cat : HousePet
{
    public override string Speak()
    {
        return "Meow";
    }
}

Polymorfismus umožňuje psát kód, který pracuje s objekty různých typů, aniž byste znali jejich konkrétní typ v době kompilace. V tomto příkladu je polymorfismus dosaženo vytvořením instancí HousePet třídy, které jsou typu Dog nebo Cat. Speak metoda je volána na HousePet objekty a příslušná odpověď je vrácena na základě typu objektu, buď "Woof" nebo "Meow". V jazyce C# lze polymorfismus dosáhnout buď pomocí dědičnosti tříd, nebo implementace rozhraní.

Shrnutí

Dědičnost je základní koncept objektově orientovaného programování, který umožňuje vytvořit hierarchii tříd definováním vztahů mezi třídami. V jazyce C# můžete pomocí dědičnosti tříd vytvořit základní třídu, která definuje běžné chování a charakteristiky, a pak vytvořit odvozené třídy, které dědí a rozšiřují toto chování. Dědičnost poskytuje několik výhod, včetně opakovaného použití kódu, rozšiřitelnosti, zapouzdření, konzistence a polymorfismu. Pomocí dědičnosti můžete vytvořit lépe udržovatelný a rozšiřitelný kód.


Další jednotka: Konfigurace základních a odvozených tříd

Předchozí Další