[သင္ခန္းစာ ၁၃] Package အေၾကာင္းနားလည္ေစရန္

[သင္ခန္းစာ ၁၃] Package အေၾကာင္းနားလည္ေစရန္

အခုအခ်ိန္ကစျပီး Package နဲ ့ပတ္သက္ျပီး မိတ္ဆက္ေပးေပါ့မယ္။

Package အေၾကာင္းကို ေလ့လာျခင္းအားျဖင့္ ရွိေနျပီးသား class ေတြကို ေခၚျပီးအသံုးျပဳဖို ့အတြက္ျပီးျပည့္စံုသြားပါျပီ။
အရင္ကျပီးခဲ့တဲ့သင္ခန္းစာအတိုင္းပါပဲ class ေတြအမ်ားၾကီးအသံုးျပဳျခင္းရဲ ့ေကာင္းတဲ့အခ်က္အလက္ေတြက္ို နားလည္နိုင္ပါတယ္။

Class ေတြကိုအမ်ားၾကီးသံုးတဲ့အခါမွာ class ေတြ ရွဳပ္ေထြးသြားပါလိမ့္မယ္။ အဲဒါေၾကာင့္ သူတို ့ေတြကို Package သံုးျပီး ဘယ္လိုအစီအစဥ္လုပ္မလဲဆိုတာ ေလ့လာၾကည့္ရေအာင္။

Package ဆိုတာ ဘာလဲ?

Package အေၾကာင္းကို ေလ့လာဖူးသလား။

အၾကမ္းဖ်င္းအားျဖင့္ေျပာရင္ Package ဆိုတာJava Classes ေတြအမ်ားၾကီးကိုအမ်ိဳးအစားခြဲဖို ့နည္းလမ္းတစ္ခုဘဲျဖစ္ပါတယ္။

ဥပမာအားျဖင့္ Class တစ္ခု(class ရဲ ့နာမည္ကို MyClass လို ့ယူဆၾကပါစို ့) MyClass ဆိုတဲ့ Java Class ရဲ ့ ထိပ္ဆံုး မွာ “package foo;” လို ့ေရးျခင္းအားျဖင့္ MyClass က Package foo ကိုပိုင္ဆိုင္သြားပါျပီ။

ဆန္ ့က်င္ဘက္အေနနဲ ့ေျပာရရင္ အျခားPackage တစ္ခုမွာရွိေနတဲ့ class ကိုယူသံုးခ်င္တယ္ဆိုရင္ “import” ဆိုတဲ့စာေၾကာင္းကုိ အသံုးျပဳရပါတယ္။ မတူညီတဲ့ Package မွာရွိတဲ့ class ကို ယူသံုးခ်င္တယ္ဆိုရင္ “import” ဆိုတဲ့စာေၾကာင္းကို မျဖစ္မေနေၾကျငားရပါတယ္။

ဥပမာ foo package ထဲမွာရွိတဲ့ MyClass ကုိ ယူသံုးခ်င္တဲ့အခါမွာ ေအာက္မွာေဖာ္ျပထားတဲ့အတိုင္းေၾကျငာေပးဖို ့လိုအပ္ပါတယ္။

၁. Object ဆိုတာဘာလဲ?

အခုကစျပီး ရွင္းျပပါ့မယ္ ငါတို ့ရဲ့အလုပ္ကတုိးလာတဲ့အတြက္အေၾကာင့္ Package ကအသံုးမ၀င္ဘူးလို ့ထင္ေကာင္းထင္မိလိမ့္မယ္။
ဒါေၾကာင့္ Package ကိုအသံုးျပဳရျခင္းရဲ့ေကာင္းက်ိဳးကဘာလဲဆိုတာ ေလ့လာၾကည့္ရေအာင္။

Package သံုးျခင္းရဲ့အားသာခ်က္ေတြကို အၾကမ္းဖ်င္းအားျဖင့္-
၁. ဆက္ႏြယ္ေနတဲ့ classes ေတြကို Package တစ္ခုတည္းမွာ စုစည္းျခင္းအားျဖင့္ class ေတြကိုclassify လုပ္ျခင္း rearrange လုပ္ျခင္းေတြမွာ လြယ္ကူပါတယ္။
၂. Namespace ကိုသံုးျခင္းျဖင့္ class name ထပ္ျခင္းမွ ကာကြယ္နိုင္ပါတယ္။
အခုဆိုရင္ ဒီရွင္းျပခ်က္ေတြက မင္းအတြက္ ခက္ခဲေကာင္းခက္ခဲေနမယ္လို ့ထင္ပါတယ္။ စကားလံုးရိုးရိုးေလးေတြနဲ ့ျပန္ျပီးရွင္းျပပါ့မယ္။

Class ကို အမ်ိဳးအစားခြဲျခင္းႏွင့္ အစီအစဥ္ခ်ျခင္း

လက္ေတြ ့က်တဲ့ system တည္ေဆာက္မွဳေတြမွာ Java class ေတြကို ဆယ္ခု ဒါမွမဟုတ္ အခုတစ္ရာ အထိ ေဆာက္ေလ့ရွိတယ္။

ေယဘုယ်အားျဖင့္ class ေတြကို နွစ္ခုထက္ပိုျပီးေဆာက္မယ္ဆိုရင္ နာမည္တူေပးျပီးေဆာက္ဖို ့ ဆိုတာမျဖစ္နိုင္ပါဘူး။ ဒါေပမဲ့ တူညီတဲ့ class ေတြအမ်ားၾကီးရွိခဲ့မယ္ဆိုရင္ တူညီတဲ့ class name ေတြကို စစ္ဖို ့က ခက္ခဲပါတယ္။

Package ကို သံုးျခင္းအားျဖင့္ နာမည္တူclass name ေပးလို ့မရဘူးဆိုတဲ့ ျပႆနာကိုေျဖရွင္းနိုင္ပါတယ္။ မတူညီတဲ့ Packages ေတြထဲမွာ class name ေတြကို နာမည္တူေပးနိုင္ဖို ့ခြင့္ျပဳထားပါတယ္။

အဲဒီလို Package ကို သံုးျခင္းျဖင့္ system တစ္ခုကို multiple members နဲ ့တည္ေဆာက္ရမွာ အက်ိဳးေက်းဇူးမ်ားပါတယ္။ ဥပမာဆိုပါစို ့ Person A မွာ “package-a” ဆိုတဲ့ package နဲ ့ Person B မွာ “package-b” ဆိုတဲ့ Package ရွိတယ္ဆိုရင္ သင့္အေနနဲ ့ “State” ဆိုတဲ့ Class ကို package နွစ္ခုစလံုးမွာ နာမည္တူေပးျပီးေဆာက္လည္းျပႆနာမရွိေတာ့ပါဘူး။

ဒါေပမဲ့ Person A ႏွင့္ Person B က packages ထဲမွာရွိတဲ့ class name ေတြက overlap မျဖစ္ဖို ့ဂရုစိုက္ရပါ့မယ္။

Package ကို နာမည္ေပးတဲ့အခါမွာ domain name ကို ေျပာင္းျပန္ယူျပီးေပးေလ့ရွိပါတယ္။ အဲဒီလိုဘာေၾကာင့္ေပးတာလဲဆိုရင္ သင့္ရဲ ့Package name ကအမ်ားနဲ ့မတူညီဘဲတစ္ခုတည္း ရွိဖို ့အတြက္ေၾကာင့္ျဖစ္ပါတယ္။

ကြ်န္ေတာ္တို ့ Acroquest မွာဆိုရင္ Package name ကို jp.co.Acroquest ဆိုျပီးေပးပါတယ္။ ဘာေၾကာင့္လဲဆိုရင္ Acroquest ရဲ ့domain name က acroquest.co.jp ျဖစ္ပါတယ္။

ဥပမာ

jp.co.Acroquest.project1
jp.co.Acroquest.project2

ဒါေၾကာင့္ ဒီလို နာမည္ေပးနည္းအတုိင္းေပးမယ္ဆိုရင္ package နာမည္တူမွာကိုစိုးရိမ္စရာမလိုေတာ့ပါဘူး

၂ . Package ကို အသံုးျပဳျခင္းစည္းကမ္း

