コラム

インターフェースと抽象クラスの違いは?

Java言語を習得中の生徒に、「インターフェースと抽象クラスの違いは?」と問いかけたところ、その時点ではうまく答えられなかったのですが、復習をされた後とても素晴らしい回答がありました。

その回答は、

昨日上手く答えられなかった項目を中心に分かったことを以下に記載しますので目を通していただけますでしょうか。

・インターフェースを定義する上で気を付けること
後になって変更することは非常に困難(既にそのインターフェースを実装してしまっているクラスが無数にあることが予想される為)なので、最初から正しい設計をする必要がある。
・インターフェースと抽象クラスの使い分け
インターフェースは多重継承が許されているので、複数のインターフェースを継承して型を混ぜ合わせることで非常に柔軟な型定義を行うことができる。一方で抽象クラスは単一継承という制約があるのでこのような型定義には向かないが、継承を想定して最終的な実装の骨格として定義することで実装者にとってとても使いやすいものになる。

解説サイトの言葉をそのまま流用している部分もありますが、ここに書いたことはしっかりと理解できました。自分が難解に感じていた原因の一つはこの二つの違いは何かということばかりに目を向け過ぎていたことにあると思います。

もちろん、違いはあるのだけれど目的はどちらも同じ、オブジェクト指向を実現する為に用意されたものであり、別物として使い分けるのではなく組み合わせてこそ真価を発揮するということに気付きました。

いやー、まいりました。(笑)

プロパティとアトリビュートの違い

HTMLやCSS、JavaScriptなどの初学者からの質問で、「HTMLを習ったときの属性とCSSの属性はおなじですか?」と聞かれました。 「属性」という単語は同じですが、呼び名が違います。HTMLではアトリビュート、CSSではプロパティです。と答えたところ、より混乱したようです。 それで、もう少しわかりやすく解説します。

プロパティとは

オブジェクト指向型言語などで用いられる属性のこと

アトリビュートとは

シミュレーションなどで利用されるOAV(オブジェクト・アトリビュート・バリュー)形式のAのこと。または、HTMLのタグの属性のこと。

それでは違いは何?

プロパティも属性とよばれアトリビュートも同じく属性と呼ばれます。それでは同じものなのでしょうか?

いいえ、同じようなものですが、違います。

日本語にも似たような単語があります。それは、「性格」、「気質」、「気性」のように、辞書で調べると「個人が持つ性質を示す」などと、プロパティとアトリビュートの関係によく似ています。 それらは、同じようなものですが、使い方が違います。 「あの人の性格は?」、「あの人は神経質な気質です」、「あの人は気性が激しい」などによって文脈で使い分けるものです。 それとおなじく使い方で、もしくは、何を示しているかによって、プロパティとアトリビュートを使い分けるのです。

Web系での使い方は、Javascriptやcssだとプロパティ、HTMLではアトリビュートと区別して呼びます。

例として、「INPUTタグの、TYPEアトリビュートにTEXTを指定して、STYLEアトリビュートに、横幅のwidthプロパティを60pxと指定します」