4

私は最近、コードが階層化された方法でどのように編成されるかについてよく考えています。私は4つの異なる方法を考えてきました:

  1. インスタンス化 -- 特にオブジェクトはクラスのインスタンスです。ただし、一部の言語 (Python など) では、クラスはメタクラスからインスタンス化されたオブジェクトでもあります。そのため、オブジェクトのインスタンス スタックになる可能性があります。
  2. 継承 -- スーパークラスのスタックになってしまいます。複数の継承がある場合でも、それをスタックに変換する方法がある可能性があります (Python の MRO のように)。
  3. 名前空間 -- 通常、スコープも階層化されています。
  4. コール -- コール スタックは、おそらく最もよく知られており、概念的に最も古いものです。プログラミングの主力です。

インスタンス化は別の種類のコール スタックであり、継承は単なる別の名前空間スタックであると主張することもできますが、いずれにせよ、これらは私が考えたものです。

では、ここに収まる他の概念的なスタックを持っている人はいますか?それとも、呼び出しと名前空間がすべてをまとめているのでしょうか? 他の考えはありますか?

4

3 に答える 3

1

あなたが何を得ているのかはわかりませんが、別のタイプの「スタック」が依存関係である可能性があります。たとえば、A がクラス B と C を使用し、クラス B が D と E を使用し、クラス C が F を使用する場合、次のようなレイヤーのスタックになります。

+---------+
|    A    |
+-----+----
| B   | C |
+-----+---+
| D E | F |
+-----+---+

また、あなたが「名前空間」と呼んでいるものは、より一般的には「パッケージ」と呼ばれると思います。これは、ある種の関連クラスのセットです。

于 2010-08-15T21:20:00.147 に答える
1

これは、ソフトウェアの構造について考えさせられる、とても良い質問だと思います。コードとそのアーキテクチャの間に抽象化のレイヤーを作成するには、ソフトウェアの構造化が必要です。

私は最近、水平方向のレイヤー化が便利な手法である という結論に達しましたが、垂直方向のパーティショニングの方が便利です。水平階層化の例は、従来の DAL->BAL->GUI シナリオで、垂直分割はアプリケーションをサポートする機能に分割します。

スタックのモデルは、明らかに水平レイヤー モデルに存在します。しかし、機能を垂直に分割する場合にも、スタック モデルを見つけることができます。垂直パーティショニングで特に魅力的なのは、各垂直スライスが独自の水平レイヤー スタックを持つことができるという考えです。この考えは、CQRS のようにますます人気が高まっているパターンに似ています。また、スタックとしてモデル化された、アプリケーションの垂直パーティション間に依存関係がある場合もあります。しかし、これでは不十分な場合があり、グラフなど、スタックよりも高度な抽象化が必要になることがあります。

それを抽象化すると、スタックで考えるのが好きな理由は、さまざまなレベルの抽象化で物事を見ることができ、必要に応じてスタックにプッシュ/ポップできるからだと思います。グラフのような他の構造は、コンポーネント間の依存関係などの問題を記述するのにより適している場合がありますが、より複雑であるため、スタックほど便利ではありません。

それが、多重継承が見捨てられた理由でもあります。依存関係のグラフ (多重継承) は、単純なスタック (単一継承) よりもはるかに理解しにくいものです。

他に何をスタックとしてモデル化できますか? 率直に言って、私たちがここに持っているものは非常に多く、あなたを非常に遠くまで連れて行ってくれると思います:

  • 継承階層 (単一継承)
  • 水平の建築層
  • 垂直建築層 (地物構成)
  • シンプルで線形の依存関係 (呼び出しシーケンス、ラッパー、ファサード)
于 2010-08-15T22:16:47.423 に答える
0

私があなたの質問を理解している限り、あなたはオブジェクト指向のランタイム環境を実装する方法を考えようとしています。スタックがほとんどの問題に使用できることは正しいですが、実装方法よりも概念の方が重要だと思います。たぶん、もっと具体的にする必要があります。この質問の理由は何ですか。あなたが解決できない特定の問題がありますか?

于 2010-08-15T21:22:27.593 に答える