本ページはプロモーションが含まれています

Java入門

Javaのオブジェクト指向とは?仕組みと考え方を初心者向けにわかりやすく解説

トム

・都内自社開発IT企業勤務/javaのバックエンドエンジニア
/java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎

Javaを学び始めた多くの方が最初につまずくポイント。それが「オブジェクト指向とは何か?」という部分です。

私自身、エンジニアとしてJavaを使い始めた当初は、「クラス」「インスタンス」「継承」など、言葉だけが先行して、なかなか理解が進みませんでした。

しかし、オブジェクト指向をきちんと理解してからは、コードの見通しがよくなり、チーム開発でも役立つ設計ができるようになりました。

この記事では、「Java オブジェクト指向とは」という疑問を持つ方に向けて、初心者でも理解しやすいように、基本から順に解説していきます。

この記事を読むことで、

  • オブジェクト指向の仕組みがわかる
  • Javaで使う具体的な考え方がわかる
  • プログラミングにどう活かせるかがわかる

といった疑問が解消できます。

Javaのオブジェクト指向とは何か?

Javaのオブジェクト指向とは

Javaのオブジェクト指向とは「現実のモノやコトをプログラムの中で表現する仕組み」です。

たとえば「犬」というモノを再現したいとき、その「犬」の特徴(名前や年齢)や行動(吠える、歩く)をプログラムで表現します。

以下のような犬をプログラムで表現したい

  • 名前=ポチ(属性)
  • 年齢=5歳(属性)
  • すること=ワンワン吠える、歩く(振る舞い)

このように「属性」と「振る舞い」を1つのまとまり(オブジェクト)にすることで、現実世界のような分かりやすいコード設計ができるようになります。

犬をオブジェクトとしてjavaのコードで表現してみました。

// クラス(設計図)の定義
public class Dog {
    // 属性
    String name;
    int age;
    // コンストラクタ(初期化)
    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }
    // 振る舞い
    public void bark() {
        System.out.println(name + "がワン!と吠えた");
    }
    // 振る舞い
    public void walk() {
        System.out.println(name + "が散歩している");
    }
}
// 実行クラス(mainメソッド)
public class Main {
    public static void main(String[] args) {
        // 犬オブジェクト(実体)の生成
        Dog myDog = new Dog("ポチ", 5);
        // 振る舞いの実行
        myDog.bark();  // → ポチがワン!と吠えた
        myDog.walk();  // → ポチが散歩している
    }
}

Javaのオブジェクト指向を構成する3大要素

オブジェクト指向を構成する3大要素は以下の通りです。それぞれ説明していきます。

オブジェクト指向を構成する3大要素

  • カプセル化
  • 継承
  • ポリモーフィズム

カプセル化

カプセル化とは、データとその操作をカプセルのようにひとつにまとめて保護する仕組みです。

たとえば、動物というクラスを作ったときに、名前という大事な情報をそのまま操作できるようにしておくと、間違って変な名前にされたりして、困る可能性があります。

そこで、名前をprivateにし、外部から直接変更できないようにしてアクセスを制限し、setter()・getter()メソッドのみで変更できるようにします。

class Animal {
    private String name;  // 名前を private にして外部からの直接アクセスを禁止
    // データを安全に取得するためのメソッド
    public String getName() {
        return name;
    }
    // データを安全に設定するためのメソッド
    public void setName(String newName) {
        if (newName != null && !newName.isEmpty()) {
            name = newName;
        }
    }
}

継承

継承とは、あるクラス(親クラス/スーパークラス)の機能やプロパティを、別のクラス(子クラス/サブクラス)が引き継いで使えるようにする仕組みです。

たとえば、動物クラスがあって、そこに「鳴く」という振る舞いがあるとします。

そのあと、「犬」や「猫」のクラスを作るときに、それぞれに「鳴く」という振る舞いを書くのが面倒です。

そこで 継承を使えば、動物クラスの中にある「鳴く」振る舞いを「犬」や「猫」も使うことができるようになります。

親クラスの機能を再利用できるため、共通する処理を複数の場所に書かなくて済みます。

class Animal {
    void speak() {
        System.out.println("鳴く");
    }
}
class Cat extends Animal {
}
class Dog extends Animal {
}
public class Main {
    public static void main(String[] args) {
        Cat a1 = new Cat();   // 猫クラスを生成
        Dog a2 = new Dog();   // 犬クラスを生成
        a1.speak();  // → "鳴く"
        a2.speak();  // → "鳴く"
    }
}

上記の例では、DogはAnimalを継承しています。

そのためDogクラスはspeak()メソッドを自動的に使えるようになります。

あわせて読む

ポリモーフィズム(多態性)

ポリモーフィズムとは、同じメソッドでもクラスごとに振る舞いを変えられる仕組みです。

「多態性」、「多様性」とも呼ばれ、重要な考え方です。

class Animal {
    void speak() {
        System.out.println("鳴く");
    }
}
class Cat extends Animal {
    @Override
    void speak() {
        System.out.println("ニャー");
    }
}
class Dog extends Animal {
    @Override
    void speak() {
        System.out.println("ワンワン");
    }
}
public class Main {
    public static void main(String[] args) {
        Animal a1 = new Cat();   // Animal型でCatのインスタンスを扱う
        Animal a2 = new Dog();   // 同様にDogを扱う
        a1.speak();  // → ニャー
        a2.speak();  // → ワンワン
    }
}

このように、speak()という同じメソッドでも、インスタンスの種類によって出力が変わります。

Javaのオブジェクト指向がなぜ重要なのか?

チーム開発で有効な設計力

オブジェクト指向は「複数人で長期的に開発するための設計に強い」と言われます。

関数型や手続き型と違い、オブジェクト指向は「部品化」して作りやすいため、誰かが作ったクラスを別の誰かが使うことが前提になっています。

Javaのオブジェクト指向では以下のことが実現できるため、チーム開発に有効です。

Javaのオブジェクト指向が実現すること

  • バグが少ないコードを書ける
  • 再利用しやすい設計になる
  • 見通しがよく、保守性が高くなる

Javaのオブジェクト指向を学ぶ際にやるべきこと

サンプルコードで基本を体感する

ただ解説を読んでもピンとこないことが多いです。

実際にPersonクラスやCarクラスなどを作り、データやメソッドを設定してみましょう。

クラスが作れたらオブジェクト指向の理解に繋がります。

自分で小さなアプリを作る

最初は「電卓アプリ」や「ToDoリスト」などの簡単なものから始めると良いです。

オブジェクト指向で設計してみることで、理解が一気に深まります。

他人のコードを読む

実際のプロジェクトで書かれたJavaコードを読むことで、設計や書き方の引き出しが増えていきます。

GitHubなどで公開されているオープンソースを見るのがおすすめです。

まとめ:Javaのオブジェクト指向とは「設計の考え方」

最後にこの記事の要点をまとめます。

まとめ

  • Javaのオブジェクト指向とは、現実をプログラムで再現する考え方
  • カプセル化・継承・ポリモーフィズムが基本3原則
  • 再利用性が高く、保守性に優れた設計ができる
  • 実践で触れることで理解が深まる

オブジェクト指向は難しそうに見えますが、一度理解するとJavaが圧倒的に扱いやすくなります。

  • この記事を書いた人
  • 最新記事

トム

・都内自社開発IT企業勤務/javaのバックエンドエンジニア
/java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎

-Java入門