[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.