Salut, Amigo ! J'aimerais te parler de la structure interne des variables. Comme tu le sais déjà, chaque variable est associée à une zone de mémoire où sa valeur est stockée. »

« Oui. Tu m'en avais parlé la dernière fois. »

« Parfait. C'est bien que tu t'en souviennes. Je poursuis. »

« Tous les types composites sont constitués de types plus simples. Et ces derniers sont eux-mêmes constitués de types encore plus simples. On finit par se retrouver avec des types primitifs, qui ne peuvent pas être simplifiés davantage. C'est ainsi qu'on les appelle : types primitifs. Par exemple, int est un type primitif, mais String est un type composite qui stocke ses données sous forme de tableau de caractères (où chaque caractère a le type primitif char). »

« Très intéressant. Continue. »

« Les types composites sont formés en regroupant des types plus simples. Ces types sont ce que nous appelons des classes. Lorsque nous définissons une nouvelle classe dans un programme, nous déclarons un nouveau type de données composite. Ses données seront soit d'autres types composites soit des types primitifs. »

Code Java Description
public class Person
{
   String name;
   int age;
}
Un nouveau type composite est déclaré : Person.
Ses données sont stockées dans la variable String (type composite) name et la variable int (primitive) age
public class Rectangle
{
   int x, y, width, height;
}
Un nouveau type composite est déclaré : Rectangle.
Il se compose de quatre variables int (type primitif).
public class Cat
{
   Person owner;
   Rectangle territory;
   int age;
   String name;
}
Un nouveau type composite est déclaré : Cat. Il dispose des variables suivantes :
owner, du type composite Person
territory, du type composite Rectangle
age, du type primitif int
name, du type composite String

« Pour l'instant tout est clair, même si ça me semble un peu tordu. »

« Les gros types (composites) contiennent de nombreux petits types (primitifs). C'est pourquoi les objets de ce type prennent une grande quantité de mémoire, plus que les variables des types primitifs. Parfois beaucoup plus. Effectuer des opérations d'affectation pour de telles variables prenait autrefois beaucoup de temps et nécessitait de copier de grandes sections de mémoire. C'est pourquoi les variables de types composites ne stockent pas l'objet lui-même, mais plutôt une référence à cet objet, c'est-à-dire son adresse à quatre octets. C'est assez pour désigner les données de ces objets. La machine Java se charge de toutes les complexités associées. »

« Là, par contre, je n'ai rien compris. »

« Plus tôt, nous avons comparé une variable à une boîte. Si tu veux stocker le numéro 13 dedans, tu peux écrire 13 sur une feuille de papier et la mettre dans la boîte. »

« Mais imagine que tu as besoin de stocker quelque chose de plus gros dans la boîte (variable). Disons, un chien, une voiture ou ton voisin. Au lieu d'essayer de mettre quelque chose qui ne rentrera jamais dans ta boîte, tu peux faire quelque chose de plus facile : utilise une photo de ton chien au lieu de ton compagnon à quatre pattes, une plaque d'immatriculation au lieu d'une vraie voiture, ou un numéro de téléphone au lieu de ton voisin. »

« Nous prenons un morceau de papier et écrivons le numéro de téléphone de ton voisin. C'est comme une référence à un objet. Si nous copions le morceau de papier avec le numéro de téléphone de ton voisin dessus et que nous le mettons dans plusieurs boîtes, tu auras de nouvelles références à ton voisin. Mais tu n'as toujours qu'un seul voisin. Tu comprends ? »

« Une caractéristique importante du stockage de données avec cette méthode est que tu peux avoir de nombreuses références à un seul objet »

« C'est super intéressant ! J'ai presque compris. Redis-moi une dernière fois : que se passerait-il si j'affectais une variable d'un type composite à une autre variable du même type composite ? »

« Alors les deux variables stockeraient la même adresse. Cela signifie que si tu modifies les données de l'objet référencé par une variable, tu modifies aussi les données référencées par l'autre. Les deux variables font référence au même objet. Bien sûr, il peut y avoir beaucoup d'autres variables qui stockent également des références vers cet objet. »

« Que font les variables de type composite (référence/classe) si elles ne possèdent pas de référence vers un objet ? Est-ce seulement possible ? »

« Oui, Amigo. Tu vas plus vite que moi avec ta question. C'est possible. Si une variable de type référence (composite) ne stocke pas une référence vers un objet, elle stocke ce qu'on appelle une 'référence null'. En gros, ça veut dire qu'elle référence un objet dont l'adresse est 0. Cependant, la machine Java ne crée jamais d'objet à cette adresse, dont elle sait toujours que si une variable de référence contient 0, elle ne pointe vers aucun objet. »

Code Java Description
String s;
String s = null;
Déclarations équivalentes.
Person person;
person = new Person();
person = null;
Nous créons une variable personne dont la valeur est null.
Nous lui affectons l'adresse d'un objet Personne nouvellement créé.
Nous affectons null à la variable.
Cat cat = new Cat();
cat.owner = new Person();
cat.owner.name = "God";
Nous créons un objet Chat et stockons son adresse dans la variable chat ; chat.proprietaire a la valeur null.
Nous définissons chat.proprietaire sur l'adresse d'un objet Personne nouvellement créé.
chat.proprietaire.nom a toujours la valeur null.
Nous définissons chat.proprietaire.nom sur « Dieu »

« Est-ce que j'ai bien compris ? Les variables sont divisées en deux types : les types primitifs et les types de référence. Les types primitifs stockent directement des valeurs, tandis que les types de référence stockent une référence vers un objet. Les types primitifs comprennent int, char, boolean et bien d'autres. Les types de référence incluent tout le reste. Nous utilisons des classes pour les créer. »

« C'est tout à fait exact, mon garçon. »

« Alors comme ça tu penses avoir tout compris. Voici quelques missions pour t'aider à consolider tes connaissances. »

1
Mission
Syntaxe Java,  niveau 2leçon 2
Bloqué
Calculer la circonférence d'un cercle
Bon, on a un plan. Mettons-le en œuvre. D'abord, implémentons une méthode qui calcule la circonférence d'un cercle. Pour cela, tu dois écrire la bonne formule dans la méthode et spécifier les arguments. Mais que fait-on avec pi, qui comme chacun le sait vaut 3,141592... et une infinité de décimales ? Faisons simple, et optons pour pi = 3.14.
7
Mission
Syntaxe Java,  niveau 2leçon 2
Bloqué
Notre premier convertisseur !
Tu as probablement déjà utilisé à de nombreuses reprises des convertisseurs électroniques ou des programmes pour convertir la quantité d'une unité dans une autre unité. Par exemple des euros en dollars ou des kilomètres en miles. Aujourd'hui, c'est nous qui allons écrire ce genre d'outil. Plus précisément, nous allons écrire un programme qui convertit des degrés Celsius en degrés Fahrenheit.
3
Mission
Syntaxe Java,  niveau 2leçon 2
Bloqué
D'où vient une Personne ?
En Java, les personnes viennent du même endroit que les autres classes : de la tête du programmeur. Il est essentiel que le créateur d'une classe réfléchisse à ce qui est important pour la classe et ce qui ne l'est pas. S'il le fait, alors la classe sera logique et utile. Commençons. Créons une classe Personne qui permet à notre Personne d'avoir un nom, un âge, un poids... et de l'argent. Ensuite, nous allons créer un objet.
3
Mission
Syntaxe Java,  niveau 2leçon 2
Bloqué
Relations familiales
Un programmeur peut créer un homme et une femme de quelques gestes habiles de ses doigts. C'est fastoche : nous allons écrire les classes appropriées et créer des objets. Travaillons sur un couple marié : nous allons créer des objets Homme et Femme, puis enregistrer une référence à la Femme dans homme.epouse et une référence à l'Homme dans femme.mari. Tu vois ? Même pas besoin d'un certificat de mariage.
3
Mission
Syntaxe Java,  niveau 2leçon 2
Bloqué
Augmentation de salaire
Il est bon d'être programmeur : ton salaire augmentera rapidement. Et si ça ne se produit pas, tu peux faire évoluer la situation grâce à un petit coup de pouce de tes amis pirates. Imaginons que tu as accès au système de paie automatisé. Tu dois écrire une méthode d'interception qui ajoutera 1000 $ à chaque versement de salaire.
1
Mission
Syntaxe Java,  niveau 2leçon 2
Bloqué
Fonctions de calculatrice
Demandons à l'ordinateur de compter pour nous ! C'est à ça qu'ils servent en premier lieu, après tout. Pour cette mission, nous demandons à l'ordinateur de calculer la somme et le produit de deux nombres. Tout est extrêmement simple : nous déclarons des variables int, leur affectons une valeur, les ajoutons et multiplions, et affichons enfin le résultat.