Plan. Conseils de Programmation. Types et Classes. Exemple: fraction. Méthodes. Variables locales:



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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Programmer en JAVA. par Tama

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

Java Licence Professionnelle CISII,

Premiers Pas en Programmation Objet : les Classes et les Objets

Corrigé des exercices sur les références

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

Un ordonnanceur stupide

Programmation avec des objets : Cours 7. Menu du jour

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

Cours 1: Java et les objets

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

Utilisation d objets : String et ArrayList

TP, première séquence d exercices.

TP1 : Initiation à Java et Eclipse

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

Conventions d écriture et outils de mise au point

Programmation Par Objets

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

Une introduction à Java

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

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

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

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

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

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

Synchro et Threads Java TM

Chapitre 10. Les interfaces Comparable et Comparator 1

Corrigés des premiers exercices sur les classes

Projet de programmation (IK3) : TP n 1 Correction

ACTIVITÉ DE PROGRAMMATION

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Auto-évaluation Programmation en Java

as Architecture des Systèmes d Information

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

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

Derrière toi Une machine virtuelle!

Utiliser Java sans BlueJ

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

Chapitre I Notions de base et outils de travail

Algorithmique et Programmation, IMA

Programmation par les Objets en Java

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

F. Barthélemy. 17 mai 2005

Threads. Threads. USTL routier 1

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

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

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

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

Solutions du chapitre 4

Initiation à JAVA et à la programmation objet.

Java c est quoi? Java pourquoi?

Java Licence Professionnelle CISII,

INITIATION AU LANGAGE JAVA

I. Introduction aux fonctions : les fonctions standards

Cours 14 Les fichiers

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Les arbres binaires de recherche

Langage Java. Classe de première SI

PROGRAMMATION PAR OBJETS

Débuter avec Excel. Excel

Cours Programmation Système

Package Java.util Classe générique

Remote Method Invocation Les classes implémentant Serializable

Java 1.5 : principales nouveautés

Présentation du langage et premières fonctions

INF 321 : mémento de la syntaxe de Java

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

TD/TP PAC - Programmation n 3

Programmation Orientée Objet Java

Les bases de l informatique et de la programmation. École polytechnique

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Programmation Objet Java Correction

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Introduction au langage C

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Arbres binaires de recherche

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

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

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

2. Comprendre les définitions de classes

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

4. Groupement d objets

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

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

TD2 Programmation concurrentielle

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

Les structures de données. Rajae El Ouazzani

Algorithmique, Structures de données et langage C

Exercices sur les interfaces

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

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

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

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

Gestion distribuée (par sockets) de banque en Java

Transcription:

Plan Conseils de Programmation Joël Quinqueton Dépt MIAp, UFR IV UPV Université Montpellier III Types et classes Un exemple de classe Les erreurs en Java L héritage en Java Types primitifs Tableaux Classes: Types et Classes définit un nouveau type Contient des champs (variables locales) Contient des méthodes (comportement) Exemple: fraction Variables locales: Numérateur Dénominateur Méthodes: Calcul: addition, soustraction, multiplication, division Comparaison: égalité, inégalités Impression Réduction, création, Variables locales: Numérateur, Dénominateur: ce sont des entiers On peut choisir leur type en fonction de ce que l on veut faire (long, int ou short) Ces variables seront connues de toutes les méthodes définies dans la classe Méthodes Possèdent un nom, choisi par le programmeur (exemple: mamethode) Renvoient ou non des valeurs Peuvent avoir des arguments S appliquent aux instances de la classe (ici les fractions que l on aura créées) Lancées par un appel du genre: Fraction f; f.mamethode(); 1

