#0.はじめに
おはようございます。早起きして、Qiitaを覗いていたら、4月ということで、新人エンジニア向けのイベントが開催されていたので、便乗して1つ簡単なアウトプットをしようと思います。
簡単に自分の紹介をさせていただきます。
今は都内の不動産Techのベンチャーで勤務しており、個人開発も含めると、エンジニア歴は13年、web開発4年のSaaS保守・運用エンジニアです。
今日は猿でも、猿でも新卒エンジニアでも理解できるオブジェクト指向を薄っぺらく解説します。
※猿にも分かるようにする過程で、やや意味が曲がってしまっている可能性がありますので、ご愛嬌ということでよろしくお願いいたします。
#1.オブジェクトって
そもそも、オブジェクト指向のオブジェクトって何?ってまず思いますよね。
オブジェとは違いますよ?
新宿アイランドの前に佇むLOVEとは、全く別のものです。
オブジェクトとは、オブジェクト指向で操作対象になるデータのことです。
例えば、会計ソフトを作る上で、必要となるオブジェクトは、
入出金の金額のデータ
商品のデータ
顧客のデータ
などなど、定義づけでは、属性を持っていることも要件として入ってくることが多いです。
例えば入出金で言うと、120円の入金があったとき、その入金がどんな属性なのか
・パンを売った代金
・2021年4月15日午前8時05分12秒に登録された
・田中さんがレジを操作して、入金された
などがありますね。
オブジェクト指向プログラミングでは、こう言った属性を持つオブジェクトにメソッド(関数)を適用することで、プログラムを記述していきます。
#2.オブジェクト指向って何がいいの?
オブジェクト指向ってよく言うけど、何がメリットなんだろうってところですが、
まず1つ考えられるのは、人間的視点での分かりやすさです。
非オブジェクト指向言語よりも、人間の言語で解説しやすいような設計だと思われます。
と言うのも、先にも挙げたようにオブジェクト(モノ)を、メソッドで操作していくという仕組みは、
例えば、「パン(オブジェクト)」を「売る(メソッド)」、「お金(オブジェクト)」を「入金する(メソッド)」と言ったように、
基本的に名詞と動詞で説明可能な設計になっているからです。
だからこそ、基本が理解できれば未経験のエンジニアでも理解しやすい設計になっています。
2つ目に、切り分けのしやすさです。
例えばチームで開発を行う際に、一人が商品オブジェクト周りを開発、一人が入金オブジェクトを開発とクラスで切り分けて開発を行い、
開発後に2つのクラスを繋ぐことによって、商品を売る→入金するという流れを後から構築することが可能です。
#3.クラス・インスタンスって何?
1年1組!とかじゃなく、オブジェクト指向におけるクラスとは、設計図と言われることが多いです。
例えば、商品(オブジェクト)は、「商品の名前」「金額」「画像」を持つとします。
という概念を記述したものが、「クラス」にあたります。
そして、インスタンスとは、クラスを元に実際に生成されたオブジェクトのことで、
先にあげたクラス(設計書)に実際に、「商品の名前=パン」「金額=120円」「画像=(省略...)」のように、必要な値を入れて、
オブジェクトとして利用するための雛形が「クラス」、「クラス」を元に生成されたオブジェクトが「インスタンス」と呼ばれています。
またクラスの特徴に、継承が可能という特徴があり、例えば商品全体を定義する商品クラスがあったとします。
しかし、商品が飲料であった場合は、その商品が何mlなのかも属性に入れたい!という場合、
食べ物には何mlという概念は無いので、その属性は商品が飲料であった場合にのみ必要になりますよね。
そう言った場合に、商品クラスを継承した飲料クラスを作成します。
そして飲料クラスの中に、何mlという属性を追加することで、飲料の場合は内容量という属性を付加することができます。
また、商品クラスを継承した弁当クラス、雑誌クラスなど、商品の中でも設計書が多少異なるような場合に、
このように継承をしていくことで、図解的にも処理的にも分かりやすくオブジェクトを管理することができます。
#4.終わりに
そろそろ出社の時間なので、この辺りにしておきます。
Twitterと別記事の宣伝だけさせてください。是非フォローお願いします。
https://twitter.com/pichu_vi