SEの現場2004
SE shop.com SEの現場を購入する
SEの現場2004
   
過去記事
第9回 「Javaコース中級編(その4)」
第8回 「Javaコース中級編(その3)」
第7回 「Javaコース中級編(その2)」
第6回 「Javaコース中級編(その1)」
第5回 「Javaコース初級編(Q&A)」
第4回 「Javaコース初級編(その4)」
第3回 「Javaコース初級編(その3)」
第2回 「Javaコース初級編(その2)」
第1回 「Javaコース初級編(その1)」

誌面記事
マンガでわかる
会社・業界図鑑2004
気になる会社の状況と、業界でのポジションが一目でわかる。転職者・新入社員必見!!
SEの職場を拝見
日本オラクル、サイバードなど、「こんな会社で働きたい」職場を持つ企業に突撃取材。本誌未収録写真もアップ。
データベースのセキュリティを考える
今、重要な課題として挙げられるセキュリティの強化。なかでもデータの保護は最も重要です。データは通常データベースに格納されていますが、データベースの中にあれば大丈夫とは言い切れません。この連載ではデータベースのセキュリティについて皆さんと一緒に考えていきたいと思います。
クイズで実践
成功するSEの交渉術
この連載では、SEが獲得すべき交渉のスキルについて、会話形式の例題にそって解説していきます。現場での交渉は毎日が真剣勝負です。ここでは会話に沿って示される選択肢のなかから「これだ」と思うものを選ぶことにより、あなたの交渉スキルをチェックできます。では、さっそく始めましょう。
矢澤久雄の「プロのコード、アマのコード」
「プロらしいコードとは何か?」って聞かれたら、あなたは、何と答えますか? 『プログラムはなぜ動くのか』の著者矢澤久雄がプロのプログラミングを懇切丁寧に教えます。
新人PMに贈る、53通の手紙
え、今日から、プロジェクトマネージャー?期待と不安に満ちた新人PMに贈る現場感が満ちたエールです。
あなたは「もの作り派?」
「マネジメント派?」
 
あなたはどちらの道を選びますか? 自分のキャリアを、限りなくシンプルに考えるためのガイド。
トム・デマルコ インタビュー
プロジェクトマネジメントの神様 トム・デマルコに聞く「PMに必要なもの」。本誌未収録部分も掲載。
SEのための情報源
〜ユーザーグループ・雑誌・書籍〜
『SEの現場 2002〜2004』に掲載した、SEが読むべき雑誌、書籍、ユーザーグループを一挙紹介!
登録記事  
  第9回 Javaコース中級編(その4) 著者顔写真
グレープシティ株式会社 アドバイザリースタッフ
矢澤久雄
2004/7/15

 この記事は、翔泳社で実施する独習ゼミの研修を紙上で再現したものです。

使用したプログラミング言語はJavaです。プログラミング経験の有無から「初級コース」と「中級コース」に分かれて、それぞれ4問ずつプログラミングの課題に取り組んでいただきました。講師を務めた私の役目は、赤ペンでソースコードを添削することでした。提出されたプログラムは、どれもきちんと動作しましたが、誰にも共通した問題がありました。それは「プロらしくない」ということです。

実際に内定者さん(学生さん)から提出していただいたソースコードと添削結果を掲載しますので、皆さんも一緒にプロらしさとは何かを考えてみてください。また、指導する立場の人は、連載で指摘していく項目を意識しながら、後輩指導に取り組んでみるのもよいでしょう。今回は、中級コース第4回の課題を紹介します。なお、提出者の名前は匿名であり、ソースコードも一部を抜粋したものを掲載しています。

☆ ☆


クリック位置に描画されたボール(円)が動き回るJavaアプレットを作成してください。
ボールのサイズ、色、動き回るスピード、動き出す方向は、ランダムな値にします。
ウインドウの上下左右の境界線に達した場合は、ボールが跳ね返るようにします。

 

 

