難解!?オブジェクト指向ってなんぞや【オブジェクト指向】

ハロー、ききです!
プログラミングを学び始めると、すぐに出てくるくせにすごい難しいことがが出てきます。

そうオブジェクト指向です。

今回はそんなオブジェクト指向について、
図やJavaのコードを使って「結局どう考えればいいのか」をお話ししていこうと思います!

目次

オブジェクト指向って難しくない??

参考書や入門サイトを見ると、
入り込みやすいように、私や犬など動物をオブジェクトの例として表すような説明がよく出ます。

プログラミング始めたてだった頃の私はここで躓いていました。
わからない状態で実際に作ることのない動物をオブジェクトとして例えられても
実際コーディングするときに応用して使えないよって…

I Tエンジニアとしてコーディングする機会が増えた今でこそ、
こういう例えで解説するのが分かりやすいことだったんだと思うようになれましたが、
やはり初めてだと難しいと思います。

始めたてはこんなもんでいい!

オブジェクト指向は、

データや処理をひとまとまりにする考え方

です!

最初から深い理解なんてできるわけなかったんです。
そしてこの思想を理解し切らなくてもプログラムを作ることは可能です。

コーディングに慣れてきて、本格的に知りたいってなれば、
難しい説明は参考書や先人の有名サイト様のご説明がたくさんあるのでそこに行ってもらえたらと思います!

オブジェクト指向を動かしながら試してみよう!

表(テーブル)で考えてみよう

実際アプリ開発などでは、商品データや、顧客データのようなまとまったデータを扱う場面が多いです。
今回はイメージしやすいように簡単な商品データの表で考えてみましょう!

商品データ

商品ID 商品名 価格 在庫数 在庫金額(価格 × 在庫数)
1 キーボード 5,000円 13 65,000円
2 マウス 2,000円 30 60,000円

この表の1行が、1つの商品データのまとまりです。
オブジェクト指向では、このようなまとまりを1つのオブジェクトとして考えることができます。

表とオブジェクト指向の対応

表で見ているもの オブジェクト指向で見ると
商品データを作るためのひな形 クラス
商品ID・商品名・価格・在庫数 データ
在庫金額の計算(価格 × 在庫数) 処理
キーボードの1行 オブジェクト

Javaでクラスを作ってみよう

上記の表で考えると、
商品ID、商品名、価格、在庫数、在庫金額の計算をまとめたものがクラスです。
商品ID、商品名、価格、在庫数がデータです。
在庫金額の計算が処理です。
Javaソースで書くと下記のようになります。

/**
 * 商品クラス
 */
class Product {
    public int productId;  // 商品ID 
    public String name;    // 商品名
    public int price;      // 価格
    public int stock;      // 在庫数

    // 在庫金額の計算
    public int calculateStockAmount() {
        return this.price * this.stock;
    }
}

※今回はわかりやすさを優先してpublicにしています。
実際の開発ではprivateにして外から直接変更できないようにすることが多いです。

この時点ではまだキーボードやマウスそのもののデータは作られていません。
この商品クラスは、あくまで「商品データはこういう形で作る」というひな形です。

オブジェクトを作ってみよう

では続いて、商品データを作っていきます!
表で言うと、キーボードの1行分のデータをJavaで作成します。

class Main {
    public static void main(String[]args) {
        // newで空のオブジェクトを生成します
        Product keyboard = new Product();
        // キーボードのデータを各項目に入れ込みます
        keyboard.productId = 1;
        keyboard.name = "キーボード";
        keyboard.price = 5000;
        keyboard.stock = 13;
        
        // 在庫金額の計算処理を呼び出します(入れ込んだ金額、在庫数で計算される)
        int stockAmount = keyboard.calculateStockAmount();
        
        System.out.println("商品ID:" + keyboard.productId);
        System.out.println("商品名:" + keyboard.name);
        System.out.println("価格:" + keyboard.price);
        System.out.println("在庫数:" + keyboard.stock);
        System.out.println("在庫金額(価格 × 在庫数):" + stockAmount);
        
    }
}
// 実行結果
商品ID:1
商品名:キーボード
価格:5000
在庫数:13
在庫金額(価格 × 在庫数):65000

表の1行目にあったキーボードのデータを、Javaの中で作って表示できました。
このように、クラスというひな形から作られた具体的なデータがオブジェクトです。

つまり、バラバラの変数や処理として考えるのではなく、「商品」という単位でデータと処理をまとめて扱う考え方です。

まとめ

今回は、オブジェクト指向についてお話ししました。

私は学生時代にプログラミングを独学で参考書を購入して学んでいたのですが、
このオブジェクト指向という考え方が、自分の中で噛み砕くことができずに、
あやふやなままだった覚えがあります。

会社に入社し、業務でコーディングをするにあたって、データを扱うようになってから腑に落ちるようになりました。
データで解説したほうがいいんじゃない!?って思ったため今回記事にしてみました。

商品ID、商品名、価格、在庫数のようなデータをバラバラに考えるのではなく、
「商品」という1つのまとまりとして考える。
そして、その商品データに関係する処理も一緒にまとめる。
これが、オブジェクト指向の基本的な考え方です。

今回の例でいうと、

  • Product クラスは、商品データを作るためのひな形
  • productIdnamepricestock は、商品が持つデータ
  • calculateStockAmount() は、商品に関係する処理
  • new Product() で作った keyboard は、実際に値を持ったオブジェクト

という関係になります。
最初から継承やポリモーフィズムなどを全部理解しようとすると、かなり難しく感じると思います。
なので、始めたてのうちはまず、

クラスはデータを作るためのひな形
オブジェクトは、そのひな形から作られた具体的なデータ

くらいで考えるのが良いと思います。
オブジェクト指向は、最初から完璧に理解する必要はありません。
実際にクラスを作って、new して、値を入れて、メソッドを呼び出してみる。
そうやって動かしながら少しずつ理解していけば大丈夫です。

また、問題など作ってみて、それを投稿してみるのも面白いのかなって考えたりしてます、、、

次回は、今回のコードをもう少し実務寄りにして、
private、コンストラクタ、getter/setter などについても見ていけたらと思います。

それでは、最後まで見てくれてありがとです!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

ハロー、ききです!
ある時はプログラマー/システムエンジニアの会社員として働き、
またある時は猫になってブログをにゃんにゃん書いてます。
ITの知識でお役立てそうなことや、私自身がにゃやんだこと、
私がいいなと思ったものについて発信しております。

いつかこんな猫飼いたい…

目次