Langage et Concepts de Programmation Orientée-Objet
Transcription
Langage et Concepts de Programmation Orientée-Objet
Déroulement du cours Introduction Concepts Java Remarques Langage et Concepts de Programmation Orientée-Objet Gauthier Picard École Nationale Supérieure des Mines de Saint-Étienne [email protected] Pôle Informatique 2013-2014 Langage et Concepts de Programmation Orientée-Objet 1 / 40 Déroulement du cours Introduction Concepts Java Remarques Sommaire 1 Déroulement du cours 2 Introduction 3 Concepts 4 Java 5 Remarques Langage et Concepts de Programmation Orientée-Objet 2 / 40 Déroulement du cours Introduction Concepts Java Remarques Déroulement du cours Jeudi 20 mars 2014 Jeudi 27 mars 2014 Jeudi 3 avril 2014 Jeudi 10 avril 2014 Jeudi 17 avril 2014 Jeudi 15 mai 2014 Jeudi 22 mai 2014 Jeudi 5 juin 2014 Mercredi 18 juin 2014 Mercredi 25 juin 2014 ▸ ▸ Cours TP TD TD TD TP Projet Projet Projet Projet TD TP TP TP TP Projet Projet Projet Projet Examen TP à envoyer à la fin des séances Évaluation sur un de ces TP, le projet et l’examen écrit note finale = 0, 5 × examen + 0, 3 × projet + 0, 2 × TP Langage et Concepts de Programmation Orientée-Objet 3 / 40 Déroulement du cours Introduction Concepts Java Remarques Introduction Modèle en cascade pour le développement logiciel Analyse Conception Implémentation Test Maintenance Langage et Concepts de Programmation Orientée-Objet 4 / 40 Déroulement du cours Introduction Concepts Java Remarques Introduction Modèle en cascade pour le développement logiciel Analyse SADT, SA-RT, MERISE, OMT, UML, … Conception Implémentation Fortran, Cobol, C, SmallTalk, Ada, C++, Java, … Test Maintenance Langage et Concepts de Programmation Orientée-Objet 4 / 40 Déroulement du cours Introduction Concepts Java Remarques Introduction Langages procéduraux et fonctionnels ▸ Un programme est composé de plusieurs procédures (ou fonctions) : ▸ ▸ ▸ ▸ qui effectuent un traitement sur des données (procédure) qui retournent une valeur après leur invocation (fonction) Données Traitement 1 Certains langages ne distinguent pas procédures et fonctions. Traitement 2 Exemples de langages procéduraux ou fonctionnels : Fortran, Lisp, C, … Traitement 3 Langage et Concepts de Programmation Orientée-Objet 5 / 40 Déroulement du cours Introduction Concepts Java Remarques Introduction Langages Orientés-Objet ▸ Un programme est composé de plusieurs objets qui contiennent ▸ ▸ des données ”internes” des traitements manipulant ces données internes ou d’autres données ▸ Les données d’un objet sont appelés ses attributs et ses traitements sont ses méthodes (ou opérations). ▸ Exemples de langages orientés-objet : Objective C, SmallTalk, C++, Python, Ruby, Java, … Langage et Concepts de Programmation Orientée-Objet 6 / 40 Déroulement du cours Introduction Concepts Java Remarques Introduction UML & Java Analyse ▸ Unified Modeling Language (UML) ▸ Conception ▸ ▸ Implémentation ▸ notation standard pour l’analyse et la conception construite par l’Object Management Group (OMG) première version standard en 1997 actuellement version 2.4.1 Java ▸ Test ▸ ▸ pas un standard mais un langage très largement utilisé développé par SUN microsystems en 1995 dernière version stable : JDK 1.7 (ou Java 7) Maintenance Langage et Concepts de Programmation Orientée-Objet 7 / 40 Déroulement du cours Introduction Concepts Java Remarques Objet Classe Encapsulation Héritage Objet ▸ Approche procédurale : « Que doit faire mon programme ? » ▸ Approche orientée-objet : « De quoi doit être composé mon programme ? » Cette composition est conséquence d’un choix de modélisation fait pendant la conception (comme en CSI) Le trône de fer, G.R.R. Martin Alice, directrice Carole, lectrice Le Canard Enchaîné Bilbo le Hobbit, J.R.R. Tolkien Bob, bibliothécaire David, lecteur Langage et Concepts de Programmation Orientée-Objet 8 / 40 Déroulement du cours Introduction Concepts Java Remarques Objet Classe Encapsulation Héritage Classe Des objets similaires peuvent être informatiquement décrits par une même abstraction : une classe ▸ même structure de données et méthodes de traitement ▸ valeurs différentes pour chaque objet Classe Employé Classe Livre Classe Lecteur Classe Journal Alice Dupont, directrice Germinal, E. Zola Le Canard Enchaîné Bilbo le Hobbit, J.R.R. Tolkien Anne Misa, lectrice Michel Martin, bibliothécaire Robert Light, lecteur Langage et Concepts de Programmation Orientée-Objet 9 / 40 Déroulement du cours Introduction Concepts Java Remarques Objet Classe Encapsulation Héritage Contenu d’une classe Une classe est composée de plusieurs membres dont chacun est soit ▸ un attribut : variable typée ▸ une méthode (ou opération) : ensemble d’instructions de traitement Exemple class CompteBancaire { String proprietaire; double solde; double getSolde() { return solde; } void credite(double val) { solde = solde + val; } } Langage et Concepts de Programmation Orientée-Objet 10 / 40 Déroulement du cours Introduction Concepts Java Remarques Objet Classe Encapsulation Héritage Encapsulation L’encapsulation est la pratique consistant à regrouper des attributs au sein d’une même classe. Exemple : la classe Livre encapsule les attributs titre et emprunteur ▸ Pour améliorer la lisibilité des programmes, les attributs encapsulés sont souvent privés (inaccessibles aux autres classes) ▸ Les données et méthodes accessibles sont dites publiques Langage et Concepts de Programmation Orientée-Objet 11 / 40 Déroulement du cours Introduction Concepts Java Remarques Objet Classe Encapsulation Héritage Héritage L’héritage consiste à définir différent niveaux d’abstraction permettant ainsi de factoriser certains attributs et/ou méthodes communs à plusieurs classes. Une classe générale définit alors un ensemble d’attributs et/ou méthodes qui sont partagés par d’autres classes, dont on dira qu’elles héritent de (ou spécialisent) cette classe générale. Exemple Forme Rectangle Cercle Carré Langage et Concepts de Programmation Orientée-Objet 12 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Syntaxe Java Le code source d’un programme Java est contenu dans plusieurs fichiers d’extension .java ▸ une seule classe publique par fichier ▸ Le nom du fichier doit être le même que celui de la classe ▸ Par convention, le nom d’une classe commence toujours par une majuscule Le code source d’une classe commence par le mot-clé class suivi de son contenu Syntaxe class <nom de la classe> { <contenu de la classe> } Langage et Concepts de Programmation Orientée-Objet 13 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Types primitifs de données ▸ Même types qu’en C : ▸ ▸ ▸ ▸ ▸ ▸ ▸ int float double short long char void ▸ Plus deux nouveaux types : ▸ ▸ ▸ boolean byte Plus la classe : ▸ String Exemple int monEntier; String chaine; boolean test; Langage et Concepts de Programmation Orientée-Objet 14 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Écriture des méthodes ▸ Une méthode est composée de sa signature et d’un traitement associé ▸ La signature d’une méthode contient notamment ▸ ▸ ▸ ▸ ▸ un nom de méthode un type de données de retour des types de données pour ses arguments … Par convention le nom des méthodes et attributs commencent toujours par une minuscule Syntaxe <type de retour><nom de méthode> (<arguments> *) { <traitement associé> } Langage et Concepts de Programmation Orientée-Objet 15 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Exemple : classe Livre Attributs class Livre { String titre; Lecteur emprunteur; void setTitre(String t) { titre = t; } String getTitre() { return titre; } Méthodes Date emprunte(Lecteur lec) { if (emprunteur = = null) { emprunteur = lec; return new Date() ; } else return null ; } } Langage et Concepts de Programmation Orientée-Objet 16 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Portée d’une variable public class Portee { int a; public void test(int b) { if (a > b) { int c = b; b = a; a = c; } afficher(b); } Portée de classe l’entier a est visible dans toute la classe Portee } Langage et Concepts de Programmation Orientée-Objet 17 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Portée d’une variable (cont.) public class Portee { int a; public void test(int b) { if (a > b) { int c = b; b = a; a = c; } afficher(b); } Portée de méthode l’entier b est visible à l’intérieur de la méthode test } Langage et Concepts de Programmation Orientée-Objet 18 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Portée d’une variable (cont.) public class Portee { int a; public void test(int b) { if (a > b) { int c = b; b = a; a = c; } afficher(b); } Portée de bloc l’entier c est visible à l’intérieur du bloc de la structure de contrôle if } Langage et Concepts de Programmation Orientée-Objet 19 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Instanciation On appelle instance d’une classe, un objet avec un comportement et un état, tous deux définis par sa classe. L’instanciation est l’opération qui consiste à créer un objet à partir d’une classe En Java, le mot-clé new provoque une instanciation en faisant appel à un constructeur de la classe instanciée ▸ Un constructeur est une méthode qui a le même nom que la classe ▸ Un constructeur n’a pas de valeur de retour ▸ Plusieurs constructeurs peuvent exister dans une même classe (avec des arguments différents) ▸ Il faut au moins un constructeur dans une classe pour en instancier des objets L’appel au constructeur affecte une nouvelle adresse en mémoire pour le nouvel objet créé Langage et Concepts de Programmation Orientée-Objet 20 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Constructeur de la classe Livre class Livre { String titre; Lecteur emprunteur; Livre(String t) { titre = t; emprunteur = null ; } Constructeur void setTitre(String t) { titre = t;} String getTitre() { return titre;} Date emprunte(Lecteur lec) { … } } Langage et Concepts de Programmation Orientée-Objet 21 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Instanciation de la classe Livre class TerminalBibliothecaire { void enregistreLivre(String nom) { Livre nouveauLivre; nouveauLivre = new Livre(nom); ajouteEnBibliotheque(nouveauLivre) ; } void ajouteEnBibliotheque(Livre li) { … } } Langage et Concepts de Programmation Orientée-Objet 22 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Invocation de méthodes En Java, une méthode ne peut pas être invoquée seule, elle est toujours appelée sur un objet (ou une classe, pour les méthodes static) ▸ Un point « . » sépare le nom de la méthode de l’objet sur lequel elle est invoquée : … Livre monLivre = new Livre(”Germinal”) ; String titreDuLivre = monLivre.getTitre() ; … ▸ Le mot-clé this désigne, en cours d’exécution d’une méthode, l’objet (ou la classe) sur lequel elle est appelée ▸ La syntaxe pour accéder aux attributs d’un objet est la même Langage et Concepts de Programmation Orientée-Objet 23 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Exemple class Livre { String titre; Lecteur emprunteur; … boolean estEmprunte() { if (emprunteur == null) return false ; else return true ; } Date emprunte(Lecteur lec) { if (this.estEmprunte()) return null ; if (lec.empruntPossible()) { emprunteur = lec; lec.ajouteEmprunt(this) ; return new Date() ; } else return null ; } class Lecteur { Livre[] emprunts; int nbEmprunts; … boolean empruntePossible() { if (nbEmprunts < 5) return true ; else return false ; } void ajouteEmprunt(Livre liv) { emprunts[nbEmprunts] = liv; nbEmprunts ++; } } } Langage et Concepts de Programmation Orientée-Objet 24 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Visibilité des membres ▸ La visibilité d’une classe et de ses membres définit quelles autres classes y ont accès ▸ Les contraintes de visibilité portent sur : ▸ ▸ ▸ la référence fait à une classe l’invocation d’une méthode sur un objet l’accès en lecture et écriture à un attribut d’un objet 4 niveaux de visibilité en Java public visible tous les objets private uniquement visible par les instances de la classe protected expliqué ultérieurement par défaut expliqué ultérieurement Langage et Concepts de Programmation Orientée-Objet 25 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Exemple de visibilité public class Livre { private String titre; private Lecteur emprunteur; … private boolean estEmprunte() { if (emprunteur == null) return false ; else return true ; } public Date emprunte(Lecteur lec) { if (this.estEmprunte()) return null ; if (lec.empruntPossible()) { emprunteur = lec; lec.ajouteEmprunt(this) ; return new Date() ; } else return null ; } public class Lecteur { private Livre[] emprunts; private int nbEmprunts; … public boolean empruntePossible() { if (nbEmprunts < 5) return true ; else return false ; } public void ajouteEmprunt(Livre liv) { emprunts[nbEmprunts] = liv; nbEmprunts ++; } } } Langage et Concepts de Programmation Orientée-Objet 26 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Exceptions ▸ En Java, les erreurs se produisent lors d’une exécution sous la forme d’exceptions ▸ Une exception : ▸ ▸ ▸ ▸ est un objet, instance d’une classe d’exceptions (java.lang.Exception) peut provoquer la sortie d’une méthode correspond à un type d’erreur contient des informations sur cette erreur Langage et Concepts de Programmation Orientée-Objet 27 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Déclaration des exceptions possibles Une méthode déclare, par le mot-clé throws, dans sa signature les classes d’exception qu’elle peut envoyer Exemple de la méthode substring() de la classe String public class String { … public String substring(int beginIndex, int endIndex) throws IndexOutOfBoundsException { … } … } Langage et Concepts de Programmation Orientée-Objet 28 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Traitement des exceptions Il y a deux manières de traiter une exception reçue : propagation et interception Propagation Interception L’exception est renvoyée à la méthode ayant invoquée la méthode déclarant l’exception (mots-clés throws et throw) L’exception est traitée dans la méthode appelant la méthode émettant l’exception (mots-clés try et catch) Exemple Exemple public String initialesAuteur(Livre l) throws IndexOutOfBoundsException { String titre, initiales; titre = l.getTitre() ; initiales = titre.substring(0,2) ; return initiales; } public String initialesAuteur(Livre l) { String titre, initiales; try { titre = l.getTitre() ; initiales = titre.substring(0,2) ; return initiales; } catch (IndexOutOfBoundsException ex) { return new String(” ???”) ; } } Langage et Concepts de Programmation Orientée-Objet 29 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Émission & création d’exceptions Prévoir tous les cas d’erreurs des méthodes que vous écrivez en émettant les exceptions appropriées : ▸ Créer un objet d’une classe d’exception ▸ Émettre l’exception Exemple public Date emprunte(Lecteur lec) throws Exception { if (this.estEmprunte()) { Exception excep = new Exception(”Livre deja emprunte”); throw excep; } if (lec.empruntPossible()) { emprunteur = lec; lec.ajouteEmprunt(this) ; return new Date() ; } else { throw new Exception(”Le lecteur a trop d’emprunts”); } } Langage et Concepts de Programmation Orientée-Objet 30 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Compléments de syntaxe Instruction conditionnelle if Syntaxe if <condition> <bloc si vrai> [else <bloc si faux>] Exemple if (emprunteur.getStatut().equals(”employe”)) { unLivre.setDateRetour(30) ; } else { unLivre.setDateRetour(15) ; } Langage et Concepts de Programmation Orientée-Objet 31 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Compléments de syntaxe Instruction itérative while Syntaxe while <condition> <bloc> Exemple while (i < biblio.nbLivres() ) { Livre l = biblio.getLivre(i) ; l.setDisponible(true) ; i++; } Langage et Concepts de Programmation Orientée-Objet 32 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Compléments de syntaxe Instruction itérative for Syntaxe for (<init> ; <condition> ; <increment>) <bloc> Exemple for (int i = 0 ; i < biblio.nbLivres() ; i++ ) { Livre l = biblio.getLivre(i) ; l.setDisponible(true) ; } Langage et Concepts de Programmation Orientée-Objet 33 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Compléments de syntaxe Instruction de choix multiple switch Syntaxe switch (<variable>) { [case <val> : <bloc>]* default : <bloc> } Exemple switch (l.getCategorie()) { case 1 : l.setDuree(15) ; break ; case 2 : l.setDuree(20) ; break ; default : l.setDuree(30) ; } Langage et Concepts de Programmation Orientée-Objet 34 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Autres particularités Aggrégation de chaînes de caractères ▸ On peut utiliser l’opérateur + sur les objets de classe String : String s1 = ”hello ”, s2 = ”world” ; String s3 = s1 + s2; ⇒ s3 vaut ”hello world” Manipulation de tableaux ▸ La variable length donne la taille d’un tableau : char[] tab = new char[25] ; int a = tab.length; ⇒ a vaut 25 Langage et Concepts de Programmation Orientée-Objet 35 / 40 Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe Autres particularités (cont.) Comparaison d’instances ▸ L’opérateur == compare les adresses de deux instances ▸ La méthode equals() que possède toute instance en Java permet de comparer les valeurs de deux instances Integer a1 = new Integer(2) ; Integer a2 = new Integer(2) ; System.out.println(a1 == a2) ; // false System.out.println(a1.equals(a2)) ; // true Langage et Concepts de Programmation Orientée-Objet 36 / 40 Déroulement du cours Introduction Concepts Java Remarques Remarques en vrac Comparaison avec C ▸ Syntaxe similaire (instructions, types primitifs, etc.) ▸ Java est interprété (machine virtuelle) et multi-plateformes ▸ Java est plus haut niveau : pas de gestion explicite des pointeurs, E/S formattées, etc. ▸ Java est modulaire par essence (compilation séparée par défaut) ▸ … Comparaison avec SGBD ▸ La technologie objet est fortement inspirée des BDD ▸ Java ne stocke pas de manière persistente les données ▸ Java attache des traitements aux données (méthodes) ▸ Java peut utiliser un SGBD pour sauvegarder des objets (JDBC) ▸ … Langage et Concepts de Programmation Orientée-Objet 37 / 40 Déroulement du cours Introduction Concepts Java Remarques Popularité des langages de programmation http://www.tiobe.com/index.php/content/paperinfo/tpci/ Langage et Concepts de Programmation Orientée-Objet 38 / 40 Déroulement du cours Introduction Concepts Java Remarques Références utiles ▸ Livres : ▸ ▸ ▸ ▸ ▸ Sites web : ▸ ▸ ▸ ▸ ▸ ▸ Programmer en Java, 7e Edition, Claude Delannoy, Eyrolles, 2011 The Java Tutorial : A Short Course on the Basics, 4th Edition, Collectif, Prentice Hall, 2006 Effective Java, 2nd Edition, Joshua Bloch, Prentice Hall, 2008 Java in a nutshell, 5th edition, David Flanagan, O’Reilly, 2005 Le site officiel Java, http://www.oracle.com/technetwork/java/index.html Le tutorial Java, http://docs.oracle.com/javase/tutorial/ l’API du JDK 1.7, http://docs.oracle.com/javase/7/docs/api/ Un site (français) de développeurs, http://www.javafr.com/ Le site JavaWorld, http://www.javaworld.com Quelques autres liens : ▸ ▸ ▸ des liens en rapport avec Java, http://www.javamug.org/mainpages/Java.html Tutoriaux jGuru, http://java.sun.com/developer/onlineTraining/ plein d’autres cours, http://java.developpez.com/cours/ Langage et Concepts de Programmation Orientée-Objet 39 / 40 Déroulement du cours Introduction Concepts Java Remarques Projet http://www.emse.fr/~picard/cours/1A/java/projet.html Langage et Concepts de Programmation Orientée-Objet 40 / 40