Contenu | Rechercher | Menus

Annonce

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Pour en savoir un peu plus sur l'équipe du forum.

Appel à contributeurs pour la doc.

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.

#1 Le 19/05/2017, à 10: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


-Asus X53S -core i7-2630QM 2GHz (booster 800MHz)
-NVidia GT540M 2Go technologie Optimus
-RAM 4Go -disque dur 750Go 5400 RPM
-Dual boot (linux/windows7)

Hors ligne

#2 Le 20/05/2017, à 10: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, à 10:06)

#3 Le 22/05/2017, à 09: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


-Asus X53S -core i7-2630QM 2GHz (booster 800MHz)
-NVidia GT540M 2Go technologie Optimus
-RAM 4Go -disque dur 750Go 5400 RPM
-Dual boot (linux/windows7)

Hors ligne

#4 Le 30/05/2017, à 13: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