Package ကို သံုးျပီး program တစ္ခုကို တည္ေဆာက္မယ္ဆိုရင္ မျဖစ္မေနလိုက္နာရမယ့္ စည္းကမ္းတစ္ခုရွိပါတယ္

Packages ထဲမွာ အသံုးျပဳတဲ့ class files ေတြကို package name နဲ့ တူညီတဲ့ folder name ထဲမွာ ထားရပါမယ္။
ဒီအခ်က္ကေတာ့ file ရဲ့နာမည္ နွင့္ Java class ရဲ့နာမည္က တူညီရမယ္ဆိုတဲ့အခ်က္နဲ့တူပါတယ္။

ဥပမာ MyAp က mypackage ဆိုတဲ့ package ရဲ့class ျဖစ္တယ္ဆိုရင္ MyAp က mypackage ဆိုတဲ့ folder ရဲ့အထဲမွာ ရွိရပါမယ္။ class file ရဲ့နာမည္က MyAp.class ျဖစ္ပါတယ္။

ဒါ့အျပင္ မင္းက mypackage.sub လို ့ေခၚတဲ့ package တစ္ခုကိုတည္ေဆာက္မယ္ဆိုရင္ မင္းက mypackage folder ေအာက္မွာ sub ဆိုတဲ့ folder တည္ေဆာက္ဖို ့လိုအပ္ပါတယ္။
ျပီးေတာ့ Package နာမည္အစဥ္အတိုင္း folder ကိုတည္ေဆာက္ဖို ့လိုပါတယ္။

Mypackage folder ကဘယ္မွာတည္ရွိတယ္ဆိုတာအေရးမၾကီးပါဘူး mypackage ရွိတဲ့ folder ကို လမ္းေၾကာင္းေပးလိုက္ရင္ရပါျပီ။

ဒါကိုနည္းနည္းခက္တယ္လို ့ထင္ပါသလား ? ထင္သေလာက္ေတာ့သိပ့္မခက္ခဲပါဘူး။ package အဆင့္ဆင့္နွင့္ folder ပံုစံကုိ ဒီနည္းအတုိင္း ျပဳလုပ္ျခင္းအားျဖင့္ source file ေတြကို folder ေတြထဲ့မွာ ခြဲထားျခင္းအားျဖင့္ ေနာက္တစ္ခ်ိန္ သူတို ကို အလြယ္တကူစီစဥ္လို ့ရပါတယ္။

၃. ဥပမာ Package

ကဲ package ကို ၾကိဳးစားျပီး သံုးၾကည့္ရေအာင္။

List 1-3 အတိုင္း MyMain, MyAp and MySub ဆိုတဲ့ class သံုးခုျပဳလုပ္ၾကရေအာင္။
List 1 - MyMain.java

import mypackage.MyAp;
import mypackage.sub.SubAp;

public class MyMain
{
public static void main(String[] args)
{
MyAp ap = new MyAp();
SubAp subap = new SubAp();
ap.print();
subap.print();
}
}

List 2 - MyAp.java

package mypackage;

public class MyAp
{
public MyAp()
{
System.out.println("Invoke mypackage.MyAp!");
}

public void print()
{
System.out.println("mypackage.MyAp.print()!");
}
}

List 3 - SubAp.java

package mypackage.sub;

public class SubAp
{
public SubAp()
{
System.out.println("Invoke mypackage.sub.SubAp!");
}

public void print()
{
System.out.println("mypackage.sub.SubAp.print()!");
}
}

အထက္မွာရွင္းျပခဲ့တဲ့ ပံုစံအတုိင္း source file တစ္ခုျခင္းကို folder ထဲမွာျပဳလုပ္ၾကရေအာင္။

C:\work ရဲ့ေအာက္မွာ MyMain.java ကိုထားပါ။ MyAp.java က mypackage ဆိုတဲ့package ရဲ့ class ျဖစ္ပါေၾကာင့္ mypackage ဆိုတဲ့ folder ေအာက္မွာ MyAp.java ကိုထားပါ။ SubAp.java က mypackage.sub ဆိုတဲ့package ရဲ့ class ျဖစ္ပါေၾကာင့္ sub ဆိုတဲ့ folder ေအာက္မွာ SubAp.java ကိုထားပါ။

