SlideShare ist ein Scribd-Unternehmen logo
1 von 83
Downloaden Sie, um offline zu lesen
やわらかマッドサイエンティスツのプログラミング入門

3つのダイアログから見た
プログラミング
第2回 ジャクソン構造図の巻(後編)



            USP友の会会員 鳥海秀一
自己紹介

名前:鳥海秀一
出身地:北海道
年齢:47歳
業務で初めて使った言語はRPG
職業:SIerのBPとして、金融機関で働いてます
趣味:プログラミング言語の習得
USP友の会との関わり: 「アジャイルジャパン
2009」の當仲講演から
本日の予定

1.   USP友の会の紹介(10分)
2.   アイスブレイク(一言自己紹介)(30分)
3.   前回の振り返り(30分)
4.   講義1(先読み技法紹介)(30分)
5.   演習( 60分ぐらい)
6.   ライブプログラミング(30分)
7.   次回の予告(20分)
8.   まとめ(25分)
自己紹介をお願いします

下記の内容を含めてください

① お名前とご出身と現在お住まいの場所
② ご職業と今やっていること
③ この勉強会に参加しようと思ったわけ

1分間でお願いします。
※注意 本勉強会が対象とする設計の規模

• 80個の“=”を出力するプログラムより少しだ
  け大きいプログラムの設計方法
前回までの振り返り

1. プログラム入門でダイアログを
   取り上げる理由について
2. 状態遷移図について
3. ジャクソン構造図について
プログラム入門でダイアログを取り上げる理由

プログラムの作成には事前の設計が大切

• 設計は二つのプロセスから構成される
 – 発散
 – 収束

• 発散には概要把握と視点の切り替えが必要

• ダイアログは上記二つを提供する
3つのダイアログが提供する3つの視点

• 状態遷移図
   状態遷移(計算モデル)

• ジャクソン構造図
    データの構造

• データフローダイアグラム
   データの流れ
状態遷移図について

1. 計算モデルの一つ、有限オートマトンの図式
   表現
 • 構成要素は状態、事象、状態遷移、(アクティビ
   ティ)

2. マルコフ性を意識することが重要
 • 未来の状態は現在の状態と外部刺激だけで決
   まる
例題:整数判定の状態遷移図

                0~9


                             0~9

                       0~9         EOS
          +|-




開始
     S0         S1           S2          OK




                             その他
                      その他

                その他
                                         NG
詳しくは下記資料を参照

• スライドシェア
http://www.slideshare.net/ryuichiueda/usp-9642558


• USPマガジン Vol.3
ジャクソン構造図について

1. プログラムの入出力データ構造に着目
 • 連接、選択、反復の3つの構成要素を用いた木
   構造でデータを表現


2. 表現力は状態遷移図と等価

3. 可読性の高いプログラムを導きやすい
入出力のデータ構造に着目

• プログラムは入力データを出力データに
  変換するものであり、両者の構造から影
  響を受ける


   入力データ   処理   出力データ
ジャクソン構造図の基本構造

次の3つの基本構造でデータを記述する
• 連接
• 選択
• 反復
ジャクソン構造図による連接の表現


       A


  B    C    D

  Aは、BとCとDからなる
ジャクソン構造図の連接の例




    名前           年月日



姓        名   年   月     日
ジャクソン構造図による選択の表現


       A


  B    C    D

  Aは、BかCかDである
ジャクソン構造図による選択の表現(補足1)



          A


    B     C    -

Aは、BかCか存在しないかである
ジャクソン構造図による選択の表現(補足2)

             (省略形)

     A         A


 B       -     B

 Aは、Bか存在しないかである
ジャクソン構造図の選択の例




    人            年金


            国民   厚生   共済
男       女   年金   年金   年金
ジャクソン構造図による反復の表現


       A

           *

       B

  Aは、複数のBからなる
ジャクソン構造図の反復の例




         テキスト
プロジェクト
         ファイル


     *          *
プロジェクト    行
 メンバー
ジャクソン構造図による整数表現


               整数




   符号                  絶対値



           ○
  + or -        1文字目          2文字目
                 数字          以降数字群



                                   *
                0~9          0~9
表現力は状態遷移図と等価

言語階層       機械         文法           備考


タイプ0   チューリングマシン    句構造文法


タイプ1   線形有界オートマトン   文脈依存文法


       プッシュダウンオート
タイプ2                文脈自由文法    プログラミング言語の階層
       マトン
                              ジャクソン構造図と等価
タイプ3   有限オートマトン     正規文法

                             状態遷移図と等価
可読性の高いプログラムを導きやすい

1. 木構造でデータを表現
 • 木構造は人の思考となじみやすい

2. 3つの基本構造という制約
 • 基本構造の制約が構造化された(上から下に読
   んでいける)プログラムを導く
木構造による表現

木構造(階層構造)は概念構造に相即的
 •   複合概念、基本概念
 •   上位概念、下位概念
例:整数という概念

整数は符号とそれに続く絶対値から構成される。符号
はなくてもよいが、ある場合には「+」か「ー」かの一文
字からなり…
                   整数



       符号                  絶対値


               ○
                    1文字目          2文字目
      + or -         数字          以降数字群


                                       *
                    0~9          0~9
補足:階層構造を導入した状態遷移図(ハレル図)


                          0~9
     整数

     +|-
             符号

                  0~9    絶対値

       0~9




                        EOS
3つの基本構造という制約

• きちんと構造を表現しないとプログラムが導
  けない
(整数のジャクソン構造図の悪例)
                      整数



                           *
                      文字


                  ○                  ○
          符号                   数字



         + or -                0~9
(補足)状態遷移図の威力

状態遷移図からなら先の悪例からもプロ
グラムを導けます。
例:整数判定の状態遷移図

                 0~9


                              0~9

                        0~9         EOS
           +|-




開始
     S0          S1           S2          OK




                              その他
                       その他

                 その他
                                          NG
先の例を状態遷移表に変換

      符号         数字     終端      その他
     (+ or -)   (0~9)   (EOS)

S0     S1        S2      NG     NG
S1     NG        S2      NG     NG
S2     NG        S2      OK     NG
状態遷移表の縦と横を入れ替える

           S0   S1   S2
 符号
           S1   NG   NG
(+ or -)
 数字
           S2   S2   S2
(0~9)
 終端
           NG   NG   OK
 (EOS)
その他        NG   NG   NG
プログラムに変換すると
#!/usr/bin/perl                                } else {
                                                  exit 1;
@c = split //, shift;                          }
                                             }
$s = 0;                                      if ($s == 2) {
for $c (@c) {                                   exit 0;
  if ($c eq '+' || $c eq '-') {              } else {
     if ($s == 0) {                             exit 1;
        $s = 1;                              }
     } else {
        exit 1;
     }
  } elsif ('0' le $c && $c le '9') {
     if ($s == 0 || $s1 == 1 || $s == 2) {
        $s = 2;
     }
ジャクソン構造図による整数表現


               整数




   符号                  絶対値



           ○
  + or -        1文字目          2文字目
                 数字          以降数字群



                                   *
                0~9          0~9
先のジャクソン構造図から導かれたプログラム

#!/usr/bin/perl                 while ('0' le $c && $c le '9') {
                                  $c = shift @c;
@c = split //, shift;           }

$c = shift @c;                  if ($c eq '') {
if ($c eq '+' || $c eq '-') {      exit 0;
   $c = shift @c;               } else {
}                                  exit 1;
                                }
if ('0' le $c && $c le '9') {
   $c = shift @c;
} else {
   exit 1;
}
前回の宿題

1. 身の回りのもので位置を利用して情
   報を表現しているものを探してみよう
2. 浮動小数点数のジャクソン構造図をプ
   ログラムに変換してみよう
3. 浮動小数点数の状態遷移図からgoto
   プログラムを書いたのち、発見的手法
   でgotoを取り除いてみよう
宿題2のジャクソン構造図

                                                                             浮動
                                                                            小数点数




                             仮数部                                                                                   指数部



                                                                                                                          ○
 符号                                                           絶対値                                                  省略可能
                                                                                                                    指数部


         ○                              ○                                         ○
+ or -                           整数部付                                        小数部のみ                        指数文字                   指数
                                  絶対値                                         絶対値




                    整数部                           小数部                         小数部                         E or e     符号                     整数部



                                                         ○                                                                   ○
             1文字目          2文字目                   省略可能                小数点                 小数                        + or -        1文字目             2文字目
              数字          以降数字群                    小数部                                                                             数字             以降数字群


                                 *                                                                                                                       *
             0~9           0~9              小数点              小数        ・           1文字目         2文字目                                  0~9          0~9
                                                                                    数字         以降数字群


                                                                  *                                   *
                                             ・           0~9                       0~9          0~9
宿題2の解答例
#!/usr/bin/perl                       } elsif ($c eq '.') {                    if ($c eq 'E' || $c eq 'e') {
                                         $c = shift @c;                           $c = shift @c;
                                                                                  if ($c eq '+' || $c eq '-') {
@c = split //, shift;                    if ('0' le $c && $c le '9') {
                                                                                     $c = shift @c;
                                            $c = shift @c;                        }
$c = shift @c;                              while ('0' le $c && $c le '9') {
if ($c eq '+' || $c eq '-') {                  $c = shift @c;                      if ('0' le $c && $c le '9') {
   $c = shift @c;                           }                                         $c = shift @c;
                                                                                      while ('0' le $c && $c le '9') {
}                                        } else {
                                                                                         $c = shift @c;
                                            exit 1;                                   }
if ('0' le $c && $c le '9') {            }                                         } else {
   $c = shift @c;                     } else {                                        exit 1;
   while ('0' le $c && $c le '9') {      exit 1;                                   }
                                                                               }
      $c = shift @c;                  }
   }                                                                           if ($c eq '') {
                                                                                  exit 0;
  if ($c eq '.') {                                                             } else {
     $c = shift @c;                                                               exit 1;
                                                                               }
  }
