4 votes

POO, concept d'objet

Selon la définition standard, un objet est une entité qui contient à la fois des données et un comportement. D'après ce que j'ai compris, les données sont envoyées de l'extérieur. Par exemple, nous avons une classe qui calcule le carré d'un nombre. Nous créons une instance et envoyons un message, avec le nombre, à l'objet pour calculer le carré. N'envoyons-nous pas les données de l'extérieur ? Pourquoi toutes les définitions précisent-elles que l'objet contient les données ? Merci

3voto

Nazar Merza Points 1106

Les données, dans ce contexte, sont l'état de l'objet. La définition indique que l'état/les données de l'objet doivent être stockés en interne. Par exemple, considérons la classe suivante :

class Math {

  Double square(double x) {
      return x * x;
  }
  // other similar functions
}

En tant que construction linguistique, c'est une classe. Mais, ce n'est pas une vraie classe au sens orienté objet. Parce qu'elle n'a pas d'état ou de données. C'est juste une fonction enveloppée dans une construction de classe. Ce n'est pas nécessairement faux. Parce que dans ce cas, il arrive que vous ayez des opérations qui n'ont pas besoin d'état.

Ce que la définition essaie de souligner est que : vous avez un objet réel, quand il (ou sa classe) a à la fois des données et un comportement. Toutes les utilisations de la construction de classe ne représentent pas un véritable objet.

Par conséquent, vous avez un objet si la classe qui le représente satisfait aux trois conditions suivantes.

  1. La classe a l'état/date. Si ce n'est pas le cas, alors c'est juste un tas de fonctions. Ce n'est pas orienté objet, c'est procédural.
  2. La classe a un comportement. Si ce n'est pas le cas, alors elle n'est qu'un conteneur, un tas de variables ( Structures en C).
  3. Non seulement la classe a un état/données et un comportement/méthodes, mais il existe une relation intrinsèque entre les données et le comportement. Ce qui signifie qu'il ne suffit pas de jeter quelques variables et fonctions ensemble pour créer un véritable objet. Par exemple, si vous avez un état/données et une méthode dans la classe, mais que cette fonction n'a pas besoin d'agir sur l'état, on peut se demander si cette méthode appartient vraiment à la classe.

Vous trouverez ci-dessous un exemple simple de ce que je pense être une classe (représentation d'un objet) appropriée.

Class Patient {
      // blood pressure
     double systolic;
     double diastolic;
     double weight;
      int age;
     public Patient(double systolic,   double diastolic,  double weight, int age){

    }

   Public boolean isHealthy(){
        // do some calculations and algorithms on age, weight and blood pressure indicators.
        // return result as true of false
  }

}

Ici, nous voyons que la classe a à la fois un état et un comportement. Nous voyons également que l'état et le comportement appartiennent réellement à cette classe. Ils sont des propriétés du concept de patient. Nous voyons en outre que l'opération a une relation intrinsèque avec les données. Vous ne pouvez pas décider si le patient est en bonne santé ou non, sans consulter/utiliser son état.

1voto

Sindico Points 1623

Je pense que le problème vient de votre exemple qui ne correspond pas à une conception orientée objet. Je veux simplement dire que le calcul du carré d'un nombre est une fonction sans mémoire, donc il n'y a évidemment aucune raison de stocker des données dans les propriétés de l'objet. Cependant, lorsque vous aurez à gérer des entités à état, vous comprendrez plus facilement l'importance des classes et de l'orientation objet en général.

0voto

icepack Points 11261

Votre exemple est un cas privé où l'objet n'a pas besoin de contenir des données (c'est-à-dire l'état). Dans ce cas, il peut être remplacé par une fonction (juste le comportement). La plupart des objets ont besoin de stocker des données. Par exemple, un objet Personne devrait contenir les qualités décrivant la personne, et pas seulement son comportement éventuel.

0voto

Amir Points 1983

Un objet est une instance d'une classe.

La classe (a, a*a) est une classe carrée mais (2, 4) en est une instance (objet). Oui, les données sont envoyées à la classe et créent un nouvel objet.

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