[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 07/13 07:04 / Filesize : 160 KB / Number-of Response : 657
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

★★Java質問・相談スレッド162★★



1 名前:デフォルトの名無しさん mailto:sage [2013/06/09(日) 20:27:10.93 ]
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    pc11.2ch.net/hp/
Webプログラミング pc11.2ch.net/php/
をご利用下さい。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 (p)ttp://www.wikiroom.com/java/?path,classpath
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」

前スレッド
★★Java質問・相談スレッド161★★
toro.2ch.net/test/read.cgi/tech/1364006637/

263 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 12:17:59.16 ]
>>261
getStringでnullが返ってくることが例外なのか意図された状況なのかも>>248のコード片だけじゃわからないからね

例えば配列は用意した分にしかアクセスできないけど、
用意しなかった分には任意の初期値を用意した無限のインデックスでアクセスできる配列クラスを作りたいとか
そういう場合に初期値としてnullを用意したという状況ならば、getStringでnullが返ってくることは例外ではなく正当な結果だし

>>248がそういうライブラリなのか、そうじゃないライブラリなのか絞り込むための材料は用意されていない
よって回答者のレスが抽象的・一般的になってしまうのは、そもそも用意されてるコード片が抽象的すぎて何も言えないからなんだよ

264 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 12:30:33.95 ]
> JNI は、null ポインタまたは不正な引数型の受け渡しのようなプログラミングエラーについてチェックを行いません。
これは意味が違うだろ。
JNIというフレームワークとしては自動チェック機能を提供しないだけで、
JNIのCプログラムがnullチェックしなかったら確実に死ぬ

265 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 12:49:58.68 ]
>>248のダメな点

・return nullだと、strListの中に入っている正当な値としてのnullが返って来たのか、
 numがインデックスの範囲外であることを示すためにnullが返って来たのか区別することができない

・addStringにおいてnullチェックが行われていないため、
 Listの値としてnullを受け入れるのが正当な仕様であるように見える(これでいいのか?)



これらを総合すると、任意のインデックスを受け取って値を返し
初期化されてないインデックスが指定されたら初期値としてのnullを返すようなListを作ってるようにしか見えないが
これでいいのか?

266 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 13:14:57.75 ]
>>263
>>248のコードをよくよく読み直したら、だんだん解らなくなってきた…

>>265に加えて、
・strListは参照が可変でいいの?
・負の引数はエラー、正はOK、ただしInteger.MAX_VALUEはエラー

たぶん、
「初心者は難しいこと考えずに、まずは教科書よく読んで、
  しっかりコード書いて1歩ずつ理解していくと良いよ」
ってのが>>248にとって一番しっくりくる回答だと思う。

267 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 13:53:06.36 ]
>>266は無視しておk
こいつ、レスつけてる連中の中で一番腕が悪い、もしくは馬鹿。
論点を無視した指摘に、意味のないアドバイス。
なんでこんな奴がドヤ顔でレスしてんの?

268 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 15:42:05.39 ]
人を馬鹿呼ばわりすると中傷と言われますよ。
こういうときは
 × >>267は馬鹿
 ○ >>267のレスは馬鹿な内容だ
と言うものです。

269 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 16:40:23.09 ]
twitter botを作成しようとしてます gomyownway.hatenablog.com/entry/2012/08/05/151936
このページを参照して一応必要なキーなどな入れているのですが
Exception in thread "main" java.lang.NoClassDefFoundError: test/TweetTest のエラーがでて実行できませんどうすればいいですか?

270 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 16:52:52.97 ]
>>269
ソースコードではなく実行環境の問題
どういう環境で実行してるのか書け

271 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 16:59:28.46 ]
>>270
実行環境はmacでeclipseです



272 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 17:02:27.39 ]
>>269
まず画面にtestと表示するだけのプログラムを
完成させて出直せ

273 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 17:04:18.55 ]
>>272
それはもうやりました

274 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 17:09:41.01 ]
>>273
プロジェクトの設定をどこかおかしくしたのが原因
だから空のプロジェクト作り直して順番に確認していけ

275 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 17:32:01.23 ]
>>274
ありがとうございます
言われた通りに最初からやったらうまくいきました

276 名前:248 mailto:sage [2013/06/24(月) 22:02:44.02 ]
return null;
の部分を
throw new NullPointerException();
にするなんていうのはなし?

277 名前:デフォルトの名無しさん mailto:sage [2013/06/24(月) 22:33:14.84 ]
上の回答見てまだそんなこと言うか

278 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 07:58:37.22 ]
ヌルポを自分でスローするとか
どんだけお前はアホなんだよ
呼び出し側のパラメーター異常は
IllegalArgumentExceptionだろ

279 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 08:00:21.97 ]
途中で送信したoops!
ノーチェックかチェックしてIllegalArgumentException
スローするかどちらかにしろ

280 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 10:09:07.50 ]
そうか
なぜかreturn null前提で考えてた

281 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 14:58:19.28 ]
質問:変数paramがユーザー指定の文字列の場合、これってコードインジェクションされる可能性あります?

String base = "ping ";
int ret = Runtime.getRuntime().exec(base + param).waitFor();

ぱっと見た目やばそうなんだけど・・・



282 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 15:15:08.63 ]
うん。

283 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 15:22:35.69 ]
ですよねぇ・・・
実際セミコロンつけてコマンド連ねてみても動かないから、証明出来なくて困ってる
なにまちがえてんだろ

284 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 15:27:35.39 ]
コマンドインジェクションはむずいんじゃないのかな。
JavaのRuntime.execはシェルを呼ばない。単純に文字列をトークンに分割して
最初のトークンで指定されたコマンドに以降のトークンを引数としてわたすだけ。

なので;や|、&といったシェルが解釈する文字列は機能しないと思う。

285 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 15:36:04.27 ]
最近Java更新しようとするとウィルス対策ソフト入れようとするんだけど

286 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 16:29:27.50 ]
>>284
なるほど、サンクスです。適当に付け足してもうごかないわけだ
しかし、チェック処理がないのがきもちわるい
作った本人が分かってたのか、分かってなかったのか、わからんな・・・

287 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 16:50:16.66 ]
RuntimeやめてProcessBuilder使えって通達、最近来てなかったっけ?

288 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 17:04:47.01 ]
既存のソースにコレがあったので、直した方がよくね?って話に持っていこうかと。
このためだけに触りたがらないヤツがいるので、危険度を証明したかったんだが
証明できんw
という夢を見た

289 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 23:00:45.63 ]
abstractクラスをうまく使えるようになるとかなりソース綺麗になりますねぇ
Javaは設計が上手くいったときがスカっとして個人的に一番楽しい

290 名前:デフォルトの名無しさん mailto:sage [2013/06/25(火) 23:05:01.54 ]
スカはちょっと・・・

291 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 01:57:41.23 ]
abstractとか失敗設計の典型例だろ



292 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 03:55:18.95 ]
?

293 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 04:02:32.31 ]
>>291
これはひどい

294 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 05:40:01.92 ]
そもそもオーバーライドはバグの温床なのに必ずオーバーライドしなきゃダメな時点でアウト

295 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 06:53:39.61 ]
オーバーライド以上にコードのコピペがバグの温床。

いつの日か出会うかもしれない変な継承によるバグにおびえるヒマがあったら
今目の前にあるコードから継承や抽象クラスやコンポジションを使ってコードの
反復を一つでも減らした方がまだ生産的。

296 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 07:13:47.54 ]
>>295
オーバーライドではない→コピペ

まずこの発想がキチガイ的でヤバイ

297 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 07:24:24.63 ]
オーバーライドはスーパークラスの呼び出しをJavaDocで指示するケースが一番ヤバイな
protectedなメソッドを空実装しといてオプショナルにしとくのなら安全で使いやすいが

298 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 07:29:01.28 ]
> オーバーライドではない→コピペ

こういう解釈にいたる時点で日本語読解力がヤバい。

バグの温床としてオーバーライド < コピペだとは書いたけど、
オーバーライド無し -> コピペとは一言も書いていない。

299 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 12:39:13.32 ]
コンストラクタで必ずsuper()を呼び出さないとアカンやつ大杉や!

300 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 14:45:51.34 ]
オーバーライドがバグの温床なんていうのはいいすぎじゃないかな
依存関係からいっているのかな、だけど普通abstractクラスはそれを分散させないために使うんじゃない?

例えば描画と更新が必要なGUI開発やゲーム開発とかで
ArrayList<MyObject> objects = new ArrayList<MyObject>();
public void update() {
for(MyObject mo : objects) mo.update();
}
public void render() {
for(MyObject mo : objects) mo.render();
}

のように描画する対象物がどんな形でどんな役割であろうと同一化したほうがスッキリする場合、
abstract class MyObjectにして座標等のフィールドはprotectedにする。
で、update()メソッドもabstractにしてrender()に関しては場合による。

以降はMyObjectクラスを継承したMOBoxクラス、MOBarクラス、MOMenuクラス、
ゲームならMOPlayer、MOEnemy・・・
といったように本来の役割が違ってもかなり深く抽象化できて扱いやすいことは多いよ。(SwingのJComponentクラスがまさにこれだよね)
Decoratorパターンも導入しやすいですし。

301 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 20:09:38.19 ]
たとえ具体クラスが一つしかなくたって、
ふくれあがった唯一神クラスを分割記述するためだけに
abstract使ってもいいのよ?



302 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 20:13:28.83 ]
そもそも、目的にあった道具を使うもんじゃないかな。

勝手な想像だが、 >>291 は、道具の使い方や、使う場面を間違えてるんじゃないかと思う
カラフルな絵を書くのが目的のときに、
「黒しか出ないってなんだよ、エンピツつかえねぇ!」

「エンピツ使うとか失敗するにきまってるだろ」
って言ってるように聞こえる。

303 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 21:07:21.54 ]
インターフェースを定義した後にロジック実装の骨格を提供するのにも使うな > abstract

単にabstractを使う機会が無かっただけじゃない?

304 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 22:19:30.43 ]
>ふくれあがった唯一神クラスを分割記述するためだけに
>abstract使ってもいい
意味や機能でなく
処理でクラスやメソッドを分けるのは
JAVAドカタの得意技だね

305 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 22:35:34.39 ]
ロジック実装して初めてインターフェースは見えてくるもの
それがわかってないからたいてい抽象化が無意味になって失敗する

だいたい考慮すべきことが多いのに最初から一発OKな設計になるわけない
・引数にするか、メンバーにするか
・使うのはここだけか、何度も使うことになるか
・・・

306 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 22:39:41.25 ]
>>305
>ロジック実装して初めてインターフェースは見えてくるもの
それはお前がドカタだから。
設計のできる人はそんなこと無いから。

307 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 22:51:51.03 ]
処理によってクラスやメソッドを分けるのは当たり前じゃ?
それに違和感を感じるのはクラス分けると書けないいわゆるオブジェクト指向になれてない人か、
デザインパターンすら認めない?生きた化石じゃないか?
仕事を割り振ることを考えたらabstractが設計失敗なんてありえないと思うよ。趣味でやってるレベルでもわかる。

>>305
>だいたい考慮すべきことが多いのに最初から一発OKな設計になるわけない
同意だけど、abstract等で縛っていかないから抽象化が失敗するんだと思う。

>ロジック実装して初めてインターフェースは見えてくるもの
これを念頭に置くのは大反対。
抽象化しすぎると将来どうなるかわからないからpublicにしとけ的な設計が一番ダメに感じる。
見えてこないのはまさに修飾子を正しく把握していない、もしくは縛って自由を獲得する設計に慣れていないだけ。

308 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 22:56:42.35 ]
>処理によってクラスやメソッドを分けるのは当たり前じゃ?

いやー、JAVAドカタって
ほんっっとにどうしようもないな

309 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 22:57:04.78 ]
「このクラスについて詳しく見たわけじゃないけどこのクラスもあのメソッド使えそうだな」

これ、誰でもAPIで経験してるはず。
設計さんに感謝やで。
継承がバグの温床なんていったらバチあたるでほんま。

310 名前:デフォルトの名無しさん mailto:sage [2013/06/26(水) 23:23:04.49 ]
抽象クラスがなかったらコールバック関数に渡す無名インナークラスとかどうするんだよ

311 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 00:40:03.70 ]
うむ。RCP息してない。



312 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 01:40:13.43 ]
>>286
そういやそのへんの挙動、最近のupdateで何か変わってなかったっけ。
記憶違いかも知れんが。

313 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 01:40:54.77 ]
処理によってクラス分ける利点は静的に扱うときに一番あらわれる気がする
動詞をクラス名にしたりね。

314 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 01:43:54.45 ]
List<Object> list = new ArrayList<Object>();
みたいな書き方って海外の人あまりしないよね?なぜ日本ではこれが推奨されているの?

315 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 01:56:34.66 ]
Javaのジェネリクスは保守的でコードレベルでタイプセーフにするだけだからな
Java8だかでインタフェースのメソッドがステートレスに実装可能になるらしいから驚き

316 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 02:17:56.80 ]
>>314
海外ではどんな書き方なん?

317 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 02:27:14.62 ]
>>316
普通に
ArrayList<Object> list = new ArrayList<Object>();
って書く人が多いように思う。

自分もそう書いていたんだけど
List<Object> list = new ArrayList<Object>();
のほうがいいよ的な意見もよく聞く。

だけどそういう人でも
JComponent button = new JButton();
ってのは書かずに
JButton button = new JButton();
と書く人が多い。

なぜArrayListのときはそういう書き方をするのか教えて欲しい。

318 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 02:38:07.98 ]
>>317
意味論的にそれが有効だからとしか。
ArrayListはランダムアクセス可能なList
JButtonはSwingのボタンUIとして確固たる知名度と意味を持つ
てかJComponentは抽象度が高すぎるしね

319 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 02:40:12.03 ]
そもそも前と後ろ同じじゃないとなんか感覚的に見た目気持ち悪いんだがどうなん

320 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 02:45:07.10 ]
宣言側はアプリケーションで必要とされている意味論的に適切な抽象度で宣言する
生成側はパフォーマンス特性に合わせて無難または最適な物を生成する

321 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 02:46:01.29 ]
>>314
こういうのってキャストとかしなくて大丈夫なん?



322 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 02:48:56.11 ]
ArrayList (Java Platform SE 7)
docs.oracle.com/javase/jp/7/api/java/util/ArrayList.html

通常、リストの同期をとるには、リストを自然にカプセル化するオブジェクトで同期をとります。
そのようなオブジェクトが存在しない場合は、Collections.synchronizedList メソッドを使用してリストを「ラップ」する必要があります。
これは、リストへの偶発的な非同期アクセスを防ぐために、作成時に行うのが最適です。

List list = Collections.synchronizedList(new ArrayList(...));

323 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 03:07:49.08 ]
>>322
マルチスレッドでadd()等の処理をするときに同期どれよというのはわかってけど
まるで答えになってないよね?

324 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 03:15:37.97 ]
The List Interface (The Java? Tutorials > Collections > Interfaces)
docs.oracle.com/javase/tutorial/collections/interfaces/list.html

Here's a nondestructive form of this idiom, which produces a third List consisting of the second list appended to the first.

List<Type> list3 = new ArrayList<Type>(list1);
list3.addAll(list2);

325 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 03:20:07.47 ]
>>321
オブジェクト指向言語で抽象度の高い方向(スーパーセット)にキャストするのは問題ない
ここら辺は個別に疑問を持つより基本を一通り知ってから考えた方がいいよ

326 名前:314 mailto:sage [2013/06/27(木) 03:41:15.24 ]
>>324
そこじゃなくない?外国人が使っているよということを言いたいの?何が言いたいの?

リンク先で、
同じオーダー中に同じ要素を含んだ二つのListが等しくなるってのはわかった。
で、equals書くならhashCodeも一緒に書けよっていう某本にも書いてるその辺にも強いことがわかった。
これが答え?

327 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 06:21:34.84 ]
外国・・・そうかなぁ? 個人的には>>320に同意。

例えば適切な抽象度のインターフェイスが別にあるのにArrayListとかHashMapと
いった実装クラスを引数として要求したり返値として返したりする公開メソッド
を持つクラスに出会った場合は、とりあえずその品質を疑ってかかる。
いわゆる「臭う」コードのよくあるパターンだと思う。

内部変数にしても例えばArrayList使って抽象度を下げるとListのような抽象度の
高い引数を受けにくくなるので、こちらも普通はListを使うかな。
ある場所での型の抽象度の低さはコード中の他の場所に伝染するんだよね。

328 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 06:40:22.65 ]
>>318
その理屈はおかしい
JavaのListはランダムアクセスが効率的に行えることを保証しないので、
ランダムアクセスしたいならArrayListで受けなければならないということになってしまう
いや意識してそういう理由でArrayListならそれでいいと思うけどね
ジェネリクスでList,RandomAccessとする手もあるけど
内部でnewする変数にそこまでするのは現実的じゃないわな

329 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 06:56:02.07 ]
>>325
ただしそれはオーバーライドがない時の話な
オーバーライドされたメソッドがある場合は派生クラスが厳密に規約を守っているか確認しなければ規定クラスとして使ってはいけない
オーバーライドしているとたやすくis aの関係が破壊される
規約を作れば良いというがその規約にバグがないことも規約が守られてることも保証することは難しく人の注意力に頼るしかない
だからバグが量産される


330 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 07:06:20.79 ]
ListってまともにListIteratorで操作されてることは滅多にないよね
ランダムアクセスのためのインターフェースとしなかったのはJavaの大失敗の一つ

331 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 12:01:34.71 ]
List をランダムアクセスにしたら LinkedList が List じゃなくなるじゃないですか
名前的に紛らわしい



332 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 13:37:26.26 ]
予期せぬListの実装が引数に渡されたらどうなっちゃうの?

333 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 14:51:40.48 ]
java.util.RandomAccessに代入可能かどうかで判定するのが
業界の慣習。一応。

334 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 15:20:23.50 ]
String戻せば済むところをCharSequence返すメソッドは考えすぎだと思う。

メソッド引数としてはアリ

335 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 21:25:21.75 ]
>>334
Androidの真似して
かっこいいと勘違いしたんだろ

336 名前:デフォルトの名無しさん mailto:sage [2013/06/27(木) 23:59:50.59 ]
StringBuilder返すところでホントはAppendable返したいのだが
IOExceptionがじゃまなの…

337 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 01:16:49.31 ]
>>331
.NETはまさにそうなってるね
名前的には残念なことになってるが設計としてはアレが正解だわ

338 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 01:20:26.99 ]
>>329
その話、アップキャスト関係なくね?

339 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 03:30:45.63 ]
private int a;
private int b;
private int c;

public Constructor(int a, int b) {

this.a = a;
this.b = b;

// 引数a, bできまるcはこう書くべきなのか
c = a+ b;

// こう書くべきなのか、どっちがいいですか?
c = this.a + this.b;

// やはり前者?
}

340 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 03:40:28.29 ]
>>339
前者にすべき。マルチスレッドに対応させる際に後者だと都合が悪い

341 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 04:03:42.53 ]
>>340
把握しました



342 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 04:14:49.32 ]
横レスだけど
後者だとどう都合が悪いの?

343 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 07:05:24.68 ]
問題ないよ

344 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 07:30:16.62 ]
>>340
最悪な回答だな

345 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 07:33:43.35 ]
どっちでもいいだろ
コンストラクターが完了するまでは
オブジェクトの構築が終わってないんだから
他のメソッドに合わせてthisを使う必要はない

346 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 08:59:23.11 ]
>>342-345
マルチスレッドにした場合は初期化中のオブジェクトにアクセスされる可能性がある。つまり

this.a = a;
this.b = b;
// ここでthis.aやthis.bの値が別スレッドから更新される可能性もある
c = a+ b;

その結果「引数a, bできまるc」という仕様が満たされないことになる
c = a+ b;なら別スレッドから何かされても仕様は満たされるが、
c = this.a + this.b;にした場合は、初期化中のオブジェクトが外部に公開されて
this.aやthis.bが変更される危険がないかConstructorクラス全体を調べなければならない

どちらの方が安全にコーディングできるか考えれば答えは明らかだよね

347 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 10:30:31.07 ]
>>346
Java言語仕様読み直せ

348 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 10:36:23.41 ]
>>339
コメントに沿った実装という意味では前者だな。
意味的にも前者のほうがいいんじゃなかろうか、そのコード片だけでは判断できんけど。
結果はどっちも変わらん。

349 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 10:41:16.57 ]
cが引数a,bから決まるのでなくメンバのa,bから決まる値の場合は・・?

350 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 10:48:00.80 ]
どこで>>346みたいな知識を仕入れたのか気になるんですが...
検証の仕方も思い浮かびません...

351 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 10:50:51.90 ]
コンストラクタってスレッドセーフじゃないん?



352 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 10:51:08.41 ]
>>349
その場合はそりゃ後者だろう。

353 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 10:52:26.29 ]
The Java? Tutorials
docs.oracle.com/javase/tutorial/

JAVA覚えようぜ

354 名前:デフォルトの名無しさん [2013/06/28(金) 11:37:29.87 ]
>>346の謎解きをするスレはここですか?
>初期化中のオブジェクトが外部に公開

コンストラクタで外部にthis参照が逸出するときのことを言ってるんだろう。
ふつう、コンストラクタはthis参照を外部に公開しないように実装するものなんで、
そういう状況になること事態が実装上の不備だと思う。拙者そう思う。

355 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 12:26:37.11 ]
コンストラクターがマルチスレッドって
ただのコーディングミスだろ

356 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 12:43:30.30 ]
>>354
でもそれだとマルチスレッド関係ないよな...

357 名前:354 [2013/06/28(金) 12:50:39.56 ]
>>356
俺はマルチスレッドの話をしたつもりだったんだが、お前はなんで俺の話がマルチスレッドと関係ないと思うの?

358 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 13:15:22.64 ]
double checked locking 問題ではコード読んだ時の直感に反して
コンストラクタ完了前に参照漏洩してたりしたからなぁ。

あの手の問題あるとチェックしきれん。

359 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 14:28:50.08 ]
>>357
シングルスレッドでも逸出させられる

360 名前:デフォルトの名無しさん [2013/06/28(金) 14:38:54.68 ]
B木を実現するjavaプログラム、難しいけどわかる人いますか?

361 名前:桃白白 ◆9Jro6YFwm650 [2013/06/28(金) 14:45:17.44 ]
>>360
桃白白わかるよ。



362 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 15:01:04.41 ]
スレッドAが生成した新オブジェクトを
ロック無しで確実にスレッドBに届ける方法は無く、

スレッドAがロックすれば確実に初期化された新オブジェクトが
全スレッド間で共有されてしまうので

正直 ど う で も い い

363 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 15:04:35.49 ]
自分も前者がいいな。10文字少ないので。

364 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 15:06:40.22 ]
>>361
すみません、教えてください。

365 名前:桃白白 ◆9Jro6YFwm650 [2013/06/28(金) 15:09:21.89 ]
>>364
B木のなにを知りたい?アルゴリズム?インプリメンテーション?
値を追加するところ?値を削除するところ?値を検索するところ?
どのあたり?

366 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 15:15:09.70 ]
>>350-351
TSM01-J. オブジェクトの構築時にthis参照を逸出させない
https://www.jpcert.or.jp/java-rules/tsm01-j.html

367 名前:デフォルトの名無しさん [2013/06/28(金) 15:16:16.75 ]
>>365
値の追加、検索、削除が出来ればOKです
初めに任意で最大の子の数を入力する所から始めたいです

368 名前:桃白白 ◆9Jro6YFwm650 [2013/06/28(金) 15:34:04.09 ]
>>367
コード欲しいってことね。
桃白白もいくつかコード眺めてみたけど、奥村さんのコードが一番きれいだと思う。

『Javaによるアルゴリズム事典』サポートページ
oku.edu.mie-u.ac.jp/~okumura/java-algo/

369 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 15:50:38.71 ]
>>368
ここに置いてあるzipファイルの中の「BTree.java」ですよね?
ありがとうございます!これを参考にします。

370 名前:桃白白 ◆9Jro6YFwm650 [2013/06/28(金) 15:55:43.37 ]
>>369
はい、それです。

371 名前:デフォルトの名無しさん [2013/06/28(金) 20:15:07.51 ]
JavaScriptは板違い
ローカルルール読んでこいよ異常者共



372 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 20:39:57.59 ]
自作クラスの感想などを頂きたいのですが、スレ違いでしょうか?

373 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 20:42:02.65 ]
相談のうちには入る…のかなあ

374 名前:桃白白 ◆9Jro6YFwm650 [2013/06/28(金) 20:49:48.68 ]
>>372
いんじゃないの。書いちゃいなよ。

375 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 21:26:55.04 ]
>>374
自分のコードの感想言われたらファビョる奴が良く言うよ

376 名前:372 mailto:sage [2013/06/28(金) 21:27:03.75 ]
ソースファイルが6つあるので、こちらにアップしていて遅くなりました。
ttp://sourceforge.jp/users/soremachi/pf/TokenTable/wiki/FrontPage/attach/tokenTable.zip
コーディングを補助する目的で作った文字列テーブルです。2ヶ月ほど前にJavaの勉強も兼ねて作りました。
(「TableTest.java」にとりあえずの使い方が書いてあります)

377 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 21:32:12.78 ]
おまいらIdeoneぐらい教えたれよ

378 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 21:32:33.32 ]
sourceforgeねぇ

379 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 21:48:31.18 ]
>>376
System.out.println( "Table file : ファイル名を指定してください" );
return false;
のようなものは
throw new IllegalArgumentException( "Table file : ファイル名を指定してください" );
のようにしておけ
false 返しても結局戻り値チェックしないんだし、エラーを無視して実行を続けるより死ぬ方がいい
特別に理由があって死にたくないときは try catch すればいい

380 名前:372 mailto:sage [2013/06/28(金) 22:04:25.51 ]
Ideoneにも上げました。Sourceforgeの方は消したいと思います。
ttp://ideone.com/IKjued
ttp://ideone.com/1IQ5G5
ttp://ideone.com/zOJYVA
ttp://ideone.com/7TUxdz
ttp://ideone.com/1kuWqV
ttp://ideone.com/9MOKz4
ttp://ideone.com/4QEy30

381 名前:デフォルトの名無しさん [2013/06/28(金) 22:08:09.94 ]
ideoneやcodepadは英語サイトだから利用規約や制限事項や禁止事項がわからないし、利用料金や支払い方法もわからん



382 名前:372 mailto:sage [2013/06/28(金) 22:32:42.03 ]
>>379
わかりました。
引数のチェックでは throw new IllegalArgumentException を使うのが一般的なんですか?

383 名前:デフォルトの名無しさん mailto:sage [2013/06/28(金) 23:49:28.98 ]
メソッドのコメントに
//- こういうの流行ってんの?

384 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 01:37:41.96 ]
一個目のファイルしかみてないけど、Javaな人はあれみて何も思わないの?
俺、すげー気持ち悪いんだけど。
setHead, setPrimary, set, file、全部キモい。
addとかappendとかkeyとかindexとかcolumnとかpush_backとかなんかそんな概念じゃないのか?
まあ、かろうじてinsertはありなのかもしれないが。

385 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 01:42:53.74 ]
あと、列データとかtokenとか、一体どこ経由でこのコードにたどり着いたんだ?

386 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 02:51:57.69 ]
突っ込みどころが多すぎる

列を追加してるのにsetHeadというメソッド addだろ
標準出力するだけのクラス tableを受け取るメソッドかtoStringに書けばいい
トリッキーなgetterとsetter 座標指定で十分
同一パッケージから直接変更し放題のフィールド 大事な値をうっかり壊しちゃうかもよ
何でもpublicメソッド エラーメッセージとか外から呼び出すの?
別のクラスに投げるだけなら直接呼び出せ
ファイルが閉じられない可能性がある
Exceptionでキャッチすんな
...

387 名前:372 mailto:sage [2013/06/29(土) 03:00:41.42 ]
>>384-385
insertは、なぜありなんでしょうか?Javaというか、オブジェクト指向に触れて3ヶ月ほどなので、
その概念というのがちょっとわからないです・・・。メソッドの持つ役割とかですか?
列データやtokenなどは、いい加減に書いてしまいました。
ArrayListを入れ子にしているので、行列のフィールドに対するコメント文です。

388 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 05:13:45.52 ]
>>387
慣用的に使われる用語とその組み合わせというのがあって、大抵それは求めれば他のソフトウェア
技術や数学用語にちゃんと由来が見つかる。

例えばデータ構造として表(table)という名前を使うのであれば列(column)や属性(attribute)、
行(row)やタプル(tuple)という言葉と組で使うのが慣用的。これらの用語は関係データベースの
世界に由来の一端(全てではない)があって、この世界ではrelation・attribute・ tupleかtable・
column・rowの組で使う(厳密にはこの二つの組は異なる概念なので混ぜるのも良くない)。

あとPrimary、これも元々関係データベースから来た用語だけど、数ある候補キーの中から一つ
を選んで主キー(primary key)とするのであって、PrimaryKeyならともかくPrimaryだけでは
意味をなしていない。無難なのはKeyColumnかな。

操作に関してもtableにinsertとはおぉDB的だなぁと思ったらsetと出てきてずっこける。
DB的にupdateとするとややずっこけ感は少ない気がする。

setHeadは三重の意味で良くない。一つは上記の通りheadという名前。二つ目は列の「追加」
なのにsetという用語を使っていること。最後にsetHeadというメソッド名はJava Beansの
規約でtableのheadプロパティの値をセットするメソッドに使う必要があること。

389 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 05:45:43.21 ]
要約:クラス設計がレビューされていないような品質

390 名前:384 mailto:sage [2013/06/29(土) 07:41:48.98 ]
>>388
あまりにアレ過ぎて言語化できなかったんだけど、すっきりしたよ。ありがとう。
俺、Javaは初心者なんだけど、Javaな世界ではあんな感じが普通なのかと思ったよ。
誰も何も言わないから。

391 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 08:25:23.88 ]
名付け規約に準ずるのは当然だが、
あまりにしつこい社会主義のようだと、せっかくの創造性がつぶれる
もともと日本人には発想性がある人が少ないのに、さらに減ってしまう

ジャワみたいにばかみたいに長い名前をつけるのもどうかと思うがな
コンパイル後も短いシンボルになってないので、実行時の翻訳にムダな時間がかかる処理系もあるだろう



392 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 08:58:37.24 ]
今のところコード品質に関する指摘は>>386だけだな
他は識別子の名前についてガヤガヤ言ってるだけで特に耳を傾ける必要はない
コーディング規約読めばそれで理解できる話だし

393 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 12:47:46.80 ]
包含関係がしっかりしていれば長い名前空間も苦にはならないが、そうなっていない
StringとStringBufferの区別は本当に必要なのか、とか

394 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 12:52:19.11 ]
なるほど、不変オブジェクトだけで十分、と。

395 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 12:56:03.85 ]
可変オブジェクトだけで十分、っていう意味かもしれないじゃない

396 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 14:25:16.00 ]
>>392
名前超大事

397 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 15:39:30.97 ]
>>396
チーム開発なのか個人開発なのか
ライブラリとして提供するのか

色々シーンあるだろ。個人開発なのに名付け規則に神経すり減らすのはエネルギーの無駄

398 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 15:48:00.90 ]
名前に神経すり減らすんじゃなくて
>>397みたいな奴が妥当な名前を付けられないってだけ

399 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 16:56:30.39 ]
会社の歯車がプログラムの歯車をつくるような環境って事か
それは自由がないわな かわいそうだな...

400 名前:372 mailto:sage [2013/06/29(土) 17:19:07.84 ]
>>386
別のクラスに投げるだけなら、といのは、ファイル入出力や画面への出力は、
同じクラスにメソッドとして持たせるという意味合いで合ってますか?
それとも、ひとつのJavaファイル内に複数のクラスを書くということでしょうか?
何でもpublicメソッドなのは、正直、アクセス修飾子の使い方をわかっていませんでした。

401 名前:372 mailto:sage [2013/06/29(土) 17:58:10.67 ]
>>388
知りませんでした。メソッド名は
(setHead -> add)、(setPrimary -> setKeyColumn)、(set -> update)、(get -> select)
こういう風にすればいいですか?



402 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 17:59:31.16 ]
> 正直、アクセス修飾子の使い方をわかっていませんでした

( ゚д゚ )

403 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 18:52:47.47 ]
そもそも、コンセプトとして、いわゆるDBのテーブルを想定しているのか、Excelのシート、つまり
二次元のデータの入れ物を想定しているのかがわからない。
そういう意図を表明するという意味で、名前重要。

404 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 18:59:40.27 ]
命名規則に話が集中しているのはそこがあまりにタコだと実装のレビューをしようにも読む方が
無駄な努力を強いられて嫌になるから。Tableクラスだけでもなかなかの忍耐が必要。

一人で書き捨てするコードならともかく、人に読んで貰うなら命名規則や慣用は要尊重。
無知を言い訳したオリジナリティーの発揮は単に有害。初心者こそ模倣から始めるべき。

・適切なクラス名やメソッド名が解らないのであれば既存のライブラリのAPIから似たような
 ことをしているクラスやメソッドの名前を探して真似をする。
・適切なコメントの付け方が解らないのであれば既存のライブラリのソースコードを調べて
 (クラス名に.javaとつけてググればいくらでもヒットする)真似をする。JavaにはJavaDoc
 形式というコメントの付け方が定義されていて、これ以外の独自コメント形式は単に迷惑。
・適切な変数名が解らなければ既存のライブラリのソースコードを調べて(以下略)

解らなければまず調べよう。
初学者ほど何故か調べない、真似をしない、コンパイル時のエラーメッセージも読まない不思議。

405 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 19:03:01.06 ]
クラス定義時の一般論として

・フィールドは基本private。さらにfinalに出来ないか検討する。Tableのtableなんかは
 finalに出来る。finalではないpublicは御法度。protectedも慎重に。
・フィールドの型は特別な事情が無い限りHashMapといった実装クラス名よりもMapと
 いうインターフェイスを用いた方が一般的に設計の抽象度が上がって実装に柔軟性が出る。
・データの重複はバグの温床なので避ける。例えばrow_no、row_sizeなんてフィールドが
 用意されているけれども、table.size()等で代用できないか検討する。パフォーマンス?
 それは素直で安全な実装で大敗してから考えるべき。
・特別な事情がない限りファイルIOは直接手作りしない。例えばTableクラスの場合は
 write(DataOutput out)、readFields(DataInput in)というDataInput、Outputを使って
 読み書きするメソッドを用意するのがお薦め。これだけでTableクラスをファイルに保存
 することも、ネット経由で投げることも、Hadoopでビックデータ解析(笑)にも使える。
 あるいはJAXBやJacksonを使ってXMLやJSONへマッピングする方法を検討する。

続く。

406 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 19:05:40.12 ]
Tableクラスに関するとりあえずのコメントとして

・カラムの型や名前をバラバラのMapで管理しているのはあまり良くない。素直にカラムの
 定義を扱うTableの内部クラスを用意して、
 public static class Column{public final int index; public final String name; public final String type;}

 これのリストをスキーマとして定義する。必要であればルックアップテーブルも。
 private final List<Column> schema = new ArrayList<Column>();
 private final Map<String, Column> nameToColumn = new HashMap ...

 スキーマ情報を提供する公開メソッドも用意すると親切だよね。
 public List<Column> getSchema() {return Collections.unmodifiableList(schema);}
 public List<Column> getColumn(int index) {return schema.get(index);}
 public List<Column> getColumn(String name) {return nameToColumn,get(name);}

・検索結果に一個結果を追加する度にサイズを+1した配列を生成して内容を全件コピーする
 凄いコードを見たような気がするのは気のせいだよね・・・素直に可変長であるList
 を使うべき。返値もListで良い。

・for(int i...)ではなく拡張for構文を使ってくれた方が読みやすい

