Vous êtes sur la page 1sur 40

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 2009-2010

Langage et Concepts de Programmation Orientée-Objet 1 / 39


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 / 39


Déroulement du cours Introduction Concepts Java Remarques

. Déroulement du cours
.
Mardi 16 mars 2010 Cours TD .
Vendredi 19 mars 2010 TP TP
Mardi 23 mars 2010 TD TP
Mardi 30 mars 2010 TD TP
Mardi 6 avril 2010 TD TP
Mardi 13 avril 2010 Projet Projet
Mardi 20 avril 2010 Projet Projet
Mardi 27 avril 2010 Projet Projet
. Mardi 4 mai 2010 Examen Projet
.. .

.
▸ 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 / 39


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 / 39


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

.
. Fortran, Cobol, C, SmallTalk,
Implémentation
Ada, C++, Java, …

.
Test

.
Maintenance

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


Déroulement du cours Introduction Concepts Java Remarques

Introduction
. Langages procéduraux et fonctionnels

.
▸ Un programme est composé de plusieurs .
.
procédures (ou fonctions) : Données
▸ qui effectuent un traitement sur des
données (procédure)
▸ qui retournent une valeur après leur . .
invocation (fonction) 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 / 39


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 :
.
SmallTalk, C++, Python, Ruby, Java, …
.
.. . .

Langage et Concepts de Programmation Orientée-Objet 6 / 39


Déroulement du cours Introduction Concepts Java Remarques

Introduction
. UML & Java

. .
Analyse .
▸ Unified Modeling Language (UML) .
▸ notation standard pour l’analyse et la
.
Conception conception construite par l’Object
Management Group (OMG)
▸ première version standard en 1997
. ▸ actuellement version 2.1.2
Implémentation
▸ Java
▸ pas un standard mais un langage très
. largement utilisé
Test ▸ développé par SUN microsystems en 1995
▸ dernière version stable : JDK 1.6.0 (ou
Java 6)
. .
Maintenance
.. .

.
Langage et Concepts de Programmation Orientée-Objet 7 / 39
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)
.. .

.
.
. .
.Germinal, E. Zola . .Alice Dupont, directrice .
.Le Canard Enchaîné .Anne Misa, lectrice

. .
.Bilbo le Hobbit, J.R.R. Tolkien .Michel Martin, bibliothécaire .
.Robert Light, lecteur

Langage et Concepts de Programmation Orientée-Objet 8 / 39


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 Livre .Classe Employé
.Classe Lecteur
.Classe Journal
.
. .
.Germinal, E. Zola . .Alice Dupont, directrice .
.Le Canard Enchaîné .Anne Misa, lectrice

. .
.Bilbo le Hobbit, J.R.R. Tolkien .Michel Martin, bibliothécaire .
.Robert Light, lecteur

Langage et Concepts de Programmation Orientée-Objet 9 / 39


Déroulement du cours Introduction Concepts Java Remarques Objet Classe Encapsulation Héritage

. Contenu d’une classe

. .
Une classe est composée de plusieurs. Exemple .
..
membres dont chacun est soit class CompteBancaire {
▸ un attribut : variable typée String proprietaire;
▸ une méthode (ou opération) : double solde;
ensemble d’instructions de
traitement double getSolde() {
.
.. . return solde;

.
}

void credite(double val) {


solde = solde + val;
}
}
.
.. .

.
Langage et Concepts de Programmation Orientée-Objet 10 / 39
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 / 39
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 / 39
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

. code source d’une classe commence par le mot-clé class suivi de son contenu
Le
.. .

.
.
Syntaxe .
..
class <nom de la classe> {
<contenu de la classe>
}
.
.. .

.
Langage et Concepts de Programmation Orientée-Objet 13 / 39
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 : . ▸ Plus deux nouveaux types : .
▸ int ▸ boolean
▸ float ▸ byte
▸ double
▸ Plus la classe :
▸ short
▸ String
▸ long
.
▸ char .. .

.
▸ void
.
.. .
.
.
Exemple .
..
int monEntier ;
String chaine ;
boolean
. test ;
.. .

.
Langage et Concepts de Programmation Orientée-Objet 14 / 39
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 / 39
Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe

. Exemple : classe Livre


class Livre {
String titre ;
Lecteur emprunteur ;
.Attributs
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 / 39


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 ; Portée de classe .
..
b = a; l’entier a est visible dans toute la
a = c; classe
. Portee
.. .

.
}
afficher(b) ;
}
}

Langage et Concepts de Programmation Orientée-Objet 17 / 39


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 ; Portée de méthode .
..
b = a; l’entier b est visible à l’intérieur
a = c; . la méthode test
de
.. .

.
}
afficher(b) ;
}
}

Langage et Concepts de Programmation Orientée-Objet 18 / 39


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) { .
Portée de bloc .
int c = b ; ..
l’entier c est visible à l’intérieur
b = a;
du bloc de la structure de
a = c;
contrôle
. if
} .. .

.
afficher(b) ;
}
}

Langage et Concepts de Programmation Orientée-Objet 19 / 39


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 / 39
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) {
.Constructeur 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 / 39


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 / 39


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 / 39
Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe

. Exemple

class Livre { class Lecteur {


String titre ; Livre[] emprunts ;
Lecteur emprunteur ; int nbEmprunts ;
… …
boolean estEmprunte() { boolean empruntePossible() {
if (emprunteur == null) if (nbEmprunts < 5)
return false ; return true ;
else return true ; else return false ;
} }

Date emprunte(Lecteur lec) { void ajouteEmprunt(Livre liv) {


if (this.estEmprunte()) emprunts[nbEmprunts] = liv ;
return null ; nbEmprunts ++ ;
if (lec.empruntPossible()) { }
emprunteur = lec ; }
lec.ajouteEmprunt(this) ;
return new Date() ;
} else return null ;
}
}

Langage et Concepts de Programmation Orientée-Objet 24 / 39


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 / 39
Déroulement du cours Introduction Concepts Java Remarques Syntaxe Visibilité Exceptions Compléments de syntaxe

. Exemple de visibilité

public class Livre { public class Lecteur {


private String titre ; private Livre[] emprunts ;
private Lecteur emprunteur ; private int nbEmprunts ;
… …
private boolean estEmprunte() { public boolean empruntePossible() {
if (emprunteur == null) if (nbEmprunts < 5) return true ;
return false ; else return false ;
else return true ; }
}
public void ajouteEmprunt(Livre liv) {
public Date emprunte(Lecteur lec) { emprunts[nbEmprunts] = liv ;
if (this.estEmprunte()) nbEmprunts ++ ;
return null ; }
if (lec.empruntPossible()) { }
emprunteur = lec ;
lec.ajouteEmprunt(this) ;
return new Date() ;
} else return null ;
}
}

Langage et Concepts de Programmation Orientée-Objet 26 / 39


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 / 39
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 / 39
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 L’exception est traitée dans la méthode
ayant invoquée la méthode déclarant appelant la méthode émettant
l’exception
. (mots-clés throws et throw) l’exception
. (mots-clés try et catch)
.. . .. .

.
.
. .
Exemple . Exemple .
.. ..
public String initialesAuteur(Livre l) public String initialesAuteur(Livre l) {
throws IndexOutOfBoundsException { String titre, initiales ;
String titre, initiales ; try {
titre = l.getTitre() ; titre = l.getTitre() ;
initiales = titre.substring(0,2) ; initiales = titre.substring(0,2) ;
return initiales ; return initiales ;
}
. } catch (IndexOutOfBoundsException ex) {
.. .
.

return new String(” ? ? ?”) ;


}
}
.
.. .

.
Langage et Concepts de Programmation Orientée-Objet 29 / 39
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 / 39
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 / 39
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 / 39
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 / 39
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 / 39
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 / 39
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 / 39
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 / 39
Déroulement du cours Introduction Concepts Java Remarques

. Usage des langages de programmation

http://www.tiobe.com/index.php/content/paperinfo/tpci/
Langage et Concepts de Programmation Orientée-Objet 38 / 39
Déroulement du cours Introduction Concepts Java Remarques

. Références utiles
▸ Livres :
▸ Java 2 for professional developers, the authoritative solution, Michael Morgan,
Sams publishing, 1999
▸ Java in a nutshell, 5th edition, David Flanagan, O’Reilly, 2005
▸ Sites web :
▸ Le site Java de SUN, http://java.sun.com
▸ Le tutorial Java de SUN, http://java.sun.com/docs/books/tutorial/
▸ l’API du JDK 1.6.0, http://java.sun.com/javase/6/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/
▸ un autre cours, http://www.ducrot.org/java.html
▸ plein d’autres cours, http://java.developpez.com/cours/

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