1 :public class Circle2 implements Runnable{
2 :    // 座標
3 :    int x, y;
4 :    // 大きさ
5 :    int size = (int)(Math.random() * 150);
6 :    // 色
7 :    float color = (float)Math.random();
8 :    // 方向とスピード
9 :    int dirx = (int)(Math.random() * 20);
10:    int diry = (int)(Math.random() * 20);
11:    // アプレットのサイズ
12:    int wid;
13:    int hei;
14:
15:    Circle2 (int x, int y, int dx, int dy) {
16:        this.x = x;
17:        this.y = y;
18:        this.wid = dx;
19:        this.hei = dy;
20:    }
21:
22:    public void run() {
23:        // チェックのための変数を用意
24:        boolean chkx = true, chky = true;
25:
26:        try {
27:            while(true) {
28:                // x座標、y座標の増減を計算
29:                if (chkx) x += dirx;
30:                else x -= dirx;
31:                if (chky) y += diry;
32:                else y -= diry;
33:
34:                // 座標が正の方向進むときウィンドウの端にきたら
35:                // 折り返すようにする。y座標も同様に設定
36:                if (x >= (wid - size)) chkx = false;
37:                if (x <= 0) chkx = true;
38:                if (y >= (hei - size)) chky = false;
39:                if (y <= 0) chky = true;
40:
41:                Thread.sleep(50);
42:            }
43:        }
44:        catch(Exception e) {
45:            System.out.println("スレッドに割り込みが入りました。");
46:            e.printStackTrace();
47:        }
48:    }
49:}




メンバに可視性を指定しましょう
可視性とは、publicやprivateというキーワードで、プログラムの他の部分からメンバ(フィールドやメソッド)を利用できるかどうかを設定するものです。一部のメソッドにはpublicが指定されていますが、無指定(パッケージ内でpublicという意味になる)のメンバもあります。無指定は、とても気になります。publicとprivateのどちらを想定しているかが分からないからです。大規模プログラミングでは、Hさんが作ったクラスを他のプログラマが利用することになります。こんな状況をイメージしてください。Hさんと先輩の会話です。

Hさん: 先輩に頼まれたクラスができました。
先輩: ご苦労様でした。それで、メンバは何個あるの?
Hさん はい、全部で100個です。
先輩: どれ、おや可視性の指定がないね。ボクは、どのメンバを使えばいいのかな?
Hさん: はい、これとこれ……全部で5個のメンバを使ってください。
先輩: おいおい、それなら5個のメンバをpublicにして、他の95個のメンバをprivateにしてよ。分かり難いプログラムだなぁ……。

 

メンバにもコメントを付けましょう
クラスを使う人への「思いやり」を込めてコメントを付けてください。クラスを使う人は、以下の順序でコメントを見るでしょう。それがコメントの重要さの順位です。

・このプログラムは誰がいつ作ったのか?
・このプログラムは何か?
・このプログラムの中にあるクラスの役割は何か?
・個々のクラスの持つメンバの役割は何か?
・メソッドの処理内容はどうなっているか?

現状のプログラムには、役割を示すコメントのないメンバがありますね。これでは、クラスを使う人が困ってします。メソッドの処理内容より、メソッド全体の役割を先に知りたいのです

フィールドの右辺に処理を書かないようにしましょう

4 : // 大きさ
5 : int size = (int)(Math.random() * 150);
6 : // 方向、スピード
7 : int dirx = (int)(Math.random() * 20);
8 : int diry = (int)(Math.random() * 20);

という部分でフィールドの右辺に処理が記述されています。コンパイルエラーにならず、正しく動作するのですから問題ないとも言えますが、やはり処理はメソッドの中に記述した方がいいでしょう。フィールドに初期値を代入するのは、コンストラクタで行う処理とすべきです。その方が、初期処理が1箇所にまとまって見やすくなるからです。

これからも学習を続けましょう
これで、課題はすべて終了です。お疲れ様でした!  
これから入社までに、どのような学習をすればよいかアドバイスさせていただきます。

・教材をもう一度「復習」する
・より高度な「サーバーサイドJava」の学習に進む
・サンマイクロシステムズが実施している「Javaプログラマ認定試験」に挑戦する
・国家認定試験である「基本情報技術者試験」に挑戦する

中級コースは今回で終了です。次回は受講者から寄せられたQ&Aを紹介します。お楽しみに!

トップページ
(c) 2004 Shoeisha Co., Ltd. All rights reserved.