2009-01-29 28 views
107

Có một số câu hỏi có vẻ thường được sử dụng trong các cuộc phỏng vấn và các lớp học khi nói đến thiết kế và phân tích hướng đối tượng. Đây là một trong chúng; Thật không may, giáo sư OOP của tôi ở đại học chưa bao giờ thực sự đưa ra câu trả lời cho nó, và vì vậy tôi đã tự hỏi.Lập mô hình thang máy bằng cách sử dụng Phân tích và Thiết kế hướng đối tượng

Vấn đề là như sau: thiết kế một bộ cơ bản các đối tượng/phương pháp được sử dụng để mô phỏng một ngân hàng thang máy. Các đối tượng và thuộc tính/phương pháp của chúng là gì?

Để tranh luận, hãy giả sử rằng tòa nhà của chúng tôi có hai mươi lầu; tầng dưới cùng là sảnh đợi và tầng hai kết nối với nhà để xe (do đó, mọi người sẽ vào/ra khỏi tòa nhà ở tầng dưới hoặc tầng hai). Có một ngân hàng thang máy phục vụ tất cả các tầng; có ba trục thang máy trong ngân hàng thang máy, và một thang máy trên mỗi trục.

Cách chính xác để mô hình hóa điều này trong mô hình hướng đối tượng là gì?

+7

Đây là câu hỏi phỏng vấn yêu thích của tôi. Nó là đơn giản để yêu cầu nhưng đáng ngạc nhiên phức tạp để có được quyền. Nó bao gồm những thứ như hàng đợi và có thể dễ dàng mở rộng để ném vào nhiều thử thách hơn. Ví dụ, làm thế nào bạn sẽ tối ưu hóa các thuật toán để giảm thời gian chờ đợi. –

+0

