オブジェクト指向プログラミング PHP オブジェクト指向の規則
これらの原則に厳密に従う必要はなく、違反した場合の宗教上の罰則もありません。しかし、これらの原則は、いずれかが違反された場合に警鐘が鳴ると考えるべきです。 ----- Arthur J.Riel
(1) すべてのデータは、それが配置されているクラス内に隠される必要があります。
(2) クラスのユーザーはクラスの共有インターフェースに依存しなければなりませんが、クラスはユーザーに依存することはできません。
(3) クラスプロトコル内のメッセージを最小限に抑える。
(4) すべてのクラスが理解できる最も基本的なパブリックインターフェイス[例えば、コピー操作(深いコピーと浅いコピー)、等価性の判断、正しい出力内容、ASCII記述からの解析など]を実装します。
(5) 実装の詳細(共有コードを配置するプライベート関数など)をクラスのパブリックインターフェースに入れないでください。
クラスの 2 つのメソッドに共通のコードがある場合、これらの共通コードを防ぐプライベート関数を作成できます。
(6) ユーザーが使用できないものや興味のないものでクラスのパブリックインターフェイスを妨害しないでください。
(7) クラス間の結合はゼロ、または派生結合関係のみである必要があります。つまり、あるクラスは別のクラスとまったく関係がないか、別のクラスのパブリック インターフェイスでの操作のみを使用します。
(8) クラスは 1 つの主要な抽象概念のみを表す必要があります。
パッケージ内のすべてのクラスは、同じ種類のプロパティの変更に対して共同でクローズされる必要があります。変更がパッケージに影響を与える場合、そのパッケージ内のすべてのクラスに影響しますが、他のパッケージには影響しません
(9) 関連するデータと動作を一元管理します。
デザイナーは、get などの操作を通じて他のオブジェクトからデータを取得するオブジェクトに注意を払う必要があります。このタイプの動作は、この経験原則に違反していることを意味します。
(10)関係のない情報を別のクラスに入れる(つまりお互いに意思疎通をしない行為)。
安定性への依存性
(11) モデル化する抽象概念が、オブジェクトが果たす役割だけではなく、クラスであることを確認します。
(12) システム機能を水平方向にできるだけ均一に分散します。つまり、設計に従って、最上位クラスは作業を均一に共有する必要があります。
(13) システム内に全能のクラス/オブジェクトを作成しないでください。 Driver、Manager、System、および Susystem を名前に含むクラスには特に注意してください。
インターフェースを実装するのではなく、インターフェースを計画する。
(14) パブリックインターフェースに多数のアクセスメソッドを定義するクラスには注意してください。アクセス方法が多数あるということは、関連するデータと動作が集中的に保存されていないことを意味します。
(15) クラス間でコミュニケーションが取れない行為が多すぎるクラスには注意してください。
この問題のもう 1 つの兆候は、アプリケーション内のクラスのパブリック インターフェイスに多数の get 関数と set 関数を作成することです。
(16) ユーザーインターフェースと対話するオブジェクト指向モデルで構成されるアプリケーションでは、モデルがインターフェースに依存するのではなく、インターフェースがモデルに依存する必要があります。
(17) 可能な限り現実世界に従ってモデル化する(システム機能分散の原則を遵守し、汎用クラスの原則を回避し、関連するデータと動作を一元的に配置するために、この原則に違反することがよくあります)。
(18) デザインから不要なクラスを削除します。
一般的には、このクラスをプロパティにダウングレードします。
(19) システム外のクラスを削除します。
システム外のクラスの特徴は、抽象的に言えば、システムドメインにメッセージを送信するだけで、システムドメイン内の他のクラスからのメッセージは受け付けないことです。
(20)オペレーションをクラス化しないでください。名前が動詞であるか動詞から派生したクラス、特に意味のあるアクションが 1 つだけあるクラスには質問してください。意味のある動作を、すでに存在するクラスまたはまだ発見されていないクラスに移動する必要があるかどうかを検討してください。
(21) アプリケーションの分析モデルを作成する際に、プロキシクラスを導入することがよくあります。設計段階では、多くのエージェントが役に立たず、削除する必要があることがわかります。
(22)クラスの協力者の数は最小限にする。
クラスが使用する他のクラスの数はできるだけ少なくする必要があります。
(23) クラスとコラボレータ間で受け渡されるメッセージの数を最小限に抑える。
(24) クラスとコラボレーター間のコラボレーションの量を最小限に抑える、つまり、クラスとコラボレーターの間で受け渡されるさまざまなメッセージの数を減らす。
(25) クラスのファンアウトを減らすようにしてください。つまり、クラスで定義されたメッセージの数と送信されるメッセージの数の積を減らします。
(26) クラスに別のクラスのオブジェクトが含まれている場合、それを含むクラスは、含まれているオブジェクトにメッセージを送信する必要があります。つまり、包含関係は常に使用関係を意味します。
(27) クラス内で定義されたほとんどのメソッドは、ほとんどの場合、ほとんどのデータ メンバーを使用する必要があります。
(28) クラスに含まれるオブジェクトの数は、開発者の短期記憶の容量を超えてはなりません。この数は多くの場合 6 です。
クラスに 6 つを超えるデータ メンバーが含まれる場合、論理的に関連するデータ メンバーをグループに分割し、新しい包含クラスを使用してこのメンバーのグループを含めることができます。
(29) システム機能を狭く深い継承体系で垂直に分散させる。
(30) セマンティック制約を実装するときは、クラス定義に基づいて実装するのが最善です。これは多くの場合、クラスのオーバーフローにつながります。この場合、制約はクラスの動作に実装する必要があります。通常はコンストラクターに実装する必要がありますが、必ずしもそうである必要はありません。
(31) クラスのコンストラクターにセマンティック制約を実装する場合、コンストラクター ドメインで許可される最も深い包含レベルに制約テストを配置します。
(32) 制約が依存するセマンティック情報が頻繁に変更される場合は、それを一元化されたサードパーティのオブジェクトに置くのが最善です。
(33) 制約が依存する意味論的情報がめったに変更されない場合、制約に関与するさまざまなクラス間で分散するのが最適です。
(34) クラスはそれに何が含まれているかを知っている必要がありますが、誰がそれを含んでいるかを知ることはできません。
(35) リテラルスコープを共有する(つまり、同じクラスに含まれる)オブジェクトは、相互に使用関係を持ってはなりません。
(36)継承は専門化階層をモデル化するためにのみ使用されるべきです。
(37) 派生クラスは基底クラスを知っている必要があり、基底クラスは派生クラスに関する情報を知っていてはなりません。
(38) 基本クラス内のすべてのデータはプライベートである必要があり、保護されたデータを使用しないでください。
クラスの設計者は、クラスのユーザーが必要としないものをパブリックインターフェースに決して配置すべきではありません。
(39) 理論的には、継承階層は深くあるべきであり、深ければ深いほど良いです。
(40)実際には、継承階層の深さは平均的な人の短期記憶容量を超えてはなりません。広く受け入れられている深さの値は 6 です。
(41) すべての抽象クラスは基底クラスでなければなりません。
(42) すべての基底クラスは抽象クラスである必要があります。
(43) データ、動作、インターフェースの共通点を継承階層のできるだけ上位に配置します。
(44) 2つ以上のクラスが共通のデータを共有する(ただし、共通の動作はしない)場合、共通のデータをクラスに配置し、このデータを共有する各クラスにこのクラスを含める必要があります。
(45) 2 つ以上のクラスが共通のデータと動作 (つまりメソッド) を持つ場合、これらの各クラスは、これらのデータとメソッドを表す共通の基本クラスを継承する必要があります。
(46) 2 つ以上のクラスが共通のインターフェース (メソッドではなくメッセージを参照) を共有する場合、多態的に使用する必要がある場合にのみ、共通の基本クラスから継承する必要があります。
(47) オブジェクトタイプの表示に関するケースバイケースの分析は、一般的に間違っています。このような場合、ほとんどの場合、設計者はポリモーフィズムを使用する必要があります。
(48) 属性値の表示のケースバイケース分析は間違っていることが多い。クラスは継承階層に分離され、各属性値が派生クラスに変換される必要があります。
(49) 継承関係を通じてクラスの動的セマンティクスをモデル化しないでください。静的セマンティクス関係を使用して動的セマンティクスをモデル化しようとすると、実行時に型が切り替わります。
(50) クラスオブジェクトを派生クラスにしないでください。インスタンスが 1 つしかない派生クラスには注意してください。
(51) 実行時に新しいクラスを作成する必要があると考えた場合は、一歩下がって、オブジェクトを作成していることを認識してください。次に、これらのオブジェクトをクラスに一般化します。
(52) 派生クラスで空のメソッド (つまり、何もしないメソッド) を使用して基本クラスのメソッドをオーバーライドすることは違法であるべきです。
(53) オプションで含めることと継承の必要性を混同しないでください。オプションの包含を継承としてモデル化すると、クラスの急増につながります。
(54) 継承階層を作成するときは、再利用可能なコンポーネントではなく、再利用可能なフレームワークを作成するようにしてください。
(55) 設計で多重継承を使用する場合は、間違いがあったと想定してください。間違いを犯していない場合は、それを証明する必要があります。
(56) オブジェクト指向設計で継承が使用されている限り、次の 2 つの質問を自問してください: (1) 派生クラスは継承するものの特別な型ですか? (2) 基本クラスは派生クラスの一部ですか?
(57) オブジェクト指向設計で多重継承が見つかった場合は、基本クラスが実際に別の基本クラスの派生クラスになっていないことを確認してください。
(58) オブジェクト指向設計において、包含と関連性のどちらかを選択する必要がある場合は、包含を選択してください。
(59) クラスオブジェクトの簿記にグローバルデータやグローバル関数を使用しないでください。クラス変数またはクラスメソッドを使用する必要があります。
(60) オブジェクト指向の設計者は、物理的な設計原則が論理的な設計を損なうことを許すべきではありません。ただし、論理設計に関する決定を行う際には、物理設計基準を使用することがよくあります。
(61) オブジェクトの状態を変更するためにパブリックインターフェースをバイパスしないでください。
上記では、オブジェクト指向プログラミングの内容を含め、PHP のオブジェクト指向プログラミングの原則を紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









はじめに 今日の急速に進化するデジタル世界では、堅牢かつ柔軟で保守可能な WEB アプリケーションを構築することが重要です。 PHPmvc アーキテクチャは、この目標を達成するための理想的なソリューションを提供します。 MVC (Model-View-Controller) は、アプリケーションのさまざまな側面を独立したコンポーネントに分離する、広く使用されている設計パターンです。 MVC アーキテクチャの基礎 MVC アーキテクチャの核となる原則は、関心事の分離です。 モデル: アプリケーションのデータとビジネス ロジックをカプセル化します。ビュー: データの表示とユーザー インタラクションの処理を担当します。コントローラー: モデルとビュー間の対話を調整し、ユーザーのリクエストとビジネス ロジックを管理します。 PHPMVC アーキテクチャ phpMVC アーキテクチャは従来の MVC パターンに従いますが、言語固有の機能も導入しています。以下はPHPMVCです

SOLID 原則は、ソフトウェア設計の品質と保守性を向上させることを目的としたオブジェクト指向プログラミング設計パターンの一連の指針です。 Robert C. Martin によって提案された SOLID 原則には次のものが含まれます。 単一責任原則 (SRP): クラスは 1 つのタスクのみを担当し、このタスクはクラス内にカプセル化する必要があります。これにより、クラスの保守性と再利用性が向上します。 classUser{private$id;private$name;private$email;publicfunction__construct($id,$nam

オブジェクト指向プログラミングの同時実行性の高いシナリオでは、Go 言語で関数が広く使用されています。 メソッドとしての関数: 関数を構造体にアタッチしてオブジェクト指向プログラミングを実装し、構造体データを便利に操作して特定の関数を提供できます。同時実行本体としての関数: 関数を goroutine 実行本体として使用して、タスクの同時実行を実装し、プログラムの効率を向上させることができます。コールバックとしての関数: 関数をパラメーターとして他の関数に渡し、特定のイベントまたは操作が発生したときに呼び出すことができるため、柔軟なコールバック メカニズムが提供されます。

PHP 拡張機能は、オブジェクトの作成、プロパティへのアクセス、メソッドの呼び出しを行うカスタム関数を設計することで、オブジェクト指向プログラミングをサポートできます。まずオブジェクトをインスタンス化するカスタム関数を作成し、次にプロパティを取得してメソッドを呼び出す関数を定義します。実際の戦闘では、関数をカスタマイズして MyClass オブジェクトを作成し、その my_property 属性を取得し、その my_method メソッドを呼び出すことができます。

PHP のオブジェクト指向プログラミング パラダイムは、プロジェクト管理と組織化に利点をもたらします。 インターネットの急速な発展に伴い、あらゆる規模の Web サイトやアプリケーションが登場しました。増大するニーズに応え、開発効率と保守性を向上させるために、オブジェクト指向プログラミング (Object-Oriented Programming、略して OOP) の使用が現代のソフトウェア開発の主流になっています。 PHP のような動的スクリプト言語では、OOP はプロジェクト管理と組織に多くの利点をもたらします。

オブジェクト指向プログラミングとは何ですか?オブジェクト指向プログラミング (OOP) は、現実世界のエンティティをクラスに抽象化し、オブジェクトを使用してこれらのエンティティを表すプログラミング パラダイムです。クラスはオブジェクトのプロパティと動作を定義し、オブジェクトはクラスをインスタンス化します。 OOP の主な利点は、コードの理解、保守、再利用が容易になることです。 OOP の基本概念 OOP の主な概念には、クラス、オブジェクト、プロパティ、メソッドが含まれます。クラスはオブジェクトの設計図であり、オブジェクトのプロパティと動作を定義します。オブジェクトはクラスのインスタンスであり、クラスのすべてのプロパティと動作を備えています。プロパティは、データを保存できるオブジェクトの特性です。メソッドは、オブジェクトのデータを操作できるオブジェクトの関数です。 OOP の利点 OOP の主な利点は次のとおりです。 再利用性: OOP はコードをより高度なものにすることができます。

1. Python の概要 Python は、1991 年に Guido van Rossum によって作成された、習得が簡単で強力な汎用プログラミング言語です。 Python の設計哲学はコードの可読性を重視しており、さまざまなアプリケーションを迅速かつ効率的に構築できる豊富なライブラリとツールを開発者に提供します。 2. Python の基本構文 Python の基本構文は、変数、データ型、演算子、制御フロー ステートメントなどを含む他のプログラミング言語と似ています。変数はデータを格納するために使用されます。データ型は、変数が格納できるデータ型を定義します。演算子は、データに対してさまざまな操作を実行するために使用されます。制御フロー ステートメントは、プログラムの実行フローを制御するために使用されます。 3.Python の Python データ型

関数型およびオブジェクト指向プログラミング (OOP) は、C++ でさまざまなプログラミング メカニズムを提供します。 関数: 特定のタスクの実行に重点を置き、データを含まない独立したコード ブロック。 OOP: オブジェクト、クラス、継承に基づいて、データと動作がオブジェクトにカプセル化されます。実際のケースでは、正方形の面積を計算する関数メソッドはシンプルかつ直接的ですが、OOP メソッドはデータと動作をカプセル化し、オブジェクトの相互作用の管理により適しています。適切なアプローチの選択はシナリオによって異なります。関数は独立したタスクに適しており、OOP は複雑なオブジェクトの相互作用の管理に適しています。
