Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/05/2017, à 09:16

Destroyers

[POO] Principe de responsabilité unique et héritage ?

Bonjour.

Je me suis lancé dans un exercice assez difficile : réaliser un projet quelconque en appliquant rigoureusement à la lettre les principes SOLID et la loi de Demeter (et d'autres encore).

Le respect aveugle de ces règles m'a fait poser une question : L'héritage ne servirait-il pas simplement a redéfinir les méthodes virtuelles de la classe mère ? En effet, j'ai bien compris que les questions a se poser pour hériter étaient "B est il un A ?" et "A et B ont il le même comportement ?" (Cette deuxième question pour respecter le principe de substitution de Liskov). Mais je viens de réaliser que pour respecter le principe de responsabilité unique, une classe dérivée ne devait pas définir de nouvelles méthodes... Et on pourrait étendre ce principe à "Héritage multiple interdit" (que ce soit un héritage d'interface ou non), car étant donné que chacunes des classes de base a déjà un rôle défini, alors la classe dérivée en aurait plusieurs... Et cela détruit le principe de séparation des interfaces (qui justement prône l'héritage multiple d'interfaces).

L'héritage devrait il vraiment se limiter à un héritage simple et ne servant qu'à redéfinir des méthodes virtuelles ? Cela me parraît limité !

Merci smile

Hors ligne

#2 Le 20/05/2017, à 09:04

Compte anonymisé

Re : [POO] Principe de responsabilité unique et héritage ?

L'héritage simple limite trop le champ des possibilités, par contre, je suis plutôt d'accord sur le principe de la redéfinition de méthodes virtuelles car il est rare dans les grosses applications qu'un héritage soit aussi basique qu'une réutilisation d'attributs et méthodes de classe mère.

Prends l'exemple d'une file de véhicules, tu auras une interface "Vehicule" , et plusieurs classes héritières "Voiture" , "Bus" , "Moto" , "Soucoupe_Volante"
Lors d'un virage, la voiture pourra tourner facilement, le bus mettra les autres en porte à faux, la moto se penchera, et la soucoupe volante lévitera en l'air. Tous ces objets auront un comportement différents. Problème, tu veux tous les manipuler dans un container de type file et tu est limité par l'unicité du type de données dans le container : tu utiliseras donc l'interface véhicule.
File (9,Véhicule) = {Voiture, Camion, Voiture, Bus, Moto, Moto, Soucoupe_Volante, Bus, Camion}

Dernière modification par Compte anonymisé (Le 20/05/2017, à 09:06)

#3 Le 22/05/2017, à 08:26

Destroyers

Re : [POO] Principe de responsabilité unique et héritage ?

merci de ta réponse smile

Malheureusement elle ne répond pas trop à ma question x)

Je voulais savoir si, pour appliquer a la lettre le principe de responsabilité unique, il fallait se contenter de redéfinir les méthodes virtuelles dans les classes filles (sans ajouter de nouvelles méthodes), ou non.

Ou alors peut on penser que chaque classe définit un rôle ? c'est a dire que le rôle que définit une classe fille peut être considéré comme indépendant de celui définit par la classe mère ? Et ainsi, même si cette classe fille hérite du rôle de la mère, on considère que c'est chacun son rôle ?

Je sais pas si je suis claire :3

Hors ligne

#4 Le 30/05/2017, à 12:55

d10g3n

Re : [POO] Principe de responsabilité unique et héritage ?

j'ai tendance à penser que les traits sont plus propres que l'héritage multiple. Au passage, ils permettent en parti de résoudre les intérogations philosophiques de Destroyers sur la nature "des rôles":

https://fr.wikipedia.org/wiki/Trait_(programmation)
https://softwareengineering.stackexchan … nheritance

Hors ligne