0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Clean Architecture】OOP(オブジェクト指向プログラミング)

Last updated at Posted at 2025-09-29

1. 概要

オブジェクト指向プログラミング(Object-Oriented Programming: OOP) は、1980年代以降に広く普及したプログラミングパラダイムです。
従来の「手続き(構造化プログラミング)」に対して、現実世界の「モノ(オブジェクト)」をプログラムで表現する ことを目指しています。

OOP では、データ(属性)とそれに関連する操作(メソッド)を「オブジェクト」という単位にまとめ、再利用性や拡張性を高めます。


2. 基本概念

オブジェクト(Object)

  • 現実世界の「モノ」を抽象化したもの
  • データ(フィールド / プロパティ)と振る舞い(メソッド)を持つ

クラス(Class)

  • オブジェクトを生成する設計図
  • 例:class Car { var speed; void run(); }

カプセル化(Encapsulation)

  • データと処理をまとめ、外部からの直接アクセスを制限
  • 情報隠蔽によって安全性を確保

継承(Inheritance)

  • 既存クラスの特性を引き継ぎ、新しいクラスを定義
  • コード再利用を促進

ポリモーフィズム(Polymorphism)

  • 同じインターフェースで異なる実装を扱える
  • 例:Shapedraw() メソッドを、CircleSquare で異なる実装に

3. メリット

  • 現実世界をモデル化しやすい
  • 再利用性の高いコードを構築できる
  • 大規模開発において保守性が向上する
  • フレームワークやライブラリの設計に適している

4. デメリット・批判

  • 小規模では冗長になりやすい
  • 継承の乱用で依存関係が複雑化することもある
  • 関数型アプローチに比べ、副作用管理が不明瞭になりやすい

5. 代表的な言語

  • Smalltalk(OOPの始祖)
  • C++
  • Java
  • C#
  • Kotlin / Swift / Python /Dart(モダンOOP + FP要素も併用)

6. コード例:OOPによる FizzBuzz(Kotlin)

// ルールのインターフェース
interface Rule {
    fun apply(number: Int): String?
}

// Fizzルール
class FizzRule : Rule {
    override fun apply(number: Int) = if (number % 3 == 0) "Fizz" else null
}

// Buzzルール
class BuzzRule : Rule {
    override fun apply(number: Int) = if (number % 5 == 0) "Buzz" else null
}

// FizzBuzzクラス
class FizzBuzz(private val rules: List<Rule>) {
    fun value(number: Int): String {
        val result = rules.mapNotNull { it.apply(number) }.joinToString("")
        return if (result.isEmpty()) number.toString() else result
    }
}

// 実行
fun main() {
    val fizzBuzz = FizzBuzz(listOf(FizzRule(), BuzzRule()))

    (1..20).forEach { println(fizzBuzz.value(it)) }
}

  • 構造化 では「手続きとして書く」
  • OOP では「オブジェクトに責務を持たせる」

7. Structured との違い

観点 構造化 OOP
単位 手続き・関数 オブジェクト(データ+メソッド)
主眼 制御構造の整理 現実世界のモデリング
強み 可読性、アルゴリズムの明確化 保守性、再利用性、大規模開発

まとめ

  • OOP は 現実世界のモノをプログラムで表現 するパラダイム
  • カプセル化・継承・ポリモーフィズム が核となる概念
  • 大規模開発におけるソフトウェアの保守性を大幅に高めた
  • 現代言語は多くが OOP+FPのハイブリッド を採用している

0
0
0

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?