Upgrade to Pro — share decks privately, control downloads, hide ads and more …

構造化プログラミング

まりも
September 25, 2024

 構造化プログラミング

最近当たり前のように使われ、何を指しているかすら忘れられがちな構造化プログラミングですが、オブジェクト指向に発展的解消を遂げ、いまだにオブジェクト指向の中核をなす概念です。構造化プログラミングの過去、現在、そしてオブジェクト指向にどうつながるかを解説します。

まりも

September 25, 2024
Tweet

More Decks by まりも

Other Decks in Programming

Transcript

  1. 年表 1968年 • goto文は有害である 1969年 • 構造化プログラミング 1970年 • リレーショナルデータベース

    1971年 • Intel 4004(世界初のマイクロプロセッサ) 1972年 • オブジェクト指向 1972年 • Unix 1972年 • C言語 1974年 • Altair 8800(世界初の個人用コンピュータ)
  2. 構造化 非構造化 構造化 脊椎動物 哺乳類 奇蹄目 鯨偶蹄目 ネコ目 ウサギ目 ゾウ目

    霊長目 鳥類 タカ目 ペンギン目 スズメ目 爬虫類 有燐目 魚類 コイ目 フグ目
  3. 反復 for (int i = 0; i < 10; i++)

    { DoSomething1(); DoSomething2(); DoSomething3(); DoSomething4(); DoSomething5(); }
  4. GOTO文を使った例外処理 if (!DoSomething1()) goto error; if (!DoSomething1()) goto error; if

    (!DoSomething1()) goto error; if (!DoSomething1()) goto error; if (!DoSomething1()) goto error; error: Error();
  5. CONTINUE,BREAKなど for(int i = 0;i < 10; ++i) { DoSomething1();

    if(j <= I * i) { break; } DoSomething2(); }
  6. 最後以外のRETURN int Func() { for (int j = 0; j

    < 10; ++j) { for (int i = 0; i < 10; ++i) { DoSomething1(); if (j <= i * i) { return j; } } } return -1; }
  7. C#やVISUAL BASICのSWITCH文 switch(i) { case 1: DoSomething1(); break; case 2:

    DoSomething2(); goto case 3; case 3: DoSomething3(); break; }
  8. 入れ子になったループ(JAVA) jl oo p: fo r (i nt j =

    0; j < 10 ; ++ j) { for (int i = 0; i < 10; ++i) { doSomething1(); if (j <= i * i) { break jloop; } } } jloop:for (int j = 0; j < 10; ++j){ for (int i = 0; i < 10; ++i){ doSomething1(); if (j <= i * i) { break jloop; } } } doSomething3();
  9. 入れ子になったループ for (int j = 0; j < 10; ++j)

    { for (int i = 0; i < 10; ++i) { DoSomething1(); if (j <= i * i) { goto jexit; } } } jexit: DoSomething3();
  10. PHPのGOTO文は邪悪か? • ブロックに入るgotoは禁止 • C#と同じ ループなどのブロックからの脱出 のみに利用できる • 去勢されている 関数内からのreturnと同じ挙動

    • goto濫用するためにあえてループをすべてgotoで書き直したりするなら別だが • いやPHPerならあえてそれをやってくれる、という意見もあるが いくらPHPerでもここからgotoス パゲッティは作れないのでは?
  11. 抽象データとその操作の抽象文の 共同詳細化 F1 F2 F3 F4 F5 F6 F7 F8

    F9 F10 F11 F12 F13 F14 F15 D2 D8 D7 D6 D5 D4 D3
  12. 抽象データとその操作の抽象文の 共同詳細化 F1 F2 F3 F4 F5 F6 F7 F8

    F9 F10 F11 F12 F13 F14 F15 D2 D8 D7 D6 D5 D4 D3