Vâng, đó là một câu hỏi mở tuyệt vời. Không bao giờ được hỏi rằng một, không may: ( – Uri

+0

ghi chú tốt - http://massivetechinterview.blogspot.in/2015/07/thought-works-object-oriented-design.html – roottraveller

Trả lời

136

Đầu tiên có một lớp thang máy. Nó có hướng (lên, xuống, đứng, bảo trì), một tầng hiện tại và một danh sách các yêu cầu sàn được sắp xếp theo hướng. Nó nhận được yêu cầu từ thang máy này.

Sau đó, có một ngân hàng. Nó chứa các thang máy và nhận được yêu cầu từ các tầng. Đây là những lịch trình cho tất cả các thang máy hoạt động (không phải trong bảo trì).

Bố trí thời vụ sẽ như thế nào:

  • nếu có chọn một thang máy đứng cho sàn này.
  • người khác chọn thang máy di chuyển đến tầng này.
  • người khác chọn thang máy đứng trên tầng khác.
  • khác chọn thang máy có tải thấp nhất.

Mỗi thang máy có một bộ trạng thái.

  • Bảo trì: thang máy không phản ứng với tín hiệu bên ngoài (chỉ với tín hiệu riêng).
  • Chế độ chờ: thang máy được cố định trên sàn. Nếu nó nhận được một cuộc gọi. Và thang máy nằm trên tầng đó, cánh cửa mở ra. Nếu nó nằm trên một tầng khác, nó di chuyển theo hướng đó.
  • Lên: thang máy di chuyển lên. Mỗi khi nó đạt đến một tầng, nó sẽ kiểm tra xem nó có cần dừng lại hay không. Nếu nó dừng lại và mở cửa. Nó chờ một khoảng thời gian nhất định và đóng cửa lại (trừ khi có khi nào đó đang di chuyển qua cửa sổ. Sau đó, nó sẽ loại bỏ sàn khỏi danh sách yêu cầu và kiểm tra xem có yêu cầu nào khác không. Nếu không, thang máy sẽ bắt đầu di chuyển trở lại. trạng thái đứng
  • Down:.. như lên nhưng theo hướng ngược lại

có tín hiệu bổ sung:..

  • báo thang máy dừng Và nếu nó là trên sàn, cửa mở, danh sách yêu cầu bị xóa, các yêu cầu được chuyển về ngân hàng.
  • cửa o cây bút. Mở cửa nếu thang máy nằm trên sàn và không di chuyển.
  • đóng cửa. Đóng cửa nếu chúng mở.

EDIT: Một số thang máy không bắt đầu ở đáy/first_floor esp. trong trường hợp tòa nhà chọc trời.

min_floor & max_floor là hai thuộc tính bổ sung cho Thang máy.

+12

Mô phỏng thang máy http://play.elevatorsaga.com/ –

17

Tôi đã thấy nhiều biến thể của sự cố này. Một trong những khác biệt chính (xác định độ khó) là liệu có một số nỗ lực tập trung để có một "hệ thống thông minh và hiệu quả" có cân bằng tải (ví dụ, gửi thêm thang máy nhàn rỗi để vận động vào buổi sáng). Nếu đúng như vậy, thiết kế sẽ bao gồm toàn bộ hệ thống con với thiết kế thực sự thú vị.

Một thiết kế đầy đủ rõ ràng là quá nhiều để trình bày ở đây và có nhiều altenatives. Bề rộng cũng không rõ ràng. Trong một cuộc phỏng vấn, họ sẽ cố gắng tìm ra cách bạn nghĩ. Tuy nhiên, đây là một số điều bạn cần:

  1. Trình bày của bộ điều khiển trung tâm (giả sử có một).

  2. Đại diện của thang máy

  3. Cơ quan đại diện của các đơn vị giao diện của thang máy (những có thể khác nhau từ thang máy để thang máy). Rõ ràng là các nút gọi trên mỗi tầng, v.v.

  4. Biểu thị các mũi tên hoặc chỉ báo trên mỗi tầng (gần như là "chế độ xem" của mô hình thang máy).

  5. Đại diện của một con người và hàng hóa (có thể quan trọng đối với bao thanh toán trong tải tối đa)

  6. Đại diện của tòa nhà (trong một số trường hợp, như tầng nhất định có thể bị chặn vào những thời điểm, vv)

15

Nghệ thuật lập trình máy tính của Donald Knuth Vol.1 có minh họa về thang máy và cấu trúc dữ liệu. Knuth trình bày một cuộc thảo luận và chương trình rất kỹ lưỡng.

Knuth (1997) "Cấu trúc thông tin", Nghệ thuật lập trình máy tính Vol. 1 pp.302-308

+9

được liên kết với các sách trên google –

+2

Phần này của sách mô tả (chi tiết) cách chạy mô phỏng thang máy.Nó KHÔNG mô tả cách mô hình hóa nó (theo cách OOP). – user7

5

Xem:

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

link

2

Thing để được xem xét khi Designing hệ thống thang máy,

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 

Mỗi nút nhấn kết quả trong yêu cầu thang máy phải được phục vụ. Mỗi yêu cầu này được theo dõi tại địa điểm toàn cầu

Số thang máy trong tòa nhà sẽ do người dùng xác định. Tòa nhà sẽ chứa một số tầng cố định.Số lượng hành khách có thể vừa với thang máy sẽ được cố định. Hành khách sẽ được tính khi họ rời khỏi thang máy ở tầng đích của họ. Tầng đích sẽ được xác định bằng khoảng thời gian Poisson "ngẫu nhiên". Khi tất cả hành khách trong thang máy đã đến tầng đích của họ, thang máy sẽ trở lại sảnh đợi để đón thêm hành khách

1

Điều chính cần làm là thông báo cho thang máy cần di chuyển lên hoặc xuống. và cũng có thể nếu bạn sắp có một lớp tập trung để kiểm soát hành vi này và cách bạn có thể phân phối sự kiểm soát.

Dường như nó có thể rất đơn giản hoặc rất phức tạp. Nếu chúng ta không đồng thời hoặc thời gian thang máy đến một nơi, thì có vẻ như nó sẽ đơn giản vì chúng ta chỉ cần kiểm tra trạng thái thang máy, như là nó di chuyển lên hoặc xuống, hoặc đứng yên. Nhưng nếu chúng ta làm cho Thang máy thực hiện Runnable, và liên tục kiểm tra và đồng bộ hóa một hàng đợi (linkedList). Một lớp Controller sẽ chỉ định tầng nào sẽ nằm trong hàng đợi. Khi hàng đợi rỗng, phương thức run() sẽ đợi (queue.wait()), khi một tầng được gán cho thang máy này, nó sẽ gọi queue.notify() để đánh thức phương thức run() và chạy () sẽ gọi goToFloor (queue.pop()). Điều này sẽ làm cho vấn đề quá phức tạp. Tôi đã cố gắng viết nó trên giấy, nhưng không nghĩ rằng nó hoạt động. Có vẻ như chúng ta không thực sự cần phải đưa ra vấn đề đồng thời hoặc thời gian vào tài khoản ở đây, nhưng chúng ta cần phải bằng cách nào đó sử dụng hàng đợi để phân phối quyền kiểm soát.

Bất kỳ đề xuất nào?

Các vấn đề liên quan