Classes et objets Java

1. Vue d'ensemble

Dans ce rapide didacticiel, nous examinerons deux blocs de construction de base du langage de programmation Java: les classes et les objets. Ce sont des concepts de base de la programmation orientée objet (POO), que nous utilisons pour modéliser des entités réelles.

En POO, les classes sont des plans ou des modèles pour les objets. Nous les utilisons pour décrire des types d'entités.

D'autre part, les objets sont des entités vivantes, créées à partir de classes. Ils contiennent certains états dans leurs champs et présentent certains comportements avec leurs méthodes.

2. Classes

En termes simples, une classe représente une définition ou un type d'objet. En Java, les classes peuvent contenir des champs, des constructeurs et des méthodes.

Voyons un exemple utilisant une classe Java simple représentant une voiture :

class Car { // fields String type; String model; String color; int speed; // constructor Car(String type, String model, String color) { this.type = type; this.model = model; this.color = color; } // methods int increaseSpeed(int increment) { this.speed = this.speed + increment; return this.speed; } // ... } 

Cette classe Java représente une voiture en général. Nous pouvons créer tout type de voiture de cette classe. Nous utilisons des champs pour contenir l'état et un constructeur pour créer des objets à partir de cette classe.

Chaque classe Java a un constructeur vide par défaut. Nous l'utilisons si nous ne fournissons pas d'implémentation spécifique comme nous l'avons fait ci-dessus. Voici comment le constructeur par défaut rechercherait notre classe Car :

Car(){} 

Ce constructeur initialise simplement tous les champs de l'objet avec leurs valeurs par défaut. Les chaînes sont initialisées à null et les entiers à zéro.

Maintenant, notre classe a un constructeur spécifique car nous voulons que nos objets aient leurs champs définis lorsque nous les créons:

Car(String type, String model) { // ... } 

Pour résumer, nous avons écrit une classe qui définit une voiture. Ses propriétés sont décrites par des champs, qui contiennent l'état des objets de la classe, et son comportement est décrit à l'aide de méthodes.

3. Objets

Alors que les classes sont traduites pendant la compilation, les objets sont créés à partir des classes au moment de l'exécution .

Les objets d'une classe sont appelés instances, et nous les créons et les initialisons avec des constructeurs:

Car focus = new Car("Ford", "Focus", "red"); Car auris = new Car("Toyota", "Auris", "blue"); Car golf = new Car("Volkswagen", "Golf", "green"); 

Maintenant, nous avons créé différents objets Car , tous à partir d'une seule classe. C'est le but de tout, de définir le plan en un seul endroit, puis de le réutiliser plusieurs fois dans de nombreux endroits.

Jusqu'à présent, nous avons trois objets Car , et ils sont tous garés car leur vitesse est nulle. Nous pouvons changer cela en appelant notre méthode d' augmentationSpeed :

focus.increaseSpeed(10); auris.increaseSpeed(20); golf.increaseSpeed(30); 

Maintenant, nous avons changé l'état de nos voitures - elles se déplacent toutes à des vitesses différentes.

De plus, nous pouvons et devons définir le contrôle d'accès à notre classe, ses constructeurs, ses champs et ses méthodes. Nous pouvons le faire en utilisant des modificateurs d'accès, comme nous le verrons dans la section suivante.

4. Modificateurs d'accès

Dans les exemples précédents, nous avons omis les modificateurs d'accès pour simplifier le code. Ce faisant, nous avons en fait utilisé un modificateur package-private par défaut. Ce modificateur autorise l'accès à la classe depuis n'importe quelle autre classe du même package.

Habituellement, nous utilisons un modificateur public pour les constructeurs afin d'autoriser l'accès à partir de tous les autres objets:

public Car(String type, String model, String color) { // ... } 

Chaque champ et méthode de notre classe aurait également dû définir le contrôle d'accès par un modificateur spécifique. Les classes ont généralement des modificateurs publics , mais nous avons tendance à garder nos champs privés .

Les champs contiennent l'état de notre objet, c'est pourquoi nous voulons contrôler l'accès à cet état. Nous pouvons garder certains d'entre eux privés et d'autres publics . Nous y parvenons avec des méthodes spécifiques appelées getters et setters.

Jetons un coup d'œil à notre classe avec un contrôle d'accès entièrement spécifié:

public class Car { private String type; // ... public Car(String type, String model, String color) { // ... } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public int getSpeed() { return speed; } // ... } 

Notre classe est marquée comme publique , ce qui signifie que nous pouvons l'utiliser dans n'importe quel package. De plus, le constructeur est public , ce qui signifie que nous pouvons créer un objet à partir de cette classe à l'intérieur de n'importe quel autre objet.

Nos champs sont marqués comme privés , ce qui signifie qu'ils ne sont pas accessibles directement depuis notre objet , mais nous leur fournissons un accès via des getters et des setters.

Les champs type et modèle n'ont pas de getters et de setters, car ils contiennent des données internes de nos objets. Nous ne pouvons les définir que via le constructeur lors de l'initialisation.

En outre, la couleur peut être consultée et modifiée, tandis que la vitesse ne peut être consultée, mais pas modifiée. Nous FORCÉES ajustements de vitesse grâce spécialisés publics méthodes increaseSpeed () et decreaseSpeed () .

En d'autres termes, nous utilisons le contrôle d'accès pour encapsuler l'état de l'objet.

5. Conclusion

Dans cet article, nous avons passé en revue deux éléments de base du langage Java, des classes et des objets, et montré comment et pourquoi ils sont utilisés. Nous avons également présenté les bases du contrôle d'accès et démontré son utilisation.

Pour apprendre d'autres concepts du langage Java, nous vous suggérons de lire l'héritage, le super mot-clé et les classes abstraites comme étape suivante.

Le code source complet de l'exemple est disponible à l'adresse over sur GitHub.