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

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

ただいまの
回答率

90.52%

  • オブジェクト指向

    284questions

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

  • オブジェクト

    91questions

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

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

解決済

回答 6

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 510

mr0237

score 143

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

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

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

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

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

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

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 6

+3

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

こんにちは。

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

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/10 11:56 編集

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

    キャンセル

  • 2017/04/10 12:09 編集

    「親クラス」と言う用語は他の意味でも使われるので、なんとも言えません。

    基底クラスはJavaではSuperクラスと呼んでいるようです。
    http://www.weblio.jp/content/%E5%9F%BA%E5%BA%95%E3%82%AF%E3%83%A9%E3%82%B9

    キャンセル

+1

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/10 12:25

    >この特性には他の対象物と「共通点」と「相違点」が含まれます。

    と書かれているんですが、これはいったいどういうことでしょうか?

    つまり、

    抽象には「複数の対象物から「個々で共通している点」を探し出す」
    具象には「複数の対象物から「個々で違う点」を探し出す」

    ということでしょうか?

    キャンセル

  • 2017/04/10 12:35

    対象物Aと対象物Bがあるとします。
    AとBの共通点を探して、「AとBは〇〇という点では同じものと見なすことができる。」というのが抽象です。

    AとBの相違点を探して、「AとBは〇〇という点では同じものと言えるが、××という点で異なるため、別のものだ。」というのが具象です。

    キャンセル

checkベストアンサー

0

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • オブジェクト指向

    284questions

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

  • オブジェクト

    91questions

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