[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[b-free: 1317] OOに関する言語の取り扱い。(長いよ)



ちょっと、一年前にとった授業 Org. Of Progaramming Lanuguage の教科書の一
つを引っぱり出してきました。この授業はやってるとは至極当たり前のことが多
かったのですが、今こうしてOOPの議論と平行して読んでみると、いろいろと
新しい発見があるというか、「体で理解する」ような感じがします。で、そのO
OPの章を(非常に簡単に)要約しますので、参考にしてみて下さい。

# って、誰に言っている? まあ、みんなだな。

要約の正確さについては保証しかねますが(笑)、
以下に本の名前を書きます。こっちは正確。

Sebesta, Robert W.
"Concepts of Programming Languages." 3rd ed.
New York: Addison-Wesley P.

# 注意。今回、OODの方には触れていません。



導入:
 二つの類別がある。一つは型のない純粋 Object Oriented Language。
 もう一つは型付けされた、Hybrid Object Oriented Language。
 さらに、純粋な方は静的結合(i.e Smalltalk)と動的結合(i.e.Eiffel)に
 分かれる。Hybrid の方は、CLOS, C++, Ada95 などが挙げられる。
 この章では、Smalltalk と C++ について話すが、両者は劇的に違う。
 Programming style も結構違っている。


OOP:
 1.SIMULA 67 の Abstract Data Type に起源を発す。
 2.Smalltalk で広まる。
 3.Object Oriented Language は以下の3つの特徴をもつ。
    abstract data types
    継承
    ある種の特殊な動的結合

 4.abstract data types は data-oriented programming から
   うまれる。構造体定義や関数実装の詳細を隠せることが利点。
   1980年代に code の再利用が重要視される中、abstract
   data types の重要性が認識され始める。なぜなら、これこそ
   再利用の unit になるから。
 5.そこへ、継承が再利用性を高める手段を提供する。
   継承によって既存の型の機能を修正/削除して拡張できる。
   継承は潜在的な code の再利用(訳注:たぶん差分 program の
   こと)をうみ、これが imperative languages(e.g.Pascal) に
   対する最も重要な先進性となる。
 6.動的結合は開発・保守の間に software をより容易に拡張できる
   様にする。Subprogram は、generic class objects への操作を
   与えることに徹することができる。機能の拡張はその object を
   派生させればよい。この動的結合を「特殊」というのは、これが
   APL などの物と違い、object への要求に対して特定の code を
   結び付けるために行う物だからである。

 7.polymorphism(訳注:多様性?)に関する議論はある意味、
   曖昧である。主な原因は、それが違う言語によって、余りに
   も違った様相をとるからである。


Smalltalk の基礎概念:(略)
  Message Passing Model of Computation:(略)
  The Smalltalk Environment:(略)
Smalltalk 言語:(略:Topic のみ)
  Expressions
   Literals
   Variables
   Message Expressions
  Methods
  Assignment Statements
  Blocks and Control Structures
   Blocks
   Iteration
   Selection
  Classes
  Dynamic Binding
  More About Methos
  Type Checking and Generics
  Inheritance
   A Simple Table Handler
   LOGO-Style Graphics
  Evaluation

C++内でのOOP支援:(略:Topic のみ)
  Inheritance
  Dynamic Binding
  Evaluation(以下に別記)


評価[C++内でのOOP支援]:
 C++の継承は Smalltalk より access control という意味で複雑で
 ある。C++では programmer に非常に繊細な制御ができる権利を
 与えている。さらに、実際の価値についていくらか議論があるにも
 関わらず、C++は多重継承を提供している。

 C++では静的結合と動的結合を選択できる。静的結合は速いので、
 不要なときに動的結合を使わないですむのは利点である。
 静的型検査も、Smalltalk に対する利点である。Compiler が見付け
 てくれる program error を直す方が、実行時の message 受信
 可能性検査で発見される error を直すより容易である。

 Smalltalk ではすべての object が効果的に generic である。
 広大な自由度を与える一方で、そのかわり、Smalltalk は静的型検査
 を犠牲にしてしまった。C++では、静的型検査を犠牲にするか
 わりに、template を提供している。

 Smalltalk の最大の利点は、設計時にとられた一つの哲学による
 言語の「単純さと明快さ」にある。
 それは、Object Oriented Paradigm に貢献してきた。

 一方、C++はそういった単一哲学のない、非常に巨大で複雑な言語
 である。最も重要な目標の一つは効率とCっぽさを維持したまま
 OOPを提供する事にある。そのため、人によってはこの言語の
 色々な特徴は互いに相容れない物であり、多くの複雑さは不要な物
 だと感じている。

 Chamber と Ungar(1991) によれば、Smalltalk は小さなC的な
 benchmarks を走らせると、Cの10%しか speed が出ないとの事
 である。一方C++で行うと、わずかな時間しかよけいに掛からない。
 この、大きな性能の差を持って見れば、C++が商業利用で
 Smalltalkに比べて、ずっと急成長したのもうなずける。
 もちろん他の原因もあるが、効率は明らかに強力な論点だ。
 

Ada95内でのOOP支援:(略)
  Classes and Objects
  Inheritance
  Dynamic Binding
  Evaluation



要点:
  1.OOPは abstract data types/dynamic binding/inheritance
    からなる。
  2.Smalltalk は object と message からなる。
    他に類を見ない、実行制御構造を持っている。
  3.C++はCの使いやすさに、OOPを載せている。
    Smalltalk が program の自由度を考慮しているのに対し、
    C++は効率を重視している。
  4.Ada95は tagged types で継承を使える。



どんなもんでしょうかねぇ> Night さん。

-Aki.