Poo

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Poo as PDF for free.

More details

  • Words: 1,819
  • Pages: 33
Pôle Informatique 2005/2006 École Nationale Supérieure des Mines de Saint-Étienne

Langage et Concepts de Programmation Orientée-Objet Laurent Vercouter

[email protected]

8h15 18 mai

Déroulement du cours 9h45 10h

COURS

11h30 13h30

15h 15h15

TD

19 mai

TP

6 juin

TP

8 juin

TP

TD TP

13 juin 15 juin

TD

TP

21 juin

TD

TP

22 juin

TP

TP

29 juin

EXAMEN

TP

– –

16h45

2 TP à envoyer à la fin des séances (15/6 et 29/6) Évaluation sur un de ces 2 TPs et l'examen écrit

note = 0,5*examen + 0,5*TP

TP

Modèle en cascade pour le  développement logiciel Analyse Conception Implémentation Tests Maintenance

SADT, SA-RT, MERISE, OMT, UML, … Fortran, Cobol, C, SmallTalk, Ada, C++, Java, …

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

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++, Java, …

D T D

D

T

T

D

D

T

T

UML & Java Analyse Conception Implémentation Tests Maintenance

Unified Modeling Language (UML) :  notation standard pour l'analyse et la conception  construite par l'Object Management Group  Première version standard en 1997 Java :  pas un standard mais un langage très largement utilisé  développé par SUN microsystems en 1995  dernière version stable : JDK 1.5.0

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

Exemple: Gestion d'une bibliothèque

Germinal E. Zola Le Monde

Le seigneur des anneaux J.R.R.Tolkien

Alice Dupont Directrice

Michel Martin Bibliothécaire

Anne Durand Lectrice Arsène Deschamps Lecteur

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 Lecteur Classe Livre -titre, auteur

Classe Journal -titre

Classe Employé -nom, prénom, statut

-nom, prénom

Germinal E. Zola Le Monde

Le seigneur des anneaux J.R.R.Tolkien

Alice Dupont Directrice

Michel Martin Bibliothécaire

Anne Durand Lectrice Arsène Deschamps Lecteur

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 class CompteBancaire { String proprietaire; Attributs double solde; double getSolde() { return solde; }

Méthodes

}

 void credite(double val) { solde = solde + val; }

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.

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 :

class <nom de la classe> { }

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 Déclaration : int monEntier; String chaine; boolean test;

É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. <nom de méthode> ( <arguments> * ) { }

Exemple : classe Livre

class Livre { String titre; Lecteur emprunteur;

Attributs

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; }

Méthodes

Portée d'une variable public class Portee { int a; public void test(int b) { if (a > b) { int c = b; b = a; a = b; } afficher(b); } }

l'entier a est visible dans toute la classe

Portée d'une variable public class Portee { int a; public void test(int b) { if (a > b) { int c = b; b = a; a = b; } afficher(b); } }

l'entier b est visible à l'intérieur de la méthode test

Portée d'une variable public class Portee { int a; public void test(int b) { if (a > b) { int c = b; b = a; a = b; } afficher(b); } }

l'entier c est visible dans le bloc du if

Instanciation 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

Constructeur de la classe Livre 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) { … } }

Constructeur

Instanciation de la classe Livre class InterfaceBibliothecaire { void enregistreLivre(String nom) { Livre nouveauLivre; nouveauLivre = new Livre(nom); ajouteEnBibliotheque(nouveauLivre); } void ajouteEnBibliotheque(Livre li) { … } }

Invocation de méthodes En Java, une méthode ne peut pas être invoquée seule, elle est toujours appelée sur un objet. 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 sur lequel elle est appelée. La syntaxe pour accéder aux attributs d'un objet est la même.

Exemple

class Livre { String titre; Lecteur emprunteur; … boolean estEmprunte() { if (emprunteur == null) return false; else return true; } Date emprunte(Lecteur lec) { if ( this.estEmprunte() == true) 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 ++; } }

Visibilité des membres La visibilité d'une classe et de ses membres définit quelles autres classes y ont accès. Ces contraintes 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

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() == true) 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 ++; } }

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.



peut provoquer la sortie d'une méthode



correspond à un type d'erreur



contient des informations sur cette erreur

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 { … } … }

Traitement des exceptions Il y a deux manières de traiter une exception reçue : Propagation

Interception

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("???"); } }

L'exception est renvoyée à la méthode ayant invoquée initialesAuteur

L'exception est traitée dans la méthode initialesAuteur et "disparaît"

Émission & création d'exceptions Vous devez prévoir tous les cas d'erreurs des méthodes que vous écrivez en émettant les exceptions appropriées: 1. Créer un objet d'une classe d'exception 2. Émettre l'exception public Date emprunte(Lecteur lec) throws Exception { if ( this.estEmprunte() = = true) { 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"); } }

Compléments de syntaxe Instruction conditionnelle if {bloc_si_vrai} else {bloc_si_faux} Exemple : if ( emprunteur.getStatut() = = "employe") { unLivre.setDateRetour(30); } else { unLivre.setDateRetour(15); }

Compléments de syntaxe Instruction itérative while {bloc} Exemple : while ( i < biblio.nbLivres() ) { Livre l = biblio.getLivre(i); l.setDisponible(true); i++; }

Compléments de syntaxe Instruction itérative for (; ; ) {bloc} Exemple : for (int i = 0; i < biblio.nbLivres(); i++ ) { Livre l = biblio.getLivre(i); l.setDisponible(true); }

Compléments de syntaxe Instruction de choix multiple switch () { case : case : … default: }

Exemple : switch (l.getCategorie()) { case 1: l.setDuree(15); break; case 2: l.setDuree(20); break; default: l.setDuree(30); }

Autres particularités de syntaxe  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"

 La variable length donne la taille d'un tableau; char[] tab = new char[25]; int a = tab.length;

 a vaut 25

Related Documents

Poo
June 2020 12
Poo
June 2020 9
Poo
November 2019 22
Poo
April 2020 9
Poo
May 2020 15
Poo
June 2020 9