Javaオブジェクト向けプログラミング
オブジェクト向けプログラミング(OOP)
オブジェクト向けプログラミングはすべてのデータをオブジェクトと見なし,オブジェクトがプログラミングの中心となる.
出典:生活コード
オブジェクト向けプログラミングの特徴
カプセル化
非表示
継承
たけいせい
抽象化
クラスとメソッド、変数
// MyOOP.java
public class MyOOP {
public static void main(String[] args) {
Print.delimiter = "----";
Print.A();
Print.B();
Print.delimiter = "****";
Print.A();
Print.B();
}
}
// Print.java
class Print { // 클래스
public static String delimiter = ""; // 전역 변수
public static void A() { // 메서드
System.out.println(delimiter);
System.out.println("A");
System.out.println("A");
}
public static void B() {
System.out.println(delimiter);
System.out.println("B");
System.out.println("B");
}
}
関連性のある重複コードをメソッドに組み合わせる.繰返し値は変数に設定され、メソッド内で定義された変数はメソッド外で使用できません.したがって、グローバル変数として宣言すると、管理が容易になります.
クラスは、これらのメソッドと変数を組み合わせて、より簡潔でより良いコードを記述することができます.また、外部でも使用可能で、単独で作成したり、呼び出して使用したりすることができます.
≪インスタンス|Instance|emdw≫
出典:生活コード
冷蔵庫を一流に考えましょう.同じ冷蔵庫を複数作ることができ、中にはいろいろな材料が詰まっています.例はコピーした冷蔵庫です.
同じ冷蔵庫を作るときは
new
を貼る.// MyOOP.java
public class MyOOP {
public static void main(String[] args) {
Print p1 = new Print();
p1.delimiter = "----";
p1.A();
p1.B();
Print p2 = new Print();
p2.delimiter = "****";
p2.A();
p2.B();
// Print.delimiter = "----";
p1.A();
// Print.delimiter = "****";
p2.A();
p1.B();
p2.B();
}
}
// Print.java
class Print { // 클래스
public static String delimiter = ""; // 전역 변수
public void A() { // 메서드
System.out.println(delimiter);
System.out.println("A");
System.out.println("A");
}
public void B() {
System.out.println(delimiter);
System.out.println("B");
System.out.println("B");
}
}
delimiter
を交換するたびに面倒なことで、効率がありません.インスタンスを使用すると、より簡単に作業できます.インスタンスを使用する前にstaticは常に値が変わらない場合に使用されますが、delimer変数の値が変更されるため、消去されます.
Print p1 = new Print();
は、Printデータ型のPrintクラスをp 1オブジェクトに含むと言える.p 1とp 2のdelimeter変数値を設定することで、同じクラスを迂回することを回避できます.
static
class Foo {
public static String classVar = "I class var"; // static 변수 (클래스 필드)
public String instanceVar = "I instance var"; // non-static 변수 (인스턴스 필드)
public static void classMethod() { // 클래스의 static 메서드가 클래스의 변수에 접근이 가능할까?
System.out.println(classVar); // static 메서드는 static 변수에 접근 가능
// System.out.println(instanceVar); // 인스턴스 변수에는 접근 불가능
}
public void instanceMethod() { // 인스턴스 메서드는 클래스의 변수에 접근이 가능할까?
System.out.println(classVar); // 인스턴스 메서드는 static 변수에 접근 가능
System.out.println(instanceVar); // 인스턴스 변수에도 접근 가능
}
}
public class StaticApp {
public static void main(String[] args) {
System.out.println(Foo.classVar); // Foo 클래스의 static 변수에 접근 가능
// System.out.println(Foo.instanceVar); // 인스턴스 변수에 접근 불가능
Foo.classMethod(); // static 메서드에 접근 가능
// Foo.instanceMethod(); // 인스턴스 메서드에 접근 불가능
// Foo f1, f2 인스턴스 생성
Foo f1 = new Foo();
Foo f2 = new Foo();
System.out.println(f1.classVar); // I class var
System.out.println(f1.instanceVar); // I instance var
f1.classVar = "changed by f1";
System.out.println(Foo.classVar); // changed by f1
System.out.println(f2.classVar); // changed by f1
f1.instanceVar = "changed by f1";
System.out.println(f1.instanceVar); // changed by f1
System.out.println(f2.instanceVar); // I instance var
}
}
出典:生活コード
staticキーワードを使用して、変数またはメソッドの前にstatic変数とメソッドを作成できます.クラスメンバーとも呼ばれ、すべてのオブジェクトがメモリを共有する特徴があります.
static int num = 0; // static 변수 선언
public static void static_method(){} // static 리턴 타입 메소드 {}
静的に宣言された変数およびメソッドは同じメモリを指すため、Foo.classVar
およびインスタンスf1.classVar
およびf2.classVar
は同じメモリを使用する.静的変数値を
f1.classVar = "changed by f1";
に変更すると、Fooとf 1、f 2のclassVarは同じ変数値を指します.ただし、インスタンスは各異なるオブジェクトであるため、
f1.instanceVar = "changed by f1";
が作成されると、f 1のinstancevar値のみが変更されます.ジェネレータとthis
// MyOOP.java
public class MyOOP {
public static void main(String[] args) {
Print p1 = new Print("----"); // 인자
p1.A();
p1.B();
Print p2 = new Print("****");
p2.A();
p2.B();
}
}
// Print.java
class Print { // 클래스
public String delimiter = ""; // 인스턴스 변수
public Print(String delimiter){
this.delimiter = delimiter; // this.delimiter = 인자 delimiter
}
public void A() { // 메서드
System.out.println(this.delimiter);
System.out.println("A");
System.out.println("A");
}
public void B() {
System.out.println(this.delimiter);
System.out.println("B");
System.out.println("B");
}
}
コンストラクション関数規則1.クラス名とメソッド名が同じ
2.戻りタイプを定義しない
ジェネレータはnewキーワードを使用するときに呼び出されます.ジェネレータを使用する利点は、オブジェクトの作成に必要な動作を制御できることです.
this
キーワードとは、インスタンスの変数名を指し、それを使用しない場合、パラメータとして入力されるdelimiter
を指す.コンストラクション関数の入力項目がなく、コンストラクション関数の内部に何もない場合はdefaultコンストラクション関数と呼ばれます.クラスにコンストラクション関数が1つもない場合はdefaultコンストラクション関数が自動的に追加されますが、作成したコンストラクション関数がすべて実装されている場合は、コンパイラはdefaultコンストラクション関数を追加しません.
クラスとインスタンスの使用
// 기존 코드
public class AccountingApp {
public static double valueOfSupply = 10000.0;
public static double vatRate = 0.1;
public static double getVAT() {
return valueOfSupply * vatRate;
}
public static double getTotal() {
return valueOfSupply + getVAT();
}
public static void main(String[] args) {
System.out.println("Value of supply : " + valueOfSupply);
System.out.println("VAT : " + getVAT());
System.out.println("Total : " + getTotal());
}
}
// 클래스 활용
class Accounting {
public static double valueOfSupply;
public static double vatRate = 0.1;
public static double getVAT() {
return valueOfSupply * vatRate;
}
public static double getTotal() {
return valueOfSupply + getVAT();
}
}
public class AccountingApp {
public static void main(String[] args) {
Accounting.valueOfSupply = 10000.0;
System.out.println("Value of supply : " + Accounting.valueOfSupply);
System.out.println("VAT : " + Accounting.getVAT());
System.out.println("Total : " + Accounting.getTotal());
}
}
// 인스턴스 활용
class Accounting {
public double valueOfSupply;
public static double vatRate = 0.1;
public Accounting(double valueOfSupply) {
this.valueOfSupply = valueOfSupply;
}
public double getVAT() {
return valueOfSupply * vatRate;
}
public double getTotal() {
return valueOfSupply + getVAT();
}
}
public class AccountingApp {
public static void main(String[] args) {
Accounting a1 = new Accounting(10000.0);
Accounting a2 = new Accounting(20000.0);
System.out.println("Value of supply : " + a1.valueOfSupply);
System.out.println("Value of supply : " + a2.valueOfSupply);
System.out.println("VAT : " + a1.getVAT());
System.out.println("VAT : " + a2.getVAT());
System.out.println("Total : " + a1.getTotal());
System.out.println("Total : " + a2.getTotal());
}
}
1.利用カテゴリ
既存のメソッドのみを使用するコードよりも、クラスを使用してよりクリーンなコードを記述することができます.例とは異なり、コードがより多い場合、
Accounting
のように相互に関連付けられたコードをクラスにグループ化すれば、Accounting.foo
などに容易に分割することができる.2.利用例
valueOfSupply
の値が異なると、計算順序が異なり、クラスのみを書くとコードを整理できません.同じタスクですが、異なる値を使用する必要がある場合は、インスタンスを使用して簡単にクリーンアップできます.例としてAccounting
クラスをそれぞれa1
,a2
とし,パラメータでvalueOfSupply
値に設定して整理した.Reference
この問題について(Javaオブジェクト向けプログラミング), 我々は、より多くの情報をここで見つけました https://velog.io/@chicori3/Javaoopテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol