2014-04-30 10 views
0

두 개의 클래스 ShoppingCart 및 StoreInventory가 있습니다. 이들은 소매점의 비즈니스 도메인을 포함하는 편의점 시스템에서 사용됩니다.Java에서 동일한 필드를 사용하는 두 클래스의 객체 지향 디자인

둘 다 List products 필드를 포함합니다. 그러나 ShoppingCart 만 목록에있는 모든 제품의 totalCost를 계산할 수 있어야합니다. 또한,이 두 가지는 의심 할 여지없이 완전히 다른 객체이지만 동일한 필드를가집니다 (추가 정보 : 및 방법, ShoppingCart가 총 값을 계산할 수 있음 제외).

인터페이스와 상속을 통해 해결할 수있는 최선의 방법은 무엇입니까?

+0

인벤토리의 항목 만 쇼핑 카트에 추가 할 수 있습니다. 복제 된 필드가있는 다른 개체라는 것이 왜 의심 스럽습니까? –

+0

상속을 사용하지 마십시오. 액션 *에 인터페이스 *를 사용하거나 * 통합 *해야합니다. – user2864740

답변

2

여기 제가 문제에 대한 제 이해입니다. 제가 틀렸다면 저를 수정하십시오.

귀하는 인벤토리 클래스를 가지고 있으며 상점에서 판매 할 수있는 모든 아이템은이 클래스의 인스턴스로 유지됩니다. 장바구니 클래스가 있습니다. 장 Y 구니에는 포함 된 제품의 목록이 들어 있습니다. 장바구니는 모든 품목의 합산 가격을 계산할 수도 있습니다.

사실 인 경우 몇 가지 제안 사항이 있습니다.

  • 저장소에 개별 항목을 저장하는 또 다른 클래스 인 "항목"을 만드는 것이 좋습니다. 이렇게하면 상점 재고가 품목 목록이됩니다. 항목에는 가격 필드와 주식 및 공급 업체에 대한 정보가 포함될 수 있습니다.
  • 장바구니의 생성/수정과 저장소 인벤토리의 수정을 처리하는 드라이버 클래스를 제안하지만이를 처리하기로 결정했습니다. 고객 (장바구니)과 소유자/직원 (재고/품목)을위한 드라이버가있는 것도 의미가 있습니다. 상속을 사용하려는 않은 경우

, 당신은 항목의 목록을 작성하고 추가를위한 방법을 포함, 삭제, 수정 등 그럼 당신은 쇼핑 카트를 쓸 수있는 것입니다 항목 목록 클래스를 쓸 수 있고 목록을 확장 할 때마다 하위 클래스로 재고를 저장하지만 장 Y 구니의 가격 합계와 같은 고유 한 메소드도 보유합니다. 구매자와 직원을위한 별도의 상품 클래스를 갖고 싶다면 이는 좋지 않은 아이디어가됩니다. 예를 들어, 구매자를위한 구매량에는 구매 한 수량과 가격이 포함되며 직원의 구매량에는 재고 수량과 공급 업체 정보 및 가격이 포함됩니다. 이 경우 여러 개의 서로 다른 항목 클래스가 필요하며 상속은 더 이상 작동하지 않습니다.

+0

나는이 답변을 받아 들일 것이므로 많은 유효한 포인트를 모았습니다. 그러나 완전히 다른 방식으로 두 가지를 코딩하는 것이 OOP의 "자신을 반복하지 마십시오"규칙을 위반할 것이라고 생각하지 않습니까? – Jekk

+0

좋은 지적, 나는 아이디어를 조금 다시 생각하고 원래의 대답을 편집했다. – joepeacock001