OOPは難しい、理解できない...という人でも解説本を読み続けたり講習を受け続けているうちに、突然こういうことだったんだと理解できる日が来ます。地道な努力をすれば開花するでしょう。こなくても責任は負いませんかwww(^^)
なまじ、アセンブラを知っている人のほうが、厄介です。この手の人はCのポインタも アドレスとして理解してたりします。機械語レベルの動作としては間違ってないのですが。.....クラス概念という捉え方が苦手のようです。
OOPはすべて関数ポインターで結びついていると解釈して、「OOPやポインタなんで簡単だ。なんで判らないんだ! アセンブラを勉強すれば、全てわかる!」と豪語する人までいます。
うーん。何か違うぞ。この手の人は、地位が高かったり、発言力が大きかったりするので、諌言するにしても気を使います。
そのような人が、あるプロジェクトでOOPの講義をしてました。
モータがあります。プロペラが付いてます。これを1セットにしたものをプロペラ基底クラスとします。
ジューサーミキサー -------->プロペラ基底クラス:小型交流モーター実装したもの
コンクリートミキサー ------>プロペラ基底クラスの動力をエンジンにしたもの
扇風機 -------------------->プロペラ基底クラス:中型交流モーター実装したもの
洗濯機 -------------------->プロペラ基底クラス:扇風機の同位体のもの
(船の)スクリュー----------->プロペラ基底クラス:重油モータで実装したもの
プロペラ基底クラスをしっかり作っておけば、実装がなんであっても、応用が可能で、部品の再発明することはない。
このように、無関係に見えるものでも、共通項を見出して、継承関係を作れば、画期的に開発効率が上がるんだ。....(以下略)
いくら相手が初心者でも、乱暴すぎませんか。因数分解しただけでは、継承したことにはなってませんよ。
二つの違うように見えている事象でも、共通項を見出すことで、継承関係を発見するのは多々あります。しかし、それは、処理の共有化ではないのです、部品化しただけでは、抽象化したことにはなりません。
OOPの動作原理はアセンブラのポインター(アドレス)操作なんでしょうが、OOPは思想の話なので、動作原理で理解しようとすると無理が生じます。
「OOPは簡単だ」と"発言している人"で且つ"OOPが説明できる人"に出会ったことがありません。 この手の人は、「JAVAやC言語もアセンブラ知っていれば簡単だよ」というのですが、そのアセンブラ力がイマイチだったりするので......www(^^
型(Type)やメンバーという論理的な概念や、継承先の独自の振る舞いを如何に定義するかなどマシン語には直接登場しない要素が重要となります。
このレベルの人がOOP指導者になってていいのかなぁ。
黙って見てるなって....でしゃばって睨まれるのも嫌だしなぁ。