1
OJCP Gold SE 7 資格試験の傾向と対策 日本オラクル株式会社オラクルユニバーシティ 2
以下の事項は 弊社の一般的な製品の方向性に関する概要を説明するものです また 情報提供を唯一の目的とするものであり いかなる契約にも組み込むことはできません 以下の事項は マテリアルやコード 機能を提供することをコミットメント ( 確約 ) するものではないため 購買決定を行う際の判断材料になさらないで下さい オラクル製品に関して記載されている機能の開発 リリースおよび時期については 弊社の裁量により決定されます Oracle は 米国オラクル コーポレーション及びその子会社 関連会社の米国及びその他の国における登録商標または商標です 他社名又は製品名は それぞれ各社の商標である場合があります 3
Agenda 1. Java SE 7 対応オラクル認定 Java 資格 のご案内 2. OCJP Gold SE 7 資格試験の傾向と対策 3. 補足情報 4
1. Java SE 7 対応オラクル認定 Java 資格のご案内 5
Java SE 7 対応オラクル認定 Java 資格が新しくなりました Bronze, Silver, Gold の 3 段階の積み上げ式でスキルを認定します 旧資格体系 新資格体系 Oracle Certified Java Programmer, Gold SE 7 Oracle Certified Java Programmer, Silver SE 7 Oracle Certified Java Programmer, Bronze SE 7 設計者の意図を正しく理解して独力で機能実装が行えるレベル ( 中上級 Java プログラマ向け ) Gold 資格は コレクション API, ファイル I/O, 並行処理 JDBC などのライブラリを使用したプログラミングを理解しているかどうかが主な出題項目です 加えてデザインパターンについても問われるため設計から実装までの包括的なスキルを身につけているかが問われます (Global 資格 : Oracle Certified Professional, Java SE 7 Programmer) 独力で単体テストコードなどを書けるくらいのレベル ( 初級 Java プログラマ向け ) Silver 資格は Java 言語の基本文法とオブジェクト指向プログラミング ( クラス インタフェース 例外処理 ) を理解しているかどうかが主な出題項目です プログラミングのために必要とされる仕様を詳細に理解しているかが問われます (Global 資格 : Oracle Certified Associate, Java SE 7 Programmer) Java によるオブジェクト指向プログラミングを覚えたレベル ( 言語を初めて学ぶプログラマ向け ) Bronze 資格は Java 言語の基本文法 ( 変数宣言や制御文 ) とオブジェクト指向プログラミングの基本を理解しているかどうかが主な出題項目です 言語初学者が理解するべき基礎項目を理解しているかが問われます 6
Java SE 7 資格認定パス Gold 試験は どちらもかなり手強いです しっかり準備して試験に備えましょう! 1Z0-804: Java SE 7 Programmer II Oracle Certified Java Programmer, Gold SE 7 これから資格取得を目指す方 1Z0-803: Java SE 7 Programmer I Oracle Certified Java Programmer, Silver SE 7 1Z0-805: Upgrade to Java SE 7 Programmer 1Z0-802: Java SE 7 Bronze Exam オンライン試験有り Oracle Certified Java Programmer, Bronze SE 7 OCJ-P/SJC-P 資格取得者 ( バージョンは問わない ) 資格名 試験名 一試験で移行可能! 7
OCJP Gold SE 7 試験 Java SE 7 Programmer II 試験名 : Java SE 7 Programmer II (1Z0-804) 認定資格 : Oracle Certified Java Programmer, Gold SE 7 出題数 : 90 問 ( 選択式 ) 試験時間 : 150 分 合格ライン : 65% 試験料 ( 税抜 ): 32,600 円 前提資格 : OCJP Silver SE 7 8
テスト内容チェックリスト (1) 1. Java クラスの設計 アクセス修飾子の使用 :private, protected, public メソッドのオーバーライド コンストラクタおよびメソッドに対するオーバーロード instanceof 演算子の使用とキャスト 仮想メソッド呼び出しの使用 クラスの機能向上のための Object クラスのメソッドのオーバーライド package 文と import 文の使用 2. 高度なクラス設計 抽象クラスの適用方法と適用するタイミングの特定 抽象クラスとサブクラスの作成 static キーワードと final キーワードの使用 最上位レベルとネストクラスの作成 3. オブジェクト指向の設計原理 インタフェースの宣言 実装および継承 インタフェースの継承とクラスの継承の選択 is-a 関係と has-a 関係を実装するコードの作成 コンポジションの適用 シングルトン デザイン パターンの使用 DAO パターンを実装するコードの作成 ファクトリを使用した設計と API からのファクトリの使用 4. ジェネリックスとコレクション ジェネリックスクラスの作成 コレクションとダイアモンド演算子の使用 従来型とジェネリックス型を使用したコレクションの相互運用性の分析 ラッパー クラスとオートボクシングの使用 List Set および Deque の作成と使用 Map の作成と使用 java.util.comparator と java.lang.comparable の使用 配列とリストのソートと検索 9 列挙型の使用
テスト内容チェックリスト (2) 5. 文字列処理 文字列の検索 解析および作成.( ピリオド ) *( アスタリスク ) +( プラス )? d D s S w W b B [] () などのパターンを正規表現で使用して 文字列の検索 解析および置換を行う 書式指定パラメータを使用した文字列の書式化 : %b %c %d %f %s 6. 例外とアサーション throw 文と throws 文の使用 multi-catch のある try 文と finally 句の使用 try-with-resources 文を使用したリソースの自動クローズ カスタム例外の作成 アサーションを使用した不変条件のテスト 7. Java I/O の基礎 コンソールからのデータの読み込みと書き込み ファイルの読み込みおよび書き込みのためのストリームの使用 8. Java ファイル I/O (NIO.2) ファイルやディレクトリパス操作のための Path クラスの使用 Files クラスを使用したファイルやディレクトリの確認 削除 コピー および移動 ファイル属性やディレクトリ属性の読み込みおよび変更 ディレクトリ ツリーの再帰アクセス PathMatcher クラスを使用したファイルの検索 WatchService を使用したディレクトリ変更の監視 9. JDBC によるデータベース アプリケーションの作成 JDBC API のレイアウト定義 JDBC ドライバを使用したデータベース接続 データベースへの更新と問い合わせ JDBC のトランザクションの振る舞いのカスタマイズとトランザクションのコミット JDBC 4.1 の RowSetProvider RowSetFactory および RowSet インタフェースの使用 10
テスト内容チェックリスト (3) 10. スレッド Thread クラスと Runnable インタフェースの作成と使用 スレッドのライフサイクルの管理と制御 スレッドの潜在的な問題の識別 スレッドの潜在的な問題の識別 11. 並行処理 12. ローカライゼーション Locale オブジェクトを使用したロケールの読み込みおよび設定 各ロケールのリソース バンドルの作成 アプリケーションでのリソース バンドルのロード NumberFormat と DateFormat を使用した国際化対応のテキスト書式設定 java.util.concurrentコレクションの使用アトミック変数とロックの適用 ExecutorsとThreadPoolsの使用並列 Fork/Joinフレームワークの使用 11
OCJP Gold SE 7 移行試験 Upgrade to Java SE 7 Programmer 試験名 : Upgrade to Java SE 7 Programmer (1Z0-805) 認定資格 : Oracle Certified Java Programmer, Gold SE 7 出題数 : 90 問 ( 選択式 ) 試験時間 : 150 分 合格ライン : 60% 試験料 ( 税抜 ): 32,600 円 前提資格 : OCJ-P, SJC-P(Versionは問わない ) 12
テスト内容チェックリスト 1. 言語の拡張 switch 文で文字列を使用する 下線文字がある数値リテラルと 2 進リテラルを使用する try-with-resources を使用する 例外処理で複数の catch を使用する 総称型宣言でダイアモンド演算子を使用する 例外処理でより正確な rethrow を使用する 2. 設計パターン シングルトン設計パターンを使用してクラスを設計する ビジネス問題を解決するためにコンポジションを使用するタイミングと方法を識別する DAO パターンを実装するコードを記述する ファクトリ設計パターンを使用するクラスを設計する 3. データベース アプリケーションと JDBC JDBC API について説明する JDBC を使用してデータベースに接続するために必要な Java の文を識別する JDBC 4.1 の RowSetProvider RowSetFactory および新しい RowSet インタフェースを使用する JDBC トランザクションを使用する 問合せを送信してデータベースからの結果を読み取るための適切な JDBC API を使用する JDBC の PreparedStatement と CallableStatement を使用する 4. 並列処理 スレッドの潜在的な問題を識別する java.util.concurrent コレクションを使用する アトミック変数とロックを使用する Executors と ThreadPools を使用する 並列 Fork/Join フレームワークを使用する 5. ローカライズ アプリケーションをローカライズする利点について説明する ロケールが表すものを定義する Locale オブジェクトを使用してロケール読み込みを設定する 各ロケールのリソース バンドルを作成する アプリケーションからリソース バンドルを呼び出す ロケールに基づいてリソース バンドルを選択する NumberFormat と DateFormat を使用してローカライズ用にテキストの書式を設定する 6. Java のファイル I/O(NIO.2) Path クラスを使用してファイルとディレクトリのパスを操作する Files クラスを使用してファイルまたはディレクトリをチェック 削除 コピーまたは移動する ファイルとディレクトリの属性を読み取り変更する ディレクトリ ツリーに再帰的にアクセスする PathMatcher クラスを使用してファイルを検索する WatchService を使用してディレクトリの変更を監視する 13
2. OCJP Gold SE 7 資格試験の傾向と対策 14
OCJP Gold SE 7 試験の出題傾向 Gold 試験 (804) と移行試験 (805) との共通点 ソースコードをもとに その結果を問う問題が多く出題されます 少し長めのソースコードを読み込む必要がありが 出題数が多いので短時間でコードの内容を把握できるかどうかがポイントです 1 問あたり 1 分 30 秒ペースで回答する必要があります コンパイルエラーになるか? 実行結果はどうなる? 要件に合致する実装を選ぶ問題も出題されます デザインパターンはパターンと実装例をしっかり把握しておく必要があります 15
OCJP Gold SE 7 試験の出題傾向 Gold 試験 (804) と移行試験 (805) とで異なる点 16 Gold 試験 (804) は従来のプログラマ試験の範囲がメインです Java SE 7 の新機能ももちろん出題されますが ファイル I/O やスレッドプログラミングなど Java SE 6 までのプログラミングスキルを問う問題も多く出題されます 特にスレッドプログラミングはコードが複雑です アサーションや書式付き出力 (printf) なども要チェックです 移行試験 (805) は Java SE 7 の新機能にフォーカスしています Project Coin や Fork/Join, NIO.2 など Java SE 7 の新機能を理解できているかを問う問題が多く出題されます 各トピックはそれほど深い理解を問うものではありませんが プログラミングの手順などひと通り理解できているかどうかがポイントです
トピックごとの出題傾向 17
OCJP Gold SE 7 試験のトピック別の出題傾向 本日のセッションでご紹介する内容 Java SE 7 言語の拡張 (804, 805) 例外とアサーション (804, 805) 並行処理 (804, 805) ローカライゼーション (804, 805) ファイルI/O (NIO.2) (804, 805) 18
1. Java SE 7 言語の拡張 1. switch 文で文字列を使用する 2. 下線文字がある数値リテラルと2 進リテラルを使用する 3. try-with-resourcesを使用する 4. 例外処理で複数のcatchを使用する 5. 総称型宣言でダイアモンド演算子を使用する 6. 例外処理でより正確なrethrowを使用する 19
このトピックでの出題ポイント 1. Java SE 7 言語の拡張 出題は Project Coin が主体ですが 周辺知識を問う複合問題も出題されます String with Switch + Collection など 基数変換 (10 進数 2 進数 ) Java SE 6 までの実装方法との比較 プログラムコードの実行結果を問う出題が複数あります コンパイルエラーになるケースもあり コーディングは規約レベルでしっかりと 20
2. 例外処理とアサーション 1. throw 文とthrows 文の使用 2. multi-catchのあるtry 文とfinally 句の使用 3. try-with-resources 文を使用したリソースの自動クローズ 4. カスタム例外の作成 5. アサーションを使用した不変条件のテスト 21
このトピックでの出題ポイント 2. 例外処理とアサーション 例外処理は Java SE 7 の新機能を中心に押さえましょう 新機能を使うための構文を中心に確認 try-with-resources のクローズ順や AutoCloseable インタフェースなど multi-catch 句の記述方法 アサーションは基本的な使い方を確認 assert の使用方法やアサーションを有効にするコマンドラインオプション プログラムを評価する出題が多いです try-with-resources そのものだけでなく JDBC や NIO.2 と合わせた複合問題も 22
3. 並行処理 1. スレッドの潜在的な問題を識別する 2. java.util.concurrentコレクションを使用する 3. アトミック変数とロックを使用する 4. ExecutoresとThreadPoolsを使用する 5. 並列 Fork/Joinフレームワークを使用する Gold 試験では スレッド と 並行処理 の二つのトピックが出題されます スレッド には基本的なスレッド プログラミングのトピックが含まれます 23
このトピックでの出題ポイント 3. 並行処理 Gold 試験 (804) ではスレッドプログラミングの基本をしっかり理解しましょう 長めのプログラムを評価する出題が多い スレッドの作成や同期処理 (synchronized) など基礎的な出題は取りこぼしなく マルチスレッド プログラムの実行結果が問われることも 移行試験 (805) では 並行処理を中心に理解を深めましょう スレッドセーフなコレクション (java.util.concurrent パッケージ ) API ドキュメント要確認 Executors や Fork/Join 考え方 ( 特に Fork/Join) と実装の手順 (API の使い方 ) を確認 24
4. ローカライゼーション 1. アプリケーションをローカライズする利点について説明する 2. ロケールがあらわすものを定義する 3. Locale オブジェクト使用してロケール読み込みを設定する 4. 各ロケールのリソース バンドルを作成する 5. アプリケーションからリソース バンドルを呼び出す 6. ロケールに基づいてリソース バンドルを選択する 7. NumberFormat と DateFormat を使用してローカライズようにテキストの書式を設定する 25
このトピックでの出題ポイント 4. ローカライゼーション リソース バンドルの使い方を把握しましょう properties ファイルの記法やファイルの配置場所まで確認 プログラムからリソース バンドルを呼び出す方法 移行試験 (805) ではローカライゼーション関連の API も確認しておきましょう API を使用したのロケール指定方法 DateFormat はフォーマット指定と出力結果を確認 Java SE 7 の新機能の通貨 (Currency) の使い方もチェック currency.properties も確認 26
5. Java ファイル I/O (NIO.2) 1. Pathクラスを使用してファイルまたはディレクトリパスを操作する 2. Filesクラスを使用してファイルまたはディレクトリを操作する 3. ファイル属性やディレクトリ属性への読み取りおよび変更 4. ディレクトリ ツリーに再帰的にアクセスする 5. PathMatcherクラスを使用してファイルを検索する 6. WatchServiceを使用してディレクトリの変更を監視する Gold 試験では ファイル I/O の基礎 と NIO.2 の二つのトピックが出題されます ファイル I/O の基礎 にはストリームを使用したファイル I/O のトピックが含まれます 27
このトピックでの出題ポイント 5. Java ファイル I/O (NIO.2) プログラムコードの実行結果を問う出題が多いです プログラミング手順を確認 関連クラスも合わせて API ドキュメントを確認 File と Path クラスや FileVisitor, WatchService, PathMatcher クラス 要件に合わせたクラス / メソッド選択ができるように ディレクトリ操作や監視のプログラミング手順を確認 Gold 試験 (804) では基本的なファイル I/O をメインに確認しましょう ストリームを使用したファイルアクセス Input/Output Stream や Reader/Writer 28
例題 29
例題 1 下線文字がある数値リテラルと 2 進リテラルを使用する 次のコードの ( A ) に記述可能なものはどれですか? 2 つ選んで下さい 1. public static void main(string[] args) { 2. // ( A ) 3. System.out.print("The decimal value is" + var); 4. } 1. int var = 0b_1111; 2. long var = 0b11_11L; 3. float var = 0b11_11F; 4. double var = 0b11_11; 30
解答 1 1. int var = 0b_1111; と 4. double var = 0b11_11; Java SE 7 の新機能 言語の拡張 アンダースコアがある数値リテラル 数値リテラルの可読性を向上 ( アンダースコア自体は意味を持たない ) 2 進リテラル 接頭辞 0B または 0b を整数型 (byte, short, int, long ) を2 進数で表現可能に Switch 文での文字列の使用 例外処理の改善 try-with-resources 文 例外のマルチキャッチ 例外の安全な再スロー ジェネリクスの省略記法 ( ダイアモンド演算子 ) 簡潔な可変長引数メソッド 31
例題 2 アサーションを使用した不変条件のテスト 次のコードを ea オプションを指定して実行した結果について正しい説明はどれですか? 1. public class Calc { 2. public static void main(string[] args) { 3. Calc test = new Calc(); 4. System.out.println(test.addN(1, 5)); 5. } 6. int addn(int x, int y) { 7. int z = 0; 8. assert x > z && y > z : "xまたはyがzより小さい値です "; 9. for (int i = 0; i < y; i++) 10. z += x; 11. assert z > x && z > y : "zはxまたはyより小さい値です "; 12. return z; 13. } 14. } [ 選択肢 ] 1. プログラムは正常に実行され 5 が出力される 2. 8 行目でAssertionErrorが発生する 3. 11 行目でAssertionErrorが発生する 4. コンパイルエラーになる 32
解答 2 3. 11 行目で AssertionError が発生する アサーション (J2SE1.4~) 処理中で成立するべき条件を検証し条件違反を自動で検知するしくみ アサーションの構文 1; assert exp1; assert exp1 : exp2; アサーションの有効化 $ java ea Test exp1 検証されるべき条件 exp2 検証エラー時のメッセージ (AssertionError のコンストラクタ引数 ) アサーションは Gold 試験のみで出題されます 移行試験では出題されません 33
例題 3 並列 Fork/Join フレームワークを使用する 次のコードについて正しい説明はどれですか? 1. public class MergeSortTask<T> extends RecursiveTask<List<T>> { 2. private final List<T> values; 3. protected List<T> compute() { 4. if (values.size() > 1) { 5. int mid = values.size() / 2; 6. final MergeSortTask<T> t1 = new MergeSortTask(values.subList( 7. 0, mid)); 8. final MergeSortTask<T> t2 = new MergeSortTask(values.subList( 9. mid, values.size())); 10. t1.fork(); [ 選択肢 ] 11. List<T> values1 = t1.join(); 12. List<T> values2 = t2.compute(); 13. return merge(values1, values2); 14. } else { 15. return values; 16. } 17. } 18. // mergeメソッドは正しく実装されているものとする (19 行目以下省略 ) 19. protected List<T> merge(list<t> arg1, List<T> arg2) { 1. t1 と t2 は並行実行される 2. t1 と t2 は逐次実行される 3. 実行時に例外になる 4. コンパイルエラーになる 34
解答 3 2. t1 と t2 は逐次実行される Fork/Join フレームワーク 細分化して行う処理を ForkJoinTask クラスのサブクラスとして定義 RecursiveAction 戻り値なし / RecursiveTask 戻り値あり 処理は compute() メソッドをオーバーライドして実装 タスクの粒度を考慮しつつタスクを再帰呼び出し ForkJoinTask の実行 fork() タスクを非同期に実行 / join() 処理完了後に結果を返す Fork/Join の実行 ForkJoinPool#invoke(ForkJoinTask) compute() の擬似コード 1. if (problem is small) 2. // 直接処理 3. else { 4. // 処理単位をタスクに細分化 5. // 細分化したタスク実行 6. // join 7. // 結果の計算 8. } fork() は ForkJoinPool のスレッドから呼び出される必要がある 35
例題 4 Locale オブジェクト使用してロケール読み込みを設定する 次のコードの空欄 ( A ) に記述するコードとして正しいものはどれですか? 1. Currency currency = ( A ) ; 2. System.out.println(" Code: " + currency.getcurrencycode() 3. + " Display Name: " + currency.getdisplayname() + " Symbol: " 4. + currency.getsymbol()); 1. new Currency(Locale.DEFAULLT); 2. Currency.getDefaultInstance("Default" ); 3. new Currency(Locale.getDefaultLocale()); 4. Currency.getInstance(Locale.getDefault()); 36
解答 4 4. Currency.getInstance(Locale.getDefault()); ローカライゼーション Locale 特定の地域をあらわす ( 言語コード 国コード バリアント ) Locale locale = new Locale(String language [, String country, String variant] ) Locale.getDefault() JVM のデフォルトロケールを取得 Currency クラスは Factory メソッドを使用してインスタンスを取得 static Currency getinstance(locale locale) static Currency getinstance(string currencycode) // ISO4217 の通貨コード デフォルト以外の通貨使用する場合は <JAVA_HOME>/lib/currency.properties で追加定義可能 37
例題 5 PathMatcher クラスを使用してファイルを検索する 次のコードについて正しい説明はどれですか? 1. public class Finder extends SimpleFileVisitor<Path> { 2. int matches = 0; 3. public static void main(string[] args) throws IOException { 4. Finder finder = new Finder(); 5. Files.walkFileTree(Paths.get("d: tmp"), finder); 6. System.out.println("match count: " + finder.matches); 7. } 8. @Override れる 9. public FileVisitResult visitfile(path file, BasicFileAttributes attrs) { 10. PathMatcher matcher = FileSystems.getDefault() 11..getPathMatcher("glob:*.{java,class}"); 12. Path name = file.getfilename(); 13. if (name!= null && matcher.matches(name)) 14. matches++; 15. return FileVisitResult.CONTINUE; 16. } 17. } [ 選択肢 ] 1. 拡張子が java, class のファイル数が出力さ 2. ファイル名が glob: で始まるファイル数が出力される 3. オーバーライドするべきメソッド (visitfilefailed) が足りないのでコンパイルエラーになる 4. パターンに : が含まれるので実行時に例外がスローされる 38
解答 5 1. 拡張子が java, class のファイル数が出力される NIO.2 におけるファイルパスの操作 Paths ファイル操作のためのユーティリティメソッド move, copy, write, createlink/createsymboliclink, walkfiletree CopyOption でコピー時, OpenOption でオープン時のオプションを指定可能 PathMatcher パターンマッチングによるファイル検索 PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:" + pattern); PathMatcher#matches(Path) メソッドでパターンマッチング パターン指定はグロブ構文 (glob: ) または正規表現 (regex: ) 39
3. 補足情報 40
受験前の学習方法 試験情報は受験前に必ず確認しましょう できるだけ実際にプログラムを作成しましょう 新機能も使いこなしてこそ API の使い方をしっかり身につけておきましょう 試験のための学習は Java SE API & ドキュメントを参照しましょう Oracle Technology Network > Java にはお役立ち情報が満載です 市販の書籍を活用して試験の出題傾向をつかみましょう 徹底攻略 Upgrade to Java SE7 Programmer 問題集 ( インプレスジャパン ) 41
試験情報サイト http://education.oracle.co.jp/java-se7-cert/ 42
試験のサンプル問題各試験情報サイトにサンプル問題へのリンクがあります 試験の出題形式に慣れるための例題です 43
44