Déclaration et Implémentation d'une classe



Documents pareils
Chapitre 2. Classes et objets

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Généralités sur le Langage Java et éléments syntaxiques.

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Chapitre 10. Les interfaces Comparable et Comparator 1

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Structurer ses données : les tableaux. Introduction à la programmation

Java Licence Professionnelle CISII,

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Premiers Pas en Programmation Objet : les Classes et les Objets

Programmer en JAVA. par Tama

Programmation Orientée Objet Java

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

TD/TP PAC - Programmation n 3

Héritage presque multiple en Java (1/2)

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Java c est quoi? Java pourquoi?

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

TP1 : Initiation à Java et Eclipse

Une introduction à Java

Cours 1: Java et les objets

Initiation à JAVA et à la programmation objet.

Langage Java. Classe de première SI

Programmation par les Objets en Java

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Programmation en Java IUT GEII (MC-II1) 1

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

as Architecture des Systèmes d Information

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

Corrigés des premiers exercices sur les classes

I. Introduction aux fonctions : les fonctions standards

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

INITIATION AU LANGAGE JAVA

Traduction des Langages : Le Compilateur Micro Java

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

TD3: tableaux avancées, première classe et chaînes

2 e édition JAVA 5 et 6. Jérôme Bougeault. TSoft et Groupe Eyrolles, 2003, 2008, ISBN :

TD/TP PAC - Programmation n 3

Utilisation d objets : String et ArrayList

Cours Programmation Système

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Cours d initiation à la programmation en C++ Johann Cuenin

Application web de gestion de comptes en banques

Chapitre 1 : Introduction aux bases de données

Génie Logiciel avec Ada. 4 février 2013

Auto-évaluation Programmation en Java

alg - Classes, instances, objets [oo] Exercices résolus

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Projet gestion d'objets dupliqués

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Exercices INF5171 : série #3 (Automne 2012)

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Programmation par composants (1/3) Programmation par composants (2/3)

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

.NET - Classe de Log

PROGRAMMATION PAR OBJETS

1 Définition d une classe en Java

et Programmation Objet

Programmation Orientée Objet

2 Grad Info Soir Langage C++ Juin Projet BANQUE

Chapitre VI- La validation de la composition.

Applet pour visualiser les variables «automate» notifiées

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Apprendre Java en 154 minutes

Tp 1 correction. Structures de données (IF2)

Module.NET 3 Les Assemblys.NET

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Java Licence Professionnelle CISII,

La technologie Java Card TM

Cours 14 Les fichiers

COMPARAISONDESLANGAGESC, C++, JAVA ET

Bases de programmation. Cours 5. Structurer les données

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Diagramme de classes

Machines virtuelles fonctionnelles (suite) Compilation ML Java

C++ - Classes, instances, objets [oo] Exercices résolus

Plan Pédagogique du cours

Introduction à JDBC. Accès aux bases de données en Java

Programmation Orientée Objet en C#

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Compression de Données - Algorithme de Huffman Document de Conception

Les chaînes de caractères

Corrigé des exercices sur les références

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Plan du cours. Historique du langage Nouveautés de Java 7

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

UE C avancé cours 1: introduction et révisions

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Transcription:

Définir et Instancier une classe en Java Déclaration et Implémentation d'une classe En algorithmique (comme en C++ la plupart du temps), l'écriture du corps des méthodes (implémentation) se fait après la déclaration de la classe. En java au contraire, l'implémentation et la déclaration de la classe ne peuvent pas être séparées. Etudions la syntaxe de la définition d'une classe en Java à travers l'exemple compte: class Compte //attributs private int numero; private String nom; private double solde; //définition des méthodes public void Init(int UnNumero, String UnNom) public void Crediter(double Montant) solde = solde + Montant; public void Debiter(double Montant) solde = solde Montant; public double GetSolde( ) return solde; //fin de la classe Chaque membre (attribut ou méthode) est précédé par un modificateur d'accès private ou public - private veut dire que le membre est encapsulé, inaccessible de l'extérieur de l'objet - public veut dire que le membre fait partie de l'interface, accessible de l'extérieur (Remarque: il existe d'autres modificateurs que l'on verra plus tard) Passage de paramètres: en Java, les variables de type primitif sont toujours passées par valeur et les objets sont toujours passés par référence. Il n'y a pas de signe indiquant la nature du passage de paramètre. 1

