La programmation orientée objet de la Terminologie: la classe, attribut, propriété, domaine, membre de données
Je commence l'étude de la POO et je veux savoir ce qui constitue une classe. Je suis un peu confus sur la façon vaguement certains éléments de base sont utilisés et, ainsi, ajouter à ma confusion.
J'ai regardé le C++ de la classe, la classe java et je veux savoir assez pour écrire mon propre pseudo classe pour m'aider à comprendre.
Par exemple dans cet article j'ai lu ce (.. attribut de classe (ou classe, propriété, domaine, ou le membre de données)
J'ai vu plutôt bien découpés questions qui montrent qu'il existe une différence entre les propriétés de la classe et de la classe de terrain par exemple Quelle est la différence entre un Champ et une Propriété en C#?
Selon quelle langue je suis étudiant, c'est la définition de
- Propriété
- Champs
- Variables de classe
- Attributs
différente de la langue?
Vous devez vous connecter pour publier un commentaire.
"Champs", "variables de classe", et "attributs" sont plus ou moins le même - un faible niveau de emplacement de stockage attachée à un objet. Chaque langue de la documentation peut utiliser un autre terme, de façon constante, mais la plupart des programmeurs utilisent de manière interchangeable. (Cependant, cela signifie aussi que certains de ces termes peuvent être ambigus, comme "variable de classe" - qui peut être interprété comme une "variable d'une instance d'une classe donnée", ou "une variable de la classe de l'objet lui-même" dans une langue où les objets de la classe sont quelque chose que vous pouvez manipuler directement.)
"Propriétés" sont, dans la plupart des langues que j'utilise, quelque chose de complètement différent - ils sont un moyen d'associer des comportements à la lecture /écriture d'un champ. (Ou le remplacer.)
Donc en Java, l'exemple canonique serait:
(À noter qu'en Java, une propriété
foo
est une paire de méthodes d'accès appelégetFoo()
etsetFoo()
- ou tout simplement de la lecture si la propriété est en lecture seule.)Une autre façon de voir cela est que les "propriétés" sont un abstraction - une promesse par un objet de permettre aux appelants d'obtenir ou de définir un élément de données. Alors que les "champs", etc. sont l'un des mise en œuvre de cette abstraction. Les valeurs de
getRadius()
ougetCircumference()
dans l'exemple ci-dessus pourrait être stockés directement, ou ils pourraient être calculé, il n'est pas question pour l'appelant; les setters pourrait ou ne pourrait pas avoir des effets secondaires; il n'est pas question pour l'appelant.Je suis d'accord avec vous, il y a beaucoup de confusion inutile en raison de la loose définitions et l'utilisation incohérente de nombreux OO termes. Les termes que vous avez à demander environ sont utilisés un peu de façon interchangeable, mais on pourrait dire que certains sont plus générales que d'autres (par ordre décroissant): la Propriété -> Attributs -> Variables de Classe -> les Champs.
Les passages suivants, extraits de "l'Analyse Orientée Objet et des Design" par Grady Booch aider à clarifier le sujet. Tout d'abord, il est important de comprendre le concept de l'etat:
De la programmation orientée objet est assez générique à propos de certains de nomenclature, car il varie fortement d'une langue à l'autre:
Mais la notation introduite par l'auteur est précis:
En résumé:
Propriété est un large concept utilisé pour désigner une caractéristique particulière d'une classe, englobant à la fois de ses attributs et de ses relations aux autres classes.
Attribut désigne une partie d'un ensemble d'objets, et est donc utilisé au cours de l'analyse, ainsi que le design d'exprimer une singulière propriété de la classe.
Variable de classe est un attribut défini dans une classe dont un seul exemplaire existe, quel que soit le nombre d'instances de la classe existe. Donc, toutes les instances de cette classe de part sa valeur ainsi que de sa déclaration.
Champ est un langage de terme spécifique pour variable d'instance, c'est-à-dire, un attribut dont la valeur est spécifique à chaque objet.
J'ai été faire de la programmation orientée objet depuis plus de 20 ans, et je trouve que souvent, les gens utilisent des mots différents pour désigner les mêmes choses. Ma compréhension est que les champs, les variables de classe et les attributs signifient tous la même chose. Toutefois, la propriété est décrite par le stackoverflow lien que vous avez inclus dans votre question.
Généralement des champs, des méthodes, des méthodes statiques, des propriétés, des attributs et des classes (ou des variables statiques) ne change pas la langue de base... Même si la syntaxe va probablement changer par la langue de base, ils seront fonction de la façon dont vous vous attendez à travers les langues (attendez-vous à des termes tels que les champs de données/membres à être interchangeables à travers les langues)
En C#....
Un champ est une variable qui n'existe que pour une instance d'une classe.
par exemple.
Champs ont une "visibilité", ce qui détermine ce que d'autres classes peuvent voir le terrain, ainsi dans l'exemple ci-dessus d'un champ privé ne peuvent être utilisées par la classe qui le contient, mais la propriété de l'accesseur fournit accéder en lecture seule sur le terrain par les sous-classes.
Une propriété vous permet d'obtenir (parfois appelé un accesseur) ou de l'ensemble (parfois appelé un mutateur) la valeur de champ... les Propriétés vous permettent de faire un certain nombre de choses, de prévenir l'écriture d'un champ par exemple à partir de l'extérieur de la classe, modifier la visibilité du champ (par exemple, privé/protégé/public). Un mutateur permet de fournir une certaine logique personnalisée avant de définir la valeur d'un champ
Ainsi les propriétés sont plus comme des méthodes pour obtenir/définir la valeur d'un champ, mais de fournir plus de fonctionnalités
par exemple.
Une classe ou d'une variable statique est une variable qui est la même pour toutes les instances d'une classe..
Ainsi, par exemple, si vous vouliez une description de classe que la description serait la même pour toutes les instances de la classe et peut être consulté par l'utilisation de la classe
par exemple.
Je serais prudent lors de l'utilisation de la terminologie liée à un attribut. En C# c'est une classe qui peut être appliquée à d'autres classes ou des méthodes par la "décoration" de la classe ou de la méthode, dans d'autres contexte, il peut simplement se référer à un champ d'une classe contient.
Certaines langues n'ont pas de "Attributs" comme C# (voir ci-dessus)
J'espère que tout fait sens... Ne veux pas de surcharge de vous!
Tout d'abord, vous devez sélectionner une langue. Par exemple, je voudrais vous recommandons de sélectionner le Rubis de la langue et de la communauté. Jusqu'à ce que vous sélectionnez une langue, vous ne pouvez pas échapper à la confusion, comme les différentes communautés utilisent des termes différents pour les mêmes choses.
Par exemple, ce qui est connu comme
Module
en Ruby, Java sait que classe abstraite. Ce qui est connu comme attributs dans certaines langues, est connu commeinstance variables
en Ruby. Je recommande Ruby surtout pour sa logique et bien conçu de la programmation orientée objet système.Écrire ce qui suit dans un *.rb fichier, ou sur la ligne de commande dans de la cisr (interactive interpréteur Ruby):
Maintenant que vous avez une classe, vous pouvez créer un instance de:
Vous venez de créer une instance, d'un chien de la classe Chien, et de les stocker dans la constante
Seamus
. Maintenant, vous pouvez jouer avec elle:Comme pour vos autres questions de terminologie, "propriété" ou "attribut" est compris comme "variable" en Ruby, presque toujours une variable d'instance. Et comme pour le terme "membre de données", tout simplement l'oublier. Le terme "champ" n'est pas vraiment utilisé en Ruby, et "variable de classe" en Ruby signifie quelque chose de très rarement utilisée, ce qui vous certainement n'avez pas besoin de savoir à ce moment.
Afin de conserver le monde de nice et de vous montrer que la POO est vraiment simple et indolore, en Ruby, laissez-nous créer un attribut, ou, dans le Rubis de la terminologie, une variable d'instance de
Dog
classe. Comme nous le savons, chaque chien a un certain poids, et de différents chiens peuvent avoir des poids différents. Ainsi, lors de la création d'un nouveau chien, on demandera à l'utilisateur de nous dire chien poids:Rappelez-vous, avec Ruby (ou Python), les choses sont simples.
J'ai découvert dans ma question que les Propriétés définies dans .Net sont juste une commodité de la syntaxe du code, et qu'ils ne sont pas liés à des variables sous-jacentes à tous (sauf pour les Propriétés Implémentées automatiquement, bien sûr). Donc, en disant: "quelle est la différence entre les propriétés de la classe et de la classe de terrain", c'est comme dire: quelle est la différence entre une méthode et un attribut. Pas de différence, l'un est code et les autres données. Et, ils n'ont pas besoin d'avoir quelque chose à voir les uns avec les autres.
Il est vraiment dommage que les mêmes mots, comme "attribut" et "propriété", sont ré-utilisés dans les différentes langues et les idéologies ont radicalement différentes significations. Peut-être que quelqu'un a besoin de définir un objet-orienté langue à parler des concepts de la programmation orientée objet? UML?