Partage
  • Partager sur Facebook
  • Partager sur Twitter

{Gym Intellectuelle} Jouons avec l'orienté objet

    7 juin 2014 à 13:22:14

    Bonjour tout l'monde !

    Un petit topic de gymnastique intellectuelle, où thème après thème (j'espère, du moins) on va essayer de pousser la modélisation objet le plus loin possible pour ressembler de plus en plus à un objet réel de la vie quotidienne.

    Comme la POO n'est pas propre à un langage, si vous voulez montrer un code exemple, vous êtes libres de choisir votre langage. Pensez juste à mettre des commentaires à l'attention des néophites de votre langage préféré... ;)

    Thèmes abordés (liste éditée au fur et à mesure de l'avancement du topic) :

    Amusons-nous bien ! :)

    -
    Edité par Darth Killer 7 juin 2014 à 13:24:10

    • Partager sur Facebook
    • Partager sur Twitter
      7 juin 2014 à 13:23:25

      La voiture, un objet composite

      Une voiture, ça a un moteur, des roues, des portes, une carrosserie. Cependant, les roues ne sont pas équivalentes entre elles vis-à-vis du moteur : les roues avant sont pilotées par le moteur par l'intermédiaire d'un arbre de transmission, chaque moitié de l'arbre s'occupant d'une roue avant. On peut donc considérer que notre voiture possède aussi 2 demi-arbres.

      C'est carrément impossible de représenter avec un diagramme de classes. Aussi est-il temps de passer à un diagramme de composition qui va mieux mettre en évidence les interactions entre les différents composants de notre voiture.

      On peut même aller plus loin et spécifier les "ports" par lesquels les composants vont se communiquer. Sur le diagramme suivant, j'ai spécifié l'interface :Ordre des ports reliant le moteur à l'extérieur, mais c'est sans doute pas assez affiné, en fait... ;)

      A vous la suite :p

      • Partager sur Facebook
      • Partager sur Twitter
        7 juin 2014 à 16:03:50

        Diagrame de la voitureJ'ai essayé un petit truc mais c'est déjà bien le bordel XD.

        EDIT : Clic droit -> Voir image pour zoomer :)

        -
        Edité par zenko 7 juin 2014 à 16:04:38

        • Partager sur Facebook
        • Partager sur Twitter
          7 juin 2014 à 16:46:35

          Si vous voulez zoomer l'image de zenko, voici le lien.

          C'est vrai que Dia et les diagrammes de composant, c'est pas ça. Il est trop rigide. :D
          Personnellement je suis passé à Umlet depuis qu'on me la présenté la semaine dernière, et je ne m'en plains pas. ;)

          Je ne vois que des compositions fortes sur ta voiture. ça veut dire que ta voiture ne peut pas exister sans moteur et inversement, et que je ne peux pas enlever le moteur de la voiture pour le placer dans une autre voiture. C'est dommage. :(

          Du reste, je pense qu'une explication textuelle et/ou une subdivision en plusieurs schémas ne serait pas de refus, en fait... xD

          (erf, courses à faire, je peux pas élaborer maintenant. Mais ce n'est que partie remise. ;) )

          • Partager sur Facebook
          • Partager sur Twitter
            7 juin 2014 à 18:38:10

            Pour les compositions, je n'était pas sûr, j'ai quelques lacunes en ce qui concerne les définitions Agrégation / Composition / Dépendances, ...

            Je corrigerai ça tout à l'heure, je dois taffer là ^^

            • Partager sur Facebook
            • Partager sur Twitter
              7 juin 2014 à 20:01:57

              Dépendance : une classe dépend d'une autre quand elle utilise un objet de cette autre. Par exemple dans une méthode ou en paramètre d'une méthode.

              Relation (simple trait, éventuellement équipé d'une flèche simple) : une ou plusieurs instance(s) d'une classe sont attribut(s) de l'autre. S'il n'y a pas de flèche (simple) pour préciser le sens, la relation est bidirectionnelle, ce qui veut dire que chaque classe a des attributs de l'autre, c'est plus difficile à maintenir cohérent.

              Composition (forte) : cas particulier de relation où la classe complexe ne peut fonctionner sans la classe composant. Ceci implique quelques restriction : du côté de la classe complexe (losange noir), la multiplicité max est forcément de 1, les objets composants meurent en même temps que l'objet complexe, et un composant ne peut pas être transféré d'un objet complexe à l'autre. Exemple : un animal a un cœur, et (en principe) on ne peut pas l'arracher pour le mettre dans un autre animal.

              L’agrégation, également appelée composition faible, est un peu moins restrictive : tu peux associer plusieurs objets complexes à un composant, et tu peux faire des transferts. Si je veux enlever le moteur de ma voiture pour l'installer sur une autre voiture, avec l’agrégation je peux le faire.

              Ce petit éclaircissement étant fait, je pense garder ton schéma de côté pour l'instant. Autant y aller pas à pas pour découvrir petit à petit les éléments à ajouter et comment ils interagissent. Déjà, avec système actuel, il faut que le moteur puisse recevoir des ordres de la voiture et en donner aux demi-arbres, lesquels doivent les transmettre aux roues avant. Et tout ça alors que ce sont des éléments internes à la voiture qui ne sont pas directement accessibles.

              Peut-être le patron de conception Builder (Monteur en français) peut être utile. Il a pour but de constituer un objet complexe morceau par morceau avant de donner le tout.

              Question est : comment maintenant faire pour que le moteur donne des ordres aux demi-arbres qui doivent chacun relayer les ordres à la roue dont ils s'occupent ?

              -
              Edité par Darth Killer 7 juin 2014 à 20:03:14

              • Partager sur Facebook
              • Partager sur Twitter

              {Gym Intellectuelle} Jouons avec l'orienté objet

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown