[おっとハードコアな説明] こんにちは先生、私は同級生のチェンです、オブジェクト指向とは何ですか?私たちはどのように理解し、考えるべきでしょうか?

今日、同じ質問を 3 つ受け取りましたか? 質問: こんにちは、チェン、オブジェクト指向とは何ですか? どうすれば簡単に理解できるでしょうか。オブジェクト指向: オブジェクト、クラス、カプセル化、継承、ポリモーフィズム、および組み合わせを理解する方法は? ? ?

1. oop オブジェクト指向プログラミングとは?

新しい方法であるオブジェクト指向プログラミング (略して oop) は、本質的に抽象的思考プロセスであり、モデル構築で具現化されたオブジェクト指向の方法です。

モデルは、現実世界の物の特性を反映するために使用されます。いかなるモデルも、客観的なもののすべての特定の特徴を反映することは不可能であり、その特徴と変化する法則の抽象化であり、対象の特徴をより一般的に、より集中的に、より深く説明することができます。含まれます。モデルを構築することによって達成される抽象化は、オブジェクトに対する人々の理解を深めることです。

2. オブジェクトとは

オブジェクト(オブジェクト):それを使って何かをすることができるもの。オブジェクトには、状態、動作、アイデンティティの 3 つの属性があります。

3. クラスとは?

クラスは、特定のタイプのものの記述であり、抽象的です。オブジェクトは実際に存在し、このタイプのトランザクションの個体です。

オブジェクトとクラスの意味を読んだ後でも、私はまだ完全には理解していません. それは問題ではありません. 小さな例を挙げましょう:

たとえば、動物は一種の「クラス」であり、犬、猫、人、羊は一種の「オブジェクト」です。

うわー、クラスがとてもシンプルであることがわかりました、わかりました、へへへ。

4. カプセル化とは何ですか?

カプセル化は、次の 2 つの意味に分けることができます。

最初の意味: データと操作を一緒にバンドルして、新しいタイプのプロセスを作成します。
2 番目の意味: インターフェイスを実装から分離するプロセス。

5. 継承とは何ですか?

クラスが 1 つ以上の他のクラスによって定義された構造と動作を共有するクラス間の関係。継承は、クラス間の「一種の」関係を表します。サブクラスは、基本クラスの動作を拡張、オーバーライド、および再定義できます。

6. 組み合わせは?

コンポジションは、クラス間の関係とオブジェクト間の関係の両方です。
この関係では、オブジェクトまたはクラスに他のオブジェクトおよびクラスが含まれます。
簡単に言えば、コンポジションは「has」関係を表します。

7. ポリモーフィズムとは?

共通のスーパークラスに関連する多くの異なるクラスのオブジェクトを名前で表すことができる型理論の概念。したがって、この名前で示されるオブジェクトは、一般的な一連の操作に対して異なる応答をする場合があります。

8. 魔法​​の oop コードと非 oop コードの 2 つのセクション

概念について説明した後、2 つのコードを見てみましょう。01は OOP を使用しない C 言語コードで、02 は OOP を使用する C++ コードです

01

#include<stdio.h>

//定义变量
char *name;
int age;
float score;

//定义函数
void display(){
    
    
    printf("%s的年龄是%d,高考成绩是%1f\n",name,age,score);
}

int main(){
    
    
     //变量赋值
	name = "张三";
	age = 30;
	score = 662;
	 //调用函数
	 display();

	 return 0;
}

ここに画像の説明を挿入
コードの実行結果: Zhang San の年齢は 30 歳で、彼の大学入試の点数は 662 です。

02

#include<stdio.h>

//通过class关键字类定义类
class Student{
    
    
public:
	//类包含的变量
	char *name;
	int age;
	float score;
	//类包含的函数
	void display(){
    
    
	    printf("%s的年龄是 %d,高考成绩是%.1f\n",name,age,score);
	}
};

int main(){
    
    
    //通过类来创建对象
	Student stu1;
	//类中的变量赋值
	stu1.name = "张三";
	stu1.age = 30;
	stu1.score = 662;
    //调用类中的函数
	stu1.display();

	return 0;
  
}

ここに画像の説明を挿入
コードの実行結果: Zhang San の年齢は 30 歳で、彼の大学入試の点数は 662 です。

9. クラスとオブジェクトの深い理解

1. 1クラス

01と02のコード実行結果は同じ?? ? どうしたの?前に説明したクラスとオブジェクトを注意深く思い出してください。

プログラミング言語では、変数をさまざまな形式の値を格納するために使用されるデータと見なし、関数をデータに対して特定の処理を実行するために使用される操作と見なします。すべてのコードはデータと操作で構成されており、プログラム操作の本質はデータに対してさまざまな操作を実行することです。

OOP が登場する前は、データと操作が分離されていたため、関連するデータと操作を構文的にまとめることができず、コードの量が急激に増加すると、どのデータがどの操作に関連付けられているかを理解するのが難しくなり、ロジックが作成されました。非常に面倒で、大規模なプログラム開発には向いていません。

OOP を使用すると、関連するデータと操作をコンテナー (クラス) に入れることができます。クラスは、関連する変数と関数を一緒にカプセル化するため、それらは文法的に関連付けられ、他のクラスの変数/関数から分離され、誤操作を防ぐことができます。

ここに画像の説明を挿入

クラスは互いに分離されています. つまり, 変数と関数は現在のクラスでのみ有効であり, 他のクラスからは見えません. たとえば, クラス A の関数はクラス B の変数を使用できず, その逆も同様です.

OOP は実際には一種のコード カプセル化のアイデアであり、関連する変数と関数をクラスに入れ、それらを保護および分離し、小さなモジュールを 1 つずつ形成します.各小さなモジュールは小さなタスクを完了することができます.

OOP は、コードの実行効率においてまったく利点がありません. その主な目的は、プログラマーがコードを整理および管理し、プログラミングのアイデアを迅速に整理し、プログラミングの考え方に革新をもたらすことを容易にすることです.

2. 2 つの探索クラスとオブジェクト

上記の 02 の C++ コードを見ると、クラスを直接使用できないことがわかります.まず、クラスを介してオブジェクト (オブジェクト) を作成し、次にオブジェクトを介してクラス内の変数と関数を呼び出す必要があります.

簡単に言えば、クラスとは、ユーザーによって構築された複雑なデータ型にすぎません. これは、整数 (int)、小数 (float)、および文字列 (string) などの基本的な型と同じです. 変数は、変数を定義する前に定義する必要があります.クラスによって定義された変数には、object という新しい名前が付けられます。

理解できなくても構いません。別の小さな例を挙げましょう。

クラスを図面に、オブジェクトをパーツに比較すると、図面はパーツのパラメーター (メンバー変数) とタスク (メンバー関数) を記述します。1 つの図面で同じプロパティを持つ複数のパーツを作成でき、異なる図面で異なる種類のパーツを作成できます。

クラスは単なる描画であり、図として機能し、メモリ スペースを占有しません。オブジェクトは特定のパーツであり、格納する場所がある場合にのみメモリ スペースを占有します。

C++では、クラス名からオブジェクトを作成する、つまり図面をパーツとして作成することができますが、このプロセスをクラスのインスタンス化と呼び、オブジェクトをクラスのインスタンス (Instance) とも呼びます。

おすすめ

転載: blog.csdn.net/qq_62259825/article/details/126440781