クラスの二つの顔

マリオカートWii (「Wiiハンドル」×1同梱)

マリオカートWii (「Wiiハンドル」×1同梱)

マリオカートWii が楽しすぎて日記どころじゃない生活になってますがたまにはエントリをw
wifi対戦のできがよすぎです。神ゲーです。いい年して指が痛くなるまで遊んでますw 世界トップの走りを見ることができるのもまたいい!超おすすめ。ハンドルは初心者用に見えて実は難しい罠に注意(^^;

本題。
クラスには2種類あります。値を表すクラスと、ライブラリ的なクラス。

「値を表すクラス」という言葉は「Equals() と演算子 == のオーバーロードに関するガイドライン」で知った言葉です。同値関係や順序関係を持つクラスは値を表すクラスでしか意味がないでしょう。

もう一方はWebClientみたいなライブラリのようなクラス。値も持ってたりしますが、値を表すというよりはライブラリの設定値を保持してるといったところです。

名著と云われる オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング) を見てみると、これらを「型としてのクラス」と「モジュールとしてのクラス」と分類してました。オブジェクト指向のクラスという仕組みがこれらを併合したと。総称性は「型のパターン」である、ともあります。んー、これはマリオカート脳にもビキビキと刺激が来る言葉です。同値関係や順序関係は C# ではジェネリクスで表現されてますね。これが型のパターンであると。ふむ!閑話休題

一つに併合してしまったので、値を表しつつもそれを操作するライブラリも含めて一つのクラスにできたり、ライブラリ的であっても値も持っていたり(リエントラントじゃない形でならCのライブラリでもできてたことだけど)と、両方の便利なところをクラスで表現できるってことでしょうかね。
冒頭では2種類とすっぱりわけてしまったけど、その中間になだらかにハイブリッドなクラスもありっぽいですね。GUIのコントロール部品なんかは中間タイプと言えそうですし。このあたりはもうちょっと読み進めてみます。

ずーっともやもやしてた疑問を考えたり調べたりしているうちに、型とクラスの違いが一つわかった感じです。