私は、算術式を解析するための拡張された操車場アルゴリズムを実装してきました。アルゴリズムの1つの側面は、、、Queue
およびを維持することStack
です。
私の実装では、Queue
containsExpressions
とOperators
。Stack
含むOperators
とParenthesis
。_
Expressions
、、、Parenthesis
およびOperators
それらのいずれか2つが共有インターフェイスを持つことを保証する共通点はありません。
アプローチ:
私の現在の実装は、
Expression
で構成さOperator
れていINotParanthesis
ます。Operator
をParanthesis
実装しINotExpression
ます。Queue <INotParanthesis>
次に、、、およびを宣言しStack <INotExpression>
ます。私はこの実装が好きではありません-これらのインターフェースは、よりクリーンなアルゴリズムコードを目的としたハックのようです。また、インターフェースは、オブジェクトではなく、オブジェクトが何であるかを記述する必要があると思います。
一方、
<Object>
そのようなコードの正確さを確認するのは難しい場合があるため、のコレクションも使用したくありません。これまでに思いついたのは、自分のコンテナ
NonParanthesisQueue
とNonExpressionStack
コンテナを実装することだけです。これには、オブジェクトがそれらのコンテナから引き出される際のより一貫性のある型チェックの利点と、より多くのコードの欠点があります。
私のアプローチに代わる合理的な方法はありますか?