Même si cela ressemble à une novoyal, la base de la programmation orientée objet est l’objet. Dans la vie réelle, tous les objets ont une série de fonctionnalités et de comportements. Par exemple, une porte a une couleur, une forme, des dimensions, un matériau … (Profitez d’une série de fonctionnalités) et peut être ouverte, fermé … (a un comportement). Dans la programmation orientée objet, un objet est une combinaison de données et de routines spécifiques pouvant fonctionner avec ces données. Donc, les deux types de composants d’un objet sont les suivants:
- champs ou attributs: composants d’un objet qui stockent les données. Ils sont également appelés variables de membre. Ces données peuvent être de type primitif (
boolean, int, double, char...
) ou, à son tour, d’autres types d’objet (ce qu’on appelle l’agrégation ou la composition d’objets). L’idée est qu’un attribut représente une certaine propriété d’un objet. - routines ou méthodes: il s’agit d’un composant d’un objet qui effectue une action ou une autre tâche avec les attributs. En principe, toutes les variables et toutes les routines d’un programme Java doivent appartenir à une classe. En fait, en Java, il n’ya aucune notion de programme principal et les sous-programmes n’existent pas comme des unités modulaires indépendantes, mais font toujours partie de certaines classes.
9.1 classes
Une classe représente l’ensemble d’objets qui partagent une structure et un comportement communs. Une classe est une combinaison spécifique d’attributs et de procédés et peut être considéré comme un type de données de tout type non primitif. Ainsi, une classe est une sorte de modèle d’objets ou de prototype: définit les attributs qui composent ce type d’objets et de méthodes pouvant être utilisés pour fonctionner avec ces objets. Bien que, d’autre part, une classe peut également être composée de méthodes statiques qui n’ont pas besoin d’objets (tels que des classes intégrées aux chapitres précédents contenant une méthode statique main
). La déclaration d’une classe suit la syntaxe suivante:
Convention des programmeurs en Java: Les identificateurs des classes doivent être simples , descriptif et de fond et, dans le cas des noms de composés, avec la première lettre de chacune des lettres majuscules. Il est pratique d’utiliser les mots complets et d’éviter les acronymes, à moins que l’abréviation soit beaucoup plus utilisée que la forme non abrégée que dans l’URL ou HTML.
9.2 instances
une instance est Un élément tangible (occupe la mémoire lors de l’exécution du programme) généré à partir d’une définition de classe. Tous les objets utilisés dans un programme doivent appartenir à une classe donnée.
Bien que le terme soit parfois utilisé de manière imprécise, un objet est une instance d’une classe prédéfinie dans Java ou déclarée par l’utilisateur et référencée par une variable qui stocke votre adresse mémoire. Lorsqu’il est dit que Java n’a pas de pointeurs, il est simplement indiqué que Java n’a aucun pointeur que le programmeur peut voir, car toutes les références d’objet sont en fait des pointeurs de la représentation interne.
En général, accès Aux attributs se fait via l’opérateur de points, qui sépare l’identifiant de la référence d’identificateur d’attribut (idReferencia.idAtributo
). Les appels vers les méthodes d’exécution des différentes actions sont effectués en séparant les identificateurs de la référence et de la méthode correspondante avec l’opérateur de points (idReferencia.idMetodo(parametros)
).
simple Exemple de classe et d’instance
Le code suivant montre la déclaration de la classe Precio
. La classe Precio
consiste en un attribut unique (euro
) et deux méthodes: une valeur qui attribue à l’attribut (pone
) sans retourner une valeur et une autre qui renvoie la valeur de l’attribut (da
).
graphiquement, une classe peut être représentée comme un rectangle.
Figure 9.1 Représentation graphique de la classe Precio
Le code précédent peut être compilé:
$>javac Precio.java
générant le fichier byTecodes Precio.class
. Ce fichier n’est pas directement exécutable par l’interprète, car le code source n’inclut aucune méthode principale (main
).Afin de tester le code précédent, un autre fichier peut être construit avec le code source ci-dessous:
/** * Ejemplo de uso de la clase Precio */public class PruebaPrecio { public static void main (String args ) { Precio p; // Crea una referencia de la clase Precio p = new Precio(); // Crea el objeto de la clase Precio p.pone(56.8); // Llamada al metodo pone // que asigna 56.8 al atributo euros // Llamada al metodo da que devuelve el valor de euros System.out.println("Valor = " + p.da()); Precio q = new Precio(); // Crea una referencia y el objeto q.euros=75.6; // Asigna 75.6 al atributo euros System.out.println("Valor = " + q.euros); }}
Figure 9.2 Représentation graphique de la Espace mémoire utilisé par les références et les instances de la classe Precio
lors de l’exécution de la méthode main
de la classe PruebaPrecio
Explication de l’exemple précédent
Pour pouvoir fonctionner avec des objets, vous devrez suivre un processus en deux étapes. La première chose à faire du programme est de créer une référence ou un pointeur de la classe Precio
avec l’identifiant p
. Semblable à la façon dont une variable d’un type primitif est déclaré, la déclaration d’identification de référence est faite avec la syntaxe:
identificadorClase identificadorReferencia;// En el ejemplo anterior: Precio p;
Figure 9.3 Création de la référence p
ou pointeur,p
, il est comme une mission de stocker l’adresse de la mémoire de (point A) des composants de l’instance qui n’a pas encore été créée ou référencée. A ce moment-là, il est dit que la référencep
, rénovée, stocke une adresse mémoire nulle (qui ne correspond à aucun objet) ou . La deuxième étape du processus de fonctionnement avec des objets conduit à la création d’une nouvelle instance référencée parp
, qui se fait avec la déclaration:
Figure 9.4 Création de la nouvelle instance de la classe Precio
référencée par p
Cette opération est également appelée instanciation. Bien que les deux opérations précédentes (création de la référence et de la création de l’instance référencée) puisse être effectuée conjointement dans la même ligne de code:
identificadorClase identificadorReferencia = new identificadorClase();// En el codigo del ejemplo anterior: Precio q = new Precio();
Figure 9.5 Création de la référence q
et la nouvelle instance de la classe Precio
référencée par q
Le résultat de l’exécution du code précédent est deux nouvelles instances de la classe Precio
référencée respectivement par p
et q
. L’attribut euro de chacune des nouvelles instances de la classe Precio
est accessible par l’identificateur de référence et l’opérateur point (p.euros
et ). Les méthodes da
et
appartenant à la classe Precio
sont accessibles via l’identifiant de la Référence et l’opérateur de points (p.da()
et p.pone(56.8)
et q.da()
et
, respectivement). Dans le cas des méthodes, l’instance par laquelle l’appel correspondant est apporté comme paramètre implicite ou argument de la méthode.
Si une référence à une autre est attribuée par une déclaration d’affectation, elles ne sont pas copiées Les valeurs des attributs, mais qu’une seule instance visait à deux références différentes. Par exemple:
q = p; // Ahora p y q referencian al mismo objeto
Figure 9.6 Résultat de l’affectation de valeurs entre les références
dans ce cas. Que se passe-t-il avec l’instance précédemment référencée par q
? Ladite instance est laissée sans référence (inaccessible). Cela peut être un problème dans certaines langages de programmation, tels que le cas de Pascal ou C, qui utilise des variables dynamiques et qu’ils doivent libérer explicitement l’espace dans la mémoire réservé aux variables qui vont arrêter d’être référencées. La gestion dynamique de la mémoire est généralement une tâche fastidieuse pour le programmeur et à la prolifération des erreurs d’exécution. Pour éviter de tels inconvénients, Java vous permet de créer autant d’instances que souhaité (avec la seule limitation de la mémoire capable de gérer le système), sans que le programmeur doive s’inquiéter de la destruction ou de les libérer quand ils ne sont plus nécessaires.L’environnement d’exécution Java élimine automatiquement les instances lorsqu’il détecte qu’ils ne seront pas utilisés (lorsqu’ils cesseront d’être référencés). Ce processus s’appelle la collection de déchets ou la collection (collection de déchets).
9.3 Modificateurs de visibilité
Le modificateur indique que le composant de la La méthode est accessible en dehors du code de la classe auquel appartient le composant de l’opérateur de points. Le modificateur private
indique que le composant n’est accessible que par les méthodes de la classe elle-même. Le modificateur protégé sera vu plus tard. Dans le code suivant, l’attribut est déclaré euros
avec le modificateur private
Si un autre code est construit qui tente d’utiliser directement l’attribut euros
:
Une erreur de compilation se produira:
depuis l’attribut euros
est accessible uniquement via les méthodes de méthode da
et pone
> Utilisation du modificateurprivate
sert à mettre en oeuvre l’une des caractéristiques de programmation orientées objet: la dissimulation d’informations ou d’encapsulation. Strictement parlant, la Déclaration en tant que public d’un attribut d’une classe ne respecte pas ce principe de dissimulation de l’information. Les décrit comme privés, vous n’avez pas d’accès direct aux attributs de l’objet en dehors du code de classe correspondant et ne peut être accédé indirectement que par les méthodes fournies par la classe elle-même. L’un des avantages pratiques de forcer l’utilisation d’une méthode pour modifier la valeur d’un attribut est de garantir la cohérence de l’opération. Par exemple, une méthode qui assigne la valeur à l’attributeuros
d’un objet de la classePrecio
peut garantir qu’une valeur négative ne sera pas attribué.
9,4 classes nichées et internes
Une classe B peut être définie comme membre d’une autre classe A. La structure syntaxique est la suivante:
class ClaseA { ... class ClaseB { ... }}
Il est dit que ClaseB
est une classe donnée dans le . La classe imbriquée ne peut être utilisée que dans la classe de conteneurs. Ce type de classes ne sont construits que lorsque la classe imbriquée n’est utilisée que ou a du sens dans la classe de conteneurs. La classe imbriquée peut être déclarée comme static
. Dans ce cas, la classe imbriquée est appelée classe nichée statique. Sinon, il s’appelle la classe interne.
9.5 L’instance de l’opérateur de
L’opérateur instanceof
retourne true ou false si un objet appartient ou non une classe donnée. Syntaxe: