TP n 5 - Correction. IUP2 Année 2004-2005



Documents pareils
INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Programmation avancée et répartie en Java : interfaçage avec d autres langages

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

PROGRAMMATION PAR OBJETS

Remote Method Invocation Les classes implémentant Serializable

as Architecture des Systèmes d Information

Introduction au langage Java

Programmer en JAVA. par Tama

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

Calcul Parallèle. Cours 5 - JAVA RMI

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

TD/TP PAC - Programmation n 3

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

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

Initiation à JAVA et à la programmation objet.

Premiers Pas en Programmation Objet : les Classes et les Objets

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

INITIATION AU LANGAGE JAVA

TD/TP PAC - Programmation n 3

Remote Method Invocation (RMI)

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

TP, première séquence d exercices.

Une introduction à Java

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

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

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 )

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

Corrigé des exercices sur les références

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Programmation par les Objets en Java

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

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

TP1 : Initiation à Java et Eclipse

Cours 1: Java et les objets

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

Corrigés des premiers exercices sur les classes

Threads. Threads. USTL routier 1

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

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

1 Définition d une classe en Java

Package Java.util Classe générique

Programmation Orientée Objet - Licence TIS CM8/9. Rappel sur la séance précédente. Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.

RMI le langage Java XII-1 JMF

JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90.

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

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

Solutions du chapitre 4

Langage Java. Classe de première SI

Introduction à Java. Philippe Genoud.

Java 1.5 : principales nouveautés

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

Chapitre VI- La validation de la composition.

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

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

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

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

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

Bases Java - Eclipse / Netbeans

Remote Method Invocation en Java (RMI)

Chapitre V. Les classes : Object, Vector, etc.

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

Synchro et Threads Java TM

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

Programmation Objet Java Correction

F. Barthélemy. 17 mai 2005

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

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

Java Licence Professionnelle CISII,

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Auto-évaluation Programmation en Java

Java Licence Professionnelle CISII,

Java c est quoi? Java pourquoi?

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Le Modèle de Sécurité dans JAVA

Introduction : les processus. Introduction : les threads. Plan

TP1. Outils Java Eléments de correction

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

Chapitre 10. Les interfaces Comparable et Comparator 1

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

Java 7 Les fondamentaux du langage Java

Développement Logiciel

Programme Compte bancaire (code)

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Utilisation d objets : String et ArrayList

Projet de programmation (IK3) : TP n 1 Correction

Généricité. en Java. (polymorphisme paramétrique) Philippe GENOUD UJF Janvier

Langage à objets : JAVA (1)

Cours 1 : Qu est-ce que la programmation?

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

Programmation avec des objets : Cours 7. Menu du jour

Cours Java Native Interface

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

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

Programmation Par Objets

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

La JVM. La machine virtuelle Java. La JVM. La JVM

Dis papa, c est quoi un bus logiciel réparti?

Utiliser Java sans BlueJ

Transcription:

Université Paris 7 Programmation objet IUP2 Année 2004-2005 TP n 5 - Correction Héritage Exercice 1 Le cas d école modifié 1. Ecrivez une classe Figure. Cette classe a des attributs privés abcisse et ordonnée, ainsi qu une couleur. Les couleurs seront représentées par des objets de la classe java.awt.color. Le constructeur de la classe instanciera chaque attribut privé. Des méthodes publiques permettront d accéder aux valeurs de ces attributs. Vous regarderez la documentation de la classe java.awt.color pour choisir la constante correspondant à votre couleur préférée pour faire un test de votre classe. //Fichier Figure.java public class Figure{ private int abcisse ; private int ordonnee ; private Color couleur ; public Figure(int abcisse, int ordonnee, Color couleur){ this.abcisse = abcisse ; this.ordonnee = ordonnee ; this.couleur = couleur ; public Color getcolor(){ return couleur ; public int getabcisse(){ return abcisse ; public int getordonnee(){ return ordonnee ; return ("abcisse: " + abcisse + " ordonnee: " + ordonnee + " couleur: " + couleur) ; 2. Ecrivez deux classes Cercle et Rectangle qui héritent de Figure. Cercle a un attribut rayon et Rectangle a des attributs hauteur et longueur. Comme d habitude, testez vos classes. //Fichier Cercle.java public class Cercle extends Figure{ private int rayon ; 1

