
public class File
{
public Directory myDirectory;
}
import java.util.Vector;
public class Directory
{
public Vector myFile;
public Vector myDirectory;
}

public class FileSystemItem
{
public Directory myDirectory;
}
public class File extends FileSystemItem
{
}
import java.util.Vector;
public class Directory extends FileSystemItem
{
public Vector myFileSystemItem;
}

public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}
public class Singleton {
private Singleton() {}
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}for(int i=0; i<10; i++)
{
int temp=0;
.......
}
နည်းနည်းယှဉ်ကြည့်ပါ
int temp;
for(int i=0; i<10; i++)
{
temp=0;
.......
}
for(int i=0; i<a.getsize(); i++)
cout<<i;
နည်းနည်းယှဉ်ကြည့်ပါ
int max=a.getsize();
for(int i=0; i<max; i++)
cout<<i;
for(int i=0; i<100000; i++)
{
con.open();
com.execute();
con.close()
}



public abstract class ProductFactory{
public Product createProduct(String ProductID){
if (id==ID1)
return new OneProduct();
if (id==ID2) return
return new AnotherProduct();
... // so on for the other Ids
return null; //if the id doesn't have any of the expected values
}
...
}http://www.oodesign.com/factory-pattern.html

လူပျိုကြီး said:Software Architecture Changes ဆိုတာက ပြောမယ်ဆိုရင် တော်တော်ဆိုးပါတယ်။ Backward Compatible မဖြစ်တာကပိုဆိုးပါတယ်။ Maintainable ဖြစ်တဲ့ Software ဆိုတာက နောင်တစ်ချိန်မှာ အပြောင်းအလဲ ဖြစ်ခဲ့ရင် Developer တွေအတွက် ဘယ်လောက် အထောက်အကူပေးမလဲဆိုတဲ့ အတိုင်းအတာမှာ မှီခိုပါတယ်။ သူနဲ့အပြိုင်စဉ်းစားရမှာကတော့ Scalable ကိစ္စကိုပါ။ ဘယ် Software မဆို နောင်တစ်ချိန်မှာ Function အသစ်တွေထပ် ထည့်ရမှာပါပဲ ထပ်ထည့်လိုက်တဲ့ Function အသစ်တွေဟာ အရင်ရှိပြီးသားကို မထိခိုက်ဘူးဆိုရင် ဒါဟာ Scalable ဖြစ်တယ်ပြောရမှာပါ။ UML နဲ့ ဒီဇိုင်းဆွဲတယ်ဆိုတာကလည်း ဘယ်အချိန်မှာ ပြင်ဆင်ရမယ် ပြင်ရင် ဘယ်အပိုင်းတွေကို ထိခိုက်သွားမယ်ဆိုတာကို မြင်သာအောင် ဆွဲတယ်ဆိုလည်း ပြောလို့ရပါတယ်။
ကျွန်တော့် အတွေ့အကြုံအရဆိုရင် ဆွဲပြီးသား အားလုံးသဘောတူပြီးသား ဒီဇိုင်းတစ်ခုကို Implement လုပ်နေရင်းမှာ ပြင်ချင်ရင်မလွယ်တော့ပါဘူး။ ပြင်လိုက်ရင် အပိုင်းလိုက်ခွဲပြီး Implement လုပ်နေရတာ ဖြစ်လို့ တစ်နေရာပြောင်းလဲတာနဲ့ တစ်ခြားထိခိုက်မယ့် အပိုင်းတွေကိုပါ စဉ်းစားရပါတယ်။ Implement လုပ်နေရင်း Change Management လုပ်ရတာ အင်မတန်ခက်ခဲသလို ကုန်ကျစရိတ်လည်း များပါတယ်။ ဒါကြောင့် အတွေ့အကြုံရင့်တဲ့ Software Architect တွေသာလုပ်ရဲပါတယ်။ Implement ပြီးသွားရင်တော့ နောင်ကိုဆက်ပြီး တိုးချဲ့ဖို့အတွက် လက်ရှိဒီဇိုင်းကို မပြင်သင့်တော့ပါ။ ဖြစ်နိုင်ရင် ရေးပြီးသား Code တွေထဲမှာ အမှားပြင်တာကလွဲရင် နောက်ထပ် Version အတွက် ထပ်ပြီး Code တွေထပ်မထည့်သင့်ပါ။ Version အသစ်အတွက် ရည်ရွယ်မယ်ဆိုရင် ဖြစ်နိုင်သမျှ Inherit လုပ်ပြီး ထပ်ပြီးတိုးချဲ့ဖို့သာ ကြိုးစားသင့်ပါတယ်။ ဒါကြောင့် Object-Oriented Design တွေဟာ Software အကြီးတွေ ရေးမယ်ဆိုရင် မရှိမဖြစ် လိုအပ်လာပါတယ်။
အခုနောက်ပိုင်းမှာ Mission Critical မဟုတ်ရင်တော့ Open Source ကိုလူတိုင်းနီးနီး သုံးလာကြပါပြီ။ ဒီတော့ အခုခေတ် Developer တွေက အရင်ကနဲ့နည်းနည်း ကွဲပြားလာတာက အရင်ကတော့ ကိုယ်သုံးတဲ့ Development Tools တွေကို ဝယ်သုံးပါတယ်။ အခုနောက်ပိုင်းတော့ Development Tools တွေကိုက Open Source တွေများလာတော့ ကိုယ်သုံးတဲ့ Development Tools ကိုတစ်ခါတစ်လေ လိုအပ်ရင်ကိုယ်တိုင် ပြင်ဖို့လိုအပ်လာရင် ပြင်ရပါတယ်။ ပြဿနာက Open Source တွေရဲ့ Version တွေက လူတွေအများကြီး ဝိုင်းရေးကြပြောင်းကြ ဆိုတော့ အပြောင်းအလဲ အရမ်းမြန်ပါတယ်။ အဲဒီမှာဖြစ်လာတာက ကိုယ်သုံးဖို့ ပြောင်းထားတဲ့ Module တွေကသူတို့ထုတ်တဲ့ နောက်ပိုင်း Version တွေမှာ Architecture ကိုပြောင်းပြီး တစ်ခြားပို့လိုက်လို့ကတော့ ကိုယ့်ဟာကတော့ အသစ်မှာ သုံးမရတော့ပါဘူး။ Version အဟောငး်ကိုပဲ ဆက်သုံးနေလို့ကလည်း မဖြစ်ပါဘူး ကိုယ်ရေးထားတာကို သုံးဖြစ်တယ်ဆိုပေမယ့် တစ်ခြားအမှားတွေကိုတော့ ကိုယ်တိုင်လည်း မပြင်နိုင်ပါဘူး။
အရင်တစ်ပါတ်လောက်က PostgreSQL ကိုအထဲက Module တွေကို ပြင်ထားတဲ့ System တစ်ခုကို Performance စမ်းဖို့အကြောင်းပေါ်ပါတယ်။ ပြင်ထားတာတွေက ၂၀၀၈ နှစ်အစပိုင်းလောက်က ပြင်ထားတာပါ။ ပြင်တယ်ဆိုပေမယ့် သူ့ဟာကိုပြင်တာမဟုတ်ပဲ ကိုယ်လိုချင်တဲ့ Feature တစ်ခုရဖို့အတွက် အသစ်ထပ်ထည့်ထားတာပါ။ ဒါပေမယ့် သူ့ထဲကပါပြီးသားတွေကို ခေါ်သုံးရတာတွေလည်း ရှိပါတယ်။ စမ်းမယ်ဆိုတော့ Compile လုပ်တာကိုက တော်တော်ခက်ပါတယ် နောက်တော့ တော်တော်လေး ကြံဖန်ပြီး လုပ်လိုက်မှ Library တစ်ခုထွက်ပါတယ်။ ထွက်လာတဲ့ Library ကို PostgreSQL မှာထပ်တပ်တာ ဘယ်လိုမှမရပါဘူး။ သုံးလေးရက်လောက် ဆက်တိုက်လုပ်တယ် မရပါဘူး မမှားပဲနဲ့ထပ်တပ်တာ မရဘူးဆိုတာ တော်တော်ထူးဆန်းပါတယ်။
နောက်ဆုံးဘယ်လိုမှ အဖြေရှာမရတာနဲ့ အကုန်တစ်စစီပြန်စစ်တော့မှ အရင်သူတို့သုံးတာက 8.1 အခုသုံးနေရတာက 8.3 ဒါပဲခြားနားတယ် ကျန်တာကတော့ အကုန်တူတယ်။ တစ်ကယ်ကတော့ အဟောင်းက အသစ်မှာမရဘူးဆိုတာ မဖြစ်နိုင်ပါဘူး Backward Compatible တော့ဖြစ်ရပါတယ်။ ဒါပေမယ့် အသေအချာစစ်လိုက်တော့ 8.1 နဲ့ 8.2 ကြားမှာ Library Function တွေကို အထဲက Code တွေကို မပြောင်းပဲ Function နာမည်တွေကို ပြောင်းထားတယ်ဆိုတာကို တွေ့ရပါတယ်။ အကုန်လုံးအသေးစိတ် ရှာကြည့်လိုက်တော့ PostgreSQL နဲ့ပါတ်သက်တဲ့ Forum တွေမှာ ပြောင်းလိုက်လို့ ပြဿနာတက်တဲ့လူတွေ ဆွေးနွေးထားကြတာ အများကြီးဖြစ်နေပါတယ်။ နာမည်ပဲပြောင်းတယ်ဆိုတော့ အကုန်လုံးပြောင်းသမျှကို Search & Replace နဲ့အကုန် ပြန်လုပ်ရပါတယ်။ ဆက်လုပ်ပြန်တော့လည်း မရပြန်ဘူး ဒါနဲ့ အပြောင်းအလဲ ထပ်ရှိသေးသလားကြည့်တော့ 8.2 နဲ့ 8.3 ကြားမှာ Library ထပ်ရေးမယ်ဆိုရင် Format ပြောင်းတယ်ဆိုပြီး ဖြစ်နေပြန်ပါတယ်။ ကိုယ့်ဟာက အရင် အဟောင်းဖြစ်နေလို့ သူ့အသစ်နဲ့ကိုက်အောင် တစ်ခါပြန်ပြောင်းရပြန်ပါတယ်။ သူတို့ဟာသူတို့ Function နာမည်တွေ မလှလို့ပြောင်းတာက ရှိပြီးသားလူတွေ ပြဿနာအကုန်တက် ကုန်ပါတယ်။
အခု MZ မှာလည်း Project အကုန်လုံးကို စမ်းလို့ ကျေနပ်တဲ့အခြေအနေ ရောက်တာနဲ့ Open Source အဖြစ်ထုတ်ပေးနေတာကို တွေ့ပါတယ်။ အိုနာဂိုင်ရယ်, Mobile အဘိဓာန်ရယ် Linux Zawgyi Keyboard ကိုအဓိကတွေ့ပါတယ်။ ကိုယ့်ပရောဂျက်ကို Version အသစ်အဖြစ်ဆက် လုပ်နေကြတာပါပဲ ဒါကြောင့် အကြံပေးချင်တာက မူရင်း Architecture ကိုမပြင်ပဲနဲ့ Extending လုပ်တဲ့နည်းကိုပဲ သုံးရင်အဆင်ပြေမယ်ထင်ပါတယ်။ တစ်ချို့ကလည်း ကိုယ်တိုင်းစမ်းကြည့်ရင်းနဲ့ ထပ်ထည့်ကြည့်ထားတာတွေ ရှိလာမယ်ဆိုရင် ရှိပြီးသားကိုပြန်ပြင်တဲ့နည်းနဲ့ Version အသစ်ထုတ်လိုက်ရင် တစ်ခြား Developer တွေ Extend လုပ်ထားတာတွေနဲ့ ပြဿနာတက်လာနိုင်ပါတယ်။ ဒါကြောင့် ရေရှည်အတွက် Maintainable & Expendable ဖြစ်အောင်လုပ်ရင် ပိုကာင်းမယ်လို့ အကြံပေးချင်ပါတယ်။ ဘာလို့လဲဆိုတော့ Commercial Software တွေ Architecture ပြောင်းတာက သူ့အထဲက Developer တွေပဲ ပြဿနာဖြစ်တာ ဆိုပေမယ့် Open Source ပြောင်းတာကတော့ အခုနောက်ပိုင်းမှာ ထိခိုက်တဲ့လူတွေပိုများပါတယ်။
http://www.oodesign.com/
လှိုက်လှဲစွာကြိုဆိုပါသည်။ ယခု ပထမဆုံးအကြိမ် ရောက်ဖူးခြင်းဖြစ်ပါသလား? ဝင်ရောက် ဆွေးနွေး မေးမြန်းလိုပါလျှင် အောက်တွင်ဖော်ပြထားသော button များမှတဆင့် ဝင်ရောက် ဆွေးနွေးနိုင်သကဲ့သို့ အဖွဲ့ဝင်အသစ်အနေဖြင့်လည်း လျှောက်ထားနိုင်ပါတယ်။