Product -> descirbe the object being sell at the vending machine
Sale -> rapresent the sale of a product: contains info about the payment and the product
Payment -> rapresent the entity of the payment: contains what ind of payment, what fee had to be paid , what object has been bought.
PaymentStrategy [interface] -> what kind of payment : card, coin, cash bill
VendingMachine: contains the products under the inventory class and manage the transactions.
VendingMachineState: describe the actual status of the vendingmachine
Inventory: contains the inventory of each product and manage their status basign on the available quantity
InventoryProductStatus : described the status of inventory of specific product..
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. Write your code in the code editor below.
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...