・・・この調子で書いていくとどうなるのだろう・・・

407 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 19:15:00.14 ]
お前のレスを読むにもかなりの忍耐が必要

408 名前:372 mailto:sage [2013/06/29(土) 19:31:53.15 ]
>>406
スキーマって何ですか?

409 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 19:56:44.17 ]
自分で調べてから質問しろ

410 名前:デフォルトの名無しさん [2013/06/29(土) 19:58:21.58 ]
>>408
構造の定義のことでしょ。
>>406のコードでは列情報のことっすね。いまTableにはこの列がありまっせーていう情報。

411 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 19:58:31.40 ]
>>408
スキーマとは構造のこと。テーブルのスキーマはテーブルの構造のこと。
テーブルのスキーマは一般的には列の定義の集合で、個々の列は名前や型を持つ。

テーブルの構造をスキーマと呼ぶ一方で、具体的なデータが入ったテーブルその
ものはインスタンスと呼ぶ。スキーマとインスタンスもDBの世界で使われる言葉。

なのでDBの素養のある人であればtable.getSchema()がカラム定義のリストを返す
のは簡単に想像出来る。これが命名規約や慣用の強み。
ただschemaに関しては素直にcolumnList、getColumnListでも良いかもね。

というかこれ以上現状のコードをレビューをするのもしんどいので、一度自分で
色々調べ直して書き直したコードと共に出直してくれないかな。



412 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 20:05:52.52 ]
どんな勉強したらこんなに酷くなるの?
参考にしたものがどうしようもないゴミか、372が変な方向に理解しちゃったの?

ちょっとjavax.swing.table.DefaultTableModelを見てみなよ

413 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 22:07:32.53 ]
どんなレスを期待してコードを見てくれと言ってるのかわからないが、メソッド名を言われた通りに変えればOK
的なレベルに達してないから。

414 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 22:20:15.32 ]
詳細設計書なんていらんだろ派がこの板には多いと思うが、こういうコードを見れば
必要な場合もあるということがわかるはず。

415 名前:デフォルトの名無しさん mailto:sage [2013/06/29(土) 22:34:56.88 ]
>>414
こういうコードを見ても設計何ソレ
なのがJAVAドカタの真髄

416 名前:デフォルトの名無しさん [2013/06/30(日) 00:49:17.69 ]
Windowsで無料でJavaを勉強出来る開発環境を教えて下さい

417 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 01:12:40.42 ]
JDK + テキストエディタ

418 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 01:23:16.55 ]
いるんだよなこういうジジイ発想の奴が
Eclipseと答えるのがまっとうな人間

419 名前:372 mailto:sage [2013/06/30(日) 02:14:52.38 ]
みなさまのアドバイスを参考に書き直してみました
ご指導よろしくお願いします

mainクラス ideone.com/paGek6
Tableクラス ideone.com/vLUKre
Columnクラス ideone.com/IdrclV

420 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 02:20:15.16 ]
>table.getAttribute(j)
これはKUSOコード

421 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 02:37:58.18 ]
クソと言うなら理由も書け



422 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 02:49:23.64 ]
ちゃんと差分を見てあげようよw 初めのに比べたら随分スッキリした。
その分随分機能も削られているけど。

・Columnがattributeを持つのは変。意味的にここはnameだと思う。
・せっかくColumnをimmutable(変更不可能)なオブジェクトとして定義しているのに
 tableにgetTypeやgetAttributeを用意しているのは勿体ない。getColumnで直接
 Columnオブジェクトを渡して無問題。table.getColumn(index).getType()みたい
 に使える。
・コンストラクタにColumnの配列を渡すようにしたのは好判断だと思う。
 後からColumnを追加出来ないようにするだけで他の部分のロジックが単純になる。
・ただ内部的にはColumnsは配列ではなくListで持っていた方が色々と具合が良い。
 Javaの配列はimmutableに出来ない。なので例えば現状のgetAllColumnsはこれを
 使って個々のColumnを差し替えることが出来るので安全ではない。
 さらにコンストラクタ引数に渡したColumnsの配列は防御的コピーをすべき。
 private final List<Column> columnsとして、コンストラクタで
 this.columns = Collections.unmodifiableList(new ArrayList<Column>(Arrays.asList(columns)));
 とでもしておくと良い。getAllColumnsでcolumnsをそのままreturnしても無問題。
・細かいことだけどコンストラクタはTable(Column... columns)の方が使い勝手が良い。
 new Table(new Column(...), new Column(...))も、現状通りColumn[] columns = ...
 としてnew Table(columns)とする使い方も両方使える。
・insertで入力値の型チェックも実装すると素敵だと思う。

この調子で行くとよいんじゃないのかな。

423 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 02:57:42.08 ]
最初のコードに比べたらだいぶマシになったな
入門以前レベルから初心者レベルまで話が進んだ

424 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 03:03:45.80 ]
> getAllRecords

Listの中身を全件配列にコピーする、そんな定番処理は手作りするまえにAPIと
して用意されていないか調べるべきだろうね。もちろん存在する。
ListのtoArrayメソッドの使い方を調べてみると良いと思う。

425 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 03:09:50.58 ]
> public final void insert(final Object... record) {
finalに出来ないか検討するっていうレスがあったけどここまでする必要ない
classにfinalついてるからメソッドのfinalは全部無意味
サブクラス作れないからオーバーライドできないもん
仮引数のfinalはあってもいいけど

> for (int i = 0; i < table.getAllRecords().length; i++){
繰り返しの度に時間がかかるメソッドが呼ばれるけどいいの?

426 名前:372 mailto:sage [2013/06/30(日) 03:31:24.30 ]
>>403
DBへの問い合わせ文をメソッドに、データ構造をListにしてみよう、と思って最初は書いていました。
>>404-406,410,411
JavaDoc形式のコメント、クラス定義時の一般論や、DataOutput, DataInputのインタフェースやスキーマの利用方法、知りませんでした。
レビューを参考にして、色々調べ直してから出直します。コードをレビューして頂いて自分の無知がよくわかりました。ありがとうございます。
>>412
なにも参考にしないで、自分の欲しい機能を追加していきました。

あと、スレの流れ的に言いにくいのですが、>>408,>>419は、私ではありません。
このレスを書いていて発言する機会を失ってしまいました・・・。

427 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 03:31:57.59 ]
> getAllRecords

仕様をはっきりさせるべきだろうね。今のコードでは確かに新しいレコードの
追加は出来ないけれども、個々のレコードの中の値の書き換えは出来る。
シャローコピーだから。それが嫌ならディープコピーを実装するしかない。

ディープコピーまでは不要、書き換え可能は承知で単にレコードの集合を参照
可能にしたいだけなのであればやはり返値は配列ではなくListにして、
return Collections.unmodifiableList(records);とでもするのが実装も簡単
だし全件コピーに比べてオーバーヘッドも少ない。

mainの中のループもfor(Object[] record: table.getAllRecords()){ ...と
でもした方が読みやすい。

428 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 03:36:18.89 ]
なんだと〜

429 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 06:11:06.80 ]
>>427
ここまでくると異常者だな

430 名前:420 mailto:sage [2013/06/30(日) 07:39:46.72 ]
>>421
getAttributeはテーブルクラスのメソッド名として不適切
100歩譲ってgetColumnAttributeなら可。
それにgetXxxx(index)はgetterと紛らわしい

431 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 08:49:45.89 ]
getColumnAttribute
冗長な名前使っていてイライラせん?
getColAttr じゃいけん?



432 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 09:12:00.03 ]
>>431
そういう省略は好まれない。人によって省略したりしかかったり、またどう省略するかがまちまちだと困る。
スペルアウトするのが原則。

433 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 09:31:36.34 ]
>>432
誰が好まん?

434 名前:デフォルトの名無しさん [2013/06/30(日) 09:45:57.18 ]
>>433
コード読む人だろ。ColがColorなのかどうなのか定かじゃないだろ。
そんなとこでケチケチするちんけなやつのコードなんて見たくないってことだ。

435 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 09:47:19.17 ]
コンストラクタでIO使うのが常識なのか?
init(入力ストリーム)ってメソッド作ったら初期化はコンストラクタでやれ
コンストラクタで読み込むようににしろって先生に怒られた

436 名前:デフォルトの名無しさん [2013/06/30(日) 09:48:47.57 ]
>>435
むしろ非常識でござろうな。IOExceptionをどう処理するつもりなんだ。

437 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 09:51:53.93 ]
>>434
>>そんなとこでケチケチするちんけなやつのコードなんて見たくないってことだ。
さすがジャバラー(笑) 冗長な名前はムダなんだけどなぁ
バイトコードを解析した事ある?(笑)

438 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 10:05:05.10 ]
>>432
>そういう省略は好まれない
ところでprintlnとconcatはどう思いますか?

439 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 10:13:11.98 ]
>>435
>init(入力ストリーム)ってメソッド作ったら
コンストラクターが終わるとオブジェクトは構築されたと見なされる。
initを呼び出す前の状態が、クラス名の概念を表すオブジェクトとして適切かどうかによる。

>>436
コンストラクターでIOExceptionが出ると困るとか
どれだけジャバドカタは低脳なんだ。

440 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 10:35:01.08 ]
>>439
>>initを呼び出す前の状態が、クラス名の概念を表すオブジェクトとして適切かどうかによる
どういう意味?

441 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 10:46:01.05 ]
例外処理を当たり前に使うような手合いにはIO例外は外で受ければいいので気にならないんだろう
C言語の感覚が強い人はエラーは戻り値で判断するようにしたくなる
例外は文脈が吹っ飛ぶのであまり論理的でないしな
コンストラクタ内例外はnewの失敗としては検出できないのでそりゃ躊躇したくもなるだろう



442 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 10:55:32.68 ]
>>438
組み込みメソッド名の中には、そういう歴史的な理由経緯の省略がある場合があるが、それはそういうものだと
理解するしかない。
そういうメソッド名を自分が作るクラスに使うのはOKだと思うが、複合名詞を自分のセンスで省略するのは
好まれない。特に、Javaの世界では、スペルアウトするのが好まれる。なぜそうなのかは知らないが、
Javaのネーミングの規範として、スペルアウトしろと言われるのを良く見かける。

443 名前:440 mailto:sage [2013/06/30(日) 10:59:52.32 ]
>>441
例えば編集可能な文字列クラス(OreString)を自作したとする。
new直後は中身のデータも文字列の長さも未定義で、
initして初めて長さ0の文字列になるとする。
initする前は「文字列」の概念として不完全な存在だから
OreStringというオブジェクトは成り立っておらず、
この設計はおかしい。
この場合、OreStringContextとかOreStringDataとか
いうクラス名にするか、
コンストラクターでOreStringを適切な初期状態にする。

444 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 11:00:32.03 ]
Javaは常にTAB一段分のハンデがあるから長い名前は厳しいな

445 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 11:02:43.78 ]
>例外は文脈が吹っ飛ぶのであまり論理的でない
ジャバドカタは本当に頭が悪いな。

446 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 11:06:29.48 ]
ここで>>445に論理的な例外を説明する義務が発生しました
・逃げる
・説明する
・SAVE

447 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 11:08:53.55 ]
・ギムアップする

448 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 11:25:27.19 ]
>>446
例外は「やりたいことが最後まできちんとできた」か
「やるべきことが全うできなかった」の二つしかない。
後者はcatchハンドラでまとめてエラー処理する。
極めて論理的じゃないか。

449 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 11:33:48.08 ]
スペルアウトってなに?
スキルアウトの親戚?

450 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 11:39:39.18 ]
コンストラクタで例外はともかくIOは気持ち悪い
インスタンスの構築とデータの読み込みは論理的に別の処理だからコードの上でも分けて欲しい

451 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 11:42:50.37 ]
>インスタンスの構築とデータの読み込みは論理的に別の処理
それはクラスを「処理をするためのデータの集合」
としかとらえられない老害の発想だよ

>449
精液を放出することです



452 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 11:54:24.81 ]
>>448
try-catchで囲まれた処理が
( A, B, C, ......, J )
と構成されている
やりたいことが最後まできちんとできたなら、全てのA-Jは成功している

