ここから本文です

javaはオブジェクト指向のプログラミング言語であるそうですが オブジェクト指...

ris********さん

2013/6/721:16:30

javaはオブジェクト指向のプログラミング言語であるそうですが

オブジェクト指向に付いて色んな本やサイトで説明してありますが私の頭ではどうも理解しきれません!!

とりあえずjavaに限らずオブジェクト指向のプログラム言語ではオブジェクトと言われる物に対してメソットと呼ばれる命令文をひっつけて操作する的な感じ?

例えば「こんにちは」という文字があります

この「こんにちは」という文字の色を赤くしなさいというプログラムを書く場合

この「こんにちは」という文字をオブジェクト(物)と考えるなら

色を赤に変えるという命令文(メソッド)をオブジェクトに与えてやることでプログラムが完成するということでしょうか?

そしてメソッドといわれる命令文がjavaに予め用意してあり

例えば先程の「こんにちは」という文字に対して行える命令文は

■文字の色を変える

■文字の大きさ(サイズ)を変える

■文字の文字数を調べる

などとオブジェクトの種類によって使えるメソッド(命令文)が決まっていて

オブジェクト(物)には種類があり、例えばさっきの

「こんにちは」というのは文字列ですが

「1 2 3 4 5 6 7」というのは数字です

このように物(オブジェクト)の種類の事をクラスといい

オブジェクト(物は)は必ず、何かしらのクラスに定められている的な解釈でよろしいのでしょうか?


(回答して頂いた内容はjavaを学習していく上での備忘録的なブログを書いておりますのでそちらに転載させて頂きます)

補足meigorr様、k032yf様 回答有難うございます

入門書を見ながら一つ一つ進んでいっているのですが、言葉の意味がよく理解できずつまずいており質問させて頂いたのですが

やはりイマイチ、ピンときませんk032yf様の言う通り深く考えず取り敢えず手を動かしてみます。

お二方とも有難うございました。

閲覧数:
426
回答数:
4

違反報告

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

プロフィール画像

カテゴリマスター

qui********さん

2013/6/811:08:08

オブジェクト指向が過去の様々なプログラミングの考え方の上に成り立っているので、その辺を踏まえていないと(無理とはいいませんが)なかなか考え方を捉えるのが難しいかも知れません。逆に真っ白なところからオブジェクト指向を覚えた方が雑念が入らなくていい、という説もあるみたいですが。

私は、オブジェクト指向の考え方を「大体わかったな」と思ってそれらしいプログラムを組める(と自分で思う)までに大体一年かかりました...少なくとも入門書一冊読んでハイ分かった、というシロモノではないと思います。
でも、だからといって「深く考えなくていい」というのは誤り。考えなしで惰性で手を動かしていても身につくものではありません。手を動かすのはいいことだと思いますが、同時に考えていって下さい。(そのカテゴリでの回答者の過去の回答をいくつか見てみると、その人のスタンスがある程度想像できると思います。全部を真に受けないほうがいい場合もあったりするので...)

オブジェクト指向でソフトウェアを作るというのは、プログラムの設計(プログラムの構造を決めること)から実装(とりあえずプログラムそのものを書くこと)まで、それぞれの段階でそれぞれにオブジェクト指向的な考え方を適用して行くことになります。
なので、「オブジェクト指向'プログラミング'」の本だけ読んでいてもオブジェクト指向は多分身につきません。また、「クラスを使えばオブジェクト指向」「クラスを使って継承しまくればオブジェクト指向」見たいな説明をする人、書物もあるようです...クラスはオブジェクト指向プログラミング(実装)のための道具であるのは確かですが、それ自体がオブジェクト指向の本質ではないのに。

まず。ソフトウェアというのは、何かの問題を解決するために現実の世界のごく一部を切り取って、コンピュータの上で処理をしていくものです。この「現実の世界のごく一部を切り取る」ことをモデリングといいますが、処理したい問題の性質によってこの現実の切り取り方は様々に変わります。あなたが学生であれば、「学校の世界」の処理であればあなたは入学して授業を受けて試験を受けて卒業していく存在であることに注目するでしょうが、「家庭の世界」であれば両親から生まれて育って学校に入って卒業して...ということが興味の対象でしょう。なにかやりたい事があって、そのために世界の見方・捉え方を制限していく、これを考えないで「オブジェクト」を考えても発散していくばかりでまとまりません。もちろん、「やりたい事」が変わると世界の捉え方も変わっていきます。世界の捉え方が変わると「なにがオブジェクトか」すら変わりますから。

