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

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

新規登録して質問してみよう
ただいま回答率
85.48%
オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Q&A

解決済

6回答

1526閲覧

「抽象」と呼ばれるようになった理由は?

mr0237

総合スコア164

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

0グッド

1クリップ

投稿2017/04/09 03:37

編集2017/04/10 03:07

JAVAのオブジェクト指向を勉強・練習している者です。エンジニアとは関係ないような質問をしてすいませんが、「スッキリわかるJava入門 第2版 (スッキリシリーズ)」の(P463の)「詳細未定メソッド専用の書き方」にて

abstractとは「抽象的・あいまい」という意味の英単語です。

と書かれているんですが、ここに書いてあるように

先端が付け替え可能なドライバーセットを想像してください。グリップだけでは何もできず、先端を付けなければ機能しませんが、その代わり、目的に応じた先端を付け替えることでいろんな種類のねじに対応させることができます。別の言い方をすると、目的に応じて先端を付け替えられるようなドライバーを設計したら、そのようなグリップになったということです。 このグリップ部分が抽象クラスと考えることができます(厳密には違うかもしれませんが考え方として)。つまり、派生させて目的に応じた機能を実装させることを前提として設計したクラスが抽象クラスです。

のことをなぜ「抽象」と呼ばれるようになったのですか?

抽象」とか「あいまい」とか書かれていると、初心者側からすれば何のことだがよくわからないと思いますがね・・・

抽象」を辞書で引いても、「事物や表象から特定の共通性をひき出して把握すること」としか書いておりません。

せめて呼ぶなら「汎化用メソッド(クラス)」とか「派生用メソッド(クラス)」とかにすればいいと思うんですが、

「抽象」と呼ばれるようになった理由は何でしょうか?

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

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

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

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

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

guest

回答6

0

端的に言えば「オブジェクト指向の発案者がそういう風に呼ぶように決めた」が回答となりますがもう少し私見を踏まえて踏み込んでみましょう。

オブジェクト指向とは実際の世界をモデル化してプログラミングで表そうという考え方です。
そうすると基本的に、クラスはすべて実際に存在するモノである必要が出てきます。
例えば人間とか犬とか、机とか椅子とか。これらは実際に存在するモノです。

ですが、もっと便利にコーディングするために、さらにそれらをまとめたい場合があります。
実際の世界に即して考えると、人間と犬の上位に位置する概念は「生物」、机と椅子で言えば「家具」などと表現できます。
ここで「生物」や「家具」は実際に存在するモノではなく、実際に存在するモノを「抽象化」した概念です。実際のモノに対する上位の概念は、常に抽象化された概念として表されます。
つまり「オブジェクト=実際のモノ」に対する「アブストラクト=抽象」という言葉で、「オブジェクト指向」の中の一つの概念として「抽象クラス」などの概念は存在しています。

「汎化用メソッド(クラス)」などと呼んでもかまわないと思います。実際、役割としてはまさにそういう使い方をします。
ただそもそも、過去に「汎用化メソッド」などという言い方でやってきて、それが分かりにくいと思われたためにオブジェクト指向という考え方は発案されています。
オブジェクト指向では「汎用化メソッド」という考え方にもう一歩踏み込んで、どのような汎用化なのかを説明するために、「抽象クラス」という考え方を産み出しています。

投稿2017/04/09 04:04

akabee

総合スコア1947

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

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

0

抽象には複数の対象物から特性を洗い出し、共通点を探し出すという「選別する」意味があります。
対義語である具象には、対象物の特性を洗い出し対象物を「特定する」意味があります。この特性には他の対象物と「共通点」と「相違点」が含まれます。

この辺の意味合いから、抽象クラスという言葉が生まれたんだと思います。

また、単語というのは「初心者が理解しやすい単語」ではなく、「事実を表した単語」です。
それに、専門性の高い単語の意味を辞書で調べるのもあまり意味はないですね。書いてあるのは一般的な意味合いであり、本当に知りたいのは、特定の分野の中での意味なのでかえって混乱するだけのように思います。

