0

私はここで少し明快さを探しています。私のプロジェクトの 1 つで、さまざまな幾何学的形状を保持するコンテナーを作成しました。私のインターフェースは次のとおりです。

Container::AddTriangle(Point, Point, Point);
Container::AddSquare(Point, Point, Point, Point);

などなど。必要なデータがあることを確認するためにコンパイル時にチェックを行うため、このインターフェイスが気に入っています。しかし、私のチームとの話し合いで、誰かが代わりにこのインターフェースを提案しました:

enum SHAPE { Triangle, Square };
Container::AddShape( std::vector<Point>, SHAPE );

多くの関数ではなく 1 つの関数のみを使用することで、よりクリーンなコードを提供するという議論があります。私は確かに最初の方法を好みますが、2 番目の方法に反対する意見はまったくありません。誰かが以前にこの選択に遭遇したことがありますか? どちらの選択肢が他の選択肢よりも優れていますか (または少なくとも伝統的に好まれていますか)?

注:誰かが提案する前に:

Container::Add( Shape )

これは私の問題に対する適切な解決策ではないことをお知らせしたいと思います。約束します。

4

3 に答える 3

1

2番目のものに対する主な議論は、2つの異なる機能を持つことの基本的な有用性を無視しているということです。三角形と正方形は2つの異なるエンティティです. 2 つの別個のパラメーター リストを持つ 2 つの別個の関数がある場合、コードは明確で明確です。

1 つの関数はコードを単純化するために何もしません。1 つのベクトルは混乱を引き起こします。4 つの点を持つ三角形が必要な場合、ソフトウェアは何をしますか? 明らかにこれはきれいではありません。さらに、関数を呼び出すときにベクトルをインスタンス化することは、単にポイントを個別にインスタンス化するよりもはるかに複雑になります。

于 2013-06-12T20:30:27.837 に答える
1

私は最初のバージョンに行きます。単一の関数を使用するAdd(std::vector<Point>, SHAPE)と、多くの未定義のケースが追加されるだけです。たとえば、ベクトルに 10 個の要素を持つ三角形を追加したい場合はどうすればよいでしょうか?

AddTriangle、AddSquare などの関数がより明確になり、コードに何が追加されるかを簡単に確認できるようになりました。関数を持つことAddPolygon(std::vector<Point>)は、一般的な形状を追加するために使用できます。

シェイプをクラスとして保存したとしても、最初のバージョンを優先しますstd::vector<Point>ContainerAddTriangle/AddSquare 関数でベクトルを作成するだけです。

于 2013-06-12T20:28:39.707 に答える
0

なぜ両方ではない?ここには、インターフェースと実装という 2 つの個別の問題があるようです。パラメータが明示的であるため、最初のインターフェイスの方が優れていますが、各関数がほぼ同じである場合は、すべて同じ実装を使用する必要があります。言い換えると、AddTriangleは call を行うだけAddShape(vector, Triangle)で、コンテナの外部ユーザーは を使用する必要がありますが、直接操作することAddTriangleはできません。AddShape

于 2013-06-12T20:48:23.817 に答える