langage et concepts de programmation orientée-objet

41
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

Upload: buithien

Post on 05-Jan-2017

233 views

Category:

Documents


2 download

TRANSCRIPT

Déroulement du cours Introduction Concepts Java Remarques

Langage et Conceptsde 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 Cours TDJeudi 27 mars 2014 TP TPJeudi 3 avril 2014 TD TP

Jeudi 10 avril 2014 TD TPJeudi 17 avril 2014 TD TPJeudi 15 mai 2014 TP ProjetJeudi 22 mai 2014 Projet ProjetJeudi 5 juin 2014 Projet Projet

Mercredi 18 juin 2014 Projet ProjetMercredi 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 Programmation Orientée-Objet 3 / 40

Déroulement du cours Introduction Concepts Java Remarques

IntroductionModè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

IntroductionModèle en cascade pour le développement logiciel

Analyse

Conception

Implémentation

Test

Maintenance

SADT, SA-RT, MERISE, OMT, UML, …

Fortran, Cobol, C, SmallTalk,Ada, C++, Java, …

Langage et Concepts de Programmation Orientée-Objet 4 / 40

Déroulement du cours Introduction Concepts Java Remarques

IntroductionLangages procéduraux et fonctionnels

▸ Un programme est composé de plusieursprocédures (ou fonctions) :

▸ qui effectuent un traitement sur desdonnées (procédure)

▸ qui retournent une valeur après leurinvocation (fonction)

▸ Certains langages ne distinguent pasprocédures et fonctions.

▸ Exemples de langages procéduraux oufonctionnels : Fortran, Lisp, C, …

Données

Traitement 1

Traitement 2

Traitement 3

Langage et Concepts de Programmation Orientée-Objet 5 / 40

Déroulement du cours Introduction Concepts Java Remarques

IntroductionLangages Orientés-Objet

▸ Un programme est composé de plusieursobjets 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 sesattributs et ses traitements sont sesmé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

IntroductionUML & Java

Analyse

Conception

Implémentation

Test

Maintenance

▸ UnifiedModeling Language (UML)▸ notation standard pour l’analyse et la

conception construite par l’ObjectManagement Group (OMG)

▸ première version standard en 1997▸ actuellement version 2.4.1

▸ Java▸ pas un standard mais un langage très

largement utilisé▸ développé par SUNmicrosystems en 1995▸ dernière version stable : JDK 1.7 (ou Java 7)

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 laconception (comme en CSI)

Le trône de fer, G.R.R. Martin

Bilbo le Hobbit, J.R.R. Tolkien

Le Canard Enchaîné

Alice, directrice

Bob, bibliothécaire

Carole, lectrice

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êmeabstraction : une classe▸ même structure de données et méthodes de traitement

▸ valeurs différentes pour chaque objet

Germinal, E. Zola

Bilbo le Hobbit, J.R.R. Tolkien

Le Canard Enchaîné

Alice Dupont, directrice

Michel Martin, bibliothécaire

Anne Misa, lectrice

Robert Light, lecteur

Classe Livre

Classe Journal

Classe EmployéClasse 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 plusieursmembres dont chacun est soit

▸ un attribut : variable typée▸ uneméthode (ou opération) :

ensemble d’instructions detraitement

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’unemê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 defactoriser 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 sontpartagés par d’autres classes, dont on dira qu’elles héritent de (ou spécialisent)cette classe générale.

Exemple

Forme

Rectangle

Carré

Cercle

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 fichiersd’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 parune 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

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 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 laclasse 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 deméthode

l’entier b est visible à l’intérieurde 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érieurdu bloc de la structure decontrô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, tousdeux 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 à unconstructeur de la classe instanciée

▸ Un constructeur est une méthode qui a lemê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 aumoins un constructeur dans une classe pour en instancier desobjets

L’appel au constructeur affecte une nouvelle adresse enmémoire pour le nouvelobjet 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

Constructeur

class Livre {String titre;Lecteur emprunteur;

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 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 deméthodes

En Java, uneméthode ne peut pas être invoquée seule, elle est toujoursappelé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 estinvoqué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 laclasse) 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 ontaccès

▸ Les contraintes de visibilité portent sur :▸ la référence fait à une classe▸ l’invocation d’unemé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 formed’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 classesd’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

L’exception est renvoyée à la méthodeayant invoquée la méthode déclarantl’exception (mots-clés throws etthrow)

Interception

L’exception est traitée dans la méthodeappelant la méthode émettantl’exception (mots-clés try et catch)

Exemplepublic String initialesAuteur(Livre l)throws IndexOutOfBoundsException {String titre, initiales;titre = l.getTitre() ;initiales = titre.substring(0,2) ;return initiales;

}

Exemplepublic String initialesAuteur(Livre l) {

String titre, initiales;try {

titre = l.getTitre() ;initiales = titre.substring(0,2) ;return initiales;

} catch (IndexOutOfBoundsExcep-tion 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 lesexceptions appropriées :

▸ Créer un objet d’une classe d’exception

▸ Émettre l’exception

Exemplepublic 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 syntaxeInstruction 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 syntaxeInstruction 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 syntaxeInstruction 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 syntaxeInstruction 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 decomparer les valeurs de deux instances

Integer a1 = new Integer(2) ;Integer a2 = new Integer(2) ;System.out.println(a1 == a2) ; // falseSystem.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/Sformatté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 :▸ 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 Programmation Orientée-Objet 39 / 40

Déroulement du cours Introduction Concepts Java Remarques

Projethttp://www.emse.fr/~picard/cours/1A/java/projet.html

Langage et Concepts de Programmation Orientée-Objet 40 / 40