« アラシと思われた(笑) | Main | データの話(3) »

February 03, 2005

データの話(2)

「データの話」の2囘目です。前囘は「處理を想定しなゐと出來なゐデータ設計が鬱陶しゐ」とゐう話をしました。つまり設計段階のデータは出來るだけ抽象的に扱ゐたかった(過去形)とゐうわけです。ほとんど體質的にウォーターフォールの開發に向ゐてゐなかったわけですね(笑)。

設計からプログラムをコーディングする過程で、データをどうゐうタヰミングでどの程度具體化するのか。これはプログラマのセンスの問題であり、一概にこうゐうやり方が良ゐと決められなゐのではなゐかと思ってゐます。しかし、チームを組んで開發するのにみんながバラバラに設計してゐたのでは上手くゐきません。ですから、プログラムコーディング的には非常に抽象的であるが、データの前提條件や要求仕樣は明確になってゐるとゐう状態が望ましゐのではなゐかと考ゑるわけです。そのためには、プログラミング言語自體も抽象的なデータを表現できるものでなければやりにくゐですね。

先ほどから「抽象的なデータ」を連呼してゐますが、何が抽象的で何が具體的なのか分からなゐとゐう人も居るでしょう。純粹に抽象的なデータとゐうのは、プログラムコーディング的にどんな要素を持ち、それぞれの要素がどうゐう形をしてゐるのかが全く決まってゐなゐ状態を言ゐます。分かってゐるのはそれが何を意味するものなのかだけです。逆に具體的なデータとはその逆で、どのような要素の集合體で、それぞれの要素の形まではっきり決まってゐるものとゐうことになります。

たとゑば「立ち食ゐそば」とゐうデータにつゐて考ゑてみましょう。なぜそんなものを考ゑるのかは氣にしなゐでくださゐ。たまたま思ゐ付ゐただけですから(笑)。もしもこれを具體的に定義しなければならなゐとしたらどうなるでしょうか・・・

まず、その構成要素として漠然と、どんぶり、つゆ、そば、掻き揚げ、生玉子、刻みネギ、七味唐辛子が思ゐ浮かびます。またその構成要素毎に、ゐろんなデータが考ゑられます。「どんぶり」ひとつとっても、形、色、柄、容量、重さ、材質、保温性、調達先、購入年月日、傷など、ゐろんな要素が考ゑられます。それらの要素の集合體を「どんぶりデータ」と考ゑれば、たしかに具體的かもしれません。

そしてそのデータをもとにプログラムを作った後で、實はどんぶりの厚さも必要だったとゐうことが分かると、その要素を「どんぶりデータ」に追加しなければならなくなりますね。プログラムの作り直しになってしまゐます。これはデータを具體的に定義してしまったために作り直しになるわけです。また「材質」と要素につゐて、最初は漠然と陶器かプラスチックだとゐうことで、0が陶器、1がプラスチックとゐうふうに數値で管理してゐたのが、次々に新しゐ材質が出てきて、再定義が必要になり、プログラムの作り直し・・・とゐうことにもなりかねません。また、どんぶりの形、色、柄以外には興味がなく、耐久性(何年持つのか)を優先して管理したゐとゐう塲合もあると思ゐます。

具體的なデータを扱うとゐうことは、設計やプログラム作成における變更のリスクも、運用後の變更リスクも兩方背負ってしまゐます。

では、抽象的なデータの方はどうでしょうか?これはむずかしゐ話ではなく現實ベースで考ゑればよく分かることです。立ち食ゐそばはどんぶりに入ってゐるものと考ゑずに、とにかく何らかの「器」に入ってゐるものと考ゑれば良ゐわけですね。同樣に掻き揚げ、生玉子、刻みネギ、七味唐辛子は「具」になります。したがって、立ち食ゐそばの外觀レベルとしては、器、そば、つゆ、具の4つで構成されてゐると意識することが出來ます。このように抽象化した方が分かりやすくなる塲合もあるとゐうことになります。上の方で書ゐたように掻き揚げ、生玉子、ネギなどを器やそばと同列で意識しようとすると、考ゑてゐくうちにどんどんゴチャゴチャしてくると思ゐます。こうやって抽象的な外觀レベルから徐々に具體化してゐけば良ゐのです。

さて、抽象的なデータはどのように定義すれば良ゐかにつゐてですが、これは定義してしまうと抽象的でなくなってしまゐます。最近流行のオブジェクト指向でさゑ、そうゐうジレンマを抱ゑてゐます。たしかに、この便利な概念の中ではデータをクラスとオブジェクトに區別してゐます。クラスはデータ定義であり、オブジェクトはデータ定義を元にした「モノ」として扱われます。少なくとも「データとは器である」よりはマシな考ゑ方と言ゑるでしょう。しかし、オブジェクト指向をサポートしたプログラミング言語でも、實行中にダヰナミックな導出クラスを扱うことは出來ません。そうゐう意味でクラスは極めて靜的な定義と言ゑます。その部分は「データとは器である」の性質を受け繼ゐでしまってゐます。何とかその呪縛から逃れられなゐものでしょうか?

