@startuml
skinparam linetype ortho
skinparam Monochrome true

title Low-Level UML

/'

Conveyors

'/

class Conveyor {
  int id;
  string Actuators[];
  string Sensors[];
}

class ConveyorLinear {
  int id;
  bool ReadyToReceive;
  bool ReadyToSend;
  
  void MoveFoward();
  void MoveBackward();
}

class ConveyorRotative {
  int id;
  bool ReadyToReceive;
  bool ReadyToSend;

  void MoveFoward();
  void MoveBackward();
  void RotateClockWise();
  void RotateCounterClockWise();
}

class ConveyorPusher {
  int id;
  bool ReadyToReceive;
  bool ReadyToSend;
  
  void MoveFoward();
  void MoveBackward();
  void Push();
}

class ConveyorSlider {
  int id;
  bool ReadyToReceive;
  int NumPart;  
}

class ConveyorAssembly {
  int id;
  EnumTool Tool;
  bool ReadyToReceive;
  bool ReadyToSend;  

  void MoveFoward();
  void MoveBackward();
  void Assemble();
  void ChangeTool();
}

class ConveyorWarehouseIn {
  int id;
  bool ReadyToReceive;
  bool ReadyToSend; 
  bool ReadyToStore;

  void MoveFoward();
  void MoveBackward();
  void Store();
}

class ConveyorWarehouseOut {
  int id;
  bool ReadyToReceive;
  bool ReadyToSend;  
  bool ReadyToExtract;
  string ExtractType;

  void MoveFoward();
  void MoveBackward();
  void Extract();
}

class Part {
  UUID id;

}

ConveyorLinear --|> Conveyor
ConveyorRotative --|> Conveyor
ConveyorPusher --|> Conveyor
ConveyorSlider --|> Conveyor
ConveyorAssembly --|> Conveyor
ConveyorWarehouseIn --|> Conveyor
ConveyorWarehouseOut --|> Conveyor

Part -- ConveyorLinear
Part -- ConveyorRotative
Part -- ConveyorPusher
Part -- ConveyorSlider
Part -- ConveyorAssembly
Part -- ConveyorWarehouseIn
Part -- ConveyorWarehouseOut

/'



'/



@enduml