ここで休憩です
ジャクソン構造図とは

データの構造の図示したもの

では、データの構造とは?
例題1

下記の課題が与えられたときのテキスファイル
の構造をジャクソン構造図で示せ

問題1.テキストファイルの行数を求めよ。
問題2.テキストファイルのバイト数を求めよ。
問題3.テキストファイルの文字数を求めよ。
例題1:解答例


解答例1       解答例2       解答例3



テキスト       テキスト       テキスト
ファイル       ファイル       ファイル



     *            *          *
 行         バイト         文字
プログラムに変換すると

解答例1                    解答例2                      解答例3
#!/usr/bin/perl         #!/usr/bin/perl           #!/usr/bin/perl

$count = 0;             $count = 0;               binmode STDIN, ":utf8";
while (<STDIN>) {       while (defined(getc)) {
  $count++;               $count++;               $count = 0;
}                       }                         while (defined(getc)) {
print $count, "¥n";     print $count, "¥n";         $count++;
                                                  }
                                                  print $count, "¥n";
結論1

データ構造はプログラムの目的により
変化する
例題2

テキストファイルの行数を求めたいとき、
テキストファイルの構造をジャクソン構造図で
示せ
例題2:解答例

解答例1         解答例2                解答例3


テキスト         テキスト                 テキスト
ファイル         ファイル                 ファイル


     *                *                   *
 行               文字                   行



             ○            ○
         改行以外の        改行文字    行文字列        改行文字
          文字


                                  *
                              改行以外の
                                文字
プログラムに変換すると

解答例1                    問題2                               問題3
#!/usr/bin/perl         #!/usr/bin/perl                   #!/usr/bin/perl

$count = 0;             binmode STDIN, ":utf8";           binmode STDIN, ":utf8";
while (<STDIN>) {
  $count++;             $count = 0;                       $count = 0;
}                       while (defined($char = getc)) {   while () {
print $count, "¥n";       if ($char eq "¥n") {              while (defined($char = getc)
                             $count++;                    && $char ne "¥n") {
                          }                                 }
                        }                                   last if (! defined($char));
                        print $count, "¥n";                 $count++;
                                                          }
                                                          print $count, "¥n";
結論2

データ構造は問題の解釈により変化する
結論3

データの構造とはデータの解釈の仕方で
ある。

「事実というものは存在しない。存在する
のは解釈だけである。 」(by ニーチェ)
「われわれは事象を利用するために真理
を『発明』する」(by ベルクソン)
実用的に言い直すと

データの解釈の仕方により、プログラミン
グが簡単になったり、難しくなったりする。
プログラミングが簡単になる構造を見つけ
出すのがジャクソン構造図を描く理由とな
る。
入力データ構造と出力データ構造の要素
が良く対応する構造図がよいとされる。
例題3

「uniq –c」と同じような動きをするプログラ
ムを記述せよ。ただし、入力は標準入力
のみとする。
例題3のプログラムの働き
入力データ         出力データ

a             4   a
a             3   b
a
a
b
b
b
例題3の拡張状態遷移図による表現


行の取得成功 / カウンタ= 1        行の取得成功 & 保存行と取得行が一致 /
         保存行に取得した行を保存   カウンタ++                    行の取得失敗 / print カウンタ, 保存行




            S0                  S1                     S2




                        行の取得成功 & 保存行と取得行業が不一致 /
                        print カウンタ, 保存行
                        カウンタ= 1
                        保存行に取得した行を保存



                            行の取得失敗 / -