投稿2017/04/09 05:35

yona

総合スコア18155

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

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

mr0237

2017/04/10 03:25

>この特性には他の対象物と「共通点」と「相違点」が含まれます。 と書かれているんですが、これはいったいどういうことでしょうか? つまり、 抽象には「複数の対象物から「個々で共通している点」を探し出す」 具象には「複数の対象物から「個々で違う点」を探し出す」 ということでしょうか?
yona

2017/04/10 03:35

対象物Aと対象物Bがあるとします。 AとBの共通点を探して、「AとBは〇〇という点では同じものと見なすことができる。」というのが抽象です。 AとBの相違点を探して、「AとBは〇〇という点では同じものと言えるが、××という点で異なるため、別のものだ。」というのが具象です。
guest

0

こんにちは。

なぜ派生させて目的に応じた機能を実装させることを前提として設計したクラスやメソッドの ことを「抽象」と呼ばれるようになったのですか?

この解釈は誤りです。基底クラス全てを抽象クラスと呼ぶわけではないです。(メソッドはそもそも派生できないですし。)
インスタンスを作れないクラスを抽象クラスと呼びます。

さて、instantiationはここによると具体化と訳できるようです。であれば、具体化できないクラスを抽象的なクラスと表現しても、あまり違和感はないように思います。

そして、誰かが抽象クラスと呼び、それを多くの人が受け入れた結果、抽象クラスと呼ばれるようになったのだと思います。

投稿2017/04/09 04:20

編集2017/04/09 04:21
Chironian

総合スコア23272

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

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

mr0237

2017/04/10 02:59 編集

すいません。基底クラスって「親クラス」のことでしょうか?
guest

0

ベストアンサー

せめて呼ぶなら「汎化用メソッド(クラス)」とか「派生用メソッド(クラス)」とかにすればいいと思うんですが、

このようなメソッドやクラスの目的は派生させることではなく、似たような動作を同一の操作にまとめることにあります。

例に挙げているドライバーセットで例えるなら、先端を付け替えられるようにした目的は、「付け替えること」そのものではなく、付け替えることによって様々なネジを回すことができるようにすることにあります。

したがって、派生させることを目的としたような「派生用メソッド」という呼び名はかえって不自然なのです。先端が違うだけで、やることは同じ「ネジを回す」ことなので、それを抽出してグリップ部を作ったので、抽象と呼ばれるわけです。

投稿2017/04/10 09:05

swordone

総合スコア20651

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

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

0

それは単に用語を考えた人のセンスだと思った方がいいと思います。

派生用メソッドは目的ですが、派生化することは具象化ですが具象化することの反対語は抽象化です。
抽象化することでモデルを汎用化するのが最終的な目的ですが「汎用化」でも「抽象化」でも最初に考えた方が「抽象化がしっくりくる」と考えたからにすぎないと思います。

抽象化も派生化も用語が専門的か一般的かという面では違いはないと思います。

投稿2017/04/09 03:54

KSwordOfHaste

総合スコア18394

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

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

0

私感が入っていますので注意ください。
「抽象的」には、「具体的でなく漠然としている」といった意味があります。「具象化するためには条件が必要であるもの」といった意味合いだと思います。

例えば、「パンダ」という動物は(学名としては)存在しません。これはレッサーパンダとジャイアントパンダの総称です。どちらも意味し得るものです。両者は非常に似ているので、言葉の上では総称(しかも略称)でまとめた方が便利なことはたくさんあります。ただし、「パンダ」の取引契約を締結した場合、実際の引き渡し時に互いの都合のいいほうを要求しだしたら揉め事に発展します。

「言葉の上では便利だが、具象化できず現物を扱う際に注意が必要なもの」→「単独ではインスタンスを作れず、具体的な定義を要する」といった意味合いだと思います。

投稿2017/04/09 03:51

HogeAnimalLover

総合スコア4830

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問