R.Tanaka.Ichiro's Blog

主にC# な話題です

目次

Blog 利用状況

ニュース

R流、一瞬でわかる.NETオブジェクト指向プログラミング入門14

http://blogs.wankuma.com/rti/archive/2007/08/31/92918.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門13

http://blogs.wankuma.com/rti/archive/2007/08/28/92305.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門12

http://blogs.wankuma.com/rti/archive/2007/08/27/92095.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門11

http://blogs.wankuma.com/rti/archive/2007/08/20/91083.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門10

http://blogs.wankuma.com/rti/archive/2007/08/14/90238.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門9

http://blogs.wankuma.com/rti/archive/2007/08/10/89801.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門8

http://blogs.wankuma.com/rti/archive/2007/08/08/89397.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門7

http://blogs.wankuma.com/rti/archive/2007/08/07/89226.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門6

http://blogs.wankuma.com/rti/archive/2007/08/02/88399.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門5

http://blogs.wankuma.com/rti/archive/2007/07/31/87955.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門4

http://blogs.wankuma.com/rti/archive/2007/07/30/87742.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門3

http://blogs.wankuma.com/rti/archive/2007/07/26/87105.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門2

http://blogs.wankuma.com/rti/archive/2007/07/25/86988.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門1

の続きです。

どこからフォローすれば良いのかわからないので、先頭から順に行ってます。

今回は

インターフェイス

というテーマです。

毎度おなじみのR・田中一郎クラスですが、わんくま同盟に限らないでR・田中一郎のプロフィールとしても流用できます。
しかし、会員番号は、わんくま同盟独自のものです。
このような場合は、単純に一つのクラスを継承するという考え方ではなく、いくつかのメンバをグループ化したパターンを作ってあげた方が良さそうです。

以下の C# のコードを見て下さい。


interface Iプロフィール
{
  string 名前 { get; }
  string 年齢 { get; }
  string 職業 { get; }
  string 印象 { get; }
  void 自己紹介();
}

interface Iわんくま同盟
{
  string 会員番号 { get; }
}

class R.田中一郎 : Iプロフィール, Iわんくま同盟
{
  public string 会員番号 { get { return "34";             }}
  public string 名前        { get { return "R・田中一郎";   }}
  public string 年齢        { get { return "18";             }}
  public string 職業        { get { return "IT関係";         }}
  public string 印象        { get { return "素敵だし爽やか"; }}
  public void   自己紹介(){}
}


前回の抽象クラスの記述に似ていますが、インターフェイスとしてメンバを定義しています。
上記のサンプルを見ると、抽象クラスの abstract 修飾子をつけたメンバの定義と同じことが interface によって行えている点と、継承したクラスで override 修飾子を記述せずに実装を記述できているだけのように思えます。
また、R・田中一郎クラスが、2つのインターフェイスを継承していることもわかります。

では、インターフェイスとクラス(抽象クラスも含む)は何が違うのでしょうか?

クラスは型と実装を記述できると共にオブジェクトも生成できますが、インターフェイスは型を定義するだけです。
しかし、上記の例のように、クラスは一つしか継承できないことに対して、インターフェイスは複数継承できます。

インターフェイスは型だけを定義するものであるため、当然継承したクラス側では、全てのメンバを実装しなければなりません。
上記のサンプルでは、インターフェイスで定義したメンバに対する全ての実装をR・田中一郎クラスが持っていることが確認できます。

また、以下のように1つのクラスと複数のインターフェイスをまとめて継承することもできます。


class R.田中一郎 : アンドロイド, Iプロフィール, Iわんくま同盟


このようにインターフェイスを継承したクラスによって生成されたオブジェクトは、以下のようにインターフェイスの型を持つ変数に代入することができます。


R・田中一郎 r = new R・田中一郎();
アンドロイド a = r;
Iプロフィール p = r;
Iわんくま同盟 w = r;


以上で「R流、一瞬でわかる.NETオブジェクト指向プログラミング入門」は全て終了です。
どこが一瞬なんだという意見が多数ありましたが、まあ、振り返ってみれば一瞬の出来事でしたね。

恐らく、僕の自己紹介は大量にしているので、僕の名前だけは覚えてもらえたことは間違いないでしょう。

それでは最後まで、ご清聴をありがとうございました。

投稿日時 : 2007年9月6日 14:07

Feedback

# re: R流、一瞬でわかる.NETオブジェクト指向プログラミング入門14 2007/09/06 17:28 Streetw☆

インターフェイスのメリットについて、今回、あまり触れられていないような気がしました。
それと、インターフェイスって普通の実装と明示的な実装がありますけど、私はまだよくわかってないので、その辺りも教えて欲しかったです。
#なんとなく、普通の実装の方を行ってます。

あ、次の所は間違ってますよ。
・interface わんくま同盟
Iが抜けてます。
・public override string 会員番号
overrideは不要です(よね?)

>僕の名前だけは覚えてもらえたことは間違いないでしょう
はい!
私の方はシリーズの間に、通り*から何度も変わりましたけどw

シリーズ、お疲れ様でした!
ボリュームのある一瞬をありがとうございました~

# re: R流、一瞬でわかる.NETオブジェクト指向プログラミング入門14 2007/09/06 19:10 R・田中一郎

