Explorer la généralisation, la spécialisation et la dépendance dans la POO

La POO (programmation orientée objet) est un paradigme centré sur les objets et les données plutôt que sur les actions et la logique. Lorsque vous travaillez avec la POO, il est impératif que vous identifiiez les objets et leurs relations.

En POO, un problème est décomposé en un certain nombre d'objets et comment ils sont liés les uns aux autres - un processus appelé modélisation de données. Les relations essentielles entre les objets comprennent: l'association, la généralisation, la spécialisation, l'agrégation, la dépendance et la composition. Dans cet article, nous aborderons les relations de dépendance et d'héritage dans la POO avec des exemples de code en C # pour illustrer les concepts.

Dépendance

Une dépendance est une relation entre deux ou plusieurs objets dans laquelle un objet dépend de l'autre ou des autres objets pour son implémentation. Si l'un de ces objets change, le ou les autres objets peuvent être affectés. La relation de dépendance entre deux objets ou plus est représentée dans UML à l'aide de flèches en pointillés. En d'autres termes, lorsqu'une relation de dépendance existe entre deux ou plusieurs objets, l'objet a besoin de connaître les autres objets dont il dépend.

Considérez les classes BlogEntry et View. Alors que le premier contient toutes les informations relatives aux entrées de blog, le second concerne l'affichage des données reçues de la classe BlogEntry sur l'interface utilisateur. Ainsi, la classe View dépend de la classe BlogEntry pour afficher le contenu (entrées de blog) dans l'interface utilisateur. Il existe donc une relation de dépendance entre les classes View et BlogEntry. Une relation de dépendance est représentée dans UML à l'aide d'une flèche en pointillés.

public class BlogEntry

    {

        //Members of the BlogEntry class

    }

public class View

    {

        //Members of the View class

    }

Généralisation et spécialisation

La généralisation peut être définie comme la technique consistant à extraire les caractéristiques essentielles (notamment les attributs, les propriétés et les méthodes) de deux ou plusieurs sous-classes, puis de les combiner à l'intérieur d'une classe de base généralisée (également appelée superclasse). Au contraire, la spécialisation est l'inverse de la généralisation - elle est utilisée pour représenter une relation de «type de» en créant des sous-classes à partir de classes de base existantes.

L'héritage est défini comme la capacité d'une classe à étendre une ou plusieurs classes (également appelées classes de base). Notez que la généralisation est la forme la plus forte de relations de classe car les classes participant à une relation de généralisation sont étroitement liées les unes aux autres - la plupart des subtilités internes de la classe parente sont visibles pour la classe enfant.

La classe qui étend la classe de base ou parente est également appelée classe enfant ou classe dérivée. La classe héritée ou généralisée étend ou hérite de sa classe de base ou parente. En héritage, une classe enfant hérite des méthodes et des attributs de la classe de base ou parente à l'exception de ceux qui sont privés. En substance, les membres privés de la classe de base ne sont pas hérités car ils appartiennent «uniquement» à la classe dont ils font partie. Par conséquent, vous ne devriez tirer parti de la généralisation que lorsque vous avez besoin de représenter une classe qui est en fait une forme plus spécialisée d'une autre classe.

L'héritage est des types suivants:

  • Célibataire
  • Plusieurs
  • À plusieurs niveaux
  • Hiérarchique
  • Hybride

L'héritage unique est la forme la plus simple d'héritage dans laquelle une classe étend une autre classe. L'extrait de code suivant illustre cette forme d'héritage - notez comment la classe BlogAuthor étend la classe Author.

public class Author

    {

        //Members of the Author class

    }

public class BlogAuthor : Author

    {

        //Members of the BlogAuthor class

    }

Dans l'héritage multiple, vous avez plusieurs classes de base à partir desquelles une classe est dérivée. Notez que l'héritage multiple n'est pas pris en charge dans les langages de programmation POO comme Java ou C #.

Le prochain type d'héritage dans notre liste est l'héritage à plusieurs niveaux. Dans cette forme d'héritage, vous avez des classes héritées les unes des autres pour former une chaîne. L'extrait de code suivant illustre cela.

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

    }

Dans l'héritage hiérarchique, vous avez des classes qui représentent une structure hiérarchique par héritage, semblable à un arbre généalogique. Dans ce type d'héritage, vous avez plus d'une classe enfant ayant la même classe de base ou parente. En d'autres termes, il s'agit d'un type d'héritage dans lequel une ou plusieurs classes dérivées ont une base commune ou une classe parente.

L'héritage hybride est un type d'héritage dans lequel deux ou plusieurs formes d'héritage sont combinées en une seule. Essentiellement, ce type d'héritage est une combinaison de deux ou plusieurs formes d'héritage pour former une structure fermée. Notez que l'héritage hybride n'est pas non plus pris en charge dans les langages de programmation OO tels que C # ou Java.