状態遷移図をプログラムに変換すると
#!/usr/bin/perl

$line = <STDIN>;
if (not $line) {
   exit;
}
$count = 1;
$old_line = $line;
while ($line = <STDIN>) {
   if ($line ne $old_line) {
      print "$count¥t$old_line";
      $count = 1;
      $old_line = $line;
   } else {
      $count++;
   }
}
print "$count¥t$old_line";
プログラムから導かれるデータ構造の
     ジャクソン構造図による表現
       入力データ                          出力データ
       テキスト                             テキスト
       ファイル                             ファイル


   ○                     ○                      *
内容なし              内容あり                      行



        最初の行       間の行       最後の行   同一行の数       同一行


                         *
                   行


               ○             ○
          非ブレイク行       ブレイク行



          直前の行と        直前の行と
           同じ行          異なる行
もっと良い構造はないか…

あります。
        入力データ         出力データ
        テキスト            テキスト
        ファイル            ファイル

                *               *
         同一行                行
         グループ


                *

         同一行        同一行の数       同一行



但し、プログラムで表現するには先読み技法が
必要です。
先読み技法とは

ファイル処理に用いる技法で、処理対象と
なるデータの1つ先のデータを読む技法
                      先読み技法を使った
 通常のファイル処理
                        ファイル処理

  2.注目   ファイルの
                                 4.注目
                      内容の一部の
         内容の一部         コピー


             1.読み出し       2.コピー
                                   5.とぎどき
                      ファイルの           注目
         ファイル         内容の一部

                               1.読み出し
                               3. 読み出し

                      ファイル
例:標準入力の行数を求めるプログラム
通常のファイル処理             先読み技法を使ったファイル処理

#!/usr/bin/perl       #!/usr/bin/perl

$count = 0;           $count = 0;
while (<STDIN>) {     $next_line = <STDIN>;
  $count++;           $line = $next_line;
}                     while ($line) {
print $count, "¥n";      $next_line = <STDIN>;
                         $count++;
                         $line = $next_line;
                      }
                      print $count, "¥n";
例題3のプログラムを記述
通常のファイル処理                          先読み技法を使ったファイル処理
#!/usr/bin/perl                    #!/usr/bin/perl
$line = <STDIN>;
if (not $line) {                   $next_line = <STDIN>;
   exit;
}                                  while ($line = $next_line) {
$count = 1;                          $count = 0;
$old_line = $line;
while ($line = <STDIN>) {
                                     while ($line eq $next_line) {
   if ($line ne $old_line) {           $count++;
      print "$count¥t$old_line";       $next_line = <STDIN>
      $count = 1;
      $old_line = $line;             }
   } else {                          print "$count¥t$line";
      $count++;
   }                               }
}
print "$count¥t$old_line";
演習問題

下記のプログラムを先読み技法を使用して書き直せ。
#!/usr/bin/perl                                      print "小計:$count2¥t$old_col1 $old_col2¥n";
                                                         $count1 += $count2;
$line = <STDIN>;                                         $count2 = 1;
if (not $line) {                                         $old_col2 = $col2;
   exit;                                                 if ($col1 ne $old_col1) {
}                                                           print "大計:$count1¥t$old_col1¥n";
                                                            $count1 = 0;
($col1, $col2) = split(/¥s/, $line);                        $old_col1 = $col1;
$count1 = 0;                                             }
$count2 = 1;                                          } else {
$old_col1 = $col1;                                       $count2++;
$old_col2 = $col2;                                    }
while ($line = <STDIN>) {                           }
  ($col1, $col2) = split(/¥s/, $line);              print "小計:$count2¥t$old_col1 $old_col2¥n";
  if ($col1 ne $old_col1 || $col2 ne $old_col2) {   $count1 += $count2;
                                                    print "大計:$count1¥t$old_col1¥n";
演習問題のプログラムの働き
入力データ         出力データ
aa            小計:2 a a
aa            小計:2 a b
ab            大計:4 a
ab            小計:3 b b
bb            大計:3 b
bb
bb
ヒント

入力データのジャクソン構造は下記の通り。
         テキスト
         ファイル


                *
          カラム1
        同一行グループ


                *
         カラム1,2
        同一行グループ


                *
         カラム1,2
           同一行
ここで休憩です
演習問題解答例
#!/usr/bin/perl                                          print "小計:$count2¥t$col1 $col2¥n";
                                                         $count1 += $count2;
if ($line = <STDIN>) {                                  }
   ($next_col1, $next_col2) = split(/¥s/, $line);       print "大計:$count1¥t$col1¥n";
}
                                                    }
