Diseñar un Sistema Logístico (Diseño Orientado a Objetos). Hable acerca de las diferentes clases y sus relaciones entre sí. No es una pregunta de diseño del sistema, por lo que el alcance de esta pregunta es solo para definir diferentes clases (con sus atributos y métodos)
Preguntado en : Solución de Adobe
: supongamos que queremos diseñar un sistema de logística con la siguiente funcionalidad básica:
• El sistema puede tomar un pedido para entregarlo en un destino determinado.
• El pedido será una lista de artículos y hay un costo de procesamiento de cada pedido.
• El usuario debe registrarse para usar este sistema.
• El usuario puede realizar un seguimiento de su pedido.
• Los pedidos se enviarán en bicicleta o camión, pero solo se enviará un solo pedido por un solo vehículo.
Este tipo de preguntas se hacen en entrevistas para juzgar la habilidad de Diseño Orientado a Objetos de un candidato. Entonces, antes que nada, debemos pensar en las clases.
Las clases principales serán:
1. Usuario
2. Artículo
3. Vehículo
4. Ubicación
5. Detalles de pago
6. Orden
7. Sistema Logístico
La clase Usuario es para usuarios/clientes, a quienes se les cobrará por recibir sus artículos.
Java
public class User { private int userId; private String name; private Location address; private String mobNo; private String emailId; public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Location getAddress() { return address; } public void setAddress(Location address) { this.address = address; } public String getMobNo() { return mobNo; } public void setMobNo(String mobNo) { this.mobNo = mobNo; } public String getEmailId() { return emailId; } public void setEmailId(String emailId) { this.emailId = emailId; } }
La clase de artículo representa un artículo que se enviará. Un pedido contendrá una lista de artículos.
Java
public class Item { private String name; private int price; private int volume; private int weight; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } public int getVolume() { return volume; } public void setVolume(int volume) { this.volume = volume; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } }
La clase de ubicación simplemente representa la dirección.
Java
public class Location { private Double longitude; private Double latitude; public Double getLongitude() { return longitude; } public void setLongitude(Double longitude) { this.longitude = longitude; } public Double getLatitude() { return latitude; } public void setLatitude(Double latitude) { this.latitude = latitude; } }
La clase de vehículo representa el vehículo que se utilizará para enviar/entregar un pedido.
Será de dos tipos: 1. Bicicleta y 2. Camión
Java
public class Vehicle { private int id; private String vehicleNo; private int capacity; private Location currentPosition; private VehicleStatus currentStatus; public Vehicle(int id, String vehicleNo, int capacity) { this.id = id; this.vehicleNo = vehicleNo; this.capacity = capacity; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getVehicleNo() { return vehicleNo; } public void setVehicleNo(String vehicleNo) { this.vehicleNo = vehicleNo; } public int getCapacity() { return capacity; } public void setCapacity(int capacity) { this.capacity = capacity; } public Location getCurrentPosition() { return currentPosition; } public void setCurrentPosition(Location currentPosition) { this.currentPosition = currentPosition; } public VehicleStatus getCurrentStatus() { return currentStatus; } public void setCurrentStatus(VehicleStatus currentStatus) { this.currentStatus = currentStatus; } }
La bicicleta tiene solo 10 unidades de capacidad.
Java
public class Bike extends Vehicle { private final static int capacityofBike = 10; public Bike(int id, String vehicleNo) { super(id, vehicleNo, capacityofBike); } }
El camión tiene solo 100 unidades de capacidad (10 veces más que la bicicleta).
Java
public class Truck extends Vehicle { private final static int capacityofTruck = 100; public Truck(int id, String vehicleNo) { super(id, vehicleNo, capacityofTruck); } }
Enumeración para el estado actual de un vehículo:
Java
public enum VehicleStatus { FREE, BUSY, NOT_WORKING; }
Enumeración para OrderPriority:
Java
public enum OrderPriority { LOW, MEDIUM, HIGH; }
Enumeración para OrderStatus:
Java
public enum OrderStatus { DELIVERED, PROCESSING, CANCELLED; }
Enumeración para modo de pago:
Java
public enum PaymentMode { NET_BANKING, CREDIT_CARD, DEBIT_CARD; }
Enumeración para estado de pago:
Java
public enum PaymentStatus { PAID, UNPAID; }
La clase PaymentDetails contiene la información de cosas relacionadas con el pago para que, en cualquier caso, se cancele el pedido, se puede reembolsar fácilmente.
Java
public class PaymentDetails { private PaymentMode paymentMode; private String transactionId; private int amount; private PaymentStatus paymentStatus; private String cardNumber; public PaymentMode getPaymentMode() { return paymentMode; } public void setPaymentMode(PaymentMode paymentMode) { this.paymentMode = paymentMode; } public String getTransactionId() { return transactionId; } public void setTransactionId(String transactionId) { this.transactionId = transactionId; } public int getAmount() { return amount; } public void setAmount(int amount) { this.amount = amount; } public PaymentStatus getPaymentStatus() { return paymentStatus; } public void setPaymentStatus(PaymentStatus paymentStatus) { this.paymentStatus = paymentStatus; } public String getCardNumber() { return cardNumber; } public void setCardNumber(String cardNumber) { this.cardNumber = cardNumber; } }
La clase Order contiene toda la información de un pedido. Todos los campos se explican por sí mismos.
Java
import java.util.Date; import java.util.List; public class Order { private int orderId; private OrderPriority priority_of_order; private User sender; private Location destination; private PaymentDetails paymentDetails; private List<Item> items; private Long totalWeight; private OrderStatus currentStatus; private Date timeOfOrderPlaced; private Date timeOfOrderDelivery; private Vehicle vehicleOfThisOrder; public int getOrderId() { return orderId; } public void setOrderId(int orderId) { this.orderId = orderId; } public OrderPriority getPriority_of_order() { return priority_of_order; } public void setPriority_of_order(OrderPriority priority_of_order) { this.priority_of_order = priority_of_order; } public User getSender() { return sender; } public void setSender(User sender) { this.sender = sender; } public Location getDestination() { return destination; } public void setDestination(Location destination) { this.destination = destination; } public PaymentDetails getPaymentDetails() { return paymentDetails; } public void setPaymentDetails(PaymentDetails paymentDetails) { this.paymentDetails = paymentDetails; } public List<Item> getItems() { return items; } public void setItems(List<Item> items) { this.items = items; } public Long getTotalWeight() { return totalWeight; } public void setTotalWeight(Long totalWeight) { this.totalWeight = totalWeight; } public OrderStatus getCurrentStatus() { return currentStatus; } public void setCurrentStatus(OrderStatus currentStatus) { this.currentStatus = currentStatus; } public Date getTimeOfOrderPlaced() { return timeOfOrderPlaced; } public void setTimeOfOrderPlaced(Date timeOfOrderPlaced) { this.timeOfOrderPlaced = timeOfOrderPlaced; } public Date getTimeOfOrderDelivery() { return timeOfOrderDelivery; } public void setTimeOfOrderDelivery(Date timeOfOrderDelivery) { this.timeOfOrderDelivery = timeOfOrderDelivery; } public Vehicle getVehicleOfThisOrder() { return vehicleOfThisOrder; } public void setVehicleOfThisOrder(Vehicle vehicleOfThisOrder) { this.vehicleOfThisOrder = vehicleOfThisOrder; } }
La clase principal (LogisticsSystem) que almacena toda la información de usuarios, pedidos y vehículos. Tiene los métodos como takeAnOrder(), processOrder() etc.
Java
import java.util.ArrayList; import java.util.List; public class LogisticsSystem { private List<Order> orders; private List<Vehicle> vehicles; private List<User> users; public LogisticsSystem() { this.orders = new ArrayList<Order>(); this.vehicles = new ArrayList<Vehicle>(); this.users = new ArrayList<User>(); } public void takeAnOrder(Order order) { System.out.println("Adding an order to the system"); orders.add(order); } public void processOrder(Order order) { System.out.println("Processing an order of the system"); } public Location trackOrder(int orderId) { System.out.println("Tracking an order of the system"); Location location = null; // location = findLocationOfGivenOrder(); return location; } public void cacelOrder(Order order) { System.out.println("Going to cancell an order of the system"); } public void registerNewUser(User user) { System.out.println("Registering a new user to the system"); users.add(user); } public List<Order> getOrders() { return orders; } public void setOrders(List<Order> orders) { this.orders = orders; } public List<Vehicle> getVehicles() { return vehicles; } public void setVehicles(List<Vehicle> vehicles) { this.vehicles = vehicles; } public List<User> getUsers() { return users; } public void setUsers(List<User> users) { this.users = users; } }
Esta es la clase de prueba para probar la aplicación.
Java
package com.shashi.oodesign; import java.util.ArrayList; import java.util.Date; import java.util.List; public class Apptest { public static void main(String[] args) { User user = new User(); user.setUserId(1); user.setName("Shashi"); user.setEmailId("shashi@gmail.com"); Item item1 = new Item(); item1.setName("item1"); item1.setPrice(20); Item item2 = new Item(); item2.setName("item2"); item2.setPrice(40); List<Item> items = new ArrayList<Item>(); items.add(item1); items.add(item2); PaymentDetails paymentDetails = new PaymentDetails(); paymentDetails.setAmount(100); paymentDetails.setPaymentMode(PaymentMode.CREDIT_CARD); paymentDetails.setCardNumber("12345678"); Location destination = new Location(); destination.setLatitude(73.23); destination.setLongitude(132.34); Order order = new Order(); order.setOrderId(1); order.setItems(items); order.setCurrentStatus(OrderStatus.PROCESSING); order.setDestination(destination); order.setPaymentDetails(paymentDetails); order.setTimeOfOrderDelivery(new Date()); LogisticsSystem logisticsSystem = new LogisticsSystem(); logisticsSystem.registerNewUser(user); logisticsSystem.takeAnOrder(order); logisticsSystem.processOrder(order); } }
Publicación traducida automáticamente
Artículo escrito por shashipk11 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA