R.Tanaka.Ichiro's Blog

主にC# な話題です

目次

Blog 利用状況

ニュース

ほげほげ指向

毎度のことながらえムナウさんと酒席で話をしていた中で、飲み放題の制限時間によって中断されてしまった内容についてを酔っていない今まとめておこうと思いました。

あくまでも僕の考えです。

xx指向って結局は

どうやって分類するの?

って話だと思っていて、どうやって分類すべきなのか?については、恐らくは「生産性・可変性・安定性」の全ての水準を高めることに主眼をおくべきだと考えています。

例えば、構造化プログラミングは手続きを階層によって分類しています。
オブジェクト指向ではデータと手続きの単位をオブジェクトとして分類していると同時に、オブジェクト内外で手続きの階層化を行っています。これは、ある意味オブジェクト単位の分類と処理単位による分類という2つの分類方法を実現していると考えて良いと思います。

一方で、データソースという単位で分類されていないため、例えばデータテーブルにたった一つのフィールドを追加しただけで、これに関連するオブジェクトを全て拾い出して正確に変更していくための煩雑さが生じます。

アスペクト指向やサブジェクト指向について僕は詳しくはありませんが、現存する分類方法を増強したり新しい視点から分類しようとした試みであろうという想像は、恐らく大きく的を外していないでしょう。

多面的な分類方法の理想的な形としては、データベースマネジメントシステムによって特定の条件に一致するレコードを選別し、そこに含まれる必要なフィールドのデータのみを眼前に並べて修正を加えるというデータオペレーターの作業に酷似してくると考えます。

コードブロックの粒度を密にしてセルデータとして位置づけ、名前空間やクラスというプライマリーなインデックスで設計や開発を行うと同時に複数のインデックスと関連付けることによって多面的な分類は可能になるでしょう。

C# ではパーシャルクラスでの記述が可能になったことによって、名前空間だけでなくクラスを複数のファイルに分類できるようになりました。また、拡張メソッドによって必要な手続きだけを名前空間単位で既存のクラスに付け加えることができるようになっています。

これらも複数存在するインデックスのひとつではないかと思っています。

そんな感じ?

投稿日時 : 2008年6月16日 11:20

Feedback

# re: ほげほげ指向 2008/06/16 14:09 NAL-6295

構造化プログラミングとかオブジェクト指向だけだと、一つの方向にしか分類できなかったのが、オブジェクト指向+(アスペクトやサブジェクト)でまた違った方向にも分類ができるようになった。X軸とY軸みたいな。
やっと2次元になった。
と思いました。

真空(構造化プログラミングとかオブジェクト指向)だった世界に空気(アスペクトやサブジェクト)が生まれて風がふいた感じですかね。

# re: ほげほげ指向 2008/06/16 19:09 biac

「構造化プログラミング」 とは Structured programming の訳語でして、 直訳すれば 「構造化されたプログラミング」 であります。
「構造化されたプログラミング」 とは、 「プログラムを作り出す作業 (programming)」 が構造化されるわけではありません。 「構造化されたプログラム」 を作り出す作業、 その方法論です。
ただし、 まずは 「構造化されたプログラム」 という概念が先です。 で、 そういうものを、 実際にどうやったら上手く作れるだろうか、 っていうルール ( 「言語には関数呼び出しが必須だよね」、「goto 禁止だよね」、 とか ) は後です。 ルールだけ教条的に覚えると、 エラー処理に goto で飛ばすのもダメ、 なんて馬鹿な話になったりします。

「構造化プログラミング」 という言葉は、 「構造化」 と省略されることは滅多にないので、 まだマシでして。

