LIFI-Java 2004 Séance du Mercredi 29 sept. Cours 4.

Slides:



Advertisements
Présentations similaires
Spécialisation/généralisation Héritage Polymorphisme.
Advertisements

Spécialisation/généralisation Héritage Polymorphisme
1 Quelques précisions sur l'héritage. 2 Signification de super.f() appel à la méthode f() masquée super : désigne l'objet appelant comme s'il était de.
Approfondissement du langage
1 Tableaux des objets C++ si on connaît le nombre dobjets nécessaires davance on peut utiliser des tableau dobjets dans les fonctions dusage class Personne.
POO.
Introduction aux IHM et à la réflexivité Java Vos premiers pas en Swing.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Exercice 1 1 (père) et 1 (fils) 1 (père) et 0 (fils)
Les fonctions en Java Partie I Le type void. Dans cette rapide présentation, je vais expliquer :.à quoi servent les fonctions.à quoi faut-il penser avant.
CYCLE 6 : FONCTIONS FONCTIONS avec paramètres en Entrée 1- Pourquoi les FONCTIONS peuvent échanger des données en E entre elles ? 2- Comment écrire des.
J’aime les couleurs.
1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif.
Classes locales classes définies à l'intérieur d'un bloc de code,
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
POO-L3 H. Fauconnier1 Chapitre IV 1. classe Object, clonage 2. interfaces 3. classes internes et imbriquées.
Langage Oriente Objet Cours 4.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Les pointeurs 1. Notion de pointeurs cest Travailler avec les pointeurs cest Se rapprocher du matériel Nécessite de bien connaitre le fonctionnement de.
Badr Benmammar Programmation concurrente et temps réel en Java Badr Benmammar
IFT1025, Programmation 2 Jian-Yun Nie
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java et les Exceptions Peter Van Roy Département dIngénierie Informatique,
Interfaces (fin) classes locales et internes, Object, clonage.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
DESS CCI POO-JAVA TD n°7 exercice n°1
Révision des notions OO et Java Semaine 1 Jian-Yun Nie.
Une nouvelle structure de données : les tableaux
Gestion et levée dexception. Une exception est un message envoyé par une méthode à une autre méthode. La méthode qui la reçoit a le choix de soccuper.
IFT 6800 Atelier en Technologies d’information
1 Les paquetages («packages»). 2 L'objectif avec les paquetages («packages») est de rendre accessibles aux utilisateurs des classes définies par d'autres.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Badr Benmammar Programmation concurrente et temps réel en Java Badr Benmammar
Cours du 22 novembre généricité. Chapitre VII Généricité.
Cours 6 Interfaces, classes imbriquées (début). Chapitre IV Interfaces, classes imbriquées, Object.
Cours 5 Héritage, Interfaces, classes internes. POO-L3 H. Fauconnier2 La classe Object Toutes les classes héritent de la classe Object Object méthodes:
COURS DE PROGRAMMATION ORIENTEE OBJET :
COURS DE PROGRAMMATION ORIENTEE OBJET :
Les pointeurs en C. valeur : main () { float valeur; void* pointeur; }
CSI 1502 Principes fondamentaux de conception de logiciels
CSI1502 Principes fondamentaux en conception des logiciels
Structures de données IFT-2000
Récursion IFT1025: Programmation 2 Jian-Yun Nie. Définition Le fait pour un programme ou une méthode de s'appeler lui-même. Par exemple –Définir la notion.
Une introduction à Java
Programmation Orienté Objet en C++ Ricard julien.
Cours 7 Divers et exceptions. Chapitre V Enumeration, tableaux, conversion de types, noms.
Les collections. Gestion d’ensembles d’objets Tableaux Taille fixe Pas de manipulation aisée des objets dans le tableaux Base tab1[]= new Base[5]; for(int.
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
Programmation en Java Tableaux NGUYEN Thi Minh Tuyen
Héritage multiple En langage C++, il est possible d’utiliser l’héritage multiple. Il permet de créer des classes dérivées à partir de plusieurs classes.
Notions avancées du C++
Entrées / Sorties.
Constructeurs H Batatia. Variable statique Une variable statique est partagée par tous les objets d’une classe.
LIFI-Java 2004 Séance du Jeudi 16 sept. Cours 2. Programmation Objet Qu’est ce que c’est? –une “facilité” de programmation? –une nouvelle façon de penser?
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Les opérateurs L’amitié Les opérateurs Introduction
8PRO100 Éléments de programmation Les tableaux multi-dimensionnels.
C# de plus près.  Ce sont globalement les mêmes que Java : ◦ Int(int16, int32), float, double, bool,…  Les classe « communes » sont également les mêmes.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
Conception de Programmes - IUT de Paris - 1ère année – Cours 6 - Les opérateurs L’amitié Les opérateurs –Introduction –Surcharge par fonction.
Conception de Programmes - IUT de Paris - 1ère année Cours 2 – Références et passage de paramètres Les Références –Introduction aux références.
Liste Une liste est une séquence d’éléments. Concept important: Chaque élément possède une position dans la liste. Notation: De quelles opérations a-t-on.
Introduction à la programmation objet avec java
État : allumé niveauSonore : 23 Luminosité : 15 contraste : 5 chaîne : 12 : MaTélé Eteindre Allumer AugmenterLuminosité DiminuerLuminosité AugmenterContraste.
Philippe Gandy – 17 novembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Correction du TD Chapitre 2.
Les Tableaux en JAVA.
Automatismes 1.
Int 10. Int 6.
renvoie la moyenne d’un tableau d’entiers
Transcription de la présentation:

LIFI-Java 2004 Séance du Mercredi 29 sept. Cours 4

Classe abstraite (1/7) public class Tortue { public void avance(double d); public void tourne(double a); public void leve(); public void baisse(); }; Tortue t = new Tortue(); for (int i=0;i<4;++i) { t.avance(100); t.tourne(90); } for (int i=0;i<3;++i) { t.tourne(60); t.avance(60); } Problème: –Encapsuler des figures pour une Tortue –Paramétrer les figures

Classe abstraite (2/7) Une solution: créer des classes –Square, Triangle,... public class Square { private double l; public Square(double l) { this.l=l; } public void applyTo(Tortue t) { for (int i=0;i<4;++i) t.avance(l);t.tourne(90) } } public class Triangle { private double l; public Triangle(double l) { this.l=l; } public void applyTo(Tortue t) { for (int i=0;i<4;++i) t.avance(l);t.tourne(90) } } Tortue t = new Tortue(); (new Square(100)).applyTo(t); (new Square(200)).applyTo(t); (new Triangle(60)).applyTo(t);

Classe abstraite (3/7) Tortue t = new Tortue(); t.draw(new Square(100)); t.draw(new Square(200)); t.draw(new Triangle(60)); public class Tortue { public void avance(double d); public void tourne(double a); public void leve(); public void baisse(); public void draw(Square s) { s.applyTo(this); } public void draw(Triangle t) { t.applyTo(this); } }; Une solution: créer des classes Ajouter des méthodes à Tortue Duplication de code! Pas évolutif!

Classe abstraite (4/7) Faire dériver Square et Triangle d’une classe mère Figure public class Figure { public void applyTo(Tortue t) { } } public class Square extends Figure { //... public void applyTo(Tortue t) { for (int i=0;i<4;++i) t.avance(l);t.tourne(90) } } public class Triangle extends Figure { //... public void applyTo(Tortue t) { for (int i=0;i<4;++i) t.avance(l);t.tourne(90) } } Figure SquareTriangle

Classe abstraite (5/7) Factoriser la méthode Tortue.draw() public class Tortue { //... public void draw(Figure f) { f.applyTo(this); } }; public class Figure { public void applyTo(Tortue t) { } } public class Square extends Figure { //... public void applyTo(Tortue t) { for (int i=0;i<4;++i) t.avance(l);t.tourne(90) } } public class Triangle extends Figure { //... public void applyTo(Tortue t) { for (int i=0;i<4;++i) t.avance(l);t.tourne(90) } }

Classe abstraite (5/7) Factoriser la méthode Tortue.draw() Question: que doit faire la méthode applyTo() de la classe Figure ? public class Tortue { //... public void draw(Figure f) { f.applyTo(this); } }; public class Figure { public void applyTo(Tortue t) { } } public class Square extends Figure { //... public void applyTo(Tortue t) { for (int i=0;i<4;++i) t.avance(l);t.tourne(90) } } public class Triangle extends Figure { //... public void applyTo(Tortue t) { for (int i=0;i<4;++i) t.avance(l);t.tourne(90) } } ?

Classe abstraite (6/7) Réponse: –rien! –c’est une classe abstraite! Java prévoit cela –déclarer la classe abstract –déclarer la méthode abstract –pas besoin de définir la fonction public class Tortue { //... public void draw(Figure f) { f.applyTo(this); } }; abstract public class Figure { abstract public void applyTo(Tortue t); } public class Square extends Figure { //... public void applyTo(Tortue t) { for (int i=0;i<4;++i) t.avance(l);t.tourne(90) } } public class Triangle extends Figure { //... public void applyTo(Tortue t) { for (int i=0;i<4;++i) t.avance(l);t.tourne(90) } }

Classe abstraite (7/7) Une classe abstraite ne peut pas être instanciée –Il faut dériver une classe pour définir l’implémentation de ses méthodes abstraites Une classe abstraite peut aussi avoir des méthodes non abstraites –qui utilisent des méthodes abstraites

Encapsulation des types de base Le code suivant ne marche pas ?!? import java.util.Vector; Vector v = new Vector(); v.addElement(“salut”); // OK, “salut” est un String donc un Object v.addElement(0); // refusé à la compilation! 0 est un int, qui est un type de base un Vector veut des objets! il faut encapsuler les types de base

Exemple: la classe Integer Encapsule le type int Pas équivalent à un int –appel explicite du constructeur –appel à intValue() Définit d’autres méthodes –static int parseInt(String) –boolean compareTo(Integer) Attention au test avec ==... import java.util.Vector; Vector v = new Vector(); v.addElement(new Integer(0)); int a=Integer.parseInt(“12”); Integer i=new Integer(3); Integer j=new Integer(4); // refusé à la compilation if (i<j) {...} // OK if (i.compareTo(j)==-1) {...}

Références : le piège du test == == compare les références pas les valeurs! Integer i=new Integer(3); Integer j=new Integer(3); if (i==j) { // on ne passera jamais ici!!! } Integer i=new Integer(3); Integer j=new Integer(3); if (i.compareTo(j)== 0) { // mais on passera là!!! } if (i.intValue() == j.intValue()) { // et là aussi!!! }