Javaの抽象化


မင်္ဂလာပါဗျ။ ကျနော်ဒီနေ့ပြောပြပေးသွားမှာက 抽象化အကြောင်းပါ။ သူကတော့ အခြား クラスတွေလိုမျိုး オブジェクトတခုအနေနဲ့အသုံးပြုလို့ရမှာ မဟုတ်ပါဘူး။ ဒါပေမယ့် သူ့ကို အခြားသော クラスတွေကနေ 延長လုပ်ပြီးအသုံးပြုနိုင်မှာပါ။ コード例ကိုကြည့်လိုက်ရအောင်။
abstract class Animal {     //create abstract class

}

class Cat extends Animal{       //create a class with Animal extended
}

public class App {
    public static void main(String[] args) throws Exception {
        System.out.println("hello java");
    }
}
အပေါ်က コードမှာဆိုလို့ရှိရင် ကျနော်တို့ 動物ဆိုတဲ့ 抽象クラスကို 猫ဆိုတဲ့ ရိုးရိုး クラスကနေ 延長လုပ်ပြီးတော့ 動物クラスကိုအသုံးပြုသွားမှာပါ။
abstract class Animal {     //create abstract class
    public void sleep(){
        System.out.println("zzz");
    }
}

class Cat extends Animal{       //create a class with Animal extended
}

public class App {
    public static void main(String[] args) throws Exception {
        Cat arKyel = new Cat();
        arKyel.sleep();
    }
}
အပေါ်က コードမှာဆိုလို့ရှိရင် 動物クラスထဲမှာ ရေးထားတဲ့ 睡眠ဆိုတဲ့ 機能ကို 猫ဆိုတဲ့ クラスကိုသုံးကာ オブジェクトတခုဆောက်ပြီးပြန်ခေါ်လို့ရပါတယ်။ အဲ့ဒီမှာ မေးခွန်းတခုရှိမယ် ထင်ပါတယ်။ 動物ကိုသုံးပြီး オブジェクトဘာလို့မဆောက်တာလဲပေါ့နော်။ ကျနော်တို့ အပေါ်မှာ ပြောထားသလိုမျိုး 抽象クラスက ပုံမှန် クラスတွေလိုမျိုး new Animal();ဆိုပြီး オブジェクトクリエイトလုပ်လို့မရပါဘူး။ အဲ့အတွက်ကြောင့် 猫クラスကနေတဆင့် Arkyel(私の猫の名前です.)ဆိုတဲ့ オブジェクトကို クリエイトပြီး 睡眠機能ကိုခေါ်သုံးတာပါ။ 機能မှမဟုတ်ပါဘူး အခြားသော 抽象クラスထဲမှာရှိတဲ့ ဟာတွေအကုန်လုံးကို 猫クラスကနေတဆင့် ခေါ်သုံးလို့ရမှာပါ။
抽象クラスအကြောင်းပြီးပြီဆိုတော့ 抽象関数အကြောင်းသွားရအောင်။ 抽象関数ဆိုတာက 機能ရှေ့မှာ 抄録ထည့်လိုက်ရုံပါပဲ။
abstract class Animal {     //create abstract class
    public void sleep(){
        System.out.println("zzz");
    }

    abstract public void makeSound();
}

class Cat extends Animal{

}

public class App {
    public static void main(String[] args) throws Exception {
        Cat arKyel = new Cat();
        arKyel.sleep();
    }
}
အပေါ်က コードလိုမျိုး 関数名ရှေ့မှာ 抄録ထည့်လိုက်ရုံနဲ့ 抽象関数ဖြစ်သွားမှာပါ။ ဒါပေမယ့် အပေါ် က コードကို ランကြည့်ရင် エラーတက်နေမှာပါ။ ဘာလို့လဲဆိုတော့ mkesound ()ဆိုတဲ့ 抽象関数က သူ့ကိုပြန်ခေါ်သုံးတဲ့အခါ ဘာလုပ်ရမှန်း မသိလို့ပဲဖြစ်ပါတယ်။ အဲ့တာကြောင့် 関数名အတွက် コードတွေရေးပေးရပါဦးမယ်။ ဒါပေမယ့် သူကလည်း အခြား 機能တွေလိုမျိုး abstract public void makeSound(){\\codes}ဆိုပြီး သွားလုပ်လို့မရပါဘူး။ သူ့ကို 延長လုပ်ထားတဲ့ クラスတွေကနေတဆင့် ပြန်ရေးပေးရမှာပါ။
abstract class Animal {     //create abstract class

