Programmation par objets. Objets et Classes

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

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

Premiers Pas en Programmation Objet : les Classes et les Objets

Chapitre VI- La validation de la composition.

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

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Chapitre 2. Classes et objets

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

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

Initiation à JAVA et à la programmation objet.

TP1 : Initiation à Java et Eclipse

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

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

Java c est quoi? Java pourquoi?

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

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

as Architecture des Systèmes d Information

Projet Active Object

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

IFT2255 : Génie logiciel

Une introduction à Java

Programmation par les Objets en Java

Cours 1: Java et les objets

INITIATION AU LANGAGE JAVA

Programmation en Java IUT GEII (MC-II1) 1

Langage Java. Classe de première SI

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

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

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

Java Licence Professionnelle CISII,

Objets et Programmation. origine des langages orientés-objet

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

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

Projet de programmation (IK3) : TP n 1 Correction

Cycle de vie du logiciel. Unified Modeling Language UML. UML: définition. Développement Logiciel. Salima Hassas. Unified Modeling Language

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

Chapitre 10. Les interfaces Comparable et Comparator 1

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

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

Université de Bangui. Modélisons en UML

I. Introduction aux fonctions : les fonctions standards

Programmer en JAVA. par Tama

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

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

Projet gestion d'objets dupliqués

Utilisation d objets : String et ArrayList

ACTIVITÉ DE PROGRAMMATION

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

Programmation Orientée Objet en C#

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

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 )

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Ingénierie des Modèles. Méta-modélisation

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

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

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

1.6- Génération de nombres aléatoires

Applet pour visualiser les variables «automate» notifiées

et Programmation Objet

Programmation Par Objets

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

UE Programmation Impérative Licence 2ème Année

Programmation Orientée Objet

Exercices sur les interfaces

OCL - Object Constraint Language

Corrigés des premiers exercices sur les classes

Environnements de développement (intégrés)

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C mars.10 Cours 4 11.mai.10 Cours C++ 2

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

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

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

1 Définition d une classe en Java

Bases Java - Eclipse / Netbeans

Programmation Orientée Objet application au langage Java Version Novembre 2007

TP1 : Initiation à Java et Eclipse

Design patterns. Design patterns - définition. Design patterns - avantages

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

Package Java.util Classe générique

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

Algorithmique et Programmation, IMA

Threads. Threads. USTL routier 1

Programmation avec des objets : Cours 7. Menu du jour

RMI le langage Java XII-1 JMF

Support de cours et TD Programmation Orientée Objet

RTDS G3. Emmanuel Gaudin

Java DataBaseConnectivity

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

Traduction des Langages : Le Compilateur Micro Java

Chapitre I : le langage UML et le processus unifié

Corrigé des exercices sur les références

UML Diagramme de communication (communication diagram) Emmanuel Pichon 2013

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

Apprendre Java en 154 minutes

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

4. Groupement d objets

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Transcription:

Programmation par objets Objets et Classes

Notions du cours comprendre les principes des classes et des objets les constructeurs de classe la méthode tostring() attributs public et private méthodes et variables statiques et d instances

Introduction aux objets La programmation par objets est une méthode qui fonde la structure des programmes autour des objets Chaque objet peut être considéré comme un fournisseur de services utilisés par d autres objets, les clients Un objet peut être à la fois fournisseur et client Les services offerts par les objets sont : des données qui sont nommées attributs des actions (cf fonctions) qui sont nommées méthodes Important : chaque objet n est pas décrit individuellement, la POO fournit une construction la classe qui décrit les objets possédant les mêmes propriétés

Classes et objets int i; la variable i est de type primitif entier Personne p; la variable p est de type Personne (qui est une classe) Une classe est une combinaison de types primitifs et éventuellement d autres classes. Par exemple, la classe Personne peut contenir un nom de type String, age de type int et la variable adresse. adresse peut être elle-même une classe qui contient des éléments comme : nom de rue, numéro dans la rue, Un objet est une instance de classe. Par exemple ici, p est une Personne Les noms de classes commencent par une majuscule (TOUJOURS)

Différences classes/objets les classes sont des descriptions ou encore des squelettes des objets. Ce ne sont pas des objets en tant que tels Les classes sont des «moules» servant à créer des objets La déclaration d une classe ne crée aucun objet Les objets sont créés à partir des classes, on parle alors d instances de classes. L opération de création d un objet à partir d une classe est aussi appelée instanciation Les objets (instances) créés possède tous les attributs et (méthodes) de la classe dont ils sont issus Les objets sont différents les uns des autres (chaque rectangle a a priori une longueur et largeur différente)

Les classes en Java La syntaxe de déclaration des classes en Java est la suivante : public class Rectangle { public double largeur, longueur ; La création d un objet se fait par le mot-clef new et son initialisation grâce à un constructeur dont le nom est celui de la classe Rectangle r = new Rectangle() Note : nous avons déjà vu des classes Random toto = new Random()

Exemple de classe La déclaration d une classe correspond à la déclaration d un nouveau type. Par exemple, la classe Rectangle décrit des objets de type Rectangle qui contiennent deux attributs de type réel : longueur et largeur Note : il est d usage (en particulier en Java) de commencer les classes par une majuscule Rectangle - largeur : réel - longueur : réel

Instanciation d objets Les attributs de l objet prennent des valeurs initiales données par un constructeur. Pour chaque classe, il existe un constructeur par défaut en pseudo-code : variable r type Rectangle créer Rectangle() crée une instance de la classe Rectangle avec comme identificateur r. (cf page suivante). Les attributs sont initialisés à 0 par le constructeur. Attention : l affectation d objets de type classe ne fonction pas comme les données élémentaires. L affectation q r affecte à q la référence de l objet désigné par r. q et q correspondent au même objet

Illustration Rectangle r largeur = 0.0 longueur = 0.0 Rectangle r largeur = 0.0 longueur = 0.0 q

Les classes en Java L accès aux attributs de fait en Java par l utilisation de la notation pointée vue précédemment. L autorisation d accès aux attributs se fait par la notation pointée vue précédemment grâce au mot-clef public ou private (accès restreint aux objets de la classe) Par convention, l objet courant est désigné par this. this.largeur ou largeur désignent le même attribut de l objet courant chaque objet possède un attribut this qui est une référence à lui-même (nous reviendrons sur ce concept) Un attribut précédé du mot-clef static le rend partagé par tous les objets de la classe

Accès aux attributs L accès à un attribut est valide si ce dernier existe, c est-àdire s il a été créé au préalable. Cet accès se fait simplement en le nommant Dans une classe, toute référence aux attributs définis dans la classe elle-même s applique à l instance courante de l objet, que l on appelle objet courant L accès aux attributs d autres objets de fait par une notation pointée de la forme n.a, où n est un nom qui désigne l objet, et a un attribut particulier Par défaut, nous considérons que tous les attributs d une classe sont privés et ne sont pas directement accessibles. Les attributs accessibles seront explicitement nommés public

Exemple classe Rectangle public largeur, longueur type réel finclasse Rectangle déclaration explicite d accès public des attributs de la classe Rectangle variable r type Rectangle créer Rectangle() Pour accéder aux attributs : r.largeur r.longueur Rectangle + largeur : réel + longueur : réel Dans notre cours, les attributs ne seront jamais publics

Les méthodes Le second type de service offert par un objet à ses clients est un ensemble d opérations sur les attributs. Ces opérations sont appelées méthodes. Pour toutes les instances d une même classe, il n existe qu un exemplaire de chaque méthode de la classe ( attributs) On peut rapprocher le principe des méthodes aux fonctions qui ne s appliquent que sur des objets d une classe donnée Comme dans le cas des attributs, les méthodes peuvent être publiques (public) ou privées (private)

Ajout de méthodes à la classe Rectangle public class Rectangle { /* les attributs */ largeur, longueur : double ; /* les méthodes */ public double périmètre() { return 2*(largeur + longueur) ; public double surface() { return largeur * longueur ; Rectangle - largeur : réel - longueur : réel + périmètre() : réel + surface() : réel cf : méthode Point de la classe java

Utilisation en Java Déclaration d une variable de type Rectangle (ie instanciation d un objet de type Rectangle) Rectangle r1 = new Rectangle() ; Calcul du périmètre et de la superficie p = r1.perimetre() ; s = r1.surface() ; Les méthodes peuvent bien sûr accepter des paramètres (cf plus loin)

Surcharges de méthode Les méthodes peuvent avoir des en-têtes différentes bien qu elles aient le même nom, elles sont considérées comme distinctes et dites surchargées La notion de surcharge est importante en POO Attention, elle peut être source d erreurs

Ajout de méthodes à la classe Rectangle classe Rectangle /* les attributs */ largeur, longueur type réel /* les méthodes */ public fonction périmètre() : réel retourner 2x(largeur + longueur) finfonc public fonction surface() : réel retourner largeur x longueur finfonc finclasse Rectangle Rectangle - largeur : réel - longueur : réel + périmètre() : réel + surface() : réel cf : méthode Point de la classe java

Notion de constructeur Nous avons déjà vu que lors de la construction d un objet (instanciation), les attributs étaient initialisés à des valeurs par défaut, grâce à un constructeur par défaut ; il est possible et très commun de redéfinir le constructeur par défaut ; exemple pour la classe Rectangle.

Constructeur de Rectangle classe Rectangle public largeur, longueur type réel constructeur Rectangle() largeur 1 longueur 1 fincons { les méthodes... finclasse Rectangle

suite Bien souvent, il est souhaitable de proposer plusieurs constructeurs. Par exemple, un second constructeur pour permettre de choisir explicitement les attributs d un «rectangle» constructeur Rectangle() largeur 1 longueur 1 fincons constructeur Rectangle(lar, long : réel) largeur larg longueur long fincons Rectangle - largeur : réel - longueur : réel + Rectangle() + Rectangle(larg,long) + périmètre() : réel + surface() : réel

Utilisation Rectangle r1 = new Rectangle() ; Rectangle r2 = new Rectangle(3.0,2.0) ; r1 est de taille 1x1 r2 est de taille 3x2

Traduction en Java public class Rectangle { private double largeur, longueur; // les constructeurs public Rectangle(){ largeur = longueur = 1.0; public Rectangle(double larg, double long){ largeur = larg; longueur = long; // les méthodes public double perimetre(){ return 2.0*(largeur + longueur); public double surface(){ return largeur*longueur; Rectangle - largeur : réel - longueur : réel + Rectangle() + Rectangle(larg,long) + périmètre() : réel + surface() : réel

Attributs partagés Chaque objet possède ces attributs (chaque rectangle a une largeur et longueur différentes) Il est possible de partager un attribut dit attribut de classe pour toutes les instances d une classe dans le cas de la classe Rectangle, un tel attribut peut être par exemple le nombre de côtés On utilisera dans le cas du pseudo-code, le mot-clef partagé Rectangle - largeur : réel - longueur : réel partagé nbcôté : entier

Accesseurs / Modificateurs En général, on évite de modifier directement les attributs à l extérieur du programme ; On utilise plutôt le principe d encapsulation (c est-à-dire que l on utilise une méthode pour positionner un attribut) // accesseurs - modificateurs public void changerlongueur(double lg){ longueur = lg; public void changerlargeur(double lg){ largeur = lg; public double getlongueur(){ return longueur; Rectangle - largeur : réel - longueur : réel + Rectangle() + Rectangle(larg,long) + périmètre() : réel + surface() : réel + changerlongueur(lg) + changerlargeur(lg) + getlongeur() : réel

Encapsulation Mécanisme de protection des membres d'un objet, en limitant leur visibilité / accessibilité privé : visible de la classe publique : visible/accessible de partout protégé : visible de la classe et des classes enfants package : visible des classes du même package

Paradigme objets et notation UML La notation UML (Unified Modeling Language), issue de l'omg (Object Management Group) un langage base sur un meta - modèle un ensemble de diagrammes qui permettent la représentation visuelle d'un système selon différents angles aspects statiques du système (description) aspects dynamiques du système (comportements) La notion de classe décrit les objets du système : classe, membres attributs et méthodes communs à une classe d'objets des relations entre classes objet, instance d'une classe, un exemplaire particulier Le diagramme de classes représente l'aspect statique d'un système

Notation graphique UML

Autre exemple un dé Rappel : les classes contiennent : des variables que l'on appelle des attributs des fonctions permettant d'interagir sur les attributs que l'on appelle des méthodes les attributs sont en général «private». Cela signifie que personne en dehors de la classe ne peut y accéder. Le monde extérieur interagit sur les attributs de classe par l'intermédiaire des méthodes public class De{ private int valeurdé; public void setvalue(int value){ valeurdé = value; public int getvalue(){ return valeurdé;

Interface de la classe private: int valeurdé public : void setvalue(int) int getvalue() interface de classe classe Dé

Remarques Ces méthodes présentées ici qu'on appelle des accesseurs et modificateurs n'ont a priori pas à être utilisées ici il faut s'interroger : que doit faire notre classe? si on veut simuler un dé, il faut s'y prendre autrement Notes : les accesseurs sont des méthodes pour obtenir la valeur d'un attribut les modificateurs permettent de les positionner

Une meilleure implémentation public class Dé{ private int valeurdé; public void lancedé(){ valeurdé = getrandomvaleurdé(); public int getvalue(){ if(valeurdé >=1 && valeurdé <=6){ return valeurdé; else { return -1; private int getrandomvaleurdé() { return (int) (Math.random() * 6 + 1);

Créer et utiliser des objets Créer un nouveau dé Dé de = new Dé() ; Lancement du dé (et positionnement de l attribut valeurde) de.lancerdé() ; Obtention de la valeur du dé System.out.println(de.getValue()) ;

Notes sur les constructeurs Les constructeurs sont des méthodes particulières qui ne sont appelées que lors de la création de l objet. Ce sont donc des méthodes. Un constructeur n a pas de type de retour, même pas void. Le(s) constructeur(s) a(ont) exactement le même nom que la classe Les constructeurs sont en général de type public Les méthodes de type constructeurs ne sont jamais appelées directement. Elles sont appelées par l intermédiaire du motclef new. A l intérieur de la classe, les constructeurs peut appeler un autre constructeur en utilisant le mot-clef this.

public class Dé{ private int valeurdé; public Dé(){ lancerde(); public Dé(int value){ dievalue = value; private int getrandomdievalue() { return (int) (Math.random() * 6 + 1);... Il y a ici deux constructeurs pour la classe Dé Dans le deuxième constructeur, value est le paramètre formel qui sera affecté à l attribut valeurdé

Exemple d utilisation des Dé d1 = new Dé(3); constructeurs System.out.println(d1.getValue()); Die d2 = new Dé(); System.out.println(d.getValue()); for(int i = 0; i<50; i++){ d2.lancerdé(); System.out.println(d2.getValue()); L utilisation de new permet l appel au constructeur Nous créons deux dés par l utilisation de deux constructeurs d1 et d2 cf De.java

Quelques rappels Jusqu à maintenant : créer un nouveau dé Dé d = new Dé() ; lancer le dé et positionner sa valeur d.lancerdé() ; obtenir la valeur du dé System.out.println(d.getValue()) ; si... l attribut valeurdé avait été public (mais pour nous ce ne sera jamais le cas) System.out.println(d.valeurDé) ; ou encore pire d.valeurdé = 6 ; pourquoi est-ce dangereux?

Attributs d instances dans la classe Rectangles, les variables largeur et longueur sont des variables d instance Cela signifie que les attributs largeur et longueur sont créés pour chaque objet de type Rectangle. Si on crée 10 objets de type Rectangle, on créera 10 variables largeur et longueur (qui auront des valeurs a priori différentes) Par exemple pour la classe Dé, si l attribut valeurdé était public, pour le modifier pour l objet de, il suffirait d écrire de.valeurde = 6 ; (on ne le fera pas bien entendu) si l attribut est privé, on utilisea de.lancerdé() ;

Attributs de classe (ou partagés) Les attributs de classe sont associés à la classe et non individuellement aux objets de la classe on utilise le mot-clef static devant un attribut pour indiquer qu il est partagé par toute la classe quelques exemples d attributs statiques : nombre d objets créés dans la classe (très classique cf exercice) constantes (taille max et min du rectangle par exemple) variables globales utilisées par les objets

Méthodes d instances / de classes Comme pour les attributs, il est possible d avoir des méthodes d instance ou de classe Une méthode de classe est appelée sur la classe et non sur les objets Elle est introduite comme pour un attribut de classe par le mot-clef static. Pour l appeler, on appelle le nom de la classe suivi du nom de la méthode. Ex : Math.abs() méthode de classe calculant la valeur absolue d un nombre de la classe Math

Exercices Créer une classe Etudiant nom, prénom :chaînes de caractères année de naissance : entier tableau de 20 notes nbnotes entier indiquant le nombre de notes jusqu à présent Écrire la classe avec ses attributs (en Java) Écrire deux constructeurs un avec nom, prénom un avec nom, prénom et année de naissance les constructeurs initialiseront tous le tableau de notes à 0 ainsi que la variable nbnotes Écrire les méthodes suivantes :

Exercices moyenne : pour calculer la moyenne des notes max qui retournera la meilleure note min qui retournera la note la plus faible -ajouternote(int n) : pour ajouter la note n à l étudiant -anneenaissance : méthode qui retourne l année de naissance de l étudiant Écrire un programme qui affiche la nouvelle moyenne d'un étudiant à chaque entrée d'une nouvelle note Écrire un programme principal qui à partir de deux étudiants dit lequel est le plus vieux utilisation des attributs de classe (static) : utiliser les attributs de classe pour conserver le numéro d ordre de l étudiant (étudiant n 1, n 2,...)