Design and Implement a Shopping Cart Object Model for an Online Store
AmazonSoftware Engineer · OnsiteLast updated
An object-oriented design exercise that asks you to model and implement a shopping cart for an online store, covering adding, updating and removing products and computing the total. It tests class boundaries, explicit edge-case policies, exact money handling and how cleanly the design extends to promotions.
Design and implement a shopping cart for an online store, using object-oriented code in a language of your choice. This is a phone-screen object-oriented design exercise, so the goal is a small, runnable model rather than a distributed system.
The cart must let a shopper:
- add a product to the cart with a quantity;
- change the quantity of a product that is already in the cart;
- remove a product from the cart;
- list what is in the cart; and
- get the cart's total price.
Products come from a catalog that the cart can look up by product ID. Each product has at least an ID, a display name and a unit price. Write the classes, implement the operations, and show a short usage example or tests that exercise them.
Constraints and Clarifications
- Assume one shopper using one cart in one process. Persistence, checkout and payment are out of scope unless the interviewer extends the problem.
- Money must be computed exactly; state how you represent it.
Clarifying Questions
- If the shopper adds a product that is already in the cart, should the quantities be merged, or should the call replace or reject the existing line?
- Should setting a quantity to zero remove the line, or is zero an error?
- Should an unknown product ID, a negative quantity or a non-integer quantity raise an error, be ignored, or be clamped?
- Is a product's price fixed when it is added to the cart, or read from the catalog when the total is computed?
- Does the cart need to check inventory when items are added, or only at checkout?
- Are discounts, coupons or taxes part of the total in this version?
Hints
Hint 1
Separate the product from the line: A catalog product and a line in the cart change for different reasons. Decide which object owns the price and which owns the quantity before you write any methods.
Follow-up questions
- Add promotions such as "buy one, get one free" on a product and a percentage-off coupon on the whole cart. Where does that logic live, and how do you decide the order in which they apply?
- A product's catalog price changes while it sits in someone's cart. What does the shopper pay at checkout, and how does your model make that explicit?
- The same cart is updated from two browser tabs at once. How do you prevent a lost update?
- How would you persist the cart so that it survives the shopper signing out and back in on another device?
Solution walkthrough is for members
Get the full walkthrough with reference code and complexity analysis, plus Kitty Coach at 300 messages a day. Hints, the code runner and community answers stay free.