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

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

ただいまの
回答率

90.47%

  • Java

    14101questions

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

object指向ってなんですか??

解決済

回答 6

投稿

  • 評価
  • クリップ 4
  • VIEW 1,090

kousuketanihata

score 111

object指向ってなんですか??って聞かれた時みなさんならどう答えますか??
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 6

checkベストアンサー

+7

object指向ってなんですか??

オブジェクトを中心にする考え方です。

オブジェクト指向でのオブジェクトとは「対象」や「目的」ですが、
それは人間にとっての「対象」や「目的」です。


どんな言語も実行時には平等に機械語になりますが、
手続き型とオブジェクト指向では開発効率が違います。

アセンブラのフラグとジャンプ命令を抽象化したものが
C言語などのif文やfor文などの制御文で、
これはまだ機械寄り、機械(へ)の手続き、命令寄りの枠組みです。

これはアセンブラよりは分かりやすいですが、開発が大規模化していくと、
制御文のネストが重なったり、関数の引数が増え、分かりにくくなります。


対してオブジェクト指向では、人間の概念や分類に近づけます。

たとえば、if文で呼び出す関数を分類してたのを、
継承と多態で実現するようにすると、
部分的なコード量は増えますが、全体の構造が分かりやすくなります。

if文のネストは無機的だから、重なると把握しにくいですが、
継承や多態は人間からみて意味があるから分かりやすいです。


具体的な例として、RPGのゲームキャラの
バリエーションを増やしていくところを想定しましょう。

たとえば、キャラを戦士系と魔導士系に大別して、
騎士クラスや重層歩兵クラスは戦士クラスを継承して、
白魔導士と黒魔導士のクラスは魔導士クラスを継承するとか。

前者はattack、後者はmagickという多態したメソッドを使います。
(これは例なので適当ですが、もっと良い設計があるでしょう)

こんな感じでキャラが100種類まで増えたとき、
if文やswitch文で関数呼び出しが100個分岐するのと、
attackやmagickなど数個のメソッドを多態させるのとでは、
複雑性や可読性、ひいては保守性が大きく違ってくるでしょう。


ここでやはり、機械側は機械語を読むだけだから、
べつにif文を使おうが多態を使おうが最終的には同じです。
でも、人間側が無意味な複雑性についていけなくなるのです。

あるいはたとえば、Windowsはフォルダでファイルを分類しますが、
フォルダがなくても、べつにOS自体は問題なく動かせるでしょう。
でも、人間側がフォルダなしでファイル1万個は管理できません。それと同じです。

カプセル化や継承や多態、責務の分散協調、デザインパターン、UMLとか、
関連する概念が多いので分かりにくいかもしれませんが、
オブジェクト指向の基本は人間にとっての分かりやすさです。


最後に、補足を3つしておきます。

まずひとつめは、人間の対象や目的とはいっても、
人間の現実や言語をそのままシミュレーションするわけではありません。

ドメイン(人間が関心ある専門領域)をドメイン層としてモデリングします(DDD)が、
別の部分、たとえばデータベースに近いレイヤは、機械(RDB)の都合に合わせます。
ただこれは、オブジェクト指向本来の意図から離れます(インピーダンスミスマッチ)。

また、ドメインを言語として抽出(DSL)すると、自然言語とはまた別になります。


ふたつめは、抽象データ型から発展したクラスを重視するC++やJavaと、
オブジェクト間のメッセージングを重視するSmalltalk(やLL言語)では、
考え方が異なります。たとえば、ダックタイピングを許容するかどうかとか。

みっつめは、単一継承を深く分類していく、というやり方は今はあまりせず、
Javaは継承より委譲を使ったり、Rubyはミックスインを使ったり、いろいろあります。

ただ、このあたりの細かい事情は、学習の最初で深く気にすることでもないと思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2015/08/26 12:57

    ありがとうございます。 RPGのたとえ すごくわかりやすいです。
    補足のDDDとかまだわかってないので調べます!!

    キャンセル

+6

誰にどういう状況で質問を受けたかによります。

天邪鬼な回答が求められているなら、「プログラミング手法の一つ」等。
友人に何気なく聞かれたなら、「Googleに聞いてくれ」って答えるでしょう。
自分が教師で学生に聞かれたなら教科書の該当ページにある説明をすると思います。

試験でオブジェクト指向を端的に述べよというような問題に回答するなら
「オブジェクト同士の相互作用として、システムの振る舞いをとらえる考え方」
のようなweb辞書やwikipediaから拝借したような回答になると思います。

知らない人に概要を理解させる目的なら、
手続き型と呼ばれる手法では、手順書を作成しそれに従ってコンピュータに仕事を行わせ結果を求めるのに対し、
オブジェクト指向では、目的を達成するための機能を備えた道具(object)を複数設計し、
コンピュータに設計書から必要なだけ生成させ、それらに命令を与えることで結果を得ようとする。
のように比較して回答するように思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+3

現行のソフト開発をする上で基本になっている、汎用部品を開発する為の概念(パラダイム)です。

歴史的な視点で話すと…
構造化プログラミング主流の時代(MS-DOS〜Windowsの過渡期の頃)に、このままでは開発効率が上がらない。という問題の解消を期待されて日本でも普及し始めたパラダイムです。
それまでは1アプリケーション開発程度の視野で行われてきた処理の設計をOSレベルに広げ、より汎用的で結合度の低い形にまとめる為の考え方として注目されたのですが、当初は "オブジェクト" という言葉に惑わされた設計が多くて導入がうまく進まず迷走するパターンも多かったと言われてます。

どういったレイヤーの処理なのか。どういった操作単位にするのか。まずそういった実現度を定めておく必要があります。
結合度を低くする設計を目指す中で、データをどのように操作するか。使う視点で考えると、オブジェクトに対するメッセージをどのように扱っておけば、汎用的(疎結合)にできるのか。という部分を如何にまとめてオブジェクト(部品)として抽象化するかが鍵になります。

このパラダイムを利用することを考えてみると、
前述の事柄を考える為の指針となるものなので、実際には開発対象をとりまく環境(OS, 各種API, 実装言語)とその設計を理解し、それらと協調する部品設計を行うことが大切になってきます。

…こんな感じに解釈してます。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2015/08/26 11:54 編集

    ありがとうございます!! 結合度を下げるっていうのが大事なんですね

    キャンセル

+1

「10年くらい前からIT業界で流行しているシステム開発時の手法」ですかねー。
オブジェクト「指向」なので「手法」だと若干ずれていますが、オブジェクト指向以前と以降でお話する感じです。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+1

今色々な家電がいくつかのボタンの操作で色々なことができますが,
オブジェクト指向も同じような設計を行うことだと思いますね.
情報をまとめた「物」に色々な「機能」を付けて,外からはその「機能」を呼び出すだけで
複雑な処理は内部がやってくれる,そんなイメージだと私は認識してます.

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

相手のレベルにもよりますが下記の話をすればある程度は通じるのではないでしょうか。

オブジェクト指向とはパソコンとマウスのようなものです。店に行けばたくさんの会社から様々なマウスがでています。しかし、ほとんどのマウスも差し替えて使うことが出来ます。これは全てのマウスがかきの二つを最低限保証しているからです。
・「パソコンに接続できる」
・「クリックできる」
・「クリックされたことをパソコンに送る」
さて、オブジェクト指向のキーワードについて補足させていただきます。
・クラス:パソコンやマウス
・インスタンス:SurfacePro、店に売り出されているマウス等
・継承:「上記のマウスの最小限機能」と「各会社のマウス」または、「シリーズの後継機」と「その前」の関係
・多相性:「どんな会社でも繋ぐことができる」や「繋ぐ方法は様々、USB,BT,WiFi」
・隠蔽:マウス内の処理は外部から操作できない、使う側はクリックするしかない。また、データのやり取りや内容は外部からは見えない。


上記の例は簡易的なものです。ドライバーとが…とかツッコミは無しでお願いします。ごめんなさい。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

関連した質問

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

  • Java

    14101questions

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