やるべきことが全うできなかった場合を
NOT( A, B, C, ......, J )
とすると、君ならA-Jのどれが問題となる処理なのかをどう決定するか
そしてそれをcatchに書くことに気持ち悪さはないのか

途中でやめ!で済まされるほど簡単な処理で構成されてるとは限らないんだよ

453 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 12:03:53.36 ]
>>452
>A-Jのどれが問題となる処理なのかをどう決定するか

別のエラー処理をしたいなら
A-Jごとにtry-catchすべき

454 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 12:15:13.20 ]
try-with-resource使ってライーしてれば
あんま場合分けはいらないけどね。
tryだけ書いてcatchは書かないとかよくやる。

455 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 12:49:01.53 ]
話が良く見えないが、コンストラクタの引数にストリームを渡すのじゃ駄目なのか?

456 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 12:55:52.91 ]
>>445
ドカタは例外を理解できないのでだめ。
↓ こんな感じ
X x = new X();
try {
 x.init(sutoriimu);
} catch (Exception ex) {//catchしないとコンパイルエラー
 log.error(ex);
}

457 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 12:56:42.05 ]
おっと>>455の誤りでした、すみません。

458 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 13:10:00.67 ]
コンストラクタにストリームは継承した時に不便かな
ファイルふたつに分けなきゃならんのはめんどくさい

459 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 13:34:19.39 ]
DI或いはそれに類する仕組みを使え

460 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 15:37:48.80 ]
IOExceptionが出るような処理を
static { } イニシャライザ内に書いて欲しくないよなー

リソース読み込みなら、まあ譲歩してもいいんだけどさー。

461 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 18:29:51.29 ]
>>437
インスタンス名、クラス名、メソッド名は簡略化して短くすることは推奨されていませんよ。
ましてや、インスタンス名はクラス名より短くする必要はないと公式に書いているよ。
もう少しよく使われているオープンソースであったりを読んだ方がいいと思います。

上げられたコードでもっというなれば、
getAllRecords()ではなくて
getRecordsAll()ですね〜。

確かに細かいことかもしれないけれど、デザイパターン等しっかり学んでいる人から見ると
「インスタンス名、クラス名、メソッド名等の暗黙の了解・空気」等を感じ取れていないコードは稚拙に見えるのではないかな。
そしてそんなに難しく考えなくても、英語の強みをいかせるように書けばすんなり型にはめられますよ。
例えば、「getAllRecords()」は動詞と目的語が遠いですよね?
今回はたった三つの語の組み合わせなので大したこと無いように感じますが、後ろから修飾していないことに違和感を感じる人は多いと思いますよ。
日本語は頭でっかちに書いた方が美しいですが、英語だと・・・?



462 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 18:31:12.65 ]
もちろん変数名等も。
連投失礼しました。

463 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 19:47:32.41 ]
"get all records"と"get records all"をぐぐると・・・

464 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 19:48:40.12 ]
ローカル変数までダラダラ長く書くやつは信用出来ない
経験的に数学出来ないタイプの人間が多い

465 名前:461 mailto:sage [2013/06/30(日) 19:52:11.80 ]
ttp://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-tutorials-419421.html
ここで入手できるJavaSE6のtutorialの、
[Language Basics]→[Variables]→[Naming]では次のように書かれています。

"When choosing a name for your variables, use full words instead of cryptic abbreviations."

続けて読み進めると、
[Classes and Objects]→[Classes]→[Declaring Member Variables]→[Variable Names]では、

"All variables, whether they are fields, local variables, or parameters, follow the same naming rules ...(略)"

と、さらに念押ししてわざわざ最初で触れた[Naming]の項まで飛べるようにまでなっています。
次に、[Defining Methods]→[Naming a Method]では

"By convention, method names should be a verb in lowercase or a multi-word name that begins with a verb in lowercase, followed by adjectives, nouns, etc."

となっており、先ほどの「getRecordsAll()」に「おや?」っと感じた人はいるかも。
で、この辺りが読むべき空気であると思います。(ttp://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-tutorials-419421.html

あと、例えばA,B,Cのシーンクラスがあったとしたら、
SceneA
SceneB
SceneC
のようにA,B,Cを後ろに書くことでOS等がもつ名前順に並び替える機能を活かせます。
もっというと、それぞれがSceneクラスを継承したものであったら、名前順に並び替えるとsuperであるSceneクラスが一番上に来て最高です。
ソースコードが綺麗な人は当たり前のようにやっていたりいなかったり。。。

何はともあれ、ネーミングを短くしちゃう行為は公式で推奨されていませんよ。(しかも言語の基礎としてそれが書かれている・・。)

>>464 タイムリーなレスサンクス。勿論ローカル変数に関してもです。

466 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 19:52:47.27 ]
ググったけど、get records allとか言ってる奴皆無なんだけど。
ググり方が悪いのか?

467 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 19:58:12.68 ]
公式がいつも正しいとは限らない
特にjavaは各方面からボコボコに叩かれるぐらい洗練されてない言語
当然公式が間違えるのは前提として考えるべき

468 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 19:59:36.87 ]
もう名前の話はどうでもいいので Iterable 実装してください

469 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 20:05:12.08 ]
>>466
それは後ろにAll置くなら単数系のが合うからかと。証拠にググると皆無ではないよ。
それでも少ないのはプログラムの処理より普段使われている慣用句的に名付けてる人が多いから。
プログラムの意味的にはAllが後ろで単数系のほうがニュアンスとして正しいのでは?

470 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 20:17:26.52 ]
そういや一時期JFrameのgetContentPane()メソッドに疑問もってた
なぜJPanelはlまでしっかり書いてるのにgetContentPane()はlを省略しちゃったのさ!って

後ほどpane自体で別の意味があることを知りなるほどと思った

471 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 20:25:02.10 ]
>>470
そんなの考えるまでもなく一瞬で理解できるだろ…w



472 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 20:44:30.18 ]
冗長なシンボル使ってると 自分がバカになった気がする

473 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 21:03:48.12 ]
>>471
英単語自信あったのにpaneなんて単語にこれまで出会わなかった
eclipseかbeans使ってりゃ冗長でも苦だとは感じないかな
オートコンプリートあるし
WIN32APIのような引数なら長い方が俺はましに感じる

474 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 21:06:13.45 ]
英語に自信があると専門用語も詳しいとか
どれだけ自惚れが激しいんだ

475 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 21:16:29.85 ]
自分の好みを人に押し付けてると 自分がバカになった気がする

476 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 21:25:13.97 ]
スコープをちゃんと短くすれば変数の名前は頭文字や略称で十分
長い識別子かかなきゃわからないならそれは悪いコードになっている証拠

477 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 21:48:50.90 ]
人はそれをコミュ障コードと呼ぶ
名をごまかし人目を避けることで何やってるかわからないようにしてごまかす
昨今のオープンソースやJavaの特性とは真逆
反抗したい精神・素直になれない精神はもはや中二病の延長ですまされるかなあ

478 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 22:09:39.61 ]
カウンターはcountでなくcuntの4文字で
おながいします

479 名前:デフォルトの名無しさん [2013/06/30(日) 22:11:50.85 ]
>>478
なじぇ?

480 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 22:27:22.75 ]
本当に下品
神聖なるJavaを汚すと罰があたるぞ!

481 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 22:29:33.91 ]
JAVAが神聖とか冗談でもキモい
だが1996年頃はそんな奴が結構居た



482 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 22:45:55.23 ]
Javaは、すみやかに普及した。その速度は、異常なくらいだった

483 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 23:21:17.27 ]
>>418
CLASSPATH理解してなかったりするやついるくらいだから、まずはIDE使わない方が勉強にはなるんじゃないか。Javaのどこを勉強するかにもよるけど。

484 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 23:22:46.96 ]
>>482
Java1.2くらいまでは、おもちゃ扱いじゃなかった?

485 名前:デフォルトの名無しさん mailto:java [2013/06/30(日) 23:36:57.83 ]
てことはやはりJVMあたりから?

486 名前:デフォルトの名無しさん mailto:sage [2013/06/30(日) 23:53:25.85 ]
>>483
ドカタの過半数はclasspathを理解してないんだから
無問題

487 名前:デフォルトの名無しさん mailto:sage [2013/07/01(月) 01:24:57.01 ]
>>478
cntじゃないんだ

488 名前:デフォルトの名無しさん mailto:sage [2013/07/01(月) 01:39:13.20 ]
そこはJVMじゃなくてJITだろ

489 名前:デフォルトの名無しさん mailto:sage [2013/07/01(月) 02:40:05.19 ]
>>486
ドカタ目指すなら勉強は不要だろ。

490 名前:デフォルトの名無しさん mailto:sage [2013/07/01(月) 02:51:13.36 ]
単語省略するときは、まず母音から削るかな

491 名前:デフォルトの名無しさん mailto:sage [2013/07/01(月) 03:53:04.59 ]
省略するときは、適当な1文字にしてしまう



492 名前:デフォルトの名無しさん mailto:sage [2013/07/01(月) 06:20:46.52 ]
コントローラにSQLをコピペするだけの簡単な仕事です

493 名前:デフォルトの名無しさん mailto:sage [2013/07/01(月) 12:25:53.06 ]
1文字変数が許されるのはIteratorとcatch節までだよねー

494 名前:デフォルトの名無しさん mailto:sage [2013/07/01(月) 13:49:42.09 ]
>>493
そうだな、あとはv1,v2...と二文字にするべきだな。

495 名前:デフォルトの名無しさん mailto:sage [2013/07/01(月) 17:41:52.72 ]
コントローラーにSQLってのがまさにドカタの発想だな
struts使ったまではいいが、MVCの分離が
理解できなかった典型例

496 名前:デフォルトの名無しさん [2013/07/01(月) 17:46:12.19 ]
mp4をmp3に変換する方法ってありませんか?
ffmpegだと遅いのでこれ以外でお願いします

497 名前:デフォルトの名無しさん mailto:sage [2013/07/01(月) 18:20:06.62 ]
まず、エンコスレに逝きます

498 名前:デフォルトの名無しさん mailto:sage [2013/07/01(月) 19:39:46.53 ]
すみません文字列がsplitできるかできないかで判定するにはどうすればいいですか?
例えば

String line = "go kyoto";

String verb = line.split(" ")[0];
String place = line.split(" ")[1];

のような場合は問題ないと思いますが、lineがsplitできる保証がないときの判定法が知りたいです。
例えばもしline="go";だった場合、
ArrayIndexOutOfBoundsExceptionがでます。
(スペース" "は無いけれど[0]のsplitはできている?どちらにせよsplitできないと[1]を指定した時点で例外でますよね。)

499 名前:デフォルトの名無しさん [2013/07/01(月) 19:40:31.44 ]
>>497
エンコすれ行ってきます

500 名前:デフォルトの名無しさん mailto:sage [2013/07/01(月) 19:54:55.93 ]
>>498
splitが何を返すか見直してこい

501 名前:デフォルトの名無しさん mailto:sage [2013/07/01(月) 19:57:45.50 ]
>>498
String [ ] result = line.split(" ");
してから
result.lengthで判定だ。



502 名前:デフォルトの名無しさん mailto:sage [2013/07/01(月) 20:34:33.81 ]
コントローラーにガンガンなんでも入れちゃうのはむしろRailsでよくある症例だと思う。
ぶっちゃげRailsももはやドカタフレームワークだけど。

503 名前:デフォルトの名無しさん mailto:sage [2013/07/01(月) 21:02:33.28 ]
>>498
StringTokenizerを使う

StringTokenizer st = new StringTokenizer(line, " ");
if (st.countTokens()>=2) {//分割できる
String verb = st.nextToken();
String place = st.nextToken();
}

504 名前:デフォルトの名無しさん mailto:sage [2013/07/01(月) 21:20:10.24 ]
indexOfでええやん
いちいちオブジェクト作るなよ

505 名前:デフォルトの名無しさん mailto:sage [2013/07/01(月) 21:32:56.21 ]
Javaドカは作業ファイルを多用するので、その程度のコストは全く問題になりません