    abstract public void makeSound();
}

class Cat extends Animal{

    @Override
    public void makeSound() {
        System.out.println("meow meow");
    }

}

public class App {
    public static void main(String[] args) throws Exception {
        Cat arKyel = new Cat();
        arKyel.makeSound();     //call makeSound function through a object
    }
}
အပေါ်က コードကိုကြည့်မယ်ဆိုရင် マウンドスဆိုတဲ့ 機能ကို 猫クラスမှာ ပြန်ရေးထားတာကိုတွေ့ရမှာပါ။ အဲ့အတွက်ကြောင့် オブジェクトကနေတဆင့် ပြန်ခေါ်သုံးလို့ရသွားမှာပါ။ ဒါပေမယ့် မေးခွန်းတခု ရှိမယ်ထင်ပါတယ်။ マウンド関数ကို 抄録အနေနဲ့ 動物クラスမှာ クリエイトမလုပ်ပဲ 猫クラスမှာရိုးရိုး 機能အနေနဲ့ クリエイトတန်းလုပ်လိုက်လည်း 結果ကတော့တူနေမှာပါ။ အဲ့ဒီမှာတခုပြောချင်တာက 機能ပုံမှန် 機能အနေနဲ့ မသုံးပဲ 抽象関数အနေနဲ့ဘာလို့အသုံးပြုကြတာလဲပေါ့နော်။ ဆိုတော့ ကျနော်တို့ クリエイトလုပ်ထားတဲ့ 動物クラスကိုတချက်ကြည့်လိုက်ရအောင်။ 動物တိုင်းက စကားပြောကြပေမယ့် 型(犬:犬)အပေါ်မူတည်ပြီး တကောင်နဲ့တကောင်တူကြမှာမဟုတ်ပါဘူး။ 動物တိုင်း စကားပြောကြတဲ့ အမှန်တရားကို 抽象関数အနေနဲ့ထည့်ထားတာဖြစ်ပါတယ်။ ပိုပြီးမြင်သာသွားအောင် ドッグတကောင်လောက် クリエイトလုပ်ကြရအောင်။
abstract class Animal {     //create abstract class

    abstract public void makeSound();
}

class Cat extends Animal{

    @Override
    public void makeSound() {
        System.out.println("meow meow");
    }

}

class Dog extends Animal{

    @Override
    public void makeSound() {
        System.out.println("woof woof");
    }

}

public class App {
    public static void main(String[] args) throws Exception {
        Cat arKyel = new Cat();
        arKyel.makeSound();     //call makeSound function through a object

        Dog waTote = new Dog();
        waTote.makeSound();      //call makeSound function through a object
    }
}

ထုံးစံအတိုင်းပဲ ကျနော်တို့ ドッグクラスကို extends Animalလုပ်ပြီး クリエイトလုပ်ကာ マウンドスဆိုတဲ့ 抽象関数ကို クラスထဲမှာ ပြန်ရေးလုပ်လိုက်ပါတယ်။ ပြီးတော့ ドッグクラスကို သုံးပြီး オブジェクトတခု တည်ဆောက်ကာ マウンドスဆိုတဲ့ 抽象関数ကိုပြန်ခေါ်သုံးလို့ရပါပြီ။
ကျနော် ပြောသွားတဲ့ထဲမှာ နားမလည်တာရှိရင် ဒါမှမဟုတ် ဖြည့်စွတ် ပြောချင် တာများရှိရင် ディスカッションထဲမှာ ဝင်ရောက်ရေးသွားလို့ရပါတယ်။ မှားယွင်းနေတာရှိရင်လည်းပြောပြပေးသွားလို့ရပါတယ် ။arigatou :)။