Hello Worldではなく、実際のアプリケーションをプログラミングした最初の経験は、どこから始めればいいのかという簡単な質問に帰着したことを知っている人は同意すると思います。 プログラムの設計を開始するには? 何を書くのか?!
そして、原則として、最初の経験は大量のコードであり、プログラムの必要に応じて、忘れられるか完全に書き直されます。
長い間、私はデザインレシピを求めてインターネットを探し回っていましたが、どこにでもある特定のモデルに行き着き、テンプレートのように適用しなければなりませんでした。 たとえば、MVCを使用できます。MVCは誰でも知っていますが、MVCの実装方法に関する推奨事項は劇的に異なります。
そして、ある朝、簡単な考えが浮かびました。プログラムがスノーフレークメソッドを使用して設計されている場合はどうでしょうか。
私がしたこと:
1.プログラムがどのように見えるかを紙に書きました(コンソールに大きな違いはありません。途中で理解できます)。 たとえば、電卓を使用します。
2.条件付きで1枚の用紙を2つの部分に分割します。1つはインターフェイス、もう1つはプログラム自体ができること、そのモデル(ビジネスロジック)について説明します。 すでにこの段階で、プログラムをプレゼンテーションとロジックの2つの部分に分けたことは明らかです。 同時に、プログラムがコンソールプログラムである場合、プログラムが応答するコマンドとそれが返す出力を表示します。
コントローラは、インターフェイスの一部とプログラムモデル間の接続です。
3.インターフェイスを説明するために、まず、同じタイプのすべての要素(ボタン、ラベルなど)をリストします。 すでにこの段階で、親クラスについて説明していることがわかります。 たとえば、電卓:
このメニュー、ラベル、テキストボックス、ボタン、ラジオの同じ要素を赤で囲みました。
次に、これらの要素をより具体的な要素に分解することは可能ですか? (もちろん、複数のボタンがあるため可能です)。 したがって、ボタンからできるだけ少ない一般的なグループを形成するか、より明確にするために、クラス:これらは英数字(計算せず、データのみを入力)および操作可能(それらをクリックすると、計算または他の操作につながる可能性があります)。 同時クラスを作成するほど、抽象化のレベルが高くなり、これは将来非常に役立つ可能性があります。誰もがこれに同意すると思います(機能を補完する方が便利で、常に継承するものがあります)。
さらにグループに分割し続けると、分割が不可能になったときに、各最終クラスの定義に到達します。 そして、それから最初のプログラムへの連鎖は、継承の連鎖になります。 たとえば、最後のキャラクターを消去するためのボタンを取得する場所など、何かが私たちに合わない場合は、いつでも継承ツリーを調べて、分岐またはクラスをクラスに変更できます。 インターフェイスについて説明した後、さらに設計するためのチートシートを取得します(最終的には、フォーム上の空の要素を彫刻しません)。
4.一般クラスから始めて、より多くの操作を指定するロジックで同じことを行います。
既知であるが分類されていない操作がある場合は、それを追加してから、建物モデルに入力するだけで十分です。
次のようなものが得られます。
5.プログラムの拡張により、変更は非常に簡単です。 たとえば、最初に行を読み取ってから計算するプログラムが必要でした。 つまり 計算のクラス(既に実装されている)とコントローラー(行を読み取り、入力時にテキストフィールドに入力し、パーサーの後に渡す)を使用するパーサーが表示されます。 変更は、ほぼ3行に収まり、さらにパーサーを記述するクラスが含まれます。
プログラムが非常に大きく複雑な場合は、常に個別の要素を取得して、上記の方法を使用して記述できます。 たとえば、マルチウィンドウアプリケーションの場合、ウィンドウごとにスノーフレークを描画できます。 複雑なロジックの場合、グローバル操作を強調表示して同じことを行います。 さらに、そのような方法は、一般的なものから特定のものまで機能するだけでなく、その逆も機能します。 最初に、レンガや小さな木の形で思い浮かぶすべてのものを手に入れます。 共通のものを組み合わせることができる場合、親クラスを取得します。 分類できる場合、サブクラスを取得します。 したがって、結合のないレンガがなくなるまで、サブクラス化する機会はなく、スノーフレークはできません。
すべてが完了したら、コードの記述を開始できます。 しかし、それをどう書くか、これは別の話です...しかし、設計段階でも、クラスに名前を付けて、その機能を簡単に説明することができます。
PS
プラス-何も知る必要はありません。紙、ペン(またはベクターエディター)、およびプログラムが記述される言語の基本的な知識さえあれば十分です(私はJavaに依存していました)。 特に初心者にとっては、非常に明確かつ簡単にわかります。
マイナスの点-簡素化、おそらくいくつかのデザイン機能は失われますが、これは長い間これを行っており、何かを提案または補足することができる人にとってはすでに質問です。