📖

Java SE Bronze問題集(黒本)を解いてみた

2024/12/24に公開

はじめに

Java SE Bronze[1]と調べると「プログラミング未経験者向け」や「Java初学者向け」とあります。
そんな中、未経験からJavaエンジニアとしてのキャリアをスタートして約5年が経った今、Java SE Bronzeの黒本を解いてみてつまづいたポイントや感じたことを紹介したいと思います。

なぜJava SE Bronzeの問題を解こうと思ったのか

Javaエンジニアとして5年が経ち、なぜJava Silver[2]やJava Gold[3]ではなくJava SE Bronzeの問題を解こうと思ったのか...
日々さまざまな技術を習得する中で、基礎的な部分について理解が不十分であると感じることがありました。基礎が理解できていないのに、応用なんて理解できるはずがありません。
そのため、一度立ち止まって基礎に立ち返り本当に理解できているかを確認し、理解が不十分な部分については改めて学習し直したいと思いました。
自身の性格上、Javaの基礎本を読むよりも、問題を解きながら学ぶ方が性に合っているので黒本で学ぶことにしました。

黒本の構成

黒本の構成は以下になっています。

  • 第1章 Java言語のプログラムの流れ
  • 第2章 データ宣言と使用
  • 第3章 演算子と分岐文
  • 第4章 ループ文
  • 第5章 オブジェクト指向の概念
  • 第6章 クラス定義とオブジェクトの使用
  • 第7章 継承とポリモーフィズム
  • 第8章 総仕上げ問題(過去問)

上記の中でいくつかつまづいたポイントをご紹介します。

実際に解いてみてつまづいたところ

is-aの関係

Javaで言うとインターフェースとその実装クラスがis-a関係となります。
例えば、果物を実装したリンゴがあった場合、リンゴは果物の一種です。
この場合、「リンゴ is-a 果物」となります。

public interface Fruit {
  // any code
}
public class Apple implements Fruit {
  // any code
}

本の解説にも記載がありますが、is-a関係は「実装クラス is-a インターフェース」となり、
「果物 is-a リンゴ(果物はリンゴ)」と反対に覚えないよう注意しないといけません。

データ隠蔽と情報隠蔽

データ隠蔽は他のクラスからフィールド(属性)を参照できないようにすること
以下はappleフィールドがprivateで修飾されているため、ほかのクラスからはアクセスできません。

public class Fruit {
  private String apple;

  //フィールドにアクセスしたい場合はgetterやsetterメソッドを使う
  public String getApple() { 
       return apple;
   }

   public void setApple(String apple) {
       this.apple = apple;
   }
}

情報隠蔽は公開するべきものと非公開にするべきものを分け、非公開にするべきものを隠蔽すること
公開部分はインターフェースとして定義します。

public interface Fruit {
  void fruit();
}

非公開部分は不適切なアクセスを防ぐため、パッケージやアクセス修飾子を使ってアクセスを制御します。

//クラスがpublicでない
class FruitImpl implements Fruit {
  public void fruit() {
       System.out.println("Fruit");
   }
}

「データ隠蔽」と「情報隠蔽」は似たような言葉で混同してしまいました。(※引き続き今も勉強中です)

コンストラクタチェーン

public class Sub extends Super {
  public Sub() {
    // サブクラスがスーパークラスのコンストラクタを呼び出す
       super();
    // 同じクラスに定義している別のコンストラクタを呼び出す
       this("a"); // コンパイルエラーとなる
   }

    public Sub(String str) {
    // 暗黙的に super() を呼び出している
       System.out.println(str);
   }
}

コンストラクタ内で別のコンストラクタを呼び出す際は先頭行に記載しなければならない
そのためthis()とsuper()を同一コンストラクタ内に記述することはできない

各章で登場する用語に関する問題

「カプセル化の説明」や「ポリモーフィズムのメリット」の説明など用語に関する問題が各章で文章のみの4択で出題される箇所があります。
似たような言葉が羅列されており、「あれ?どっちだっけ?」と惑わされることが多々ありました。

解いてみて感じたこと

プログラミングに関する問題は正答率が高かったのですが、用語の説明に関する問題は正答率が低く、理解できていないということを改めて実感しました。
また普段の開発ではIntelliJを使用していますが、IntelliJでは補完機能やコンパイルエラーを表示してくれるため実際に文字だけのコードを見て問題を解くとなると悩む部分がたくさんありました。(IntelliJ様様です😭✨)
章ごとに分野も分かれているため、どこの分野を自身が苦手とするかも明確になりました。

おわりに

問題を一通り解いてみて理解が不十分な部分・自身が苦手とする分野に気づくことができてよかったです。
そして苦手分野を理解し直した上で、次はJava Silverの問題にも挑戦したいと思います!!
黒本ではたくさんの問題を解けるだけでなく、一問一問しっかりと解説も付いているのでおすすめです。
みなさんも一度解いてみてはいかがでしょうか。

参考書籍

脚注
  1. 言語未経験者向けの入門資格で Java 言語を使用したオブジェクト指向プログラミングの基本的な知識を有することを評価することを目的としている ↩︎

  2. Javaアプリケーション開発に必要とされる基本的なプログラミング知識を有し、上級者の指導のもとで開発作業を行うことができる開発初心者向け資格 ↩︎

  3. 設計者の意図を正しく理解して独力で機能実装が行える中上級者向け資格 ↩︎

BABY JOB  テックブログ

Discussion