public Cercle( int abcisse, int ordonnee, Color couleur, int rayon ){ super( abcisse, ordonnee, couleur ) ; this.rayon = rayon ; public int getrayon(){ return rayon ; return ( super.tostring() + " rayon: " + rayon ) ; //Fichier Rectangle.java public class Rectangle extends Figure{ private int hauteur ; private int longueur ; public Rectangle( int abcisse, int ordonnee, Color couleur, int hauteur, int longueur ) super( abcisse, ordonnee, couleur ) ; this.hauteur = hauteur ; this.longueur = longueur ; public int gethauteur(){ return hauteur ; public int getlongueur(){ return longueur ; return ( super.tostring() + " hauteur: " + hauteur + " longueur: " + longueur ) ; 3. Ajoutez à Figure une variable de classe privée Vector qui devra référencer toutes les instances de sa classe et de ses sous classes. Comment allez vous remplir ce vecteur? Vous définirez également une méthode publique getinstances() qui permettra d accéder à ce vecteur. //Fichier Figure.java public class Figure{ private static Vector instances = new Vector() ; private int abcisse ; private int ordonnee ; private Color couleur ; public Figure(int abcisse, int ordonnee, Color couleur){ this.abcisse = abcisse ; this.ordonnee = ordonnee ; this.couleur = couleur ; instances.add(this) ; 2

public Color getcolor(){ return couleur ; public int getabcisse(){ return abcisse ; public int getordonnee(){ return ordonnee ; return ("abcisse: " + abcisse + " ordonnee: " + ordonnee + " couleur: " + couleur) ; 4. Cercle et Rectangle redéfinissent cette méthode getinstances() de manière à ne récupérer que les instances qui correspondent à leur type. Il n est pas nécessaire d ajouter un attribut à ces classes ou de modifier leur constructeur. On déduira aisément une solution pour la classe Cercle d une solution pour la classe Rectangle : public static Vector getinstances(){ Vector instancesrectangle = new Vector() ; Vector instances = Figure.getInstances() ; // static pas de super Enumeration e = instances.elements() ; Figure unefigure ; while( e.hasmoreelements()){ unefigure = (Figure) e.nextelement() ; if (unefigure instanceof Rectangle) instancesrectangle.add(unefigure) ; return instancesrectangle ; //Fichier Test.java import java.util.enumeration ; public class Test{ public static void main(string[] argv){ Figure f1 = new Figure(1,1,Color.cyan) ; Figure f2 = new Figure(2,2,Color.cyan) ; Rectangle c3 = new Rectangle(3,3,Color.cyan,3,12) ; Figure f4 = new Figure(4,4,Color.cyan) ; Rectangle c5 = new Rectangle(5,5,Color.cyan,5,10) ; System.out.println("Liste des figures") ; Enumeration e = Figure.getInstances().elements() ; System.out.println(e.nextElement()) ; System.out.println("Liste des Rectangles") ; e = Rectangle.getInstances().elements() ; System.out.println(e.nextElement()) ; 3

Exercice 2 Jouer avec les Applets À côté des applications autonomes qui peuvent être lancées au travers d une JVM par la commande java, il est possible de développer des applications qui seront exécutées sous le contrôle d un navigateur Internet (par exemple netscape ou explorer, ou l application appletviewer) Les applets sont référencées dans les pages HTML sous la forme : <APPLET CODE = Classe.class WIDTH=xxx HEIGHT =xxx> </APPLET> Un applet est une instance d une sous-classe publique de la classe Applet. Pour l utiliser il vous faudra importer java.applet.applet. Cette classe est elle-même une sous classe de la classe Panel qui est un conteneur graphique : cela a pour conséquence immédiate qu une applet dispose d une interface graphique. Contrairement à ce qui se passe pour une application autonome, la définition d un applet ne contient pas de méthode main. Lorsqu une demande d exécution d un applet est formulée, la classe de l applet est automatiquement instanciée avec le constructeur par défaut et la méthode init de cette instance est invoquée. Cette méthode signale que l applet a été chargé. La méthode start est invoquée à son tour par le navigateur. Cela a pour effet de rendre l application active. L invocation de la méthode paint(graphics g) assure la réactualisation du contexte graphique de l applet. Elle sera appelée à chaque fois qu il est nécessaire de redessiner le contenu de l applet (lancement de l applet, redimensionnement du navigateur par exemple). C est cette méthode que nous allons surcharger pour faire de beaux dessins... Pour cela, nous utiliseront les méthodes de la classe Graphics, que vous pourrez appeler à condition d importer java.awt.graphics. Ouvrez d ores et déjà la documentation de cette classe. 1. Créez une classe FigureGraphique qui étend la classe Applet.. Vous redéfinirez la méthode paint : celle ci devra afficher le texte Bonjour le Monde! à l aide de la méthode drawstring de la classe Graphics. Compilez ce fichier à l aide de javac. 2. Créez un fichier d extension html contenant le code permettant d invoquer l applet FigureGraphique. Vous pouvez par exemple y mettre le code suivant : <HTML> <HEAD> <TITLE> Mon oeuvre d art </TITLE> </HEAD> <APPLET CODE = FigureGraphique.class WIDTH=400 HEIGHT =400> </APPLET> 3. Vous pouvez évaluer vos qualités artistiques en exécutant l applet : vous pouvez utiliser pour cela l outil appletviewer ou votre navigateur préféré avec votre fichier html. Dans le cas ou vous utilisez un navigateur, forcez le rechargement de l image car des paramètres de cache peuvent vous empêcher de voir les différences entre deux exécutions de l applet. 4

4. Cherchez dans la documentation de la classe Graphics les méthodes qui vous permettront de dessiner des cercles et des rectangles de couleur. Modifiez votre classe FigureGraphique. Un attribut vecteur de Figure (exercice précédent) sera initialisé par le constructeur avec des cercles et des rectangles. La méthode paint permettra de les dessiner à l écran. import java.awt.graphics ; import java.applet.applet ; import java.util.enumeration ; public class FigureGraphique extends Applet{ private Vector figures ; public FigureGraphique(){ figures = new Vector() ; figures.add(new Rectangle(100,100,Color.cyan,75,50)) ; figures.add(new Rectangle(200,100,Color.green,50,75)) ; figures.add(new Cercle(100,200,Color.red,50)) ; figures.add(new Cercle(200,200,Color.pink,50)) ; public void paint(graphics g){ g.drawstring("salut le monde!",50,50) ; Enumeration e = figures.elements() ; Figure f ; f = (Figure) e.nextelement() ; if (f instanceof Cercle){ g.setcolor(f.getcouleur()) ; int r = ((Cercle) f).getrayon() ; g.filloval(f.getabcisse(), f.getordonnee(), r, r) ; if (f instanceof Rectangle){ g.setcolor(f.getcouleur()) ; g.fillrect(f.getabcisse(), f.getordonnee(), ((Rectangle) f).gethauteur(), ((Rectangle) f).getlongueur()) ; 5