Programmation par composants (1/3) Programmation par composants (2/3)



Documents pareils
Introduction aux composants logiciels : JavaBeans Master des Technologies de l'internet

Héritage presque multiple en Java (1/2)

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Applet pour visualiser les variables «automate» notifiées

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

as Architecture des Systèmes d Information

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Auto-évaluation Programmation en Java

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Remote Method Invocation (RMI)

RMI le langage Java XII-1 JMF

INITIATION AU LANGAGE JAVA

Généralités sur le Langage Java et éléments syntaxiques.

Programmer en JAVA. par Tama

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Programmation Objet - Cours II

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

2 Chapitre 1 Introduction

Application web de gestion de comptes en banques

Génie Logiciel avec Ada. 4 février 2013

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

TP1 : Initiation à Java et Eclipse

Java c est quoi? Java pourquoi?

La technologie Java Card TM

CORBA. (Common Request Broker Architecture)

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Chapitre 2. Classes et objets

.NET remoting. Plan. Principes de.net Remoting

Plan du cours. Historique du langage Nouveautés de Java 7

Annexe : La Programmation Informatique

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Diagramme de classes

Java pour le Web. Cours Java - F. Michel

1. Installation d'un serveur d'application JBoss:

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Alfstore workflow framework Spécification technique

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Cours 1: Java et les objets

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Mise en œuvre des serveurs d application

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Initiation à JAVA et à la programmation objet.

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

Langage Java. Classe de première SI

TD/TP PAC - Programmation n 3

Objets et Programmation. origine des langages orientés-objet

JMX : un standard pour la gestion Java

Traduction des Langages : Le Compilateur Micro Java

Java DataBaseConnectivity

Programmation en Java IUT GEII (MC-II1) 1

Package Java.util Classe générique

Programmation Objet Java Correction

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90.

Java Licence professionnelle CISII,

Compte Rendu d intégration d application

4. Groupement d objets

Guide d'utilisation du Serveur USB

Chapitre 10. Les interfaces Comparable et Comparator 1

Programmation MacOSX / ios

Composants Logiciels. Le modèle de composant de CORBA. Plan

24/11/2011. Cours EJB/J2EE Copyright Michel Buffa. Plan du cours. EJB : les fondamentaux. Enterprise Java Bean. Enterprise Java Bean.

Projet Active Object

TD/TP PAC - Programmation n 3

Programmation par les Objets en Java

Remote Method Invocation Les classes implémentant Serializable

Projet gestion d'objets dupliqués

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

IFT785 Approches Orientées Objets. FINAL Été Remise : Jeudi 19 août 2002 à 9h00 am

Java - la plateforme

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

COMPARAISONDESLANGAGESC, C++, JAVA ET

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Tp 1 correction. Structures de données (IF2)

Composants logiciels Exemples : Java Beans, Enterprise Java Beans

Java 7 Les fondamentaux du langage Java

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

J2EE - Introduction. Développement web - Java. Plan du chapitre

Programmation Orientée Objet Java

Intergiciel - concepts de base

Étude de l interopérabilité de deux langages de programmation basée sur la machine virtuelle de Java

Refonte front-office / back-office - Architecture & Conception -

La gestion de la persistance avec Hibernate. Hibernate et la gestion de persistance. La gestion de la persistance (1/2) Introduction

Sommaire Introduction... 3 Le but du projet... 3 Les moyens utilisés... 3 Informations sur le client FTP... 4 Pourquoi une version Linux et

Support de cours et TD Programmation Orientée Objet

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

Prise en compte des ressources dans les composants logiciels parallèles

Construction d'une application MVC distribuée avec Spring Remoting. Partie 1 : HttpInvoker, Hessian, Burlap, RMI

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Messagerie asynchrone et Services Web

Premiers Pas en Programmation Objet : les Classes et les Objets

OpenPaaS Le réseau social d'entreprise

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Transcription:

Programmation par composants (1/3) La programmation par composant vise le développement de logiciel par aggrégation de briques logicielles existantes est indépendante de la POO La programmation par composant fait évoluer la POO Réutilisabilité accrue du code Persistance des objets objet avancée Distribution du code et des objets (des objets peuvent être partagés par des applications différentes tournant sur des machines différentes) Sécurité au niveau de l'exécution concurrente 1 Programmation par composants (2/3) Un composant est une brique logicielle Taille variable (d'une classe à une application entière) Granularité variable (ossature logicielle, élément d'interface, classe métier,...) Fonctions variées Composants techniques : ossature du code, éléments d'interfaces graphiques, utilitaires pour manipuler des données,... Composants métiers : représentent des entités du domaine (client, produit,...) Composants applicatifs : dédiés aux traitements internes d'une application (peu réutilisables) Licence Un Informatique composant doit offrir objet avancée Robustesse : le comportement doit être celui attendu (et sans bug!) Généricité : le composant doit pouvoir être adapté à l'application (sans le modifier!) Abstraction : le composant doit offrir une interface claire et être utilisable sans consulter son code (son implémentation doit être autonome) 2

Programmation par composants (3/3) Programmation par composants Sélection des composants dans un catalogue Eventuellement développement de nouveaux composants Adaptation des composants à l'application Assemblage des composants, avec ajout éventuel de code Modèles de programmation par composants EJB (Enterprise Java Beans) : programmation distribuée et interopérabilité Java Beans : assemblage Programmation objet visuel avancée (interfaces en particulier) CORBA de l'ogm (Object Management Group) OLE/ActiveX, COM et.net dans le monde Microsoft 3 JavaBean (1/2) Java propose un modèle de composant : Java Bean (grain de café) Caractéristiques d'un JavaBean : Règles de dénomination : permettent de normaliser le nommage des membres des bean et donc d'automatiser leur manipulation Réflexion : les beans (comme tous les objets Java) peuvent donner des informations sur eux-mêmes, non seulement sur leur état mais aussi sur leur constitution interne Persistance : un bean peut être sauvegardé en l'état (avec les valeurs des attributs) et réactivé plus objet tard avancée par sérialisation Communication : les beans communiquent via le modèle événementiel et le pattern d'écouteur (Listener) 4

JavaBean (2/2) Les JavaBeans sont toutes les classes Java qui respectent un certains nombre de règles : ils doivent posséder un constructeur sans paramètre. Celui ci devra initialiser l'état du bean avec des valeurs par défauts. ils peuvent définir des propriétés : celles ci sont identifiées par des attributs et méthodes dont le nom et la signature sont normalisés ils doivent implémenter l'interface Serializable : ceci est obligatoire pour les beans qui possèdent une partie graphique pour permettre la sauvegarde de leur état ils définissent des méthodes utilisables par les composants extérieurs : elles doivent être publiques et prévoir une gestion des accès concurrents ils peuvent émettre des événements en gérant une liste d'écouteurs qui s'y abonnent via des méthodes dont les noms sont normalisés Les classes des API graphiques de Java (AWT et Swing) sont des JavaBeans 5 Propriétés dans un JavaBean L'accès aux attributs (propriétés) est contrôlé Attributs toujours privés (ou à la rigueur protégés) Les attributs peuvent n'avoir qu'un accesseur (ils sont en lecture seule), qu'un modifieur (ils sont en écriture seule) Accesseurs et modifieurs sont normalisés Accesseur : <type_attribut> get<nom_attribut>() (is<nom_attribut> si l'attribut est booléen) Modifieur : void set<nom_attribut>(<type_attribut> <nom_variable>) Le nom de l'attribut n'est pas forcément celui de la variable qui le contient! public class GrainDeCafe{ private int poids; private boolean truc;... public int getpoids(){return this.poids; public void setpoids(int a){this.poids = a; public void getarabica(){ return this.truc; 6

Propriétés indexées Quand les attributs sont des tableaux, les accesseurs et modifieurs ont un indice en paramètre supplémentaire public class GrainDeCafe{ private float[] dimensions = new float[3]; private boolean truc; public GrainDeCafe(){ dimensions[0] = 0.5; dimensions[1] = 1.0; dimensions[2] = 0.4; truc = a; objet avancée public float getdimension(int axe){return this.dimensions[axe]; public void setdimension(float a, int axe){this.dimensions[axe] = a; public void getarabica(){ return this.truc; 7 Propriétés liées (1/3) Un JavaBean peut observer une propriété d'un autre JavaBean via un mécanisme implémentant le pattern Observer. La propriété est alors dite liée (bound property) Le JavaBean observé intègre par composition un objet PropertyChangeSupport PropertyChangeSupport gère une liste d'écouteurs de type PropertyChangeListener qui jouent le rôle d'observateurs PropertyChangeSupport permet de notifier aux écouteurs les changements intervenant sur une propriété liée Les JavaBeans observateurs implémentent l'interface PropertyChangeListener qui ne contient qu'une méthode void propertychange(propertychangeevent evt) La classe d'événements PropertyChangeEvent encapsule les données qui décrivent le changement de valeur de la propriété (nom de la propriété, ancienne valeur, nouvelle valeur,...) 8

Propriétés liées (2/3) public class GrainDeCafe{ private int poids; private boolean truc; private PropertyChangeSupport pcs; public GrainDeCafe(){... pcs = new PropertyChangeSupport(); public void addpropertychangelistener(propertychangelistener pcl){ pcs.addpropertychangelistener(pcl);... public void removepropertychangelistener(propertychangelistener pcl){ pcs.removepropertychangelistener(pcl); public void setpoids(int a){ int temp = poids; this.poids = a; pcs.firepropertychange("poids",new Integer(temp),new Integer(a)); 9 Propriétés liées (3/3) public class Torrefacteur implements PropertyChangeListener{ private MachineATorrefier mat; public Torrefacteur(){... public void propertychange(propertychangeevent pce){ if(pce.getpropertyname().equals("poids")) if(((integer) pce.getnewvalue()).intvalue() > 3) //changer la machine à torréfier public class VendeurDeCafe objet implements avancée PropertyChangeListener{ public VendeurDeCafe(){... public void propertychange(propertychangeevent pce){ if(pce.getpropertyname().equals("poids")) if(((integer) pce.getnewvalue()).intvalue() - ((Integer) pce.getoldvalue()).intvalue()) //changer le prix de vente 10

Propriétés contraintes (1/2) Un JavaBean qui écoute une propriété d'un autre composant peut mettre son veto à un changement de valeur en créant une PropertyVetoException Les propriétés contraintes sont gérées par des VetoableChangeSupport et écoutées par des VetoableChangeListener public class USA implements VetoableChangeListener{ Au cas où un composant écouteur de la propriété met son veto au changement de valeur, le changement doit être annulé... public void vetoablechange(propertychangeevent e) throws PropertyVetoException { Resolution r = ((Resolution) e.getnewvalue()); if(!this.accepts(r)) throw new PropertyVetoException("resolution inacceptable!",e); 11 Propriétés contraintes (2/2) public class ConseilSecuriteONU{ private LinkedList resolutions = new LinkedList(); private VetoableChangeSupport vcs; public void addvetoablechangelistener(vetoablechangelistener vcl) { vcs.addvetoablechangelistener(vcl); public void removevetoablechangelistener(vetoablechangelistener vcl) { vcs.removevetoablechangelistener(vcl); public void addresolution(resolution r){ resolutions.add(r); try{ vcs.firevetoablechange("resolution",null,r); catch(propertyvetoexception e){ System.out.println("un veto est emis : "+e.getmessage()); resolutions.remove(r); 12

Réflexivité En programmation objet, la réflexivité consiste à offrir la possibilité d'interroger un objet sur : sa constitution interne (attributs avec leurs types) son état (valeurs des attributs) son comportement (méthodes) sa classe Intérêts de la réflexivité : Dans le cadre de la programmation par composants (JavaBeans) il faut que les composants puissent être interrogés dynamiquement sur leur constitution pour être utilisés par une application objet avancée à l'exécution Accès aux classes dans les outils de développement (debuggers, browsers de classe,...) ou les applications réparties utilisant la sérialisation Tous les langages objets n'offrent pas la réflexivité (C++ n'est pas réflexif) 13 API Reflexion de Java java.lang.reflect est un paquetage Java dédié à l'introspection la classe Field représente les attributs des classes (cette classe offre des méthodes de classe pour récupérer les valeurs des attributs d'un objet) la classe Method représente les méthodes des classes la classe Constructor représente les constructeurs des classes La classe Modifier représente les modifieurs des classes et membres La classe Array représente les tableaux Licence La Informatique classe 3e java.lang.class année objet avancée offre des méthodes permettant de récupérer les instances des classes précédentes Class est instanciée chaque fois que le java.lang.classloader charge une classe dans la JVM La méthode getclass de la classe Object permet de récupérer la classe d'un objet (on peut aussi utiliser Class.forName(String nom_classe)) Class permet de récupérer des informations sur les classes (et indirectement sur les objets) 14

BeanInfo java.beans.beaninfo est une interface permettant de compléter les mécanismes d'introspection de java.lang.reflect BeanInfo offre des méthodes permettant de récupérer des descripteurs sur un JavaBean BeanDescriptor : description générale du composant (classe) PropertyDescriptor : description des propriétés (attributs) MethodDescriptor : description des méthodes EventSetDescriptor : description des événements gérés et des écouteurs Licence La Informatique classe 3e java.beans.introspector année objet avancée permet de récupérer un BeanInfo Introspector cherche une classe <nom_du_bean>beaninfo qui doit être une implémentation de BeanInfo ou une classe qui hérite de l'adapteur SimpleBeanInfo. S'il trouve cette classe, il l'instancie et retourne l'instance Sinon il utilise les mécanismes d'introspection classiques et construit le BeanInfo à partir des infos récupérées 15 Jar et fichier manifest Un JavaBean est souvent implémenté par plusieurs classes qui sont fournies dans une archive Java (JAR : Java Archive) Une archive JAR est générée ou ouverte avec l'utilitaire jar Un fichier manifest peut être ajouté à l'archive pour ajouter des informations Informations générales sur objet l'archive avancée (version,...) Des informations sur chaque fichier de l'archive 16