506 名前:デフォルトの名無しさん [2013/07/01(月) 23:27:57.25 ]
長大な文字列の極めて終端に近いところで最初の区切り文字が出てくる場合や最後まで区切り文字が出てこなかった場合
事前検索してからの分割はコスト的にどうなのだろうか

507 名前:デフォルトの名無しさん mailto:sage [2013/07/01(月) 23:31:20.42 ]
気にするな
パフォーマンスなんか土方には理解出来ない
cを使えるようになってからパフォーマンスとか気にすればおけ

508 名前:デフォルトの名無しさん mailto:sage [2013/07/02(火) 00:29:09.24 ]
土方仕事の実行時間はほぼ全てIOが占めるからね
細かいことはどうでもいいのよ

509 名前:デフォルトの名無しさん [2013/07/02(火) 09:17:43.72 ]
\x2022 Windows Internet Explorer
ブラウザを終了して続行しろと出て、全く先に進めません。
ブラウザは全部閉じています。
検索して調べたけど、「\x2022 Windows Internet Explorer」
について全然でてこなくてわかりません。
どうすればいいのですか?

環境はWIN7、IE10です。

510 名前:509 mailto:sage [2013/07/02(火) 09:21:19.56 ]
失礼しました。
アップデートが上手くいかないのです。

511 名前:509 mailto:sage [2013/07/02(火) 11:23:19.97 ]
再起動してから試しても、何度やっても途中「\x2022 Windows Internet Explorer 」
ブラウザを閉じろの繰返しだったのですが、先程すんなりと完了できました・・・。
設定など一切変更していないので、何が原因だったかわかりませんが
とりあえず完了できたので、お騒がせしてすみませんでした。



512 名前:デフォルトの名無しさん mailto:sage [2013/07/02(火) 11:40:05.59 ]
何のアップデートなのかも書けないとは
残念な奴だな

513 名前:デフォルトの名無しさん mailto:sage [2013/07/02(火) 11:49:53.18 ]
ごめんなさい、7 Update 21 から25へのアップデートでした。

514 名前:デフォルトの名無しさん mailto:sage [2013/07/02(火) 12:14:40.58 ]
windows 7のうぷだてとな

515 名前:デフォルトの名無しさん mailto:sage [2013/07/02(火) 14:27:27.68 ]
livedoor.blogimg.jp/news23vip/imgs/1/d/1dba13cc.jpg
何が悪いのこれ?

516 名前:デフォルトの名無しさん mailto:sage [2013/07/02(火) 14:45:51.37 ]
>>515
Cジジイの頭が悪い

517 名前:デフォルトの名無しさん mailto:sage [2013/07/02(火) 16:53:55.65 ]
と見せかけた関数型言語マニアなのかもしれない

518 名前:デフォルトの名無しさん [2013/07/02(火) 16:59:00.97 ]
mp4とかの動画フォーマットからオーディオを抜き出せるライブラリってないですか?(mp4だけでもいいです)
ググってもフリーソフトしか見つかりません

519 名前:デフォルトの名無しさん mailto:sage [2013/07/02(火) 17:01:46.98 ]
便利なオープンソースやAPIを使えてwebに強いほうが良いに決まってるのに。
そして初めての言語がオブジェクト指向な方が得に決まっている

520 名前:デフォルトの名無しさん mailto:sage [2013/07/02(火) 17:12:03.44 ]
>>518
ffmpeg

521 名前:デフォルトの名無しさん [2013/07/02(火) 19:41:53.19 ]
>>520
ちょっと見てみたけど遅いです
直接吸出しできるのってないですか?



522 名前:デフォルトの名無しさん mailto:sage [2013/07/02(火) 20:27:02.82 ]
>>521
まず、直接吸い出せるツールを見つけてこい

523 名前:デフォルトの名無しさん mailto:sage [2013/07/02(火) 20:28:07.51 ]
ICカードを扱う無料ライブラリありますか?

524 名前:デフォルトの名無しさん mailto:sage [2013/07/02(火) 20:29:36.65 ]
>>523
まず正しく質問できるだけの知識をつけてこい

525 名前:デフォルトの名無しさん [2013/07/02(火) 20:48:00.82 ]
>>522
ffmpegで設定変えたら速くなりました
ありがとうございました

526 名前:デフォルトの名無しさん mailto:sage [2013/07/02(火) 20:49:03.13 ]
>>523
業務用で住民基本大腸カードを扱うなら
LASDECから入手が必用(C++)。
SuicaならたぶんC++向けAPIは提供されているだろう。
SmartOnなどの特定製品もSDKが販売されているだろう(たぶんc++)。
つまりお前のスキルでは無理。

それ以外のカードは無理ゲーに近いけど
意外とAndroidで探した方が行けるかも

527 名前:デフォルトの名無しさん mailto:sage [2013/07/02(火) 20:55:36.79 ]
ICカードは個人には仕様公開しないから働かないと使えないよ

528 名前:デフォルトの名無しさん mailto:sage [2013/07/02(火) 21:05:10.74 ]
>>527
何のICカードかにもよるが、個人で開発できるよ。

529 名前:デフォルトの名無しさん mailto:sage [2013/07/02(火) 21:06:50.07 ]
ICカードにJVM移植した「JavaCard」って、あれからどうなったの…

530 名前:デフォルトの名無しさん mailto:sage [2013/07/02(火) 21:06:56.73 ]
それはリバースエンジニアリングだろ
正式な仕様は非公開だよ

531 名前:デフォルトの名無しさん mailto:sage [2013/07/02(火) 23:49:41.77 ]
>>530
SDK買っても暗号化領域は読めないだろうし、そもそも書き込めない場合が多いだろう。
その意味では、法人でSDKを買っても仕様が全て公開されるわけではない。
逆に、個人でも見ることができる範囲でデータを読むことは出来る。



532 名前:デフォルトの名無しさん mailto:sage [2013/07/03(水) 01:46:07.84 ]
質問を読めない回答者が多いね
「ICカードを扱う無料ライブラリありますか?」
って質問なんだから、仕様が公開とか非公開とか関係ない

ライブラリがあるのかないのか答えろよ

533 名前:デフォルトの名無しさん mailto:sage [2013/07/03(水) 06:05:15.69 ]
>>532
ググれ馬鹿

534 名前:デフォルトの名無しさん [2013/07/03(水) 08:11:16.76 ]
今すぐ手軽にJavaでprintfで文字を表示させるレベルの簡単なプログラムを組みたいのですが
Windowsで無料で最短の開発環境を教えて下さい

535 名前:デフォルトの名無しさん mailto:sage [2013/07/03(水) 08:15:43.27 ]
eclipse

536 名前:デフォルトの名無しさん mailto:sage [2013/07/03(水) 08:27:43.69 ]
NetBeansのが手間無しだろ

537 名前:デフォルトの名無しさん [2013/07/03(水) 09:01:31.78 ]
何度もごめん
eclipseでC++でいう .cpp と main関数はどう作れば良い?

538 名前:デフォルトの名無しさん mailto:sage [2013/07/03(水) 09:30:47.98 ]
mainを作るチェックボックスをクリックする

539 名前:デフォルトの名無しさん [2013/07/03(水) 10:06:28.46 ]
test って名前のプロジェクトを作って
その中にパッケージを作って
その中にmainって名前のクラスを作るところまでは分かったけど
そこからが分からない
main関数を作っただけじゃ実行出来ないの?
選択にはメイン型が含まれていません
ってエラーが出る

540 名前:デフォルトの名無しさん mailto:sage [2013/07/03(水) 10:08:11.70 ]
main関数が入ったクラスを右クリックして実行ってすると
実行できるよ

541 名前:デフォルトの名無しさん [2013/07/03(水) 15:48:35.13 ]
ごめん
自己解決した
付き合わせてすまない



542 名前:デフォルトの名無しさん mailto:sage [2013/07/03(水) 16:12:25.57 ]
ムッキー

543 名前:デフォルトの名無しさん mailto:sage [2013/07/03(水) 19:12:27.97 ]
メンバの外部からの読み取りはOK、変更は禁止。といった、publicとprotectedの間くらいの設定をしたいです
大量のクラスメンバに対する大量のgetterメソッドを作るのが無駄な気がするので・・・
みなさんどのように対応していますか?

544 名前:デフォルトの名無しさん mailto:sage [2013/07/03(水) 19:14:44.88 ]
大量のgetterをIDEのプロパティ自動生成機能で作る
手打ちしなければ全く気にならない

545 名前:デフォルトの名無しさん mailto:sage [2013/07/03(水) 19:26:45.85 ]
なるほど、ありがとうございます。

546 名前:デフォルトの名無しさん mailto:sage [2013/07/03(水) 19:28:22.05 ]
アノテーションでgetterとかを自動生成するライブラリとかあった気がする
使ったこと無いけど

547 名前:デフォルトの名無しさん mailto:sage [2013/07/03(水) 22:25:42.30 ]
c++で言うとconst参照みたいなのはJavaには無いのですか?

548 名前:デフォルトの名無しさん mailto:sage [2013/07/03(水) 22:26:59.50 ]
無い

549 名前:デフォルトの名無しさん mailto:sage [2013/07/03(水) 22:27:50.00 ]
ない
イミュータブルなオブジェクトを使うとか
防御的コピーするとかしろ

550 名前:デフォルトの名無しさん mailto:sage [2013/07/04(木) 06:23:06.78 ]
Javaでデータベースを操作するアプリを作ってるのですが質問があります
毎日レコードが追加されるテーブルがあります
このテーブルを最新の半年分の情報とそれ以前の情報で別のテーブルに分けて管理する設計って悪い設計ですか?
新しい情報と古い情報は同じサーバーにあり格納するテーブルだけが違います
アクセスは新しい情報に集中します

551 名前:デフォルトの名無しさん mailto:sage [2013/07/04(木) 06:47:00.49 ]
>>550
あまり良い設計だとは思わないけど、実物見ないと何とも言えない。
アプリの形態はWeb? DBMSは何? 一日に何レコード追加されるの? 1レコードあたり、およびトータルのデータ量は?
たぶん、適切なインデックスを張るとか、最近のデータだけmemcachedするとか、工夫の余地は色々あると思う。
あと、Javaよりもデータベースのスレで聞いた方かいいような。



552 名前:デフォルトの名無しさん mailto:sage [2013/07/04(木) 06:53:07.50 ]
DB板で聞くべき話だとは思うけどどのRDBMSを使っていてどんなスキーマでどんなクエリ
を投げるのか解らないと誰もアドバイス出来ないと思う。

ただし一般論としては、そういうテーブル分割を手作りすると古いレコードの移動とか
それに伴いアプリ側で生成するクエリを変更するとか、運用面で余計な手間やバグの
温床を抱えることが多い。RDBMSに詳しくない人が思いつきレベルで分けたのであれば
率直に言ってあまり関わりたくない、そういう設計。

まずはインデックスでどうにかならないか、あるいはシャーディングなどと呼ばれる
機能が使えないか調べることをお薦めする。

553 名前:デフォルトの名無しさん mailto:sage [2013/07/04(木) 08:46:50.09 ]
>>550
世の中にはOracleパーティショニングというものがあってだな
つまり性能上テーブルは分けるけど概念的には同一
というのは普通にあると言うことだ

554 名前:デフォルトの名無しさん mailto:sage [2013/07/04(木) 09:40:16.30 ]
>>550
RDB論的には間違ってる(ことが大半だと思う)。んだけどもじゃあ絶対そんな実装しないかというとそんなこともない。
実際そういうの作ったことあるし、よく見かけもするねー。
理由はパフォーマンスだったり運用上やら他のシステムとの兼ね合いやら。

要は状況次第ってことなんであまり回答になってないんだけど。

555 名前:デフォルトの名無しさん mailto:sage [2013/07/04(木) 10:24:46.16 ]
データ保存期間が数年で、保存期間MAXになるとレコード数が1000万レコードを超えるような
トランザクションデータの場合、年あるいは月によるパーティショニングか、
「直近のテーブル+それ以前のアーカイブテーブル」という構造にすることは良くある。

556 名前:デフォルトの名無しさん [2013/07/04(木) 10:43:24.31 ]
abstractクラスのabstractメソッドの引数にenumを持たせたい場合
どういう設計をすればいいのでしょうか

