言語的な観点から見ると:
C は手続き指向プログラミングです。
C++ は、半分はプロセス指向プログラミング、半分はオブジェクト指向プログラミングです。
Java はオブジェクト指向プログラミングです。
1. オブジェクト指向プログラミングとプロセス指向プログラミングとは何ですか?
プロシージャ指向(略して PO): 問題を解決するためのステップを分析し、関数を使用してこれらのステップを段階的に実現するプロセス中心のプログラミングの考え方です。プロセス指向プログラミングでは、データとデータに対する操作が分離されます。
オブジェクト指向(略して OO): オブジェクト指向は、物事をオブジェクトの概念に抽象化し、最初にオブジェクトを抽象化し、次にいくつかのプロパティとメソッドをオブジェクトに割り当て、次に各オブジェクトに独自のメソッドを実行させます。オブジェクト指向プログラミングでは、データとデータに対する操作が結び付けられます。
例えば:
1. 洗濯
プロセス指向:
衣類を入れる(方法)→洗剤を入れる(方法)→水を入れる(方法)→すすぐ(方法)→洗う(方法)→乾燥する(方法)
オブジェクト指向:
new は 2 つのオブジェクト「人物」と「洗濯機」を生成します
「人」は属性とメソッドを追加します: 衣服を置く (メソッド)、洗剤を追加する (メソッド)、水を追加する (メソッド)
「洗濯機」にプロパティとメソッドが追加されます: Rinse(メソッド)、Wash(メソッド)、Spindry(メソッド)
次に、以下を実行します。
人 衣類を入れる(方法)→人 洗剤を入れる(方法)→人 水を入れる(方法)→洗濯機 すすぐ(方法)→洗濯機 きれいにする(方法)→洗濯機 脱水する乾燥(方法
2.長方形の周囲と面積を求めます
プロセス指向プログラミング方法:
1. 長方形の周囲と面積を決定するアルゴリズム。
2. 長方形の周囲長と面積をそれぞれ計算する 2 つのメソッド (関数) を記述します。
3. 外周を求めるメソッド (関数) と面積を求めるメソッド (関数) には、長方形の長さと幅という 2 つのパラメータが必要です。オブジェクト指向プログラミング方法:
1. 長方形は長方形のオブジェクトとみなすことができます。
2. 長方形のオブジェクトには 2 つの状態 (長さと幅) と 2 つの動作 (周囲と面積) があります。
3. すべての長方形の共通点を抽出し、長方形クラスを設計します。
4. 長方形オブジェクトの動作を通じて、特定の長方形オブジェクトの周囲長と面積を計算できます。
2. プロセス指向とオブジェクト指向のメリットとデメリット
プロセス指向:
長所: オブジェクトをインスタンス化する必要がないため効率的です。
短所: 結合度が高い、スケーラビリティが低い、保守が難しい (例: すべてのステップに必須、そうでないと機能しない)
オブジェクト指向:
利点: 低結合 (再利用が容易)、強力なスケーラビリティ、容易なメンテナンス オブジェクト指向にはカプセル化、継承、多態性の特性があるため、低結合システムを設計することで、システムをより柔軟で保守しやすくすることができます。 。
短所: プロセス指向に比べて効率が劣ります。
3. オブジェクト指向プログラミング: クラスとオブジェクトの関係
オブジェクト
オブジェクトとは、データ(物の属性を記述する)とデータに対する操作(物の振る舞いを反映する)から構成されるパッケージであり、客観的な物の実体を記述するものであり、システムの基本単位です。
クラスクラスは、C 言語の構造体 ( ) のバージョンアップと考えることができます。C 言語の構造体では変数のみが定義できますが、C++ では変数だけでなく関数も定義できます
。struct
クラスは、同じデータと同じ操作を持つオブジェクトのグループの定義です。これはオブジェクトのテンプレートであり、クラスに含まれるメソッドとデータは、オブジェクトのグループの共通の動作と属性を記述します。クラスはオブジェクトの抽象化であり、オブジェクトはクラスの具体化、つまりクラスのインスタンスです。クラスは、他のクラスと同様にそのサブクラスを持つことができ、クラス階層を形成します。
クラスとオブジェクトの違いは次のとおりです。
1) クラスはオブジェクトの抽象化であり、オブジェクトはクラスの具体的なインスタンスです。クラスは抽象的でメモリを消費しませんが、オブジェクトは具象的でストレージ スペースを消費します。
2) クラスは、同じプロパティと動作を持つオブジェクトのグループを抽象化したものです。クラスはオブジェクトを作成するための設計図と考えることができ、オブジェクトはこの設計図に従って何かを実装します。
例えば:
日傘と剣傘には、日よけ、雨よけなどの共通の属性があります。Umbrella は Sunny Umbrella と Sword Umbrella を抽象化したもので、Sunny Umbrella と Sword Umbrella はアンブレラ クラスの 2 つの具体的な実装です。
したがって、クラスのインスタンス化の結果はオブジェクトであり、オブジェクトのクラスの抽象化はクラスであり、同じ属性とメソッドを持つオブジェクトのグループを記述します。
三、オブジェクト指向プログラミングの特徴
オブジェクト指向プログラミングの 3 つの特徴は、カプセル化、継承、ポリモーフィズムです。
このうち、カプセル化と継承はコードの再利用、ポリモーフィズムはインターフェースの再利用です。
カプセル化
データとデータの操作方法を有機的に組み合わせ、オブジェクトのプロパティと実装の詳細を非表示にし、オブジェクトと対話するためのインターフェイスのみを公開します。カプセル化は本質的に、ユーザーがクラスを使いやすくするための管理です。
例:
コンピューターのような複雑なデバイスの場合、ユーザーに提供されるのは電源ボタン、キーボード入力、モニター、USB ジャックなどだけであり、ユーザーはコンピューターを操作して日常業務を行うことができます。しかし実際には、コンピュータの実際の働きは、CPU、グラフィックス カード、メモリなどの一部のハードウェア コンポーネントです。コンピュータ ユーザーは、マザーボード上の回路がどのようにレイアウトされているか、CPU が内部でどのように設計されているかなど、内部コア コンポーネントについて気にする必要はありません。ユーザーが知っていればよいのは、コンピュータの電源を入れる方法とその方法だけです。キーボードとマウスを介してコンピュータと対話します。したがって、コンピュータの製造元が工場から出荷するときは、内部の実装の詳細を隠すために外側にシェルを置き、ユーザーがコンピュータと対話できるように、スイッチ、マウス、およびキーボードのジャックのみを外側に提供します。
C++ でカプセル化を実現する方法: クラスを使用してオブジェクトのプロパティとメソッドを組み合わせてオブジェクトをより完全にし、アクセス権を通じてそのインターフェイスを外部ユーザーに選択的に提供します。
クラスのカプセル化により、クラスのメンバーにパブリック (パブリック)、デフォルト (デフォルト デフォルト)、保護された (プロテクト)、およびプライベート (プライベート) のアクセス権が提供されます。目的は、クラス内のプライベート変数と実装の詳細を非表示にすることです。クラス内のメソッドの。
- public : すべてのクラスに表示されます。使用されるオブジェクト: クラス、インターフェイス、変数、メソッド
- protected : 同じパッケージ内のクラスとすべてのサブクラスに表示されます。使用されるオブジェクト: 変数、メソッド。注: クラス (外部クラス) は変更できません。
- デフォルト (つまり、デフォルト、何も書かない): 修飾子なしで、同じパッケージ内で表示されます。クラス、インターフェイス、変数、メソッドなどのオブジェクトを使用します。
- private : 同じクラス内で表示されます。使用されるオブジェクト: 変数、メソッド。注: クラスは変更できません (外部クラス)
class
デフォルトのアクセス権限はprivate
( C言語と互換性がstruct
あるpublic
ためstruct
)
アクセス権を次の表に示します。
実装:
– 属性はプライベート権限を使用します
– メソッドはパブリック権限を使用します
継承する
元のクラスの特性の一部または全部を継承して、まったく新しいクラスを生成することができ、元のクラスを親クラス、新しく生成されたクラスをサブクラスと呼びます。サブクラスは、親クラスの共通性を直接継承するだけでなく、その独自の個性を作成することもできます。
多態性
コンセプト: 同じものを、異なる瞬間に異なる状態を示す。これは、基本クラスで定義された属性とメソッドがサブクラスに継承された後、異なるデータ型を持つことができる、または異なる動作を示すことができることを意味します。ポリモーフィズムには、オーバーロードとカバレッジの 2 つの表現があります。ポリモーフィズムの最大の特徴は、上向きモデリングです。
ポリモーフィズムが存在するために必要な 3 つの条件
- 継承(インターフェースの実装を含む)があること(前提条件)
- 書き換える必要がある(前提条件)
- 親クラスの参照はサブクラス オブジェクトを指します