TIL 7|クラスとオブジェクト


これはjavaの定式3 rd Editionをもとに勉強した文章です.

クラスとオブジェクト


1.クラスの定義と用途


クラスの定義

  • オブジェクト
  • が定義されています.
  • テレビ設計図
  • クラスの用途

  • オブジェクトを作成するための
  • オブジェクトの定義

  • 実在するもの.物事または概念
  • TV
  • オブジェクトの用途

  • は、オブジェクトの機能および属性
  • に依存する.

    2.オブジェクトとインスタンス


    ≪インスタンス|Instance|emdw≫

  • クラスから作成されたオブジェクト
  • インスタンス化(クラスのインスタンス化)

  • クラスからオブジェクトを作成するプロセス
    クラス--------------->インスタンス(オブジェクト)
  • 3.オブジェクトのコンポーネント-属性と機能

  • クラスは、オブジェクトのすべての属性と機能を定義します.
    クラスからオブジェクトを作成すると、クラスで定義された属性と機能を持つオブジェクトが作成されます.
  • プロパティ(property)


    =メンバー変数(member variable)
    =属性(attribute)
    =フィールド(field)
    =ステータス(state)
  • テレビのサイズ、長さ、高さ、色、音量、チャンネルなど
  • .

    機能(function)


    =メソッド(method)
    =関数(function)
    =動作(behavior)
  • テレビのオン、オフ、拡張、ダウン、チャンネル変更
  • 4.インスタンスの作成と使用


    [Code] Tvtest

    class Tv {
        // Tv의 속성 (멤버변수)
        String color;   // 색상
        boolean power;  // 전원상태 (on/off)
        int channel;    // 채널
    
        // Tv의 기능 (메서드)
        void power()    { power = !power; }     // TV를 켜거나 끄는 기능을 하는 메서드
        void channelUp()    { ++channel; }      // TV의 채널을 높이는 기능을 하는 메서드
        void channelDown()  { --channel; }      // TV의 채널을 낮추는 기능을 하는 메서드
    }
    
    public class Main {
        public static void main(String[] args) {
            Tv t;               // Tv인스턴스를 참조하기 위한 변수 t를 선언
            t = new Tv();       // Tv인스턴스를 생성한다.
            t.channel = 7;      // Tv인스턴스의 멤버변수 channel의 값을 7로 한다.
            t.channelDown();    // TV인스턴스의 메서드 channelDown()을 호출한다.
            System.out.println("현재 채널은 " + t.channel + " 입니다.");
        }
    }

  • Tv t;
    Tvクラスタイプの参照変数tを宣言します.
    メモリには、参照変数tに空間が設けられている.
    インスタンスは作成されていないため、参照変数を使用して操作することはできません.

  • t = new Tv();
    演算子newによってメモリの空き領域にTvクラスのインスタンスが作成されます.(アドレス割り当て)
    メンバー変数は、各データ型に対応するデフォルト値に初期化されます.
  • colorは参照色なのでnull
  • powerはbooleanなのでfalse
  • channelはintであるため、0以降に付与演算子(=)によって生成されるオブジェクトのアドレス値は参照変数tに格納される.
    Tvインスタンスには、参照変数tを使用してアクセスできるようになりました.
    インスタンスを処理するには、参照変数を使用する必要があります.

  • t.channel = 7;
    7は、参照変数tアドレスのインスタンスのメンバー変数チャネルに格納される.

  • t.channelDown();
    参照変数tが参照するTvインスタンスのchannelDownメソッドを呼び出します.
    channelDown()は、channelの値が7~6であることを示します.
  • インスタンスは参照変数のみで処理できます.
    参照変数のタイプは、インスタンスのタイプと一致する必要があります.

    [Code] Tvtest2

    class Tv {
        // Tv의 속성 (멤버변수)
        String color;   // 색상
        boolean power;  // 전원상태 (on/off)
        int channel;    // 채널
    
        // Tv의 기능 (메서드)
        void power()    { power = !power; }     // TV를 켜거나 끄는 기능을 하는 메서드
        void channelUp()    { ++channel; }      // TV의 채널을 높이는 기능을 하는 메서드
        void channelDown()  { --channel; }      // TV의 채널을 낮추는 기능을 하는 메서드
    }
    
    public class Main {
        public static void main(String[] args) {
            Tv t1 = new Tv();   // Tv t1; t1 = new Tv(); 를 한 문장으로 가능
            Tv t2 = new Tv();
            System.out.println("t1의 channel값은 " + t1.channel + "입니다.");
            System.out.println("t2의 channel값은 " + t2.channel + "입니다.");
    
            t1.channel = 7;
            System.out.println("t1의 channel값을 7로 변경하였습니다.");
    
            System.out.println("t1의 channel값은 " + t1.channel + "입니다.");
            System.out.println("t2의 channel값은 " + t2.channel + "입니다.");
        }
    }
    同じクラスから作成された場合でも、各インスタンスのプロパティ(メンバー変数)は異なる値を保持できます.
    メソッドの内容は、すべてのインスタンスについて同じです.

    [Code] Tvtest3

    class Tv {
        // Tv의 속성 (멤버변수)
        String color;   // 색상
        boolean power;  // 전원상태 (on/off)
        int channel;    // 채널
    
        // Tv의 기능 (메서드)
        void power()    { power = !power; }     // TV를 켜거나 끄는 기능을 하는 메서드
        void channelUp()    { ++channel; }      // TV의 채널을 높이는 기능을 하는 메서드
        void channelDown()  { --channel; }      // TV의 채널을 낮추는 기능을 하는 메서드
    }
    
    public class Main {
        public static void main(String[] args) {
            Tv t1 = new Tv();   // Tv t1; t1 = new Tv(); 를 한 문장으로 가능
            Tv t2 = new Tv();
            System.out.println("t1의 channel값은 " + t1.channel + "입니다.");
            System.out.println("t2의 channel값은 " + t2.channel + "입니다.");
    
            t2= t1;
            t1.channel = 7;
            System.out.println("t1의 channel값을 7로 변경하였습니다.");
    
            System.out.println("t1의 channel값은 " + t1.channel + "입니다.");
            System.out.println("t2의 channel값은 " + t2.channel + "입니다.");
        }
    }

  • t2 = t1;
    t 1は、インスタンスのアドレスを格納する参照変数である.
    この文を実行すると、t 2が持つ値は失われ、t 1に格納された値はt 2に保存されます.
    t 2はまた、t 1参照のインスタンスを参照する.
    t 2が参照していたインスタンスは使用できなくなります.
  • 参照変数には1つの値(アドレス)しか格納できません.
    複数の参照変数が1つのインスタンスを指すことができます(参照).
    1つの参照変数で複数のインスタンスを指すことは不可能です.

    5.オブジェクトの整列


    大量のオブジェクトを処理する必要がある場合に使用します.
    オブジェクトのアドレスは、オブジェクト配列ではなくオブジェクト配列に格納されます.
    実際、オブジェクト配列は、参照変数を組み合わせた参照変数配列である.
    Tv[] tvArr = new Tv[3];	// 길이가 3인 Tv타입의 참조변수 배열
    
    // 객체를 생성해서 배열의 각 요소에 저장
    tvArr[0] = new Tv();
    tvArr[1] = new Tv();
    tvArr[2] = new Tv();

    [Code] Tvtest4

    class Tv {
        // Tv의 속성 (멤버변수)
        String color;   // 색상
        boolean power;  // 전원상태 (on/off)
        int channel;    // 채널
    
        // Tv의 기능 (메서드)
        void power()    { power = !power; }     // TV를 켜거나 끄는 기능을 하는 메서드
        void channelUp()    { ++channel; }      // TV의 채널을 높이는 기능을 하는 메서드
        void channelDown()  { --channel; }      // TV의 채널을 낮추는 기능을 하는 메서드
    }
    
    public class Main {
        public static void main(String[] args) {
            Tv[] tvArr = new Tv[3];
    
            for(int i=0; i < tvArr.length; i++) {
                tvArr[i] = new Tv();
                tvArr[i].channel = i+10;
            }
    
            for(int i=0; i <tvArr.length; i++) {
                tvArr[i].channelUp();
                System.out.printf("tvArr[%d].channel=%d%n", i, tvArr[i].channel);
            }
        }
    }

    6.クラスの別の定義


    1)クラス-データと関数のマージ


    データストレージ形式プログラミング言語におけるデータ処理の発展過程
    変数-->配列-->構造-->クラス
    変数=データを格納するスペース
    配列=同じタイプの複数のデータを1つのセットとして格納できるスペース.
    構造体=タイプを考慮することなく、複数の相互に関連付けられたデータを1つのセットの空間として格納できます.
    クラス=データと関数の結合(構造体+関数)
    変数と関数が有機的に結びつき,作業が簡単明瞭になる.

    2)クラス-ユーザー定義のタイプ(ユーザー定義のタイプ)


    カスタムタイプ=プログラマは、相互に関連付けられた変数を組み合わせて、新しい変数をタイプとして追加します.
    class Time {
        int   hour;
        int   minute;
        float second;
    }
    時間クラスを定義し、格納された時間、分、秒の3つの変数をメンバー変数とします.
    より正確なデータを保持できます.