言葉の意味、理解していますか?
その言葉の意味を分かって使っていますか?
IT業界の片隅で33年ヒッソリと生き延びているロートルの戯れ言懸念を、少しずつ書いて
いこうかなぁ…と思っています。
と、言うのも最近は一緒に働くエンジニアさんが仰る事でえ!? と思う事が多くなってきたからなんです。
最も顕著なのはオブジェクト指向プログラミングとは
- カプセル化
- 継承
- ポリモーフィズム
を三大要素としているプログラミング言語の事だと信じ切っている人と話す時ですかねぇ…
オブジェクト指向プログラミング
そもそも「オブジェクト指向」とは
そもそもオブジェクト指向と言う一見単語に見えるものはオブジェクトと指向と言う異なる2つの単語から成る合成後です。これは英語で表すとObject Orientedとなりますが、これはDr. Alan Curtis Kayがプログラミング言語Simula
に感化されて自分で作ったプログラミング・アーキテクチャを表現するための造語です。
そして、この時にDr Alan Kayが重視したのはメッセージングまたはメッセージパッシングと言うものです。
だから何?
オブジェクト指向と言う言葉の意味を正しく理解する為には
- Object
- Oriented
と言う言葉をDr Alan Kayがどう言う意味を含ませて採用したかを知る必要があると言う事です。
クラスって?
これは、かなり衝撃的だったんですが
- クラスは設計図に過ぎ無い
- クラスから実際に使える様にメモリ上に実体化したものをインスタンスと呼ぶ
と信じてる人が多いです。
上の説明ではクラスはまるでメモリ空間に存在してない様にも読み取れますし、まして動作するとは読み取れ無いですよね。
だとしたら
- 誰がインスタンスを作るの?
- クラスメソッドやクラスプロパティは誰が保持しているの?
と言う疑問はありませんか?
クラスを現実世界のメタファで説明しないで!
よく継承の説明で
- 動物クラスから哺乳類クラスを派生してね
- 哺乳類クラスから犬クラスを派生してね
- ここで全犬種に共通の概念を取り込むのね。
- で、その犬クラスから各犬種のクラスを作る!
やめてくれ!そして、読んでも信じないでください。
オブジェクト指向プログラミングにおいて、インスタンス化できないクラスはありません。もちろん、きちんとしたオブジェクト指向プログラミング言語なら、と言う条件はありますが。
その言語の大元になるルートクラスも(意味はありませんが)インスタンス化できます。
これを理解していると、
- 動物クラスと哺乳類クラスをインスタンス化してみれや!
- 以下同文
と、思う訳です。
んで?
つまり、言葉の意味を分かって使うと言う事は、その言葉の指す本質を理解していると換言できます。
ちょっと過激に聞こえるかも知れませんが言葉の本質を理解していない+方は、その言葉で表される技術なりアーキテクチャなりをある程度、何となく使えているだけで、決して使いこなす事はできません。
私が近年ソフトウェア工学に力を置いて個人メンタリングをしているのは、これが理由です。
おまけ
2進数って言うな!
進数と言うのは数学の用語で正しくは
これは数を表す体系の一つで、私たちが慣れ親しんでいる有理数の体系を実数や複素数の体系に拡張するのとは別の方法で、各素数
私たちの慣れ親しんでいる数の体系では有理数体
それに対して
もう訳が分からないですよね?それでいいんです。これは数論の中では重要な役割を果たしていますが一般にお目にかかる機会は、素粒子物理学でもやってなければ無いでしょうし。
んじゃ、僕らの数の体系って?
位取り記数法と言います。または
予め定められた
位取り記数法とは?
まず基数となる自然数
の数値に対応する数字の記法を対応させます。次に、
と言う数字列で表現します。但し、この時
十進法
私たちが最も身近に利用する十進法は
一つの列には一つの数字しか容れる事ができません。演算の結果、ある列の値
具体的には
例えば
誤解を避ける為に
例えば
また、先ほど数字と言う表現を使いましたが、数が概念であるのに対して数字は数を表現する為の記号の事です。
つまるところ人が目視して確認できる記号であれば良い訳です。ですから
ごめんなさい
全然Conclusionを作れませんでしたが、普段何気なく使っている言葉と言えどもその意味、判ってますか? と言う問いかけとも言えますし、知らなければ調べてねと言うお願いでもあります。
宿題
アナログとデジタルを説明してください。
誰が受け取って採点するんだ?
Discussion