5 votes

Question Sur les principes de la POO

public class Car 
{
  public char color;

  public char getColor()
  {        
    return color;    
  }    

  public void setColor(char color)
  {       
    this.color = color;    
  }
}

public class MyCar
{  
    private Car car = null;     

    public MyCar()
    {
        this.car = new Car();
        car.color = 'R';
    }
}

Quel principe OOP le code ci-dessus viole-t-il ?
• Abstraction • Encapsulation • Polymorphisme • Aucun des options ci-dessus

Je comprends que l'Encapsulation est la réponse à ce problème. Juste pour savoir si une autre option est également vraie.

6voto

Jon Skeet Points 692016

Eh bien, je le verrais de cette façon :

  • Encapsulation : en permettant un accès direct au color field, la classe Car expose un détail d'implémentation. Ignacio a montré qu'il ne considère pas ce type de violation comme de l'encapsulation, mais du masquage de données - ma propre vision du mot "encapsulation" est qu'elle inclut le masquage de données. Cela montre simplement comment ces mots peuvent être utilisés de différentes manières.

  • Polymorphisme : à en juger par les noms MyCar et Car, ils devraient potentiellement implémenter une interface commune ou avoir une classe de base commune. En tout cas, les classes données ne peuvent pas être utilisées de manière polymorphique.

  • Abstraction : je soutiendrais que l'utilisation de char comme abstraction pour une couleur est inappropriée. Que ce soit une violation de l'abstraction ou non dépend encore une fois de ce que vous entendez par "violation de l'abstraction".

0voto

Joshua Kaplan Points 494

Si public char color; était plutôt private char color;, ce serait un exemple d'encapsulation. Cela est dû au fait que dans votre version actuelle du code, la valeur est définie immédiatement, ce qui est un détail d'implémentation. Par exemple, vous pourriez décider d'ajouter une validation - autoriser uniquement les caractères en majuscules. En permettant à la variable color d'être définie directement, cette validation ne pourrait pas être effectuée.

0voto

Savino Sguera Points 2527

La dissimulation de l'information est violée dans Car.

Je pense que les autres principes sont formellement respectés, c'est-à-dire rien ne m'empêche d'avoir une classe MyCar enveloppant la classe Car si les deux classes ne sont pas destinées à être utilisées polymorphiquement.

On pourrait soutenir que c'est juste une mauvaise conception, et je serais d'accord.

Il en va de même pour l'utilisation de char comme couleur : c'est probablement une mauvaise conception, mais à mon avis rien formellement contre les principes de la POO.

0voto

bharatj Points 1

À mon avis, "La dissimulation des données" est violée. En exposant les détails internes de la classe Car (couleur), vous les rendez publics et n'importe qui peut les modifier avec des valeurs valides ou invalides. Maintenant, regardons le principe de la POO de Encapsulation : il n'est pas violé, car les données sont conservées dans un conteneur fermé de manière propre, ici la classe, et les informations sur la voiture ne sont pas dispersées ici et là.

0voto

Sonu Rajpoot Points 425

Conformément au concept de POO, votre code viole la masquage de données. Parce que vous déclarez une variable publique au niveau de la classe et l'utilisez dans une méthode de la même classe. Et si vous violez le masquage de données, cela signifie que vous violez également l'encapsulation.

public class Car 
{
   public char color;

   public char getColor()
   {        
     return color;    
   }    

   public void setColor(char color)
   {       
     this.color = color;    
  }
 }

Dans le code ci-dessus, vous violez le concept de masquage de données. Parce que la variable color est directement accessible en dehors de la classe. L'encapsulation est également violée par le code ci-dessus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X