2

現在、簡単な Web ショップ アプリケーションを作成しています。ウェブショップは、ショッピング カートに 3 種類のオブジェクトを追加する必要があります。CD、本、またはゲーム。メソッドを持つすべてのオブジェクトのクラスを作成しましたtoString()

add(..)ここで、指定されたオブジェクトを shoppingcart という ArrayList に追加する必要があるメソッドを作成する必要があります。このメソッドは、作成されたオブジェクトを持つクラス Webshop 内で呼び出す必要があります。

複数の追加メソッドでこれを行う方法は知っていますが、単一のメソッドで行う必要があります。

4

5 に答える 5

4

あなたはおそらく何かと呼ばれる新しいタイプを作成したいと思うでしょう、AbstractItemそしてあなたの他のすべてのタイプはこれから拡張されます。また、この抽象クラスをインターフェイスの背後に隠すこともお勧めします。したがって、このAbstraxtItemクラスは、パブリック API を定義する Item インターフェイスを実装できます。

クラスは、AbstractItemそのサブタイプが同様getPrice()に実装する必要があるいくつかの抽象メソッドを定義し、場合によってはすべてのサブクラスに共通の動作となる他の具象メソッドを定義します。ショッピング カートは、メソッドArrayList<Item>によって入力される となります。add(Item)

于 2013-02-12T12:06:03.877 に答える
3

追加できるショップ内の各オブジェクトは、追加interface IProduct. できるIProductのリストを実装する必要があります。

ArrayList<IProduct> shoppingBasket = new ArrayList<IProduct>();
于 2013-02-12T12:06:48.803 に答える
1

クラス CD、Book、および Game にInterfaceを実装させることができますShopObject。次に、shoppinCart を次のように設定できます。

ArrayList<ShopObject> shoppingCart = new ArrayList<ShopObject>();
于 2013-02-12T12:08:11.983 に答える
1

OOPはこの問題を解決するのに役立ちます:

  1. CD, Book or Game共通の属性があることがわかった場合は、共通の機能を持つ基本クラスを使用して、これらすべてをそのクラスに拡張させることができます。

    そのため、 ProductCD, Book and Gameというクラスを拡張し、パラメーターとして受け取る一般的な add メソッドを提供します。Product

    add(製品製品);

  2. CD, Book and Game 共通の機能を共有しない場合は、OOP 機能を使用してこれらすべてをより簡単な方法で追加することもできます。ただし、ここではメソッドのオーバーロードを使用する必要があります

    追加 (CD cd);

    add(ブックブック);

したがって、アプリケーションの設計を検討してから、いずれかのアプローチを検討することをお勧めします。

于 2013-02-12T12:35:41.037 に答える
0

判別式を使用してすべてのオブジェクトを1つに集約し、AdaのバリアントレコードやCのユニオンのように実際に表現されているオブジェクトを示すことができます。

ここに完全な例があります:http://lambda-the-ultimate.org/node/2694#comment-40453

于 2013-02-12T12:07:10.093 に答える