Gestion des variables simples et des objets En java, il existe trois types de variables : - les variables primitives qu on qualifiera «simples» qui sont de l un des 8 types primitif (char, short, int, byte, float, long, double, boolean) - les objets, c est-à-dire les variables dont le type est une classe - les références aux objets, qui sont des sortes de pointeurs Les variables simples contiennent directement leur valeur. Elles sont déclarées simplement dans la pile. (Remarque: en Java, on ne peut pas construire de variables simples dans le tas.) variable valeur Les objets en revanche sont contenu dans le tas (impossible de les déclarer dans la pile). Ils ne sont pas déclarés mais alloués dynamiquement. Pour y accéder, il faut passer par un pointeur spécial qu on appelle référence. Une référence est donc un pointeur qui désigne un objet et qui permet de le manipuler. (Remarque : il est impossible de définir une référence à une variable simple ou à une autre référence, contrairement au C++). Une référence est déclarée dans la pile. référence objet Valeurs des attributs de l objet Au niveau de leur manipulation, références et pointeurs sont totalement différents. Utiliser une référence est bien plus simple que d utiliser un pointeur. En fait, une fois l'instanciation réalisée, une référence peut quasiment être confondue avec l'objet qu'elle désigne. - on ne peut pas accéder à l'adresse mémorisée dans une référence (pas d'opérateur &, pas d'arithmétique sur les pointeurs) - pour accéder à l'objet référencé, il n'y a pas de déréférencement à réaliser (pas d'opérateur * ni ->). L'accès à l'objet est direct par sa référence. C est une des raisons majeures pour lesquelles Java est plus simple que C++. Instanciation Rappelons qu'un objet est une instance de classe et que l'instanciation consiste à créer un objet à partir d'une classe (comme faire un gâteau à partir d'un moule). Une classe peut bien entendu servir à créer plusieurs instances (objets). 2

Comme les objets sont contenus dans le tas, on ne peut pas déclarer un objet comme on déclare une variable simple. Un objet en Java doit toujours être créé dynamiquement avec l opérateur new. Il faut d abord déclarer une référence à un objet du type voulu puis créer (construire) l objet grâce à l opérateur new, comme en C++. Ex: Soit une classe Personne Voilà comment créer un objet toto de type Personne. Personne toto; //toto est une référence sur un objet de classe Personne toto = new Personne( ); //un nouvel objet de type Personne est créé //et l'adresse du nouvel objet est affectée à toto On pourrait simplifier l écriture en une seule ligne : Personne toto = new Personne( ); En C++, on déclarerait un pointeur pour créer dynamiquement un objet: Personne * toto; toto = new Personne( ); //ou en une ligne : Personne* toto = new Personne( ) ; Voyez la grande ressemblance entre les deux écritures: la seule différence c'est qu'en C++, la variable toto est précédée d'une * pour spécifier que c'est un pointeur sur une Personne. Et ensuite, en C++, il faudrait déréférencer le pointeur (par * ou ->) afin d accéder à l objet. Rien de tel en Java. En Java, il n'y a pas d'opérateur spécial pour signifier que la variable déclarée est une référence. C est le compilateur qui reconnaît s il s agit d une variable simple ou d une référence : - si le type est primitif, la variable déclarée est «simple» et contenue dans la pile - si le type est une classe, automatiquement la variable déclarée est une référence sur un objet de la classe et il faudra ensuite construire un objet qui sera désigné par cette référence. Nous avons dit qu'une fois instanciés, un objet peut être confondu avec sa référence. En réalité, il faut toujours avoir en tête que ce que l'on manipule, ce sont des références à des objets et pas directement les objets. Ainsi il faut se méfier, notamment lorsqu'on veut copier un objet dans un autre objet. Si on réalise une simple affectation, on ne va pas créer une copie mais on va faire pointer une autre référence sur le même objet! Ex: Compte UnCompte; Compte UnAutreCompte; UnCompte = new Compte; UnAutreCompte = UnCompte; 3

Les constructeurs Rappel: Un constructeur est une méthode particulière qui est appelée automatiquement à la création d'un objet et qui permet d'initialiser correctement cet objet. En java, les objets ne peuvent être crées que par allocation dynamique. Le constructeur est appelé lors de l'allocation de l'objet par new (et non lors de la déclaration de la référence). Un constructeur se reconnaît facilement en Java: - il porte le même nom que la classe - il n'a pas de type de retour (même pas void) On peut évidemment définir plusieurs constructeurs pour une même classe, s'ils ont une signature différente. Modification de la classe compte : la méthode Init est remplacée par deux constructeurs: class Compte //attributs private int numero; private String nom; private double solde; //définition des méthodes public Compte(int UnNumero, String UnNom) //premier constructeur public Compte (int UnNumero, String UnNom, double SoldeInitial) //deuxième constructeur solde = SoldeInitial; public void Crediter(double Montant) solde = solde + Montant; public void Debiter(double Montant) solde = solde Montant; public double GetSolde( ) return solde; //fin de la classe 4

Pour créer un compte, on a deux manières Compte cpte1 = new Compte(135, "Dupont"); //instanciation avec appel du premier constructeur Compte cpte2 = new Compte(159, "Martin", 1500); //instanciation avec appel du 2 constructeur Si aucun constructeur n'est défini explicitement, le compilateur en créé un quand même. Ce constructeur défini par défaut ne comporte pas de paramètres et initialise tous les attributs à leur valeur nulle (0 pour les variables numériques, NULL pour les références, "" pour les chaînes de caractère, ). Mais dès lors qu'un constructeur est défini explicitement, le compilateur n'en créé pas d'autre. L'utilisateur est obligé, à l'instanciation, de passer les paramètres requis par l'un des constructeurs explicite. Mais le concepteur de la classe peut créer son propre constructeur par défaut (c'est-à-dire sans paramètres). Même lorsque l'instanciation ne comporte aucun paramètre (appel du constructeur par défaut s'il existe), il faut mettre les parenthèses. Ajoutons un constructeur par défaut à la classe Compte public Compte() // constructeur par défaut numero = 0; nom = "inconnu"; On peut alors instancier un objet de type Compte de la façon suivante: Compte un_compte = new Compte( ); Instanciation d'un objet = déclaration de la référence + allocation en mémoire + construction (appel d'un constructeur) 5