0
0

実践的なオブジェクト指向の考え方を説明してみる

Last updated at Posted at 2024-01-30

目次

1.オブジェクト指向とは
2.実例
3.おわりに

1. オブジェクト指向とは

※前提条件:本記事は初心者に向けてイメージを掴んでいただくものであるため、厳密には違うかもしれません。
私のプログラミングメンタリングを長らく受講していただいている方に向けて、オブジェクト指向をわかりやすく説明したかったのですが、良い記事が見つからず、本記事を執筆することにしました。
オブジェクト指向とは、プログラムを機能単位(オブジェクト)に分けて、その中にメソッド(実行単位)を記載していく設計思想です。PythonやSwiftなど、モダンな言語に採用されています。

2. 実例

以下は、挨拶をするプログラムの例です。

  • parents:この機能は何を実装すれば良いのかの設計書
  • child:parentsに書かれた設計書をもとに機能を実装
  • main:プログラムを実行するだけのもの
perents_greet.py
# class宣言
class Human:

    # コンストラクタ
    def __init__(self, name, year, birth):
        self.name = name
        self.year = year
        self.birth = birth

    # 自己紹介メソッド
    def introduce(self):
        pass

    # 名前取得メソッド
    def get_name(self):
        return self.name
child_greet_1.py
from perents_greet import Human
#Humanクラスを継承して、HumanHealthを定義
class HumanHealth(Human):

    # コンストラクタ
    def __init__(self, name, year, birth, height, weight):

        #親クラスのコンストラクタを呼び出す
        super().__init__(name, year, birth)

        self.height = height
        self.weight = weight

    # BMIメソッドを追加
    def get_bmi(self):
        return round(self.weight/(self.height**2),2)

    # 自己紹介メソッドをオーバーライド
    def introduce(self):
        text = "私の名前は、{}です。今年で{}歳になります。BMIは{}です。"
        return text.format(self.name, self.year, self.get_bmi())
child_greet_2.py
from perents_greet import Human
#Humanクラスを継承して、HumanHealthを定義
class HumanHealth(Human):

    # コンストラクタ
    def __init__(self, name, year, birth, height, weight):

        #親クラスのコンストラクタを呼び出す
        super().__init__(name, year, birth)

        self.height = height
        self.weight = weight

    # BMIメソッドを追加
    def get_bmi(self):
        return round(self.weight/(self.height**2),2)

    # 自己紹介メソッドをオーバーライド
    def introduce(self):
        text = "私の名前は、{}です。今年で{}歳になります。BMIは{}です。既婚者で趣味はサッカーです。"
        return text.format(self.name, self.year, self.get_bmi())
main.py
import child_greet_1
import child_greet_2

# somaはchild_greet_1を実行
souma = child_greet_1.HumanHealth("souma", 26, "19931013", 1.7, 70)
print (souma.introduce())

# kojiはchild_greet_2を実行
koji = child_greet_2.HumanHealth("koji", 26, "19931013", 1.7, 70)
print (koji.introduce())

実行結果

私の名前は、soumaです。今年で26歳になります。BMIは24.22です。
私の名前は、kojiです。今年で26歳になります。BMIは24.22です。既婚者で趣味はサッカーです

somaさんはシャイなようで、BMIまでしか教えてくれませんでした。
一方でkojiさんは、オープンなようで、家族構成や趣味まで教えてくれました。
このように同じ親クラスの継承でもそれぞれで挨拶するという機能は同じです。
一方で、挨拶内容には違いがあるようです。
これがオブジェクト指向の考え方です。
親クラスで、機能とやりたいことを定義しておいて、実装は子クラスに任せる。これがオブジェクト指向が現場で使われている設計方法です。

3. おわりに

最後まで記事を読んでいただきありがとうございます。
オブジェクト指向いかがでしたか?
複数人の開発者で作り上げるプロジェクトでは必須の考え方になります。
コードの中に設計書を設けることである程度実装が統一されます。
ぜひこの考えか方をマスターして、脱初心者を目指してみてください!

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0