Académique Documents
Professionnel Documents
Culture Documents
com
Club des Dveloppeurs
Dailleurs ne confondons pas classe et objet, la classe cest le concept, la dfinition et les objets sont les instances de la classe, les vrais objets, ceux que lon peut toucher .
La classe Client
nom prenom date de naissance
Les objets
Mr X : Client
nom = X prenom = paul date de naissance = 27/07/68
Mme Y : Client
nom = Y prenom = lucy date de naissance = 03/02/54
Mais quels sont ces traitements dont on parle ? Sont-ce les mmes que lorsque lon parle de donnes-traitements, je veux dire quand on parle des donnes et des procdures et fonctions qui traitent ces donnes au sens des langages dits procduraux comme C ou COBOL ?
Un Normand vous rpondrait : a dpend, oui et non. Et il aurait raison car sans en dire plus sur la relle nature dun objet, on ne peut aller plus loin dans lexplication.
Commande
Imprimer() Facturer() CalculerSolde() CalculerPoids()
Il ny a certainement pas une solution unique mais si vous faites supporter toutes ces oprations la classe Commande, je vous poserai seulement une question : Avez-vous bien mesur les consquences de toutes ces responsabilits que vous faites supporter cette pauvre petite classe ? Car faire supporter une opration une classe (et donc un objet), cest lui attribuer des responsabilits supplmentaires. Et toutes les qualits dun bon modle objet se rsument finalement en une bonne rpartition rflchie des responsabilits au sein des diffrentes classes. Si tous les traitements qui manipulent la Commande (sorte de donne) sont supports par la Commande, votre classe risque de se transformer rapidement en un gros bibendum. Vous aurez du mal rpartir le travail sur cette classe au sein de lquipe projet, vous serez oblig de modifier la classe pour modifier un traitement dj ralis par elle et vous aurez du mal utiliser la classe dans un autre contexte sans tirer tout le contexte existant (les traitements existants). Donc, nos fameux traitements, ceux que lon veut faire supporter notre Commande doivent tre ceux que lon juge intrinsques au concept de Commande. Ceux que lon juge valables dans diffrents contextes dutilisation. Et ce mme si vous navez pas encore lintention de faire de la rutilisation. Et cest l que finalement revient notre bonne vieille distinction donnes-traitements.
Les donnes
Les donnes du monde objet sont ce que lon appelle les Entits (entity en anglais). Les classes entits quune mthode comme les RUP1 propose de modliser en UML avec le strotype entity ( ) reprsentent donc les donnes manipules par une application, les donnes que classiquement on stocke dans une base de donnes. Bien sr, ces classes comportent des oprations, des traitements donc, mais ces oprations doivent tre comme on la dit, intrinsques lentit, jugs comme valables indpendamment du contexte actuel de lapplication qui cr cette entit.
Les traitements
Les traitements qui ne seront pas intrinsques aux entits, c'est--dire souvent des traitements qui manipulent plusieurs entits, diffrentes ou non, ou qui sont trs spcifiques, sont ce que lon appelle les Contrleurs (strotype Control dans le RUP). Ces contrleurs raliseront donc un certain nombre de traitements eux-mmes ou pourront enchaner des traitements raliss par dautres contrleurs ou entits.
Commande
CommandeManager
CommandeEditor
Imprimer()
Une telle sparation entre entits et contrleurs, et dune certaine manire entre donnes et traitements, nest aucunement contradictoire avec les concepts de lobjet car nous verrons par la suite que certaines caractristiques propres au monde objet nous aiderons concevoir des entits et des contrleurs plus volus que les classiques donnes et traitements du monde procdural. Cette sparation entre les donnes et les traitements apporte de plus un certain nombre davantages comme : Permettre de rutiliser les donnes sans les traitements Facilite la rpartition du travail au sein dune quipe Facilite la rpartition des donnes et des traitements sur les diffrents tiers dune architecture n-tiers Facilite le packaging des donnes et des traitements au sein de modules diffrents Facilite le choix dynamique de certains traitements par lapplication2 Bon, eh bien quest ce qui fait la diffrence entre le monde objet et le monde procdural alors ?
Imprimer(Client c)
Particulier
Entreprise
ClientEditorPDF
ClientEditorExcel
- siret + getSiret()
Encapsulation Le numro siret nest accessible que via lopration getSiret
Imprimer(Client c)
Imprimer(Client c)
Polymorphisme
Un mcanisme comme la gnralisation/spcialisation va permettre de dfinir ce que lon appelle des interfaces. Ces interfaces vont permettre de dfinir des traitements plus ou moins gnriques sachant manipuler diffrentes entits ou contrleurs implmentant ces interfaces. Lencapsulation va, elle, permettre de crer des sortes de composants offrant des services via des interfaces tout en cachant limplmentation de ces services. Nos contrleurs, que lon a assimil des traitements ont de plus lavantage de pouvoir agrger plusieurs traitements (ils offrent alors plusieurs services) normalement parpills dans le monde procdural. Ok, donc avec lobjet on a toujours les donnes et les traitements plus ou moins spars mais les donnes sont des supers donnes intelligentes et les traitements sont en fait des paquets de traitements Trs bien et alors ?
la sauce Web/XML). Cest peut tre un effet de mode mais je pense que cest surtout la marque dune volution plus profonde (maturit ?) de la vision que lon peut avoir du monde objet. Alors ok, le dcouplage donnes traitements dans le monde des architectures distribues rpond aussi un besoin inhrent ces architectures : la donne doit passer du serveur au client, mais cette volution montre aussi le chemin que devront prendre nos modes de conception objet car, distribue ou pas, notre application sera mieux conue en sparant ses donnes et ses traitements.
Conclusion
Jespre que vous aurez compris que les pratiques de lObjet ne sont pas si loignes des pratiques du monde procdural et quil ny a pas de honte crer des donnes et des traitements spars, mme en Objet. Je dirai mme que cela apporte pas mal davantages ensuite par rapport des contraintes darchitecture ou des besoins de modularit et rutilisation. Bon les programmeurs C et COBOL, quand est ce que lon vous voit sur le forum UML !