ある人が会社員になったり、学生になったりすることを Smalltalk で

つまり会社員、学生をクラスとして定義した場合には、ある人が会社員になったり、学生になったりすることをオブジェクト指向プログラミング言語では直接表現できないのです。

オブジェクト指向は本当に「オブジェクト」指向か?


OOとはなにか - みねこあ で引用されているこの文を見て、「できないのです」と言い切られてしまうとついね。つい。^^; ということで文脈も空気も読まないで悪ふざけ。

Object subclass: #会社員

会社員 >> 就学する
    ^self become: (self as: 学生)

会社員 >> 就職する
    self error: 'すでに会社員です'
Object subclass: #学生

学生 >> 就学する
    self error: 'すでに学生です'

学生 >> 就職する
    ^self become: (self as: 会社員)
| Aさん |
Aさん := 学生 new.
Aさん class     "=> 学生 "
Aさん 就職する.
Aさん class.    "=> 会社員 "
Aさん 就職する  "=> Error: すでに会社員です ".
| Bさん |
Bさん := 会社員 new.
Bさん class.    "=> 会社員 "
Bさん 就学する.
Bさん class.    "=> 学生 "
Bさん 就学する  "=> Error: すでに学生です "


これ、なんてOO?


id:sumim:20090122:p1 に続く)