O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×

構造化プログラミング

Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Carregando em…3
×

Confira estes a seguir

1 de 54 Anúncio

構造化プログラミング

Baixar para ler offline

構造化プログラミングは古くいように思われていることもありますが、今に至るまでプログラムにとって最も大切なことの一つであり続けています。その解説です

構造化プログラミングは古くいように思われていることもありますが、今に至るまでプログラムにとって最も大切なことの一つであり続けています。その解説です

Anúncio
Anúncio

Mais Conteúdo rRelacionado

Mais de potimarimo (20)

Mais recentes (20)

Anúncio

構造化プログラミング

  1. 1. 構造化プログラミング 古くて新しいプログラミング の基本
  2. 2. 年表 1968年 •goto文は有害である 1969年 •構造化プログラミング 1972年 •オブジェクト指向
  3. 3. 年表 1968年 • goto文は有害である 1969年 • 構造化プログラミング 1970年 • リレーショナルデータベース 1971年 • Intel 4004(世界初のマイクロプロセッサ) 1972年 • オブジェクト指向 1972年 • Unix 1972年 • C言語 1974年 • Altair 8800(世界初の個人用コンピュータ)
  4. 4. 疑問 GOTO文を使わないことがなぜそんなに重要なのか? 最近GOTO文を導入したPHPはダメな言語なのか? オブジェクト指向の3原則はどうして微妙なのか?
  5. 5. 構造化プログラミング言語
  6. 6. 構造化 非構造化 構造化 脊椎動物 哺乳類 奇蹄目 鯨偶蹄目 ネコ目 ウサギ目 ゾウ目 霊長目 鳥類 タカ目 ペンギン目 スズメ目 爬虫類 有燐目 魚類 コイ目 フグ目
  7. 7. 構造化プログラミング 構造化プログラミングではプログラミング言語が持つステートメントを直 接使ってプログラムを記述するのではなく、機能を抽象化した仮想機械を想 定し、その仮想機械が提供する命令群でプログラムを記述する。普通、抽象 化は1段階ではなく階層的である。各階層での実装の詳細は他の階層と隔離 されており、実装の変更の影響はその階層内のみに留まる。各階層はアプリ ケーションに近い抽象的な方から土台に向かって順序付けられている。この 順序は各階層を設計した時間的な順番とは必ずしも一致しない。 (Wikipedia)
  8. 8. 構造化プログラミング 適切に関数(メソッド)に分けることです
  9. 9. GOTO文 goto文と何の関係 があるのか? goto文を無節操に 使うと、関数分けが 不可能になります。
  10. 10. 構造化プログラミング以降の世界 GOTO文のない世界 構造化プログラミングが 最低限はできている世界
  11. 11. 構造化の三要素 構造化 順次 反復 分岐
  12. 12. 順次 DoSomething1(); DoSomething2(); DoSomething3(); DoSomething4(); DoSomething5();
  13. 13. 順次 DoSomothing1 DoSomothing2 DoSomothing3 DoSomothing4 DoSomothing5
  14. 14. 反復 for (int i = 0; i < 10; i++) { DoSomething1(); DoSomething2(); DoSomething3(); DoSomething4(); DoSomething5(); }
  15. 15. 反復 for DoSomothing1 DoSomothing2 DoSomothing3 DoSomothing4 DoSomothing5
  16. 16. 分岐 if (i <= 2) { DoSomething1(); DoSomething2(); } else { DoSomething3(); DoSomething4(); }
  17. 17. 分岐 if DoSomothing1 DoSomothing2 else DoSomothing3 DoSomothing4
  18. 18. GOTO文があるとどうなるか if (i <= 2) goto a; DoSomething1(); a: DoSomething2();
  19. 19. 増えてくるともう わけわからなく メソッドわけが 不可能 インデントすらつ けられない
  20. 20. 去勢されたGOTO文 例外処理 break,continue など 最後以外の return switch
  21. 21. GOTO文を使った例外処理 if (!DoSomething1()) goto error; if (!DoSomething1()) goto error; if (!DoSomething1()) goto error; if (!DoSomething1()) goto error; if (!DoSomething1()) goto error; error: Error();
  22. 22. 構造化例外 try { DoSomething1(); DoSomething2(); DoSomething3(); DoSomething4(); DoSomething5(); } catch(Exception ex) { Error(ex); }
  23. 23. CONTINUE,BREAKなど for(int i = 0;i < 10; ++i) { DoSomething1(); if(j <= I * i) { break; } DoSomething2(); }
  24. 24. 最後以外の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; }
  25. 25. C#やVISUAL BASICのSWITCH文 switch(i) { case 1: DoSomething1(); break; case 2: DoSomething2(); goto case 3; case 3: DoSomething3(); break; }
  26. 26. 入れ子になったループ(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();
  27. 27. 入れ子になったループ for (int j = 0; j < 10; ++j) { for (int i = 0; i < 10; ++i) { DoSomething1(); if (j <= i * i) { goto jexit; } } } jexit: DoSomething3();
  28. 28. PHPのGOTO文は邪悪か? •ブロックに入るgotoは禁止 •C#と同じ ループなどのブロックから の脱出のみに利用できる •去勢されている 関数内からのreturnと同じ 挙動 •goto濫用するためにあえてループをすべてgotoで書き直したりする なら別だが •いやPHPerならあえてそれをやってくれる、という意見もあるが いくらPHPerでもここから gotoスパゲッティは作れな いのでは?
  29. 29. 構造化で何ができるか
  30. 30. 構造化プログラミングの提唱 翌1969年、再び開催されたNATOのソフトウェア工学会議 において、ダイクストラは「構造化プログラミング (Structured Programming)」という語を提唱した。ダイク ストラはこの論文においてgoto文については触れず、プロ グラムサイズが大きくなったとしても正しさを証明できる 良く構造化されたプログラム(well-structured programs)、 大きなプログラムの理解を助ける段階的な抽象化(step- wise abstraction)、抽象データとその操作の抽象文の共同 詳細化(joint refinement)について述べた。(出典: Wikipedia)
  31. 31. よく構造化されたプログラム F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
  32. 32. よく構造化されたプログラム F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
  33. 33. よく構造化されたプログラム F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
  34. 34. よく構造化されたプログラム F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
  35. 35. 段階的な抽象化 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
  36. 36. 段階的な抽象化 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
  37. 37. 段階的な抽象化 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
  38. 38. 抽象データとその操作の抽象文の 共同詳細化 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15
  39. 39. 抽象データとその操作の抽象文の 共同詳細化 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 D2 D8 D7 D6 D5 D4 D3
  40. 40. 抽象データとその操作の抽象文の 共同詳細化 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 D2 D8 D7 D6 D5 D4 D3
  41. 41. 抽象データとその操作の抽象文の 共同詳細化 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 D2
  42. 42. 抽象データとその操作の抽象文の 共同詳細化 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 D2 D6 D3 D1
  43. 43. 抽象データとその操作の抽象文の 共同詳細化 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 D2 D6 D3
  44. 44. 抽象データとその操作の抽象文の 共同詳細化 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 D6 D3
  45. 45. 抽象データとその操作の抽象 文の共同詳細化 具象 整数 浮動小数点数 足す 掛ける 抽象 会員 店舗 入会する 開店する
  46. 46. オブジェクト指向へ
  47. 47. オブジェクト指向の三原則 継承 カプセル化 ポリモーフィズム
  48. 48. 他に必要なものはないのか? 「世の中のすべてのものはオブジェク ト」は? 「処理とデータをまとめて扱う」は?
  49. 49. 年表 1968年 •goto文は有害である 1969年 •構造化プログラミング 1972年 •オブジェクト指向
  50. 50. 年表 1968年 •goto文は有害である 1969年 •構造化プログラミング 1972年 •オブジェクト指向
  51. 51. 年表 1968年 •goto文は有害である 1969年 •構造化プログラミング 1972年 •オブジェクト指向
  52. 52. オブジェクト指向の三原則 構造化プログラミングの抽象データ 型と段階的詳細化がすでにある状態 を前提として、オブジェクト指向言 語に実装する必要がある言語機能。
  53. 53. オブジェクト指向の三原則 構造化プログラミング の理解抜きに考えてい ても意味ない概念。
  54. 54. 最後に 構造化プログラミングの理解は現代 でも必要なものばかりです。 調べておきましょう。

×