人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

抽象クラスとインターフェースの存在意義について、下記の人を対象に
簡単に3行くらいで説明するとしたら、どのように言えばよいでしょうか?

対象:ある程度プログラミングに精通した方(VB6コーディング経験あり)で
クラスなどはあまり作ったことがない方

●質問者: witt
●カテゴリ:コンピュータ
✍キーワード:vb6 インターフェース クラス コーディング プログラミング
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● angelsong
●25ポイント

http://www.techscore.com/tech/DesignPattern/index.html

デザインパターン[モデリング] -TECHSCORE-

デザインパターンの話から入った方が分かりやすいでしょうか。それぞれの特徴を簡単に書いてみます。

1.インタフェース

クラスのシグネチャ(メソッド名と引数の型の組み合わせ)のみを定義することで、「振る舞い」のみを利用することが出来る。その中身の実装を知らなくても、使い方だけを覚えれば、コーディングが可能である。(典型は、Iteratorパターンでしょう。配列を対象に、hasNext():まだ次の要素ある?、next():じゃあ、次の要素を取り出すね。と言う使い方だけで、その要素がどんな型であるかは意識しなくても良いですね。)

2.抽象クラス

TemplateMethodパターンが典型ですね。引用したURLの例で言うと、版画を作ると言う行為の手順(メソッドを呼ぶ順序)と材料(属性)は抽象クラス側で定義しておいて、実際に絵を描いたり、木を彫る部分のみサブクラスで実装すれば良い、と言うメリットがあります。抽象クラスを定義することで、類似した処理で同じコーディングを何度も書く必要がなくなりますね。


もし分かりにくい説明でしたら、いわしで補足させてもらいますね。

◎質問者からの返答

私はデザインパターンを知っているので、

なるほど、こういう視点から説明する方法もあるなぁ、

と新しい気づきを得られた反面、

今回の対象者には敷居が高すぎるのではないかと感じています。

angelsong さまの回答は、至極もっともなんですが、

こう、なんというか、今回の対象者に向けた、スルーパスのような

回答を期待しております。


2 ● suke33
●18ポイント

http://www.kab-studio.biz/Programing/JavaA2Z/Word/00000080.html

JavaA2Z【抽象クラスとは】

クラスが分からない人に3行程度で説明するのはかなり困難だと思います。

せめてクラスと継承について理解してもらってからのほうが良いと思います。

それに「存在意義」ということは、抽象クラスとインターフェイス自体も、概要くらいは知っていないと短文での説明は更に困難だと思います。

とりあえず、クラスぐらいは分かるという前提で書いてみました。でないと、説明内容が多くなってしまうと思います。


上のサイトは説明も分かりやすく、各用語の解説も細かく載っています。このサイトから抜き出した要約例として以下の文章を作ってみました。参考になれば幸いです。


■インターフェイス

インターフェイスとその実装クラスは、スーパークラスとサブクラスの関係とほぼ同じ。実装クラスのインスタンスの参照は、インターフェイスの参照型変数に格納できる。引数として「特定の処理」を行うメソッドを持つインターフェイスを持たせれば、呼び出す側はそのインターフェイスの実装クラスの内、希望の処理を行う「特定の処理」が実装されている実装クラスを渡すことで、メソッド内の処理の一部を「どのように処理するか」呼び出す側が選択することができる。


■抽象クラス

サブクラスの参照をスーパークラスの参照型変数に格納できる機能を使用する場合に、スーパークラスに「一般的な実装」がなく、さらに「必ずサブクラスで実装して欲しい」メソッドがある場合に使用するのがいいだろう。

◎質問者からの返答

ご紹介いただいた URL 参考になります。

ただ、これらの文法について、仕様上はこうできるという説明に終始しており、

実際に、どういうとき、使えば便利なのかという視点が抜けているように思います。


3 ● くまっぷす
●22ポイント

http://www.atmarkit.co.jp/fjava/rensai2/javaent14/javaent14.html

@IT:いまから始めるJava 第14回

URLはダミー。

3行でというのは難しいかも、と思いますが

・抽象クラスについて

「空のクラスなんていらないような気がするけど、そこにその子供のクラスが絶対に実装しないといけないものを書いておくと、子供のクラスで実装し忘れがあるとエラーが出るんで間違いが少なくなる」とか。

・インターフェースについて

「あるライブラリを使って実装をする場合に、インターフェースの定義(IDL)だけもらってプログラムをビルドすることができます。APIだと相手が実際にいないとリンクエラーになりますよね。」

あたりではどうでしょうか。


また、VBだとCOM(Active-Xコンポーネントなど)がまさに抽象クラスとインターフェースの応用例なのでそのコンポーネントを作るときに同じインターフェースを持ってるものは例えば表示の色や形などが違うものでもぺたっと張り付ければそのまま使えるでしょ、でもいいかもしれません。

◎質問者からの返答

> VBだとCOM(Active-Xコンポーネントなど)がまさに抽象クラスとインターフェースの応用例

そういう例があるとイメージしやすいと思います。

私は COM について弱いので、今後、勉強してみます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