トップページ⇒tech
63コメント21KB

オブジェクト指向になってないJavaコードを晒せ!

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
漏れのまわりにはJavaで書けばオブジェクト指向
でプログラム組んでると勘違いしてるヤシが
多すぎる。そんなコードを晒して、オブジェクト指向
プログラミングを勉強しなおそう!

0013デフォルトの名無しさんNGNG
趣味の問題だけど俺は自分のクラスにimplements ActionListenerする時点でもう気持ち悪い
comp.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent evt) {
    compActionPerformed();
  }
} );
protected compActionPerformed() {
}

みんなコレに統一しれ
0014デフォルトの名無しさんNGNG
>>13
.NETならdelegateで綺麗に書けるのに・・・なんて無様なんだろう
0015デフォルトの名無しさんNGNG
>>14
まあ、匿名クラス使ってある程度ごまかせるんだけどね。

ちなみに、C# でも来年登場するバージョンから匿名デリゲートがかけるようになる。
0016デフォルトの名無しさんNGNG
>>13
俺としては、無名クラスを使ってる時点で気持ち悪い。
00178NGNG
>>10
1++はi++の間違いです。堪忍して・・・

このコードですが、
また別のところでは配列の0〜100をまた別の目的に使ってたり、あるところでは
200番から使ってたり、しかもそれを規定するのがコメントだけだったりと、
見るもおぞましいことになってました。
ちなみにこれを書いたやつに
public class XXX000{
 private int hogeID;
 private String name;
...;
 public int getHogeID(){
  return hogeID;
 }
 public void setHogeID(int hogeID){
  this.hogeID = hogeID;
 }
 ...;
}
という風にしないかと言ったら「なんでそんな面倒なことをする必要があるんだ?」と
返されました。思わず絶句・・・。
0018デフォルトの名無しさんNGNG
>>17
富士痛とかいったらそんなコードのほうが標準な気が..
ところで
String x_value[1000];
なんてJavaで書けたのか..
0019デフォルトの名無しさんNGNG
本当に1000個必要なら、17より8のほうが良いな。
0020デフォルトの名無しさんNGNG
本当に1000個必要なら、17より8のほうが良いな。
ValueObjectで、17やられたら1000往復ウマー
00218NGNG
>>18
(;゚Д゚)書けません・・・String[] x_value = new String[1000]でした。やべぇよ俺。
>>19
常に1000個必要な訳じゃないんです。使っている場所によっても違いますが、
実際に使っているのは多くてその半分くらいです。サイズは問題じゃないか。
だいたい、こんなことをしたいならこんなけったいなクラスを定義せず、
String[] x = new String[1000];
でいいと思うんですけどね。
ちなみに、上記のコードに初期化のメソッドはなく、使用する側で初期化するように
なってます。たとえばこんな風に。
for( int i = 0; i < 1000; i++ ){
 x.setValue(i, "");
}
上限を1000から変えたいときはどうするんだろうと思いました。
0022デフォルトの名無しさんNGNG
>>8
>x_value
つーかこういうハンガリアン記法チックは汚いでしょ。
0023デフォルトの名無しさんNGNG
>>4
>>8

中途半端なOOPより、そっちのほうがまだましかも。

機能を増やすときにあのクラスのオブジェクトの
あのメソッドを呼ばないといけないから・・・と
後先考えずに関連を増やされたJavaプログラムは
参照関係がぐちゃぐちゃで
書いた本人以外には理解不能なプログラム
だった。



0024デフォルトの名無しさんNGNG
>>8
のようにするのは美しくないけど、実際にはコレで開発効率があがるのも事実
だいたいResultSetだって>>8のようになってんだし、これでいいと思うが
00258NGNG
>>23
悪いコードになるかどうかどうかと、オブジェクト指向か否かという
話は直行しているでしょ。
いいOOP=いい非OOP>そこそこのOOP=そこそこの非OOP>>>>>悪いOOP=悪い非OOP
>>24
こういう「手抜き」は、最初こそ楽に思えても、開発行程が進むにつれて
ボディブローのようにじわじわと効率を落としていくものだと思っている
んですが、違いますか?つか、前の仕事ではそう感じました。
0026デフォルトの名無しさんNGNG
>>24

こういうコードはオブジェクト指向じゃないね。
クラスの責務なんかあったもんじゃないから。

ま、どこまでのコードがOOPであるかというのは
人によって見解はわかれるとおもうけど。
0027デフォルトの名無しさんNGNG
>24
クラスはRDBのスキーマから生成して、ResultSetからBeanへの値設定処理は
リフレクションでやれば、そんなに面倒ではなくなります!
と主張してみるとか。だめ?
0028デフォルトの名無しさんNGNG
JDBC使ってSQL文かいたコードってどうしてもきたなくなるような気がする。
とくに一つのメソッド内でコネクション確立、ログイン、クエリー実行、
データ取出しを同時にやっているコードは。

J2EE使ったほうがすっきりするんですかねぇ?
0029デフォルトの名無しさんNGNG
>>1

差分プログラミングしてるコードじゃないの?
0030デフォルトの名無しさんNGNG
>>28
軽い気持ちでJ2EEという言葉を口にしてはならない。
0031デフォルトの名無しさんNGNG
>>1

オブジェクトを引数でわたすことばっかりやって
メッセージパッシングをうまくつかってないコード。
0032デフォルトの名無しさんNGNG
>>31

具体例をだせ。
0033OO厨 ◆ILBKrPMSho NGNG
オブジェクト指向になってないJavaって、何か問題をはらんでいるんだろうか。

これは、オブジェクト指向なJavaのコード
http://pc2.2ch.net/test/read.cgi/tech/1021881540/242-244
0034デフォルトの名無しさんNGNG
オブジェクト指向は規模が大きくなったときに役に立つものなので、
33が示すような小規模なコードに適用しても無意味。
ちょっとしたテキストフィルタ程度ならOOでないほうがよっぽどいい。
8のあれって、テーブルの内容をコンソールに表示するだけのプログラムで使うなら
使い回しが効いて悪くないだろ。
問題なのは、大きい業務システムを非OOで乗り切ろうとする馬鹿野郎。
規模に応じて方法論を使い分けろってことだね。
0035デフォルトの名無しさんNGNG
>>25
>こういう「手抜き」は、最初こそ楽に思えても、開発行程が進むにつれて
>ボディブローのようにじわじわと効率を落としていくものだと思っている
まったくその通り。
最初のうちは見かけ上サクサク進むんだけど、
ボリュームが増えてきたりあとで変更入ったりすると柔軟に対応できなくて、
自分の書いたコードすら理解できなくなって破綻するか(PGが出社しなくなるとか)、
パフォーマンスがことごとく落ちるか(受注会社がこんなものですと開き直る)になる。
そのような「手を抜かないで最初からしっかり作っておけばよかったのに・・・」
ってシステムの見直しを発注本から依頼されて、そういうのを何度も改善したことあるよ。
共通していえるいるのは、先のこと(保守性)を考えていないということ。
そのときだけ動きゃいいと思い込んでる。ある意味正しい教育を受けれなかったそのPG
もかわいそうなんだけど。
0036デフォルトの名無しさんNGNG
>>31

言いたいことはわかる気がする。抽象データ型として
オブジェクトを使って、作り方は機能分割のプログラム
のことだろ?最初っからそう割り切って書いてくれるなら
まあ、それもいいとするが、本か何かで読んだのかしらんが
部分的にOOにやってるプログラムが一番たちが悪い。

0037デフォルトの名無しさんNGNG
        
http://page5.auctions.yahoo.co.jp/jp/auction/e22909695         

ヤフオク出品したよ
1円スタートでマジお勧め!          

「10日でおぼえるJSP/サーブレット入門教室」翔泳社              

0038デフォルトの名無しさんNGNG
あげ荒らし氏ね
0039山崎渉NGNG
(^^)
0040山崎渉NGNG
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0041山崎渉NGNG
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0042デフォルトの名無しさんNGNG
でも逆に非オブジェクトなコード書けといわれても
もう、難しいな俺には・・・
携帯アプリのソースって非OOなもの多いよな
いまはサイズ大きいから大丈夫か?
0043デフォルトの名無しさんNGNG
そういえば、「Javaによる最新アルゴリズム事典」はオブジェクト指向らしさが欠けているな。
アクセス権がほとんどpublicでprovateやprotectedなメソッドやフィールドが殆どない。

もともとアルゴリズム教育やC言語やTeXが得意な学者が書いた本って感じだな。
0044デフォルトの名無しさんNGNG
おれだとこうするんだがどうなんだろう?使い道次第だけど。。。
public class XXX0010data{
 private String hogeID,name,birthday;
 public String getValue(String hogeID,String name,String birthday){
  this.hogeID=hogeID;
  this.name=name;
  this.birthday=birthday;
 }
 public String getName(){
  return name;
 }
 ・・・各getter
}
使用例
Map x = new HashMap();
ResultSet rs = st.executeQuery("select * from T_510");
int i = 0;
while(rs.next()){
 XXX0010data data=new XXX0010data(rs.getString("hogeID"),rs.getString("name"),rs.getString("birthday"));
x.put(rs.getString("hogeID"),data);
}
004544NGNG
あと可変長の2次元配列とプリミティブ変数の配列の扱いでいつも悩むんだが、もまいら、どうしてらっしゃるのですか?
Listのネスト?
配列をListに収納?
List で入れて返すときに毎回2次元配列に変換?

プリミティブ変数の可変長配列は、
List a=new ArrayList();
a.add(new Double(0.1));
とかするのは出し入れが面倒だ。。
0046デフォルトの名無しさんNGNG
>>1

直感的にOOになってないなーとはわかるが、
ここがこーだからといいにくいんだよねー。

ま、漏れの技術力が低いのが原因だとおもうが。
こういうのって技術雑誌とかに特集されてたりしないもんなの?
0047_NGNG
http://homepage.mac.com/hiroyuki44/
0048デフォルトの名無しさんNGNG
このスレって、>>27で結論出てる所が、なかなかイタイ。
んな、手で書かなくても済むコードのコーディング・スタイル気にしても、
しゃーないやん。(ツール生成コードを手でメンテさせる糞現場もあるらしいけど(w)
0049デフォルトの名無しさんNGNG
えっつ、じゃぁ>>8のソースはあるツールから自動生成されたってことか?
誰だよこんな糞コード吐くツール作った奴は…
0050デフォルトの名無しさんNGNG
何でそういう役にも立たない事書くかな・・・
0051_NGNG
http://homepage.mac.com/hiroyuki44/
005248NGNG
>>49 早起きさんの小学生だな
0053デフォルトの名無しさんNGNG
>>52
必死だなw
0054デフォルトの名無しさんNGNG
>>53 死語の世界だなw
0055デフォルトの名無しさんNGNG
age
0056デフォルトの名無しさんNGNG
OOっていうか、>>8のコードってパフォーマンス、リソースに問題ない?
0057デフォルトの名無しさんNGNG
>>8
カプセル化が充分にされていれば問題ありません
それを書き直す時間もありません

ツッパシレ!!
00588NGNG
>>56
問題ありまくりです。しかもこのインスタンスは
サーブレットコンテナのセッションに保持されるので、余計に…
0059山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0060うんこNGNG
>>43
あー、その本俺も買った
確かに異常にstaticが多かった
でもアルゴリズムの説明にはあーいう組み方が一番適していると思いますよ
買って全く損してない、面白いし
0061山崎 渉NGNG
(^^)
0062デフォルトの名無しさんNGNG
おい、うんこ氏よ。
複素数の項を見たのだが
public double real;
public double imag;

public static Complex sin(Complex x){
 //略
}

となっている記述が気に入らなかった。
これじゃ「C言語による最新アルゴリズム辞典」のときの構造体
そのまんまや。

private double real;
private double imag;

getReal(){ return real; }
getReal(){ return imag; }

public Complex sin(){
 //略
}

になっていないのが気に入らなかった。
0063山崎 渉NGNG
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
■ このスレッドは過去ログ倉庫に格納されています