16/05/12 07:04:37.72 /eB9RrGz.net
< `∀´>ニダー
3:デフォルトの名無しさん
16/05/12 11:54:40.41 LTEnCbUt.net
すいません
public以外の修飾詞って何のためにあるんでしょうか
春からjavaはじめてなるべくせまい範囲でアクセスできるように書いた方がいいと教わったのですが意味がわかりません
とりあえずprivateってかいておいてコンパイルエラーがでるたびにpublicに書き直す必要があって
だったらはじめからpublicってかいておいたほうがprivateの完全上位互換だと思うのです
4:デフォルトの名無しさん
16/05/12 13:52:26.21 zeyNygYO.net
素人は、フィールドをprivate、メソッドをpublicにしておけ。
フィールドをクラス外から、アクセスできないようにする(カプセル化)
もし、外からアクセスされて、値を変えられたら、正常に処理できない
外からフィールドにアクセスしたいのなら、そのフィールドに、
getter/setter(アクセッサ)を宣言して、それを通してアクセスする
5:デフォルトの名無しさん
16/05/12 14:08:00.84 LTEnCbUt.net
obj.val++;
みたいなコードをかきたいのにわざわざ
obj.setValue(obj,getValue() + 1);
みたいなコードをかかないといけなくなるってことですよね?
>外からアクセスされて
の部分がよくわからないのですが
具体的にどういうケースで問題になるのでしょうか
6:デフォルトの名無しさん
16/05/12 18:12:02.87 zeyNygYO.net
プログラム開発で一番ダメなのが、グローバル変数を使ったり、
オブジェクト同士・モジュール同士の密結合。
密結合で開発していくと、いずれスパゲティ・泥団子になっていって、修正できなくなっていく
どこかを修正すると、他の部分にバグが生じる。
1か所修正すると、数か所にバグが出るようになる
だからオブジェクトなどをカプセル化して、狭いスコープに封じ込めて、
外からいじれないようにする(疎結合)
つまり、フィールドをprivateにして、外からオブジェクトの状態を変える場合は、
publicのメソッド・アクセッサを通して、アクセスする
7:デフォルトの名無しさん
16/05/12 18:30:03.02 zeyNygYO.net
Java・Windows・LinuxのAPIを使う場合でも、
オブジェクトの中のフィールドを設定することはまずない
もし、obj.a = 1; obj.b = 2; のように、直接フィールドに設定すれば、
フィールドの詳細を理解しなくてはならないから、すごく大変
設定する順序は、先にaに設定してから、bに設定するとか、
そういうことを考えるだけでも、開発はできなくなる
例えば、ファイルを読むのでも、obj.read() とか、
オブジェクトの詳細を知らずに、簡単に使えなければならない
8:デフォルトの名無しさん
16/05/12 20:01:25.53 LTEnCbUt.net
うーん… 難しい
プログラム上便利に短くかけることが運用しやすいとは限らないってことですか…
いまいち実感できないですけど…
9:デフォルトの名無しさん
16/05/12 21:21:12.65 hY0jzmnf.net
>>7
フィールドの詳細を知らなくちゃいけないから大変www確かにお前の頭では大変そうだな
10:デフォルトの名無しさん
16/05/12 21:23:21.11 Vmwu/plU.net
>>8
C#みたいにプロパティのある言語使ってると、javaは冗長で嫌になるよね
11:デフォルトの名無しさん
16/05/13 06:59:23.53 5RjflIb0.net
xをそのままpublicにしちゃうとどこからでも読み書き可能になってしまうから
getXはpublicにしとくけど、setXはデフォルトにしといて同パッケージ内からしか書けないとか
柔軟に対応できるというメリットもある
12:デフォルトの名無しさん
16/05/13 15:21:46.75 yywl+o9x.net
最初は、ソースコードの100行目に、obj.a = 1 だけがあり、
簡単なように見えても、次に、200行目に修正が入ると、
if(x == 1){
obj.a = 1
}else{
obj.a = 2
}
こういうようにオブジェクト内の詳細が、外側のスコープに、
ソースコードの飛び飛びの場所に出現する
これがオブジェクト内のスコープじゃないのだから、やってられんわw
13:デフォルトの名無しさん
16/05/14 00:18:07.59 MDtr7m89.net
これまでDB関連ばかりやってたから、言語と言っていいかわからないが、
PL/SQLくらいであとそのPLを動かすためのshくらいしかやったことない。
Javaの資料とか見てると、英語の羅列じゃん・・・
一通りの文法覚えたら、メソッドとException関連をじっくり見た方がいいのかな?
14:デフォルトの名無しさん
16/05/14 08:42:14.37 uvV1TjlT.net
なぜオブジェクト指向で作るのかっていう本読めばいいよ。
15:デフォルトの名無しさん
16/05/14 09:53:58.19 fLeelvLJ.net
>>8
大きなシステムを分担して組む時の話だよ
組織が大きくなると担当をしっかり決めて部外者が勝手に触らない
必要なら決められた窓口を通して依頼や調整をする
それと同じことをプログラム内のルールとしても実践するだけ
16:デフォルトの名無しさん
16/05/14 13:45:29.21 5pXvQAwD.net
>>13
Javaのお進め図書・情報・url
URLリンク(ula.2ch.net)
ここに推薦書が書いてある
17:デフォルトの名無しさん
16/05/14 14:31:43.29 gAeocMbe.net
隔離スレのほうがレベル高い話してる…
18:デフォルトの名無しさん
16/05/17 02:55:12.85 op8lS/VF.net
ひとつの利点として
とりあえずsetter(getter)が仲介すると
変数の定義域(値域)が設定出来るってのはあるよね
例えばRGB(r, g, b)で
r=0~255しかオブジェクト内で想定してないのに外からr =9999とか値を設定されたらオブジェクトがどんな動作するか想定出来ない
setterを噛ませれば引数が0~255以外の時に値を丸めておいたり出来る
少なくとも外部から値の範囲が汚染されないのは大きい
作る時にオブジェクト内での動作に集中出来る
19:デフォルトの名無しさん
16/05/17 08:11:51.20 +pynX6Ny.net
byte使え
20:デフォルトの名無しさん
16/05/18 18:14:51.82 Kc9Ol4u0.net
工場の機械って工場の人しか使っちゃダメだろ
突然見ず知らずの人が使い出したら困るだろ
アクセス修飾子っていうのは見ず知らずの人に機械を触らせないためのルールだよ
見ず知らずの人が機械を動かすときは工場の人(publicなメソッド)にお願いして、機械を動かしてもらう
そうすれば工場の人は勝手に機械をいじられないし、見ず知らずの人は機械の使い方を知らなくても目的が果たせる。
21:デフォルトの名無しさん
16/05/18 20:56:08.39 HhGNLqnc.net
使う側が理解して使う場合無駄なオーバーヘッドが入るだけじゃん
22:デフォルトの名無しさん
16/05/18 20:58:39.95 /QzLYINM.net
使う側が知ってるならリフレクション
つまり忍び込んで勝手に使う
23:デフォルトの名無しさん
16/05/19 14:42:20.03 W+na7P2U.net
正しく動くようになってから速くするのが鉄則だよ
あんま詳しくないけど関数呼び出しのオーバーヘッドは思いの他、軽いらしい
ゲームみたいなのは、また別なのかもしれんが
24:デフォルトの名無しさん
16/05/20 13:43:38.26 l93PzyPZ.net
javaで
打ち込んだ段数まで順にピラミッド型に数字並べるのってどうするの?
1
2 2
3 3 3
4 4 4 4
は検索ででるけど
1
2 3
4 5 6
・
・
・
はでない
25:デフォルトの名無しさん
16/05/20 17:33:39.04 L/JKULD4.net
簡単な方法なら表示用に変数を1個持って、1回表示したら1ずつ加算していけばいい
26:デフォルトの名無しさん
16/05/21 10:44:45.47 dQoHFKwA.net
難しく書くのが難しいな
URLリンク(ideone.com)
27:デフォルトの名無しさん
16/05/21 14:05:21.39 dQoHFKwA.net
whileとかforとか前世紀の遺物だな
ナウい書き方するとこんな感じ
URLリンク(ideone.com)
28:デフォルトの名無しさん
16/05/30 01:53:29.89 ILfmqIwk.net
>>27
ナウいが前世紀じゃないかっw
29:デフォルトの名無しさん
16/06/06 07:59:27.97 jYEPRp2A.net
スッキリ分かるjava入門を読んでるいるのですが
コンストラクタの項でそのインスタンス型フィールドの値を初期化できる程度しか覚えられてないんですが
こんな程度で先に進んじゃって大丈夫でしょうか?thisもあまりよくわかってないし読み戻したほうがいいのかな
30:デフォルトの名無しさん
16/06/06 09:15:04.16 e+TlXwYN.net
真面目にやるならAPI仕様を参照できる状態にしてJava言語仕様を暗記
31:デフォルトの名無しさん
16/06/06 11:58:33.14 n0tXPRWo.net
すっきり実践編やってみな
32:デフォルトの名無しさん
16/06/06 18:22:44.32 jYEPRp2A.net
プログラミング自体が入門レベルなので実践編はきついです。
曖昧な記憶でもいいから一回読み切るやり方が正しいんでしょうか?
早く入門レベルを脱したいです
33:デフォルトの名無しさん
16/06/06 18:37:54.69 yI68iStU.net
テトリスを作ってみなはれ
34:デフォルトの名無しさん
16/06/06 19:02:01.23 /EU6sUkv.net
>>32
ブロンズの問題集でもやって見れば?
35:デフォルトの名無しさん
16/06/06 19:44:14.76 LbzoRXHI.net
一回読み終えてまた最初からやり直せばいいのよ
ド初心者なら3周してわからないところを潰すくらいでちょうどいいと思うの
36:デフォルトの名無しさん
16/06/06 20:13:59.73 AvO2qKU5.net
>>32
受験勉強と違うから色々覚えるのが目的になっちゃダメだと思うよ
自分がやりたい事を最小限の知識で実現するように努力した方がいい
一番大事なのは何をプログラムしたいか、そのためにはどういうプログラムが必要か考える事だと思う
37:デフォルトの名無しさん
16/06/06 20:40:56.36 mpQlVXrL.net
暗記しようとする必要はないと思う。試験するわけじゃないしな。
したければしても良いけど、わからないことに出くわしたらそのたびにそれについて調べるというのを繰り返せば自動的に記憶にも残る。
38:デフォルトの名無しさん
16/06/07 00:56:55.92 41OqMrsx.net
そもそも、その本は間違っているかも知れないし、
特定の本を信用しても、仕方がない
誰も君に、その本を100%暗記しろなんて頼んでいないし、
もし頼まれたとしても、聞かなければよいだけ
100%理解せずに、読めばいい。
100%理解できないと、先に進めない人をよく見かけるけど、
そういう人は、先には進めない
すべての物事にはリスクがある。
50%ほど理解したら先に進む方が、むしろリスクが少ない
これこそ生来、人間が持っている忘却力なのだ。
自分の脳を通すことで、不必要なものを忘れて、
重要なことだけを覚えて、人生を効率化するようになっている
100%暗記できるような人は、むしろ何が重要なのか、わかっていない
39:デフォルトの名無しさん
16/06/07 02:24:15.54 ip6Cz1PK.net
なるほど。取りあえずあと100ページで終わるので読み終えてみます。
細かいとこ理解しないで次に進むと凄い気持ち悪い感じが…したんですが、まぁ考えが変わりました。
ありがとうございました。頑張ります