Java初心者のためのスレッドです。
※前スレ
Java入門・初心者質問スレ Part.4
http://mevius.2ch.net/test/read.cgi/tech/1498828456/
探検
Java入門・初心者質問スレ Part.5©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/09/29(金) 17:53:25.24ID:XnizQSCA
408デフォルトの名無しさん
2017/11/03(金) 18:39:37.30ID:lQ0XoM3e FileStreamもコンストラクタで例外を投げるが
あの設計も大間違いだから
コンストラクタでリソース確保しようとするのが完全に間違ってる
closeの処理でリソースを解放するならばリソースを確保するのはopenだ
openの責務をFileStreamは持つべきでそれはオブジェクトを初期化する
コンストラクタとは役割が根本的に100憶パーセント異なるわけ
あの設計も大間違いだから
コンストラクタでリソース確保しようとするのが完全に間違ってる
closeの処理でリソースを解放するならばリソースを確保するのはopenだ
openの責務をFileStreamは持つべきでそれはオブジェクトを初期化する
コンストラクタとは役割が根本的に100憶パーセント異なるわけ
409デフォルトの名無しさん
2017/11/03(金) 19:04:39.65ID:9CXEo34m410デフォルトの名無しさん
2017/11/03(金) 19:18:22.44ID:lQ0XoM3e411デフォルトの名無しさん
2017/11/03(金) 19:40:27.12ID:lQ0XoM3e UI -> アプリ(バリデータ) -> ドメイン -> DAO
レイヤーはこのように分けてドメインから先にバリデーションのコードを持ち込んではいけない
オブジェクトをクリーンに保つためのベストプラクティス
レイヤーはこのように分けてドメインから先にバリデーションのコードを持ち込んではいけない
オブジェクトをクリーンに保つためのベストプラクティス
412デフォルトの名無しさん
2017/11/03(金) 19:47:48.30ID:lQ0XoM3e バグがないように引数をチェックするという目的でやるなら
アサートを使うべきだ
ただしアサートを使うのは開発時のみで本番コードには含めない
本番コードで引数チェックが必要になるようならそれは
業務要件として抽出するべきだ
アサートを使うべきだ
ただしアサートを使うのは開発時のみで本番コードには含めない
本番コードで引数チェックが必要になるようならそれは
業務要件として抽出するべきだ
413350です
2017/11/03(金) 20:10:50.22ID:AmIWbkAj なるほど
405~410まではなんとなくわかりました
411, 412は私の経験or勉強不足でいまいち理解できませんでした
でも、解説してくれてありがとう
405~410まではなんとなくわかりました
411, 412は私の経験or勉強不足でいまいち理解できませんでした
でも、解説してくれてありがとう
414デフォルトの名無しさん
2017/11/03(金) 20:17:00.78ID:lQ0XoM3e415デフォルトの名無しさん
2017/11/03(金) 20:19:43.27ID:EWAV0hJA なるほど。わかった。スレが過疎って来たらコンストラクタで例外の話を出せば書き込みで溢れてスレが活性化するのだな。
時折反論を書きありがとうの後にございますを付けなければなお良いと。
時折反論を書きありがとうの後にございますを付けなければなお良いと。
416デフォルトの名無しさん
2017/11/03(金) 20:21:29.16ID:lQ0XoM3e 僕が活性化しちゃうおおお
417デフォルトの名無しさん
2017/11/03(金) 21:17:51.19ID:xnvXDnsB またキチガイか
418デフォルトの名無しさん
2017/11/03(金) 21:35:59.49ID:Ro85MhDs コンストラクタに不正なもの渡された場合に例外を出すことが
なぜいけないのかについては1ミリも説明されてなくて草
なぜいけないのかについては1ミリも説明されてなくて草
419デフォルトの名無しさん
2017/11/03(金) 21:41:52.50ID:lQ0XoM3e420デフォルトの名無しさん
2017/11/03(金) 21:42:46.79ID:lQ0XoM3e 違うわ1,000ミリの間違いね
421デフォルトの名無しさん
2017/11/03(金) 21:52:44.52ID:9CXEo34m むしろ初期化の異常で例外を投げるのは
コンストラクタの責務だろ
なぜならコンストラクタの引数で渡されたデータから
インスタンス変数(やクラス変数)を初期化するわけだから
情報エキスパートの原則からして
データの処理はデータを持ってるオブジェクトが行うのが原則
ただ処理を全部抱え込むと肥大化するから
他に委譲することは構わない
newの代わりにファクトリを使ったりするのと同じ
しかしそれは「newを使うな」ではない
「外部に委譲してもいい」のであって
「コンストラクタで例外を投げてはいけない」ではない
コンストラクタの責務だろ
なぜならコンストラクタの引数で渡されたデータから
インスタンス変数(やクラス変数)を初期化するわけだから
情報エキスパートの原則からして
データの処理はデータを持ってるオブジェクトが行うのが原則
ただ処理を全部抱え込むと肥大化するから
他に委譲することは構わない
newの代わりにファクトリを使ったりするのと同じ
しかしそれは「newを使うな」ではない
「外部に委譲してもいい」のであって
「コンストラクタで例外を投げてはいけない」ではない
422デフォルトの名無しさん
2017/11/03(金) 22:00:57.69ID:Ro85MhDs423デフォルトの名無しさん
2017/11/03(金) 22:01:56.36ID:lQ0XoM3e >>421
ベストプラクティスってそういうものだよ
こういう実装もできるけどこっちの方が好ましいよねっていうものだから
そういう意味で言ってるわけよ
たとえばModel View ControllerのアーキテクチャがあるけどViewに
Modelのコードも全部書きまくっちゃってもいいわけよ
でも分離するのが好ましいだろ、そういう意味で言ってるわけよ
その真意をくみ取って欲しいわけよ
コンストラクタでデータチェックヤラナイのが好ましいわけよ
え?ヤラナイの?なんていうふしだらな誘いに乗らないで欲しいわけよ
ベストプラクティスってそういうものだよ
こういう実装もできるけどこっちの方が好ましいよねっていうものだから
そういう意味で言ってるわけよ
たとえばModel View ControllerのアーキテクチャがあるけどViewに
Modelのコードも全部書きまくっちゃってもいいわけよ
でも分離するのが好ましいだろ、そういう意味で言ってるわけよ
その真意をくみ取って欲しいわけよ
コンストラクタでデータチェックヤラナイのが好ましいわけよ
え?ヤラナイの?なんていうふしだらな誘いに乗らないで欲しいわけよ
424デフォルトの名無しさん
2017/11/03(金) 22:02:38.01ID:lQ0XoM3e425デフォルトの名無しさん
2017/11/03(金) 22:03:47.06ID:lQ0XoM3e 自分の考える責務の分離はこうっす
自分こう思うっすとはきはきと説明できないかね
若さが感じられない
自分こう思うっすとはきはきと説明できないかね
若さが感じられない
426デフォルトの名無しさん
2017/11/03(金) 22:42:06.17ID:lQ0XoM3e 説明を求められたら言葉を失ってしまうみなさん
427デフォルトの名無しさん
2017/11/03(金) 22:47:53.53ID:L9/pWClM どんなに外部でチェックしてもインスタンス生成に失敗することはあるわけで、
そういうときに失敗を通知する手段は例外しかないわけで、
コンストラクタで例外を投げてはいけないとする方が問題だ。
そういうときに失敗を通知する手段は例外しかないわけで、
コンストラクタで例外を投げてはいけないとする方が問題だ。
428デフォルトの名無しさん
2017/11/03(金) 22:49:18.72ID:lQ0XoM3e モデルに存在するべきコードがコントローラに存在するものをファット・コントローラと言うけれども
バリデータに存在するべきコードがコンストラクタに存在するものをファット・コンストラクタと呼んで
クラスの生活習慣病に位置付けるのはどう?
徐々にシステムを蝕んでいきます
コーディングの習慣を見直しましょう
バリデータに存在するべきコードがコンストラクタに存在するものをファット・コンストラクタと呼んで
クラスの生活習慣病に位置付けるのはどう?
徐々にシステムを蝕んでいきます
コーディングの習慣を見直しましょう
429デフォルトの名無しさん
2017/11/03(金) 22:52:55.66ID:lQ0XoM3e430デフォルトの名無しさん
2017/11/03(金) 22:53:28.36ID:lQ0XoM3e ベストプラクティスっていうのは柔軟っていう意味もありまぁす!
431デフォルトの名無しさん
2017/11/04(土) 00:31:14.87ID:FdHKGPou 入力値チェックは、MVC のビューでやるけど、
ドラクエ10 の記事によると、
通信データの500バイトに、1バイトは間違っているから、
通信データは、絶対に信用しちゃいけない。
必ずサーバー側でも、チェックすべき
途中のルーターが、データが間違っていても、データを破棄せず、
間違ったデータで、パリティを再計算して送ってくるから、
正常なデータのように見える
ドラクエ10 の記事によると、
通信データの500バイトに、1バイトは間違っているから、
通信データは、絶対に信用しちゃいけない。
必ずサーバー側でも、チェックすべき
途中のルーターが、データが間違っていても、データを破棄せず、
間違ったデータで、パリティを再計算して送ってくるから、
正常なデータのように見える
432デフォルトの名無しさん
2017/11/04(土) 01:00:49.14ID:O0AU1SEY サーバーが受け取ったデータが外部入力なんだから
それをチェックするのは当たり前
ユーザー入力と同じ
境界の外から入ってきたデータを
どのレイヤーでチェックしてエラーハンドリングするかということと
モデルレイヤーのコンストラクタが事前条件に反した不正値を受け取った場合に
例外を投げるかどうかは関係はしてるが種類の違う問題
という話をしてる
それをチェックするのは当たり前
ユーザー入力と同じ
境界の外から入ってきたデータを
どのレイヤーでチェックしてエラーハンドリングするかということと
モデルレイヤーのコンストラクタが事前条件に反した不正値を受け取った場合に
例外を投げるかどうかは関係はしてるが種類の違う問題
という話をしてる
433デフォルトの名無しさん
2017/11/04(土) 02:59:59.82ID:Wr8YwoWe できれば不正値はコンパイル時にエラーになって欲しいものではあるな。
不正な値を引き渡せるようにプログラミングできること自体がなくなった方が良い。
I/O絡みのエラーは実行時じゃないとわからないから別としてね。
(指定したファイルがなくて読み出しオープンでエラーとかは仕方がない)
不正な値を引き渡せるようにプログラミングできること自体がなくなった方が良い。
I/O絡みのエラーは実行時じゃないとわからないから別としてね。
(指定したファイルがなくて読み出しオープンでエラーとかは仕方がない)
434デフォルトの名無しさん
2017/11/04(土) 08:21:09.10ID:4V8ohWTX javaってできることが多すぎて勉強しんどい
435デフォルトの名無しさん
2017/11/04(土) 08:35:59.26ID:32ZzWJzG >>431
へー、チェックサムも独自に仕込むのかな
へー、チェックサムも独自に仕込むのかな
436デフォルトの名無しさん
2017/11/04(土) 08:37:10.99ID:32ZzWJzG >>432
事前条件ってまさにアサートの領分じゃん
事前条件ってまさにアサートの領分じゃん
437デフォルトの名無しさん
2017/11/04(土) 08:49:44.67ID:die+TITB >>434
C++より楽
C++より楽
438デフォルトの名無しさん
2017/11/04(土) 08:55:38.30ID:KxJ3WBAq モデルの引数を間違えてるっていうのはバグなのでー
開発時に分かればよいことなのでー
アサート使うべきだよねー
コンストラクタをぶくぶくと太らせる理由にはならぬよ
メタボリッククラスから脱却してスマートクラスにしよう
開発時に分かればよいことなのでー
アサート使うべきだよねー
コンストラクタをぶくぶくと太らせる理由にはならぬよ
メタボリッククラスから脱却してスマートクラスにしよう
439デフォルトの名無しさん
2017/11/04(土) 13:21:03.20ID:O0AU1SEY >>436
Javaの場合はアサートって言うとビルトインのassertをさすからね
事前条件なら自動的にアサート使えとはならないよ
それともコンストラクタでは
ExceptionではなくErrorを投げるべきって言いたいのかな?
Javaの場合はアサートって言うとビルトインのassertをさすからね
事前条件なら自動的にアサート使えとはならないよ
それともコンストラクタでは
ExceptionではなくErrorを投げるべきって言いたいのかな?
440デフォルトの名無しさん
2017/11/04(土) 13:36:25.85ID:KxJ3WBAq441デフォルトの名無しさん
2017/11/04(土) 15:21:29.77ID:1M0jr43T javaなら、コンストラクタで例外スローでいいでしょ。
442デフォルトの名無しさん
2017/11/04(土) 17:10:27.14ID:KxJ3WBAq443デフォルトの名無しさん
2017/11/04(土) 20:42:41.33ID:cKuNjw8p >>442
あほ
あほ
444デフォルトの名無しさん
2017/11/05(日) 13:12:43.81ID:z+9Dn5/C 以下のコードをideoneで実行できません。(ブラウザとしてエラーが発生)
どなたか理由を教えてもらえないでしょうか?
import java.lang.reflect.*;
class RefSamp {
public int times = 0;
public RefSamp(int t) {
this.times = t;
}
public void hello(String msg) {
this.hello(msg, this.times);
}
public void hello(String msg, int t) {
System.out.println("Hello, " + msg + " x " + t);
}
}
public class Main {
public static void main(String[] args) throws Exception {
Class clazz = RefSamp.class;
Constructor<?> cons = clazz.getConstructor(int.class);
RefSamp rs = (RefSamp) cons.newInstance(256);
Field f = clazz.getField("times");
f.set(rs, 2);
System.out.println(f.get(rs));
Method m = clazz.getMethod("hello", String.class, int.class);
m.invoke(rs, "refrection!", 128);
boolean pubc = Modifier.isPublic(clazz.getModifiers());
boolean finm = Modifier.isFinal(m.getModifiers());
}
}
どなたか理由を教えてもらえないでしょうか?
import java.lang.reflect.*;
class RefSamp {
public int times = 0;
public RefSamp(int t) {
this.times = t;
}
public void hello(String msg) {
this.hello(msg, this.times);
}
public void hello(String msg, int t) {
System.out.println("Hello, " + msg + " x " + t);
}
}
public class Main {
public static void main(String[] args) throws Exception {
Class clazz = RefSamp.class;
Constructor<?> cons = clazz.getConstructor(int.class);
RefSamp rs = (RefSamp) cons.newInstance(256);
Field f = clazz.getField("times");
f.set(rs, 2);
System.out.println(f.get(rs));
Method m = clazz.getMethod("hello", String.class, int.class);
m.invoke(rs, "refrection!", 128);
boolean pubc = Modifier.isPublic(clazz.getModifiers());
boolean finm = Modifier.isFinal(m.getModifiers());
}
}
445デフォルトの名無しさん
2017/11/05(日) 14:11:12.97ID:0YSHLKzk 初心者じゃないんだろ35歳
自分で調べろ
自分で調べろ
446遊園地 ◆ExGQrDul2E
2017/11/05(日) 14:27:53.28ID:FPjW0d5Z 読むの面倒だから、エラー文も上げて。
447デフォルトの名無しさん
2017/11/05(日) 14:34:37.57ID:k/LyUYN/ ideoneは知らんけどリフレクションはjavaセキュリティマネージャ動いてたら実行できないからそれじゃねーの
448デフォルトの名無しさん
2017/11/05(日) 17:40:17.18ID:2ZrTuY5p 35歳に親切にすると君の職場に現れて付きまとわれるぞw
449444
2017/11/05(日) 18:22:30.39ID:z+9Dn5/C450デフォルトの名無しさん
2017/11/05(日) 18:54:33.30ID:qSskq3Yv 釣りでエラーが発生と言ってるだけだろ
https://ideone.com/yLwAJh
https://ideone.com/yLwAJh
451デフォルトの名無しさん
2017/11/05(日) 18:59:33.63ID:0YSHLKzk まず質問の仕方がおかしいんだよなぁ
ここは学校じゃないし、相手は先生じゃない
質問者の言わんとしてることを一生懸命に汲み取ってくれる人なんてほとんどいない
もっと相手に伝わるように質問しろ
ここは学校じゃないし、相手は先生じゃない
質問者の言わんとしてることを一生懸命に汲み取ってくれる人なんてほとんどいない
もっと相手に伝わるように質問しろ
452444
2017/11/05(日) 19:41:51.63ID:z+9Dn5/C453デフォルトの名無しさん
2017/11/05(日) 19:45:10.05ID:/i0gfJYB 何この変なの?
どっかのコテハンか?
どっかのコテハンか?
454デフォルトの名無しさん
2017/11/05(日) 19:46:54.84ID:PoYQIzOm >>450のリンク見てもエラーが出てるんだよな?
正直エスパーしようにも限界
正直エスパーしようにも限界
455デフォルトの名無しさん
2017/11/05(日) 20:07:50.04ID:2ZrTuY5p もうそいつに触れるのはよせ!
456デフォルトの名無しさん
2017/11/05(日) 21:21:54.00ID:0YSHLKzk457デフォルトの名無しさん
2017/11/05(日) 21:30:31.08ID:2ZrTuY5p 理解を越えているから考えては駄目
458デフォルトの名無しさん
2017/11/05(日) 21:31:07.85ID:0YSHLKzk そもそももっと答えの得られやすい質問が出来るようになれば解決なんだけど、
なぜ君は指摘に対してわざわざ「じゃああんたはごにょごにょ」とわざわざ全く関係ない事持ち出して喧嘩売ってきてるの?
中学生なの?反抗期なの?
自分の行動を振り替えって恥ずかしくない?
なぜ君は指摘に対してわざわざ「じゃああんたはごにょごにょ」とわざわざ全く関係ない事持ち出して喧嘩売ってきてるの?
中学生なの?反抗期なの?
自分の行動を振り替えって恥ずかしくない?
459デフォルトの名無しさん
2017/11/06(月) 00:46:04.60ID:OjznruUj 以前お世話になりました >>200です。課題の上から二つ目の"(ここを作成)"がわからないです。
まあ上のほうも自信ないのですが...誰か教えていただけませんか?
https://imgur.com/a/niyx6
https://imgur.com/a/ehrkB
https://imgur.com/a/5X3tQ
まあ上のほうも自信ないのですが...誰か教えていただけませんか?
https://imgur.com/a/niyx6
https://imgur.com/a/ehrkB
https://imgur.com/a/5X3tQ
460デフォルトの名無しさん
2017/11/06(月) 00:47:27.68ID:1qhCOQ98 宿題スレへ
今実行したら出来ました。何でさっきは出来なかったんだろ…。
https://ideone.com/KdavqO
>>453
プログラマー板のコテハンです。
>>454
いや、リンクをたどるのは大丈夫でした。
>>456
ただ冷たくあしらわれたと思ったら、アドバイスをくれたので。
>>458
えっ?褒めてるのに?
https://ideone.com/KdavqO
>>453
プログラマー板のコテハンです。
>>454
いや、リンクをたどるのは大丈夫でした。
>>456
ただ冷たくあしらわれたと思ったら、アドバイスをくれたので。
>>458
えっ?褒めてるのに?
462デフォルトの名無しさん
2017/11/06(月) 02:26:46.28ID:tjV5ukzM >>459
前回はみんなが教えちゃったけど
正直ためにならないと思うんだよね
でも一個だけヒント言うなら一行ずつ処理を追ってみ(2番目の)
「この変数にはどんな値が入っているか(入るべきか)」意識しながら
現状インプットからアウトプットまで線でつながってない
インプットの仕方は「Java コマンドライン 入力」でググれ
前回はみんなが教えちゃったけど
正直ためにならないと思うんだよね
でも一個だけヒント言うなら一行ずつ処理を追ってみ(2番目の)
「この変数にはどんな値が入っているか(入るべきか)」意識しながら
現状インプットからアウトプットまで線でつながってない
インプットの仕方は「Java コマンドライン 入力」でググれ
463デフォルトの名無しさん
2017/11/06(月) 03:38:31.02ID:2Q/sT7xS ヤフーブログの https://blogs.yahoo.co.jp/kamyu_2010 にデザパタ解説を発見した。
464デフォルトの名無しさん
2017/11/06(月) 06:09:30.85ID:sonxQjeP465デフォルトの名無しさん
2017/11/06(月) 07:06:32.63ID:efUB4xY4 >>462
ありがとうございます。時間かけてやって見ます
ありがとうございます。時間かけてやって見ます
466デフォルトの名無しさん
2017/11/06(月) 07:25:39.44ID:kblaZiQ3467デフォルトの名無しさん
2017/11/06(月) 08:51:22.52ID:f5Hwp3Jw 課題の内容および詳細がバッドノウハウの固まりだな
やっぱ学校はCかLispでいいと思うよ
やっぱ学校はCかLispでいいと思うよ
468デフォルトの名無しさん
2017/11/06(月) 10:47:13.47ID:CLk5jCwv マウンティングするスレじゃないんですよ!
469デフォルトの名無しさん
2017/11/06(月) 13:56:05.08ID:Ql637c4l javapro wwww
前に安易に答え教えたせいか変数の使い方すらろくに理解してなくてひでぇな・・
金ドブだからもうやめた方がいいぞマジで
前に安易に答え教えたせいか変数の使い方すらろくに理解してなくてひでぇな・・
金ドブだからもうやめた方がいいぞマジで
470デフォルトの名無しさん
2017/11/06(月) 14:05:17.27ID:Ql637c4l 問題も毎回酷すぎてガチでビックリすんだけど学校の名前教えてくれよ
こんなゴミみたいな問題できても全く勉強にならんレベルの酷さだぞ
こんなゴミみたいな問題できても全く勉強にならんレベルの酷さだぞ
471デフォルトの名無しさん
2017/11/06(月) 14:39:48.25ID:Ql637c4l public class Month {
int hi;
int[] days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
Month(int num){
hi = days[num-1];
}
public int getDays(){
return hi;
}
}
public class Calendar{
public static void main(String[] args) {
int tsuki = Integer.parseInt(args[0]);
if(tsuki >= 1 && tsuki <= 12){
Month m = new Month(tsuki);
System.out.println(tsuki + "月は" + m.getDays() + "日あります。");
}
else{
System.out.println("1〜12月を指定してください。");
}
}
}
int hi;
int[] days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
Month(int num){
hi = days[num-1];
}
public int getDays(){
return hi;
}
}
public class Calendar{
public static void main(String[] args) {
int tsuki = Integer.parseInt(args[0]);
if(tsuki >= 1 && tsuki <= 12){
Month m = new Month(tsuki);
System.out.println(tsuki + "月は" + m.getDays() + "日あります。");
}
else{
System.out.println("1〜12月を指定してください。");
}
}
}
472デフォルトの名無しさん
2017/11/06(月) 14:53:59.17ID:FN/Llmne days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
month = 2
puts days[month] #=> 28
Ruby では、これだけ。
ただし、days[0]は使わない
画像などを貼るな!
paiza.io, codepad などのサイトに、ソースコードを貼って、質問しろ
month = 2
puts days[month] #=> 28
Ruby では、これだけ。
ただし、days[0]は使わない
画像などを貼るな!
paiza.io, codepad などのサイトに、ソースコードを貼って、質問しろ
473デフォルトの名無しさん
2017/11/06(月) 14:56:54.74ID:PEro5dbb474デフォルトの名無しさん
2017/11/06(月) 15:10:14.26ID:Ql637c4l >>350
上級Javaグラマーアカデミー一般命令・規約
規約6第23項18節
パラメータとして渡される値に関して
クラスの不変式を破っているオブジェクトの生成を防ぐため一般原則の特殊な場合として
メソッドおよびコンストラクタは後で使用されるパラメータの正当性を検査すべき
非公開メソッドに関しては一般に、アサーションを用いて検査すべき
上記規約に対する例外として、正当性検査のコストが高いか現実的でなく、かつ
正当性検査が計算の処理の中で暗黙的に行われる場合はこれに該当しない
また暗黙的検査によって誤った例外がスローされる場合はエラーアトミック性が失われることになるため
このような状況下においては抽象概念に適した例外をスローできるようにイディオムを使用すべき
上級Javaグラマーアカデミー一般命令・規約
規約6第23項18節
パラメータとして渡される値に関して
クラスの不変式を破っているオブジェクトの生成を防ぐため一般原則の特殊な場合として
メソッドおよびコンストラクタは後で使用されるパラメータの正当性を検査すべき
非公開メソッドに関しては一般に、アサーションを用いて検査すべき
上記規約に対する例外として、正当性検査のコストが高いか現実的でなく、かつ
正当性検査が計算の処理の中で暗黙的に行われる場合はこれに該当しない
また暗黙的検査によって誤った例外がスローされる場合はエラーアトミック性が失われることになるため
このような状況下においては抽象概念に適した例外をスローできるようにイディオムを使用すべき
475デフォルトの名無しさん
2017/11/06(月) 15:21:23.29ID:Ql637c4l クソな問題は逆に頭を悪くするので、すぐに答えを教えるべき
476デフォルトの名無しさん
2017/11/06(月) 15:37:21.27ID:VIJ1bqUv だいたいハードコーディングというところがもうダメなのに。
477デフォルトの名無しさん
2017/11/06(月) 16:59:11.52ID:V0vtn4gd こういう場合は月の値がおかしかったら例外投げるのが良さそうに思うが、そうすると今話題のコンストラクタで例外になる。
かといってそれをしないならどのタイミングで例外投げるのが良いのか?
(まあそもそもこんなもんクラスにすべきではないのかも知れんが)。
さて、このネタでまたスレが活性化するかな・・・
かといってそれをしないならどのタイミングで例外投げるのが良いのか?
(まあそもそもこんなもんクラスにすべきではないのかも知れんが)。
さて、このネタでまたスレが活性化するかな・・・
478デフォルトの名無しさん
2017/11/06(月) 17:19:53.91ID:f1KpQ6jU 最近Javaを始めた者です。
質問させてください。
質問1)
店から客が弁当を買うような仕組みのプログラムを作りたいのですが、
用意するクラスは「店」「商品の弁当」「客」「実行するためのメインクラス」で良いのでしょうか?
変数は「店と客の所持金」、「客の腹の空き具合」、「弁当によって満たされる満腹度」のようなものを考えています。
質問2)
この様なプログラムの場合、売買のメソッドはどのように作ればいいのでしょうか?
「店が売る」メソッドか「客が買う」メソッドのどちらかだけ必要なのか、両方必要になるのかが分かりません。
現実的に考えれば客が居なければどんなに商品があっても意味が無いので、「店は商品を用意する」それを「客が買う」ような設計になると思うのですがどうでしょうか?
質問3)
現実的には客が弁当を買えば店の在庫は減り、客が所持する弁当が増えます。
このようにオブジェクトの中のオブジェクトが違うオブジェクトに移動するようなプログラムはどのように書けばいいのでしょうか?
質問4)
「客が買った弁当を食べる」という行為を行った場合、客が所持している弁当が無くなるわけですが、この様な仕組みはどのように書けばいいでしょうか?
以上、長くなりましたが良い方法があればご教授ください。
よろしくおねがいします。
質問させてください。
質問1)
店から客が弁当を買うような仕組みのプログラムを作りたいのですが、
用意するクラスは「店」「商品の弁当」「客」「実行するためのメインクラス」で良いのでしょうか?
変数は「店と客の所持金」、「客の腹の空き具合」、「弁当によって満たされる満腹度」のようなものを考えています。
質問2)
この様なプログラムの場合、売買のメソッドはどのように作ればいいのでしょうか?
「店が売る」メソッドか「客が買う」メソッドのどちらかだけ必要なのか、両方必要になるのかが分かりません。
現実的に考えれば客が居なければどんなに商品があっても意味が無いので、「店は商品を用意する」それを「客が買う」ような設計になると思うのですがどうでしょうか?
質問3)
現実的には客が弁当を買えば店の在庫は減り、客が所持する弁当が増えます。
このようにオブジェクトの中のオブジェクトが違うオブジェクトに移動するようなプログラムはどのように書けばいいのでしょうか?
質問4)
「客が買った弁当を食べる」という行為を行った場合、客が所持している弁当が無くなるわけですが、この様な仕組みはどのように書けばいいでしょうか?
以上、長くなりましたが良い方法があればご教授ください。
よろしくおねがいします。
479デフォルトの名無しさん
2017/11/06(月) 18:19:33.27ID:f5Hwp3Jw 空腹度なんて抽象的すぎてゲームの中でしか成立しないぞ
480デフォルトの名無しさん
2017/11/06(月) 18:43:48.98ID:Ql637c4l ひっでぇ質問の内容w
何したいのかさっぱりわからん
何したいのかさっぱりわからん
481デフォルトの名無しさん
2017/11/06(月) 18:52:01.06ID:KtrOSJPo >>480
君は読解力なさすぎでは?
君は読解力なさすぎでは?
482デフォルトの名無しさん
2017/11/06(月) 18:53:07.65ID:kblaZiQ3 >>478
教授するような時間はないな
教授するような時間はないな
483デフォルトの名無しさん
2017/11/06(月) 19:13:07.93ID:T+apbet3484あ
2017/11/06(月) 19:30:58.35ID:/hMSyilp >>478
売買を真面目に考えると面倒くさい。
弁当のクラス以外に、店と客が「持ってる弁当のリスト」を持つか、
弁当リストクラスを別に作って、弁当に持ち主「店」「客」を持つとか、そんなんじゃないの?
どこにも属してない弁当が存在し得れば後者だと思うし、今回はどこにも属してない弁当があったほうが便利。
食った=無くなった=オブジェクトをリストから削除するか、弁当の満たされる満足度を食ったら残り0にするかじゃないかな。
腹の空き具合と弁当の容量のコンバート関数でももたせりゃ便利じゃねえの?後々。
その空き弁当箱は、捨てるときに、持ち主無しにしといて、たまに持ち主無しの弁当箱をバサッと消したほうが楽かも。
客が来たら作る、となるとまた面倒くさい。
店の方の在庫数で、負在庫に突入しそうなら補充とか、残り○個になったら補充、そういう風にするんじゃないの?
業務アプリみたい。
売買を真面目に考えると面倒くさい。
弁当のクラス以外に、店と客が「持ってる弁当のリスト」を持つか、
弁当リストクラスを別に作って、弁当に持ち主「店」「客」を持つとか、そんなんじゃないの?
どこにも属してない弁当が存在し得れば後者だと思うし、今回はどこにも属してない弁当があったほうが便利。
食った=無くなった=オブジェクトをリストから削除するか、弁当の満たされる満足度を食ったら残り0にするかじゃないかな。
腹の空き具合と弁当の容量のコンバート関数でももたせりゃ便利じゃねえの?後々。
その空き弁当箱は、捨てるときに、持ち主無しにしといて、たまに持ち主無しの弁当箱をバサッと消したほうが楽かも。
客が来たら作る、となるとまた面倒くさい。
店の方の在庫数で、負在庫に突入しそうなら補充とか、残り○個になったら補充、そういう風にするんじゃないの?
業務アプリみたい。
485デフォルトの名無しさん
2017/11/06(月) 20:04:51.42ID:tjV5ukzM >>478
いかにも初心者らしい疑問だけど
同時にどれももっともな質問だね
>質問1)
>用意するクラス
ソフトの規模の大きさに応じて
クラスは細分化していく
>「店」「商品の弁当」「客」「実行するためのメインクラス」
でもまあ小規模な前提なら
それで大筋でおかしくないと思う
もし規模が大きくなるなら
「金」とか「(弁当の)具」とか「客の行列」とか
クラス化する場合もあるかも
>「客の腹の空き具合」
ゲームなの?
業務アプリとゲームだとかなり考え方が違う
いかにも初心者らしい疑問だけど
同時にどれももっともな質問だね
>質問1)
>用意するクラス
ソフトの規模の大きさに応じて
クラスは細分化していく
>「店」「商品の弁当」「客」「実行するためのメインクラス」
でもまあ小規模な前提なら
それで大筋でおかしくないと思う
もし規模が大きくなるなら
「金」とか「(弁当の)具」とか「客の行列」とか
クラス化する場合もあるかも
>「客の腹の空き具合」
ゲームなの?
業務アプリとゲームだとかなり考え方が違う
486デフォルトの名無しさん
2017/11/06(月) 20:10:14.21ID:tjV5ukzM >>478
>質問2)
>売買のメソッド
これは二者関係だから
複雑になりがちなんだよね
まず話を簡単にするためゲームだとして
店視点の販売目的のゲームなのか
客視点の満腹目的のゲームなのかで違う
小規模ソフトならプレイヤー視点の方に
メソッドをつければOK
じゃあもっと複雑な場合どうするか?
客の買うメソッドから
店の売るメソッドを呼ぶという
二重呼び出しもありうるし
第三者が「売買」メソッドを
持って仲介するケースもありうる
「デザインパターン」とか学ぶと
そういう複雑な関係のさばき方が分かってくる
>質問2)
>売買のメソッド
これは二者関係だから
複雑になりがちなんだよね
まず話を簡単にするためゲームだとして
店視点の販売目的のゲームなのか
客視点の満腹目的のゲームなのかで違う
小規模ソフトならプレイヤー視点の方に
メソッドをつければOK
じゃあもっと複雑な場合どうするか?
客の買うメソッドから
店の売るメソッドを呼ぶという
二重呼び出しもありうるし
第三者が「売買」メソッドを
持って仲介するケースもありうる
「デザインパターン」とか学ぶと
そういう複雑な関係のさばき方が分かってくる
487デフォルトの名無しさん
2017/11/06(月) 20:13:40.02ID:tjV5ukzM >>478
>質問3)
店の弁当を減らす処理と
客の弁当を増やす処理を同時に行う
>質問4)
客クラスの変数で弁当の所有数を表現して
食事メソッドなどで消費したら減らす
店側で帳簿をつけていて
客側でも家計簿をつけているとイメージして
それをプログラムで表現すると
何をすればいいか分かりやすいかも
>質問3)
店の弁当を減らす処理と
客の弁当を増やす処理を同時に行う
>質問4)
客クラスの変数で弁当の所有数を表現して
食事メソッドなどで消費したら減らす
店側で帳簿をつけていて
客側でも家計簿をつけているとイメージして
それをプログラムで表現すると
何をすればいいか分かりやすいかも
488デフォルトの名無しさん
2017/11/06(月) 20:27:33.35ID:tjV5ukzM なお今回は弁当だから店と客の所有数の増減の
つじつま合わせだけやればいいと思うけど
組織間の社員や会員の移動みたいに
個体識別が必要なものが移動する場合は
参照したりIDを振ったりやはり複雑になる
つじつま合わせだけやればいいと思うけど
組織間の社員や会員の移動みたいに
個体識別が必要なものが移動する場合は
参照したりIDを振ったりやはり複雑になる
489デフォルトの名無しさん
2017/11/06(月) 20:31:16.29ID:1qhCOQ98 まず図を書いたほうがいいと思う
490デフォルトの名無しさん
2017/11/06(月) 20:33:36.39ID:T+apbet3 やろうとしていることがシミュレーションゲームだよな。
491デフォルトの名無しさん
2017/11/06(月) 20:57:20.04ID:f1KpQ6jU みなさんありがとうございます。
質問にあいまいな部分が多すぎて分かりにくい文章ですいません。
自分はまだ始めたばかりの初心者なので、大規模なものでは無くeclipseの練習がてら細々と色々作ってコンソールで実行しようと考えています。
いくつかご指摘があった通り、確かに「客視点」なのか「店視点」なのかを決めてしまったほうが良いですね。
とりあえず486の通り客視点で作ってみようかと思います。
あまり規模を大きくすると混乱すると思うので、「店1つ」「客1人」「弁当1種類」でやってみます。
485で書いていただいたような「通貨」や「弁当の具」や「客の行列」などはまだ考えないことにします。
>>487
この場合、客と店にそれぞれカウンター変数を作ってそれぞれカウントするような認識で良いでしょうか?
それとも弁当自体にカウンターを持たせてオブジェクト数をカウントするのでしょうか?
>>484
リスト構造はLinkedListしか使ったことが無いので他にどのようなものがあるか調べてみようかと思います。
質問にあいまいな部分が多すぎて分かりにくい文章ですいません。
自分はまだ始めたばかりの初心者なので、大規模なものでは無くeclipseの練習がてら細々と色々作ってコンソールで実行しようと考えています。
いくつかご指摘があった通り、確かに「客視点」なのか「店視点」なのかを決めてしまったほうが良いですね。
とりあえず486の通り客視点で作ってみようかと思います。
あまり規模を大きくすると混乱すると思うので、「店1つ」「客1人」「弁当1種類」でやってみます。
485で書いていただいたような「通貨」や「弁当の具」や「客の行列」などはまだ考えないことにします。
>>487
この場合、客と店にそれぞれカウンター変数を作ってそれぞれカウントするような認識で良いでしょうか?
それとも弁当自体にカウンターを持たせてオブジェクト数をカウントするのでしょうか?
>>484
リスト構造はLinkedListしか使ったことが無いので他にどのようなものがあるか調べてみようかと思います。
492デフォルトの名無しさん
2017/11/06(月) 21:32:12.25ID:T+apbet3 目的のわりにやろうとしてることが複雑すぎる。
493デフォルトの名無しさん
2017/11/06(月) 21:39:56.46ID:tjV5ukzM >>491
>客と店にそれぞれカウンター変数を作って
>それぞれカウントするような認識
「カウント」が弁当の数のカウントならそうだよ
(販売数のカウントだと一度に複数売るとズレてしまう)
弁当の所有数を店と客の変数で表現するのが一番簡単
ただ弁当の種類が増えたり売買が複雑になってくると
リストなどに入れて店や客に直接弁当オブジェクトを持たせる
というやり方の方が逆に分かりやすくなってくる
弁当が100個なら100個オブジェクトを生成するというように
ゲームの世界とオブジェクトが一対一対応すると認識しやすい
ミニゲームにはそこまでいらないけど本格的なゲームなら必要
>客と店にそれぞれカウンター変数を作って
>それぞれカウントするような認識
「カウント」が弁当の数のカウントならそうだよ
(販売数のカウントだと一度に複数売るとズレてしまう)
弁当の所有数を店と客の変数で表現するのが一番簡単
ただ弁当の種類が増えたり売買が複雑になってくると
リストなどに入れて店や客に直接弁当オブジェクトを持たせる
というやり方の方が逆に分かりやすくなってくる
弁当が100個なら100個オブジェクトを生成するというように
ゲームの世界とオブジェクトが一対一対応すると認識しやすい
ミニゲームにはそこまでいらないけど本格的なゲームなら必要
494デフォルトの名無しさん
2017/11/06(月) 21:56:37.61ID:C9PfqYRK 複雑にした Life game か?
495デフォルトの名無しさん
2017/11/06(月) 23:32:04.04ID:hLy/qxdc >>478
直接の答えじゃないんだけどオライリーの「HeadFirstデザインパターン」を
読んでみるのもいいかも
質問のような店、商品、客のクラスを例にしてデザインパターンを使ってどう扱うかを
サンプルコードで説明しているので参考になると思う
直接の答えじゃないんだけどオライリーの「HeadFirstデザインパターン」を
読んでみるのもいいかも
質問のような店、商品、客のクラスを例にしてデザインパターンを使ってどう扱うかを
サンプルコードで説明しているので参考になると思う
496デフォルトの名無しさん
2017/11/07(火) 05:57:39.09ID:uepCx6fG これは、プログラムの問題じゃない。
システムの設計。SE の仕事。
図書館の貸し出しシステムとか
情報処理資格上級のデータベーススペシャリストの、過去問題集に一杯載ってる。
上級SE とか、部長クラスの資格
システムの設計。SE の仕事。
図書館の貸し出しシステムとか
情報処理資格上級のデータベーススペシャリストの、過去問題集に一杯載ってる。
上級SE とか、部長クラスの資格
497shosinsha
2017/11/07(火) 08:48:13.35ID:G8xLWgQW privateとpublicはよく使うけど protected とか未指定って何!
パッケージとかサブクラスって何!
finalって何!
なんで無駄に継承して作るの!!
みたいなこと思うのは私だけでしょうか メリット・デメリットが一切わからん・・・
パッケージとかサブクラスって何!
finalって何!
なんで無駄に継承して作るの!!
みたいなこと思うのは私だけでしょうか メリット・デメリットが一切わからん・・・
499350です
2017/11/07(火) 08:57:52.64ID:FPDcUT3d >>478は私じゃないですが
コンストラクタの件もそうなのですが、自分でこうしてプログラムを書いてみようとすると、同じようにい設計面での様々な悩みが大量に出てきて
どうしていいかわからなくってしまう
なにか指針となる良い本とかないだろうか
コンストラクタの件もそうなのですが、自分でこうしてプログラムを書いてみようとすると、同じようにい設計面での様々な悩みが大量に出てきて
どうしていいかわからなくってしまう
なにか指針となる良い本とかないだろうか
500遊園地
2017/11/07(火) 09:53:53.39ID:Pq/ecwAD501デフォルトの名無しさん
2017/11/07(火) 10:24:16.08ID:uepCx6fG まずこの本で、オブジェクト指向を学ぶ。
スッキリわかる Java入門 第2版、2014
スッキリわかる Java入門 実践編 第2版、2014
スッキリわかる サーブレット&JSP入門、2014
実践Javaコーディング作法 プロが知るべき、
112の規約と21の心得、森崎雅稔(まさとし)、2014
Java 最強リファレンス、田中裕一、2014
EFFECTIVE JAVA 第2版、2014
Spring Framework 4 プログラミング入門、掌田津耶乃、2014
Spring Boot プログラミング入門、掌田津耶乃、2016
これらはプログラミングの本だから、これらを読んでも設計はできない。
システムの設計は、SE の仕事
図書館の貸し出しシステムとか、中古車販売システムとか、
情報処理資格上級のデータベーススペシャリストの、過去問題集に一杯載ってる。
上級SE とか、部課長クラスの資格
実際の仕事では、プログラミングよりも、設計とフレームワーク、
サーバーの環境構築・運用が重要で、10年以上掛かる
スッキリわかる Java入門 第2版、2014
スッキリわかる Java入門 実践編 第2版、2014
スッキリわかる サーブレット&JSP入門、2014
実践Javaコーディング作法 プロが知るべき、
112の規約と21の心得、森崎雅稔(まさとし)、2014
Java 最強リファレンス、田中裕一、2014
EFFECTIVE JAVA 第2版、2014
Spring Framework 4 プログラミング入門、掌田津耶乃、2014
Spring Boot プログラミング入門、掌田津耶乃、2016
これらはプログラミングの本だから、これらを読んでも設計はできない。
システムの設計は、SE の仕事
図書館の貸し出しシステムとか、中古車販売システムとか、
情報処理資格上級のデータベーススペシャリストの、過去問題集に一杯載ってる。
上級SE とか、部課長クラスの資格
実際の仕事では、プログラミングよりも、設計とフレームワーク、
サーバーの環境構築・運用が重要で、10年以上掛かる
502デフォルトの名無しさん
2017/11/07(火) 10:33:42.87ID:OjaJJCZW 10年経つと学習速度が追いつかなくなってお払い箱になる
SEとは成れの果てだ
だが毎日感謝の正拳突きを続ければ道が開ける、生涯現役
SEとは成れの果てだ
だが毎日感謝の正拳突きを続ければ道が開ける、生涯現役
503デフォルトの名無しさん
2017/11/07(火) 10:50:50.46ID:9O+xl0zZ504デフォルトの名無しさん
2017/11/07(火) 10:51:22.93ID:9O+xl0zZ ズレてた
505デフォルトの名無しさん
2017/11/07(火) 14:59:23.44ID:X/d0WSR0506デフォルトの名無しさん
2017/11/07(火) 16:15:54.55ID:PHAeZGZp >>501
テンプレも長くなったな
テンプレも長くなったな
507デフォルトの名無しさん
2017/11/07(火) 16:45:25.12ID:1gOGMHE5 >>506
実務がないのにあんなにやってもどれほど意味があるのかどうか。
実務がないのにあんなにやってもどれほど意味があるのかどうか。
508デフォルトの名無しさん
2017/11/07(火) 18:21:11.72ID:HKEWD4ZX Java始めます。
eclipseインストールしました。
よろしくお願いします。
eclipseインストールしました。
よろしくお願いします。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- テレビ朝日 本社から男性が転落し死亡。関連会社社員か 当たった通行人が左肩軽傷 [阿弥陀ヶ峰★]
- テレビ朝日本社から20~30代の関連会社社員とみられる男性が転落し死亡 六本木けやき坂通りの通行人にはけが人なし [少考さん★]
- 小島瑠璃子さん、代表取締役を務める会社を破産申請 [牛丼★]
- 「残クレ」でマイホーム、国が銀行向け保険 新型住宅ローン普及促す -日経 ★3 [少考さん★]
- 日本、G7への中国招待を懸念 議長国フランスに慎重な対応要請 [どどん★]
- 【サッカー】日本代表、FIFAランキング“4位”の強豪イングランドとの対戦が正式決定! 来年3月に聖地ウェンブリーで激突へ [久太郎★]
- 千晴におちんちん舐めてもらいたい♥
- たまにはこういうドーナッツ食いたくなるよな
- にぎにぎペニスにぎペニス♪
- 【悲報】ジャップ、日中戦争に賛成が5割弱...軍歌の音が聞こえる... [856698234]
- ブタをぶったたく
- ひまだねー