「Object Oriented Programing」 ( オブジェクト志向のプログラムを作ること ) に至っては、 「オブジェクト指向」 と略されてしまってます。 oriented という形容詞が、 なぜか名詞に化けちゃってます。 まるで、 「オブジェクト指向」 っていうものがあるみたいです。
しかし、 これも同じでして、 「オブジェクト志向のプログラム」 ( あるいは、 「オブジェクト志向の hogehoge」 )とは何ぞや、 どんなものであろうか、 という抽象的な話が先にあって、 それじゃそれをどうやって作ろうか、 という具体的な話に続くべきなんです。
それを、 いきなり、 クラスだインスタンスだポリモーフィズムだのといった、 道具の話から始められたって、 分かるはずもない。
ゴールが見えない、 ゴールのある方向も分からないのに、 道具の使い方だけを教えられて、 さぁ行け! …って、 そりゃ殺生ってもんです。

…ごめん、 愚痴になっちゃった f(^^;
というわけで結論。 επι さんの書いたコード ( ゴールの具現のひとつ ) を読みませう f(^^;;;

# re: ほげほげ指向 2008/06/16 19:24 シャノン

> 「オブジェクト志向のプログラム」とは何ぞや、 どんなものであろうか、 という抽象的な話が先にあって、 それじゃそれをどうやって作ろうか、 という具体的な話に続くべきなんです。
> それを、 いきなり、 クラスだインスタンスだポリモーフィズムだのといった、 道具の話から始められたって、 分かるはずもない。

しかしながら、じゃあ「オブジェクト指向とは何ぞや?」という話をし始めたときに、「まず3要件があって…」と道具の話になりがち。
「C++流とSmalltalk流があって…」も道具の話と言える。
じゃあ、クラスもインスタンスもポリもーフィズムも言語も出てこない「オブジェクト指向」の話をしてくれい、というわけで。
俺ぁやんないよ。

# re: ほげほげ指向 2008/06/17 4:05 R・田中一郎

NAL-6295 さん

>やっと2次元になった。

僕のエントリーでは、オブジェクト指向プログラミングは、手続きを記述する際にメソッドアウトできる点から2つの分類としましたが、これは本来同じレベルで語るべきでは無いのかも知れません。

少なくともコードブロックを記述するのはオブジェクト単位になる訳ですからね。

>真空(構造化プログラミングとかオブジェクト指向)だった世界に空気(アスペクトやサブジェクト)が生まれて風がふいた感じですかね。

恐らくは、この風が広く受け入れられていくことになるのでしょう。
僕も少しずつ勉強して行こうと思います。

-----------------------------
biac さん

同意ですね。

今回のエントリーでも書いた通り、基本的に開発を行うための有意義な分類方法として、その本質を捉えることが大切であると考えています。
恐らくは、最初から道具として捉えて、概念や流儀を覚えなければいけない難解さよりも、より効率よく理解できる筈だと思うからです。

オブジェクト指向プログラミングでは、オブジェクト単位で物事を捉えることができるというシンプルな考え方によってプログラミングができると思われがちです。
しかし、現存するものをオブジェクトモデル化するためには、それなりの経験とスキルが必要です。

これは、オブジェクト指向プログラミングにおける潜在的な問題であると思います。

一方で、この問題を乗り越えるべく経験とスキルを習得する過程に、カプセル化や継承やポリモーフィズムを学ぶ必要があり、これらを経て最終的にクラスの設計を体で覚えていくという必要があるのでしょうね。

-----------------------------
シャノン さん

>しかしながら、じゃあ「オブジェクト指向とは何ぞや?」という話をし始めたとき

シャノンさんがオブ熱で語ったことは、まさにこれですよね。

僕は、現存する何かに置き換えるよりは、オブジェクトは単なる装置と考える方が自然であると思っています。
この辺の詳細は、いつかオブ熱でやりたいのですが、うまくまとまるのか自信がありません。

# 手続き指向 と オブジェクト指向 2008/06/19 23:56 biac の それさえもおそらくは幸せな日々@nifty

Rくんの blog にコメント付けてから、 つらつら考えた。# R氏、 Rさん と書くべきなんだけど。 ゆうきまさみファンとしては、 「Rくん」 以外は書きにくい f(^^; 構造化されたプログラム ( structured program --- 通常、 構造化プログラム と訳される ) って、 手続きを志向したプロ

タイトル
名前
Url
コメント