Loading...
For each class, define the attributes (data) it will hold and the methods (functions) that operate on the attributes. Ensure they align with the object's responsibilities and adhere to the principle of encapsulation.
class Status(Enum):
AVAILABLE = 1
IDLE = 2
FAILURE = 3
UP = 4
DOWN = 5
class CallStrategy:
def init(self, elevators):
self.elevators = elevators
def callStrategy(self):
class NearestElevatorStrategy(CallStrategy):
def init(self, elevators):
self.elevators = elevators
def callStrategy(self):
# algorithm to find nearest elevator and return it
class Button:
def init(self, buttonName):
self.buttonName = buttonName
def executeButton(self):
pass
class UpButton(Button):
def executeButton(self, floor):
# call for elevator to go up
pass
class DownButton(Button):
def executeButton(self, floor):
# call for elevator to go down
pass
class FloorButton(Button):
def executeButton(self, elevator):
self.elevator = elevator
def moveElevator(self, floor):
newStatus = Status.Up if self.elevator.currentFloor < floor else Status.Down
self.elevator.status = currentFloor
self.currentFloor = floor
self.direction = Status.UP
class ElevatorController:
def init(self, floors, elevator):
self.floorButtons = {floor: FloorButton(floor, elevator) for floor in floors}
def moveElevator(self, floor):
self.floorButtons[floor].moveElevator(floor)
class Elevator:
def init(self, floors):
self.ElevatorController = ElevatorController(floors, elevator)
self.floors = floors
self.currentFloor = 0
self.status = Status.AVAILABLE
self.direction =
@property
def currentFloor (self):
return self.currentFloor
@property
def floors(self):
return self.floors
class ElevatorSystem:
def init(self, numFloors, numElevators):
self.elevators = {numElevator: Elevator(numFloors) for numElevator in range(numElevators)}
self.callButtons = {numFloor: (UpButton(numFloor),DownButton(numFloor)) for numFloor in range(numFloors)}
Explain design tradeoffs you considered. Check and explain whether your design adheres to SOLID principles. Explain how your design can handle changes in scale and whether it would be easy to extend with new functionalities. Identify areas for future improvement...