質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

211閲覧

java デザインパターンの実用

eggpol

総合スコア60

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/06/13 11:14

編集2019/06/13 13:16
///宣言 interface B{ } class A implments B{ } ///実行メソッド内 B a =new A();

インターフェースの方に実装したクラスを暗黙型変換するデザインパターンが
あることがSilverの教本にかいてあったのですが実用が思いつかなかったので
これの実際の使用用途を教えて下さい。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/06/13 12:56

提示のコードにはどこにも「キャスト」がないようですが。 教本には例示コードはなかったのでしょうか。
eggpol

2019/06/13 13:03

そうですね 逆でした。キャストではなく暗黙型変換でした。 直しておきます。
guest

回答2

0

この例からだと範囲が広すぎてどう言えば良いのか困りますが、世の中でインターフェイス使っているコードのほぼほぼ全部実用事例だと思って差し支えないんじゃないでしょうか。

「java インターフェイス メリット」あたりでググると最初の方に出てくると思いますが
【Java】「interface」のメリットと使い所を考えてみた

投稿2019/06/13 22:43

gentaro

総合スコア8949

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

eggpol

2019/06/14 03:26

使いどころを理解できました ありがとうございます
guest

0

ベストアンサー

それはデザインパターンだと教科書に書いていましたか?
ただ、インターフェイスを実装しているだけのように見えます。

インターフェイスについての話題は以前にもしたので、過去に書いたサンプルを転記します。

定義

java

1interface 楽器 { 2 void play(int 音階); 3} 4 5class ピアノ implements 楽器 { 6 public void play(String 音階) { 7 音階に対応する鍵盤を押す; 8 } 9} 10 11class ギター implements 楽器 { 12 public void play(String 音階){ 13 弦を押さえて弾く; 14 } 15} 16 17class リコーダー implements 楽器 { 18 public void play(String 音階) { 19 穴を押さえて吹く; 20 } 21}

呼び出し側は以下のように使ったりします。

java

1class program{ 2 public static void main(String[] args){ 3 string input = "piano"; //自分の鳴らしたい楽器を入力 4 楽器 instrument = 楽器取得(input); 5 6 //楽器が取得できたら 7 if(instrument != null){ 8 instrument.play("ド"); //取得した楽器を鳴らす(今回はピアノ) 9 instrument.play("レ"); 10 instrument.play("ミ"); 11 } 12 } 13 14 //nameを入れて、楽器インタフェースを継承した各楽器クラスのインスタンスを返すメソッド 15 public 楽器 楽器取得(String name){ 16 if(name = "piano"){ 17 return new ピアノ(); 18 } 19 if(name = "guitar"){ 20 return new ギター(); 21 } 22 if(name = "recorder"){ 23 return new リコーダー(); 24 } 25 return null; 26 } 27}

interface」多態性をコードにしたときの使い方は大体こんな感じです。
instrument.play("ド");のように、楽器という抽象的な概念に対してプログラミングするとポリモーフィズムという性質がそのコードに生まれます。

この性質を利用すれば、今後あなたが楽器を使ってコーディングをする際に楽器を実装した新しい楽器(バイオリンやフルートなど)を追加しても流用ができるようになります。

あとはあなたがそれを必要だと感じられたそのときに使えば良いかと。

投稿2019/06/14 00:49

編集2019/06/14 00:58
BluOxy

総合スコア2663

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

eggpol

2019/06/14 03:29 編集

回答ありがとうございます。 インターフェースの使い方が非常にわかりやすくありがとうございます。 私の質問の意図が悪かったのかもしれません。 例えば 楽器 g = new ピアノ() ←アップキャスト ピアノ p =new ピアノ() このようにできるようですが このようなアップキャストができる意図を知りたいです。
gentaro

2019/06/14 03:59

>このようなアップキャストができる意図を知りたいです。 回答文中に書かれてますよ。 >この性質を利用すれば、今後あなたが楽器を使ってコーディングをする際に楽器を実装した新しい楽器(バイオリンやフルートなど)を追加しても流用ができるようになります。
eggpol

2019/06/14 05:16

いわれた箇所を見直しもう一度コードを読みました。 string input = "piano"; //自分の鳴らしたい楽器を入力 楽器 instrument = 楽器取得(input); //楽器が取得できたら if(instrument != null){ instrument.play("ド"); //取得した楽器を鳴らす(今回はピアノ) instrument.play("レ"); instrument.play("ミ"); } ↑ここでポリモーフィズムが使われているのですね。 確かにアップキャストできなければ新たに作成した楽器の分まで処理を書かなければならず手間になりますね。 納得です
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問