ファイル
私は、いわゆるファイル(UNIXとかの)というのは、オブジェクト指向プログラミングにそぐわないのではないか、と思った事がありました。というより、永続化という概念を必要とする事自体がオブジェクト指向プログラミングと衝突するような気がしたのです。--CUE
永続化は痛いですね。永続するためにオブジェクトの「コピー」をとった瞬間に、オブジェクトの最大(?)の特色である「同一性」を脅かすのは事実。
実際、永続オブジェクトとかオブジェクトデータベースとかってのは、そういう問題を常に抱えている。
逆もいえます。ファイル(?)の中の永続データからメモリにコピーしたときも、同一性が…(T_T)
>いわゆるファイル(UNIXとかの)というのは、オブジェクト指向プログラミングにそぐわない
ちょっと違いますがクラスとファイルがらみの話題で、青木淳さんの投稿をきっかけに SML が盛り上がっていましたね。--sumim
http://www.sra.co.jp/smalltalk/SML/archives/2003-April/006164.html
http://www.sra.co.jp/smalltalk/SML/archives/2003-April/thread.html#6164
ファイルをオブジェクトとして表す時、ストリームをファイルから継承するというのは、実は設計としてまずいのではないか、という事を最近思い始めました。むしろ、Oberonなどがしているように、ライダーという概念を考える方がエレガントで自然なのではないかという気がします。--CUE
>ストリームをファイルから継承する(中略)設計としてまずい
ええ。駄目っすね。
例えばJavaでもFileクラスと(File)Streamクラスは別物です。あんな感じが良いかな。
Fileクラスは、ファイル名とかのメタ情報の保持者という感じ。
ん?その話じゃない?#というか、継承ってどの継承っすか?
ライダーはたしか、Streamに対する一種のイテレータでしたよね。
Streamがテープなら、ライダーやイテレータはテープのヘッドって感じか。
#そしてFileクラスはカセットケース(笑)
Streamという言葉をどう捉えるか、じゃないかな。
「流すもの」なのか「流されるもの」なのか、という。#英語的にはどっちがOKだっけ?
後者だと捉えると、Streamと呼ばれるものは実はライダーであることになる。
前者だと捉えると、Streamは雨樋(笑)であることになる。
>ライダーはたしか、Streamに対する一種のイテレータでしたよね。
ライダーがイテレーターか、というのは議論の余地があると思いますが、例えば、Oberonでは、Riderだけでは読み書きすらできません。読み書きするためにはReaderやWriterを必要とします。面白いのは、Reader/Writerは、FileではなくRiderにリンクさせて使用します。一方で、RiderはFileとリンクしているわけです。←とか書いたけど、違ったかも(ぉぃ)←違ってました:Texts.Reader/Texts.Writerと勘違いしてました。Files.Fileだけでは読み書きできず(できないわけではないけど、普通はしない)、Files.Riderを別に用意して置かなければならない、というだけ。RiderとFileは別にリンクしてるわけではなかった。
ちなみに、FilesとかTextsとか言うのは、Oberonのモジュール名です。--CUE
まず、ファイルをObjectとして表す(つまりIO Object)話と、Objectをファイルの中に表す(つまり永続化)話って、別問題ですよね。 -戯
このページを編集 (2834 bytes)
|
以下の 1 ページから参照されています。 |
- 永続化 最終更新: 2003-10-24, 14:06:17 <tibook>
This page has been visited 5266 times.