lesson13a

Source file က အသံုးျပဳဖို ့အဆင္သင့္ျဖစ္ျပီဆိုရင္ source file ကို compile လုပ္ပါ။

တကယ္လို ့ source files ေတြက folder ေတြမွာ ပါေနခဲ့မယ္ဆိုရင္ main ဒါမွမဟုတ္ ေအာက္မွာေဖာ္ျပထားတဲ့အတိုင္း folder တစ္ခုျခင္းစီကုိ compile လုပ္ဖို ့လိုအပ္ပါတယ္။
(အခုcompile လုပ္ၾကည့္ၾကမလား)

lesson13b
lesson13c

(မင္း class သံုးခုကို compile လုပ္ၾကည့္ေပးပါလား)

တကယ္လို ့class file တစ္ခုျခင္းက ေအာက္ေဖာ္ျပ ပါ folder ပံုစံအတိုင္း ရွိေနခဲ့မယ္ဆိုရင္ေတာ့ compile လုပ္တာေအာင္ျမင္ပါျပီ။

lesson13d

Class သံုးခုကို run လုပ္ၾကည့္ရေအာင္။
Execution class က main method ရွိတဲ့ MyMain class ျဖစ္ရပါ့မယ္။

lesson13e

မင္း program ေရာေကာင္းေကာင္းအလုပ္လုပ္ရဲ့လား

MyMain class ရဲ့ main method ဧ။္ ပံုစံကိုေလ့လာၾကည့္ရေအာင္။ ပထမဆံုး MyAp class ဆိုတဲ့ class အသစ္တစ္ခုျပဳလုပ္ၾကမယ္။ Class တစ္ခုတည္ေဆာက္တဲ့အခါမွာ တူညီတဲ့ package ေအာက္မွာ java က new class ကိုရွာတယ္။ MyAp class နွင့္ MyMain class ကမတူညီတဲ့ package ထဲမွာရွိေနေသာ္လည္းဘဲ သူတို ့ကို import လုပ္ေပးဖို ့လုိအပ္ပါတယ္။

import mypackage.MyAp;

import” စာေၾကာင္းေၾကာင့္ mypackage folder ေအာက္မွာရွိတဲ့ MyAp.class ကို Java ကေတြ ့နိုင္ပါတယ္။

ဒုတိယအေနနဲ ့ SubAp clas ဆိုတဲ့ class အသစ္ကုိ အသစ္တည္ေဆာက္ပါ့မယ္။
SubAp class အတြက္ဆိုရင္ MyAp class အတိုင္းဘဲ import စာေၾကာင္းကို SubAp class မွာေရးျခင္းအားျဖင့္ Java က MyAp ကိုသိျပီး mypackage.sub ဧ။္ folder ေအာက္မွာရွိတဲ့ SubAp ကိုညြန္ျပေပးပါတယ။္

import mypackage.*;
import mypackage.sub.*;

အက်ဥ္းခ်ဴပ္
၁. “package ဆိုတာဘာလဲ” နွင့္ပတ္သတ္ျပီး သိနားလည္ေစရန္
၂. Package ကိုအသံုးျပဳျပီး class ကို ဘယ္လိုျပင္ဆင္ရမလဲနွင့္ပတ္သတ္ျပီး နားလည္ေစရန္
၃. Package name နွင့္ folder name ကို နာမည္တူေပးဖို ့လိုအပ္တယ္ဆိုတာ နားလည္ေစရန္
၄. Package အဆင့္အဆင့္ျပဳလုပ္ပံုကို နားလည္ေစရန္

ကဲ lecture ကဒီေလာက္ပါဘဲ။ Package က ေသခ်ာတဲ့အဆင့္ထက္ေက်ာ္လြန္တဲ့ software ကိုဖန္တီးဖို ့အရမ္းအသံုး၀င္ပါတယ။္ လူတိုင္း package ရဲ့အက်ိဳးေက်းဇူးကိုအသံုးခ်ျပီး ေကာင္းမြန္တဲ့ class structure ကို ျပဳလုပ္ၾကပါစို ့

ဆက္ရန္ => (သင္ခန္းစာ ၁၄ : Deal with the exception)


Check our Facebook Page!