関数型対オブジェクト指向プログラミングパラダイム
コンピューターサイエンスの学生たちがよく聞いてくるんだけど、「手続き型とオブジェクト指向プログラミング言語の違いって何?」って。
情報が一箇所にまとまっていると分かりやすいよね。オブジェクト指向プログラミング(OOP)は間違いなく関数型プログラミングの失敗点や欠陥をもとに作られていて、メソッド、カプセル化、継承の導入がOOPを無限に優れたものにしているね。
- 特徴: フォーカス
- 手続き型(関数型)プログラミング: 手続きやルーチン(関数)
- オブジェクト指向プログラミング (OOP): オブジェクト(クラスのインスタンス)
- 特徴: データと関数
- 手続き型(関数型)プログラミング: 別々のエンティティ
- オブジェクト指向プログラミング (OOP): クラス内にまとめられる
- 特徴: グローバルデータ
- 手続き型(関数型)プログラミング: はい、よく使用される
- オブジェクト指向プログラミング (OOP): カプセル化とローカルデータを推奨
- 特徴: モジュール性
- 手続き型(関数型)プログラミング: 手続きに分解することを強調
- オブジェクト指向プログラミング (OOP): オブジェクトとクラスへの分解を強調
- 特徴: クラスとオブジェクト
- 手続き型(関数型)プログラミング: 当てはまらない
- オブジェクト指向プログラミング (OOP): パラダイムの中心、設計図を定義する
- 特徴: カプセル化
- 手続き型(関数型)プログラミング: 限られている
- オブジェクト指向プログラミング (OOP): 重要な原則、データとメソッドの結束
- 特徴: 継承
- 手続き型(関数型)プログラミング: 通常はサポートされていない
- オブジェクト指向プログラミング (OOP): 派生クラスの作成をサポート
- 特徴: 多様性
- 手続き型(関数型)プログラミング: 通常はサポートされていない
- オブジェクト指向プログラミング (OOP): 多態性、メソッドのオーバーロードなどをサポート
- 特徴: 例示言語
- 手続き型(関数型)プログラミング: C, Pascal, Fortran
- オブジェクト指向プログラミング (OOP): Java, C++, Python, Rubyなど
- 特徴: 抽象化
- 手続き型(関数型)プログラミング: あまり強調していない
- オブジェクト指向プログラミング (OOP): 実世界のモデリングのための抽象化を強調
- 特徴: コードの再利用性
- 手続き型(関数型)プログラミング: 関数を通じて達成される
- オブジェクト指向プログラミング (OOP): 継承、多態性などを通じて達成される
- 特徴: 複雑さ
- 手続き型(関数型)プログラミング: よりシンプルなプロジェクトに適している場合がある
- オブジェクト指向プログラミング (OOP): より大きく複雑なプロジェクトによく推奨される
- 特徴: 実世界のモデリング
- 手続き型(関数型)プログラミング: 実体を密に反映していない場合がある
- オブジェクト指向プログラミング (OOP): 実世界の実体を密に反映するように設計されている
- 特徴: 言語例
- 手続き型(関数型)プログラミング: C, Pascal, Fortran
- オブジェクト指向プログラミング (OOP): Java, C++, Python, Rubyなど
どう思う?すべてカバーされたかな?何か抜けてる?
写真提供: Max Duzij、Unsplash上。
こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/johnnweke/functional-vs-object-oriented-programming-paradigms-1f35