忍者ブログ

てんねんのSE備忘録

てんねんのためのSE備忘録 間違い指摘いただけると助かります また、拍手なんかしていただけると喜びます

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

java:Javaコーディング標準:パフォーマンス

●今回は以下のJavaコーディング標準より「6.パフォーマンス」について
http://objectclub.jp/community/codingstandard/CodingStd.pdf

●パフォーマンスを向上するために
①まず計測

②newよりも出力引数を用いるか、呼び出し元に任せる
出力引数例
------------------------
型名 get型名(){
    return new 型名();
}
------------------------

呼び出し元に任せる(呼び出し元でnew)
------------------------
void get型名(x){
    return set型名(x);
}
------------------------

③Synchronizedは時間がかかる
→必要な部分だけにSynchronizedに使う
→ArrayList・HashMapで、Collections.synchronizedCollectionによる同期

④変数には「null」を入れておく
理由:ガーベッジコレクションを助ける

拍手[0回]

PR

java:Javaコーディング標準:コメント

●今回は以下のJavaコーディング標準より「6.コメント」について
http://objectclub.jp/community/codingstandard/CodingStd.pdf

●コメントの種類
①/** */
javadocコメント
html形式でドキュメント出力される
publicクラス・メソッド・フィールドに必ず付ける

②/* */
通常のコメント

③//
通常のコメント

●javadocタグ
@author 書いた人の名前
@param 引数名 説明
@return 返り値の説明
@exception 例外の名前 説明
@see string
@see URL
@see classname#methodname

※@seeは参照

●クラスコメント
/**
 *クラスの説明1.
 *<PRE>
 *クラスの説明2-1
 *クラスの説明2-2
 *</PRE>
 */
 
→クラスの説明1は…
MethodIndexに使用される
「.」または「<br>」で終わる

→クラスの説明2は…
使用例を表す場合
<PRE>タグを入れる

※HTML<PRE>
ソースに記述されたスペース・改行などをそのまま等幅フォントで表示

●契約による設計(Design by Contract)
→契約による設計とは…
プログラムコードの中に満たすべき仕様について記述を盛り込む設計
→assertステートメントを使用
http://tomame0se.blog.shinobi.jp/Entry/38/

拍手[0回]

java:assertステートメント

●assertステートメントとは
①J2SE1.4からの要素
②アサーション機能を実現するものとしてJava の言語仕様に加えられたもの

※アサーション(assertion)
→ソフトウェアが正しく動作することをより確実にするために使われる手法
→「各地点でこの条件が成立しているはず」
という検証用のコードをそれぞれの箇所に配置し違反を自動で検出

●assertステートメントの形式

/*
 *exp1が検証されるべき条件を記述するboolean 型の式
 *falseの場合アサーション違反となり,エラーAssertionErrorをスロー
 */
assert exp1;

/*
 *exp2はexp1の値がfalseとなってAssertionErrorオブジェクトが作られるときの
 *コンストラクタへのパラメタ(String)
 */
assert exp1 : exp2;

●assertステートメントの使用例
assertステートメント使用前
---------------------------------------------
if( sw == 0 ){
    aaaa();
} else {    //ここでsw > 0であるはず
    bbbb();
}
---------------------------------------------

assertステートメント使用後
---------------------------------------------
if( sw == 0 ){
    aaaa();
} else {    
    //sw > 0がfalseのとき「sw = swの値」を表示
    assert sw> 0 : "sw ="+sw;
    bbbb();
}
---------------------------------------------

AssertionErrorが出た場合のエラー
---------------------------------------------
AssertionError: sw = swの値
---------------------------------------------

●アサーションの種類
①事前条件
呼び出し元がメソッドに渡す引数が満たすべき条件
メソッドを呼び出されたときに引数をアサートする

②事後条件
メソッドの処理結果が満たすべき条件
メソッドが終わるときに処理結果をアサートする

③クラス不変条件
オブジェクトの内部状態が適切に保たれていることを示す条件
クラスの参照する場合に変数が変えられていないか、関数の前後でアサートする

●参考サイト
http://www.ipa.go.jp/security/awareness/vendor/programmingv1/a03_05.html

拍手[0回]

java:Javaコーディング標準:ガイドライン

●今回は以下のJavaコーディング標準より「3.ガイドライン」について
http://objectclub.jp/community/codingstandard/CodingStd.pdf

●プログラムの基本型
---------------------------------------------------
/*
*   COPYRIGHT(著作権情報)
*/
package パッケージ名;

import パッケージ名;

/**
 * クラスの説明
 */
public class クラス名{

    /**
     * 変数の説明
     */
    private 型名 変数名;

    /**
     * 関数の説明
     * @author 書いた人(これは必ず入れる)
     * @see 関連項目
     * @param 引数
     * @return 返り値
     */
     public void 関数名(引数) {
         if (条件) {
         
         } else {
         
         }
     }
}
---------------------------------------------------

●その他ルール
①1行は80文字まで

②クラスの「extends」「implements」
 public class クラス名
                 extends 継承クラス名
                 implements インタフェース名
                 
③メソッドの改行
 private setA(double a,double b,
                 double c,double d);
                 
④「import」に「*」はなるべく使用しない(3つ以上の場合はOK)

⑤メソッドは1つのことを行うようにする

⑥引数のタイプによるメソッドのオーバーロードはなるべく避ける
 駄目な例:draw(Line); draw(Rectangle);

⑦Object.equals()メソッドをオーバーライドするとき
コンテナクラス(Hashtable)に対応するため、
hashCodeもオーバーライドする(逆も同じ)。

⑧Objectのcloneを使用するとき、「cloneable」で明示(深いコピー)
理由:浅いコピー(sliceやconcat)ではコピー元を変えてしまう場合がある

⑨できる限りデフォルトコンストラクタを作成
Class.newInstance()でインスタンスの作成ができる

※デフォルトコンストラクタ
引数なしのコンストラクタ

⑩同値比較はequals()を使用する
理由:ユニットテスト時にassertEqualsを使用できて楽

⑪ローカル変数は宣言時に初期化・再利用はしない
例:for(int i=0;i<10;i++){}
    for(int i=0;i<20;i++){}

⑫条件文の条件には「=」を使わない
バグが発生しやすい??

⑬「<」「<=」を使う
右側が大きいほうと統一しておく

⑭キャストはできる限りinstanceofの条件文で囲む

C cx = null;
if(x instanceof C){
    cx = (C)x;         //キャスト
}else{
    //インスタンスができない場合の処理
}

⑮JDKの標準の例外クラスを使う
積極的に利用したい例外クラスたち
→IOException
なんらかの入出力例外の発生を通知するシグナルを発生
→NoSuchFileExpection
ファイルがないときの例外スロー
→IllegalArgumentExpection
不正な引数、または不適切な引数をメソッドに渡したことを示すためにスロー

⑯メソッドの引数は変更しない
理由:突然値が変更されることになるため

⑰toString()メソッドはできる限り実装する
理由:テストをするときに表示できる

⑱「switch」「if/else」を繰り返さない
繰り返すと同じプログラムを書くことが多くなる
FactoryMethod・Prototypeパターン・NullObjectパターンを考える

※FactoryMethodパターン
http://www.techscore.com/tech/DesignPattern/FactoryMethod.html/

※Prototypeパターン
http://www.techscore.com/tech/DesignPattern/Prototype.html/

※NullObjectパターン
http://www.hyuki.com/dp/dpinfo.html#NullObject

⑲Stringと基本型の変換
String s = String.valueOf(i);
int i = Integer.parseInt(s)

拍手[0回]

java:Objectクラス

●Objectクラスとは…
全てのクラスのルートとなるクラス

●代表的メソッド
①clone()
オブジェクトのコピーを作成し、返す(Object)

②equals(Object obj)
等価のオブジェクトがあるかの判定を返す(boolean)

③finalize()
デストラクタ

④getClass()
Objectの実行時クラスを返す(Class)

⑤hashCode()
オブジェクトのハッシュコード値を返す(int)

⑥toString()
オブジェクトの文字列表現を返す(String)

拍手[0回]

カレンダー

03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

フリーエリア

最新CM

最新TB

プロフィール

HN:
てんねん
性別:
非公開

バーコード

ブログ内検索

P R

カウンター

忍者アナライズ