c言語的にjavaを教えて (55レス)
1-

1
(3): 2018/05/08(火)22:54 ID:CKiuQAUI(1/2) AAS
仕事でc言語をつめ込まれた直後にjavaやらされて混乱しとるんじゃが、オブジェクト指向とモジュール構造の差異を教えてほしい

いろいろ調べて自分なりの結論として

・オブジェクトとは、操作に対する「一連の手続き」である
e.g.
操作[電源ボタンを押す]→オブジェクト[PC]→起動[画面がつく]

・モジュールとは「機能or部品の最小単位」である( ≒ 関数)
e.g.
引数[電源ボタンを押す]→main[下位モジュール呼び出し]→(モジュールa[PC内の電源を起動]→モジュールb[プラグから電力を給電]→モジュールc... 以下略...モジュールz[ディスプレイに信号送信])→起動[画面がつく]

つまりモジュールは部品に過ぎないから複数個作って繋げて「一連の手続き」にする必要があるけど、オブジェクトは「一連の手続き」単位だからそれ単体で目的が達成ができる
オブジェクトの中身、処理部分でモジュールが使われていて、スーパークラスとサブクラスみたいな親と子の関係性
省1
2: 2018/05/08(火)23:08 ID:fJWr41VM(1) AAS
すまんが3行で
3: 2018/05/08(火)23:38 ID:CKiuQAUI(2/2) AAS
オブジェクト指向と
モジュール構造って
なにがちがうん
4
(1): 2018/05/09(水)00:31 AAS
>>1
細かなイディオムに気を取られるな
CとJavaなんて本質的に何ら違いはない
5: 2018/05/09(水)07:25 ID:1fXIfimd(1) AAS
その程度のことも自力で理解できないなら向いてないから辞職しなよ
6: 2018/05/09(水)12:17 ID:rGrv3OR8(1) AAS
>>4
まあ実際のとこ判らんくても実務ではなんとかなるかもしれんけどjava bronze試験通らんとあかんのよ
どうせ試験までやるならきっちり理解して先進みたいなーと
7: 2018/05/10(木)14:33 ID:Hy3BGaBt(1) AAS
わからないからふんわりした批判しかできない良い例だね
8
(1): 2018/05/10(木)19:25 ID:4Q48RAux(1) AAS
オブジェクト指向には色々な要素があるけど、まず構造体と同じようにデータをある単位に分割して、そのデータを操作できる関数をメソッドに限るってのが基本と思っていい

Javaなら後は手続き型と何ら変わりなくて
・オブジェクト(データの塊)を作る
・メソッドを順番に呼び出して欲しいオブジェクトを作る
・適宜出力
これだけ
9: 2018/05/10(木)21:10 ID:TJlxQGib(1/2) AAS
>>8
丁寧にありがとう

今日教科書一通り読み終わって、>>8を見て認識が結構変わった

c言語的に言うなら、モジュールは寧ろクラスに構造が近くて、関数はメソッド
ここだけ見ればやってることはさほど変わりないんだね

じゃあ何が違うのかと言えばただ1点、オブジェクトを作るか否か。
で、オブジェクトをc言語的に表現すると「構造体と関数を目的に応じてまとめたもの」。

こんな感じで合ってるかな
10
(1): 2018/05/10(木)21:46 ID:TJlxQGib(2/2) AAS
ここまで考えてみて、「でもオブジェクトの挙動って全部クラスに書いてあるんだから、一々インスタンス化せんでも全部クラスでやりゃ良くない?」ってとこに戻ってしまった
オブジェクトを作る利点って何があるのかな・・・
11: 2018/05/11(金)07:32 ID:kdHneLaR(1/6) AAS
そう思うならインスタンスを作らず延々クラスを書き続ければ良い
new禁止な
12
(1): 2018/05/11(金)08:56 ID:tjPjQfiQ(1/3) AAS
>>10
敵Aと敵BのHPは同じクラスフィールドで管理するより別個のインスタンスフィールドで管理した方が楽でしょ?
Aさんの残高とBさんの残高は別個のインスタンスに分けた方が処理を書くとき混乱しにくいでしょ?
13
(3): 2018/05/11(金)13:02 ID:kdHneLaR(2/6) AAS
クラスはCで言うところの構造体を拡張したもの
中身の変数やインスタンスがメンバー 関数がメソッド

インスタンスは他人が書いたAPIライブラリーから使用したいクラスを選んで
実体化したもの 基本実体化しないと利用できません残念

クラス メンバー メソッド が解ってCの知識があればあとはコードかけるよ
オブジェクトは完成品かしら自分はあんまり使わない言葉だから適当
14: 2018/05/11(金)13:48 ID:tjPjQfiQ(2/3) AAS
>>13
メソッドはあくまでメンバ関数では?(メソッドもメンバであるという意)
あえて対称的な用語を用いるならフィールドとメソッドでしょう

インスタンスを他所のライブラリ中クラスの実体化に限ってるのはシンプルに意味不明なんだけど何か理由があるの?
15
(1): 2018/05/11(金)14:01 ID:kdHneLaR(3/6) AAS
ごちゃごちゃ言うなC的にシンプルに説明してる
16: 2018/05/11(金)14:14 ID:tjPjQfiQ(3/3) AAS
>>15
>>13 の前半みたいなのはシンプルに説明してるんじゃなくて間違ってるって言うんだよ

後半についてはまぁ理解はできんが納得はできる
17: 2018/05/11(金)14:27 ID:kdHneLaR(4/6) AAS
うるせえなじゃあお前が説明しろ
ルールは同じ文字数で言葉遊びはすんな
出来なきゃ黙ってろ
18: 2018/05/11(金)14:42 ID:kdHneLaR(5/6) AAS
俺が間違ってたか
大雑把にメンバー変数メンバーメソッドがクラスの中身な
19: 2018/05/11(金)18:39 ID:i/s7a+bH(1) AAS
やっぱり、ホリエモンのそっくりさんの社長が出て来る漫画に出てくる
最近の子はオブジェクト指向から入るからうんたらかんたら

っていう悪口が間違っていることがよくわかる

はじめからJavaを学んでオブジェクト指向から入った方が良い
20: 2018/05/11(金)18:43 ID:ISO4iwOk(1) AAS
そんな本職のプログラマが書いたわけでもないネタ漫画を
真に受けたらアカンと思うよ
21: 2018/05/11(金)22:18 ID:zN/yjFOx(1/2) AAS
>>12
あーなるほど

上の例で言えば、例えばインスタンス化せずにEnemyHPクラスで全てのHPを管理しようとした場合「敵AのHPを計算・出力したあと敵BのHPを計算・出力する」って順々の処理は出来るけど、
範囲攻撃して敵AとBのHPを同時に計算しなきゃならない時とか、敵Aを攻撃したあと敵Bを攻撃すると敵AのHPが上書きされちゃうから、一戦闘でエンカウントしうる敵の分、それぞれの状態を保存するようなメソッドなり変数なりなんなりが別途必要になったりする。
でもオブジェクトを適時作る機能 =インスタンス化があれば基本計算・出力機能だけで完結できるってことよね?
22: 2018/05/11(金)22:46 ID:zN/yjFOx(2/2) AAS
いやこの場合出力するってのは余計か

メモリ上にデータを展開して都度そのデータを再利用したり加工したい場合、インスタンス化があるとソースコードが随分スマートになるってところが最大のメリットと理解したのじゃが
23
(1): 2018/05/11(金)22:49 ID:kdHneLaR(6/6) AAS
パラメータのintの多次元配列作ってをごちゃごちゃいじるのより
キャラ一体分のクラスを作ってそれを必要数複製した方が記述がスマートになるよってこと
24
(1): 2018/05/11(金)23:01 ID:/LKYW3YY(1) AAS
C言語が理解できるなら、Xのソースを読んでみよう。
その後、高橋真奈著やさしいJavaを読もう。
あら不思議、スラスラ読めます。
おわり。
25
(1): 2018/05/12(土)00:04 ID:qaTekKU3(1/2) AAS
Javaとオブジェクト言語を理解するにはRPGで例えると
いちばんしっくり来るのはほんまやな

スッキリJavaが人気本になるわけやで
26: 2018/05/12(土)00:11 ID:+tHIUeTw(1) AAS
Javaは意図的な分割が行える
27
(1): 2018/05/12(土)08:27 ID:FziDFmpA(1/2) AAS
>>23
c言語的なアプローチなら敵状態パラメータをヘッダファイルに構造体として全部書いちゃって、呼出側は その構造体をデータ型としたEnemyAとかEnemyB変数に入れるみたいなやり方であれば、呼出側の負担は殆ど変わらないんじゃないかなって思ったんだけど、
>>13で言ってるようにオブジェクトは構造体を拡張したもの = メソッドまで含んでるってとこが肝なのかな?
28
(1): 2018/05/12(土)08:34 ID:FziDFmpA(2/2) AAS
>>24
>>25

外部リンク:www.amazon.co.jp

外部リンク:www.amazon.co.jp

これか、買ってみる!
29
(1): 2018/05/12(土)09:32 ID:0A/PAli+(1) AAS
>>27
その通り
例えばint HPが構造体の要素なら加減乗除何でもできてしまうわけだけどクラスのprivateフィールドだと例えば
enemyA.damage(Power attacked)と
enemyA.heal()とに操作を制限できるんだよね
だから変な操作をしてしまえない
30: 2018/05/12(土)19:34 ID:qaTekKU3(2/2) AAS
ゲームに登場するクラスがEnemyだけだったら
そこまでオブジェクト指向のありがたみは感じないけど

EnemyはそもそもHPやMPみたいなint型のプリミティブな変数だけじゃなくて
SkillとかItemみたいなオブジェクトもフィールドとして当然持つことになるだろうし
そのSkillやItemにもEffectというオブジェクトがフィールドにあるかもしれない
って考えはじめると、手続き型よりコードを書くのが楽にn感じるようになる
31: 2018/05/13(日)08:49 ID:FE+GfUzy(1) AAS
>>28
やさしいJavaなつかしいな!
おれは初版でお世話になった。何年前だろ。。おれも歳とったなぁ(´・ω・`)
32: 2018/05/13(日)13:02 ID:rS373Qjo(1) AAS
>>29
ふむふむ、効果は判った、いわゆるそれがカプセル化ってやつだよね
自分にも、他人にも構造体に対し使える操作を固定化させることで、プログラミングする際のミスを減らせるってことかな
33
(2): 2018/05/21(月)01:41 ID:j3ztAmor(1) AAS
>>1
レス読んでないから解決済みかもだが
× オブジェクトとは、操作に対する「一連の手続き」である
○ オブジェクトとは「物」。属性(プロパティ)と操作(メソッド)から成る
で、 切り口が違う。例えば女をイカせたい場合、Cだと op=onna("AV女優"); ikaseru(op, KUNNI); に対し、Javaだと、op=new Onna("AV女優"); op.ikaseru(KUNNI); となるのだが、ニュアンスの違いわかるかな?操作から入るのではなく、物から入る

そうすると、ソフトが複雑にならないって良さがあるんだけど、これも経験をつまないピンとこないと思う



× モジュールとは「機能or部品の最小単位」である( ≒ 関数)
○ モジュールとは「機能or部品をある程度まとまった単位でまとめた単位』である( ≒ フォルダ)


省1
34: 2018/05/21(月)05:28 ID:wpeO3iTw(1) AAS
>>33
レス読もうな
説明とかするならな
35: 2018/05/21(月)23:15 ID:7HbOeApe(1) AAS
どうでもいいけどなんでこういうふうにわざわざ下ネタを例にとる奴が定期的にわくんだろうな>>33
36: 2018/05/23(水)19:08 ID:Au5e7VGg(1) AAS
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

MHMJT
37
(1): 2018/06/20(水)16:05 ID:LR1LYzpB(1) AAS
>>1
レス読んでないけどC言語はそれまでのプログラム言語が
プログラマが処理先に自由にgotoしてよかったので
処理が飛びまくって後からの解析がシャレにならなくなっていたのに対して
「関数」として「数値入れると答えが出る」単位でプログラムしましょうという発想

C++などはその関数をクラスという単位にしてパーツの付け替え加工で
使い回せるようにしよう!という発想

Javaはちょっと違う系統のオブジェクト指向から思想を取り込んでるから
「クラス」に「命令を与えると答えが出る」単位にしようという発想
なんだかわからない数値を毎回後から来たプログラマーが
省4
38: 2018/06/20(水)21:08 ID:FK42nbh4(1) AAS
>>37
30レスくらい読めバカタレ
39: 2018/07/05(木)01:59 ID:RfoszcD2(1) AAS
W08
40: 2018/08/22(水)14:15 ID:Opme7aq9(1) AAS
C++の本でも読めばすぐわかるけどな
41: 2020/01/01(水)15:25 ID:mtZC/qIi(1) AAS
メソッドなんて要らん
関数使わせろ
42: 2020/06/22(月)14:55 ID:khT4bacP(1) AAS
Cのほうがjavaより簡単明朗。推奨されないメソッドの洪水は、見ていて気分が悪くなるし。
でもWebバックエンドならJava一択になるのかな。最初に覚えるなら絶対Cがおすすめ。
そのあとC++そしてjavaが最高の流れ。そこまでいけば、どんな言語もちゃらい・はずだが
・・
43: 2020/06/22(月)17:02 ID:5VJoOXgM(1) AAS
あんまり関係ないけど、うちシャンプー、メリット。
44: 2020/06/22(月)18:49 ID:6gQqm8wo(1) AAS
既に解決してる単発スレでなに言ってんの
ちゃんインシャンにきまってるわ
45: 2020/06/23(火)01:20 ID:ie2ZK16d(1) AAS
リンスインシャンプーはハゲるぞ
46: 2020/06/23(火)16:04 ID:atXMAnwf(1) AAS
Javaやるとハゲると昔から言われていたな・・
47
(3): 2021/07/04(日)11:11 ID:FCGWZtZb(1) AAS
終わってるスレだが、オブジェクト指向の「考え方」を
知らずに、巨大クラス作るとそれは「グローバル変数と
それを操る関数たち」っていう、最悪の状態になるんだよな。
48: 2021/07/04(日)12:05 ID:pili1Lz/(1) AAS
>>47
OpenGL用のC++ライブラリですね判ります
49: Mb 2021/07/31(土)17:10 ID:HS2AjqTr(1) AAS
>>47
C だと変数領域を「共有」しているので、誰かがアドレスポインタを
間違えて使うと、酷い目に遭う。
Java だとローカルな変数をオブジェクトが「抱えて」いて、
それをメソッドを使ってどうこうしよう、という形になる。
ただ、それだとグローバル変数を経由しようとしたときに
ややこしい話になるので、シングルトン実装したオブジェクトに
問合せをするとかいったことになる。
ぶっちゃけ C が解ってるんなら Java は難しくない。
ただ。おれみたいな年寄りからすると、可変長のメモリ領域の
省2
50
(1): 2021/08/01(日)00:26 ID:jvrFygM5(1) AAS
>>47
所謂、神クラスのことかな。

一つのクラスに何でも詰め込みすぎて、実質、そのグラス内で定義されているメンバ変数がグローバル変数と化している状態って奴でしょ。
責務もハッキリしてないからテストもできない最悪の状態(再利用性・可読性が死んでる)になってることは容易に想像できる。
51: Mb 2021/08/01(日)01:10 ID:poI7LMFp(1) AAS
>>50
それって、C のモジュール化の時点で失敗しているので、
このスレの主旨である Java (あるいは OO)とは
何の関係もないように思う。
いや、言いたいことはわかるんだけど、
その手のとばっちりを喰った経験が多々あって、
トラウマに引っかかるので ……
52: 2022/12/23(金)19:45 ID:k2wkvDO7(1) AAS
全部JNIで書けばおk
53: 2023/09/22(金)14:01 ID:js4fs0bK(1) AAS
人を信じよ、しかしその百倍も自らを信じよ
54: 2023/10/13(金)22:47 ID:HEQod4fb(1) AAS
c言語の関数をclass内のmethodに置き換えるだけじゃね
?OOの基本はjava のチュートリアルだっけ原文に書いていた 気合いだ〜
55: 2023/10/19(木)09:33 ID:rcYEOPS6(1) AAS
C++的にJavaじゃなくて
C的にJavaってのがミソか
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.434s*