[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[b-free: 1331] 多重継承 (Re: b-free:1205についてのコメント (1/2))
隆一です。
From: Hideaki Suzuki <h1suzuki@bridgew.edu>
Subject: [b-free: 1319] Re: b-free:1205についてのコメント (1/2)(Re: オブジェクト指向のOSへの適用)
Date: Fri, 10 Apr 1998 19:10:27 -0400
> References: <35232BE4.692CEC89@bridgew.edu> <19980402182808A.night@soft.hitachi.co.jp>
> Content-Type: text/plain; charset=iso-2022-jp
> Content-Transfer-Encoding: 7bit
>
> # ふたつめ。
>
>
>
...[snip]...
> 何を持って、再利用と言ったら良いんでしょうか、、、。
> たとえば、window を抽象しましょうか。で、この class を継承すると window
> が生成できるとしましょう。そういう事ですか?
いえ、そういう言語プロパーな話ではなく、単に一旦作ったプログラム/クラ
ス/関数を後で流用できるという話です。
で、そういうクラスを作るには、「段階別に class 分けし、特化する機能を
継承で対応しつつ、応用の利く class の再利用性を維持しました。」で、示
しているような言語機能だけではダメで、人間があらかじめちゃんと考えてい
ないといけない、ということを書いただけです(「class の再利用性を維持」
というところに引っかかっただけです)。
> この点、(たぶん多重に)継承する class に window という特性を与えて
> window として使えるようにすると言うことが、僕が書いた「性質を分類して実
> 装できる」という話です。
>
> > つまり、あるモノの性質を表現する抽象クラスを多く作って、その抽象クラス
> > を組み合わせて新しいクラスを作るということをして、プログラムを作るとい
> > うことですか?
>
> Abstract class になるかどうかは時と場合によるでしょうが(abstract である
> 必要がないときもある)、基本的には色々な性質を持つ object を重ね合わせ
> て、その上にその object 独自の部分を載せながら新しい object を構成すると
> いうのが、C++の手段だと思います。
「色々な性質を持つ object を重ね合わせる」というのが多重継承によるもの
か、クラスの要素にオブジェクトを持たせるのかわからないのですが。
多分継承のことだと思いますので、その方向で話を進めます。
よく知られているように C++ での多重継承は問題があるので、多重継承を使
うことが C++ の(標準的な)手段というのはどうも違和感があります。
で、鈴木さんの書いているような手法を使った言語としては、(以前も書いた)
Flavors があります。クラスを性質ごとに作って、必要とする性質をまとめる
のに多重継承を使うというのは、オブジェクト指向でのクラスの構築手法とし
ては、比較的知られているものだと思います。
> > こういう考えを押しすすめると、Flavors でのクラス構成になりそうですね。
> > Flavors では、抽象クラスを組み合わせることによって新しいクラスを作る、
> > ということがクラス継承の軸になっていますから。
> > もっとも Flavors のいうクラス(フレーバ)は、型なんだろうか? うーん。
>
> 型 → type → 種類/種別/性質。
>
> と、言葉遊びしてみる。:-)
> でも抽象化されていない object は、性質と言うより本当にOOPで働く
> object になりますね。
> お互いに、message をやり取りするような。
> Typed Lanugage の場合、message をお互いに送りあえることを保証するのに、
> type を使っているんですね。
> さもないと、message を送れない相手に送ってしまった場合に実行時検査しなく
> ちゃいけなくなる。
結局、C++ で追加された実行時型検査というのは、そういうものだと思います。
# C++ でのオブジェクト指向がメッセージパッシング的かどうかは議
# 論の余地がありそうですね :-)
> そう言う意味でC++のとった手法というのはOOPで必然の機能ではなく、静
> 的型検査か動的な message の受信検査かの選択肢の内の一つと言うことになり
> ますね。
>
> 動的な(実行時の)受信検査をする language(i.e.Smalltalk) だと、すると、
> そんなに上記のような抽象と重ね合わせの手法はとらないと言うことかな?
そもそも Smalltalk には多重継承がないので、(継承による)重ね合わせの手
法は無理では?
で、実行時に型のチェックをする言語でかつ多重継承が可能なものとしては、
(これまで、さんざん出してきた) Flavors があります。あ、もちろん、CLOS
もそうです。Lisp 系でのオブジェクト指向言語はそういうのが多いですね。
> > で、何でこういうことをするかというと、差分プログラムのためです。
> > 結局、クラスの再利用のために行なっているわけですね。
>
> ということで、型検査の為も大きいですね。:-)
差分プログラムには型検査は関係ないのでは?
だいたい、Flavors は C++ のような型をコンパイル時に検査するような言語
じゃないです(Lisp ですから)。
> > しかし、多重継承がない Smalltalk のようなオブジェクg指向言語もありま
> > す。そういう言語では、鈴木さんの書いたことをするのは難しいでしょう。
>
> これも、型検査が大きいと思います。
> 型検査が必要ない場合、もっと自由に class 階層を決められるでしょうから、
> より単一継承でも思ったような処理が出きるのでしょう。
いえ、Smalltalk に多重継承がないのは、ぞれぞれ、共通の祖先をもつ親クラ
スを多重継承した場合にどう解釈すべきかという問題があったためだと思いま
す。
C++ での多重継承もこの問題があります。結局、C++ は、その問題の解決はプ
ログラマ側に押しつけてしまいましたが。。。
そういうわけで、C++ では、クラスライブラリを使う場合、その親クラスがど
ういう継承をしているのかを知らないとハマる可能性があります。
# 型検査がないから、自由なクラス階層を作れるのかというと疑問です。
...[snip]...
> > たとえば、事例でいうと西日本鉄道の「列車ダイヤ作成システム」をオブジェ
> > クト指向技術を使って作ったときに問題になったみたいですね。
> > このニきは、OMT によるモデルから C++ へのコードへ移すときに、表現の実
> > 現方法が違うので、クラス構造から作り直したそうです。
> >
> > # 要は、言語にモデルを合わせたわけね。
>
> へえ、もう少し聞きたいですが、どっかに参照できるところはあります?
> http とか、、、。
うーん、雑誌なので、Web では見れないと思います。
今では、入手できないんじゃないかな。
でも、鈴木さんのいうオブジェクト指向の設計と、私がこれまで書いてきたオ
ブジェクト指向設計とは意味が違うように思えるので、これまで議論してきた
のは、意味がないような気がしてきました。
> > 私見ですが、OS を作りたいと思い、実際に OS をどう作るのかを理解してい
> > るようなプログラマは、オブジェクト指向設計のような設計技法にはあまり興
> > 味がないような気がします。
> > たとえば、Linux ML などを読んでも、新しいプログラムを作るときにオブジェ
> > クト指向設計技法を使おうとかいう話を見かけたことはありません。
>
> うむむ。誰も vision が浮かばないのかな。
(Linux には)OS としてのビジョンはあるでしょう。ただ、オブジェクト指向
技法がそのビジョンの実現方法としてふさわしくないと思われているのだと思
います。
OS の構成にオブジェクト指向的なものを考えるのはよくありますから、オブ
ジェクト指向という技術に興味を持っている OS 屋はたくさんいると思います。
> > > > OS で、オブジェクト指向と言った場合、普通は設計技法としてオブジェクト
> > > > 指向を使ったことを言うのではなく、アーキテクチャとしてオブジェクト指向
> > > > 的になることをセうと思います。
> > >
> > > でしょうね。
> > > だから「新しい!」
> >
> > うーん、OS でオブジェクト指向設計を使っていないのは、新しいからではな
> > く、単に向いていないだけでは?
>
> その辺を、Next Generation の方で、話し合いましょう!
OS でオブジェクト指向設計を使わない理由ですか?
それは、事実としてやっていないということなので、あまり議論にならないと
思いますが。
> > > まあ、実際、data の flow をみたら、OOになら無いのは当たり前ですが。
> > > data のあり方(性質)を見るとOOになるかな。
> >
> > ここで、OOと書いているのは、具体的には何を思い受かべているんでしょう
> > か? それが分からないことには、何も言えないのですが。
> > えーと、私がデータフローによる設計方法ニ書いたのは、正確にはデマルコの
> > データフローダイアグラムのことです。鈴木さんの言うOOというのは、どう
> > いうものなんでしょう?
>
> 継承図です。個人的には DAG を使って書いたおなじみの物を想定しました。
そりゃ、オブジェクト設計技法ではなく、オブジェクト指向言語を使ってプロ
グラムしているというだけでは? クラス階層図を作るのだったら、オブジェ
クト指向設計というものを考えなくても、オブジェクト指向言語を使う場合に
はやることですよね。
クラス階層を作ったというだけでは、オブジェクト指向設計にはならないと思
います。
# ひょっとして、鈴木さんはずっと (クラス階層を作る == オブジェクト指向
# 設計) という意味でオブジェクト指向設計の議論をしてきたのでしょうか?
p----------------------------------------------------------------------q
| FROM R.Night |
| E-mail: |
| rnaitoh@st.rim.or.jp |
| Key fingerprint = 89 EB 77 95 40 C0 3C CC 37 A1 A7 FA 1C 66 FF D0 |
b----------------------------------------------------------------------d