Approche Approche ObjetObjet& Java& Java
Mémoire de fin d’étudesprésenté par
Amine Brikci-Nigassa
Amine Brikci-Nigassa19/11/2001 Approche objet & Java
Objectifs
• Acquisition des notions fondamentales de la « pensée objet »
• Déterminer le « degré de couverture » de chacune de ces notions par Java
L’approche objet
Amine Brikci-Nigassa19/11/2001 Approche objet & Java
« Tout est objet »
• Approche fonctionnelle « Que veut-on faire ? »
• Approche objet « De quoi parle-t-on? »
• Chaque objet a une vie
Amine Brikci-Nigassa19/11/2001 Approche objet & Java
Qu’est-ce qu’un objet ?
• Entité « modélisable », ayant une existence propre, concrète ou abstraite.
• Exemples :
une voiture un client un compte
€ ‘bancaire
un bouton une chaîne de caractères
" Bravo ! "
Amine Brikci-Nigassa19/11/2001 Approche objet & Java
Caractéristiques d’un objet
• son Identité• son État• son Comportement
Amine Brikci-Nigassa19/11/2001 Approche objet & Java
Caractéristiques d’un objet
• son Identité :– Implicite– Le différencie des autres objets
• son État• son Comportement
Amine Brikci-Nigassa19/11/2001 Approche objet & Java
Caractéristiques d’un objet
• son Identité• son État :
– Varie dans le temps– État = valeur des attributs à un instant
tattributs = champs = données :
propriétés de l’objet (c’est la mémoire de l’objet)
• son Comportement
Amine Brikci-Nigassa19/11/2001 Approche objet & Java
Caractéristiques d’un objet
• son Identité• son État• son Comportement :
– ensemble des opérations ou méthodes réalisables par l’objet• Les méthodes sont déclenchées par des
messages envoyés par d’autres objets.• Méthode (P.O.O.) Fonction
(P.Structurée)
Amine Brikci-Nigassa19/11/2001 Approche objet & Java
• Deux méthodes particulières :– Constructeur
et– Destructeur
Amine Brikci-Nigassa19/11/2001 Approche objet & Java
• Deux méthodes particulières :– Constructeur :
• déclenché automatiquement à la création de l’objet
• construit l’objet• initialise ses attributs
et– Destructeur
Amine Brikci-Nigassa19/11/2001 Approche objet & Java
• Deux méthodes particulières :– Constructeur
et– Destructeur :
• détruit l’objet (libère sa place)• déclenche les actions à effectuer à la mort de
l’objet• non utilisé dans certains langages de POO
(Smalltalk, Java) : les objets sont détruits automatiquement par le « ramasse-miettes » (garbage collector)
Amine Brikci-Nigassa19/11/2001 Approche objet & Java
Les Classes, moules à objets
• Regroupent les objets semblables• Classe = Type d’un objet• Fabrication de nouveaux objets
(instances de la classe) = instanciation
• une classe spécifie :– les attributs et leur type– les méthodes
Amine Brikci-Nigassa19/11/2001 Approche objet & Java
Principes fondamentaux de l’approche objet
3 principes simples mais puissants :• Encapsulation• Héritage• Polymorphisme
Amine Brikci-Nigassa19/11/2001 Approche objet & Java
EncapsulationDeux significations :
– Regroupement des données et des opérations en une seule entité
– Masquage des données aux autres objets :• les données sont privées,• accès restreint seulement aux méthodes
publiques,• l’ensemble des méthodes publiques =
interface de l’objetRarement respecté strictement : les langages de
P.O.O. admettent l’accès aux données (le programmeur décide)
Amine Brikci-Nigassa19/11/2001 Approche objet & Java
Héritage• Réutilisation (extension) d’une classe pour en
définir une plus spécialisée.• La sous-classe étend la super-classe :
– hérite de ses attributs et méthodes– en définit de nouveaux
• Une super-classe peut être étendue par plusieurs sous-classes arborescence
• Deux sens possibles :– Spécialisation : super-classe sous-classe (vers
k bas)– Généralisation : sous-classe super-classe (vers
k haut)
Amine Brikci-Nigassa
Relation d’Héritage
Œuvre
titre auteur
Livre Film Disque
Western Thriller Dessin-animé
géné
ralis
atio
n spécialisation
Amine Brikci-Nigassa
Héritage multiple
• Une classe peut hériter de plusieurs super-classes : c’est l’héritage multiple.
• Problème : une classe peut hériter 2 méthodes de même nom (provenant de 2 super-classes différentes) laquelle choisir ?Conséquences : risque d’erreurs, confusions.
Amine Brikci-Nigassa19/11/2001 Approche objet & Java
Polymorphisme
• Faculté, pour une méthode, de prendre plusieurs formes différentes selon :– l’objet concerné : liaison dynamique– les types et nombre des paramètres :
surcharge
• En réalité, ce sont des méthodes différentes avec le même nom
Amine Brikci-Nigassa
Autres concepts de l’approche objet
• Classes abstraites• Interfaces• Persistance• Paquetages
Amine Brikci-Nigassa
Autres concepts de l’approche objet• Classes abstraites :
– Classes non instanciables, créées pour être étendues
– Souvent le résultat d’une généralisation visant à regrouper des classes différentes (« extension vers le haut »)
– Permettent des méthodes abstraites, sans corps, à redéfinir chez les sous-classes
• Interfaces• Persistance• Paquetages
Amine Brikci-Nigassa
Autres concepts de l’approche objet
• Classes abstraites• Interfaces :
– Classes sans méthodes « concrètes »– Simples spécifications à implémenter
par leurs sous-classes– Implémentation de plusieurs interfaces =
alternative à l’héritage multiple
• Persistance• Paquetages
Amine Brikci-Nigassa
Autres concepts de l’approche objet• Classes abstraites• Interfaces• Persistance :
– Aptitude d’un objet à exister au-delà du processus qui l’a créé
sauvegarde des données sur un support physique
– Fait défaut dans les langages de P.O.O.– Solution d’avenir : S.G.B.D.O.
• Paquetages
Amine Brikci-Nigassa
Autres concepts de l’approche objet
• Classes abstraites• Interfaces• Persistance• Paquetages :
– Regroupements des classes en unités organisationnelles
– Regroupent : classes, interfaces, sous-paquetages hiérarchisation
Amine Brikci-Nigassa
Applications de l’approche objet
• Propagation « ascendante » dans le cycle de vie :
Analyse
Evolution des méthodes
ConceptionProgrammation
Amine Brikci-Nigassa
Applications de l’approche objet• Atteint tous les domaines de l’informatique :
– Méthodes : OMT, OOD, OOSE, OOM,… et le nouveau standard : UML
– Langages de P.O.O. : Simula (1967), Smalltalk (1976), C++, Java (1995), Python, C#, …
– Bases de données objet : encore hésitantes, implémentent la persistance, mais difficile de s’imposer dans le règne des SGBD relationnelles
– Architectures distribuées : communication d’objets sur un réseau. Émergence de 2 standards :
• DCOM de Microsoft (Windows)• CORBA de l’OMG (UNIX)
– etc.
Amine Brikci-Nigassa
Le langage
Amine Brikci-Nigassa
Caractéristiques de Java
• Orienté objet• Portable, Multi-plate-formes• Sécurisé• Simplifié• Multithread• Distribué• Performant
Amine Brikci-Nigassa
Deux types de programmes
Après compilation d’un programme Java, on obtient au choix :
• une Applet : programme intégré à une page Web, exécuté par le navigateur
• une Application : logiciel « classique » exécutable indépendamment, sur une machine virtuelle Java (JVM)
Amine Brikci-Nigassa
Le JDK
• C’est l’environnement de développement fourni gratuitement par Sun
• Comprend essentiellement :– un Compilateur (javac) : compile les
sources .java en byte-code (fichiers .class)
– un Interpréteur (java) : exécute le byte-code
Amine Brikci-Nigassa
Classes en Java
class Rectangle {
double largeur ;
double hauteur ;
double surface() ;
void afficher(double x, double y) ;
}
surface()
afficher()
largeur
hauteur
Rectangle
Amine Brikci-Nigassa
Types des variables• Classes : ce sont les types des
variables objet• Types élémentaires : types du genre
« programmation classique » : entier, réel, booléen, caractère…– Simplifient la programmation,– MAIS leur utilisation est contraire à la
pensée « tout objet »– ont leur équivalent objet : classes
enveloppes, peu utilisées
Amine Brikci-Nigassa
Constructeurs et Destructeurs
• Constructeur :– déclaré comme les autres méthodes, mais
:• a obligatoirement le même nom que la classe• pas de type de retour (pas de void)
– utilisé pour initialiser les attributs, l’allocation de mémoire est automatique (implicite)
– pas obligatoire : son omission constructeur vide implicite
Amine Brikci-Nigassa
Constructeurs et Destructeurs
• Destructeur :– Pas de destructeur en Java– La destruction (libération de la mémoire)
est l’affaire du « ramasse-miettes » (garbage collector) qui s’en occupe « quand il veut »
– La méthode finalize() est une alternative peu utilisée. Elle est exécutée au moment (imprévisible) de la destruction.
Amine Brikci-Nigassa
Les objets : Instanciation
• L’opérateur new crée un objet et appelle son constructeur. Ex.: new Rectangle(10,25)
• L’objet doit être rattaché à une variable objet à déclarer préalablement:Rectangle r ;
r = new Rectangle() ;
Ou :Rectangle r = new Rectangle() ;
Amine Brikci-Nigassa
Identité d’un objet• La variable (r) déclarée n’est pas un véritable
objet mais une référence (un « pointeur »)• L’affectation (r=new Rectangle();) relie la
référence à l’objet créé.• La référence est l’implémentation de
l’identité d’un objet.• Deux objets au même contenu n’ont pas
forcément la même identité : deux variables objets référençant des objets semblables ne sont pas égales (égalité profonde Vs. égalité superficielle)
Amine Brikci-Nigassa
Encapsulation
• Le masquage des données (et de méthodes) est contrôlé par le programmeur : mots-clés private, protected et public placés devant.
• Les données peuvent être publiques : Contradiction avec le paradigme objet !
Amine Brikci-Nigassa
Héritage
class Western extends Film {
• extends indique l’héritage• Seul l’héritage simple est autorisé• L’héritage multiple, source de
problèmes est remplacé par l’utilisation des interfaces
Amine Brikci-Nigassa
Polymorphisme
• Liaison dynamique• Surcharge des méthodes
Amine Brikci-Nigassa
Polymorphisme
• Liaison dynamique :– Un message est relié à la bonne
méthode (celle du bon objet) à l’exécution
• Surcharge des méthodes
Amine Brikci-Nigassa
Polymorphisme
• Liaison dynamique• Surcharge des méthodes :
– Différenciation des méthodes homonymes à la compilation par leur signature
– Signature = nom + liste ordonnée des paramètres
– Nécessaire pour déclarer plusieurs constructeurs (leur nom est imposé)
Amine Brikci-Nigassa
Classes abstraites
• Méthode abstraite : précédée du mot clé abstract. Pas de corps.
• Une classe abstraite (mot-clé abstract) ne peut être instanciée.
• Servent à la hiérarchisation des classes (exemple : la classe Object du JDK généralise toutes les classes)
Amine Brikci-Nigassa
Interfaces• « Classe » dont toutes les méthodes sont
abstraites.• Déclarée par « interface » au lieu de
« class »• Utilisée avec « implements » au lieu de
« extends »• Héritage multiple est remplacé au choix par :
– L’implémentation de plusieurs interfaces,– L’extension d’une super-classe et
l’implémentation d’une interface
Amine Brikci-Nigassa
Paquetages
• Classes et interfaces standard du JDK : organisées en paquetages.
• Implémentation : structure de répertoires
• Mot-clé package au début : définit le paquetage
• Mot-clé import : permet l’accès à un paquetage
Amine Brikci-Nigassa
Persistance
Java n’a pas de support direct de la persistance, mais propose 2 solutions :
• La Sérialisation• Le JDBC
Amine Brikci-Nigassa
Persistance
Java n’a pas de support direct de la persistance, mais propose 2 solutions :
• La Sérialisation :– Lecture et écriture des données d’un objet
dans un flux (série d’octets)– Utilise l’interface standard Serializable– Satisfaisante pour de petites quantités de
données– Souvent insuffisante (applications de gestion)
• Le JDBC
Amine Brikci-Nigassa
PersistanceJava n’a pas de support direct de la
persistance, mais propose 2 solutions :• La Sérialisation• Le JDBC : (Java DataBase Connectivity)
– Module de bases de données du JDK.– Relie les SGBDR à Java. Utilise le langage SQL
pour manipuler les tables.– Problème de conversion objet-relationnel– Solution : Bibliothèque de persistance =
couche logicielle pour faire abstraction de l’aspect relationnel
Amine Brikci-Nigassa
ConclusionConclusion
Amine Brikci-Nigassa
Conclusion• Java est bien un langage de P.O.O., il
implémente la plupart des concepts objet.• Quelques exceptions :
– Types élémentaires non objet,– Permet les champs de données publics,– Empêche l’héritage multiple,– Préfère les SGBDR aux SGBDO.
• Un Java plus « orthodoxe » perdrait peut-être de sa simplicité ? Il est possible de « faire plus objet » que Java. Exemple : Python (il est même plus simple !)