たこ焼き屋で学ぶ
情報隠蔽
社会情報学特別講義
中央大学 飯尾 淳
2018年講義資料 Copyright © Jun Iio 2
ローカル変数とグローバル変数
●
ローカル変数
– 処理のスコープの中でしか参照できない
●
グローバル変数
– プログラムのどこからでも参照できる
●
注:スコープとは
– 処理や影響力がおよぶ範囲の一括りを示す単位
2018年講義資料 Copyright © Jun Iio 3
ローカル変数とグローバル変数の例
func1のスコープ
func2のスコープ
2018年講義資料 Copyright © Jun Iio 4
ローカル変数とグローバル変数の例
●
グローバル変数
– 変数aは,どこからでも利用できる
– 「利用できる」
●
中身を参照する
●
変数の値を書き換える
●
ローカル変数
– 変数x, yおよび引数bは,スコープの中でのみ利用
できる
2018年講義資料 Copyright © Jun Iio 5
グローバル変数のたとえ話
●
従業員が5人のタコ焼き屋で,現金出し入れ用
に,誰でも好きなときにアクセスできる金庫を
店の奥に設置
●
誰でも簡単に入出金できる
– Aさんがタコ焼き5人前の売上金として1,500円を
金庫に入れる
– Bさんが小麦粉代3,000円を金庫から出して支払う
– 従業員に今月の給料として100,000円ずつ金庫か
ら皆に支払う
…
2018年講義資料 Copyright © Jun Iio 6
グローバル変数のたとえ話
●
問題点
– どこで,いつ,誰がいくら入出金したか
– 正確に把握することが非常に難しい
●
対策
– 出納帳を置く
●
エラーの発生
– 記入する金額を間違える
– 未記入のままお金を持ち去る(不正する)
●
金額不一致が起きたときの原因究明は困難
2018年講義資料 Copyright © Jun Iio 7
問題(エラー)発生時の対応
●
グローバル変数
– あらゆるモジュールからアクセス可能
– エラーの原因となった問題がどこで発生したか追求
がたいへん困難
●
ローカル変数
– その変数に関連するエラーは「スコープ内に限られ
る」
– 原因が存在すると思われる範囲が限定されており,
追求が容易
2018年講義資料 Copyright © Jun Iio 8
たこ焼き屋で説明する情報隠蔽
●
入出金を専門に扱う「出納係」を用意し,その
人にだけ金庫を触らせる
●
手続き
– Aさんが「3人分の売り上げです」といって出納係
に1,500円を渡す
– Bさんが「小麦粉代をください」と申告して出納係
から3,000円もらう
– 「従業員の給料をください」といって出納係からそ
れぞれ100,000円もらう
●
エラーが発生したらそれは出納係の責任
2018年講義資料 Copyright © Jun Iio 9
情報隠蔽
●
「グローバル変数を使わない」
●
手続きとデータを一体化し,ブラックボックス
化する
●
金庫の例:
– もはや従業員は金庫の存在を知る必要はない
– 金の受け渡し(インタフェース)さえ知っていれば
よい
●
手続きを「構造化」し,
データは「局所化(ローカル化)」して隠蔽
2018年講義資料 Copyright © Jun Iio 10
「情報隠蔽」の効果
●
「再利用性」の向上
●
再利用とは
– プログラムを使い回すこと
●
構造化プログラミング→オブジェクト指向
– 構造化プログラミングで処理がモジュール化された
– しかし「グローバル変数」を使っていると,完全に
分離することが難しい
– オブジェクト指向で「情報隠蔽」され,モジュール
がきれいに分離,再利用性が高まった
2018年講義資料 Copyright © Jun Iio 11
(しつこく)たこ焼き屋で説明
●
出納係に関する処理とデータをモジュール化
– 「べつにたこ焼き屋じゃなくても,いんじゃね?」
→ Yes!
●
出納係モジュールの再利用
– お好み焼き屋
– うどん屋
– 定食屋,寿司屋,トンカツ屋, …
●
(おまけ)株式会社総務部

たこ焼き屋で学ぶ情報隠蔽

  • 1.
  • 2.
    2018年講義資料 Copyright ©Jun Iio 2 ローカル変数とグローバル変数 ● ローカル変数 – 処理のスコープの中でしか参照できない ● グローバル変数 – プログラムのどこからでも参照できる ● 注:スコープとは – 処理や影響力がおよぶ範囲の一括りを示す単位
  • 3.
    2018年講義資料 Copyright ©Jun Iio 3 ローカル変数とグローバル変数の例 func1のスコープ func2のスコープ
  • 4.
    2018年講義資料 Copyright ©Jun Iio 4 ローカル変数とグローバル変数の例 ● グローバル変数 – 変数aは,どこからでも利用できる – 「利用できる」 ● 中身を参照する ● 変数の値を書き換える ● ローカル変数 – 変数x, yおよび引数bは,スコープの中でのみ利用 できる
  • 5.
    2018年講義資料 Copyright ©Jun Iio 5 グローバル変数のたとえ話 ● 従業員が5人のタコ焼き屋で,現金出し入れ用 に,誰でも好きなときにアクセスできる金庫を 店の奥に設置 ● 誰でも簡単に入出金できる – Aさんがタコ焼き5人前の売上金として1,500円を 金庫に入れる – Bさんが小麦粉代3,000円を金庫から出して支払う – 従業員に今月の給料として100,000円ずつ金庫か ら皆に支払う …
  • 6.
    2018年講義資料 Copyright ©Jun Iio 6 グローバル変数のたとえ話 ● 問題点 – どこで,いつ,誰がいくら入出金したか – 正確に把握することが非常に難しい ● 対策 – 出納帳を置く ● エラーの発生 – 記入する金額を間違える – 未記入のままお金を持ち去る(不正する) ● 金額不一致が起きたときの原因究明は困難
  • 7.
    2018年講義資料 Copyright ©Jun Iio 7 問題(エラー)発生時の対応 ● グローバル変数 – あらゆるモジュールからアクセス可能 – エラーの原因となった問題がどこで発生したか追求 がたいへん困難 ● ローカル変数 – その変数に関連するエラーは「スコープ内に限られ る」 – 原因が存在すると思われる範囲が限定されており, 追求が容易
  • 8.
    2018年講義資料 Copyright ©Jun Iio 8 たこ焼き屋で説明する情報隠蔽 ● 入出金を専門に扱う「出納係」を用意し,その 人にだけ金庫を触らせる ● 手続き – Aさんが「3人分の売り上げです」といって出納係 に1,500円を渡す – Bさんが「小麦粉代をください」と申告して出納係 から3,000円もらう – 「従業員の給料をください」といって出納係からそ れぞれ100,000円もらう ● エラーが発生したらそれは出納係の責任
  • 9.
    2018年講義資料 Copyright ©Jun Iio 9 情報隠蔽 ● 「グローバル変数を使わない」 ● 手続きとデータを一体化し,ブラックボックス 化する ● 金庫の例: – もはや従業員は金庫の存在を知る必要はない – 金の受け渡し(インタフェース)さえ知っていれば よい ● 手続きを「構造化」し, データは「局所化(ローカル化)」して隠蔽
  • 10.
    2018年講義資料 Copyright ©Jun Iio 10 「情報隠蔽」の効果 ● 「再利用性」の向上 ● 再利用とは – プログラムを使い回すこと ● 構造化プログラミング→オブジェクト指向 – 構造化プログラミングで処理がモジュール化された – しかし「グローバル変数」を使っていると,完全に 分離することが難しい – オブジェクト指向で「情報隠蔽」され,モジュール がきれいに分離,再利用性が高まった
  • 11.
    2018年講義資料 Copyright ©Jun Iio 11 (しつこく)たこ焼き屋で説明 ● 出納係に関する処理とデータをモジュール化 – 「べつにたこ焼き屋じゃなくても,いんじゃね?」 → Yes! ● 出納係モジュールの再利用 – お好み焼き屋 – うどん屋 – 定食屋,寿司屋,トンカツ屋, … ● (おまけ)株式会社総務部