オブジェクト指向
1.オブジェクト指向の基盤
1.1オブジェクト指向の考え方
1.1.1概要
ObjectOrientedはソフトウェア開発方法です。オブジェクト指向の概念とアプリケーションは、プログラミングとソフトウェア開発を上回りました。これは、現実の世界を理解して抽象化する方法であり、一定の段階まで発展したコンピュータープログラミング技術の産物です。
オブジェクト指向は、組織全体に関連するデータを参照し、より高いレベルのより自然な操作モードの種類からモデル化されたシステムに目を向けることで、プロセスに関して指向されます。
プロセス指向からオブジェクト指向の考え方への移行:
1.プロセス指向は、機能を備えたオブジェクトに焦点を当てています。
2.プロセス指向からオブジェクト指向へ。これは、実行者から指揮者への思考の変換です。
「すべてがオブジェクトです」
1.1.23つの主要なアイデア
オブジェクト指向の考え方は、概念的に3つのタイプに分けられます:OOA、OOD、OOP
- OOA:オブジェクト指向分析
- システムの開発プロセスにおける体系的なビジネス調査であり、オブジェクト指向の思考で問題を分析します
- 主な原則:(1)抽象化(2)カプセル化(3)継承(4)分類(5)集約(6)関連付け(7)メッセージ通信(8)きめ細かい制御(9)動作分析
- OOD:オブジェクト指向の設計
- OODメソッドは、OOメソッドの中間遷移リンクです。その主な機能は、OOA分析の結果をさらに標準化して、OOPが直接受け入れることができるようにすることです。
- OODは、ソフトウェアの設計方法であり、エンジニアリング仕様です。これについては間違いありません。
- OOP:オブジェクト指向プログラミング
- コンピュータプログラミングフレームワークです。OOPの基本原則は、コンピュータープログラムが、サブルーチンとして機能できる単一のユニットまたはオブジェクトで構成されていることです。
1.1.33つの特徴
- カプセル化:すべてのコンテンツは外部からは見えません
- 通常のオブジェクトをカプセル化し、オブジェクトのプロパティはプライベートであり、アクセサを提供します
- 継承:他の機能を継承し、開発を続ける
- クラスが別のクラスを継承した後、継承されたクラスのメソッドとプロパティがあります
- 多形性:メソッドのオーバーロード自体は多形性の現れです
- 多形性は継承に基づいています。親クラスオブジェクトは、複数の異なるサブクラスオブジェクトを生成できます。異なるサブクラスオブジェクトに応じて、異なるメソッドを持つことができます。つまり、異なる形式、つまり多形性を示します。
1.2クラスとオブジェクト
1.2.12つの関係
クラスは、包括的な特性である共通の製品を表し、オブジェクトは個別の特性です。(エンティティと図面)
1.2.2オブジェクトエイリアス
Book book1 = new Book();
Book book2 = book1;//起了个别名,并不是赋值对象,并没有实例化
1.3Javaメモリ分析
1.3.1スタック
1. Javaスタック領域は非常に小さく、約2mで、アクセス速度が速いという特徴があります
2.スタックストレージは、ファーストイン、ラストアウトが特徴です
3.ストレージ速度が速い理由:スタックメモリは「スタックポインタ」を介してスペースを作成および解放します。ポインタは下に移動して新しいメモリを作成し、上に移動してメモリを解放します。この方法は非常に高速で、次の2番目です。登録しますが、ポインタの移動を容易にするために、移動のサイズと範囲を明確にする必要があります。これはデータストレージの制限です。保存されるデータのサイズは固定されているため、プログラムの柔軟性に影響します。
4.したがって、より多くのデータをヒープメモリに保存します。
5.スタック領域には、基本データタイプと参照データタイプへの参照が格納されます。
1.3.2ヒープ
-
格納されているのはクラスのオブジェクトです
-
Javaは純粋なオブジェクト指向の言語であり、オブジェクトの作成方法を制限します
-
すべてのクラスのオブジェクトは、新しいキーワードを使用して作成されます
newキーワードは、新しいオブジェクトを明示的に作成し、新しいヒープメモリスペースを開く必要があることをJVMに通知します。ヒープメモリはスタックメモリとは異なります。オブジェクトを作成するときに、ヒープメモリで開く必要のあるストレージスペースの量に注意を払う必要がないという利点があります。メモリ使用時間に注意を払う必要はありません
-
ヒープメモリ内のメモリの解放はGCによって行われます
-
ヒープメモリを再利用するためのガベージコレクタのルール:スタックメモリにこのオブジェクトへの参照がない場合、収集できるガベージと見なされます。
-
Book b1 = new Book();//栈内存中存储了b1(对象名),new实例化之后,在堆中开辟了空间,而内存地址(0x010a)保存到了栈内存中的b1的值
Book b2 = b1;//别名,此时,在栈内存中创建了一个内存区域,b2的值就是b1所保存的地址(0x010a)
//跳出此语句块之后,先释放了栈内存中的b1、b2(删除了堆内存中new Book() 的引用),GC发现堆内存中对象没有任何引用时,判断为可被回收的垃圾。
1.3.3メソッド領域
この領域には、クラス情報、静的変数、定数、メンバーメソッドが格納されます
メソッドエリアには、特別なエリア(一定のプール)が含まれています(静的に装飾されたメンバーのストレージ)
1.3.4PCレジスタ
PCレジスタは、現在実行されているJVM命令のアドレスを保持します。
Javaプログラムでは、各スレッドが開始すると、PCレジスタが作成されます。
1.3.5ローカルメソッドスタック
ローカルネイティブメソッドを保存します。nativeキーワードはJNIに関連しています
nativeキーワードを使用して、このメソッドがネイティブ関数であることを示します。つまり、このメソッドはC / C ++言語で実装され、javaによって呼び出されるDLLにコンパイルされます。
これらの関数の実装はDLLに含まれていますが、JDKソースコードには含まれていないため、表示されないはずです。また、プラットフォームによっても異なります。これはJavaの基盤となるメカニズムでもあります。実際、Javaは、オペレーティングシステムへのアクセスを実現するために、さまざまなプラットフォームでさまざまなネイティブメソッドを呼び出します。
1.4工法(コンストラクター)
1.4.1概要
-
役割:オブジェクトを初期化するために使用されます
-
実行タイミング:オブジェクトが作成されると、自動的に呼び出されます
-
機能:すべてのJavaクラスには少なくとも1つのコンストラクターがあります
クラスに明確なコンストラクターがない場合、コンパイラーはパラメーターのないコンストラクターを自動的に生成します
自分でコンストラクターを作成した場合、コンパイラーはパラメーターのないメソッドを自動的に生成しなくなります
1.4.2工法の設計
- 引数なしの構築方法をカスタマイズします。コンパイラーに依存しないでください。
- クラスに定数でないメンバー変数がある場合は、2つのバージョンの構築メソッドを提供することをお勧めします。1つはパラメーターなしの構築メソッドで、もう1つはすべての属性をパラメーターとして持つ構築メソッドです。(または、コンストラクターを介して必要な属性を割り当てるだけです)
- クラス内のすべてのメンバー変数が一定であるか、メンバー変数がない場合は、構造のバージョンを提供しないことをお勧めします。
1.5メソッドの過負荷
- メソッド名が同じで、パラメーターの種類またはパラメーターの長さが異なる場合、メソッドがオーバーロードされる可能性があります
- メソッドのオーバーロードは戻り値とは関係ありません!メソッドのオーバーロードにより、さまざまなニーズの下でメソッドを呼び出すためにさまざまなパラメーターを渡すことにより、特定の機能を完了することができます。
1.6工法の過負荷
少し、メソッドのオーバーロードと同じ原理
1.7匿名オブジェクト
- オブジェクト名のないオブジェクトは匿名オブジェクトです。
- 匿名オブジェクトは1回しか使用できません。オブジェクト参照がないため、それらはガベージと見なされ、GCによって収集されるのを待ちます。
- 一度だけ使用されるオブジェクトは、開発でよく使用される匿名オブジェクトを使用して実行できます。
Book b = new Book();//实例化对象
int price = b.getPrice();//获取价格
//匿名方法
int price = new Book().getPrice();//匿名对象