Top Banner
Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation
36

Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

Apr 04, 2015

Download

Documents

Olivie Vivier
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

Object-Oriented Software EngineeringPractical Software Development using UML and Java

Chapitre 2: Review of Object Orientation

Page 2: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

2

2.1 Qu’est-ce que l’Orientation Objet?Paradigme procédural:•Le logiciel est organisé autour de la notion de procédures

•Abstraction de procédures— Fonctionne bien lorsque les données sont simples

•Abstraction de données— Grouper ensemble les données décrivant une même entité

— Aide à réduire la complexité du système

Paradigme orienté objet: •Les abstractions de procédures sont placées à l’intérieur des abstractions de données

Page 3: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

3

Paradigme Orienté Objet

Une approche consistant à organiser la solution d’un problème autour du concept d’objets.

•Ces objets sont des instances de classes:—Ce sont des abstractions de données—Contenant des abstractions de procédures

•Un programme devient alors un ensemble d’objets collaborant entre eux afin d’effectuer un tâche donnée

Page 4: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

4

Illustration des ces deux paradigmes

Page 5: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

5

2.2 Classes et Objets

Un objet•est un ensemble structuré de données s’exécutant dans un logiciel

•a des propriétés—représentant son état

•a un comportement—définissant ses actions et réactions—simulant parfois le comportement d’un objet du monde réel

Page 6: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

6

Objets

Page 7: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

7

Classes

Une classe:•Est une unité d’abstraction dans un programme orienté-objet

•Représente des objets similaires—ses instances

•Est un module logiciel—Décrivant la structure de ses instances (propriétés)

—Contenant des méthodes définissant leur comportement

Page 8: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

8

Classe ou instance?•Quelque chose pouvant avoir des instances est une classe

•Quelque chose est une instance si il est l’un des éléments d’un ensemble (défini par la classe)

Film• Classe; ses instances sont les différents films.Bobine de Film:• Classe; ses instances sont chacune des bobines existantes

Bobine de film portant le numéro de série SW19876• Une instance de BobineDeFilmScience Fiction• Instance de la classe Genre.Film de Science Fiction• Classe; une de ses instances est le film ‘Star Wars’Représentation du film ‘Star Wars’ au cinéma Le Phoenix à 19h:• Une instance de Representation

Page 9: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

9

Donner un nom à une classe

•Devrait toujours débuter par une lettre majuscule— E.g. Banque not banque

•Utiliser le singulier

•Utiliser le bon niveau de généralité— E.g. Municipalité pourrait être préférable à Ville

•Donner un nom non ambigu ayant un sens précis— E.g. Pièce peut avoir plusieurs sens

Page 10: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

10

2.3 Variables d’instances

Ce sont des variables définies à l’intérieur d’une classe

•Attributs—des données simples—E.g. nom, dateDeNaissance

•Associations—représentent une relation avec d’autres classes

—E.g. superviseur, coursSuivis—Plus d’explications à venir au Chapitre 5

Page 11: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

11

Variables vs. Objets

Une variable•Réfère à un objet •Peut référer à différents objets à différents instants

Un objet peut être simultanément référé par plus d’une variable

Type d’une variable•Détermine quelle classe d’objets elle peut référer

Page 12: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

12

Variables de classe La valeur d’une telle variable est partagée par toutes les instances de la classe•Aussi appelée variable statique

•Si l’une des instances modifie la valeur d’une variable de classe, alors toutes les autres instances verront ce changement

• Ces variables sont utiles pour:— représenter des constantes (e.g. PI)— représenter des propriétés d’appliquant à une classe en général

Attention: ne pas faire un usage excessif des variables de classes

Page 13: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

13

2.4 Méthodes, Opérations et Polymorphisme

Opération•Une abstraction procédurale de haut niveau correspondant à un comportement spécifique

•Indépendante de toute implémentation—E.g., calcul de l’aire d’une figure

Page 14: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

14

Méthodes, Opérations et Polymorphisme

Méthode•Une abstraction de procédure utilisée pour implémenter un comportement dans une classe donnée

•Plusieurs classes différentes peuvent avoir des méthodes de même nom—Généralement c’est qu’elles réalisent la même opération d’une manière propre à chaque classe

—E.g, le calcul de l’aire d’un rectangle et d’un cercle

Page 15: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

15

Polymorphisme

Une propriété importante liée au paradigme orienté-objet selon laquelle une même opération s’applique de différente façon dans différente classes•Exige l’existence de plusieurs méthodes ayant le même nom

•La méthode qui sera exécutée par un objet dépend de la classe d’appartenance de cet objet

•Réduit grandement la nécessité d’insérer des énoncés de contôle tels que le if-else ou le switch

Page 16: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

16

2.5 Organisation des Classes en Hiérarchies

Super-classe•contient les éléments communs à un ensemble de sous-classes

Arbre d’héritage•Montre la relation entre super-classes et sous-classes

•Le triangle est le symbole utilisé pour représenter une généralisation

Héritage•Le mécanisme selon lequel toutes les sous-classes possèdent implicitement les éléments de leurs super-classes

Page 17: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

17

Un exemple d’arbre d’héritage

Page 18: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

18

Règle “est-un(e)”

La généralisation obéit toujours à une règle d’état•“Un compte chèque est un compte de banque”

•“Un village est une municipalité”

Est-ce qu’une Province devrait être une sous-classe de Pays?•Non!

—“Une province n’est pas un pays”

Page 19: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

19

Un arbre d’héritage pour des entités géométriques

Rectangle

QuadrilateralCircle

Ellipse Polygon PlaneLine

Shape3DShape2D

MatrixShape Point

MathematicalObject

Page 20: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

20

Tous les éléments hérités doivent s’appliquer adéquatement aux sous-classes

Page 21: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

21

2.6 Héritage, polymorphisme et variables

Page 22: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

22

Quelques opérations pour des formes géométriques

Original objects(showing bounding rectangle)

Rotated objects(showing bounding rectangle)

Translated objects(showing original)

Scaled objects(50%)

Scaled objects(150%)

Page 23: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

23

Classes abstraites et Méthodes abstraites

Une opération doit être définie au plus haut niveau d’abstraction possible•A ce niveau, l’opération peut être abstraite•Dans ce cas la classe devient aussi abstraite—Aucun instance directe peut être créée—Une classe non abstraite est une classe concrète

•Si une classe possède une opération abstraite, l’une de ses sous-classe doit définir concrètement cette opération—Toutes les opérations d’une classe au bas de l’arbre d’héritage doivent être concrètes

Page 24: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

24

Redéfinition

Une méthode héritée peut être redéfinie•Dans un but de restriction

—E.g. scale(x,y) ne fonctionne pas dans Circle

•Dans un but d’extension—E.g. SavingsAccount peut inclure des frais additionnels dans le cas d’un retrait

•Dans un but d’optimization—E.g. la méthode getPerimeterLength dans Circle est beaucoup plus simple que celle de Ellipse

Page 25: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

25

Objets immuables

•Les variables d’instance de tels objets ne peuvent être affectées que lors de la construction

•Aucune des opérations de ces objets peut changer la valeur de ces variables—E.g. dans un tel cas, la méthode scale devrait plutôt produire un nouvel objet

Page 26: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

26

Comment se détermine la méthode qui sera exécutée

1. D’abord vérifier si il existe une définition pour cette méthode dans la classe de l’objet de référence

2. Sinon, vérifier dans la super-classe de niveau immédiatement supérieur

3. Répéter l’étape 2, en remontant les niveaux jusqu’à ce qu’une méthode concrète soit trouvée

4. Si aucune méthode concrète n’est trouvée, il y a erreur• En Java et C++ une telle erreur

est identifiée à la compilation

Page 27: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

27

Liaison dynamique

Se produit lorsque la décision concernant la méthode à exécuter se prend lors de l’exécution du programme•Nécessaire lors que:

—Une variable réfère à un objet dont la classe d’appartenance fait partie d’une hiérarchie

—Et lorsque plus d’une méthode existe pour une même opération (polymorphique)

Page 28: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

28

2.7 Concepts clé de l’orienté objet

Pour qu’un langage puisse être dit orienté objet•Identité

— Chaque objet a une existence distincte— Deux objets demeurent distincts même si leurs variables contiennent les même valeurs

•Classes— Le programme s’organise en un ensemble de classes décrivant les objets qui feront partie du système

•Héritage— Le mécanisme permettant aux sous-classes d’hériter des propriétés et comportements de leur super-classes

•Polymorphisme— Le mécanisme suivant lequel il peut exister plusieurs méthodes pour la même opération

Page 29: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

29

Concepts clé de l’orienté objet

Abstraction•Objet -> du monde réel•Classe -> objets•Super-classe -> sous-classes•Opération -> méthodes•Attributs et associations -> variables d’instances

Modularité•Le programme se construit entièrement à l’intérieur de classes

Encapsulation•Tous les détails sont cachés à l’intérieur des classes

•Principe de masquage de l’information:— Un programmeur n’a pas besoin de connaître l’intérieur d’une classe pour en faire usage

Page 30: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

30

Le langage JavaHistoire•Le premier langage orienté objet fut Simula-67

— Conçu pour faciliter l’écriture de programmes de simulation

•Au début des années 1980, Smalltalk fut développé à Xerox PARC — Syntaxe nouvelle, importante librairie èa code ouvert, indépendance de plate-forme, ramasse-miette, bytecode

•A la fin des années 1980, C++ fut développé par B. Stroustrup, — Tire profit des avantages de l’orienté-objet tout en profitant de la popularité de C

•En 1991, les ingénieurs de Sun Microsystems lance un projet afin concevoir un langage à être utilisé dans les petits appareils intelligents: Oak — Avec l’avènement de l’Internet, une nouvelle

opportunité se dessine pour cette technologie— Ce nouveau langage renommé Java, fut officiellement

lancé en 1995 à la conférence SunWorld ’95

Page 31: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

31

Documentation

•Être capable de connaître les classes et les méthodes d’un système orienté-objet est fondamental

•Un outil appelé Javadoc permet de construire automatiquement la documentation associée à un programme écrit en Java—Cette documentation est construite à partir du code et des commentaires écrits par le programmeur

—Un format spécial doit être respecté pour les commentaires

—Ceux-ci peuvent même inclure du html

Page 32: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

32

Style de programmation

Toujours garder à l’esprit qu’un programme est fait pour être lu•Toujours retenir l’alternative la plus simple

•Écarter toute approche aussi futée soit elle, mais difficile à saisir

•Un programme plus court n’est pas nécessairement meilleur

Choisir des noms appropriés•Ils doivent être très descriptifs

Page 33: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

33

Style de programmation

Commenter •Tout ce qui pourrait ne pas être évident

•Les commentaires peuvent représenter de 25à 50% du programme

Organiser les classes de façon consistante•Variables, constructeurs, méthodes publiques et méthodes privées

Structurer le code de façon consistante

Page 34: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

34

Style de programmation

Éviter toute duplication de code•Ne pas cloner le code

—Créer plutôt une méthode (privée) regroupant le code commun

Page 35: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

35

Style de programmation

Se conformer aux bons principes de l’orienté objet

Minimiser le nombre de méthodes publiques

Bien séparer les interfaces et l’application

Page 36: Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 2: Review of Object Orientation.

© Lethbridge/Laganière 2001

Chapter 2: Review of Object Orientation

36

2.10 Risques et difficultés liés à la programmation orientée objet

Les langages sont en constantes évolution

L’efficacité peut être quelques fois problématique