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

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

新規登録して質問してみよう
ただいま回答率
85.48%
プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

3回答

301閲覧

抽象クラスは実際どういうケースで使われるのか?

k0908

総合スコア102

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

0クリップ

投稿2018/09/28 04:46

オブジェクト指向について勉強しています。
抽象クラスは実務でどういう形で使われるのでしょうか?
いまいちメリットがよくわからず・・・。
よろしくお願いいたします。

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

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

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

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

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

mather

2018/09/28 05:52

ちなみに、どの言語の話でしょうか?例えばJavaなら抽象クラスの他にインターフェースがありますが、インターフェースは理解した上で抽象クラスの具体的な使い方を質問しているのでしょうか?
guest

回答3

0

解決されたようですが思うところを回答してみますね。

そもそもオブジェクト指向は「手段」であって必ず使わなければできないというモノはありません。

なので、ちょっと言い方良くないですが、
メリットだのなんだのを考えなければいけない状態で無理して使う必要があるものでもありません。
使わなくてもモノは作れます。もちろん使ってもモノは作れます。
その出来上がったシステムを使う側は要件通りに動けば中身なんてどうでもいいわけです。

さて、
おそらくこの質問を投稿するまでにネットで検索したり書籍などで考え方や基本などを学ばれたかと思います。
中には「5分でわかる!」なんて触れ込みの記事も目にしたかもしれませんね。

そのような記事は、検索すると上位に来ているものであれば、
それだけ注目度が高かったり読んだ人に何かしら影響を与えたり、評価が高いものと思われます。
つまり、そのような記事を以ても「いまいちわからず」という状態なのであれば、
ここであなたを納得させられる内容は、そのような優秀な記事よりも優秀な記事を回答として
書かなければなりません。

それは読む側からは「5分で読める、わかる」ものであっても書く側から「5分で書ける」ものではありませんね。
時には回答者自身の知識の裏付けをとったりミニマムコードを組んだり動作検証したり
質問者さんが理解できるようにかみ砕いたり文章にも工夫をしているかもしれません。

そこまでの時間や労力を割いて、優秀な記事や書籍以上のものが書けるのであれば、
とっくにネット上に記事を書いていたり、書籍を出しています。

つまり。
今追い求めるのは「オブジェクト指向ってなに」「抽象クラスってなに」「メリットって」ということではなく、
ちゃんと間違いのないプログラムを書くことです。
それが学校の勉強や新社会人であってもです。

メリットは生まれるものではなく、自分自身の力で生むものです。
プログラムは勝手に動くものはなく、自分自身の力で動くように組むものです。
プログラムは組んだようにしか動きません。
責任は参考にした記事やコピペしてきた記事を書いた人ではなく、
そのプログラムを作った他でもない自分自身です。

全てに意味のあるコードを書いてください。
それだけでどんなものでも「メリット」は作り出せます。引き出せます。

それがわからないうちは、手を出す必要はありません。
道具の使い方がわからないのと同じなので、そのメリットも最大限引き出すことはできませんね。

今、あなたもそれなりにコードは組んできたかと思いますが、
そのコードすべてに意味を持たせていますか?
オブジェクト指向を適用していない・できていないコードでも良いです。
そのコードで使っている関数はメリットを最大限引き出せていますか?
そこから考えてみてください。

参考まで。

投稿2018/09/28 10:00

m.ts10806

総合スコア80850

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

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

k0908

2018/09/30 04:04

ありがとうございます。とても参考になりました
guest

0

ベストアンサー

たしかに勉強していると使用用途がわからず止まってしまう部分ではあります。
いろんな開発をしていくうちに分かるというのが経験則なのですが、
実務上での説明となると結構難しいですね。

実務上となると結構複雑というか大きな規模のものになりますし、
それを簡易的に説明するのが難しかったり、そもそもそういう話ができない場合もあります。

個人的に抽象クラスは以下のときに利用することが多いです。
・サブクラスの処理を共通化できる処理がある。(普通の継承と同様)
・サブクラス毎に呼び出しは同じだが、処理が異なるものがある(ココ重要)

なるべく伝わりやすい例でいうと、電話という抽象クラスがあり、サブクラスに

  • 黒電話(ダイヤル回すやつ)
  • ガラケー
  • スマホ

というものがあったとします。
で、それぞれ電話をかけるという動作があるべきですが、かけ方は物によって異なります。
黒電話はダイヤルを回して電話をかけますし、
ガラケーはボタンを押して電話をかけます。
スマホはディスプレイをタッチして電話をかける
というように異なる処理になるので、親クラスで電話をかけるという処理を書くことができません。
しかし、電話をかける動作があることは明確にしておく必要があるので、抽象メソッドとして定義しておきます。

あくまでも説明のための例で、本当にこういう実装を実務でするかはわかりません。
一番の理解のためには少し規模が大きめのものを何かしら作ってみることです。

投稿2018/09/28 05:22

dice142

総合スコア5158

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

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

0

抽象メソッドを定義できます。
抽象クラスから継承させたサブクラスで親のクラスの処理変えれますので、サブクラスごとに処理変えたいときに使えます

投稿2018/09/28 04:52

yokan

総合スコア16

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

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

k0908

2018/09/28 04:54

初学者な者ですみませんが、抽象メソッドを定義できると何が嬉しいのでしょうか?
yokan

2018/09/28 05:12

例えば動物クラスがあったとします。そこに抽象メソッドで、食べるメソッドを作ったとします。そして動物クラスを継承して人間クラスと、鳥クラスをつくりました。人間クラスの食べるメソッドは箸を使って食べるように実装できます。鳥クラスの食べるメソッドはついばむように実装できます。こういったように親クラスのメソッドをオーバーライドできます。
yokan

2018/09/28 05:14

実務では膨大なコードやクラス量になるので、クラスごとに実装が揃っていることも可読性をあげる一つの方法かなと考えています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問