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