科学と家事とプログラミング (python を中心に)

python 温度計測 湿度計測 DS18B20 USB9097

超構造化

超構造化(10) 構造化の先へ

パラダイム・シフト 構造化は空間化を連想させる。時間/空間という文脈で切り分けるなら、手順は時間的であり、宣言は空間的である。比喩的な表現を許してもらえば、宣言的なプログラムにおいては、(それを人が読み書きしているかぎりにおいては)時間が流れ…

超構造化(09) プログラムは手順の集まりか?

手続き vs 宣言 「プログラムは手順の集まりである」という表現は、賞味期限つきの標語の良い例だ。 初めてプログラムを書くときに、この助言が役立つ場面は確かにあると思う。 しかしその一方で、さまざまなプログラミング言語が目指すものは 「人間から見…

超構造化(08) 「制御の流れ」って何?

コントロールという単語の使われ方 時々、制御の流れという言葉を見たり使ったりするけれど、どうにもすわりが悪い。 control flow の直訳に違いないが、制御って流れるものなのか? 処理の流れの方がましかと思ったりもする。 あらためてコントロールという…

超構造化(07) 状態機械の実装モデル

状態機械の実装モデル コーディングの話からは大きく逸脱するが、ここで、最も原初的な(シンプルな)状態機械 の設計について述べておきたい。まず「状態」を以下の3つの操作/動作で定義(モデル 化)する。 enter() ある状態への入場時の初期化 leave() その…

超構造化(06) フローチャート/データフロー図/状態遷移図

動的側面を表す3つのチャート (FC / DFD / SMD) プログラムの動的側面を表現するチャートの代表として、 FC(フローチャート),DFD(データフロー図), SMD(状態機械図/状態遷移図) の三つを取り上げる。 いずれもノードとアークから構成された有向グラフとして…

超構造化(05) 条件分岐 vs 場合分け(まとめ)

場合分けとしての if/else 同型を保った if/else がコードにもたらす(かもしれない)特徴をあらためて整理する。 if/else を通過すると必ず x が更新される(if/else 内で書き換えられる) [完全性]。 値が確定したら変化しない [直交性/無時間] 直行性は、ある…

超構造化(04) 条件分岐 vs 場合分け

条件分岐と場合分け 条件分岐という言葉には、分かれ道にさしかかって、さてどちらに進もうか?と思案 するイメージがつきまとう。その場になるまで、分岐があることにさえ気づかないし、分 岐した後もどうなるか先が見えない。「やってみるまで分からない」…

超構造化(03) 処理の抽象化

処理の抽象化 if/else や for のブロック(入れ子)を指して、処理の抽象化という言葉が使われることがある。 荒っぽい理解としては、それらのブロックにより「部分/全体関係」が明確になるという理解で良いだろう。 部分/全体関係が構築されるだけで、どうし…

超構造化(02) 構造化定理、構造化の恩恵、構造化チャート

構造化定理 三種の制御構造 入口も出口も一つだけ! 構造化の恩恵 構造化チャート NSチャートと PAD チャートの出番は減った? 構造化定理 全てのアルゴリズムは順次/選択/反復の組み合わせで表現できる。これを構造化定理と呼 ぶ。処理の流れを、if/else や f…

超構造化(01) プログラミング雑感

プログラムは「計算手順の集まり」という捉え方は間違いではないけれど、それ はCPU側から見た捉え方なのだと思う。人がプログラムを読み書きする場面で は、まったく別の捉え方が許される。手順的なプログラムは、少しの工夫で宣言的なプログラムに変換…