イメージ的にはenumを定義しないとコンパイルエラーになるようにしたい
そしてenumの中身は継承先々で用意したいが、名は統一したい

557 名前:デフォルトの名無しさん mailto:sage [2013/07/04(木) 15:29:12.90 ]
abstractメソッドの引数にenumを与えたい、ただしどのenumクラスを使うかは
継承先に決めさせたい場合は普通にGenericsを使うかなぁ。

public abstract class AbstractSample<E extends Enum<E>> {
 public abstract void sampleMethod(E item);
 protected abstract Class<E> getEnumClass();

 public void sampleMethod(String name){
  sampleMethod(Enum.valueOf(getEnumClass(), name));
 }

public class Sample extends AbstractSample<Sample.MyEnum>{
 public enum MyEnum{enum1, enum2, enum3}
 @Override protected Class<MyEnum> getEnumClass() {return MyEnum.class;}
 @Override public void sampleMethod(MyEnum item) {...

getEnumClassは任意だけれども上記のようにString版のメソッドの実装も抽象
クラスで与えたいときなど便利。

> そしてenumの中身は継承先々で用意したいが、名は統一したい

「名は統一したい」というのがSample.MyEnumのように継承クラスでは必ず
MyEnumというenumクラスを内部クラスとして宣言する、ということを強制する
という意味なら多分無理。

558 名前:デフォルトの名無しさん mailto:sage [2013/07/04(木) 17:37:45.07 ]
>>557
abstractクラスのAクラスを継承したBクラス・Cクラス・・・内で
private enum Foo {
}

を定義していないとコンパイルエラーにしたい(可能なら)というのと、
「名は統一したい」というのは、Fooという名を統一して中身を各クラスで別に用意したいという意味です。

Bクラスでは
private enum Foo {
BAR, BAZ
}

Cクラスでは
private enum Foo {
QUX, QUUX, CORGE
}

というようにです。普通こういう場合、単なるメソッドならばsuperクラスのAクラスで
abstract protected void foo();
として、継承先で
@Override
private void foo() {

}
ですみますが、

abstract protected enum Foo;
なんていうのは許されませんよね?
となると、「Bクラス・Cクラス・・・でFooという名のenumを自分で定義する」というプログラムから離れた所にルールが生まれてしまいすこし嫌です(名がFooである保証がない?)。
可能ならば、このFooというenumをもたなくてはいけないことをsuperクラスで定義できないのかなと思って質問しました。

559 名前:デフォルトの名無しさん mailto:sage [2013/07/04(木) 18:25:03.50 ]
設計が変なんじゃないの?
enumは1つのファイルで作って使う値を全部列挙して
具象クラスでその値を使う時に無効な値をはじくようにしておけば?

public enum Foo {
BAR, BAZ, //Bクラスで有効
QUX, QUUX, CORGE, //Cクラスで有効
}

abstract class A {
abstract public boolean isValid(Foo item);
}

560 名前:デフォルトの名無しさん mailto:sage [2013/07/04(木) 19:21:41.88 ]
>>559
そうなんです。そしてそう書いてました。
だけど、Cクラスで使うときにBクラスでしか使わないBAR,BAZが可視なのを何とかならないかなとおもいました

561 名前:デフォルトの名無しさん mailto:sage [2013/07/04(木) 19:26:20.46 ]
>>550
twitterがそんな感じの設計をしてるね

適当にぐぐって見つけた記事
www.atmarkit.co.jp/news/201004/19/twitter.html



562 名前:デフォルトの名無しさん mailto:sage [2013/07/04(木) 19:49:13.77 ]
Twitterが必要とする設計が遙かに小さいスケールでも有効かというと単にオーバーキルで
手間暇増えるだけだったり。

インデックス設計の評価やDBMS組み込みのパーティショニングを検討するに一票。

563 名前:デフォルトの名無しさん mailto:sage [2013/07/04(木) 21:36:28.52 ]
年度別テーブルみたいなアプローチはインデックス貼るコストも安くなるからな
JPAが対応したら面白いがOracleさん的には困るか

564 名前:デフォルトの名無しさん mailto:sage [2013/07/04(木) 21:58:41.98 ]
>>550
それは水平分割って技法。DB設計ではアンチパターンに含まれる。
レプリケーションやインデックス、その他もろもろ全ての「正しい」解決法を試して
それでもパフォーマンスの問題が解決しなかった場合のみ使って良いというもの。

565 名前:デフォルトの名無しさん mailto:sage [2013/07/04(木) 22:00:46.92 ]
いつになったら板違いの話題をやめてくれるのかな

566 名前:デフォルトの名無しさん [2013/07/04(木) 22:03:54.36 ]
>>565
Javaの話題あんの?ないんだったら黙ってろよ。

567 名前:デフォルトの名無しさん mailto:sage [2013/07/04(木) 22:05:00.37 ]
>>564
何言ってるんだ。
パーティショニングこそ水平分割だろうが。
それに、レプリケーションなんか関係ないし。

568 名前:デフォルトの名無しさん mailto:sage [2013/07/04(木) 22:15:51.10 ]
半年分というのが、どういう機能要件なり性能要件に基づくものかがわからない限り、
どんなアドバイスも的はずれな可能性大なんだけど。

569 名前:デフォルトの名無しさん mailto:sage [2013/07/04(木) 23:18:22.43 ]
>>550 は悪い設計ですか? と聞いてるだけだから

満場一致で悪い設計です と答えて終わりじゃないか

570 名前:デフォルトの名無しさん [2013/07/04(木) 23:22:52.28 ]
>>569
さすがコミュ障

571 名前:デフォルトの名無しさん mailto:sage [2013/07/05(金) 00:02:14.86 ]
半端な知識と仕込みで手を出しても無駄に苦労するだけの悪い設計。



572 名前:デフォルトの名無しさん mailto:sage [2013/07/05(金) 02:49:37.88 ]
JDBCは単なるSQLインタプリタなので、
デザパタ的にあまりおもしろい設計はできない。

他のDBライブラリはしらん

573 名前:デフォルトの名無しさん mailto:sage [2013/07/05(金) 02:52:43.37 ]
>>572
またてけと〜なことを。

574 名前:デフォルトの名無しさん mailto:sage [2013/07/05(金) 06:45:23.14 ]
JDBCはSQLの中身には関知しませんよ
クエリとデータを右から左、左から右へ流すだけ

575 名前:デフォルトの名無しさん mailto:sage [2013/07/05(金) 07:37:50.03 ]
SQLインタプリタになっているJDBCやドライバの実装がどれほどあることやら。

576 名前:デフォルトの名無しさん mailto:sage [2013/07/05(金) 08:34:20.80 ]
「リレーショナルDBの世界がどうオブジェクト指向化されるんだろ」と
JDBC発表にワクテカしてたのは俺だけか。
SQL文を文字列で用意する必要があると聞いてがっかりしたず

「Table」に相当する抽象クラスがJDBCに出てこないってどういうことよ

577 名前:デフォルトの名無しさん mailto:sage [2013/07/05(金) 12:23:44.61 ]
実質スキーマレスになってしまうからじゃないか?
それリレーショナルなん?

578 名前:デフォルトの名無しさん mailto:sage [2013/07/05(金) 14:22:08.65 ]
JDBCにODBC相当物以上を期待していた人なんていないでしょ。

579 名前:デフォルトの名無しさん mailto:sage [2013/07/05(金) 15:17:22.42 ]
あのころはオブジェクト至高(キリッじゃなくて
write once run everywhereで売ってたような

580 名前:デフォルトの名無しさん mailto:sage [2013/07/05(金) 16:40:31.36 ]
>>576
O/Rマッピングすればいいだけだろ

581 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 02:30:46.99 ]
>>576
言ってること目茶苦茶すぎ
>>574が言ってるように、受け流すだけを担ってこそオブジェクト指向だ

おめぇさんはよぉ、銭湯いって風呂上がりのフルーツ牛乳が見当たらないからって
キレちゃうような輩なのか?
俺はきれるけどね



582 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 02:32:58.87 ]
ただ、キレる相手は番台さんじゃねーってこった

583 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 02:34:00.46 ]
javaee7にlinq入ったんだってね
コレクションだけらしいしViewのためだけにあるのだろうけど

584 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 02:43:58.43 ]


585 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 07:43:21.82 ]
abstractクラスは便利ですね

public abstract class AbstractJInternalFrame extends JInternalFrame
{
private int x, y;
private int width, height;
private String title;

public AbstractWindow(int x, int y, int width, int height, String title, boolean resizable, boolean closable, boolean maximizable, boolean iconifiable)
{
super(title, resizable, closable, maximizable, iconifiable);
this.x = x;
this.y = y;
this.width = width;
this.height = height;
this.title = title;
}

public void resetPerspective()
{
System.out.println("Reset Perspective: " + title);
setBounds(x, y, width, height);
show();
}
// 以下フィールドのgetterのみ
}

みたいな設計が本当に便利に感じる。eclipseのReset Perspectiveの簡易版みたいな感じ。
iframes = new HashMap<String, AbstractJInternalFrame>(); あたりでまとめてたとすると、ActionListenr等で
for(Map.Entry<String, AbstractJInternalFrame> f : iframes.entrySet()) f.getValue().resetPerspective();

継承先でsetLocation(int, int)等で好き勝手できるけど初期値は断固としてsuperが守ってるみたいなイメージ。

586 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 07:47:24.55 ]
あっそ
他の全員は知ってるから粉みかんは3行以内で頼む

587 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 07:55:33.83 ]
あぁコンストラクタ名が間違ってるのは仕様でござます

588 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 08:19:53.00 ]
抽象クラス使うやつは設計下手なザコ

589 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 08:40:10.98 ]
抽象クラス使えない=クラスすら使えない(クラスはオブジェクト)
ってことに気づいているのだろうか
クラスも使えないとなると設計がうまい下手の段階までいけない件について…

590 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 08:46:01.06 ]
意味不明
抽象クラスなんてテンプレート実装作るだけの道具にすぎない
多態はインターフェイスが基本で、抽象クラスは必須ではない

591 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 08:54:30.60 ]
>多態はインターフェイスが基本で
インターフェースの無い言語はOOPではない
と言いかねないJAVAドカタの珍説には
いつも驚かされます



592 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 08:54:40.24 ]
最近ちょくちょく抽象クラスがどうのこうのって話になるな
同じ奴が繰り返してるのか?

593 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 09:01:51.43 ]
可能な限りインターフェースってのは全く同意だよ
そもそも公式がうたってますし
だけどいつも何でもかんでもインターフェースにしちゃうのは大反対
特に、extendsできなくなるのは場合によっては保守性が上がる
でもって、インターフェースが一番活きるのはこの時なんだよね〜仕様的にも。

594 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 09:10:31.68 ]
Java 8からはインターフェースも実装を持てるようになるから
抽象クラスと何も変わらなくなるよ

595 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 09:11:57.97 ]
extendsの大部分は委譲で済んじゃうんだけどな。IDEの自動生成も使えるし。

596 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 09:12:23.36 ]
>>594
抽象メソッドはprotectedにするもんだ
インターフェイスじゃできない

597 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 09:14:13.71 ]
protected使うなんてレアケースだろ。一般論として語るのは……

598 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 09:19:35.46 ]
まぁでも何もかわらなくなるってのは
先の「抽象クラス使うやつは…」のくだりと同じで極論すぎるよ

そしてprotectedがレアケースだとも思わないなぁ
それはニアリイコール抽象クラスをレアケースといっているようなもんだし…

599 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 09:22:09.09 ]
Template MethodやFactory Methodはprotectedで十分なはずでしょ
MS系だとそれこそ仮想メソッドはほとんど全部protectedだったりするが
Javaってそのへん適当だよね

600 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 09:37:33.89 ]
abstractクラスのfield活かした方が明らかに良い場合も無理してinterfaceなの?
それはちょっとどうなんだろう
interfaceだと子クラスに丸投げだよね?

