164 votes

Quelle est la différence entre champ, variable, attribut et propriété dans les POJO de Java ?

Lorsque je me réfère aux variables privées internes des POJO Java qui ont des getters/setters, j'utilise les termes suivants :

  • champ
  • variable
  • attribut
  • propriété

Y a-t-il une différence entre les deux ? Si oui, quel est le terme correct à utiliser ? Y a-t-il un terme différent à utiliser lorsque cette entité est persistante ?

127voto

jahroy Points 10072

D'ici : http://docs.oracle.com/javase/tutorial/information/glossary.html


  • champ

    • Un membre de données d'une classe. Sauf indication contraire, un champ n'est pas statique.

  • propriété

    • Caractéristiques d'un objet que les utilisateurs peuvent définir, comme la couleur d'une fenêtre.

  • attribut

    • Non répertorié dans le glossaire ci-dessus

  • variable

    • Un élément de données nommé par un identifiant. Chaque variable possède un type, tel que int ou Object, et une portée. Voir aussi variable de classe, variable d'instance, variable locale.

38 votes

Je ne comprends toujours pas la différence entre un champ et une propriété ?

1 votes

@KorayTugay - Voyez un champ comme un élément rudimentaire de données lié à un objet. Une propriété (pour moi) est une caractéristique d'un objet qui est visible (et apparemment mutable) pour le monde extérieur.

0 votes

Sur la base de ce qui précède, serait-il juste de dire "Les propriétés et les champs sont les mêmes, sauf qu'une propriété est une réglable champ" ?

108voto

Adam Gent Points 15055

Si, il y en a un.

Variable peut être locale, de terrain, ou constante (bien que cela soit techniquement faux). C'est vague comme attribut. De plus, vous devez savoir que certaines personnes aiment appeler final les variables non statiques (locales ou d'instance)

" Valeurs ". Cela vient probablement des langages FP émergents de la JVM comme Scala.

Champ est généralement une variable privée sur une classe d'instance. Cela ne signifie pas qu'il existe un getter et un setter.

Attribut est un terme vague. Il peut facilement être confondu avec XML ou Java Naming API. Essayez d'éviter d'utiliser ce terme.

Propriété est la combinaison getter et setter.

Quelques exemples ci-dessous

public class Variables {

    //Constant
    public final static String MY_VARIABLE = "that was a lot for a constant";

    //Value
    final String dontChangeMeBro = "my god that is still long for a val";

    //Field
    protected String flipMe = "wee!!!";

    //Property
    private String ifYouThoughtTheConstantWasVerboseHaHa;

    //Still the property
    public String getIfYouThoughtTheConstantWasVerboseHaHa() {
        return ifYouThoughtTheConstantWasVerboseHaHa;
    }

    //And now the setter
    public void setIfYouThoughtTheConstantWasVerboseHaHa(String ifYouThoughtTheConstantWasVerboseHaHa) {
        this.ifYouThoughtTheConstantWasVerboseHaHa = ifYouThoughtTheConstantWasVerboseHaHa;
    }

}

Il existe de nombreuses autres combinaisons, mais mes doigts commencent à fatiguer :)

3 votes

@Chris Thompson C'est ainsi qu'Eclipse l'appelle dans l'une de ses boîtes de dialogue. Hé les gars, c'est Java. Qu'est-ce que je peux vous dire ? Cela n'a pas de sens.

5 votes

@AdamGent JAVA=Just Another Vague Acronym :)

0 votes

@emory Eh bien, c'est le vieil oxymore bien connu. Ce n'est pas spécifique à Java, ce "problème" remonte au moins jusqu'à C et probablement plus loin évidemment, rien ne vous empêche de l'appeler simplement "constant".

5voto

hotshot309 Points 874

Si votre question a été motivée par l'utilisation de JAXB et la volonté de choisir la bonne XMLAccessType J'ai eu la même question. Le JAXB Javadoc dit qu'un "champ" est une variable d'instance non statique et non transitoire. Une "propriété" possède une paire getter/setter (il devrait donc s'agir d'une variable privée). Un "membre public" est public, et est donc probablement une constante. Toujours dans JAXB, un "attribut" fait référence à une partie d'un élément XML, comme dans le cas suivant <myElement myAttribute="first">hello world</myElement> .

Il semble qu'une "propriété" Java, en général, puisse être définie comme un champ possédant au moins un getter ou une autre méthode publique permettant d'obtenir sa valeur. Certaines personnes disent également qu'une propriété doit avoir un setter. Pour des définitions comme celle-ci, le contexte est primordial.

5voto

Mango Points 59

Dietel et Dietel ont une bonne façon d'expliquer les champs par rapport aux variables.

"L'ensemble des variables statiques et des variables d'instance d'une classe sont appelées ses champs." (Section 6.3)

"Les variables doivent être déclarées en tant que champs uniquement si elles doivent être utilisées dans plus d'une méthode de la classe ou si le programme doit sauvegarder leurs valeurs entre les appels aux méthodes de la classe." (Section 6.4)

Les champs d'une classe sont donc ses variables statiques ou d'instance - c'est-à-dire déclarées avec la portée de la classe.

Référence - Dietel P., Dietel, H. - Java™ How To Program (Early Objects), dixième édition (2014).

5voto

vimal krishna Points 31

Si vous prenez l'indice d'Hibernate :

Hibernate lit/écrit l'état de l'objet avec son champ. Hibernate fait également correspondre les propriétés de style Java Bean au schéma de la base de données. Hibernate accède aux champs pour charger/sauvegarder l'objet. Si le mappage est effectué par propriété, Hibernate utilise le getter et le setter.

C'est l'encapsulation qui différencie les moyens où vous avez des getter/setters pour un champ et il est appelé propriété, avec cela et nous cachons la structure de données sous-jacente de cette propriété dans setMethod, nous pouvons empêcher le changement non désiré dans les setters. Tout ce que représente l'encapsulation...

Champs doivent être déclarés et initialisés avant d'être utilisés. Principalement pour un usage interne à la classe.

Propriétés peuvent être modifiées par un setter et sont exposées par des getters. Ici, le champ price a des getter/setters, il s'agit donc d'une propriété.

class Car{
 private double price;
 public double getPrice() {…};
 private void setPrice(double newPrice) {…};
}

<class name="Car" …>
<property name="price" column="PRICE"/>
</class>

De même, en utilisant champs Dans Hibernate, c'est la manière recommandée de MAP en utilisant des champs, où private int id ; est annoté @Id, mais avec Property vous avez plus de contrôle].

class Car{
  private double price;
}
<class name="Car">
<property name=" price" column="PRICE" access="field"/>
</class>

La doc Java dit : Un champ est un membre de données d'une classe. Un champ est une variable d'instance non statique et non transitoire. Le champ est généralement une variable privée sur une classe d'instance.

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