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 gauthier.picard@emse.fr Pôle Informatique 2013-2014 Langage et Concepts de ProgrammationOrientée-Objet 1 / 40
Sommaire Déroulement du cours Introduction Concepts Java Remarques 1 Déroulement du cours 2 Introduction 3 Concepts 4 Java 5 Remarques Langage et Concepts de ProgrammationOrientée-Objet 2 / 40
Déroulement du cours Introduction Concepts Java Remarques Déroulement du cours Jeudi 20 mars 2014 Cours TD Jeudi 27 mars 2014 TP TP Jeudi 3 avril 2014 TD TP Jeudi 10 avril 2014 TD TP Jeudi 17 avril 2014 TD TP Jeudi 15 mai 2014 TP Projet Jeudi 22 mai 2014 Projet Projet Jeudi 5 juin 2014 Projet Projet Mercredi 18 juin 2014 Projet Projet Mercredi 25 juin 2014 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 ProgrammationOrienté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 ProgrammationOrienté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 ProgrammationOrienté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) Certains langages ne distinguent pas procédures et fonctions. Exemples de langages procéduraux ou fonctionnels : Fortran, Lisp, C, Données Traitement 1 Traitement 2 Traitement 3 Langage et Concepts de ProgrammationOrienté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 ProgrammationOrientée-Objet 6 / 40
Déroulement du cours Introduction Concepts Java Remarques Introduction UML & Java Analyse Conception Implémentation Test Unified Modeling Language (UML) Java 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 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 ProgrammationOrientée-Objet 7 / 40
Objet Déroulement du cours Introduction Concepts Java Remarques Objet Classe Encapsulation Héritage 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 Le Canard Enchaîné Alice, directrice Carole, lectrice Bilbo le Hobbit, J.R.R. Tolkien Bob, bibliothécaire David, lecteur Langage et Concepts de ProgrammationOrientée-Objet 8 / 40
Classe Déroulement du cours Introduction Concepts Java Remarques Objet Classe Encapsulation Héritage 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 Livre Classe Journal Classe Employé Classe Lecteur Germinal, E. Zola Le Canard Enchaîné Alice Dupont, directrice Anne Misa, lectrice Bilbo le Hobbit, J.R.R. Tolkien Michel Martin, bibliothécaire Robert Light, lecteur Langage et Concepts de ProgrammationOrienté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 ProgrammationOrienté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 ProgrammationOrientée-Objet 11 / 40
Héritage Déroulement du cours Introduction Concepts Java Remarques Objet Classe Encapsulation 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 ProgrammationOrientée-Objet 12 / 40
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 ProgrammationOrientée-Objet 13 / 40
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 ProgrammationOrientée-Objet 14 / 40
É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 ProgrammationOrientée-Objet 15 / 40
Exemple : classe Attributs Méthodes class Livre { String titre; Lecteur emprunteur; void settitre(string t) { titre = t; String gettitre() { return titre; Date emprunte(lecteur lec) { if (emprunteur = = null) { emprunteur = lec; return new Date() ; else return null ; Langage et Concepts de ProgrammationOrientée-Objet 16 / 40
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 ProgrammationOrientée-Objet 17 / 40
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 ProgrammationOrientée-Objet 18 / 40
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 ProgrammationOrientée-Objet 19 / 40
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 ProgrammationOrientée-Objet 20 / 40
Constructeur de la classe class Livre { String titre; Lecteur emprunteur; Constructeur Livre(String t) { titre = t; emprunteur = null ; void settitre(string t) { titre = t; String gettitre() { return titre; Date emprunte(lecteur lec) { Langage et Concepts de ProgrammationOrientée-Objet 21 / 40
Instanciation de la classe class TerminalBibliothecaire { void enregistrelivre(string nom) { Livre nouveaulivre; nouveaulivre = new Livre(nom); ajouteenbibliotheque(nouveaulivre) ; void ajouteenbibliotheque(livre li) { Langage et Concepts de ProgrammationOrientée-Objet 22 / 40
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 ) 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 ProgrammationOrientée-Objet 23 / 40
Exemple Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe 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 ProgrammationOrientée-Objet 24 / 40
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 ProgrammationOrientée-Objet 25 / 40
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 ProgrammationOrientée-Objet 26 / 40
Exceptions Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe 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 ProgrammationOrientée-Objet 27 / 40
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 de la classe public class String { public String substring(int beginindex, int endindex) throws IndexOutOfBoundsException { Langage et Concepts de ProgrammationOrientée-Objet 28 / 40
Traitement des exceptions Il y a deux manières de traiter une exception reçue : propagation et interception Propagation L exception est renvoyée à la méthode ayant invoquée la méthode déclarant l exception (mots-clés throws et throw) Interception L exception est traitée dans la méthode appelant la méthode émettant l exception (mots-clés try et catch) Exemple public String initialesauteur(livre l) throws IndexOutOfBoundsException { String titre, initiales; titre = l.gettitre() ; initiales = titre.substring(0,2) ; return initiales; Exemple 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 ProgrammationOrientée-Objet 29 / 40
É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 ProgrammationOrientée-Objet 30 / 40
Compléments de syntaxe Instruction conditionnelle 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 ProgrammationOrientée-Objet 31 / 40
Compléments de syntaxe Instruction itérative Syntaxe while <condition> <bloc> Exemple while (i < biblio.nblivres() ) { Livre l = biblio.getlivre(i) ; l.setdisponible(true) ; i++; Langage et Concepts de ProgrammationOrientée-Objet 32 / 40
Compléments de syntaxe Instruction itérative 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 ProgrammationOrientée-Objet 33 / 40
Compléments de syntaxe Instruction de choix multiple 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 ProgrammationOrientée-Objet 34 / 40
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 ProgrammationOrientée-Objet 35 / 40
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 ProgrammationOrienté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 ProgrammationOrienté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 ProgrammationOrientée-Objet 38 / 40
Déroulement du cours Introduction Concepts Java Remarques Références utiles Livres : 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 Sites web : 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 ProgrammationOrientée-Objet 39 / 40
Déroulement du cours Introduction Concepts Java Remarques Projet Langage et Concepts de ProgrammationOrientée-Objet 40 / 40