IT

객체 지향 분석 및 설계를 사용하여 엘리베이터 모델링

lottoking 2020. 6. 28. 18:00
반응형

객체 지향 분석 및 설계를 사용하여 엘리베이터 모델링 [닫기]


객체 지향 디자인 및 분석과 관련하여 인터뷰 및 수업에서 일반적으로 사용되는 것으로 보이는 일련의 질문이 있습니다. 이것은 그들 중 하나입니다. 불행히도 대학의 OOP 교수는 실제로 그것에 대한 대답을 한 적이 없으므로 궁금합니다.

문제는 다음과 같습니다. 엘리베이터 뱅크를 시뮬레이션하는 데 사용할 기본 객체 / 방법 세트를 설계합니다. 객체와 그 속성 / 방법은 무엇입니까?

논쟁을 위해 우리 건물의 바닥이 20 층이라고 가정하자. 1 층은 로비이며 2 층은 주차장과 연결되어 있습니다 (따라서 사람들은 1 층 또는 2 층에 건물을 출입 할 것입니다). 모든 층에 서비스를 제공하는 엘리베이터 뱅크가 하나 있습니다. 엘리베이터 뱅크에는 3 개의 엘리베이터 샤프트가 있고 샤프트 당 하나의 엘리베이터가 있습니다.

객체 지향 모델에서 이것을 모델링하는 올바른 방법은 무엇입니까?


먼저 엘리베이터 클래스가 있습니다. 방향 (위, 아래, 스탠드, 유지 보수), 현재 층 및 방향으로 정렬 된 층 요청 목록이 있습니다. 이 엘리베이터로부터 요청을받습니다.

그런 다음 은행이 있습니다. 엘리베이터가 있으며 바닥에서 요청을받습니다. 이들은 모든 활성 엘리베이터에 예정되어 있습니다 (유지 보수 아님).

일정은 다음과 같습니다.

  • 가능하면이 층에 서있는 엘리베이터를 선택하십시오.
  • 그렇지 않으면이 층으로 이동하는 엘리베이터를 선택하십시오.
  • 그렇지 않으면 다른 층에 서있는 엘리베이터를 선택하십시오.
  • 그렇지 않으면 가장 낮은 부하로 엘리베이터를 선택하십시오.

각 엘리베이터에는 상태 세트가 있습니다.

  • 유지 보수 : 엘리베이터는 외부 신호 (자신의 신호에만)에 반응하지 않습니다.
  • 스탠드 : 엘리베이터는 바닥에 고정되어 있습니다. 전화를받는 경우 엘리베이터가 저 층에 있고 문이 열립니다. 다른 층에 있으면 그 방향으로 움직입니다.
  • 위로 : 엘리베이터가 올라갑니다. 바닥에 도달 할 때마다 중지해야하는지 확인합니다. 그렇다면 문을 멈추고 엽니 다. 일정 시간 동안 기다렸다가 문을 닫습니다. 국가 대.
  • 아래로 : 위와 같지만 반대 방향으로.

추가 신호가 있습니다 :

  • 경보. 엘리베이터가 멈 춥니 다. 그리고 바닥에 있으면 문이 열리고 요청 목록이 지워지고 요청이 은행으로 다시 이동합니다.
  • 문 열림. 엘리베이터가 바닥에 있고 움직이지 않으면 문을 엽니 다.
  • 문이 닫힙니다. 문이 열려 있으면 닫힙니다.

편집 : 일부 엘리베이터는 bottom / first_floor esp에서 시작하지 않습니다. 고층 빌딩의 경우.

min_floor 및 max_floor는 엘리베이터에 대한 두 가지 추가 속성입니다.


Donald Knuth의 The Art of Computer Programming Vol.1에는 엘리베이터와 데이터 구조에 대한 데모가 있습니다. Knuth는 매우 철저한 토론과 프로그램을 제공합니다.

Knuth (1997) "정보 구조", 컴퓨터 프로그래밍 Vol. 1 pp.302-308


이 문제의 많은 변형을 보았습니다. 주요한 차이점 (난이도 결정) 중 하나는로드 밸런싱이 가능한 "스마트하고 효율적인 시스템"을 갖추려는 중앙 집중식 시도가 있는지 여부입니다 (예 : 아침에 더 많은 유휴 엘리베이터를 로비로 보내기). 이 경우 디자인에는 정말 재미있는 디자인의 전체 하위 시스템이 포함됩니다.

완전한 디자인은 여기에 제시하기에는 너무나 많으며 많은 대안이 있습니다. 너비도 명확하지 않습니다. 인터뷰에서 그들은 당신의 생각을 알아 내려고 노력할 것입니다. 그러나 다음은 필요한 것 중 일부입니다.

  1. 중앙 컨트롤러를 나타냅니다 (있는 경우).

  2. 엘리베이터의 표현

  3. 엘리베이터의 인터페이스 장치 표현 (엘리베이터마다 다를 수 있음). 물론 모든 층의 버튼도 호출하십시오.

  4. 각 층의 화살표 또는 표시기 표시 (엘리베이터 모델의 "보기").

  5. 사람과화물의 표현 (최대 하중을 고려할 때 중요 할 수 있음)

  6. 건물 대표 (일부 경우, 때때로 특정 층이 막힐 수 있기 때문에)


보다:

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

링크


자세한 답변 :

http://www.angelfire.com/trek/software/elevator.html


엘리베이터 시스템을 설계 할 때 고려해야 할 사항 ,

Elevator
Floor/Location Identifier
Number of steps
Rotation speed
Daterange
InstallationDate
MaintainenceDate
Department Identifier
AllowedWeight
Detail / Description
Poison Ratio (Statistics)
Start
Stop
SetDirection
SetRotationSpeed
EmergencyStop = Stop + Alert
EmergencyAccidentSenser Handler

각 버튼을 누를 때마다 엘리베이터 요청이 제공됩니다. 이러한 각 요청은 전 세계 장소에서 추적됩니다.

건물의 엘리베이터 수는 사용자가 결정합니다. 건물에는 정해진 수의 층이 있습니다. 엘리베이터에 탑승 할 수있는 승객 수는 고정됩니다. 승객은 목적지 층에서 엘리베이터를 떠날 때 계산됩니다. 목적지 층은 "랜덤"포아송 간격을 사용하여 결정됩니다. 엘리베이터의 모든 승객이 목적지 층에 도달하면 엘리베이터는 더 많은 승객을 픽업하기 위해 로비로 돌아갑니다


Main thing to worry about is how would you notify the elevator that it needs to move up or down. and also if you are going to have a centralized class to control this behavior and how could you distribute the control.

It seems like it can be very simple or very complicated. If we don't take concurrency or the time for an elevator to get to one place, then it seems like it will be simple since we just need to check the states of elevator, like is it moving up or down, or standing still. But if we make Elevator implement Runnable, and constantly check and synchronize a queue (linkedList). A Controller class will assign which floor to go in the queue. When the queue is empty, the run() method will wait (queue.wait() ), when a floor is assigned to this elevator, it will call queue.notify() to wake up the run() method, and run() method will call goToFloor(queue.pop()). This will make the problem too complicated. I tried to write it on paper, but dont think it works. It seems like we don't really need to take concurrency or timing issue into account here, but we do need to somehow use a queue to distribute the control.

Any suggestion?

참고URL : https://stackoverflow.com/questions/493276/modelling-an-elevator-using-object-oriented-analysis-and-design

반응형