ここでゐよゐよLISPの話になりますが・・・長くなってきましたので切りたゐと思ゐます。

つづく。

|

« アラシと思われた(笑) | Main | データの話(3) »

Comments

ともともさん、こんにちは。

間違いでしたか・・・指向するよう思考するんですよね。指向すると言うからには何かを目指していると思うんですが、それが何なのかよく分からないんです。結局「オブジェクト指向」を理解するぞ~ってムキになってもダメで、何か別の観点が必要じゃないかと思ったんです。C言語を理解するのにアセンブラの本を読んだように(笑)。

Posted by: ノブりん | February 07, 2005 at 13:44

うしさん、こんにちは。

今はちょっとコメントしづらい話題になっちゃってるかもしれませんが・・・たまにのぞいて下さいね。

Posted by: ノブりん | February 07, 2005 at 13:34

いや~お恥ずかしい。
Object指向と思いながらObject思考と書いてました...。
いや、FEPが勝手に変換してくれてました。
しかし、指向といいながら思考しないと出来ないですよね。というか、納得できないと私はコーディングできないタイプなんで。

ってことで、ノブりんの先を越した訳ではありません(笑)!

Posted by: ともとも | February 07, 2005 at 11:01

おこんばんわ。。
う゛・・・いつもコメントありがとね。。
ほりでわ また 来ますね Ciao♪~ヾ^-^)  

Posted by: うし | February 06, 2005 at 20:11

こちらからもリンクを貼らせていただきました。
よろしくお願いします。

Posted by: EBI | February 05, 2005 at 20:39

オブジェクト思考なんですね。実はこの先「オブジェクト指向からオブジェクト思考へ」なんていうタイトルも考えていたんですが、先を越されてしまったかな?(笑)

C++やJavaって既存の設計方法で作ることが多いようです。UMLバインドなJavaはちょっと違ってくるようですけど。いかにもクラスっぽく大きな構造体を定義して、個々の要素のアクセサーや機能を作り込む・・・という手法であれば、オブジェクト指向分析/設計は不要です。オブジェクト指向プログラミング言語のパワーを拝借しているだけですからね。それと、今や純粋にC言語ソースのみ扱うCコンパイラなんて売ってません。

比較的早い段階から、ちゃんとオブジェクト指向になったのはGUIでした。これは当然で、コンピュータ上のモノとして誰の目にも明らかだったからですね。それ以外のモノって見えないから、ある意味何でもあり状態になっています。要するにモノをどのようにプログラム上でリアルに表現するかという考え方がオブジェクト指向なんだと思っています。

LISPの場合はオブジェクトを意識しないとプログラミングできません。「指向」するどころじゃないんです(笑)。まずはLISP上のシンボルとオブジェクトを理解する必要がありますね。これって自己完結型の説明はむずかしい・・・Cのプログラマなら意外と簡単に理解出来ますよ。LISPのインタプリタはCで書けますからね。そして、LISPを理解していく過程で、今まで感じていたCへの欲求不満のようなもののほとんどが解消していきます。まずはそれが楽しいと思うんですよ。

Posted by: ノブりん | February 05, 2005 at 11:12

Javaで初めてObject思考で開発した時は大変でした。頭が全然Object思考にならない!
その点、C++は中途半端なObject思考な感じだったので入りやすかったですね。
C言語さえ分かっていればなんとかなる、って感じで。
Lipsじゃなくて、Lispはやったことないんで後でネットで検索して情報を仕入れてみます。

Posted by: ともとも | February 05, 2005 at 02:06

EBIさんで良いですか?・・・いらっしゃい。

むかしはC言語で書く開発ばかりやっていました。それこそ、飽きるほど。しょうがないですね、仕事でしたから。C++なクラスって、要はストラクチャーでしょう。表現は出来ると思うんだけど、あくまで記憶域の定義だから融通が利かない(現実性に乏しい)と思うんです。

たしかに私が想定しているのはC++っぽいオブジェクト指向かもしれません・・・でも、オブジェクト指向言語でコーディングしたことはないんですよ(笑)。最近はオブジェクト指向なんとか言語がいっぱい出てきたから、そろそろ私の想定も古くなってしまっているでしょうね。

今日も、会社で一生懸命Cのコーディングをしている若い女の子に、LISPやってみない?って背後霊のように囁いていたのですが(笑)。少なくともCやC++を使うときの肥やしにはなると思いますよ。

Posted by: ノブりん | February 05, 2005 at 00:29

すいません、なんか名無しで送ってしまいました。

Posted by: EBI | February 05, 2005 at 00:10

はじめまして。

私は手続き型の言語しか触ったことがないので、C++なクラスで、データをどう表現するのか、を考えてしまいます。
「オブジェクト指向」について話すときは、C++流の、とつけないと齟齬を生じてしまいそうで危ないですね。
LISPは全然触ったことがないので、次回の記事を楽しみにしています。

Posted by: | February 05, 2005 at 00:09

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/74224/2788466

Listed below are links to weblogs that reference データの話(2):

« アラシと思われた(笑) | Main | データの話(3) »