Comment concevoir un parking en utilisant les principes orientés objet ?

Comment concevoir un parking en utilisant les principes orientés objet ?

Concevoir un parking à l'aide de principes orientés objet implique de décomposer le système en classes d'attributs et de méthodes qui reflètent les entités du monde réel. Les composants clés tels que les véhicules et les places de stationnement peuvent être modélisés sous forme d'objets, tandis que les interactions telles que le stationnement peuvent être gérées via des méthodes. Cette approche favorise la réutilisabilité et la maintenabilité de la modularité, ce qui rend le système facile à étendre et à gérer.

Comment concevoir un parking en utilisant des principes orientés objetComment concevoir un parking en utilisant les principes orientés objet ?

Hypothèses

Pour nos besoins actuels, nous ferons les hypothèses suivantes. Nous avons fait ces hypothèses spécifiques pour ajouter un peu de complexité au problème sans trop en ajouter.

  • Le parking comporte plusieurs niveaux. Chaque niveau comporte plusieurs rangées de spots.
  • Le parking permet de garer des motos, des voitures et des bus.
  • Le parking dispose de places moto compactes et de grandes places.
  • Une moto peut se garer n’importe où.
  • Une voiture peut se garer soit dans un seul emplacement compact, soit dans un seul grand emplacement.
  • Un bus peut se garer sur cinq grandes places consécutives et situées dans la même rangée. Il ne peut pas se garer dans des emplacements restreints. Dans l'implémentation ci-dessous, nous avons créé une classe abstraite Vehicle dont héritent Car Bus et Motorcycle.

Conception orientée objet

Nous commençons par créer les classes nécessaires et veillons à ce que chaque classe ait une responsabilité unique et claire. Décomposons la conception en nous concentrant sur la façon dont chaque classe et méthode interagit.



1. Classe de véhicule

Le Vehicle La classe définit des attributs et des comportements communs à tous les types de véhicules. Il servira de classe de base pour des types de véhicules plus spécifiques comme Bus Car et Motorcycle .

Java
   public     abstract     class   Vehicle     {      protected     String     licensePlate  ;      protected     int     spotsNeeded  ;      protected     VehicleSize     size  ;      public     Vehicle  (  String     licensePlate       VehicleSize     size  )     {      this  .  licensePlate     =     licensePlate  ;      this  .  size     =     size  ;      this  .  spotsNeeded     =     (  size     ==     VehicleSize  .  Large  )     ?     5     :     1  ;      }      public     int     getSpotsNeeded  ()     {      return     spotsNeeded  ;      }      public     VehicleSize     getSize  ()     {      return     size  ;      }      public     String     getLicensePlate  ()     {      return     licensePlate  ;      }      public     abstract     boolean     canFitInSpot  (  ParkingSpot     spot  );   }   

2. Classes de véhicules en béton

Bus : Un bus nécessite 5 grands emplacements consécutifs.

Java
   public     class   Bus     extends     Vehicle     {      public     Bus  (  String     licensePlate  )     {      super  (  licensePlate       VehicleSize  .  Large  );      }      public     boolean     canFitInSpot  (  ParkingSpot     spot  )     {      return     spot  .  getSpotSize  ()     ==     VehicleSize  .  Large  ;      }   }   

Voiture : Une voiture peut se garer dans des emplacements compacts ou grands.

Java
   public     class   Car     extends     Vehicle     {      public     Car  (  String     licensePlate  )     {      super  (  licensePlate       VehicleSize  .  Compact  );      }      public     boolean     canFitInSpot  (  ParkingSpot     spot  )     {      return     spot  .  getSpotSize  ()     ==     VehicleSize  .  Compact     ||     spot  .  getSpotSize  ()     ==     VehicleSize  .  Large  ;      }   }   

Moto : Une moto peut se garer n'importe où

