Ma compréhension est la suivante, et je ne dis pas que c'est 100% correct, je pourrais aussi bien me tromper
A variable est quelque chose que vous déclarez, qui peut par défaut changer et avoir des valeurs différentes, mais qui peut aussi être dit explicitement comme étant définitif. En Java, ce serait :
public class Variables {
List<Object> listVariable; // declared but not assigned
final int aFinalVariableExample = 5; // declared, assigned and said to be final!
Integer foo(List<Object> someOtherObjectListVariable) {
// declare..
Object iAmAlsoAVariable;
// assign a value..
iAmAlsoAVariable = 5;
// change its value..
iAmAlsoAVariable = 8;
someOtherObjectListVariable.add(iAmAlsoAVariable);
return new Integer();
}
}
Donc, fondamentalement, une variable est tout ce qui est déclaré et qui peut contenir des valeurs. La méthode foo ci-dessus renvoie une variable par exemple . Elle renvoie une variable de type Integer qui contient l'adresse mémoire du nouveau Integer() ; Tout ce que vous voyez ci-dessus sont aussi des variables, listVariable, aFinalVariableExample et expliqué ici :
Un champ est une variable dont la portée est plus claire (ou concrète). La portée de la variable retournée par la méthode foo n'est pas claire dans l'exemple ci-dessus, donc je ne l'appellerais pas un champ. D'autre part, iAmAlsoVariable est un champ "local", limité par la portée de la méthode foo, et listVariable est un champ "d'instance" où la portée du champ (variable) est limitée par la portée des objets.
Une propriété est un champ auquel on peut accéder ou qu'on peut modifier. Tout champ qui expose un getter / setter est une propriété.
Je ne connais pas l'attribut et je tiens également à répéter que c'est ma compréhension de ce que sont les variables, les champs et les propriétés.