while ($line) {
   $col1 = $next_col1;
   $count1 = 0;
   while ($line && $col1 eq $next_col1) {
      $col2 = $next_col2;
      $count2 = 0;
      while ($line && $col1 eq $next_col1
                && $col2 eq $next_col2) {
        $count2++;
        if ($line = <STDIN>) {
           ($next_col1, $next_col2)
              = split(/¥s/, $line)
        }
      }
先読み技法ライブプログラミング

Excel互換のCSVパーサーを記述する
入力データ                  出力データ
a,b,c                  abc
1,2,3                  123
"""","""""",""""""""   " "" """
"""a""","""b","c"""    "a" "b c"
"あ                     あ¥nい¥n う え
い                      ___
",う,え
,,
~
CSVパーサーの拡張状態遷移図

               他/バッファ          ダブルクォート/エラー



                                                   NG
     他/バッファ     S1            他/バッファ


 改行|カンマ         改行|カンマ
/出力             /出力
                                       ダブルクォート
                他/バッファ
                                S3     /何もしない
      S0
           ダブルクォート         ダブルクォート/何もしない
           /何もしない

                                                    他/エラー
                     S2                    S4

                            ダブルクォート/バッファ
                                                        OK

                                                 EOF
                          改行|カンマ/出力              /何もしない
CSVファイルのジャクソン構造図

                                      CSV
                                     ファイル



                                             *
                                        項目




          項目本体                                                       区切り文字




      ○          ○                      ○                            ○            ○
空項目       通常文字                  特殊文字含                          カンマ           改行
          のみ項目                    項目



                 *
-         通常文字       ダブルクォー     特殊文字含        ダブルクォー
                      テーション      項目本体         テーション




                                        *
                                 特殊文字
                                  含文字



                        ○        ○            ○            ○
                 通常文字       ダブルクォー      カンマ           改行
                             テーション
先読み技法を使ったExcel互換の
                      CSVパーサープログラム
#!/usr/bin/python                                             elif ch == '"' and nch == '"':
                                                                buffer += ch
import os, sys                                                  nch = chs.next()
                                                              elif ch == '"':
def genchs():                                                   sys.exit(1)
  for line in sys.stdin:                                      elif ch == ",":
     line = line.decode("utf_8")                                buffer += ","
     for ch in line:                                          elif ch == "¥n":
       yield ch                                                 buffer += "¥¥n"
  yield ""                                                    else:
                                                                buffer += ch
if __name__ == "__main__":
   chs = genchs()                                              ch = nch
   ch = chs.next()                                        else:
   while ch:                                                while ch and ch != "," and ch != "¥n":
     buffer = ""                                               if ch == '"':
                                                                  sys.exit(1)
    if ch == "," or ch == "¥n":                                buffer += ch
       buffer += "_"                                           ch = chs.next()
    elif ch == '"':
       ch = chs.next()                                    if ch == ",":
       while ch:                                             print buffer.encode("utf_8"),
          nch = chs.next()                                   ch = chs.next()
          if ch == '"' and (nch == "," or nch == "¥n"):   elif ch == "¥n":
             ch = nch                                        print buffer.encode("utf_8")
             break                                           ch = chs.next()
ここで休憩です
まとめ1

1.   データの解釈の仕方によりプログラミング
     は簡単になったり、難しくなったりする。
2.   ジャクソン構造図はプログラミングを簡単に
     する構造を導き出すのに役立つ。
3.   先読み技法はジャクソン法で導き出した構
     造をプログラム上で表現するのに役立つ。
ジャクソン法の長所

1. 状態をプログラム上で表現する方法
   には2種類ある
     •    プログラムの実行位置(テキスト指標)
     •    変数
2.       ジャクソン法は、前者を方法を重視する。
         このため、可読性の高いプログラムを導き
         やすい。
ジャクソン法の短所について

1.   ジャクソン法は前者の方法を重視している
     ため、プログラムから柔軟性は失われる。
2.   実行時に動きを変更するなどの柔軟性を
     プログラムに持たせたい場合は、ほかの方
     法を採用する必要がある。
テーブル駆動方式の紹介

実行時にプログラムの動きを変更できる柔軟性
の高いプログラムを作成できる技法。
但し、可読性は最低。
プログラムの自動生成に向いている。
例1:整数判定の状態遷移図

                0~9


                             0~9

                       0~9         EOS
          +|-




開始
     S0         S1           S2          OK




                             その他
                      その他

                その他
                                         NG
先の例を状態遷移表に変換

     その他    符号         数字     終端
           (+ or -)   (0~9)   (EOS)

S0   NG      S1        S2      NG
S1   NG      NG        S2      NG
S2   NG      NG        S2      OK
状態遷移表からプログラムを作成
#!/usr/bin/perl

@c = split //, shift;
@state_table = (
[-2, 1, 2, -2],
[-2, -2, 2, -2],
[-2, -2, 2, -1]
);
@char_num{('+', '-', '0'..'9', '')} = ((1)x2, (2)x10, 3);

$s = 0;
while ($s >= 0) {
  $s = $state_table[$s][$char_num{shift @c} || 0];
}
exit($s == -2);
例2:浮動小数点数判定の状態遷移図

                 0~9                    E|e                     0~9
                             0~9        0~9                                 0~9

           +|-                     ・           E|e        +|-
                       0~9                                            0~9

開始
      S0         S1          S2          S4          S5         S6          S7


                                                                            EOS
                  ・                            EOS
            ・                          0~9
                             S3                EOS              OK



                                             その他



                                         NG
先の例を状態遷移表に変換

     その他    符号         数字     小数点    指数記号        終端
           (+ or -)   (0~9)    (.)    (E or e)   (EOS)
S0   NG      S1        S2      S3       NG        NG

S1   NG      NG        S2      S3       NG        NG

S2   NG      NG        S2      S4       S5        OK

S3   NG      NG        S4      NG       NG        NG

S4   NG      NG        S4      NG       S5        OK

S5   NG      S6        S7      NG       NG        NG

S6   NG      NG        S7      NG       NG        NG

S7   NG      NG        S7      NG       NG        OK
状態遷移表からプログラムを作成
#!/usr/bin/perl

@c = split //, shift;
@state_table = (
[-2, 1, 2, 3, -2, -2],
[-2, -2, 2, 3, -2, -2],
[-2, -2, 2, 4, 5, -1],
[-2, -2, 4, -2, -2, -2],
[-2, -2, 4, -2, 5, -1],
[-2, 6, 7, -2, -2, -2],
[-2, -2, 7, -2, -2, -2],
[-2, -2, 7, -2, -2, -1]
);
@char_num{('+', '-', '0'..'9', '.', 'E', 'e', '')} = ((1)x2, (2)x10, 3, (4)x2, 5);

$s = 0;
while ($s >= 0) {
  $s = $state_table[$s][$char_num{shift @c} || 0];
}
exit($s == -2);
まとめ2

1.   状態遷移図はジャクソン構造図と違い、
     コーディングスタイルまで規定しない。
2.   状態遷移図はその分応用範囲が広いと
     言える。
参考文献

• M.A.ジャクソン(1985/02) 『構造的プログラム設計の原理』 (日本コン
  ピュータ協会)
• 若林糧(2000/03) 『C言語プログラミング演習』 (日経BP社)
• 飯泉 純子、大槻 繁(2011/08) 『ずっと受けたかったソフトウェア設計の授
  業』 (翔泳社)
• E.W.ダイクストラ、C.A.R.ホーア、O.J.ダール(1975/05) 『構造化プログラミン
  グ』 (サイエンス社)
• 野口健一郎(1990/05) 『ソフトウェアの論理的設計法』 (共立出版)
• 玉井哲雄(2004/03) 『ソフトウェア工学の基礎』 (岩波書店)
• スティーブ マコネル(2005/03) 『Code Complete第2版〈上〉』 (日経BPソフト
  プレス)
• きだあきら(1995/05) 「特集 Cプログラム設計技法」 『C MAGAZIN 1993
  MAY Vol.5 No.5』 (ソフトバンク )
ご清聴ありがとうございました




  次回で最終回です。
言語はシェルを使用します。

Weitere ähnliche Inhalte

Was ist angesagt?

はじパタ6章前半
はじパタ6章前半はじパタ6章前半
はじパタ6章前半
T T
 

Was ist angesagt? (20)

ピンホールカメラモデル
ピンホールカメラモデルピンホールカメラモデル
ピンホールカメラモデル
 
xtsパッケージで時系列解析
xtsパッケージで時系列解析xtsパッケージで時系列解析
xtsパッケージで時系列解析
 
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -
 
主成分分析(Pca)
主成分分析(Pca)主成分分析(Pca)
主成分分析(Pca)
 
ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定
 
スペクトラル・クラスタリング
スペクトラル・クラスタリングスペクトラル・クラスタリング
スペクトラル・クラスタリング
 
Popcntによるハミング距離計算
Popcntによるハミング距離計算Popcntによるハミング距離計算
Popcntによるハミング距離計算
 
圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド
 
マルチコアを用いた画像処理
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理
 
2章グラフ理論スピード入門
2章グラフ理論スピード入門2章グラフ理論スピード入門
2章グラフ理論スピード入門
 
数式をnumpyに落としこむコツ
数式をnumpyに落としこむコツ数式をnumpyに落としこむコツ
数式をnumpyに落としこむコツ
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
ホモトピー型理論入門
ホモトピー型理論入門ホモトピー型理論入門
ホモトピー型理論入門
 
ベイズ統計学の概論的紹介
ベイズ統計学の概論的紹介ベイズ統計学の概論的紹介
ベイズ統計学の概論的紹介
 
単純ベイズ法による異常検知 #ml-professional
単純ベイズ法による異常検知  #ml-professional単純ベイズ法による異常検知  #ml-professional
単純ベイズ法による異常検知 #ml-professional
 
Palindromic tree
Palindromic treePalindromic tree
Palindromic tree
 
はじパタ6章前半
はじパタ6章前半はじパタ6章前半
はじパタ6章前半
 
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタつくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
 
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
 

Andere mochten auch

Andere mochten auch (20)

Bashのヒストリ展開を活用する
Bashのヒストリ展開を活用するBashのヒストリ展開を活用する
Bashのヒストリ展開を活用する
 
FreeBSDのブートプロセス
FreeBSDのブートプロセスFreeBSDのブートプロセス
FreeBSDのブートプロセス
 
2015.08.29 JUS共催勉強会資料
2015.08.29 JUS共催勉強会資料2015.08.29 JUS共催勉強会資料
2015.08.29 JUS共催勉強会資料
 
シェルスクリプトを極める
シェルスクリプトを極めるシェルスクリプトを極める
シェルスクリプトを極める
 
Linux女子部第二回勉強会usp友の会
Linux女子部第二回勉強会usp友の会Linux女子部第二回勉強会usp友の会
Linux女子部第二回勉強会usp友の会
 
Awk勉強会用資料
Awk勉強会用資料Awk勉強会用資料
Awk勉強会用資料
 
Tips for bash script
Tips for bash scriptTips for bash script
Tips for bash script
 
正規表現
正規表現正規表現
正規表現
 
awk入門
awk入門awk入門
awk入門
 
確率ロボティクス第九回
確率ロボティクス第九回確率ロボティクス第九回
確率ロボティクス第九回
 
ALSS14: Xen Project Automotive Hypervisor (Demo)
ALSS14: Xen Project Automotive Hypervisor (Demo)ALSS14: Xen Project Automotive Hypervisor (Demo)
ALSS14: Xen Project Automotive Hypervisor (Demo)
 
オープンソースとロボット
オープンソースとロボットオープンソースとロボット
オープンソースとロボット
 
Xen Project: Windows PV Drivers
Xen Project: Windows PV DriversXen Project: Windows PV Drivers
Xen Project: Windows PV Drivers
 
電子工作で光で動くロボットをつくろう!
電子工作で光で動くロボットをつくろう!電子工作で光で動くロボットをつくろう!
電子工作で光で動くロボットをつくろう!
 
XPDS16: Xen Scalability Analysis - Weidong Han, Zhichao Huang & Wei Yang, Huawei
XPDS16: Xen Scalability Analysis - Weidong Han, Zhichao Huang & Wei Yang, HuaweiXPDS16: Xen Scalability Analysis - Weidong Han, Zhichao Huang & Wei Yang, Huawei
XPDS16: Xen Scalability Analysis - Weidong Han, Zhichao Huang & Wei Yang, Huawei
 
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」
 
Lessons Learned from Xen (Texas Linux Fest 2013)
Lessons Learned from Xen (Texas Linux Fest 2013)Lessons Learned from Xen (Texas Linux Fest 2013)
Lessons Learned from Xen (Texas Linux Fest 2013)
 
Fosdem17 - Mixed License FOSS Projects
Fosdem17 - Mixed License FOSS ProjectsFosdem17 - Mixed License FOSS Projects
Fosdem17 - Mixed License FOSS Projects
 
Fosdem 17 - Towards a HVM-like Dom0 for Xen
Fosdem 17 - Towards a HVM-like Dom0 for XenFosdem 17 - Towards a HVM-like Dom0 for Xen
Fosdem 17 - Towards a HVM-like Dom0 for Xen
 
XPDS16: Patch review for non-maintainers - George Dunlap, Citrix Systems R&D...
 XPDS16: Patch review for non-maintainers - George Dunlap, Citrix Systems R&D... XPDS16: Patch review for non-maintainers - George Dunlap, Citrix Systems R&D...
XPDS16: Patch review for non-maintainers - George Dunlap, Citrix Systems R&D...
 

Ähnlich wie Usp友の会勉強会、ジャクソン構造図の巻(後編)

Shape morphing (swfstudy)
Shape morphing (swfstudy)Shape morphing (swfstudy)
Shape morphing (swfstudy)
Fumiya Chiba
 
形式手法とalloyの紹介
形式手法とalloyの紹介形式手法とalloyの紹介
形式手法とalloyの紹介
Daisuke Tanaka
 
2011年11月11日
2011年11月11日2011年11月11日
2011年11月11日
nukaemon
 
ダブル配列の実装方法
ダブル配列の実装方法ダブル配列の実装方法
ダブル配列の実装方法
Higashiyama Masahiko
 
RでGISハンズオンセッション
RでGISハンズオンセッションRでGISハンズオンセッション
RでGISハンズオンセッション
arctic_tern265
 

Ähnlich wie Usp友の会勉強会、ジャクソン構造図の巻(後編) (20)

X hago2 shortcoding 20110827
X hago2 shortcoding 20110827X hago2 shortcoding 20110827
X hago2 shortcoding 20110827
 
Rの初歩: 6. グラフィックス
Rの初歩:  6. グラフィックスRの初歩:  6. グラフィックス
Rの初歩: 6. グラフィックス
 
CODE FESTIVAL 2014 エキシビジョン 解説
CODE FESTIVAL 2014 エキシビジョン 解説CODE FESTIVAL 2014 エキシビジョン 解説
CODE FESTIVAL 2014 エキシビジョン 解説
 
Sized Linear Algebra Package のチュートリアル
Sized Linear Algebra Package のチュートリアルSized Linear Algebra Package のチュートリアル
Sized Linear Algebra Package のチュートリアル
 
Java数値(浮動小数点)課題勉強会
Java数値(浮動小数点)課題勉強会Java数値(浮動小数点)課題勉強会
Java数値(浮動小数点)課題勉強会
 
Lispでやる記号微分
Lispでやる記号微分Lispでやる記号微分
Lispでやる記号微分
 
Shape morphing (swfstudy)
Shape morphing (swfstudy)Shape morphing (swfstudy)
Shape morphing (swfstudy)
 
アルゴリズムとデータ構造15
アルゴリズムとデータ構造15アルゴリズムとデータ構造15
アルゴリズムとデータ構造15
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
動的計画法を極める!
 
形式手法とalloyの紹介
形式手法とalloyの紹介形式手法とalloyの紹介
形式手法とalloyの紹介
 
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
【Unity道場スペシャル 2017博多】クォータニオン完全マスター【Unity道場スペシャル 2017博多】クォータニオン完全マスター
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
CG2013 06
CG2013 06CG2013 06
CG2013 06
 
Ruby紹介3(pdf)
Ruby紹介3(pdf)Ruby紹介3(pdf)
Ruby紹介3(pdf)
 
さくっと線形代数
さくっと線形代数さくっと線形代数
さくっと線形代数
 
2011年11月11日
2011年11月11日2011年11月11日
2011年11月11日
 
kagami_comput2016_08
kagami_comput2016_08kagami_comput2016_08
kagami_comput2016_08
 
ダブル配列の実装方法
ダブル配列の実装方法ダブル配列の実装方法
ダブル配列の実装方法
 
RでGISハンズオンセッション
RでGISハンズオンセッションRでGISハンズオンセッション
RでGISハンズオンセッション
 
第1回R勉強会@東京
第1回R勉強会@東京第1回R勉強会@東京
第1回R勉強会@東京
 

Kürzlich hochgeladen

Kürzlich hochgeladen (7)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

Usp友の会勉強会、ジャクソン構造図の巻(後編)