Java ကိုေလ့လာရာတြင္ ဦးစြာေတြ႕ၾကဳံရမည့္ အခက္အခဲမ်ားကေတာ့ Classဆိုတာဘာလဲ၊ ၿပီးေတာ့ Instanceဆိုတာဘာလဲ ဟုေခၚေသာ ေမးခြန္းမ်ားျဖစ္ၾကပါသည္။ ဤ Javaကိုအျမန္ဆုံးေလ့လာျခင္း အခန္းဆက္ ဘေလာ့ထဲမွာေတာ့ Object Oriented Programming ရဲ့အျမင္က မဟုတ္ပဲ၊ Memoryေပၚက Program တစ္ခုေပၚတြင္ တည္ရွိေသာ အျမင္ပိုင္းဆိုင္ရာ ရွု႔ေထာင့္မွ Classနဲ႔ Instance တို႔ရဲ့ ကြဲျခားခ်က္ေတြကို ေလ့လာသြားပါမည္။
Class ဆိုသည္မွာ အဲ့ဒီအစုအစည္းရဲ့ တန္ဖိုးေတြကိုသတ္မွတ္ရန္အတြက္ အခ်က္အလက္မ်ား (Field)နဲ႔၊ လုပ္ေဆာင္ခ်က္ (Method)မ်ားကို စုစည္းထားတဲ့ အစုအစည္းတစ္ခုလို႔သတ္မွတ္ထား၏။ ဤရွင္းလင္းခ်က္ကို ၾကည့္႐ုံျဖင့္ Class နဲ႔ Instance ကိုကြဲျပားၿပီး သိရွိနိုင္မည္မဟုတ္ေပ။ ဤသို႔ဆိုလၽွင္ Class နဲ႔ Instance ကြာျခားခ်က္သည္ အဘယ္နည္း ဟုေမးစရာရွိပါမည္။ Java ႏွင့္ ပတ္သက္ေသာ စာအုပ္ေပါင္းမ်ားစြာတြင္ နားလည္လြယ္ေစရန္ နည္းအမ်ိဳးမ်ိဳးျဖင့္ ရွင္းျပထားေလ့ရွိ၏။ ကၽႊန္ေတာ္အႏွစ္အသက္ဆုံး အေျဖမွာ ကြန္ပ်ဴတာ Memory အေပၚတြင္ ျဖစ္ေပၚလာပုံ၏ ဒါမွမဟုတ္ ဇာစ္ျမစ္ ဟာကြဲျပားျခားနားသည္ ဟူေသာ ရွင္းလင္းခ်က္ပဲ ျဖစ္ပါသည္။
Class ရဲ့ ဇာစ္ျမစ္သည္ .java ဖိုင္ကို Compileလုပ္ၿပီး၊ ရရွိလာတဲ့ .class ဖိုင္ ျဖစ္ပါသည္။ Program တစ္ခုမွ Class ကိုဆက္သြယ္ အသုံးျပဳမည္ ဆိုလၽွင္ .class ကိုဖတ္ယူၿပီး Memoryေပၚတြင္ Class အျဖစ္ ေနရာခ်ထားပါမည္။ တဖန္ Instance သည္ Memoryေပၚတြင္ တည္ရွိၿပီးျဖစ္ေသာ Class ကိုအသက္သြင္း၍ Memory ေပၚမွအျခားေသာေနရာတြင္ ျဖစ္ေပၚလာေစပါသည္။ မွတ္ရန္အခ်က္မွာ Classသည္ .class ဖိုင္တစ္ခုမွ တစ္ႀကိမ္တည္းသာ ဖတ္ယူေမြးဖြားၿပီး၊ Instanceသည္ Memory ေပၚတြင္တည္ရွိၿပီးျဖစ္ေသာ Class မွ Memory ရွိသေလာက္ အႀကိမ္ႀကိမ္ ကူးယူေမြးဖြားနိုင္ျခင္း ျဖစ္ေပသည္။
အျမန္မွတ္ခ်က္
Class ႏွင့္ Instanceတို႔သည္၊ တန္ဖိုးႏွင့္ လုပ္ေဆာင္ခ်က္မ်ားကို စုစည္းထားသည့္အခ်က္မွာ တူညီၾကေပသည္။ သို႔ရာတြင္ Class သည္ .class ဖိုင္မွ တစ္ႀကိမ္တည္းသာ ဖတ္ယူေမြးဖြားၿပီး၊ Instanceသည္ Memoryေပၚတြင္တည္ရွိေသာ Classမွတစ္ဆင့္ အႀကိမ္ႀကိမ္ ကူးယူေမြးဖြားနိုင္ျခင္း တို႔ကကြဲျပားခ်က္တို႔ ျဖစ္ၾကပါသည္။
သည္လိုဆိုရင္Classနဲ႔Instanceကို ဘယ္လိုခြဲျခားၿပီး အသုံးခ်သင့္တယ္ဆိုတာကို လက္ေတြ႕Codeကိုေရးၿပီး ေလ့လာၾကည့္ရေအာင္။ ေအာက္ပါ နမွုနာေတြကိုၾကည့္ၾကည့္ၾကပါ။ အသီးသီး class A နဲ႔
Bကိုေရးသားထားၿပီး TestClassမွေန ေခၚယူအသုံးျပဳထားပါသည္။ class A နဲ႔ Bတို႔ရဲ့ ကြဲျပားခ်က္ကိုေလ့လာၾကည့္ၾကပါဆို႔။
class A
public class A { static int i; static int getTwice() { return i*2; } }
class B
public class B { int i; public int gatTwice() { return i * 2; } }
Class AေရာBပါ၊ ကိုယ္စီ Member Fieldအေနနဲ႔ int i ကိုပိုင္ဆိုင္ၿပီး၊ လုပ္ေဆာင္ခ်က္
int တန္ဖိုးကိုျပန္ေပးတဲ့ getTwice methodကို ပိုင္ဆိုင္ၾကပါတယ္။ class A ရဲ့ i နဲ႔ getTwice() ဟာ
Classကိုတိုက္ရိုက္ဆက္သြယ္ၿပီး အသုံးျပဳနိုင္ဖို႔အတြက္
အေရွ႕မွာ staticဆိုၿပီ သတ္မွတ္ခ်က္ကို ေရးသားရပါတယ္။
အဲ့ဒီလိုေရးသားထားတဲ့ Fields ေတြနဲ႔ method ေတြကို
static field, static methodဆိုၿပီး ေခၚေဝၚေလ့ရွိပါတယ္။
တဖန္ class B မွာရွိတဲ့ field နဲ႔ method ေတြရဲ့ေရွ႕မွာ static
ဆိုတာမေရးသားထားပါဘူး။ အဲ့ဒါဟာ class B မွတဆင့္ ပြားယူနိုင္တဲ့
instanceေတြမွတဆင့္ အသုံးျပဳေစနိုင္ဖို႔အတြက္ ျဖစ္ပါတယ္။ အဲ့ဒီအတြက္
instance field, instance method ဆိုၿပီးေခၚေဝၚေလ့ ရွိပါတယ္။
class Test
public class Test { public static void main(String [] args) { A.i = 10; System.out.println("Twice Of Class A : " + A.getTwice()); B b = new B(); b.i = 10; System.out.println("Twice of Instance b : " + b.gatTwice()); } }
Test Classထဲမွာေတာ့ class A နဲ႔ B တို႔ရဲ့ အသုံးျပဳပုံေတြကို ေဖာ္ျပေပးေနပါတယ္။
A.i ဆိုတဲ့ class field i ရဲ့တန္ဖိုးကို 10ဆိုၿပီးသတ္မွတ္ေနပါတယ္။
ၿပီးေသာအခါ A.getTwice()ဆိုၿပီး A class ရဲ့ getTwiceလုပ္ေဆာင္ခ်က္ကို
ေခၚယူၿပီး system consoleမွာေရးသားေစပါတယ္။ A class ရဲ့ i နဲ႔ getTwice
ကို static အေနနဲ႔ သတ္မွတ္ထားတဲ့အတြက္ class A မွ တိုက္ရိုက္အသုံးခ်နိုင္ျခင္း
ျဖစ္ပါတယ္။ တဖန္ class B ရဲ့ instance b ကို B b = new B(); ဆိုၿပီး သတ္မွတ္ေပးေနပါတယ္။
ေနာက္တစ္ေၾကာင္းတြင္ b.i = 10ဆိုၿပီး instance b ရဲ့ i ရဲ့တန္ဖိုးဟာ 10 ျဖစ္ပါတယ္
လို႔သတ္မွတ္ေနျပန္တယ္။ ဆက္ၿပီး instance methodျဖစ္တဲ့ b.getTwiceကိုေခၚ ၿပီး
System Consoleမွာ ေရးသားေနပါတယ္။ b instance မွေနအသုံးျပဳနိုင္ရန္ အတြက္
သူ႔ရဲ့ Field နဲ႔ methodရဲ့ေရွ႕မွာ staticဆိုတာ မေရးသားထားပါဘူး။ အဲ့ဒီလို
instance field နဲ႔ instance method ေတြရွိတဲ့အတြက္ B classရဲ့ instance
b မွတဆင့္ အသုံးျပဳနိုင္ျခင္းျဖစ္ပါတယ္။
အျမန္မွတ္ခ်က္ Class ရဲ့ static field နဲ႔ static methodေတြဟာ memory ေပၚမွာ တစ္ႀကိမ္တည္းသာ
ျဖစ္တည္တယ္ဆိုတဲ့ ထူးျခားခ်က္ကို အသုံးခ်ၿပီး Class field နဲ႔
လုပ္ေဆာင္ခ်က္ ေတြကိုေရးသားသင့္ပါသည္။ တနည္းေတြးၾကည့္ၾကရေအာင္။ class A ကိုေရာ instance မလုပ္နိုင္ဘူးလား။
လုပ္နိုင္ပါတယ္။ ဒါေပမယ့္ class A မွာ static field နဲ႔ static method
သာပိုင္ဆိုင္ၿပီး insatance fieldေတြ methodေတြ မပါတဲ့အတြက္
သူ႔ရဲ့ instance ကိုပြားယူလုပ္ေအာင္ အဓိပၸါယ္မရွိနိုင္ပါဘူး။
ဒါျဖင့္ Classလည္းအဲလုပ္လို႔ရတယ္၊ instanceလည္းအလုပ္လုပ္လို႔ရတယ္။
ဘာလို႔ instanceကလိုအပ္ရတာလဲဆိုတာကို စဥ္းစားၾကည့္ၾကရေအာင္။
ေအာက္ပါ Personဆိုတဲ့ Classကိုၾကည့္ပါ။ name နဲ႔ ageဆိုတဲ့ instance
fieldကိုပိုင္ဆိုင္ၿပီး introdude() ဆိုတဲ့ instance methodရယ္
Person(String name, int age)ဆိုတဲ့ constructor ကိုပိုင္ဆိုင္ပါတယ္။
Constructorဟာ instance ေတြကို ပြားယူတဲ့အခါမွာ အျမဲတမ္းေခၚယူခံရမည့္
လုပ္ေဆာင္ခ်က္တစ္ခုျဖစ္ပါတယ္။ Classမွတဆင့္ instanceကို လုပ္ယူတဲ့အခါမွာ
လုပ္ေဆာင္ရမည့္ လုပ္ေဆာင္ခ်က္ဆိုရင္လည္း မမွားနိုင္ပါဘူး။ သည္Person Constructor ကေတာ့ String name နဲ႔ int age ကို Argumentအေနနဲ႔
လက္ခံရယူၿပီး၊ instance member ျဖစ္ၾကတဲ့ name နဲ႔ ageမွာ အသီးသီး
အစားထိုးသတ္မွတ္ေနပါတယ္။ ၿပီးေတာ့ လုပ္ေဆာင္ခ်က္ introduceထဲမွာေတာ့
သူ႔ရဲ့ name နဲ႔ ageကို System Consoleမွာ ေရးသားျပေနပါတယ္။
class Person
public class Person { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } public void introduce() { System.out.print("My name is " + name); System.out.println(" and I am " + age + "years old."); } }
ေအာက္ပါ Test class ထဲမွာေတာ့ Person ရဲ့ a instance နဲ႔ b instance ကိုလုပ္ယူၿပီး အသီးသီးရဲ့ introduceလုပ္ေဆာင္ခ်က္ကို လုပ္ေဆာင္ေစပါတယ္။ classTest
public class Test { public static void main(String [] args) { Person a = new Person("Aung Aung", 30); Person b = new Person("Thida", 24); a.introduce(); b.introduce(); } }
အထက္ပါ Test Classကို Run ၾကည့္မည္ဆိုပါက System Console
မွာ ေအာက္ပါအတိုင္း စာေၾကာင္းမ်ားက ထြက္ေပၚလာပါလိမ့္မည္။ My name is Aung Aung and I am 30years old.
My name is Thida and I am 24years old.
အထက္ပါ နမွုနာကိုၾကည့္ျခင္းအားျဖင့္ Classတစ္ခုမွ
မတူညီေသာတန္ဖိုးမ်ားႏွင့္ မတူညီေသာ Instanceမ်ားကို
အႀကိမ္ႀကိမ္ လုပ္ယူနိုင္တယ္ ဆိုတာကို သိရွိနိုင္ပါတယ္။
အျမန္မွတ္ခ်က္ Constructorမွတဆင့္ ပုံစံခ်ယူျခင္းအားျဖင့္ Class တစ္ခုမွေန Instanceကို အႀကိမ္ႀကိမ္ပြားယူနိုင္ပါသည္။ အလြယ္ဆုံးေျပာရမည္ဆိုလၽွင္ Classနဲ႔ Instance ဟာ ဒယ္အိုးနဲ႔ ဘိန္းမုန႔္လိုပါပဲ။ ဒယ္အိုးတစ္လုံးလိုပဲ
Classဟာတစ္ခုတည္းရွိၿပီး၊ ဒယ္အိုးထဲမွာပါဝင္တဲ့ အစာေတြကို အမ်ိဳးမ်ိဳးေျပာင္းထည့္ၿပီး၊
ေထာပါတ္ဘိန္းမုန႔္ေတြ ရိုးရိုးဘိန္းမုန႔္ေတြကို ဖုတ္ယူနိုင္သလို၊ Classတစ္ခုမွ
တန္ဖိုးအမ်ိဳးမ်ိဳးေျပာင္းလည္းၿပီး Instanceေတြကို အမ်ိဳးမ်ိဳးလုပ္ယူနိုင္ပါတယ္။
Class နဲ႔ Instanceတို႔ရဲ့ ကြဲျခားခ်က္ကိုသိရွိၿပီး Javaဆန္တဲ့ Codeမ်ားကိုေရးသားသြားၾကပါဆို႔။
No comments:
Post a Comment