で、オブジェクトは「責務」を持ちます。「ある仕事を任されたらさらなる指示なしに処理を終えられる」ということ。自分自身で全部の作業をする必要はありませんが、他のオブジェクトを使ったり情報を聞いたりしてとにかく処理を遂行できる、ということ。
その意味では、
> 色を赤に変えるという命令文(メソッド)をオブジェクトに与えてやることでプログラムが完成する
はいい線を行っている捉え方だと思います。上位からは「文字列オブジェクト」に色を変えるという指示を出す。オブジェクトは(なんとかして)色を変える動作をする、ということで。

しかしながら、今回の「色を変える」プログラムであれば、アルファベットであるか数字であるかとかは意味を持ちません。それはちょっと違う話で、オブジェクトとしてよく使われるもので、そうするとよく使われる処理や性質は毎回作るよりもとりあえず持っておこう、という考えから(便利のために)備えているものです。
本来は「オブジェクトの種類によって使えるメソッド(命令文)が決まって」いる(当然に決まっている、与えられる)のではなく、このオブジェクトにはこういうメソッドが必要でフィールドが必要で、と作り上げていくのがソフトウェア作成(敢えてプログラミングという言葉を使いません)の一つの作業です。しかし、よく使われるモノについては毎回いちいち作るのは無駄。あちこちで使われる機能を予め盛り込んで作っておけば便利に使えるでしょう。そういう便利部品の「ライブラリ」がJavaは充実しています(多すぎて把握できない、の声もあり)。まぁ、文字列ぐらいだとあまりによく使うので「基本型」に分類されているようですけれど。

> 物(オブジェクト)の種類の事をクラスといい
> オブジェクト(物は)は必ず、何かしらのクラスに定められている
Javaにおいてはそうですね。

質問した人からのコメント

2013/6/8 18:08:33

素晴らしい回答を有難うございます、また見ず知らずの私のためにお時間を割いて頂いたことに深く感謝いたします。

正直今の私の知識では漠然としか理解しきれていませんが

これから勉強を進めていきquickbrwnfoxjumpsoverthelazydog様の回答を少しずつ理解していけるよう 頑張りたいと思います。

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

1〜3件/3件中

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

epe********さん

2013/6/800:45:43

他で回答した内容のコピペですが、下の説明でどうでしょうか。

###############################################
オブジェクト指向をざっくりいうと役割分担しっかりして作りましょうという考えです。

ファミレスを例に考えるとわかりやすいかと。

在庫担当:料理の在庫が足りなくなったら発注する
調理担当:注文が入ったら料理を作って棚に出す
注文受け担当:客に呼ばれたら注文を受け、調理担当に連絡する
配膳担当:料理が出来上がったら、客に出す
レジ担当:席にある伝票を拾って、レジで客から金をもらう
という感じに担当(オブジェクト)ごとに何をやる(機能≒メソッド)かを
分けて考えましょうというやりかたです。

で、分けて考えるとたとえば調理担当は
何がいくらなどということを知らなくてもいいので
考え方としてすっきりします。


注文受け担当と調理担当とのやり取りは
「注)~何個注文はいりました。」
「調)~何個注文承りました。」というような
マニュアルを決めておいてそれにしたがってやります。
(「オブジェクト同士のメッセージのやりとり・メッセージパッシング」と呼びます)


念のため、各オブジェクトは1機能しかもてないのではなく下みたいに
複数の役割を持たせてもかまいません
バックヤード担当:
料理の在庫が足りなくなったら発注する
注文が入ったら料理を作って棚に出す
フロント担当:
客に呼ばれたら注文を受け、調理担当に連絡する
料理が出来上がったら、客に出す
席にある伝票を拾って、レジで客から金をもらう

mei********さん

2013/6/722:12:14

オブジェクトは、データ(モノ或いはコト)と機能(振舞い、処理)を一つのカプセルに収容したものです。
クラスは、その内容について規定・名付けたものです。
外部からこのカプセルにアクセスして、カプセルの内容に規定に沿った変更を行った上で動作させることが出来ます。
クラスの規定を満足するオブジェクトを複数作ることも出来ます。
単純に物といえないのでオブジェクトと称しています。

k03********さん

2013/6/721:46:04

rising4718さん

オブジェクト指向
言葉遊びが好き?

プログラムを組み、基礎力を高める。

半年に1回くらい、「オブジェクト指向」これ何?
で十分。

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

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

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

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

閉じる

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

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

閉じる