134 votes

Modélisation d'un ascenseur à l'aide de l'analyse et de la conception orientées objet (Object-Oriented Analysis and Design)

Il y a un ensemble de questions qui semblent être couramment utilisées dans les entretiens et les cours lorsqu'il s'agit de conception et d'analyse orientée objet. C'est l'une d'entre elles ; malheureusement, mon professeur de POO à l'université n'a jamais donné de réponse à cette question, et je me suis donc demandé.

Le problème est le suivant : concevoir un ensemble d'objets/méthodes de base à utiliser pour simuler une banque d'ascenseurs. Quels sont les objets et leurs attributs/méthodes ?

Pour les besoins de l'argumentation, supposons que notre bâtiment compte vingt étages ; le rez-de-chaussée est le hall d'entrée et le deuxième étage est relié au parking (les personnes entrent et sortent donc du bâtiment par le rez-de-chaussée ou le deuxième étage). Il y a une banque d'ascenseurs qui dessert tous les étages ; il y a trois cages d'ascenseur dans la banque d'ascenseurs, et un ascenseur par cage.

Quelle serait la manière correcte de modéliser ceci dans un modèle orienté objet ?

165voto

Toon Krijthe Points 36327

Il y a d'abord une classe d'ascenseur. Elle a une direction (montée, descente, stand, maintenance), un étage actuel et une liste de demandes d'étage triées dans la direction. Elle reçoit les demandes de cet ascenseur.

Ensuite, il y a une banque. Elle contient les ascenseurs et reçoit les demandes des étages. Celles-ci sont programmées pour tous les ascenseurs actifs (non en maintenance).

La programmation sera comme :

  • si disponible, choisissez un ascenseur debout pour cet étage.
  • Sinon, prenez un ascenseur qui va à cet étage.
  • ou choisir un ascenseur debout à un autre étage.
  • sinon choisir l'ascenseur avec la charge la plus faible.

Chaque ascenseur a un ensemble d'états.

  • Maintenance : l'ascenseur ne réagit pas aux signaux externes (uniquement à ses propres signaux).
  • Stand : l'ascenseur est fixé sur un étage. S'il reçoit un appel. Et que l'ascenseur est à cet étage, les portes s'ouvrent. S'il se trouve à un autre étage, il se déplace dans cette direction.
  • Montée : l'ascenseur monte. Chaque fois qu'il atteint un étage, il vérifie s'il doit s'arrêter. Si c'est le cas, il s'arrête et ouvre les portes. Il attend un certain temps et ferme les portes (à moins que quelqu'un ne soit en train de les franchir). Ensuite, il supprime l'étage de la liste des demandes et vérifie s'il y a une autre demande. Si c'est le cas, l'ascenseur se remet en marche. Sinon, il entre dans l'état d'attente.
  • Down : comme le haut mais dans le sens inverse.

Il existe des signaux supplémentaires :

  • alarme. L'ascenseur s'arrête. Et s'il se trouve à un étage, les portes s'ouvrent, la liste des demandes est effacée, les demandes sont replacées dans la banque.
  • porte ouverte. Ouvre les portes si un ascenseur est à un étage et ne se déplace pas.
  • la porte se ferme. Fermez la porte si elle est ouverte.

EDIT : Certains ascenseurs ne commencent pas à l'étage inférieur/premier, notamment dans le cas des gratte-ciel. min_floor & max_floor sont deux attributs supplémentaires pour Elevator.

18voto

vine'th Points 2279

L'ouvrage The Art of Computer Programming Vol.1 de Donald Knuth contient une démonstration de l'ascenseur et des structures de données. Knuth présente une discussion et un programme très complets.

Knuth(1997) "Information Structures", L'art de la programmation informatique Vol. 1 pp.302-308

17voto

Uri Points 50687

J'ai vu de nombreuses variantes de ce problème. L'une des principales différences (qui détermine la difficulté) est de savoir s'il existe une tentative centralisée d'avoir un "système intelligent et efficace" qui permettrait d'équilibrer la charge (par exemple, envoyer plus d'ascenseurs inactifs dans le hall le matin). Si c'est le cas, la conception comprendra un sous-système entier avec une conception vraiment amusante.

Une conception complète est évidemment trop importante pour être présentée ici et il existe de nombreuses alternatives. L'ampleur du projet n'est pas claire non plus. Lors d'un entretien, on essaiera de comprendre comment vous pensez. Cependant, voici quelques-uns des éléments dont vous auriez besoin :

  1. Représentation du contrôleur central (s'il y en a un).

  2. Représentations d'ascenseurs

  3. Représentations des unités d'interface de l'ascenseur (elles peuvent être différentes d'un ascenseur à l'autre). d'un ascenseur à l'autre). Évidemment, il y a aussi des boutons d'appel à chaque étage, etc.

  4. Représentations des flèches ou indicateurs de chaque étage (presque une "vue" du modèle d'ascenseur).

  5. Représentation d'un humain et d'une cargaison (peut être important pour la prise en compte des charges maximales).

  6. Représentation du bâtiment (dans certains cas, car certains étages peuvent être bloqués à certains moments, etc.)

7voto

Arun Points 6838

Voir :

Lu Luo, A UML Documentation for a Elevator System
Distributed Embedded Systems, Fall 2000
Ph.D. Project Report
Carneghie Mellon University

lien

4voto

Some_other_guy Points 1697

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X