IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Architecture Discussion :

Conception Orienté Objet / Architecture Orienté Composant


Sujet :

Architecture

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Conception Orienté Objet / Architecture Orienté Composant
    Bonjour à tous,

    Je travaille sur la refonte d'une chaine de simulation/visualisation.

    Quand j'ai analysé la chose il s'est avéré que je pouvais extraire plusieurs composants :
    * un solveur numérique
    * un solveur géométrique
    * un habilleur polygonal
    * un composant pour l'affichage

    Ces 4 modules peuvent importer et exporter des données XML.

    Chaque composant est programmé selon la conception orienté objet.

    Je suis en train de formaliser ce qu'est un composant à savoir :
    * un input
    * un core
    * un output
    et de mettre des classes abstraites entre ces différentes parties afin de pouvoir changer le core comme on veut si l'on ne romps pas les signatures de ces interfaces et de pouvoir toujours exporter et importer.

    Autrement dit je me retrouve avec quelque chose du style :

    class Module
    {
    class Input
    class Core
    class Output

    Input * myInput
    Core * myCore
    Output *myOutput
    }

    class Module::Input
    {
    //ptr vers les objets alimentant l'entrée
    }

    class Module::Output
    {
    //ptr vers les objets alimentant la sortie (créés dans le core)
    }

    et Core posséde une méthode Run() etc etc.

    Est-ce que quelqu'un a déja entendu parler d'une librairie de templates pour ce genre de choses ? Ou a déjà essayé d'implémenter ce genre de choses.
    Est-ce que cela correspondrait à une association de pattern ?

    En effet pour l'instant je l'ai fais sur un module mais je me demande si ce n'est pas trop ? Bref je suis dans le merveilleux monde du doute vis à vis d'une idée qui semblait intéressante mais qui va peut etre se transformer en cauchemar.

    Merci beaucoup pour vos réponses

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    déjà, pour avoir quelque chose de compréhensible, se passer de noms génériques ne voulant rien dire comme "output", "input", "core"...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Membre habitué Avatar de rakakabe
    Développeur informatique
    Inscrit en
    Août 2007
    Messages
    124
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2007
    Messages : 124
    Points : 174
    Points
    174
    Par défaut
    Ma maigre experience sur la programmation orientee composants me dit que tu as peut-etre mal compris le sens du terme 'Composant'.
    Les livres suivants pourraient t'aider dans ce sens :
    - Wiley, Mars 2005. "Component Oriented Programming", de Andy Ju An Wang et Kai Qian.
    - Wiley, 2005. "Software paradigms" de Stephen H. Kaisler, en particulier sur la partie II (Components).

    Essaie aussi de voir sur msdn le sens de component style microsoft (System.ComponentModel) : c'est tres enrichissant.

    Revenons sur ton probleme :
    - Essaie de definir une interface qui liste tous les fonctionnalites d'un 'composant' donne (par exemple ISolveurNumerique), que tu implementes par le 'composant' (ex : ComposantSolveur);
    - Lorsque tu utilises un composant donne, essaie d'utiliser cette interface pour avoir un code independant de l'implementation :
    Au lieu de :
    ComposantSolveur cs = new ComposantSolveur();
    cs.utilisation();
    tu fais :
    ISolveurNumerique isn = new ComposantSolveur(); (ou n'importe quelle implementation de cette interface).

    Pour etre plus clair, voici mes propres visions de Composants (suivant la notation UML si je me trompes pas) :
    - un composant (DC : Component, DCL : Class) offre des fonctionnalites (DC : interface representee par un rond, DCL : interface), et depend d'autres fonctionnalites (DC : demi-lune sur une interface, DCL : classe "depends" d'autres classes (pas bien) ou interfaces (tres bien));
    - Composant = Implementation interface (DC : Component + interface, DCL : classe "implements" interface);
    - Output = cette interface;
    - Input = interface dont la classe depend (DCL : Classe depends interface)

    NB : DC : diagramme des composants
    DCL : diagramme des classes
    j'utilise un clavier anglais alors, il n'y a pas d'accent

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 72
    Points : 35
    Points
    35
    Par défaut components
    Bonjour,
    je suis nouveau dans la programmation orienté composant;
    Je dois créer un composant vierge qui sera utilisé par la suite;
    d'après vous, par quoi dois-je commencer, et quel est le meilleur langage pour cela, sachant qu'ils seront utilisés pour des logiciels qui doivent fonctionner sous windows et linux;
    merci

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 72
    Points : 35
    Points
    35
    Par défaut
    Bonjour à tous;

    voila j'ai une architecture d'un composant (vierge) et je doit générer le tous automatiquement ;
    est ce que qq a une idée?
    merci d'avance

  6. #6
    Membre actif
    Avatar de Ecosmose
    Homme Profil pro
    Archi SI / Soft / Réseau / SCADA /Automate
    Inscrit en
    Janvier 2007
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Archi SI / Soft / Réseau / SCADA /Automate
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 170
    Points : 214
    Points
    214
    Par défaut
    Bonjour,

    La réponse est ta question sur le language va dépendre du secteur technique de l'appli. la programmation orienté composant est inclue cependant de la programmation Objet (sous ensemble). Un language objet s'impose donc.

    Les clients léger utilisant un browser sont devenus très puissants et ne se cloisonnent plus au net, ils sont très utilisés en intranet car cela permet un déploiement depuis un serveur et non sur une appli installé localement (donc écart de compatibilité lors de mise à jour client / serveur, création d'update, de correctif , etc...). Les clients lourds sont ciblés pour des données, calculs locaux et un poids de l'interface non négligeable. Bref, dis nous ce qui tu penses cibler comme infrastructure.

    EN client lourd et avec un langage haut niveau, la portabilité Linux / Windows t'orientera certainement sur du Java qui ,je crois, est le seul à te garantir complétement cette compatibilité sans une couche supplémentaire entre l'OS et une machine virtuelle (d'après ce que je sais, même .NET a besoin sous Linux d'une sur-couche qui se nomme Mono).

    Je n'ai cependant pas la prétention de connaitre tous les langages... il en existe peut être d'autres en POO mais pas aussi répandu que Java et .NET dans les appli multi-plateforme en client lourd / Serveur.

  7. #7
    Membre actif
    Avatar de Ecosmose
    Homme Profil pro
    Archi SI / Soft / Réseau / SCADA /Automate
    Inscrit en
    Janvier 2007
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Archi SI / Soft / Réseau / SCADA /Automate
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 170
    Points : 214
    Points
    214
    Par défaut
    Concernant l'approche composant, elle formalise la structure d'un système ou d'une application en scindant / découpant la totalité de sa structure et de ses fonctionnalités en plusieurs petits modules. Chacun de ces modules sont des 'composants' qui pourront être remplaçables (gestion de versions propre au module), améliorés, réutilisables et facilement maintenables sans que cela change le reste de l'application.

    L'ossature du système doit être bien définie (Interface entre ses composants et rôle des composants eux mêmes), la plupart du temps, on préfère appeler les fonctions internes des modules pour bénéficier d'un résultat dans un autre module. Les structures de ces résultats sont souvent définis par des interfaces dans un composant commun (qui peut lui aussi être scinder) pour que les composants puissent traiter les mêmes structures de données (BO ). Une structure de contexte (ou contrat pour le dev. Web) peut aussi circuler dans un approche Workflow (et s'enrichit au fur et à mesure).

    Pour mutualiser la structure, la dynamique , les fonctionnalités, le mieux est de créer un framework abstrait qui est implémenté concrètement pour un cas d'utilisation précis. Le must est ensuite d'instancier les composants du framework de ce cas précis avec une inversion de controle (type spring).

    Il y a bien d'autres avantages.

    Coté technique, raka a bien résumé, utilisant d'interface avec instanciation du module (la même chose dans un IoC).

    Tu peux aussi t'inspirer de la POA (programmation orientée Aspect) pour t'affranchir de fonctionnalités (log, gestionnaire d'impression, gestionnaire d'utilisateurs etc...) qui n'ont pas de relation directe avec le module (souvent techniques on les nomme aussi préoccupations).

    Quelle est l'architecture dont tu disposes ? papier ? structure de projet de dev. ?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 312
    Points : 411
    Points
    411
    Par défaut
    déjà, pour avoir quelque chose de compréhensible, se passer de noms génériques ne voulant rien dire comme "output", "input", "core"...
    Voila un détail très important.

    L'erreur souvent est de rester dans l'abstrait dans la phase de conception et d'analyse, avec des concepts trop 'hauts' qui s'écroulent une fois le codage amené de part le manque de concret.

    J'ai souvent vu des 'GlobalFactory' ou 'RessourceManager', tu les appelle 'fourre-tout' c'est pratiquement pareil, au final on retrouve tout et rien dedans.

    Aussi pour éviter ce problème, il est parfois nécessaire de commencer par 'en bas' et identifier ce qui peut être mutualisé entre les objets concrets

Discussions similaires

  1. [VS.net 2005] Conception orientée objet
    Par WriteLN dans le forum VB.NET
    Réponses: 16
    Dernier message: 24/09/2007, 10h26
  2. [archi-débutant]application du concept orienté objet
    Par tookaina dans le forum VB.NET
    Réponses: 2
    Dernier message: 15/01/2007, 13h18
  3. Conception oriente objet
    Par black.out dans le forum OpenGL
    Réponses: 4
    Dernier message: 30/12/2006, 00h15
  4. conception orientée objet
    Par yvon_huynh dans le forum Langage
    Réponses: 1
    Dernier message: 07/08/2006, 13h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo