PowerPoint Presentation

Similar documents
Microsoft PowerPoint ppt

Prog2_12th

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

Java知識テスト問題

PowerPoint プレゼンテーション

デザインパターン第一章「生成《

JavaプログラミングⅠ

GEC-Java

11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS デザインパターンとは? デザインパターン 過去のソフトウェア設計者が生み出したオブジェクト指向設計に関して, ノウハウを蓄積し 名前をつけ 再利用しやすいようにカタログ化したもの 各デ

Microsoft PowerPoint - prog03.ppt

プログラミング基礎I(再)

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

GEC-Java

PowerPoint Presentation

基本情報STEP UP演習Java対策

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

Microsoft PowerPoint - chap10_OOP.ppt

Prog1_6th

JavaプログラミングⅠ

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

Prog1_15th

JAVA入門

Javaの作成の前に

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

Javaプログラムの実行手順

メディプロ1 Javaプログラミング補足資料.ppt

プログラミング入門1

Seasar.NET入門

Microsoft PowerPoint - prog04.ppt

V8.1新規機能紹介記事

2

目次 はじめに 4 概要 4 背景 4 対象 5 スケジュール 5 目標点 6 使用機材 6 第 1 章 C# 言語 7 C# 言語の歴史 7 基本構文 8 C 言語との違い 9 Java 言語との違い 10.Netフレームワーク 10 開発資料 10 第 2 章 Mono 11 Monoの歴史 1

プログラミング入門1

PowerPoint プレゼンテーション

デジタル表現論・第4回

メソッドのまとめ

Brekeke PBX - Version 2.1 ARSプラグイン開発ガイド

JavaプログラミングⅠ

PowerPoint プレゼンテーション

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

Java言語 第1回

Microsoft PowerPoint - prog08.ppt

第二回独習 Java ゼミ 第二章クラスとメソッド 2.1 メソッドの構造 2.2 静的メソッドと静的変数の概要 2.3 インスタンスメソッドとインスタンス変数の概要 2.4 Integerクラス 2006/04/19 神津健太

PowerPoint プレゼンテーション

Prog2_10th

PowerPoint プレゼンテーション

プログラミング入門1

JavaプログラミングⅠ

Prog2_10th

Microsoft PowerPoint - 09.pptx

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

プログラミング入門1

Microsoft PowerPoint - prog09.ppt

できるプログラマーを本気で育てる Java 超 Webプログラマーへの第 歩 第 2 回オブジェクト指向 テクノロジックアート 瀬 嘉秀

Microsoft PowerPoint - prog09.ppt

解答上の注意 1 解答は 解答 紙の問題番号に対応した解答欄にマークしなさい 2 選択肢は 問ごとに 意されています 問 1の選択肢は 問 2で使 しません 3 選択肢は量が多いため 探しやすさの観点よりグループ分けされています グループ分けに合わせて解答欄が区切られていますが 横 1 列で問題 1

GEC-Java

JavaプログラミングⅠ

26 editor.putint(pref_count_key, executecount); 27 // 変更した Preference を確定させる 28 editor.commit(); 29 } (c) 実行の様子実装して実行した様子を図 1 と図 2 に示す. 一度実行するごとに, カウン

Microsoft PowerPoint - prog08.ppt

Prog2_9th

MISAO with WPF

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

JAVA とテンプレート

4-1- 基 Java に関する知識 1 独立行政法人情報処理推進機構

とても使いやすい Boost の serialization

第 3 回 Java 講座 今回の内容 今週の Java 講座はコレクション 拡張 for 文, ガベージコレクションについて扱う. 今週の Java 講座は一番内容が薄いも のになるだろう. コレクション コレクションとは大きさが決まっていない配列だと考えればよい. コレクションには List 先

Sort-of-List-Map(A)

Android Layout SDK プログラミング マニュアル

WebOTXマニュアル

JUnit 概要 2015/4/16 版今泉俊幸 2015 bbreak Systems 1

ガイダンス

基礎計算機演習 実習課題No6

Prog2_10th

オブジェクト指向プログラミング・同演習 5月21日演習課題

文字列操作と正規表現

storage-sdk-Java

JEB Plugin 開発チュートリアル 第4回

第2回講義

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

Prog2_11th

PowerPoint プレゼンテーション

Java の ConcurrentHashMap における同期化 バッドケースとその対処法 2013 年 9 月湊隆行 1. はじめに表 1.1 に示すように Java の Collections Framework には 3 つの世代があります バージョン 1.0 から存在するレガシー API バ

Webコンポーネントのカスタマイズ入門

C/C++からJVMを起動します


ボタンイベントアプリイベント処理を含むアプリとして, ボタンをもち, ボタンを押すと文字列を表示するアプリを作る. このアプリは,HelloWorld アプリを改造して作成するため, アプリ作成の途中からの手順を示す. 1. ボタンの設置 (1) レイアウトにボタンを追加するパレットの フォーム ウ

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

実行形式の作成と構成管理 2012 年 7 月 8 日 海谷治彦 1

DVIOUT-exer

ガイダンス

Microsoft PowerPoint - ruby_instruction.ppt

5 継承とは クラス図 98 7 参照の自動型変換 参照の自動型変換 クラス図の見方 クラス図の書き方 継承 継承してクラスを作る インスタンスの初期化 継承の効果を確認する

PowerPoint プレゼンテーション

IT プロジェクト

Prog1_10th

ガイダンス

Transcription:

効率化 Java プログラミング ~ 意外と知られていない Java の便利機能 ~ 株式会社エスプランニング本多鉄兵前田敬

自己紹介 ( 前田 ) ( 株 ) エスプランニングビジネスソリューション Gr 主任 28 歳 2 年前に札幌に U ターン ゴキブリが怖い 最近は Swing での業務系アプリ開発に従事 Scala に興味津々 札幌 Java コミュニティに参加 趣味は万年筆集め

自己紹介 ( 本多 ) ( 株 ) エスプランニング取締役 33 歳 業務経験は 10 年程度 初めの開発業務で Java/C++ を扱い 以降オブジェクト指向にはまる 現在は内部監査など作業をし あまり現場作業を出来ない 面白い UI のアプリケーションを作りたい 趣味は漫画 お金持ちになりたいです

はじめに Java プログラミングを行ううえで 効率化を考えた場合 既存フレームワークやライブラリの使用 IDE の選択 / 設定からコーディング規約の策定など その方法は多岐に渡ります 本セミナーではコーディングレベルで簡単に出来る効率化というところに焦点を当て 特に触れる機会の少ない (?) 列挙体やアノテーション リフレクションの使い方について 実践で培ったノウハウを元に説明いたします 本セミナーがここにいる皆様方の一助となれば幸いです 本日最後の 70 分間 お疲れのこととは思いますが どうぞ最後までお付き合いください

アジェンダ 1. enum 2. Reflection 3. Annotation

enum

レジュメ 1.public static finalな定数クラスに別れを告げる 2.enumのポリモーフィズムを体感する 3.enumでデザインパターン 4. まとめ

よく見る定数クラス public class Constraints { public static final char A = 'A'; public static final char B = 'B'; public static final char C = 'C'; public static final char D = 'D'; public static final char E = 'E'; //... }

定数クラスを使ってみる public class Student { private String name; private char rank; } public Student(String name, char rank) { this.name = name; this.rank = rank; } //...

定数クラスの問題点 // 正常 Student teppei = new Student( Teppei, Constraints.A); // 異常な指定だがコンパイルエラーにならない! Student shinichi = new Student( Shinichi, 'F');

public static final な定数クラスその他の問題 ファイルの肥大化 定数の意味を変数名でしか定義できない static final フィールドのインライン化

Type Safe Enum パターン public class Rank { private final char rank; public static final Rank A = new Rank('A'); public static final Rank B = new Rank('B'); public static final Rank C = new Rank('C'); public static final Rank D = new Rank('D'); private Rank(char rank) { this.rank = rank; } public char getvalue() { return this.rank; } 冗長過ぎる!

enum を使おう public enum Rank { A('A'), B('B'), C('C'), D('D') ; private char rank; private Rank(char rank) { this.rank = rank; } public char getvalue() { return this.rank; } }

クラスファイルを見てみよう

java.lang.enum のメソッド一覧 メソッド public final String name() public final int ordinal() public final int compareto( 列挙子 ) 説明 列挙子の名前を返す列挙子の順番を返す列挙子の順番で比較 public String tostring() 文字列表現を返す (name() と同じ ) public static 列挙名 valueof(string name) 文字列に該当する列挙子を返す public static 列挙名 [] values() public final Class< 列挙名 > getdeclaringclass() 列挙子の配列を返す 列挙子のクラスを取得

潜在的な問題が含まれるコード

潜在的な問題が含まれるコード

多態性を利用した解決方法

Strategy パターンを enum で表現してみよう

じゃんけんの振舞いを抽象化した インターフェース

JankenStrategy の実装クラス

条件を判定する Context クラス

クラス図

JankenStrategyImpl を作成

Context も大幅にコード量減

Singleton とは? あるクラスについて そのインスタンスが単一であることを保証するためのデザインパターン

Singleton の作り方 1. 自身のインスタンスをstatic finalなフィールドで生成 2. コンストラクタをprivateにする 3.Serializableをimplementsする 4.serialVersionUIDを定義 5. インスタンスフィールドをtransientにする 6. 唯一のインスタンスを返すreadResolve() メソッドを定義

Singleton のサンプル

enum を使用した Singleton のサンプル Singleton インスタンスを示す enum を宣言するだけ!

Singleton を enum で書くことのメリット 従来の Singleton に比べ 考慮しなければならないことがほとんどない 従来の Singleton enum による Singleton 自身のインスタンスを static final なフィールドに定義要不要 コンストラクタをprivateにする 要 不要 Serializableをimplements 要 不要 serialversionuidを定義 要 不要 インスタンスフィールドに transient 要不要 readresolve メソッドを定義要不要

enum のまとめ public static finalな定数クラスはenumにしよう! Javaのenumは多態性を表現できる! Singletonはenumで書くのがベスト プラクティス!

Reflection

レジュメ 1.Reflectionのおさらい 2. 動的にインスタンスを生成するファクトリを作る 3. インスタンス生成時のパフォーマンス 4. テストで使える汎用的なtoStringメソッドを作る 5. まとめ

Reflection のおさらい -Reflection で出来ること - プログラムの内部構成の情報取得 型の判別 修飾子 アノテーションの情報取得 フィールド メソッド コンストラクタの情報取得 クラス名 パッケージ名の取得 動的実行 動的なインスタンス生成 動的なメソッド呼び出し 動的プロキシ生成 etc

Reflection のおさらい -Reflection のサンプル - java.lang.enum クラスのメソッドを全て取得して表示する

動的にインスタンスを生成するファクトリ Class クラスの newinstance メソッドで引数で渡された型のインスタンスを動的に生成

インスタンス生成時のパフォーマンス比較 -new と newinstance- Windows XP Intel Core 2 Duo T7250 1.99GHz, 1.99GB RAM JRE build 1.6.0_07-b06

インスタンス生成時のパフォーマンス比較 -new と newinstance- 25 インスタンス生成に掛かる実行時間 20 sec 15 10 new newinstance 5 0 10000000 50000000 100000000 試行回数

汎用的な tostring メソッド getdeclaredfields メソッドを使用し そのインスタンスが保持するすべてのフィールドを取得している

まとめ < メリット > デバッグ用 テスト用のツールとして使うと便利 動的にいろいろ出来るので 使いようによってはコーディングを量を減らすことができる < デメリット > 設計を破壊してしまう可能性 パフォーマンス コストは良くない (IDE などで ) ソースが追いにくい Reflection は正しく使えば強力なツールになります 特性を理解し しっかりと検討したうえで有効に使いましょう

Annotation

Annotation - レジュメ - Annotation のおさらい Annotation でビルドチェック Annotation とリソース Annotation マーキング まとめ

Annotation のおさらい - 概要 - 注釈 クラスやメソッドのメタデータ プログラムの動作に影響を与えるべきではない ソフトウェア開発の負荷を軽減することを目的とする ( 将来的に )

Annotation のおさらい - 分類 (1)- マーカ Annotation

Annotation のおさらい - 分類 (2)- 単一値 Annotation

Annotation のおさらい - 分類 (3)- フル Annotation

Annotation のおさらい -Java 標準の Annotation- @Deprecated @Override @SuppressWarnings @Target ( メタAnnotation) @Retention ( メタAnnotation) @Documented ( メタAnnotation) @Inherited ( メタAnnotation)

Annotation のおさらい - 独自の Java アノテーション定義 - @Target(ElementType.XXX) @Retention(RetentionPolicy.XXX) public @interface Annotation 名 { } 要素の型要素名 () default デフォルト値 ;

Annotation のおさらい -Annotation を処理するツール - Javadoc apt(annotation Processing Tool) コマンド (javac でも可 ) リフレクション

Annotation のおさらい - なぜ Annotation を使用する?- ソースに表現できない情報を提供したい 外部から Annotation を解釈する必要がある

Annotation でビルドチェック @ToDo と @Singleton

Annotation でビルドチェック -Annotation を使用してビルドチェックするには - javax.annotation.processing.processor を使用する実際には javax.annotation.processing.abstractprocessor を使用する Javac コマンドに Processor を渡す

Annotation でビルドチェック -@ToDo ~ 概要 - ビルド時に @ToDo が残っている場合 その内容を Warning として出力する @ToDo 定義

Annotation でビルドチェック -@ToDo ~ ToDoProcessor の実装 -

Annotation でビルドチェック -@ToDo ~ Sample 作成 / 実行 -

Annotation でビルドチェック -@ToDo ~ 修正して実行 -

Annotation でビルドチェック -javac への自作 Processor 指定 - -processor XXXProcessor META-INF/services へのファイル格納 XXX.jar META-INF/service ファイル :javax.annotation.processing.processor

Annotation でビルドチェック -@Singleton ~ 概要 - static 変数チェック ( 自身の型 ) static メソッドチェック ( 自身の型が戻り値 ) @Singleton 定義

Annotation でビルドチェック -@Singleton ~ SingletonProcessor-

Annotation でビルドチェック -@Singleton ~ Sample 作成 / 実行 -

Annotation でビルドチェック -@Singleton ~ 修正して実行 - static のフィールドとメソッドを追加して実行する

Annotation とリソース @ResourceBundle

Annotation とリソース -@ResourceBundle ~ 概要 - リソースファイルの自動出力 ( 使用 :@ResourceBundle) キー = 値 の自動出力 ( 使用 :@ResourceElement) リフレクションでリソースファイルの読み込み ( 使用 :@ResourceBundle @ResourceElement)

Annotation とリソース -@ResourceBundle ~ 定義 (1)- @ResourceBundle 定義

Annotation とリソース -@ResourceBundle ~ 定義 (2)- @ResourceElement 定義

Annotation とリソース -@ResourceBundle ~ ResourceBundleProcessor-

Annotation とリソース -@ResourceBundle ~ Sample を作成 -

Annotation とリソース -@ResourceBundle ~ 実行 (1)- javac を実行すると

Annotation とリソース -@ResourceBundle ~ 実行 (2)- Sample.properties

Annotation とリソース -@ResourceBundle ~ リフレクション -

Annotation とリソース -@ResourceBundle ~ Sample の作成 - MainFrame 抜粋

Annotation とリソース -@ResourceBundle ~ Sample 実行 -

Annotation マーキング @Signature とプラグイン

Annotation マーキング -@Signature ~ 概要 - Jar ファイル中の @Signature を検出する @Signature の内容を表示し承認を求める インスタンスを生成し プラグインする

Annotation マーキング -@Signature ~ 定義 - @Signature 定義

Annotation マーキング -@Signature ~ プラグインクラス 1-

Annotation マーキング -@Signature ~ プラグインクラス 2-

Annotation マーキング -@Signature ~ プラグイン概要 - Plugin1.jar プラグインアプリ Plugin2.jar ドロップされた jar から @Signature マークのあるクラスを検出する @Signature の value 要素から値を取得し 承認確認ダイアログを表示する アイコンと文字列を取得 表示する

Annotation マーキング -@Signature ~ 実行結果 (1)-

Annotation マーキング -@Signature ~ 実行結果 (2)-

Annotation まとめ

Annotation のまとめ ビルド時に固有のチェック機能を付けれる ビルド時にファイルの自動生成が出来る リフレクションを使用してデータの設定や取得が出来る リフレクションを使用してインスタンス生成前にクラスの Annotation 情報を入手出来る

さいごに 現在厳しい経済状況ではありますが 今回ご紹介した内容が 皆様の現場に役立ち 少しでも発展の手段となって頂ければ幸いです 長い間ご静聴ありがとうございました