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

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

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

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

Q&A

解決済

6回答

2186閲覧

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

kousuketanihata

総合スコア119

Java

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

0グッド

4クリップ

投稿2015/08/22 13:32

object指向ってなんですか??って聞かれた時みなさんならどう答えますか??

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

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

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

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

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

guest

回答6

0

ベストアンサー

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/22 18:29

LLman

総合スコア5592

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

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

kousuketanihata

2015/08/26 03:57

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

0

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

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

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

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

投稿2015/08/22 17:21

hirohiro

総合スコア2068

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

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

0

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

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

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

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

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

投稿2015/08/23 14:59

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kousuketanihata

2015/08/26 02:55 編集

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

0

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

投稿2015/08/25 15:59

swordone

総合スコア20649

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

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

0

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

投稿2015/08/25 14:27

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

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

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

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

投稿2015/08/23 03:06

yona

総合スコア18155

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問