Ognacの雑感

木漏れ日々

目次

Blog 利用状況

書庫

ギャラリ

何か違うぞ

  OOPは難しい、理解できない...という人でも解説本を読み続けたり講習を受け続けているうちに、突然こういうことだったんだと理解できる日が来ます。地道な努力をすれば開花するでしょう。こなくても責任は負いませんかwww(^^)
なまじ、アセンブラを知っている人のほうが、厄介です。この手の人はCのポインタも アドレスとして理解してたりします。機械語レベルの動作としては間違ってないのですが。.....クラス概念という捉え方が苦手のようです。
OOPはすべて関数ポインターで結びついていると解釈して、「OOPやポインタなんで簡単だ。なんで判らないんだ! アセンブラを勉強すれば、全てわかる!」と豪語する人までいます。
うーん。何か違うぞ。この手の人は、地位が高かったり、発言力が大きかったりするので、諌言するにしても気を使います。
そのような人が、あるプロジェクトでOOPの講義をしてました。
  モータがあります。プロペラが付いてます。これを1セットにしたものをプロペラ基底クラスとします。
      ジューサーミキサー -------->プロペラ基底クラス:小型交流モーター実装したもの
      コンクリートミキサー ------>プロペラ基底クラスの動力をエンジンにしたもの
      扇風機 -------------------->プロペラ基底クラス:中型交流モーター実装したもの
      洗濯機 -------------------->プロペラ基底クラス:扇風機の同位体のもの
      (船の)スクリュー----------->プロペラ基底クラス:重油モータで実装したもの
  プロペラ基底クラスをしっかり作っておけば、実装がなんであっても、応用が可能で、部品の再発明することはない。
  このように、無関係に見えるものでも、共通項を見出して、継承関係を作れば、画期的に開発効率が上がるんだ。....(以下略)

いくら相手が初心者でも、乱暴すぎませんか。因数分解しただけでは、継承したことにはなってませんよ。
 二つの違うように見えている事象でも、共通項を見出すことで、継承関係を発見するのは多々あります。しかし、それは、処理の共有化ではないのです、部品化しただけでは、抽象化したことにはなりません。
OOPの動作原理はアセンブラのポインター(アドレス)操作なんでしょうが、OOPは思想の話なので、動作原理で理解しようとすると無理が生じます。

「OOPは簡単だ」と"発言している人"で且つ"OOPが説明できる人"に出会ったことがありません。 この手の人は、「JAVAやC言語もアセンブラ知っていれば簡単だよ」というのですが、そのアセンブラ力がイマイチだったりするので......www(^^
型(Type)やメンバーという論理的な概念や、継承先の独自の振る舞いを如何に定義するかなどマシン語には直接登場しない要素が重要となります。
このレベルの人がOOP指導者になってていいのかなぁ。
黙って見てるなって....でしゃばって睨まれるのも嫌だしなぁ。

投稿日時 : 2008年3月25日 1:08

Feedback

# re: 何か違うぞ 2008/03/25 1:22 凪瀬

OOP?
簡単だよ。
設計をしようとしなければね :-P

# re: 何か違うぞ 2008/03/25 6:29 επιστημη

継承と集約をおもっきし混同してますねー

# re: 何か違うぞ 2008/03/25 6:56 ゆーち

OOPでの「継承」は、is a の関係でなければなりません。

ジューサー has a モーター
ジューサー has a プロペラ(w
ですので、「何か」違うではなく「あきらかに」違ってます。
指導内容が間違っているのであれば、上のヒトだろうがナンだろうが立場を尊重するより、教わる人たちの将来のほうが重みがありますので、指摘するべきです。

ところで、OOPの動作原理が「ポインタ」って・・・
virtual 関数のことかなー?動作原理??

# re: 何か違うぞ 2008/03/25 7:56 NAL-6295

OOPって頭のいい人が凡人のために作ってくれた整理術だと思ってました。
それにしても上の指導者が提示している例は乱暴ですね。
一見、違うものに見えても抽象化して継承関係にできるものもあれば、逆に同じに見えても継承関係にするべきではないものもあると思います。

# re: 何か違うぞ 2008/03/25 7:58 NAL-6295

追記:
OOPの概念を理解するのに、ポインタもアセンブラも勉強する必要無いですね。

# re: 何か違うぞ 2008/03/25 10:31 スーパーあんどちん

OOPの動作原理がポインタなのではなく継承を効率的に実装するのにポインタで処理すると良いというだけと思うのですが。
OOPは表現手法だと思うし。
そもそも型の概念が希薄なアセンブラでクラスをわかりやすく表現するのは無理があると思います。

# re: 何か違うぞ 2008/03/25 11:58 Ognac

コメントありがとうございます。
>OOPの動作原理がポインタなのではなく継承を効率的に実装するのにポインタで処理すると良いと
代弁して頂いてありがとうこざいます。
アセンブラレベルのコードは、JUMPやunsafeの動作など、順次処理の記述に展開されるので、それが言いたかったです。
 だからこそ、アセンブリ展開後のソースで理解しようとすると齟齬が生じます。手続き型やOOPもコーディングの概念であって、実動ソースと切り離して考えないと、自己矛盾に陥ると思います。

>継承と集約をおもっきし混同してますね
周囲は、年配者が多いせいか、そのような認識の人か多い。.........頭をぶつけたら気づくかなと思うのですが、ふつけたことに気づかないので.....orz

# 餅は餅屋 2008/03/26 1:14 いや、まだだから

餅は餅屋

# 餅は餅屋 2008/03/26 1:17 いや、まだだから

餅は餅屋

# 継承をCで書く 2008/03/26 21:00 組み込まれない組み込み屋

継承をCで書く

# 継承をCで書く 2008/03/26 21:02 組み込まれない組み込み屋

継承をCで書く

タイトル
名前
Url
コメント