Cours POO Java
Cours POO Java
Cours POO Java
objets
Les concepts de l’OO
Orienté objet?
• Les GSM
– Créer une classe GSM
• Quelles sont les variables d’états accessibles et non
accessibles?
• Quelles sont les fonctionnalités offertes à l’utilisateur?
Les concepts de l’OO
Héritage
• En quoi consiste l’héritage?
– Supposons qu’il existe déjà une classe qui définit un certain nombre de
messages et qu’on aie besoin d’une classe identique mais pourvue de
quelques messages supplémentaires
Comment éviter de réécrire la classe de départ?
Regrouper les classes en super-classes en factorisant et spécialisant
La sous-classe hérite des attributs et méthodes et peut en rajouter de
nouveaux
Quid du multi-héritage?
Appareil de Communication
Téléphone Walkie-Talkie Téléfax
GSM Fixe
Les concepts de l’OO
Héritage
• Ex: Dans l’écosystème
– La classe Faune regroupe les animaux
– La classe Ressource regroupe l’eau et la plante
Les concepts de l’OO
Héritage
• Quid du multi-héritage?
– Possible ou non d’un langage à un autre
Les concepts de l’OO
Héritage
• Qu’est-ce que le polymorphisme?
– Concept basé sur la notion de redéfinition de méthodes
– Permet à une tierce classe de traiter un ensemble de classes sans connaître leur
nature ultime
– Permet de factoriser des dénominations d’activité mais pas les activités elles-
mêmes
– Consiste à permettre à une classe de s’adresser à une autre en sollicitant un service
générique qui s’appliquera différemment au niveau de chaque sous-classe du
destinataire du message
– En d’autres termes, permet de changer le comportement d’une classe de base sans
la modifier Deux objets peuvent réagir différemment au même appel de
méthode
– Uniquement possible entre classes reliées par un lien d’héritage
• Exemple dans l’écosystème?
– Demander à tous les animaux de se déplacer (selon leurs propres règles) en leur
adressant un message en tant qu’objets de type “Faune”
Exercices
• Les êtres vivants EX 4.2
UML 1.3
OMG A cceptance, Nov 1997
Final submission to OMG, Sep ‘97 UML 1.1
public First submission to OMG, Jan ´97
feedback
UML partners UML 1.0
30
Les concepts de l’OO
La modélisation devient la référence
• Qu’est-ce qu’UML?
– UML est un langage objet graphique - un formalisme orienté objet, basé sur des
diagrammes (9)
– UML permet de s ’abstraire du code par une représentation des interactions statiques et du
déroulement dynamique de l’application.
– UML prend en compte, le cahier de charge, l’architecture statique, la dynamique et les
aspects implémentation
– Facilite l’interaction, les gros projets
– Générateur de squelette de code
– UML est un langage PAS une méthodologie, aucune démarche n’est proposée juste une
notation
Les concepts de l’OO
La modélisation devient la référence
Classes, interfaces,
collaborations Components
Use cases
– Les diagrammes d’objet: une description statique des objets et de leurs relations. Une
version « instanciée » du précédent
– Les diagrammes de séquence: un déroulement temporel des objets et de leurs interactions
– Les diagrammes de collaboration: les objets et leurs interactions en termes d ’envois de
message + prise en compte de la séquentialité
Les concepts de l’OO
La modélisation devient la référence
• Diagrammes UML
– Les diagrammes d’états-transitions: scrute les cycles de vie d’une classe
d’objet, la succession d ’états et les transitions
– Les diagrammes d’activité: le comportement des différentes opérations en termes d’actions
– Les diagrammes de composants: représente les composants physiques d ’une application
– Les diagrammes de déploiements: le déploiement des composants sur les dispositifs et les
supports matériels
Les concepts de l’OO
La modélisation devient la référence
• Diagramme de cas d’utilisation
– Cela répond aux spécifications du système:
• Ses fonctionnalités, son utilisation, les attentes de l ’utilisateur
• Ex: Distributeur MisterCash
Effectuer
La Banque
un virement
Gérer le
distributeur
Le client
Retirer
de l ’argent
Effectuer la Un
employé
Consulter maintenance
un compte
Les concepts de l’OO
La modélisation devient la référence
• Exemple de diagramme de cas d’utilisation
détaillé
paul : Client le système
Insérer carte
Vérifier carte
Demander code
Vérifier code
Message d ’erreur
Demander code
...
Les concepts de l’OO
La modélisation devient la référence
• Diagramme de classes
– Le but du diagramme de classes est de représenter les classes au sein d’un
modèle
– Dans une application OO, les classes possèdent:
• Des attributs (variables membres)
• Des méthodes (fonctions membres)
• Des relations avec d’autres classes
– C’est tout cela que le diagramme de classes représente
– L’encapsulation est représentée par: Nom Classe
- (private), + (public), # (protected) Attributs
– Les attributs s’écrivent: Méthodes()
+/-/# nomVariable : Type
– Les méthodes s’écrivent:
+/-/# nomMethode(Type des arguments) : Type du retour ou « void »
Les concepts de l’OO
La modélisation devient la référence
• Les relations d’héritage sont représentées par:
deposit(int):int 1
withdraw(int):int Bank
addALoan(Loan l):void
payYourLoans():void
calculInterest():int
isReimbursed(int):void Loan
- amount : int
- mensuality : int
Loan(int,int,BankAccount)
reimbourse():void
NormalAccount SparingAccount
calculInterest():int calculInterest():int
Les concepts de l’OO
La modélisation devient la référence
• Exemple de diagramme de séquence
retirer(500)
lireN°Compte()
retirerDeLArgent(500,88219)
débiter(500)
sortirDesBillets(5)
sortirBillets ()
Les concepts de l’OO
Les avantages de l’OO
• Les programmes sont plus stables, plus robustes et plus faciles à
maintenir car le couplage est faible entre les classes («encapsulation»)
• elle facilite grandement le ré-emploi des programmes: par petite
adaptation, par agrégation ou par héritage
• émergence des «design patterns»
• il est plus facile de travailler de manière itérée et évolutive car les
programmes sont facilement extensibles. On peut donc graduellement
réduire le risque plutôt que de laisser la seule évaluation pour la fin.
• l’OO permet de faire une bonne analyse du problème suffisamment
détachée de l’étape d’écriture du code - on peut travailler de manière
très abstraite UML
• l’OO colle beaucoup mieux à notre façon de percevoir et de découper
le monde
Les concepts de l’OO
Les avantages de l’OO
• Tous ces avantages de l’OO se font de plus en plus évidents
avec le grossissement des projets informatiques et la
multiplication des acteurs. Des aspects tels l’encapsulation,
l’héritage ou le polymorphisme prennent vraiment tout leur
sens. On appréhende mieux les bénéfices de langage plus
stable, plus facilement extensible et plus facilement ré-
employable
• JAVA est un langage strictement OO qui a été propulsé sur la
scène par sa complémentarité avec Internet mais cette même
complémentarité (avec ce réseau complètement ouvert) rend
encore plus précieux les aspects de stabilité et de sécurité
Les concepts de l’OO
Langages et plateformes
• Quels sont les principaux langages orienté objet
aujourd’hui?
– C++
• Hybride, permet la coexistence d’OO et procédural
• Puissant et plus complexe
• Pas de « ramasse-miettes », multihéritage, etc.
– Java
• Très épuré et strictement OO
• Neutre architecturalement (Multi-plateformes)
• Ramasse-miettes, pas de multihéritage, nombreuses librairies disponibles
– C#
• Très proche de Java
• Conçu par Microsoft
Les concepts de l’OO
En résumé
• Tout est un objet
• L’exécution d’un programme est réalisée par échanges de messages entre objets
• Un message est une demande d’action, caractérisée par les paramètres nécessaires à la
réalisation de cette action
• Tout objet est une instance de classe, qui est le « moule » générique des objets de ce type
• Les classes définissent les comportements possibles de leurs objets
• Les classes sont organisées en une structure arborescente à racine unique : la hiérarchie
d’héritage
• Tout le code des programmes de trouve entièrement et exclusivement dans le corps des
classes
• A l’exception toutefois de deux instructions:
– package définit l’ensemble auquel la classe appartient
– import permet l’utilisation de classes extérieures au package
• UML permet la représentation graphique des applications
Introduction à Java
V. Programmation orientée objets en Java
La création d’objets (1/2)
Le constructeur
• A le même nom que la classe
• Quand un objet est créé, on invoque tout d’abord public BankAccount(String
le constructeur de la classe n,int s,int i)
• Un constructeur utilise comme arguments des {
variables initialisant son état interne name=n ;
solde=s;
• On peut surcharger les constructeurs, i.e définir de
interest=i;
multiples constructeurs
}
• Il existe toujours un constructeur. S’il n’est pas
explicitement défini, il sera un constructeur par public BankAccount(String n)
défaut, sans arguments {
• Signature d’un constructeur: name=n ;
– Modificateur d’accès ( en général public) solde=0;
– Pas de type de retour interest=10;
– Le même nom que la classe }
– Les arguments sont utilisés pour initialiser les
variables de la classe
La création d’objets (2/2)
L’appel au constructeur
• Se fait pour initialiser un objet
Provoque la création réelle de l’objet en mémoire
Par l’initialisation de ses variables internes propres
• Se fait par l’emploi du mot clé « new »
• Avantages
– Rend les programmes plus faciles à corriger
– Limite le risque d’erreurs liées au réemploi d’un nom pour différentes variables
Exercices
EX 5.1
• Analyser la classe Point
– Que se passe-t-il à l’exécution du programme?
– Exécuter le programme pour vérifier
EX 5.2
• Analyser la classe Scope
– Que se passe-t-il à l’exécution du programme?
– Exécuter le programme pour vérifier
– Même question si la méthode job() est redéfinie comme suit:
Référence: Adresse
class Point{
int x=7, y=10;
Point(int x,int y){this.x=x;this.y=y;}
void move(int dx,int dy){x+=dx;y+=dy;}
}
Les variables
Types de référence (2/3)
p ????
Déclaration et création d’objets
• Déclaration : Point p;p ???? x 0
1. Cherche une place
y 0
• Création : p = new Point(2,3);
x 7
2. Assignation d’une valeur p ????
y 10
x 2
3. Exécution du constructeur p ????
y 3
x 2
4. Création du pointeur p ox0123abcd
y 3
Les variables
Types de référence (3/3)
Il n’y a désormais plus de
Assignation d’un type de référence référence vers l’ancien
Point « start », il sera
• Point start=new Point(4,3); donc détruit par le
Garbage Collector
• Point end=new Point(23,32);
• Point p=end; x 4
start ox0123abcd
• p.x=12; y 3
• start=p; x 23 12
end oxcafebabe
y 32
p oxcafebabe
EX 5.3
Exercice
• Classe MyPoint
– Lire le code et prévoir ce qui apparaîtra à l’écran à
l’exécution
– Observer en particulier les mécanismes de création et
d’assignation de variables de références dans la classe
Les méthodes (1/4)
Déclaration d’une méthode
• Une méthode est composée de: public void deposit (int amount) { Sa déclaration
solde+=amount ; Son corps
}
• Signature d’une méthode:
• Modificateurs d’accès : public, protected, private, aucun
• [modificateurs optionnels] : static, native, synchronized, final, abstract
• Type de retour : type de la valeur retournée
Signature
int solde ;
private Y
class AnIntegerNamedX {
x est une variable
int x; d’instance, donc
static public int x() { return x; } inaccessible pour la
static public void setX(int newX) { this.x = newX; }méthode static setX
}
Exercice EX 5.5
class MyClass{
class Child extends MyClass {
int x;
Child(){
MyClass(int x){
super(6); // appel du constructeur parent
this.x=x;// constructeur parent
}
}
}
}
Utilisation de l’héritage (4/5)
Les mots-clé « this » et « super »
double d = 3.1416;
int i = (int) d;
Conversion de types (2/2)
Application
• Appliquer un opérateur de « cast » au nom d’une variable
– Ne modifie pas la valeur de la variable
– Provoque le traitement du contenu de la variable en tant que variable du type
indiqué, et seulement dans l’expression où l’opérateur de cast se trouve
• S’applique aux variables de types primitifs et aux variables de types de
références
• Types primitifs:
– Seulement vers un type plus large (ou risque de perte de données)
– Interdit pour le type boolean
– Ex: Short Integer Long
• Types de références:
– Vers une classe parent ou une interface implémentée (ou risque d’erreur)
– Dans ce cas, l’opérateur de cast n’est pas nécessaire (en fonction du contexte)
– Peuvent toujours être castés vers OBJECT
– Ex: Voiture VéhiculesMotorisés Véhicules Object
Exercice
EX 5.6
Conversion de types
– Analyser le code de l’application « Circulation »
– Observer les mécanismes de conversion de types
– Déterminer les conversions valides et celles qui provoqueront une erreur à la
compilation
– Corriger la classe Circulation pour que l’application puisse être compilée et
exécutée correctement
– Analyser ensuite la même application avec cette fois la classe
« Circulation2 » pour classe principale (sans erreurs) et en observer les
mécanismes de conversion de types
– Quels risques pourraient se présenter en utilisant ces techniques sur des
collections hétérogènes?
Polymorphisme (1/2)
Définition
• Concept basé sur la notion de redéfinition de méthodes
• Consiste à permettre à une classe de s’adresser à une autre en sollicitant un
service générique qui s’appliquera différemment au niveau de chaque sous-classe
du destinataire du message
• En d’autres termes, permet de changer le comportement d’une classe de base
sans la modifier Deux objets peuvent réagir différemment au même appel de
méthode
• Uniquement possible entre classes reliées par un lien d’héritage et suppose un
cast « vers le haut » des objets des classes enfants
class Bank{
BankAccount[] theAccounts = new BankAccount[10];
public static void main(String[] args){
theAccounts[0] = new NormalAccount("Joe",10000);
theAccounts[0].computeInterest();
}}
Polymorphisme (2/2)
Utilisation du polymorphisme sur des collections hétérogènes
BankAccount[] ba=new BankAccount[5];
for(int i=0;i<ba.length();i++)
{
ba[i].computeInterest();
}
Exercice
EX 5.4c
Cat
Dog move():void
eat():void
runAway():void
move():void
eat():void
Les interfaces (1/3)
Définition
• Exemple:
public class monApplet extends Applet implements Runnable, KeyListener
Les interfaces (3/3)
Exemple
<<interface>>
GraphicalObject
draw(Graphics g):void
intersects(Object o):boolean
Rectangle Oval
int width,height,x,y int width,height,x,y
Rectangle(int x,int y,int width,int height) Oval(int x,int y,int width,int height)
draw(Graphics g):void draw(Graphics g):void
intersects(Object o):boolean intersects(Object o):boolean
Square
Square(int x,int y,int size)
Exercice
EX 5.7
BankAccount *
MyProgram
- String owner
- String number
- int solde
- double interst
deposit(int):int 1
withdraw(int):int Bank
addALoan(Loan l):void
payYourLoans():void
calculInterest():int
isReimbursed(int):void Loan
- int amount
- int mensuality
Loan(int,int,BankAccount)
reimbourse():void
NormalAccount SparingAccount
calculInterest():int calculInterest():int
Exercice
EX 5.8
• Envoi de messages
– Ecrire un programme le plus simple possible pour envoyer un
message d’un objet A à un objet B, en plaçant néanmoins le main
dans une classe spécialement dédiée à cet effet
• Les différentes API Java sont regroupées en packages
• Ces packages sont eux-mêmes rassemblés dans trois grands
groupes, JAVA, JAVAX et ORG
– JAVA
• Contient tous les API d’origine de Java 1.0 dont la plupart sont toujours utilisés
– JAVAX
• Contient des API réécrits depuis Java 2 et qui sont destinés à les remplacer
– ORG
• API provenant de spécifications définies par des organismes internationaux
• La documentation complète des API est toujours disponible sur le
site Web de Java
– http://java.sun.com/
Packages
JAVA
Package Description
java.applet Classes nécessaires à la création d’applets
java.awt Abstract Windowing Toolkit Interfaces graphiques, événements…
java.beans Pour le développement de composants JavaBeans
java.io Pour la gestion des IO systèmes (système de fichiers, etc.)
java.lang Classes fondamentales du langage (toujours importées par défaut)
java.math Pour les traitements arithmétiques demandant une grand précision
java.net Pour les connexions et la gestion réseau
java.nio Définit des tampons
java.rmi Toutes les classes liées au package RMI (Remote Method Invokation)
java.security Classes et interfaces du framework de sécurité Java
java.sql Pour l’accès et la gestion des bases de données JDBC
java.text Pour la manipulation de texte, dates, nombres et messages
java.util Collections, modèle événementiel, dates/heures, internationalisation
Packages
JAVAX
Package Description
javax.accessibility Définit un contrat entre l’U.I. et une technologie d’assistance
javax.crypto Pour les opérations liées à la cryptographie
javax.imageio Pour la gestion des IO liées aux images
javax.naming Pour la gestion de la Java Naming and Directory Interface (JNDI)
javax.net Pour les connexions et la gestion réseau
javax.print Pour les services liés à l’impression
javax.rmi Toutes les classes liées au package RMI (Remote Method Invokation)
javax.security Classes et interfaces du framework de sécurité Java
javax.sound Pour le développement d’application gérant le son (Midi / Sampled)
javax.sql Pour l’accès et la gestion des bases de données JDBC
javax.swing Interfaces graphiques « légères », identiques sur toutes plateformes
javax.transaction Exceptions liées à la gestion des transactions
javax.xml Parseurs et autres classes liées au format XML
Packages
ORG
Package Description
org.ietf Framework pour le développement d’applications avec
services de sécurité provenant de mécanismes comme le
Kerberos
org.omg Contient tous les packages liés aux spécifications de l’Object
Management Group tels que CORBA, IDL et IOP
org.w3c Contient un parseur DOM pour XML
org.xml Contient des parseurs SAX pour XML