>インターフェイスのメリットについて、今回、あまり触れられていないような気がしました。

インターフェイスのメリットは、やはり関連性の高いメンバのグループをインターフェイスとして定義することで、より多態性を高めることができることだと思うのです。
しかし、この説明を入門編でしてしまうと、ちょっと敷居が高くなってしまうような気がしました。

>それと、インターフェイスって普通の実装と明示的な実装がありますけど、私はまだよくわかっ

これも入門編という意味から省略しました。
僕の目指す入門編は、かなりレベルが低いのでw

明示的な実装は、使う必要がなければ、特に使わなくても良いと僕は思っています。

>あ、次の所は間違ってますよ。

なおしました^^;
前回のものをコピペしただけで気づいていませんでした。
ありがとうございます。

>私の方はシリーズの間に、通り*から何度も変わりましたけどw

誰かと思ったら・・・w

>シリーズ、お疲れ様でした!

ありがとうございます。
実は、ネタに困らなくて重宝していたテーマだったり^^;

# re: R流、一瞬でわかる.NETオブジェクト指向プログラミング入門14 2007/09/06 22:34 Gushwell

お疲れさまです。とても分かりやすかったですね。

感想:
class WankumaMember {.. }
のインスタンスが、R・田中一郎さんとか、ぱぴ王子さんとか、っていう例も載せてほしかったなー、ーなんて思います。
まあ、それだとコードが増えて、「一瞬で」という目標から遠ざかってしまいますが...

# re: R流、一瞬でわかる.NETオブジェクト指向プログラミング入門14 2007/09/06 23:01 IIJIMAS

Rさんお疲れさまです。IIJIMAS@Rさんファンです。
わかりやすかったです。もし来年新人教育の機会がればぜひともこのブログを紹介します。

>R流、一瞬でわかる.NETオブジェクト指向プログラミング入門◇

冒頭の過去エントリへのリンクですが、◇のところの数字だけでなくその回のテーマとかのせていただきたいです。そうすると各エントリのテーマも「一瞬」でわかるので。

ひょっとして総集編みたいなネタがあるんでしょうか。リンクか内容に加筆されて静的サイトの方とかに置くとか考えられてるんでしょうか。

# re: R流、一瞬でわかる.NETオブジェクト指向プログラミング入門14 2007/09/07 1:25 RUN

とりあえず、お疲れ様です。

インターフェースについて自分はいまいちどうも理解できないので、今回のネタをもうちょっと掘り下げてほしいと思ったり思わなかったり(←思わなかったら不味いだろ)

抽象クラスによる継承はなんとなく程度に理解は出来るんだけど、インターフェースの使い道がよくわかりません。
いや、違うな、自分がやってる程度の仕事だとインターフェースの必要性がなさ過ぎて、インターフェースに対するイメージがわかないだけか?

と言う事で、続編
【R流、一瞬でわかるかもしれない.NETオブジェクト指向プログラミング入門〈中級編〉】
を期待して待ってます

# re: R流、一瞬でわかる.NETオブジェクト指向プログラミング入門14 2007/09/07 15:25 R・田中一郎

Gushwell さん

>お疲れさまです。とても分かりやすかったですね。

ありがとうございます。
いつも、Gushwell さんのブログで勉強させていただいているので、このように言っていただいて、とても嬉しいです。

>のインスタンスが、R・田中一郎さんとか、ぱぴ王子さんとか、っていう例も載せてほしかったなー、ーなんて思います。

なるほど、確かにそちらの方がわかりやすかったですね。
再編集する時に、参考にさせていただきます。

---------------------------------------------------------
IIJIMAS さん

>わかりやすかったです。もし来年新人教育の機会がればぜひともこのブログを紹介します。

ありがとうございます。
僕自身、理解力が低いので、賢い子には物足りなく、アホな子にはきっと喜んでいただけるネタになるかと・・・

>ひょっとして総集編みたいなネタがあるんでしょうか。リンクか内容に加筆されて静的サイトの方とかに置くとか考えられてるんでしょうか。

ありますよ。
時間ができたら、静的サイトにアップします。(いつになるとか、そういうのは言わないけれどもw)
タイトルの方も、その時わかりやすくしておきますね。

---------------------------------------------------------
RUN さん

>インターフェースについて自分はいまいちどうも理解できないので、今回のネタをもうちょっと掘り下げてほしいと思ったり思わなかったり(←思わなかったら不味いだろ)

使い分けについては、いろいろ躓いている方をお見かけするので、この辺りは改めて触れようと思っています。

>いや、違うな、自分がやってる程度の仕事だとインターフェースの必要性がなさ過ぎて、インターフェースに対するイメージがわかないだけか?

大きなシステムを作る時に、共通して使えるインターフェイスはとても重宝します。
いつも実装しているメンバってありませんか?
ひとつのメンバでも良いのです。(IDisposable もひとつだけのメンバです)

# My brother recommended I might like this website. He used to be entirely right. This publish truly made my day. You can not consider simply how a lot time I had spent for this information! Thanks! fotballdrakter på nett 2017/07/02 4:24 My brother recommended I might like this website.

My brother recommended I might like this website.
He used to be entirely right. This publish truly made my day.
You can not consider simply how a lot time I had spent for this information! Thanks!

fotballdrakter på nett

タイトル
名前
Url
コメント