Open5
OOPLとObject-based言語の整理
モチベ
- 未だに混迷してるOOP(オブジェクト指向プログラミング)周りの言説を整理したい。
- OOPL(オブジェクト指向プログラミング言語)の特徴的な言語機能をふるい分けたい。
- Object-based language の概念を導入して整理に役立てたい。
- Object の概念のコアを見定めたい。
- OOUI との関係を明らかにしたい。
- アラン・ケイの思想の系譜を確認したい。
- Simula → C++ からの系統を確認したい。
参考リンク
定義など
ブログ
論考など
new
使ってればOOPなのかって話だ
ただ半ばジョークとして、「ドット記法が唯一OOPLに共通する特徴だ」なんて言われてたりする。
obj.method()
OOPL なしに OOP はできるのか? OOUI は それか?
コード・レベルの話とモデリング・レベルの話を区別したい。
OOPL 小史
これは抜粋
code
@startuml OOP-families
object LISP {
dynamic
}
note right : the idea of object
object Simula {
static
class-based
}
note left : the origin
LISP ..> Simula : GC
package 70s {
object Smalltalk {
dynamic
messaging
}
note right : coined OOP
Simula --> Smalltalk : messaging
LISP ..> Smalltalk : dynamic
' object Pascal
' note right : non OOPL
' Simula --> Pascal
}
package 80s {
object "C++" as Cpp {
static
no GC
overload
multiple inheritance
}
Simula --> Cpp : ADT
Smalltalk --> Cpp
object "Objective-C" as ObjC {
static + dynamic
no GC / ARC
messaging
' selector
}
Smalltalk --> ObjC : messaging
object Self {
dynamic
prototype-based
}
Smalltalk --> Self
}
package 90s {
object Python {
dynamic
multiple inheritance
}
Cpp --> Python
' Pascal --> Python
object Java {
static
overload
}
Cpp ---> Java
' Pascal ..> Java
' Smalltalk ..> Java : how?
ObjC ---> Java : protocol = interface
object JavaScript {
dynamic
prototype-based
}
Self --> JavaScript
Python ..> JavaScript
' Java . JavaScript : same age
' Java .r.> JavaScript : name after
object Ruby {
dynamic
mixin
}
Cpp ..> Ruby
Smalltalk --> Ruby
Python --> Ruby
object PHP {
dynamic
}
Java --> PHP
JavaScript --> PHP
' object OCaml
' Pascal ---> OCaml
}
package 2000s {
object "C#" as CS {
static
overload
}
Cpp ---> CS
Java ---> CS
}
@enduml