601 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 10:02:17.81 ]
ファクトリメソッドをprotectedはありえねーよ。
テンプレートは使う側ならprivateでなんも問題ないな。
仕様の方ならインターフェースで十分っつかpublicにしないと不便極まりないし。



602 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 10:11:56.80 ]
>>601
>privateでなんも問題ない
privateはオーバーライドできません
>インターフェイスで十分
デザパタ知らないの? 移譲を使った設計と混同してるのでは?

603 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 10:21:35.57 ]
ある機能を実装するとき、個々のクラスやら何やらで振る舞いが違う部分と
それらを呼び出す形で固定化できる部分に切り分けるのがテンプレートメソッドパターンなわけで。
固定化してる方はオーバーライドする必要が全く無いから、
外部からアクセスする必要がないならprivateで何の問題も無い。

604 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 10:23:20.22 ]
Factory Methodがprotectedで十分とか

605 名前:デフォルトの名無しさん [2013/07/06(土) 10:26:40.12 ]
どう考えても両方使うだろ…
interfaceだけにしろ、protectedだけにしろ、privateだけにしろ…
何も考えていない証拠だ

606 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 12:45:38.25 ]
抽象クラスはそのクラスの実装者からみたら窮屈に感じるが
protectedメソッドを実装するだけだと副作用が無くて安全にも感じる
ディスパッチ目的の抽象クラスだと実装がやたら手続き型でも気にならない

607 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 14:56:49.67 ]
>抽象クラスはそのクラスの実装者からみたら窮屈
イミフ

>ディスパッチ目的の抽象クラス
イミフ

608 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 15:27:10.58 ]
まずインターフェイスを用意して、それを実装する際に楽をする、してもらうために
抽象クラスも使うかな。両方使わないと不便。
APIに立ち現れるのはインターフェイスだけで実装クラスは基本隠す。

609 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 23:07:30.32 ]
抽象クラスは何がダメかってスタンドアロンじゃない前提の癖に再利用性が悪いところだ

610 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 23:15:24.89 ]
あるインタフェースのひな形だったりフレームワークへのエントリポイント
だったりするからな。ある方策に従わせるための抽象クラス

611 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 23:17:13.39 ]
>再利用性が悪い
設計がKUSOなだけじゃね?



612 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 23:30:23.89 ]
逆に他に実装可能な手段があるのにあえて抽象クラスを使うことが正解というケースがごく稀にしかない

613 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 23:31:20.92 ]
ある抽象クラスのサブクラスが1個しかないならKUSO
分ける意味ねーもん
将来的に使いたいとしてもその将来っていつ来るの?って話

614 名前:デフォルトの名無しさん mailto:sage [2013/07/06(土) 23:40:15.62 ]
派生クラスに共通する役立つメソッドを抽象クラスで提供しよう
↑抽象でないクラスに分離してメンバに持たせるのが正解

615 名前:デフォルトの名無しさん mailto:sage [2013/07/07(日) 04:42:24.53 ]
>>613
例え一個でもわけた方がいい場合は間違いなくあるよ
だがabstractクラスはサブクラス沢山抱えたときにまとめて扱うのがいいよな

616 名前:デフォルトの名無しさん mailto:sage [2013/07/07(日) 06:23:55.89 ]
abstractクラスを継承したabstractクラス
みたいな構造のデザインパターンを経験しないと
メソッドにつけるfinalの有り難みが勉強できないんじゃないかなとは思う

617 名前:デフォルトの名無しさん mailto:sage [2013/07/07(日) 06:27:19.94 ]
出たー酷い失敗設計

618 名前:デフォルトの名無しさん mailto:sage [2013/07/07(日) 10:02:43.44 ]
将来どこを修正する可能性があるかを予想できないと抽象化は難しい
二度といじらないコードを抽象化するのは無意味だ

工期、予算の都合で今はしないけど次のサイクルでこれこれやる
ってくらい確実にわかっていなければ抽象化する必要はない

抽象化しなかった場所に修正が入るってなら設計上のミスだ
かむしろマネージャーの開発スケジュールミスだ

619 名前:デフォルトの名無しさん mailto:sage [2013/07/07(日) 10:53:06.26 ]
テストの為に抽象化することもあるんですが

620 名前:デフォルトの名無しさん mailto:sage [2013/07/07(日) 16:09:58.78 ]
>将来どこを修正する可能性があるかを予想できないと抽象化は難しい
んなこたーない。
現在の機能要件と拡張性要件に基づいて
設計するだけ。

621 名前:デフォルトの名無しさん mailto:sage [2013/07/07(日) 16:35:50.06 ]
要件なんてあてにならない
未来は神様にも予言できないんだよ



622 名前:デフォルトの名無しさん mailto:sage [2013/07/07(日) 16:45:01.89 ]
なんか良くわかんないんだけど、具象クラスしか作らないのかな

623 名前:デフォルトの名無しさん mailto:sage [2013/07/07(日) 19:10:33.52 ]
将来のためのインターフェースなんて、>>618くらいじゃない?
あとは、縦割り部署のインターフェースとか、、、

昔、DB部門が作ったインターフェースで、笑えないヤツがあったのを思い出した
テーブルの指定がひとつだけで、結合が全く出来ないという

624 名前:デフォルトの名無しさん mailto:sage [2013/07/07(日) 19:55:56.48 ]
ちょっと何言ってるかわかんないですねー

625 名前:デフォルトの名無しさん mailto:sage [2013/07/07(日) 20:00:01.97 ]
Javaやるとこうなる
シャブみたいなもんだよ

626 名前:デフォルトの名無しさん mailto:sage [2013/07/07(日) 20:07:26.86 ]
テーブルごとにクラス分けしててselect XXX from A,B(A,Bはテーブル)が考慮されてないってことか

通常のオブジェクト指向でもそうだが、ふたつのクラスの相互作用を表す方法に苦慮する
クラス(A+B)を作るのは負けかなって思ってる

627 名前:デフォルトの名無しさん mailto:sage [2013/07/07(日) 20:20:41.50 ]
相互作用は簡単なものならイベントを使う
複雑ならプロトコルをクラスにする
通信対象の選択自体が複雑ならルーティングもクラスとして作る
面倒だが基本中の基本だろ

628 名前:デフォルトの名無しさん mailto:sage [2013/07/07(日) 20:25:47.11 ]
一部だけ人に書かせるときはAbstractが楽。特に土方に。

629 名前:デフォルトの名無しさん mailto:sage [2013/07/07(日) 20:26:20.97 ]
>>626
そこでLINQですよ
C#の劣化版猿真似は得意だろ?

630 名前:デフォルトの名無しさん mailto:sage [2013/07/07(日) 20:56:30.08 ]
>>628
最悪だろ
土方に正確なオーバライドは無理

631 名前:デフォルトの名無しさん mailto:sage [2013/07/07(日) 20:57:31.73 ]
>>629
無駄な通信が発生するのは同じだろ



632 名前:デフォルトの名無しさん mailto:sage [2013/07/08(月) 00:15:20.02 ]
>>629
まともな設計ならLINQはあくまでモデルの中で使うので同じことですよ

633 名前:デフォルトの名無しさん mailto:sage [2013/07/08(月) 05:12:26.81 ]
abstractクラス継承したabstractクラスはデコレータパタンとかでたまにみるね

634 名前:デフォルトの名無しさん [2013/07/08(月) 05:41:47.78 ]
Eclipseで、
実行(Ctrl + F11)のときは文字列を出力させず、デバッグ実行(F11)のときだけ文字列を出力したいです。

プログラムの中でデバッグ実行かどうか判別すればいいと思うのですが、
System.getProperties() で確認したところ、デバッグ実行のときだけセットされるプロパティは無さそうでした。

何かいい方法ありませんか?

635 名前:デフォルトの名無しさん mailto:sage [2013/07/08(月) 06:35:26.12 ]
リファクタリング機能をつかう

636 名前:デフォルトの名無しさん mailto:sage [2013/07/08(月) 12:02:52.75 ]
デバッグ実行のときにプロパティをセットすればいい

637 名前:デフォルトの名無しさん mailto:sage [2013/07/08(月) 13:35:25.98 ]
デバッグ実行だと動作遅くなるからベンチマークとってとか、間違ってそのままリリースして
遅い端末だとデバッグ情報が見れるw

638 名前:デフォルトの名無しさん mailto:sage [2013/07/08(月) 19:52:33.17 ]
>>634
デバッグ実行時だけログ出力レベルをfineにすればいい
普通はlog4jだろうが俺はしらん

639 名前:634 [2013/07/08(月) 21:16:20.57 ]
すみません、説明不足でした。
頻繁に実行とデバッグ実行を切り替えたいため、
ソースコードや設定ファイルを変更することなくやりたいのです。

640 名前:デフォルトの名無しさん mailto:sage [2013/07/08(月) 21:45:51.75 ]
main メソッドを持つクラスを 2 つ作って起動し分けるとか

641 名前:デフォルトの名無しさん mailto:sage [2013/07/08(月) 21:46:51.82 ]
だったらコマンドライン引数でいいだろ



642 名前:デフォルトの名無しさん mailto:sage [2013/07/08(月) 23:48:53.47 ]
最初のブレークポイント前後が100ms以上開いたら
「現在デバッグ中」フラグが建つということでどうだ?

643 名前:デフォルトの名無しさん mailto:sage [2013/07/09(火) 00:49:29.87 ]
AspectJとかで実行時に文字列出力コードを織り込むとか

644 名前:デフォルトの名無しさん mailto:sage [2013/07/09(火) 08:44:37.39 ]
>>630
なぜInterfaceやスクラッチだと正確にできるの? どれでも正確にできないなら比較の問題。ベターなもので満たせないなら、受け入れテストしてない方が悪い。自分がサボってるのを土方のせいにするなよな。

645 名前:デフォルトの名無しさん mailto:sage [2013/07/11(木) 21:50:36.58 ]
visual studio+C#でできるデータベース操作のパクリはjava+eclipseには無いのですか?
テーブルアダプタやデータソースのことです

646 名前:デフォルトの名無しさん mailto:sage [2013/07/11(木) 22:10:37.58 ]
visual studioがわからん人にはどういう機能かわからんからなぁ。
表形式でデータ見られたり、定義情報が見られたりするやつのこと?

647 名前:デフォルトの名無しさん mailto:sage [2013/07/11(木) 22:15:56.63 ]
>>646
データベースへアクセスするためのクラスを自動で作ってくれる機能です
コードを一行も書かなくてもデータベースへのアクセスからフォームへのバインドまでしてくれるすごいやつです

648 名前:デフォルトの名無しさん mailto:sage [2013/07/11(木) 22:42:34.20 ]
>>647
その程度なら、なければ自作しろ。
俺はそんなの全然ほしくないが。

649 名前:デフォルトの名無しさん mailto:sage [2013/07/12(金) 08:08:32.35 ]
山ほどあるから。

650 名前:デフォルトの名無しさん mailto:sage [2013/07/12(金) 09:51:16.96 ]
JDBCが好き

651 名前:デフォルトの名無しさん mailto:sage [2013/07/12(金) 23:30:36.05 ]
最強のドカタ言語を舐めるなよ



652 名前:デフォルトの名無しさん mailto:sage [2013/07/12(金) 23:32:03.56 ]
データベースからAccessみたいな環境を一式用意してくれるみたいな?
そいやJavaでクラサバとかしたことねーなぁ

653 名前:デフォルトの名無しさん mailto:sage [2013/07/12(金) 23:56:35.23 ]
>>652


654 名前:デフォルトの名無しさん mailto:sage [2013/07/13(土) 01:45:41.14 ]
社会人になればOracle Databaseは当たり前

655 名前:デフォルトの名無しさん mailto:sage [2013/07/13(土) 05:14:30.11 ]
オッス オラ狂う

656 名前:デフォルトの名無しさん mailto:sage [2013/07/13(土) 06:08:26.90 ]
でもメディアにのる格好いい事例って大抵はEC2の上にMySQLやPostgreSQLをデプロイ
したようなのが最近は多い。
実際に儲かるかはともかくとしてOracleを使った事例ってあまり若い人にアピール
しないというか、こういうシステムに関わってみたいという対象ではない気がする。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<160KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef