ここから本文です

javaの勉強をしているのですがオブジェクト指向とはなんですか。よろしくお願いい...

chi********さん

2018/9/1118:27:57

javaの勉強をしているのですがオブジェクト指向とはなんですか。よろしくお願いいたします。

閲覧数:
49
回答数:
3

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

あみやさん

2018/9/1119:30:38

ソフトウェアは、大きく分けてデータ(素材)と処理(道具)という2つの要素によって成り立っています。
この2つのどちらを中心に考えるかという問題です。

旧来の方式は、処理(道具)を作ることに主眼が置かれ、作った道具に対してデータ(素材)を渡して処理をさせる。という考え方でした。
穴を空けるドリル(関数)をまず用意して、そこに板(データ)を渡す。という考え方で、
ユーザーは渡す板の種類に合わせて適切な道具を選ぶ必要があります。

オブジェクト指向は、逆にデータ(素材)を中心に物事を考え、データの扱いはデータ自身に責任を持ってもらおうという考え方です。
穴を開けられる板(クラス)を板の種類毎に作り、板自身に穴を開けろという命令(メソッド)を持たせます。
板はその命令を受けると、自分自身で自分にあった方法で穴を開けます。
ユーザーはその板の素材を気にする必要は無く、「穴の空いた板」という結果だけを受け取る事ができます。

もうちょっと具体的な例では、例えば曜日を示すweekという変数があったとします。
それの実態はintで、0から6までの数値に日曜から土曜までの意味を割り当てています。

旧来型ではこのweek変数を扱う為に、
weekの数値を曜日名に変換るweekToString(week)関数や
その逆の StringToWeek(String)関数
○日後の曜日を調べるweekAdd(week,int)関数等が用意されている事で、簡単かつ安全に扱う事ができます。

オブジェクト指向では、weekは変数型ではなくクラスとなり、
week型を扱う様々な関数はメソッドと形を変えてweek自身の一部になります。

それらの機能そのものは全く同じですが、最大の違いはweekの実際の中の数値に直接触れられるか否かです。
week変数の場合は所詮変数ですから、ユーザーは関数を通さずともその値を自由に変えられます。
翌日の曜日を見るのに、week++; とやってもいいですし、何かの気まぐれでweek=30;と直接代入しても構いません。
もちろんそれらは論理バグの温床になりますが、とりあえずは動きます。

それに対してweekクラスの場合、望ましい実装は、実データは内に抱え込んで自分以外には触らせない物です。
0から6までの数値で曜日を表現するのは同じですが、それは直接表に出しません。
プロパティやメソッドを通じて値を出し入れは出来ますが、不正な値はその時点で自分でチェックして弾きます。
不正な値が中の変数(フィールド)に代入される事はけしてありません。
データ自身にデータの責任を持たせるというのはこういう事です。
結果として、より安全にデータを扱えるようになります。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

さん

2018/9/1118:49:04

んー概念から入るよりは
コードを書いた方が手っ取り早いと思う。

オブジェクト志向ってワードは
人によって考え方が大分違ってきて、
一種の宗教になってる。

超適当に言うと「クラス」という設計図を使いまわして
プログラム組もうぜ~って感じ。

Javaには
「クラスとインスタンス」
という概念がある。

なので、
まずこれをしっかり理解して、
コードを書けるようになった方がいい。

次点で
「メンバとメソッド」。

これ等が書ける様になったら
オブジェクト指向が何なのか、少しずつ見えてくるはず。

↑のことを知る前にオブジェクト指向を知ることなんて、
中々難しいよ。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる