« 2010年4月 | トップページ | 2010年6月 »

2010年5月

2010年5月22日 (土)

「多重継承」と「実装継承」について考える~脱C++的発想

開発現場で使われているオブジェクト指向言語の中で、多重継承をサポートしているものにC++がある。

C++の教科書では「多重継承」は、使うのが難しいので避けるべきとか、ダイヤモンド継承に注意しろとか解説がある。

単一継承でも継承関係の階層を浅くしろ(3階層程度)とか言われる。

さて、これらの注意であるが、あくまでC++言語の言語設計上の問題であり、オブジェクト指向設計や言語全般に言えることではない無い事を理解しよう。

C++の問題にも関わらず、どうもオブジェクト指向一般に言えることと勘違いている人が多い。

C++は、強い型づけ言語となっているが、C++は残念ながら型理論が首尾一貫した形で言語設計として導入されていない。

言語レベルでクラスとしての型階層が無い。

強い型付けのあるオブジェクト指向言語であるEiffelでは、言語として最上位のクラスの型がANYとなり、全てのクラスはこのANYのサブクラスになるように言語設計がされている。ちなみに最下位はNONEである。

このような型理論が首尾一貫した形で導入されている言語では様々な利益をプログラマーは得ることができる。

オブジェクト指向で大切なことは、色々あるがコードレベルでは、オブジェクト指向プログラミングの狙いとして「差分プログラム」がある。

差分ブログラミングとして威力を発揮するのが継承であるが、開発現場で継承を使い差分プログラミンやコードの再利用を行うための考慮がC++には決定的に欠落してるために、「多重継承」、「継承関係の階層の深さ」および「実装継承」に注意しなければならいのである。

一方、Eiffelは非常に数学的に設計(集合論と型理論)されている上に、契約に基づく設計(DesignByContoract)を言語の機能として持っているので、プログラマーが「多重継承」、「継承関係の階層の深さ」および「実装継承」が(必要以上に)注意しなくてよいようになっている。

なお、「実装継承」とは、「意味継承」と異なり共通コードの利用(差分プログラミング)のために、is-a関係にないクラスから継承することである。

分析レベルではこの「実装継承」は避けて、「意味継承」でモデリングすることは大切となる(述語論理学や集合論の一貫性から)。

実装レベルとなると話は異なる(設計や実装のポリシーの問題も関わるから単純でない話題ではあるが)。

詳細設計や実装では、分析で得られた主語-述語関係と、その正当性を集合や写像の数学的で視点で検討したクラス図をどのようにソースコード上に反映するかを検討する。

分析では継承はis-a関係にないモデルは間違いであるが、差分プログラミングやクラスの再利用を最大限に行うことを意識した場合には、実装継承は必要となってくる。

オブジェクト指向には、差分プログラミング以外にもモデルの再利用やカプセル化による保守性などの狙いやメリットがあるのは事実だが、しかし、オブジェクト指向プログラミングの大きなねらいとして、差分プログラミングがあるのも事実だ。

差分プログラミングを実現する継承の1つの方法である「実装継承」を避けることは、ナンセンスというのが、Eiffel言語設計者のバートランド・マイヤー博士の主張だ。

C++のような言語を用いると、効果的な再利用のコードを書きたくても書けなくリスクが大きい。

C++の世界では「実装継承」により差分プログラミングをすると、保守で色々な問題を引き起こすが、Eiffelではこの問題は起きない。

また、Eiffelでは継承階層の深さも、深ければ深いほど利益が得られる様になっている(本来継承とはそういう物であるから自然の帰結である)。

ソースコードは長い時間、再利用されれば、されるほど意味がありメリットとなる(これも当然)。

長く利用されれば、その間に差分プログラミングのために、上位クラスを利用することで、継承階層は深くなっていき、クラスの継承関係は複雑になることは自然である。

その際に起きる様々な問題事項(名前の衝突、重複した継承、上位クラスの機能の制限などなど)の問題は、現場で利用される言語として設計するならば言語設計として当然織り込んでおくべきであり、エンジニアに負担を掛けるのではなく、言語が全て面倒を見るべきというのがEiffelの言語設計ポリシーとなっている。

C++で不具合の温床となりやすいメモリー管理も、Eiffelでは全く気にならない。

ガーベージコレクション機能を備えているからである。

ガーベージコレクションが処理速度に影響を与えるという理由で、C++に無いというのも理由としてはやや消極的だ。

Ada言語にもガーベージコレクションが機能としてあるからだ。
Adaには、Eiifle同様、動作時の型チェックもできる(オプションで外すこともできる)。

Eifflelに興味がある方は、バートランド・マイヤーの「オブジェクト指向入門第2版」を読むとよい。

オブジェクト指向プログラミングの本質が理解でき、Eiffelがガーベジコレクション、並行処理機能SCOOPなどの解説もあるし、数学的な視点でソフトウエアコード開発が理解できる。

|

東京都市大学へ行ってきた~ETロボコン2010の打ち合わせ

今日はETロボコン2010の打ち合わせで東京都市大学へ行ってきた。

営団地下鉄のブルーラインも、最寄駅の中川駅も初めてなので新鮮だ。

最近の大学はモダンで設備が充実している。

これなら学校に行くのが楽しくなるかも。

Image026 Image027 Image028 Image029 Image030 Image032

|

2010年5月21日 (金)

明日は東京都市大学で打ち合わせ~ETロボコンの南関東大会

明日は土曜日だが午前中は、東京都市大学の横浜キャンパスで、5月29日に開催されるETロボコンの南関東大会の講演とパネルディスカッションの打ち合わせ。

午後からは大手製造業企業のオブジェクト指向のトレーニングカリキュラムのアジェンダ作成をする。

このトレーニングは、かなり数学的な形式的アプローチになるので数学の内容も盛り込まれる。

数が明けて月曜日に別なトレーニングマテリアルの作成締め切りがある。

毎週最低2回は企業のコンサルテーションもレギュラーで行っているので、イベントも含めて5月から6月は少し詰まったスケジュールで仕事を進めなければならない。

5月最終の週もコンサルティングとトレーニング教育が入っている。

6月5日(土)は、週末だがやはり○○博士と技術的な打ち合わせ。

6月11日にスパークシステムズさんのセミナーも実施するから、そちらの準備も進めていく。

それに、まだ日時を確定していないが2つほど技術的な打ち合わせをしなければならず、早く日時を決めないといけないがなかなか時間の都合が付かないので大変だ。

|

2010年5月18日 (火)

【技術セミナー】のお知らせ~スパークスシステムズジャパン株式会社主催

今日はスパークスシステムズジャパン株式会社さんが主催の技術セミナー「プロジェクトリーダー・マネージャーのための現場で役に立つ知識セミナー」のお知らせ。

3人の講師がそれぞれのテーマで技術解説をするセミナーで、私はタイトル「ソフトウェア再利用のための科学的アーキテクチャ開発技法と戦略」でプレゼンする。

http://www.sparxsystems.jp/event/20100611.htm#contents

詳しい情報と申し込み方法は、スパークスシステムズジャパン株式会社さんさんの下記URLを参照のこと。

http://www.sparxsystems.jp/event/20100611.htm

私のセミナー予定内容は下記:

  • 再利用のためのアーキテクチャ設計技術
  • バインディング技法と再利用のためのコンポーネント管理
  • アーキテクチャ設計と要件定義・管理
  • 構成管理および統合活動の効果的な作業プロセス
  • サブシステムの独立性のメトリクス
  • =HSCI Takanari Hashimoto(URL:http://hsc-i.com/)=

    |

    2010年5月16日 (日)

    「不完全性定理」の位置づけと意味は何を語るのか?

    日本人が明らかに弱いというか理解していない点が”ものごとをどのように捉えるか?”や”思考の対象をどのように位置づけるか?”に関する点だと思う。

    これを表す顕著な例が、クルト・ゲーテルの「不完全性定理」の位置づけと意味の理解を日本人がどのように把握しているかである。

    ここでの議論はクルト・ゲーテルの「不完全性定理」の証明をきちんと出来る・出来ないを焦点にしていないことに注意。

    クルト・ゲーテルの「不完全性定理」の背景と出発点の理解が焦点である。

    (専門家以外の)日本人が盲目的に「不完全性定理」はよく”人間の理性の限界を示した”などと言うことがある。またそうい文章を書く人を見かける。

    これは”契約形式主義(一般的に言う公理主義立場)”という立場で物事を考える場合の限界を述べているのであって、他の立場をとる科学者や哲学者なら「不完全性定理」に対して全く証明している対象の前提や土俵が異なる点に注意すべきだ。

    正直、論理学の巨人であり大天才のヴィトゲンシュタインのような哲学ならクルト・ゲーテルの「不完全性定理」が”人間の理性の限界を示した”などと全く思わないと思う。

    そもそも、「不完全性定理」自体が意味がない事を証明していると主張するかもしれない。

    彼の場合、ラッセルやゲーテルの活動の概念の捉え方や定義にそもそも大きな間違いがあると主張していた。

    ヴィトゲンシュタインは、ラッセル達と日常言語の持つ意味や機能、命題関数の位置づけと解釈に異論を唱えていた。

    ラッセルのタイプ理論も全く不要なものであると主張していた。

    さて、「不完全性定理」だが、このように哲学や論理学の立場によって大きく位置づけや価値が変わるものである。

    重要な点は、このような背景や位置づけを理解したうえで「不完全性定理」を考えることである。

    異なる立場でも同じ立場でも意見や解釈に違いがあり、それぞれが何を意味しているかを自分で考えることが大切である。

    今の日本人は考えをせず鵜呑みにする傾向が強い。

    公理体系は無数に存在するが、公理主義の立場をとれば必ず「不完全性定理」に突き当たる。

    これはコンピューターの世界と等しいということが知られているが、人間はコンピューター以上の物であることはゲーテル自身がやはりそう考えていた。

    逆に言えば極限られた範囲について扱うのが公理体系であり、公理とする定義から定理を演繹的に全て導き出そうとするアプローチに限界があることを不完全性定理は述べたにすぎない。

    ことは別に不思議でないし、人間の知性の限界でもない。

    また、公理となる定義を証明なしで決定するのは、「証明しようが無いので仕方なくそうします」ということである。

    公理となる定義は「そう決めたから」というのが公理主義の採る立場である。

    現在の哲学、量子力学、天文学でも、時間や多次元などの議論が行われている。

    これまでの数学や論理学の標準であった従来のような古典的な形式主義の立場をとらない科学者は多く成っていると思う。

    量子力学でも天文学の議論でも最先端になれば、なるほど従来から形而上学と言われた本質的な議論に立ち返らなければならない。

    これまでまずまず上手く機能してきた、契約的形式主義のアプローチは、この点を扱わなかったので、やはり仕方のない事であるが限界があるのは当然であるし、公理主義に何を期待するかという前提を確認しないといけない。

    =HSCI Takanari Hashimoto(URL:http://hsc-i.com/)=

    |

    2010年5月 4日 (火)

    フランク・ブラングィン展を見る~国立西洋美術館

    5月1日は国立西洋美術館で開催しているフランク・ブラングィン展を見た。

    Image0201

    常設展とは別に国立西洋美術館の50週記念としてフランク・ブラングィン展を開催している。

    http://www.nmwa.go.jp/jp/index.html

    国立西洋美術館は、現川崎重工業の創業者である、実業家松方幸次郎が大正初期から昭和初期(1910年代から1920年代)にかけて築いた美術品コレクションが基礎となっている。

    フランク・ブラングィンと松方は非常に親交が深く国立西洋美術館を語る上で外せない。

    フランク・ブラングィンについては、TV「美の巨人たち」で5月8日に紹介されるそうなのでそちらも見ると良い。

    松方氏の写真は下記にあるが、ダンディですな。

    この時代に外国語に堪能で海外でビジネスを大成功するのだからやはり非凡です。

    http://www.nmwa.go.jp/jp/collection/permanent/matsukata.html

    武士道の新渡戸稲造も英語で武士道を執筆し英語が堪能だったし、作家の三島由紀夫も英語でスピーチすることが多く非常に英語が堪能(YouTubeで観れる)。

    昔の日本人の方が英語が堪能かつ高尚な文章になっている(語っているテーマが難しいものが多い)。

    おっと閑話休題。

    国立西洋美術館には、ピカソ、モネ、マネ、ルノアールなどの作家の絵もかなりあり、ロダンの彫刻もある。

    結構広いからじっくり見るには一日だと疲れるので、ときどき行くとよい。

    建築自体はフランスの巨匠ル・コルビジェの建物(詳細設計は前川國男など日本人による)である。

    いかにもル・コルビジェという雰囲気を出している建物だ。

    Image015 Image013 Image014 Image019

    =HSCI Takanari Hashimoto(URL:http://hsc-i.com/)=

    |

    « 2010年4月 | トップページ | 2010年6月 »