Définition en Java public class Fraction { int numerateur; int denominateur; On ne se préoccupe pas pour l instant des problèmes de réductibilité. Méthodes de calcul Renvoient une nouvelle fraction Il faut la créer: new Fraction() Opèrent sur 2 fractions: L une est la fraction à laquelle s applique la méthode L autre est donnée en argument Fraction mamethode(fraction arg) { Algorithmique des calculs (1) Multiplication multiplier les numérateurs et les dénominateurs N 1 /D 1 x N 2 /D 2 = (N 1 x N 2 ) / (D 1 x D 2 ) Division Multiplier le numérateur de l une par le dénominateur de l autre N 1 /D 1 / N 2 /D 2 = (N 1 x D 2 ) / (D 1 x N 2 ) Multiplication en Java Fraction mul(fraction f) { Fraction r = new Fraction(); r.numerateur = numerateur * f.numerateur; r.denominateur = denominateur * f.denominateur; Où sont mises les méthodes? Elles sont ajoutées à la définition de la classe public class Fraction { int numerateur; int denominateur; Fraction mul(fraction f) { Division en Java Fraction div(fraction f) { Fraction r = new Fraction(); r.numerateur = numerateur * f.denominateur; r.denominateur = denominateur * f.numerateur; 2

Algorithmique des calculs (2) Addition Multiplier les dénominateurs etc N 1 /D 1 + N 2 /D 2 = (N 1 x D 2 + D 1 x N 2 ) / (D 1 x D 2 ) Soustraction Même principe N 1 /D 1 - N 2 /D 2 = (N 1 x D 2 - D 1 x N 2 ) / (D 1 x D 2 ) Addition en Java Fraction add(fraction f) { Fraction r = new Fraction(); r.numerateur = numerateur * f.denominateur + f.numerateur * denominateur; r.denominateur = denominateur * f.denominateur; Soustraction en Java Fraction sub(fraction f) { Fraction r = new Fraction(); r.numerateur = numerateur * f.denominateur - f.numerateur * denominateur; r.denominateur = denominateur * f.denominateur; Méthodes de comparaison Renvoient une valeur booléenne C est un type primitif: boolean Comme pour le calcul, opèrent sur 2 fractions: L une est la fraction à laquelle s applique la méthode L autre est donnée en argument boolean mamethode(fraction arg) { Algorithmique des comparaisons Egalité Différent de l identité: vrai si les deux fractions représentent la même valeur N 1 /D 1 = N 2 /D 2 ssi N 1 x D 2 = D 1 x N 2 Inégalité On utilise le même principe N 1 /D 1 > N 2 /D 2 : si D 1 et D 2 de même signe, si N 1 x D 2 > D 1 x N 2 Sinon, si N 1 x D 2 < D 1 x N 2 Égalité en Java boolean equals(fraction f) { boolean r; r = (numerateur * f.denominateur) == (denominateur * f.numerateur); 3

Égalité en Java (plus compact?) boolean equals(fraction f) { return (numerateur * f.denominateur) == (denominateur * f.numerateur); Inégalité en Java boolean morethan(fraction f) { if (denominateur * f.denominateur > 0) return (numerateur * f.denominateur) > (denominateur * f.numerateur); else return (numerateur * f.denominateur) < (denominateur * f.numerateur); Méthodes d impression Ne renvoient rien (void) N opèrent que sur la fraction à laquelle s applique la méthode Deux étapes: il faut d abord transformer notre fraction en chaine de caractère puis l imprimer décomposer en 2 méthodes? Impression en Java On propose d imprimer le numérateur, suivi du symbole de fraction, et suivi du dénominateur void print() { System.out.print("" + numerateur + "/" + denominateur) Lancement Lui ajouter le modificateur public Lui ajouter une méthode main Sauvegarder notre classe dans un fichier Fraction.java Le compiler Le lancer par java Fraction Le fichier Fraction.java public class Fraction { int numerateur; int denominateur; Fraction mul(fraction f) { public static void main (String [] args) { 4

Les erreurs en Java Les erreurs à la compilation: erreurs de «syntaxe» Les erreurs à l exécution: erreurs «sémantiques» Erreurs de compilation Erreurs de syntaxe (délimiteurs oubliés ou en trop) Erreurs de casse (majuscule oubliée dans un type) Problème: le libellé désigne parfois une conséquence de l erreur et non l erreur elle même Impression d une fraction Cette définition est dans un fichier Fraction.java 36. void print() { 37. System.out.print("" + numerateur + "/" + denominateur) 38. Erreur à la compilation jq% javac Fraction.java Fraction.java:37: ';' expected System.out.print("" + numerateur + "/" + denominateur) ^ 1 error jq% Correction du source Regarder le libellé du message (en Anglais, mais en général compréhensible) Ici: ';' expected Le numéro de la ligne est indiqué Ici: Fraction.java:37 Définition de classe public class Fraction { int numerateur; int denominateur; Fraction mul(fraction f) { 5

Erreur à la compilation Correction du source jq% javac Fraction.java Fraction.java:5: 'class' or 'interface' expected Fraction mul(fraction f) { ^ Fraction.java:50: 'class' or 'interface' expected ^ Fraction.java:51: 'class' or 'interface' expected ^ 3 errors jq% Regarder prioritairement la première erreur Les autres sont souvent des effets secondaires de la première (il peut y en avoir beaucoup) Corriger la première erreur et relancer la compilation Correction de la première erreur Ici, le libellé porte sur une conséquence de l erreur: 'class' or 'interface' expected Ce message montre qu il est hors d un bloc L erreur est qu il y a une accolade de trop Erreurs à l exécution Libellées sous forme d une «exception» En Java, les erreurs sont des objets Leurs noms se terminent par Exception Exemples NullPointerException ArrayIndexOutOfBoundsException Exemple dans Fraction Erreur à l exécution public static void main (String [] args) { Fraction [] tf = new Fraction[3]; tf[0].numerateur = Keyboard.readInt(); tf[0].denominateur = Keyboard.readInt(); tf[1] = tf[0].mul(tf[0]); tf[2] = tf[1].sub(tf[0]); for(int i = 0; i <= 3; i++) tf[i].print(); System.out.println(); jq% javac Fraction.java jq% java Fraction 13 Exception in thread "main" java.lang.nullpointerexception at Fraction.main(Fraction.java:42) jq% 6

Comprendre les erreurs Regarder le libellé de l erreur et essayer de l interpréter Exemples d erreurs courantes NullPointerException: opération sur un objet qui n existe pas ArrayIndexOutOfBoundsException: débordement de tableau Le numéro de ligne est indiqué Correction du source Cas de NullPointerException Repérer l objet qui n existe pas Le créer Dans l exemple, la ligne fautive est 42 41. Fraction [] tf = new Fraction[3]; 42. tf[0].numerateur = Keyboard.readInt(); Il faut créer la fraction: 41,5. tf[0] = new Fraction(); Erreur à l exécution Correction du source jq% javac Fraction.java jq% java Fraction 13 25 13/25 169/625-3900/15625Exception in thread "main" java.lang.arrayindexoutofboundsexception: 3 at Fraction.main(Fraction.java:46) jq% Cas de ArrayIndexOutOfBoundsException Repérer le débordement de tableau Créer ou corriger un test pour l éviter Dans l exemple, la ligne fautive est 46 46. for(int i = 0; i <= 3; i++) tf[i].print(); Il faut corriger le test: 46. for(int i = 0; i < 3; i++) tf[i].print(); La pile d exécution Elle est imprimée lors des sorties en erreur, par exemple: Exception in thread "main" java.lang.numberformatexception: 2 2 1425 at java.lang.integer.parseint(integer.java:418) at java.lang.integer.valueof(integer.java:511) at PointStationFrame.lire(PointStationFrame.java:21) at PointStationFrame.main(PointStationFrame.java:54) Observation de la pile Repérer les noms de classe et de méthode qui vous appartiennent Ce sont ceux là qu il faut déboguer Demandez vous s il s agit: D une erreur de programmation D une donnée erronée (lue dans un fichier ou entrée au clavier) 7

Erreurs de données Exemple dans les fractions jq% javac Fraction.java jq% java Fraction 54adr4 Une erreur s'est produite lors de la lecture au clavier. java.lang.numberformatexception: For input string: "54adr4" L héritage en Java Le problème des objets qui n existent pas (encore) Notion de sous classe Ne définir que ce qui change jq% Structure de liste (rappel) La liste elle-même est une référence à son premier élément Le dernier élément pointe vers le vide Implémentation Java (rappel) public class Liste { Object element; Liste suivant; Méthodes d entrée et de sortie: Liste insererdebut(object x) { Liste insererfin(object x) { Liste inserer (int i, Object x) { Méthodes d effacement Effacement d un élément Comme pour les méthodes d insertion, il s agit de gérer les pointeurs L élément inutile sera traité par le «ramasse miettes» (garbage collector) Cas particulier en fin de liste Liste effacer (int i) { if (i <= 0) return suivant; int lo = i; Liste li; for (li = this; li.suivant!= null && lo > 0; li = li.suivant) lo = lo - 1; if (lo <= 0) li.suivant = li.suivant.suivant; else li.effacerfin(x); return this; 8

La liste est-elle vide? Liste vide: objet inexistant (null) Méthode pour qu une liste dise si elle est vide: possible sauf si la liste est vide!!! li.estvide() pourra renvoyer false si li est une liste, mais si elle est vide, elle ne sera même pas appelée, car il y aura eu: NullPointerException avant Qu est-ce qu une classe? Définit un nouveau type Sert à définir ce qui est commun à ses instances C est aussi un objet à part entière: Possède ses propres champs Possède ses propres méthodes Une classe en tant qu objet Elle est définie en même temps que les instances Elle est automatiquement créée à l exécution du programme Elle est stockée dans une variable qui porte son nom: MaClasse Les propriétés de la classe Accès par MaClasse.MonChamp pour un champ MaClasse.MaMethode( ) pour une méthode Les champs et les méthodes d une classe sont définis pas le mot-clé static Le problème de la liste vide La classe liste peut tester si un objet qu on lui présente est vide ou non Il prend nécessairement cet objet en argument La variable this n existe pas pour les méthodes de classe Exemple de définition Il suffit de tester si l objet est inexistant public static boolean estvide(liste li) { return li == null; Cette méthode devra être appelée par Liste.estVide(uneListe); 9

Types de listes Liste dont les entrées et sorties sont contraintes: Files Piles Listes triées Définir des sous classes de la classe Liste Sous classe Définie comme un cas particulier, dont les instances sont un sous ensemble de celles de la classe Il suffit de définir ce qui différencie la sous classe de la classe La classe Pile Ce qui la différencie de la liste: Ajout (insertion) d un élément dessus (au début) uniquement Suppression d un élément dessus uniquement (le dernier ajouté) Implémentation Java public class Pile extends Liste { Pile ajouter(object x) {... Object lireetenlever() {... boolean nonvide() {... Il n y a que ces méthodes à définir pour cette sous classe Ajout en début de pile Modifier l entrée dans la pile Ajout dans une pile Cette méthode doit renvoyer la pile modifiée et utilise un argument d un type quelconque Pile ajouter(object x) { Pile li = new Pile(); li.element = x; li.suivant = this; return li; 10

Variante de l ajout dans une pile xe e Copier l ancien début (e) dans le nouvel élément Insérer le nouvel élément en seconde position Remplacer le début par l élément à insérer (x) Ajout dans une pile: variante Pour ne pas avoir à renvoyer la pile modifiée void ajouter(object x) { Pile li = new Pile(); li.element = element; li.suivant = suivant; element = x; suivant = li; Retrait dans une pile Pour ne pas avoir à renvoyer la pile modifiée Object lireetenlever() { Object resu = element; element = suivant.element; suivant = suivant.suivant; return resu; La pile est-elle vide? La classe Pile hérite aussi des caractéristiques de la classe Liste en tant qu objet Ici, on peut donc indifféremment utiliser Liste.estVide(uneListe) ou Pile.estVide(unePile) Définition d autres sous classes On peut selon le même principe définir les autres types de listes: Files Listes triées Ce qui est important pour l utilisation, ce n est pas l implémentation, mais l interface Conclusion Commentez vos programmes (de préférence selon les règles «javadoc») Réfléchissez à l aspect algorithmique avant de programmer, afin de choisir la solution la plus simple 11