ここから本文です

Javaでオブジェクト志向を勉強してます。オブジェクト志向は処理を部品化するとあ...

アバター

ID非公開さん

2017/12/213:36:04

Javaでオブジェクト志向を勉強してます。オブジェクト志向は処理を部品化するとありますが、要するにクラスを作って処理内容をその中に書く、、んで変数の扱いがちょっと便利、、みたいな捉え方したんですが、C言語

の関数やヘッダファイルの概念と何が違うんでしょうか。それがちょっと便利になった程度にしか捉えられませんでした。

補足いろいろな人の話を参考に聞きたいのでもうしばらく待ちます、、 放置ってわけではないです。
Cは基礎はわかりますが大規模開発の経験はありません。

閲覧数:
116
回答数:
6
お礼:
500枚

違反報告

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

mra********さん

2017/12/219:14:04

それだけがオブジェクト指向ではないです。
継承、ポリモーフィズムあたりまで学習を進めないと
恩恵が分からないと思います。

例えば、
Carってインターフェースがあり、runという処理の実装を必須とします。

Automobileって抽象化クラスがあり、
燃費や時速といった変数の情報を元に
runの基本的な実装処理を用意しています。
アクセルやブレーキと言った実装の処理が必須となります。

Automobileを継承して、燃費の異なるA,B,Cの車種を用意します。
A,B,Cの燃費と速度で実装されています。
アクセルを踏んだ時、Aは1秒後にゆっくり動きだし、
B,Cは0.5秒後に走り始めます。
ブレーキを踏むと、A,Cは30km/sで減速、Bは10km/(s^2)で減速。

んで、A:3台、B:2台、C:1台用意して、数秒置きにランダムに
交代で走らせます。2時間この処理を動かした時の
各車の走行距離と消費燃料は幾ら?とかいうプログラムを作ったとします。

Javaとかのオブジェクト指向でやるとかなり簡潔に
書けますが、手続き型言語で同じような事を実装しようとすると、
かなりコード量が増えてややこしい実装になると思います。

この回答は投票によってベストアンサーに選ばれました!

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

1〜5件/5件中

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

bas********さん

2017/12/411:24:37

私が読んできたサイトや体験談を元に考えた場合のものを書いて見ますね。

( 間違っている部分もあるはず。 自己流なので。 )

私のBlogですが。

http://blog.livedoor.jp/crackstars/archives/2017-02-22.html

http://blog.livedoor.jp/crackstars/archives/848080.html

http://blog.livedoor.jp/crackstars/archives/1497887.html

(続く)

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

ikt********さん

2017/12/217:20:41

失礼ですが、C言語の関数、どの程度理解してて、
どのくらい使いこなせますか?

極端な話、
・main() 関数だけ でもなんとかなる程度の課題しかやってない
状態ですか?
・複数の関数に分割して1本のプログラムを設計・実装
した経験ありますか? (というか、これが抵抗感なく
できる程度に体得できていますか?)

もし、関数分割の体得や経験知がない状態なら、
説明するのも難しいし、経験者のなんらか回答きいたところで、
ピンとこないんじゃないかと思います。


手続き型パラダイム と オブジェクト指向パラダイム の
違いが出てくるのは、ある程度の問題規模で、
複数のソフトウェア単位に分割して一本を組まなければ
ならない(そうしないとやってられない...)になったとき
だと思う。


ハズレ(関数分割は抵抗なくできる上で質問してる)なら、
ごめんなさい。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

2017/12/216:51:09

クラス内の変数群をクラス内の所定の関数群で管理して、
カプセル化し、無闇にクラス外からその変数群をアクセス
させないというのが、オブジェクト指向の設計理念です。

手続き型の言語であるC言語には、
このような機能、枠組みはありません。

プログラムの基本的な設計方式が、異なります。

境良夫さん

2017/12/216:18:57

オブジェクト指向を関数などのちょっと便利にしたものであると考えているようですが、実は大きく違います。
それが、多くの言語で後付けでもオブジェクト指向のプログラミングをできるようにした理由です。
オブジェクト指向の3大要素は、継承、カプセル化、ポリモフィーズムです。
・継承は、親クラスで取り上げたそのクラスの特徴を、子クラスの受け継がせること。
・カプセル化は、利用にあたって余計な変更を排除する仕組み。
・ポリモフィーズムは、クラスの間で、似たような機能は同じような操作で可能にすることです。

hog********さん

編集あり2017/12/214:37:23

javaと言うより、抽象化やカプセル化と言ったホントOOPの基礎的概念から勉強した方がいいよ。

そうそう、cみたくヘッダファイルは無くても、インターフェースクラスが近い存在かな?(ヘッダとは意味合いが違うけど)

cやってんならc++やった方がOOP理解し易いかもね〜

でもって、それでも判らなかったら、この業界は不向きと思った方がいいよ〜

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

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

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

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

閉じる

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

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

閉じる