トップダウンアプローチでは、単一のタスクを実行するために関数を小さくすることをお勧めします。
それで。メインが何をしているのかわかりませんか?他の関数または必要なすべてを呼び出すだけですか?
ありがとう。
アイデアは、タスクを論理的な抽象化に分離することです。
ここでは、キッチンでの調理例を使ってコンセプトを説明します。あなたがいくつかの料理でおいしい夕食を準備したいとします。あなたのメンタルチェックリストはおそらく主要なステップから始まります:
したがって、これらはあなたに入る機能になりますmain()
次に、各ステップについて、もう少し詳しく説明します。(以下にリストされているサブステップは、各メイン関数が独自の関数定義内から呼び出すものであることに注意してください)。
次に、サブステップごとに、個別の論理アクションを表すために物事をよりきめ細かくすることができます。main()
簡潔にするために、最初の2つの関数を調べます。
ここで、2つのことに注意してください。
トップダウンアプローチは、高レベルのシステムまたは設計から始まり、次に低レベルのシステムまたは設計または開発に進みます。トップダウンアプローチは、最初にシステム全体またはプロジェクト全体の要約に焦点を合わせます。最後に、それは詳細設計または開発に焦点を合わせます。このアプローチでは、最初のプログラマーはmain関数のコードを作成する必要があります。メイン関数では、他のサブ関数を呼び出します。最後に、各サブ関数のコードを記述します。
トップダウンアプローチでは、高レベルの設計から始めます。したがって、最初にアイデアをmain()関数に抽出します(Cまたは同様の言語を使用している場合)。たとえば、フィボナッチ数を計算する場合、トップダウンアプローチでは次のように開始します
int main()
{
int *numbers;
int n = getCountOfNumbers(); // get the count of numbers to be generated
generateFibonacci(numbers, n); // generate numbers
processFibonacci(numbers); // display the numbers
return 0;
}
これにより、プログラムで行うことの抽象的な実装が設定されます。次に、関数getCountOfNumbers()、generateFibonacci()、およびprocessFibonacci()を実装して、ロジックとアルゴリズムを表します。
したがって、main()関数を使用すると、プログラムの高レベルの編成を表すことができます。さらに、これはほとんどのプログラミング言語の開始点であるため、制御フローはmain()関数から始まり、呼び出しシーケンスに応じてプログラム内の他の関数に委任されます。
トップダウンアプローチは、厳密に言えば関数やタスクに関するものではなく、アルゴリズムの世界への過度に単純化されたアプローチのようなものです。
通常、トップダウンアプローチは、チューリング理論とアルゴリズムの紹介の直後に出てくるトピックであり、学生に実際的な意味を理解させるだけです。また、これは、以下を含むような、より複雑で進化したアプローチのはるかに簡単な代替手段です。数学+アルゴリズムは、通常、大学やコンピュータサイエンスのクラス向けのものです。
また、言語が入らないトップダウンアプローチについて話すと、それはあらゆる言語またはあらゆる種類の実装からそれ自体を抽象化するトピックであり、問題解決アプローチを備えた一般的な手順とアルゴリズムに関するものであることに気付くでしょう。
C ++に関しては、実際には一般的な用語で、main()
関数の役割は基本的にアプリケーションのメインスレッドを開始し、値argc
とargv
値を管理することです。
main() をプログラム全体の青写真と考えるのが好きです。高レベルの「説明的な」方法で他の関数を呼び出します。本当にこれは、関数がどのように読み取られるべきかを説明しています。
たとえば、ユーザーが画像を選択してサムネイルに縮小できるようにするプログラムは、次のようになります。
// Pseudo-code
int main() {
string path = getImagePath();
checkImageValidity(path);
imageData imgData = new imageData();
imgData = readImageData(path);
writeImageData("../thumb.png", imgData, imageType.PNG);
fileClose(fp);
return 0;
}
各関数はいくつかの作業を行い、おそらく他の関数を呼び出しますが、メインを読むことで、プログラムの大まかな流れを理解できます。「画像ファイルのパスを取得し、それが有効なファイルであることを確認し、未加工の画像データを読み取り、出力ファイルに書き込み、それを閉じます。」
実際のプログラムはこれよりも複雑になりますが、それは、プログラムの複雑さがメリットとなる深さと幅のレベルと同じように、同じように読み取る関数がもっとあることを意味します。