Erkundung von Generalisierung, Spezialisierung und Abhängigkeit in OOP

OOP (Object Oriented Programming) ist ein Paradigma, das sich eher auf Objekte und Daten als auf Aktionen und Logik konzentriert. Wenn Sie mit OOP arbeiten, müssen Sie unbedingt die Objekte und ihre Beziehungen identifizieren.

In OOP wird ein Problem in eine Reihe von Objekten zerlegt und wie sie sich zueinander verhalten - ein Prozess, der als Datenmodellierung bezeichnet wird. Die wesentlichen Beziehungen zwischen Objekten umfassen: Assoziation, Generalisierung, Spezialisierung, Aggregation, Abhängigkeit und Zusammensetzung. In diesem Artikel werden Abhängigkeits- und Vererbungsbeziehungen in OOP anhand von Codebeispielen in C # erläutert, um die Konzepte zu veranschaulichen.

Abhängigkeit

Eine Abhängigkeit ist eine Beziehung zwischen zwei oder mehr Objekten, bei deren Implementierung ein Objekt von dem anderen Objekt oder den anderen Objekten abhängt. Wenn sich eines dieser Objekte ändert, können die anderen Objekte betroffen sein. Die Abhängigkeitsbeziehung zwischen zwei oder mehr Objekten wird in UML mit gestrichelten Pfeilen dargestellt. Mit anderen Worten, wenn eine Abhängigkeitsbeziehung zwischen zwei oder mehr Objekten besteht, muss das Objekt über die anderen Objekte Bescheid wissen, von denen es abhängt.

Betrachten Sie die Klassen BlogEntry und View. Während Ersteres alle zugehörigen Informationen zu den Blogeinträgen enthält, befasst sich Letzteres mit der Anzeige der von der BlogEntry-Klasse empfangenen Daten auf der Benutzeroberfläche. Daher ist die View-Klasse von der BlogEntry-Klasse abhängig, um Inhalte (Blogeinträge) in der Benutzeroberfläche anzuzeigen. Daher besteht eine Abhängigkeitsbeziehung zwischen den Klassen View und BlogEntry. Eine Abhängigkeitsbeziehung wird in UML durch einen gestrichelten Pfeil dargestellt.

public class BlogEntry

    {

        //Members of the BlogEntry class

    }

public class View

    {

        //Members of the View class

    }

Verallgemeinerung und Spezialisierung

Generalisierung kann als die Technik definiert werden, die wesentlichen Merkmale (einschließlich Attribute, Eigenschaften und Methoden) aus zwei oder mehr Unterklassen zu extrahieren und sie dann innerhalb einer verallgemeinerten Basisklasse (auch als Superklasse bezeichnet) zu kombinieren. Im Gegenteil, Spezialisierung ist das Gegenteil von Generalisierung - sie wird verwendet, um die "Typ" -Beziehung darzustellen, indem Unterklassen aus vorhandenen Basisklassen erstellt werden.

Vererbung ist definiert als die Fähigkeit einer Klasse, eine oder mehrere Klassen (auch als Basisklassen bezeichnet) zu erweitern. Beachten Sie, dass die Generalisierung die stärkste Form von Klassenbeziehungen ist, da die an einer Generalisierungsbeziehung beteiligten Klassen eng miteinander verbunden sind - die meisten internen Feinheiten der Elternklasse sind für die untergeordnete Klasse sichtbar.

Die Klasse, die die Basis- oder Elternklasse erweitert, wird auch als untergeordnete Klasse oder abgeleitete Klasse bezeichnet. Die geerbte oder verallgemeinerte Klasse erweitert oder erbt ihre Basis- oder Elternklasse. Bei der Vererbung erbt eine untergeordnete Klasse die Methoden und Attribute der Basis- oder übergeordneten Klasse mit Ausnahme derjenigen, die privat sind. Im Wesentlichen werden die privaten Mitglieder der Basisklasse nicht vererbt, da sie "ausschließlich" zu der Klasse gehören, zu der sie gehören. Daher sollten Sie die Verallgemeinerung nur dann nutzen, wenn Sie eine Klasse darstellen müssen, die tatsächlich eine spezialisiertere Form einer anderen Klasse ist.

Es gibt folgende Arten der Vererbung:

  • Single
  • Mehrere
  • Mehrstufig
  • Hierarchisch
  • Hybrid

Einzelvererbung ist die einfachste Form der Vererbung, bei der eine Klasse eine andere Klasse erweitert. Das folgende Codefragment veranschaulicht diese Form der Vererbung. Beachten Sie, wie die BlogAuthor-Klasse die Author-Klasse erweitert.

public class Author

    {

        //Members of the Author class

    }

public class BlogAuthor : Author

    {

        //Members of the BlogAuthor class

    }

Bei der Mehrfachvererbung haben Sie mehrere Basisklassen, von denen eine Klasse abgeleitet ist. Beachten Sie, dass Mehrfachvererbung in OOP-Programmiersprachen wie Java oder C # nicht unterstützt wird.

Die nächste Art der Vererbung in unserer Liste ist die mehrstufige Vererbung. Bei dieser Form der Vererbung haben Sie Klassen, die voneinander geerbt wurden, um eine Kette zu bilden. Das folgende Codefragment veranschaulicht dies.

public class Person

    {

        //Members of the Person class

    }

public class Author : Person

    {

        //Members of the Author class

    }

public class BlogAuthor : Author

    {

        //Members of the BlogAuthor class

    }

Bei der hierarchischen Vererbung gibt es Klassen, die eine hierarchische Struktur durch Vererbung darstellen, ähnlich einem Stammbaum. Bei dieser Art der Vererbung haben Sie mehr als eine untergeordnete Klasse mit derselben Basis- oder Elternklasse. Mit anderen Worten, dies ist eine Art Vererbung, bei der eine oder mehrere abgeleitete Klassen eine gemeinsame Basis- oder Elternklasse haben.

Die hybride Vererbung ist eine Art der Vererbung, bei der zwei oder mehr Vererbungsformen zu einer kombiniert werden. Im Wesentlichen ist diese Art der Vererbung eine Kombination aus zwei oder mehr Formen der Vererbung, um eine geschlossene Struktur zu bilden. Beachten Sie, dass die Hybridvererbung auch in OO-Programmiersprachen wie C # oder Java nicht unterstützt wird.