23 ポイント 投稿者 alstjr7375 2021-12-14 | 6件のコメント | WhatsAppで共有
  • クラスとプロトタイプの最も大きな違いは、オブジェクトの生成方式にある[クラス -> インスタンス vs オブジェクト -> 複製されたオブジェクト]。

  • 最も大きな共通点はオブジェクト指向であり、プログラムをオブジェクトという単位に分けて相互作用させること。

  • オブジェクト指向の核心であるカプセル化をうまく行う最も簡単な方法は、抽象化をうまく行うこと。

    • 抽象化は、データ中心の性質(古典的OOP)、形態(型)、状態(データ駆動設計)と、関係中心の時間(手続き型)、振る舞い(関数型)、定義(論理型)、状況(ドメイン駆動設計、AOP)などに分けて考えることができる。

    • うまく分類して設計するためには、思考の形式を認識させるさまざまなカテゴリーへの理解があるとよい[例:カントの4綱12目]。

  • 哲学とパラダイム

    • 手続き型:時間はほとんどの抽象化に影響を与え、Goto のようにコンテキストが混ざるようにする文法は好ましくない。

    • 関数型:振る舞いの形で表そうとするため、型(形態)と深い関連がある。

    • 論理型:事実と規則で論理を構成し、問い合わせを行うことで述語論理の結果を得られる。

    • 伝統的OOP:直感的。ただし、完全な属性を見つけ出すことは不可能である。

    • データ駆動設計:ロジックの状態を扱おうとする関数型とは異なり、コンピュータ自体における状態を減らそうと試みる。キャッシュヒット率を高めて性能向上をもたらす。

    • ドメイン駆動設計:伝統的OOPとは異なり、ドメインとコンテキストに応じて異なる設計を行う(絵画理論-用途意味論と似ている)。サブドメインへの依存性注入を行うAOPを使うと実装がしやすくなる。

  • MVP

    • プロトタイプ制作:重要な機能が含まれていなければならず、デザイナー、開発者、財務などの観点によって異なりうる。多くの人が重要だと考える製品との類似度に応じた典型的な要件。

    • MVP:最低限の完成度が保証され、利用可能であり、最終段階として考える製品に近い形で設計しなければならない。

  • オブジェクト指向と存在

    • プラトン:普遍的性質は不変で実在し、個別的存在は普遍的特性を欠いたまま存在すると主張。

    • アリストテレス:個別的な個体だけが根本的実体であり、普遍者は上下/包含関係の中で現れる表象だと主張。

    • クラス-インスタンスはプラトンのイデア論に、プロトタイプ-複製されたオブジェクトはアリストテレスの実体論に類似する。

最初に書こうとしていた主なポイントは

  • 伝統的OOPは絵画理論、ドメイン駆動設計は用途意味論と類似している。

  • クラス-インスタンスはプラトンのイデア論に、プロトタイプ-複製されたオブジェクトはアリストテレスの実体論に類似する。

の2つだったのですが、思ったよりずっと長くなってしまいました。

背景知識がまったくないと、少し難しく感じるかもしれません。

6件のコメント

 
alstjr7375 2021-12-14

JavaScript はなぜプロトタイプを選んだのか

https://ja.news.hada.io/topic?id=5532

を見ていて思い出し、書いた文章です。

 
laeyoung 2021-12-14

この記事と比較しながら、一度読んでみましょう!

 
alstjr7375 2021-12-14

ありがとうございます!!

 
alstjr7375 2021-12-14

あれ? スペースを複数入れるのはできないみたいですね(泣)

 
xguru 2021-12-14

ああ、意図的にスペースを取る場合が少しあるので..

空行や複数の空白は減らすようにしてあります(泣)

 
alstjr7375 2021-12-14

承知しました。

次回から投稿する際に考慮しないといけませんね。