memo/20251219
created 2025-12-19 modified 2025-12-19
私が好きなOOP風の考え方
ソフトウェア仕事の中で、こういうのをクラス単位として抽出する。
オフィスでの人の例。
ただし、悪い人が不正を働くのを防ぐ、意味で、時計を合わせることができる人や、針を変える方法を限定するのは、意味があります。
たとえば、国会の会期が終了するのをごまかして、徹夜で議論を続けるために時計を変えちゃうとか、そいういう不正(笑)がありえます。それを防ぐために、この時計は手を使って針が任意の時刻を指すよう合わせることはできず、この時計の周辺に特定の電波を発生させないと、針を換えられません、とする事には、セキュリティ上の意味は、あります。
まぁだから温度センサーのチップうんぬんの話も、要は、知恵を絞ってなにかの問題を解決したい問題領域(問題ドメイン)の知見に基づいて、その役に立つよう賢く「ソフトウェア部分」を作って、それら部分を組み上げて全体を作る、という、当たり前の話です。
で、こういうのを、オブジェクト指向と、呼ぶのか、何なのか。
広い意味では、オブジェクト指向と言えなくもないんですが、もう1970年代に端を発する「要件定義の文書から名詞をオブジェクトとして抽出する」タイプのオブジェクト指向と、違うんです。
ドメイン主義って言うんですかね?しらんけど。問題領域の知識を高めてソフト設計に活かす、です。
と私は思っています。
追記:
もし国会の時計が上記になったら、「故障中」って紙貼って隠し、手で時刻を書いて時計代わりにします、って議長か誰かが宣言するのでしょう。ね。
人間の世界にはセキュリティーホールがいっぱいだ(笑)。
【* 日々のメモ】
ソフトウェア仕事の中で、こういうのをクラス単位として抽出する。
- ある会社が、ある会社との折衝を一元化するために、ただ一人の専任「営業担当者」を設ける、
- ように、ある組込みソフトの中で、ある制御チップ(例:温度センサー、モーター制御IC、…)と、送受信をするただ一つの専任「担当クラス」を設ける。
- 悪い例「温度センサーで何度以上を検出したら、モーター制御ICに停止を送信する」という操作を、ひと続きの処理で、書く、のは悪い例。
- 良い例「温度センサーからの入力はそこで一人。何が起きたら何をするか決める人で一人。モーター制御ICに何かを送信する人で一人」、は良い例。
- そうすると、新製品では温度センサーを別のチップに変える、としたいときに、その温度センサーのクラスを替えれば良い。
- ある工場が、ある職人に役割を与える。と、その人が自分はなになにの責任を担うんだと意識することで、日常生活でもそのことを深く考え続け、特定作業の職人に育つ。
オフィスでの人の例。
- 良い例:夏のオフィスのエアコン温度は、ひとにより希望温度が全然違う。その場合、エアコン温度スイッチを操作する専任者を立てると、あらゆる人がこの専任者に依頼をするので、ここに狭い範囲(ドメイン)のプロ知識が集約する。ソフトウェアでも、こういうのを機能のまとまりとする。
- 例えばの話... あるオフィスでは、12時から13時は昼休みなので、節電しろー、と経営者が言う。電灯も消す。でも、13時過ぎに、外回りをしていた営業担当者が、暑い暑いと言いながら帰ってくる。ここで温度を2度、3度、5度下げても、涼しくならず、15時くらいに寒くなってみんなひざ掛け必須。自律神経失調。偏頭痛。こういうの良くない。
- なので、エアコン大臣になった山田さんは、「11:30になったら温度設定を2度下げ、12時になったら戻す」というハック(巧妙な手順)を、思いつく。すると、経営者も、営業担当者も、なんとなく幸せに、…なるかもしれない。11:30ではうまくいかないようなら、その時刻を11:20、11:10、としてみる。試行と結果観察を繰り返して、手順を最適化する。昨今のAIみたいだ(笑
- 悪い例:オフィスの壁掛け時計は、全員が正しい時刻に設定したい。なので、この時計を合わせるための、セッターやゲッターを設ける意味が薄い。必要のないオーバー抽象化は悪。
ただし、悪い人が不正を働くのを防ぐ、意味で、時計を合わせることができる人や、針を変える方法を限定するのは、意味があります。
たとえば、国会の会期が終了するのをごまかして、徹夜で議論を続けるために時計を変えちゃうとか、そいういう不正(笑)がありえます。それを防ぐために、この時計は手を使って針が任意の時刻を指すよう合わせることはできず、この時計の周辺に特定の電波を発生させないと、針を換えられません、とする事には、セキュリティ上の意味は、あります。
まぁだから温度センサーのチップうんぬんの話も、要は、知恵を絞ってなにかの問題を解決したい問題領域(問題ドメイン)の知見に基づいて、その役に立つよう賢く「ソフトウェア部分」を作って、それら部分を組み上げて全体を作る、という、当たり前の話です。
で、こういうのを、オブジェクト指向と、呼ぶのか、何なのか。
広い意味では、オブジェクト指向と言えなくもないんですが、もう1970年代に端を発する「要件定義の文書から名詞をオブジェクトとして抽出する」タイプのオブジェクト指向と、違うんです。
ドメイン主義って言うんですかね?しらんけど。問題領域の知識を高めてソフト設計に活かす、です。
と私は思っています。
追記:
もし国会の時計が上記になったら、「故障中」って紙貼って隠し、手で時刻を書いて時計代わりにします、って議長か誰かが宣言するのでしょう。ね。
人間の世界にはセキュリティーホールがいっぱいだ(笑)。
【* 日々のメモ】