Java
   public     class   Motorcycle     extends     Vehicle     {      public     Motorcycle  (  String     licensePlate  )     {      super  (  licensePlate       VehicleSize  .  Motorcycle  );      }      public     boolean     canFitInSpot  (  ParkingSpot     spot  )     {      return     true  ;     // Can park in any spot      }   }   

3. Classe ParkingSpot

Le ParkingSpot la classe représente une place de stationnement individuelle dans le parking. Il est chargé de gérer sa disponibilité et de vérifier si un véhicule spécifique peut tenir sur place.

  • Nous aurions pu implémenter cela en ayant des classes pour LargeSpot CompactSpot et MotorcycleSpot qui héritent de ParkingSpot mais c'est probablement exagéré.
  • Les taches n’ont probablement pas de comportements différents autre que leur taille. 
Java
   public     class   ParkingSpot     {      private     Vehicle     vehicle  ;      private     VehicleSize     spotSize  ;      private     int     row  ;      private     int     spotNumber  ;      private     Level     level  ;      public     ParkingSpot  (  Level     level       int     row       int     spotNumber       VehicleSize     spotSize  )     {      this  .  level     =     level  ;      this  .  row     =     row  ;      this  .  spotNumber     =     spotNumber  ;      this  .  spotSize     =     spotSize  ;      this  .  vehicle     =     null  ;      }      public     boolean     isAvailable  ()     {      return     vehicle     ==     null  ;      }      public     boolean     canFitVehicle  (  Vehicle     vehicle  )     {      return     isAvailable  ()     &&     vehicle  .  canFitInSpot  (  this  );      }      public     void     parkVehicle  (  Vehicle     vehicle  )     {      if     (  canFitVehicle  (  vehicle  ))     {      this  .  vehicle     =     vehicle  ;      }      }      public     void     removeVehicle  ()     {      this  .  vehicle     =     null  ;      }      public     VehicleSize     getSpotSize  ()     {      return     spotSize  ;      }      public     int     getRow  ()     {      return     row  ;      }      public     int     getSpotNumber  ()     {      return     spotNumber  ;      }   }   

4. Classe de niveau de stationnement

Le Level la classe représente un niveau dans le parking. Il gère un ensemble de places de stationnement et fournit des méthodes pour garer et retirer les véhicules.

Java
   public     class   Level     {      private     int     levelNumber  ;      private     ParkingSpot  []     spots  ;      public     Level  (  int     levelNumber       int     numSpots  )     {      this  .  levelNumber     =     levelNumber  ;      this  .  spots     =     new     ParkingSpot  [  numSpots  ]  ;      }      public     boolean     parkVehicle  (  Vehicle     vehicle  )     {      for     (  ParkingSpot     spot     :     spots  )     {      if     (  spot  .  canFitVehicle  (  vehicle  ))     {      spot  .  parkVehicle  (  vehicle  );      return     true  ;      }      }      return     false  ;      }      public     boolean     removeVehicle  (  Vehicle     vehicle  )     {      for     (  ParkingSpot     spot     :     spots  )     {      if     (  spot  .  isOccupied  ()     &&     spot  .  getVehicle  ().  equals  (  vehicle  ))     {      spot  .  removeVehicle  ();      return     true  ;      }      }      return     false  ;      }   }   

5. Classe de stationnement

Le ParkingLot la classe représente l’ensemble du parking. Il gère plusieurs niveaux et fournit des méthodes pour garer et retirer les véhicules du parking.

Java
   public     class   ParkingLot     {      private     Level  []     levels  ;      public     ParkingLot  (  int     numLevels       int     numSpotsPerLevel  )     {      levels     =     new     Level  [  numLevels  ]  ;      for     (  int     i     =     0  ;     i      <     numLevels  ;     i  ++  )     {      levels  [  i  ]     =     new     Level  (  i       numSpotsPerLevel  );      }      }      public     boolean     parkVehicle  (  Vehicle     vehicle  )     {      for     (  Level     level     :     levels  )     {      if     (  level  .  parkVehicle  (  vehicle  ))     {      return     true  ;      }      }      return     false  ;     // Parking failed (no spots available)      }      public     boolean     removeVehicle  (  Vehicle     vehicle  )     {      for     (  Level     level     :     levels  )     {      if     (  level  .  removeVehicle  (  vehicle  ))     {      return     true  ;      }      }      return     false  ;     // Removal failed (vehicle not found)      }   }   

6. Classes de billets et de services de paiement

Pour gérer la billetterie et les paiements, nous ajoutons le Ticket et PaymentService cours.

Classe de billet : Représente le ticket délivré lorsqu'un véhicule stationne. Il enregistre l'heure à laquelle le véhicule entre et sort du parking.

Java
   public     class   Ticket     {      private     Vehicle     vehicle  ;      private     Date     issueTime  ;      private     Date     exitTime  ;      public     Ticket  (  Vehicle     vehicle  )     {      this  .  vehicle     =     vehicle  ;      this  .  issueTime     =     new     Date  ();      }      public     void     setExitTime  (  Date     exitTime  )     {      this  .  exitTime     =     exitTime  ;      }      public     long     getDuration  ()     {      return     (  exitTime  .  getTime  ()     -     issueTime  .  getTime  ())     /     1000  ;     // Time in seconds      }   }   

Classe de service de paiement : Responsable du calcul des frais de stationnement et du traitement des paiements.

Java
   publique     classe   Service de paiement     {      publique     double     calculer les frais  (  Billet     billet  )     {      long     durée     =     billet  .  getDurée  ();      // Modèle de frais simple : `text`=
                     

Top Articles

Catégorie

Des Articles Intéressants