တတိယခြေလှမ်း အခြေခံ XSL

XMLရဲ့ Tagများသည် အချက်အလက်တွေရဲ့အဓိပ္ပါယ်များနှင့်၊ ထူးခြားချက်များကိုဖော်ပြပေးနိူင်ပါသည်။ ယခင်အခန်းများတွင် ဖော်ပြပြီးခဲ့သလို XMLသည်အချက်အလက်များကို ဖော်ပြရန်အတွက် Tagများကို လွတ်လပ်စွာ အသုံးပြုနိူင်ပေ၏။ ထို့အတွက် HTMLကဲ့သို့ ပိုင်ဆိုင်တဲ့Tagတွေအသီးသီးကို မည်သို့ဖော်ပြမည် ဆိုသည်ကို ကြိုတင်သတ်မှတ်ထားခြင်းမရှိပေ။သို့ရာတွင် XMLအချက်အလက်များကို ပြင်ဆင်ပြီးလှပစွာ ပုံဖော်လိုကြမည် မဟုတ်ပေလော။  Continue reading “တတိယခြေလှမ်း အခြေခံ XSL”

How to learn web development – 2

ကျွန်တော် ပထမပိုင်းမှာ Web Essential ပိုင်းနဲ့ ပတ်သက်ပြီး ရှင်းလင်းခဲ့ပါတယ်။ Web Development ပိုင်းကို မလေ့လာခင်မှာ web essential ပိုင်းက မသိမဖြစ်ဆိုလည်း မမှားပါဘူး။ Web Essential ပိုင်းကို လေ့လာရင်း web developer အစား web designer လိုင်းကို ပြောင်းသွားတဲ့ သူတွေလည်း ရှိပါတယ်။ ဒါကြောင့် develop မလုပ်ခင်မှာ ကိုယ် developer ပိုင်းသွားမလား Designer ပိုင်းသွားမလား ဘယ်ဟာပို စိတ်ဝင်စားလဲဆိုတာကိုလည်း သိရအောင် web essential ပိုင်းကိုတော့ သိသင့်ပါတယ်။
Continue reading “How to learn web development – 2”

How to learn web development

Web Development လုပ်တော့မယ်ဆိုရင် ကျွန်တော် ဒီပုံမှာ ပြခဲ့တာလေးကို တချက်ကြည့်စေချင်ပါတယ်။ ပုံထဲမှာ ကျွန်တော့်အနေနဲ့ Web Programming ကို မလေ့လာခင်မှာ HTML , CSS , Javascript ကို စတင်လေ့လာဖို့ ဆိုထားပါတယ်။ HTML , CSS က programming ပိုင်း မပါဝင်ပါဘူး။ တော်တော်များများဟာ HTML, CSS, Javascript က သေချာ မတတ်ကျွမ်းပဲနဲ့ Web Development ပိုင်းကို ကူးနေကြတာတွေကိုလည်း တွေ့ရပါတယ်။
Continue reading “How to learn web development”

Readability on blog [Poll]

အခု ထည့်ထားတဲ့ Readability အတွက် Poll လေးလုပ်ထားပါတယ်။ MZ Blog မှာ ထည့်ထားတဲ့ Readability သုံးဖြစ် မသုံးဖြစ်ပေါ့။

7 Cross Platform iOS and Android Solutions

iOS ကို သာမက Android ပါ run လို့ ရအောင် application တွေ ရေးဖို့အတွက် SDK List လေးပါ။

Native App Creators

Airplay SDK – သူကတော့ game company တော်တော်များများ အသုံးပြုကြပါတယ်။ cross platform applications အတွက် game ရေးဖို့ဆိုရင် အဆင်ပြေပါတယ်။ 2D/3D Game တွေ ရေးဖို့အတွက် အဆင်ပြေပါတယ်။

Corona SDK – Lua ကို သုံးပြီး app တွေရေးဖို့အတွက်ဆိုရင်တော့ Corona ရှိပါတယ်။ သူကတော့ Actionscript 2.0 နဲ့ တူပါတယ်။ Adobe Developer အဟောင်းတွေက တည်ထောင်ထားတာပါ။ တန်ဖိုးကတော့ $99 per year ပေးဆောင်ရပါတယ်။

Flash CS5 (Adobe Air for iOS ) – Packager ကို သုံးပြီး iOS အတွက် Flash CS5 apps တွေ ဖန်တီးလို့ရပါတယ်။ Mac ကို သုံးစရာမလိုပဲ ရေးလို့ရပါတယ်။ စျေးနှုန်းကတော့ $600 ဝန်းကျင်ရှိပြီးတော့ upgrade လုပ်တာဆိုရင်တော့ $200 ပေးရပါလိမ့်မယ်။

Unity – Game တွေအတွက် သီးသန့်ဆိုရင်တော့ Unity ရှိပါတယ်။ သူက 3D object တွေအတွက် Editor ပါပြီးသားဆိုတော့ တော်တော်လေးကို ကောင်းမွန်တယ်လို့ ဆိုရပါမယ်။ ထို့အတူ စျေးလည်း ကောင်းပါတယ်။ iPhone သီးသန့်အတွက် Unity ဆိုရင် $300 လောက်ပေးရမှာဖြစ်ပြီး Unity Pro ဆိုရင်တော့ $1500 လောက်ကုန်ပါလိမ့်မယ်။ Android အတွက်ပါရေးမယ်ဆိုရင်တော့ $3000 လောက်တော့ ကုန်ကျပါမယ်။

Hybrid App Creators (HTML/Javascript and HTML/ruby based)

Appcelerator – native app ကို HTML/Javascript ကို သုံးပြီး ရေးလို့ရမယ့် နည်းလမ်းပေါ့။ UIWebView ကို သုံးပြီး iPhone မှာ run တာပေါ့။ သူက Free ပါပဲ။

Phonegap – Appcelerator နဲ့ အတူတူပါပဲ။ သူကတော့ Appcelerator ထက်စာရင် ရေးရတာ ပိုလွယ်ပြီးတော့ support နဲ့ communities အားကောင်းတယ်လို့ ဆိုရပါမယ်။

Rhomobile – Ruby ကို သဘောကျတဲ့သူတွေအတွက်ကတော့ Rhomobile က အဆင်ပြေပါလိမ့်မယ်။ ROR သမားတွေ အကြိုက်ပေါ့။ noncommericial application အတွက် free ပါ။

Conclusion

Flash သမားတွေအတွက်တော့ Flash CS5 က အသင့်တော်ဆုံးပေါ့။ Airplay SDK ကတော့ စိတ်ဝင်စားဖို့ကောင်းတဲ့ SDK ဆိုလည်း မမှားပါဘူး။ Corona ကတော့ စျေးနည်းနည်းများတယ်လို့ ထင်ပါတယ်။ နောက်ပြီး Lua language ကိုလည်း လေ့လာဖို့ လိုလိမ့်မယ်။ Corona စျေးများတာကတော့ Unity စျေးများတာကို မမှီဘူးလို့ဆိုရမလားပဲ။ သို့ပေမယ့် Unity က Game Development အတွက် တော်တော်လေးကို ကောင်းမွန်ပါတယ်။ Game Development အတွက် invest မလုပ်ဘူးဆိုရင်တော့ မစဉ်းစားသင့်ပါဘူး။

HTML/Javascript solutions အတွက်ဆိုရင်တော့ Appcelerator ဖြစ်ဖြစ် Phonegap ဖြစ်ဖြစ် အဆင်ပြေပါတယ်။ web developer တွေအတွက် iPhone , Android app အမြန်ရေးဖို့အတွက်ပေါ့။ Appcelerator ကတော့ သူ့ javascript တွေ သိထားဖို့လိုတယ်။ ထပ်လေ့လာဖို့လိုတာပေါ့။ Phonegap ကတော့ လက်ရှိ HTML5 application ကို iPhone , Android အတွက် ချက်ခြင်း ပြောင်းလိုက်ရုံပဲလေ။ ROR သမားတွေအတွက်တော့ ထွေထွေထူးထူး ပြောစရာလိုမယ်မထင်။ Rhomobile က အဆင်ပြေဆုံး ဖြစ်လိမ့်မယ်။

reference: http://maniacdev.com/2010/09/cross-platform-iphone-and-android-solutions/

HTML , CSS Myanmar Ebook

Planet Creator ရေးထားတဲ့ စာအုပ်ဖြစ်ပြီး HTML နဲ့ CSS ကို အခြေခံမှ စပြီး သေသေချာချာ ရေးထားတဲ့ စာအုပ်ကောင်းလေး တစ်အုပ်ပါ။ စာမျက်နှာပေါင်း ၁၉၇ မျက်နှာ ပါရှိပြီး နားလည် သဘောပေါက်အောင် ရှင်းလင်းထားတဲ့အတွက် လေ့လာတဲ့သူတွေအတွက် အတော့်ကို အသုံးဝင်မယ့် စာအုပ်တစ်အုပ်ပါ။

http://www.worldwidemyanmar.com/news/headline/423-myanmar-version-html-css-ebook.html

မှာ သွားရောက်ယူနိုင်ပါတယ်။

3 Opensource iPhone Game on App Store

iPhone game တွေထဲမှာလည်း Opensource Game လေးတွေ ရှိပါတယ်။ အောက်မှာပြထားတဲ့ game ၃ ခုဟာ လက်ရှိ app store မှာ ရှိနေတဲ့ game ပါ။

အဲဒီအတွက် source ကိုတော့ github မှာ ရှိထားပြီးသားပါ။

Continue reading “3 Opensource iPhone Game on App Store”

Learn Objective-C : Day 5

ကဲ… Part 5 ကိုတောင် ရောက်လာပါပြီဗျာ။ ဒီနေ့မှာတော့ memory mangagement အပိုင်းကို လေ့လာရအောင်။ Script Language တော်တော်များများ (PHP ကဲ့သို့ ) ဟာ memory management ပိုင်းကို အလိုအလျောက်ဆောင်ရွက်ပေးပါတယ်။ ဒါပေမယ့် Objective-C မှာကတော့ သတိထားဖို့လိုပါတယ်။ object ကို create လုပ်ပြီးရင် release လုပ်ပေးဖို့လည်းလိုပါတယ်။

Other Articles In This Series

iPhone Development လုပ်ပြီဆိုရင် memory management ပိုင်းက အရေးပါပါတယ်။ ဘာလို့လည်းဆိုတော့ iPhone က memory limit က Desktop နဲ့ ယှဉ်ရင် နည်းပါတယ်။

Two Approaches

Objective-C မှာ memory management အတွက် methods ၂ မျိုးရှိပါတယ်။ ပထမက reference counting နဲ့ ဒုတိယကတော့ garbage collection ပါ။ သင့်အနေနဲ့ စဉ်းစားလို့ရတာကတော့ manual နဲ့ automatic ပေါ့။ reference counting ဆိုတာက programmer က code ထည့်ပေးရပြီး garbage collection ကတော့ system ကို အလိုအလျောက် memory managing လုပ်ခိုင်းတာပေါ့။ Garbage collection က iPhone မှာ အလုပ်မလုပ်ဘူးဆိုတာကို သတိထားဖို့လိုပါတယ်။ အဲဒါက Mac developer တွေအတွက်သာ အသုံးဝင်ပါတယ်။

Reference Counting

ကဲ… ကျွန်တော်တို့app ကို memory manage ဘယ်လိုလုပ်မလဲ။ ပထမဆုံးအနေနဲ့ ဘယ်အချိန်မှာ code က memory ကို အသုံးပြုပါသလဲ။ ကျွန်တော်တို့တွေက class instance (object) ကို ဖန်တီးလုပ်ပြီဆိုတာနဲ့ memory က allocated လုပ်ပါတယ်။ object က သေးသေးလေးပေမယ့် app က တဖြည်းဖြည်း ကြီးလာတာနဲ့အမျှ memory ပြဿနာတွေက ဖြစ်လာနိုင်ပါတယ်။

ကဲ.. ဥပမာ တစ်ခုလောက် ကြည့်ရအောင်။ ကျွန်တော်တို့ Drawing App တစ်ခုဆွဲပါတယ်။ user ဆွဲတဲ့ shape တစ်ခုတိုင်းက separate object တွေပေါ့။ ကျွန်တော်တို့မှာ shpare 100 ဆိုရင် object 100 memory ပေါ်မှာ နေရာယူသွားပါလိမ့်မယ်။ screen ကို clear လုပ်ပြီး နောက်ထပ် shape 100 ထပ်ဆွဲမယ်။ ကျွန်တော်တို့ဟာ memory manage မလုပ်ခဲ့ရင် အသစ် shape 100 လည်းပြီးရော object 200 memory ပေါ်မှာ နေရာယူထားပြီလေ။ အဲလိုမျိုးတွေ လုပ်နေရင် ကြာလာတဲ့အခါမှာ memory တွေ အရမ်းစားပါလိမ့်မယ်။

ကဲ… ကျွန်တော်တို့ reference counting နဲ့ စဉ်းစားကြည့်ရအောင်။ create new object လုပ်လိုက်တိုင်း memory ပေါ်မှာ နေရာယူသွားတယ်။ object က count 1 ဖြစ်သွားပြီ။ နောက်ထပ် object ဆောက်ရင် retain count က 2 ဖြစ်သွားပြီ။ တကယ်လို့ release ပြန်လုပ်လိုက်ရင် retain count က decrease ဖြစ်ပြီး 1 ဖြစ်သွားပါလိမ့်မယ်။ ထပ်ပြီး decrease လုပ်လိုက်ရင် 0 ဖြစ်သွားမယ်။ zero ဆိုရင် ထိန်းမထားတော့ပဲ memory ပေါ်မှာ free ဖြစ်သွားပါပြီ။

Syntax

ကျွန်တော်တို့ ပထမဆုံး object တစ်ခုကို တည်ဆောက်ပါမယ်။ object တစ်ခုကို အောက်ကလို တည်ဆောက်ပါမယ်။

myCarClass *car = [myCarClass alloc];

ကျွန်တော်တို့ object ဆောက်ပြီးသွားရင် manual release သို့မဟုတ် autorelease ကို နောက်ပိုင်းမှာ လုပ်ပါမယ်။ သတိထားဖို့က object ကို manual release လုပ်ပြီးမှ autorelease ကို သွားခိုင်းလိုက်ရင် application က crash ဖြစ်သွားနိုင်ပါတယ်။

ကျွန်တော်တို့ oject ကို alloc နဲ့ တည်ဆောက်ပြီးပါပြီ။ အဲဒါတော့ reatin လုပ်ပါမယ်။ object က ဆောက်လိုက်တော့ object count က 1 ဖြစ်သွားပါပြီ။

[car reatin];

ထပ်ပြီး reatin လုပ်လိုက်တော့ count က 2 ဖြစ်သွားပါတယ်။ ဒါကြောင့် ကျွန်တော်တို့ ၂ ကြိမ် release လုပ်ပေးဖို့လိုပါတယ်။

Autorelease and Autorelease Pool’s

XCode မှာ create project တစ်ခုဆောက်တဲ့အခါမှာ အချို့ code တွေက autorelease အတွက် ရေးထားတာကို သတိပြုမိမှာပါ။ code က အောက်ကလို မျိုး ပုံစံလေးပေါ့

NSAutoreleasePool * pool =[[NSAutoreleasePool alloc] init];
[pool drain];

Note: documentation အဟောင်းတွေမှာတော့ နောက်ဆုံး လိုင်းက drain အစား release ဖြစ်နေမှာပါ။ တကယ်တန်းတော့ အတူတူပါပဲ။ drain ပဲ သုံးသုံး release ပဲ သုံးသုံးအဆင်ပြေပါတယ်။

အပေါ်က code က autorelease အတွက်အလုပ်လုပ်ထားတာပါ။ ကျွန်တော်တို့တွေက object ကို autorelase message ပို့ထားလိုက်ပါတယ်။ drain message ကို sent လိုက်တဲ့အခါမှာတော့ object က release လုပ်သွားပါတယ်။ autorelease က အသုံးဝင်ပါတယ်။ pool စဆောက်တဲ့အချိန်ကနေ drain မလုပ်ခင်ထိ သုံးထားတဲ့ object တွေကို drain လုပ်တဲ့အချိန်မှာ အကုန် release လုပ်လိုက်ပါတယ်။ ကျွန်တော်တို့တွေ object ကို reatin count လုပ်ပေးနေစရာမလိုတော့ပဲ relase လွယ်လွယ်ကူကူ လုပ်ပေးလိုက်လို့ရပါတယ်။

Nested Autorelease Pool’s

nested autorelease pool နဲ့ ပတ်သက်ပြီးတော့ အကြမ်းရှင်းပြပေးလို့ရပါတယ်။ အဲဒါကို ဘာကြောင့်သုံးရတာလဲ။ တစ်ခါတစ်လေ loop ပတ်နေတဲ့အချိန်မှာ tempoary object ကို ဆောက်တဲ့ အခါလေးတွေ ရှိပါတယ်။

ဥပမာ။။ loop လုပ်နေတဲ့အခါမှာ temporary object ၂ ခု ဆောက်လိုက်ပါတယ်။ မလိုချင်တဲ့အခါမှာ အဲဒါကို autorelease ပြန်လုပ်ဖို့လိုပါတယ်။ အောက်က code လေးကို လေ့လာကြည့်လိုက်ပါ။

void main()
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

NSArray *args = [[NSProcessInfo processInfo] arguments];

for (NSString *fileName in args) {

NSAutoreleasePool *loopPool = [[NSAutoreleasePool alloc] init];

NSError *error = nil;
NSString *fileContents = [[[NSString alloc] initWithContentsOfFile:fileName
encoding:NSUTF8StringEncoding error:&error] autorelease];

/* Process the string, creating and autoreleasing more objects. */

[loopPool drain];
}

/* Do whatever cleanup is needed. */
[pool drain];

exit (EXIT_SUCCESS);
}

အဲဒီ code လေးက တော်တော်ကောင်းပါတယ်။ အဲဒီမှာ ကျွန်တော်တို့အနေနဲ့ pool တစ်ခုကို စဆောက်လိုက်တယ်။ ပြီးတော့ loop ထဲဝင်တယ်။ Loop ထဲမှာ pool ကို ထပ်ဆောက်တယ်။ အဲဒီ အချိန်မှာပဲ object ၂ ခု ထပ်ဆောက်တယ်။ ပြီးတော့ loopPool ကို drain လုပ်လိုက်တယ်။ ဒါကြောင့် pool စဆောက်တဲ့အချိန်ကနေပြီး drain လုပ်တဲ့ကြားက object တွေကို autorelease လုပ်သွားပေးပါလိမ့်မယ်။ object တွေ create လုပ်ခဲ့တဲ့အတွက် စိုးရိမ်စရာမရှိတော့ဘူးပေါ့။ နောက်ဆုံး program ပြီးသွားတော့ drain ထပ်လုပ်လိုက်တယ်။ ရှိနေတဲ့ object တွေကို အကုန် clear လုပ်သွားပေးတယ်။

loop ထဲမှာ သုံးထားတဲ့အတွက် loop လုပ်တဲ့အချိန်မှာ object တွေများလာပြီး memory တွေစားမှာ စိုးရိမ်စရာမလိုတော့ဘူးပေါ့။ တကယ်လို့သာ release သာ ပြန်မလုပ်ပေးရင် loop တွေများလာလေလေ memory က သုံးတာ များလာလေလေ ဖြစ်မှာပေါ့။

retainCount

အပေါ်မှာတုန်းကတော့ reatin နဲ့ပတ်သက်ပြီးပြောထားပြီးပါပြီ။ reatin ဘယ်နှစ်ခုရှိလဲ သိဖို့အတွက် reatinCount ကို အသုံးပြုနိုင်ပါတယ်။

NSLog(@"retainCount for car: %d", [car retainCount]);

retainCount က integer ဖြစ်တဲ့အတွက်ကြောင့် %d ကို သုံးထားပါတယ်။

Wrapping Up

Memory management က new programmer တွေအတွက် အနည်းငယ် နားလည်ရခက်ခဲနိုင်ပါတယ်။ အထူးသဖြင့် script langauge က လာတဲ့ programmer တွေအတွက်လည်း ခေါင်းရှုပ်စေနိုင်ပါတယ်။ ဒါပေမယ့် Objective-C မှာက memory management ကို ကိုယ်ပိုင် စိတ်ကျ ဖန်တီးနိုင်တဲ့အတွက်ကြောင့် program ပေါ့ပါးမှုက programmer ရဲ့ object တည်ဆောက်မှုနဲ့ release လုပ်မှုပေါ်မှာ မူတည်နေပါတယ်။ နားမလည်တာတွေကို မေးနိုင်ပါတယ်။

Next Time

နောက်တစ်ပိုင်းမှာတော့ Objectiv-C နဲ့ ပတ်သက်ပြီး ရိုးရှင်းတဲ့ code တွေအကြောင်းရေးသားသွားပါအုံးမယ်။

reference: http://mobile.tutsplus.com/tutorials/iphone/learn-objective-c-day-5/

ဘယ် programming language စ လေ့လာမလဲ ( Part 2 )

အပိုင်း ၁ မှာ Programming ဆိုတာဘာ။ Programming Langauge ဆိုတာ ဘာလဲဆိုတာကို ရှင်းလင်းခဲ့ပါတယ်။ Programming Lanaguage Generation တွေကိုလည်း ရှင်းပြပြီးပါပြီ။ ဒီ အပိုင်း ၂ မှာတော့ ဘယ် langauge ကို လေ့လာသင့်သလဲဆိုတာကို ဆွေးနွေးပါမယ်။

အရင်ဆုံး ကျွန်တော် ဆွဲထားတဲ့ route map လေးကို ကြည့်လိုက်ပါ။

အဲဒါကတော့ သာမာန် သမာရိုးကျ သွားဖို့ လမ်းကြောင်းလေးပါ။

လုပ်ငန်းခွင် မဝင်သေးသူများ

လုပ်ငန်းခွင် မဝင်သေးသူများ အနေနဲ့ အရင်ဆုံး route map လေးကို ကြည့်လိုက်ပါ။ အဲဒီမှာ ပထမဆုံး အဆင့်အနေနဲ့ C++ , Pseudo , Flowchart တွေနဲ့ စထားပါတယ်။ အခုနောက်ပိုင်း UCSY မှာ Flowchart နဲ့ Pseudo ကို သင်မသင်တော့ မသိတော့ပါ။ C++ မတိုင်ခင်မှာ Pseudo နဲ့ Flowchart ကို လေ့လာခြင်းအားဖြင့် programming flow နားလည်သွားဖို့ပါ။ Programming langauge တစ်ခုကို မသင်ခင်မှာ program flow ကို နားလည်ဖို့ analyst လုပ်တတ်ဖို့ လိုပါတယ်။ Programming က thinking က အရေးပါပါတယ်။ Program တစ်ခုကို စရေးတဲ့အခါမှာ thinking ပိုင်းကို အဓိကျပါတယ်။

တော်တော်များများဟာ C++ နဲ့ စတင်ပြီး ရေးရတာကို သဘောကျပြီးတော့ Pseudo နဲ့ Flowchart ကို လေ့လာရမှာကို သဘောမကျဘူး။ Pseudo နဲ့ Flow chart ကို သင်တဲ့အခါမှာ ပြန်စစ်ပေးဖို့ လူလိုပါတယ်။ C++ ကတော့ အခုရေး အခု run အခု အဖြေထွက်ပါပဲ။ ဒါကြောင့် လူအရမ်းများတဲ့ သင်တန်းတွေ UCSY တွေမှာ Pseudo နဲ့ Flow chart ကို စိတ်ဝင်စားမှု နည်းနိုင်ပါတယ်။

ပထမဆုံး လေ့လာသင့်တာကတော့ C ကို နည်းနည်းနဲ့ နောက်ပိုင်း C++ ကို ထပ်မံလေ့လာသင့်ပါတယ်။ C++ မှာ Object Oriented ပိုင်းကို နားလည်အောင် လေ့လာခဲ့ဖို့လိုပါတယ်။ ဒါမှသာ နောက်ပိုင်း အခြား Langauge ကို ကူးတဲ့အခါမှာ လွယ်ကူအောင်ပါ။

လုပ်ငန်းခွင် ဝင်နေသူများအတွက်

လက်ရှိ အလုပ်လုပ်နေပြီး programming ကို စိတ်ဝင်စားလို့ လေ့လာနေသူများအတွက်ကတော့ python က အသင့်တော်ဆုံးပဲ။ C++ ကတော့ အခြေခံကနေ စပြီး လေ့လာတာကောင်းပေမယ့် အချိန်မရှိတဲ့ သူများအတွက်ကတော့ python က လွယ်ကူမြန်ဆန်စွာ ရေးသားနိုင်တဲ့အတွက် အချိန်လည်း သိပ်မကုန်တော့ပါဘူး။ python ကိုလေ့လာပြီးသွားရင်တော့ အခြား language တွေကို လေ့လာလိုစိတ် အားနည်းသွားမှာတော့ အမှန်ပါပဲ။ python က အခြား language တွေထက် စာရင် လေ့လာရတာ လွယ်ကူပြီးတော့ ရေးသားရတာလည်း လွယ်ကူပါတယ်။

ဘယ်လိုင်းကို သွားမလို့ လေ့လာတာလဲ

programming ကို လေ့လာတော့မယ်ဆိုရင် ဘယ်လိုင်းကို သွားမလို့ လေ့လာတာလဲဆိုတော့ မေးခွန်းကိုလည်း မေးသင့်ပါတယ်။ အဲဒီ မေးခွန်းပေါ်မှာ အခြေခံပြီးတော့ ဘယ် language ကို လေ့လာသင့်သလဲဆိုတာကိုလည်း ဆုံးဖြတ်သင့်ပါတယ်။ ဘယ် programming ကိုပဲ သွားသည် ဖြစ်စေ OOP ကိုတော့ ကျေညက်အောင် လေ့လာထားဖို့လိုပါတယ်။

Windows Platform ကိုသွားမယ်ဆိုရင်တော့ C++ နဲ့ပဲ စစ python နဲ့ ပဲ စစ အဆင်ပြေပါတယ်။ C++ ကို လေ့လာတဲ့သူတွေကတော့ C# သို့မဟုတ် Java ကို ကူးပြောင်းပြီး ရေးဆွဲတာက ပိုအဆင်ပြေမယ် ထင်ပါတယ်။ python အတွက်ကတော့ နည်းနည်း ထပ်ဖြည့်ပြီး လေ့လာရုံပါပဲ။

Mac and Linux ကိုသွားမယ်ဆိုရင်တော့ python နဲ့လည်း ရေးလို့ရသလို C++ နဲ့လည်း ရေးလို့ရပါတယ်။ Mac အတွက်ကတော့ C ကို အခြေခံထားတဲ့ objective-c ကို ထပ်ပြီး လေ့လာသင့်ပါတယ်။ C++ သမားတွေအတွက် လွယ်လွယ်ကူကူ objecive-c ကို လေ့လာနိုင်ပါတယ်။

Web Development ကို သွားမယ်ဆိုရင်တော့ C++ ကနေ PHP သို့မဟုတ် ASP.NET (C#) , Ruby on Rail စတာတွေ ကို ပြောင်းလဲ လေ့လာဖို့လာပါပြီ။ Python ကတော့ Django လိုမျိုး python framework တွေကို အသုံးပြုနိုင်ပါတယ်။ Web Development အတွက် ထွေထွေ ထူးထူး မပြောတော့ပါဘူး။ Route Map ကို လေ့လာလိုက်ရင် ရပါမယ်။ Web Development သွားဖို့အတွက် web essential ကို ကျေညက်နေဖို့လည်း အဓိကျပါတယ်။

Mobile Development မှာကတော့ C++ အခြေခံရှိထားတဲ့ သူတွေအနေနဲ့ အတော့်ကို အဆင်ပြေပါတယ်။ Java , Objective-C , Android SDK စတာတွေကို လွယ်လွယ်ကူကူ လေ့လာနိုင်ပေမယ့် python အတွက်တော့ mobile development က ထဲထဲဝင်ဝင် မရှိသေးပါဘူး။ ဒါကြောင့် python သမားတွေအနေနဲ့လည်း ကိုယ် develop လုပ်မယ့် mobile platform ပေါ်မူတည်ပြီး language ကို ထပ်မံလေ့ဖို့လိုပါတယ်။

Summary

ဘယ် language ကို စလေ့လာသင့်သလဲဆိုတဲ့ အထဲမှာ C နဲ့ python ၂ ခု ထဲက တစ်ခုပါ။ အခြေခံ ကောင်းလိုချင်ရင်တော့ C ကို စလေ့လာသင့်ပါတယ်။ C က python နဲ့ ယှဉ်ရင် အများကြီး လေ့လာရခက်ပြီးတော့ နောက်ပြီး အခြား language တွေကို ကူးပြောင်းလေ့လာတဲ့ အခါမှာ အဆင်ပြေပါလိမ့်မယ်။ လိုအပ်တဲ့ langauge ကို C အခြေခံရှိထားတဲ့သူတွေ အနေနဲ့ လွယ်လွယ်ကူကူ ပြောင်းလဲ လေ့လာနိုင်ပါတယ်။ Python သမားတွေအနေနဲ့ကတော့ အခြား langauge ကို ကူးပြောင်းပြီး လေ့လာဖို့ သိပ်မလိုဘူးလို့ ဆိုရမှာပေါ့။ mobile development က လွဲရင် အခြား platform တော်တော်များများမှာ python ကို အလုပ်လုပ်နိုင်ပါတယ်။ သတိထားစရာ တစ်ခုက python အတွက် web server setup က php ထက်စာရင် အနည်းငယ် ရှုပ်ထွေးပါတယ်။ ဒါတွေက နောက်ပိုင်း သူ့အလိုလို သင်သွားမှာဆိုတော့ မလိုအပ်ပါဘူး။

၁၀ တန်းပြီးခါစ လူတွေ သို့မဟုတ် လုပ်ငန်းခွင်ထဲက မဟုတ်တဲ့သူတွေအနေနဲ့ C++ ကို စတင်လေ့လာသင့်တယ်လို့ အကြံပေးပါရစေ။ ဘာလို့လည်းဆိုတော့ အခြား language တွေကို လွယ်လင့် တကူကူးပြောင်း လေလ့ာနိုင်အောင်ပါ။ လုပ်ငန်းခွင် ဝင်ရောက်နေတဲ့သူတွေအတွက်ကတော့ အချိန်မရှိတဲ့ ကြားကလေ့လာနေရတာ ဖြစ်လို့ python ကို စတင်လေ့လာသင့်ပါတယ်။

လိုအပ်တာတွေ ကျန်ခဲ့တာတွေကို comment ပေးပြီး ဆွေးနွေးနိုင်ပါတယ်ဗျာ။ 

ဘယ် programming language စ လေ့လာမလဲ

programming တစ်ခုကို စသင်ဖို့ ရည်ရွယ်လိုက်တာနဲ့ ဘယ်ကနေ စသင်ရမလဲ။ ဘယ် language ကို စလေ့လာရမလဲဆိုတာက ပြဿနာ တစ်ရပ်ပါ။ သမာရိုးကျ computer တက္ကသိုလ် တက်ရောက်နေတဲ့သူတွေ အတွက်ကတော့ C , C++ နဲ့ စတင် ရင်းနှီး ကျွမ်းဝင်ရမှာပါ။ အဲဒါတွေ မစခင် သင် programming ဆိုတာကို ဘယ်လောက် သိထားပြီးပြီလဲ။

Programming Language ဆိုတာ ဘာလဲ။

Programming ကိုလေ့လာတော့မယ့် ဆိုသူတွေအတွက် အကြီးမားဆုံး စတင် စိန်ခေါ်မှုက programming language ဆိုတာ ဘာလဲဆိုတာပဲ။ အဲဒီတော့ ကျွန်တော်တို့ ပထမဆုံး စဉ်းစားသင့်တာက Programming language ဆိုတာဘာလဲ ဆိုတာပဲ။

Programming ဆိုတာကို theory အရပြောရရင်တော့ computer တွေကို ခိုင်းစေဖို့ ဘာသာစကားလို့ ဆိုရမှာပေါ့။ အဲဒီလို ခိုင်းစေဖို့အတွက် ဘာသာစကားလိုအပ်လာပါတယ်။ ဂျပန်ကို ပြောဖို့ မြန်မာစကားမတတ်တဲ့ ဂျပန်ကို မြန်မာလို သွားပြောနေရင် ဟိုက နားလည်မှာ မဟုတ်ပါဘူး။ ကြားကနေ ဘာသာပြန်တစ်ယောက်လိုအပ်ပါတယ်။ ဒါမှမဟုတ် သူရော ကိုယ်ရော နားလည်မယ့် ဘာသာစကားတစ်ခုခုဖြစ်တဲ့ English စာလိုမျိုး ကြားခံ သုံးရပါလိမ့်မယ်။ ပိုပြီး ထိထိ ရောက်ရောက် ဖြစ်စေချင်ရင်တော့ သူ နားလည်ဆုံး ဘာသာစကားဖြစ်တဲ့ သူ့မိခင် ဘာသာစကား ဂျပန်လို ပြောခြင်းပါပဲ။

Programming Language ဆိုတာ ဒီလိုပါပဲ။ Computer က နားလည်တဲ့ ဘာသာစကား တစ်ခုခုကို ကြားခံပြီး computer ကို ခိုင်းစေရတာပါ။ Computer ကတော့ ပုံမှန်အားဖြင့် 0 နဲ့ 1 သာ အလုပ်လုပ်ပါတယ်။ သို့ပေမယ့် ကျွန်တော်တို့တွေက သူ့ကို ခိုင်းစေဖို့အတွက် 0 နဲ့ 1 တွေ ရေးပြီး command ပေးဖို့ ဆိုတာ အလွန်တရာမှ ခက်ခဲလှပါတယ်။ မဖြစ်နိုင်ဘူးတော့ မဟုတ်ပါ။ အဲဒီတော့ ကိုယ် နားလည်လွယ်ပြီး computer ကို တဆင့် ပြန်ခိုင်းရတဲ့ langauge တစ်ခုခုကို ကြားခံပြီး ဆောင်ရွက်ပေးဖို့ လိုအပ်လာပါပြီ။

Language Generation

programming language generation နဲ့ ပတ်သက်ပြီးတော့ programming ကို စတင် သင်တဲ့ သူတွေ တော်တော်များများ သိထားသင့်ပါတယ်။ မသိလို့ ဘာဖြစ်လည်း ဆိုတော့ ဘာမှတော့ မဖြစ်ပါဘူး။ သိထားတော့ လက်ရှိ ကိုယ် သုံးနေတာ ဘယ် generation ရောက်နေပြီလဲ။ ဒီ generation မတိုင်ခင်က ဘယ် language တွေ ရှိခဲ့လဲ။ အခု ကိုယ်လေ့လာနေတာက ဘယ် generation လဲ။ စတာတွေကို သိရှိနိုင်ပါတယ်။

First Generation Language ( 1GL )

1950 မတိုင်ခင်က UNIVAC I နဲ့ IBM 701 တို့ဟာ ပထမဆုံး machine language program လို့ ဆိုလို့ရပါတယ်။ သို့ပေမယ့် 1GL ဟာ လျင်မြန်စွာ ကုန်ဆုံးသွားပြီး 2GL ကို ကူးပြောင်းလာခဲ့ပါတယ်။

Second Generation Language ( 2GL )

2GL ကတော့ လူသိများတဲ့ assembly language သို့မဟုတ် assembler ပေါ့။ assembler ကတော့ အခုထက်ထိတော့ အချို့နေရာတွေမှာ အသုံးချနေဆဲပါပဲ။

Third Generation Language ( 3GL )

အဲဒီနောက်ပိုင်းမှာတော့ 3GL တွေ ဖြစ်တဲ့ FORTRAN , LISP, COBOL တွေ ထွက်ခဲ့ပါတယ်။ 3GL ဟာ ပိုမို ရေးသားရမှာ လွယ်ကူလာပြီး အရင်တုန်းက machine code တွေနဲ့ မတူညီတော့ပါဘူး။ 3GL ဟာ gerneral use အနေနဲ့ အသုံးချလာနိုင်ခဲ့ပါတယ်။ 3GL နဲ့ အတူတူ general purpos language တွေကိုလည်း ပေါ်ထွက်လာခဲ့ပါတယ်။

C language ကို 1969 နဲ့ 1973 ကြားမှာ developed လုပ်ခဲ့ပြီးတော့ အခုအချိန်ထိ popular ဖြစ်နေသေးတဲ့ langauge တစ်ခုပါ။ C ကို ထပ်ပြီးတော့ version အသစ်တိုးကာ 1980 မှာ C++ ကို ထုတ်ခဲ့ပါတယ်။ C++ က object-oriented နဲ့system programming တွေ ပါဝင်လာပါတယ်။

Third Generation နဲ့ အတူ လက်ရှိ အသုံးပြုနေတဲ့ general purpose programming language တွေကတော့  C, C++, C#, Java, Delphi, and Python တို့ ဖြစ်ပြီး သူတို့ဟာလည်း Third generation Language တွေပါပဲ။

Fourth Generation Language ( 4GL )

Fourth generation language ကိုတော့ စီးပွားရေးဆိုင်ရာ business software တွေအတွက် ရည်ရွယ်ပြီး ဖန်တီးခဲ့ကြပါတယ်။ 3GL တွေက 4GL တွေနဲ့ ပူးပေါင်းဆောင်ရွက်ပြီး develop လုပ်နေရဆဲပါပဲ။ 4GL ထဲမှာ

  • General Use
  • Database
  • Report generators
  • Data manipulation, analysis, and reporting languages
  • Data-stream languages
  • Database-driven GUI application development
  • Screen painters and generators
  • GUI creators
  • Mathematical optimization
  • Web development languages

ဥပမာ အနေနဲ့ ဆိုရရင် Database ထဲမှာ SQL ဖြစ်ပြီးတော့ Web Development မှာတော့ ColdFusion ပေါ့။

Fifth Generation Language ( 5GL )

5GL ကတော့ အဓိကအားဖြင့် programmer မလိုပဲနဲ့ program တွေကို တည်ဆောက်ဖို့အတွက် ရည်ရွယ်ထားတာပါ။ 5GL တွေကို အဓိကအားဖြင့် Artificial Intelligence research တွေ မှာ အဓိက အသုံးပြုပါတယ်။ Prolog , OPS5, Mercury တို့က 5GL example တွေပေါ့။

Summary

အခုအချိန်မှာတော့ 5GL ထိ ရောက်နေပေမယ့် ကျွန်တော်တို့တွေ စပြီး လေ့လာသင့်တာကတော့ 3GL ပါပဲ။ လက်ရှိ တော်တော်များများ အသုံးပြုနေကြတာတွေဟာ 3GL တွေပါပဲ။ 4GL တွေနဲ့ အချို့နေရာတွေမှာ ပေါင်းသုံးကောင်း သုံးပါလိမ့်မယ်။ စလေ့လာမယ့်သူတွေကတော့ Database တွေ ဘာတွေကို လေ့လာဖို့ မလိုသေးပါဘူး။ ပထမဆုံး လေ့လာရမှာက 3GL Programming Langauge ပါ။

What Next

နောက် အပိုင်းမှာ လက်ရှိ အသုံးပြုနေတဲ့ Programming language တွေနဲ့ ဘယ်ဟာကို လေ့လာသင့်သလဲဆိုတာကို ဆွေးနွေးရေးသားသွားမှာပါ။ ဒီ post နဲ့ ပတ်သက်ပြီး မရှင်းတာတွေကို comment ပေးခဲ့လို့ရပါတယ်။

Learn Objective-C Day 4

ပြီးခဲ့တဲ့ အပိုင်းတွေကတော့ အခြေခံလေးတွေကို ပြန်နွှေးပြီးပါပြီ။ ပြီးခဲ့တဲ့ အပိုင်း တွေကတော့

ကဲ .. အခု Day 4 လေး စလိုက်ရအောင်

Getting Started

အရင်ဆုံး Xcode ကို ဖွင့်လိုက်ပါ။ MacOSX အောက်က Applications ကို ရွေးပြီး Command Line Tool ကို click လုပ်လိုက်ပါ။ Type ကို Foundation လို့ ရွေးလိုက်ပါ။ File name ကို အဆင်ပြေတာပေးပါလိုက်ပါ။ ကျွန်တော်ကတော့ CarApp လို့နာမည်ပေးလိုက်တယ်။ ပြီးရင် ကျွန်တော်တို့တွေ New Class ဆောက်ဖို့လိုပါတယ်။ Command-N သို့မဟုတ် File > New File ကို သွားပါ။ Coca Class အောက်က Objective-C Class ကို ရွေးပါ။ subclass ကတော့ NSObjective ပဲ။ Next လုပ်ပြီးနောက် SimpleCar.m ဆိုပြီး နာမည်ပေးလိုက်ပါ။ ပြီးရင် Finish လုပ်လိုက်ပါ။

Coding the Interface

SimpleCar.h ကို ဖွင့်လိုက်ရင် အောက်ကလို မြင်ရပါလိမ့်မယ်။

#import <Cocoa/Cocoa.h>

@interface SimpleCar : NSObject {

}

@end

ဆိုတဲ့ file လေး ရလာပါမယ်။ Cocoa.h ကြောင့် ကျွန်တော်တို့တွေ NSString, NSMutableString စတာတွေ အသုံးပြုလို့ရလာပါတယ်။ ဟုတ်ပြီ။ Car နဲ့ ပတ်သက်တဲ့ Attribute တွေ ကျွန်တော်တို့တွေ ထည့်ရအောင်။ ဘာတွေလည်းဆိုတော့

  • Make
  • Model
  • VIN

စတာတွေပေါ့။ တခြား Properties တွေ ရှိပေမယ့် အခုတော့ ဒီလောက်ပဲ ထည့်ထားပါမယ်။ အဲဒါကို Cocoa မှာ ဒီလို ရေးလိုက်ပါတယ်။

@interface SimpleCar : NSObject {

NSString* make;

NSString* model;

NSNumber* vin;

}

@end

ကျွန်တော် တို့တွေ ပြီးခဲ့တဲ့ နေ့တုန်းကပြောခဲ့ဘူးပါတယ်။ Data တွေကို ဖတ်ဖို့ ရေးဖို့အတွက် function တွေ လိုအပ်ပါတယ်။ ဒီတော့ ကျွန်တော်တို့ method တွေ ထည့်ပါမယ်။

@interface SimpleCar : NSObject {

NSString* make;

NSString* model;

NSNumber* vin;

}

// set methods

- (void) setVin: (NSNumber*)newVin;

- (void) setMake: (NSString*)newMake;

- (void) setModel: (NSString*)setModel;

// convenience method

- (void) setMake: (NSString*)newMake

andModel: (NSString*)newModel;

@end

ဒါတွေကတော့ ကျွန်တော် Class ရဲ့ SET mthod ပေါ့။ နောက်ပြီးတော့ Parameter ၂ ခုနဲ့ function တစ်ခု ပါထည့်သွင်းထားပါတယ်။ Data Type တွေ တူညီအောင် ကျွန်တော်တို့တွေ ထည့်ပေးဖို့လိုပါတယ်။ ဥပမာ။။ vin က NSNumber ဖြစ်တဲ့အတွက်ကြောင့် setVin ကိုလည်း NSSNumber paramter ပို့ထားတာပေါ့။ နောက်ပြီးတော့ method တွေကို @end မတိုင်ခင်နဲ့ } အဆုံးမှာ ရေးရတာကို သတိထားစေချင်ပါတယ်။ ဟုတ်ပြီ။ Set Method တော့ ပြီးပြီ။ Get method ရေးရအောင်။

// set methods

- (void) setVin: (NSNumber*)newVin;

- (void) setMake: (NSString*)newMake;

- (void) setModel: (NSString*)newModel;

// convenience method

- (void) setMake: (NSString*)newMake

andModel: (NSString*)newModel;

// get methods

- (NSString*) make;

- (NSString*) model;

- (NSNumber*) vin;

return ပြန်စရာလိုတဲ့အခါမှာတော့ ကျွန်တော်တို့တွေ (void) ကို သုံးလို့မရတော့ပါဘူး။ Return ပြန်မယ့် data type ကို ထည့်သွင်းပေးဖို့လိုပါတယ်။

Coding the Implementation

အခု ကျွန်တော်တို့တွေ SimpleCar.h မှာ ပါမယ့် variable တွေ mehtod တွေ ရေးပြီးပါပြီ။ SimpleCar.m မှာ ကျွန်တော်တို့တွေ စပြီး Implement လုပ်ဖို့ လိုလာပါပြီ။ အပေါ်က method တွေမှာ ပါတဲ့ အတိုင်း function တွေကို အောက်ကလို ချရေးလိုက်ပါတယ်။

#import "SimpleCar.h"

@implementation SimpleCar

// set methods

- (void) setVin: (NSNumber*)newVin{

}

- (void) setMake: (NSString*)newMake{

}

- (void) setModel: (NSString*)newModel{

}

// convenience method

- (void) setMake: (NSString*)newMake

andModel: (NSString*)newModel{

}

// get methods

- (NSString*) make{

}

- (NSString*) model{

}

- (NSNumber*) vin{

}

@end

make , model , vin အတွက်ကတော့ return ပြန်ဖို့ပဲ လိုတဲ့အတွက် ဒီလို ထပ်ပြီး ရေးလိုက်တယ်။

- (NSString*) make {

return make;

}

- (NSString*) model {

return model;

}

- (NSNumber*) vin {

return vin;

}

ဒီမှာ တချက် သတိထားဖို့က ကျွန်တော် variable ကို return ပြန်လိုက်တာပါ။ Method Name က သပ်သပ် variable name က သပ်သပ်ပါ။ method name အတိုင်း return ပြန်တာ မဟုတ်ပါဘူး။ variable name အတိုင်း method name ကို လိုက်ရေးရတာ မဟုတ်ပါဘူး။

ကဲ.. ရှေ့ဆက်ရအောင်။ ကျွန်တော်တို့တွေ အခြား set method ကို implement လုပ်ဖို့ လိုပါပြီ။

// set methods

- (void) setVin: (NSNumber*)newVin {

[vin release];

vin = [[NSNumber alloc] init];

vin = newVin;

}

- (void) setMake: (NSString*)newMake {

[make release];

make = [[NSString alloc] initWithString:newMake];

}

- (void) setModel: (NSString*)newModel {

[model release];

model = [[NSString alloc] initWithString:newModel];

}

// convenience method

- (void) setMake: (NSString*)newMake

andModel: (NSString*)newModel {

// Reuse our methods from earlier

[self setMake:newMake];

[self setModel:newModel];

}

ဒီ code ကို ကြည့်ရင် ရှုပ်ထွေးသွားပါလိမ့်မယ်။ အခြား Language တွေနဲ့ မတူတာက NSStirng တို့ NSNumber တို့ကို clear လုပ်ချင်တဲ့အခါမှာ release ဆိုတာလေးကို သုံးရပါတယ်။ နောက်ပြီးတော့ alloc နဲ့ init လုပ်ပေးဖို့လိုပါတယ်။ အခြား Language တွေနဲ့ မတူညီတဲ့ အချက်တွေကြောင့် ခေါင်းနည်းနည်း ရှုပ်ရတတ်ပါတယ်။ code တွေ ရေးပြီးရင်တော့ memory ပေါ်ကနေ ပြန်ရှင်းဖို့လိုပါတယ်။ program ကို ပိတ်တဲ့အခါမှာ memory ပေါ်ကနေ အကုန် ရှင်းချခဲ့ပေးရပါမယ်။

-(void) dealloc

{

[vin release];

[make release];

[model release];

[super dealloc];

}

ဆိုတာလေးကို ထပ်ဖြည့်လိုက်ပါတယ်။

ကဲ.. အခုတော့ Implementation အဆင့်တော့ ပြီးသွားပါပြီ။ နောက်တဆင့် Testing ပေါ့။

Testing the Class

ကဲ… အခု Test အဆင့်ကို ရောက်လာပါပြီ။ ကျွန်တော်တို့ ရေးထားတာတွေ မှန်မမှန် စမ်းရအောင်ဗျာ။

CarApp.m ကို ဖွင့်လိုက်ပါ။

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

// insert code here…

NSLog(@”Hello, World!”);

[pool drain];

return 0;

}[/objc]

အဲလို မျိုး ရေးထားတာလေးကို တွေ့မှာပါ။ အဲလိုရေးထားတာလေးကို အောက်ကလို ပြင်ကြည့်ရအောင်။

#import &lt;Foundation/Foundation.h&gt;

#import "SimpleCar.h"

int main (int argc, const char * argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

SimpleCar *myCar = [[SimpleCar alloc] init];

NSNumber *newVin = [NSNumber numberWithInt:123];

[myCar setVin:newVin];

[myCar setMake:@"Honda" andModel:@"Civic"];

NSLog(@"The car is: %@ %@", [myCar make], [myCar model]);

NSLog(@"The vin is: %@", [myCar vin]);

[myCar release];

[pool drain];

return 0;

}

အဲလိုလေး ရေးပြီးတဲ့အခါမှာတော့ Build and Run ကို နှိပ်လိုက်ပါ။ ဘာမှ မမြင်ရရင် Run > Console ကို နှိပ်လိုက်ပါ။ Console Log မှာ The car is: Honda Civic , The car is: 123 ဆိုပြီး ပေါ်လာတာကို တွေ့ရပါလိမ့်မယ်။

Property and Synthesize

ကဲ .. ကျွန်တော်တို့တွေ အဆင်ပြေပြေနဲ့ code တော့ ရေးပြီးသွားပြီ။ Objective-C နဲ့လည်း Class ဆောက်လို့ရသွားပြီ။ ဒါပေမယ့် code တွေက ရှည်နေတယ်။ အဲဒီအတွက် @property နဲ့ @synthesize ကို သုံးပြီး ချုံလို့ရပါတယ်။

ကျွန်တော်တို့တွေ ပြီးခဲ့ SimpleCar.h ကို အောက်ကလို ပြောင်းလိုက်ပါမယ်။

@interface SimpleCar : NSObject {

NSString* make;

NSString* model;

NSNumber* vin;

}

@property(readwrite, retain) NSString* make;

@property(readwrite, retain) NSString* model;

@property(readwrite, retain) NSNumber* vin;

// convenience method

- (void) setMake: (NSString*)newMake

andModel: (NSString*)newModel;

@end 

အများကြီးကို တိုသွားပါတယ်။ setMake နဲ့ vin method ၂ ခုကို ပေါင်းပြီး ရေးလိုက်တာပေါ့။ @property က Interface မှာ ကြေငြာထားတာတွေကို ပြန်ထည့်ထားတာပါ။ readwrite လုပ်မယ်လို့ ဆိုလိုတာပေါ့။ အဲလိုပြင်လိုက်တော့ SimpleCar.m ကို လည်းပြင်ဖို့လိုလာပါပြီ။ အဲဒီတော့ ဒီလို ပြင်လိုက်ပါတယ်။

#import "SimpleCar.h"

@implementation SimpleCar

@synthesize make, model, vin;

- (void) setMake: (NSString*)newMake

andModel: (NSString*)newModel {

[self setMake:newMake];

[self setModel:newModel];

}

@end

SimpleCar.h မှာ ကြေငြာထားတာတဲ့ Properties ကို အလုပ်လုပ်ဖို့အတွက် @synthesize နဲ့ variable တွေ ကြေငြာလိုက်ပါတယ်။ ဒါကြောင့် setMake, setModel စတာတွေကို သုံးလို့ရတာပေါ့။

အခုဆိုရင်တော့ Objective-C အကြောင်း အနည်းငယ်တော့ သိလာပြီလို့ထင်ပါတယ်။ နောက်နေ့တွေမှာ ဒီထက် ပိုပြီး ပျော်စရာကောင်းတဲ့ code တွေနဲ့ ရှေ့ဆက်သွားပါအုံးမယ်ဗျာ။

reference: http://mobile.tutsplus.com/tutorials/iphone/learn-objective-c-day-4/

Learn Objective-C: Day 3

အခြား အပိုင်းက Series တွေကတော့

Class from Apple (and some history)

Apple မှာ classes တွေ အများကြီးရှိပြီး တော်တော်များများဟာ NS နဲ့ စပါတယ်။ NS ဆိုတာက NextStep ရဲ့ အတိုကောက်ပေါ့။ NeXT ဆိုတာကတော့ Steve Jobs Apple ကနေ ထွက်ပြီးနောက်ပိုင်းမှာ workstation computer တွေပေါ်မှာ run ဖို့ operation system တွေပါ။ NeXTSTEP မှာ object orientated programming ကို အသုံးပြုထားပါတယ်။ NS ကလည်း NeXTSTEP ကနေ ဆင်းသက်လာတာပါ။ Apple က NeXTSTEP ကို ဝယ်ပြီးနောက် Mac OS X ကို NeXTSTEP ပေါ်မှာ အခြေခံခဲ့ပြီး ထုတ်ခဲ့ပါတယ်။

အချို့ common classes တွေကို အောက်မှာ ဖော်ပြထားပါတယ်။

  • NSString ကတော့ string စာကြောင်းတွေ အတွက်ပေါ့။
  • NSMutableStrng ကတော့ mutable string တွေအတွက်ပါ။
  • NSArray ကတော့ immutable object တွေ အတွက်ပါ။
  • NSMutableArray ကတော့ object array mutable တွေအတွက်ပေါ့။
  • NSNumber ကတော့ number တွေအတွက်ပေါ့။

object က immutable ဆိုတာကတော့ object ကို create လုပ်ပြီး assign လုပ်တဲ့အခါမှာ value က static ဖြစ်သွားပါတယ်။ ပြန်ပြောင်းလို့မရတော့ပါဘူး။ တကယ်လို့ object က mutable ကတော့ ပြောင်းလဲလို့ရတဲ့ dynamic ပေါ့။ object ကို create လုပ်ပြီး နောက်ပိုင်း ပြန်ပြောင်းလို့ရပါတယ်။

Pointers and Initializing

ကဲ.. code လေးကို အရင် ကြည့်ရအောင်

#import

int main (int argc, const char * argv[]) {

NSString *testString;
testString = [[NSString alloc] init];
testString = @"Here's a test string in testString!";
NSLog(@"testString: %@", testString);

return 0;

}

Xcode ကနေ File > New Project > Mac OSX > Application > Command Line Tool > Type: Foundation ကနေ create လုပ်ထားလိုက်တာပါ။ ပေးထားတဲ့ နာမည်နဲ့ source folder အောက်က extension .m file လေးကို အပေါ်က code လို ပြင်ကြည့်ပါ။

အပေါ်က code တွေကနေ ရှင်းပြပါမယ်။

int main(int argc, const char * argv[]) { 

C သမားတွေကတော့ သိပြီးသားပါ။ program တစ်ပိုဒ်စရင် main နဲ့ စပါတယ်။ two parameter ရှိပြီး , နဲ့ ပိုင်းထားပါတယ်။ arguments passing လုပ်ဖို့အတွက်ပေါ့။

NSString *testString;
testString = [[NSString alloc] init];

အဲဒါကတော့ testString ကို pointer နဲ့ create လုပ်ပြီး NSString object ကို ခေါ်လိုက်တာပေါ့။ အပေါ်က တစ်ကြောင်းပြီးသွားပေမယ့် tesString က object အနေနဲ့ပဲ ရှိနေအုံးမှာပါ။ နောက် တစ်ကြောင်းကမှ testString ထဲမှာ init လုပ်ပေးလိုက်တာပါ။

အဲဒါကို အောက်ကလို ပြန်ပြင်ရေးလို့ရပါတယ်။

testString = [NSString alloc];
[testString init];

nested ရေးတာကတော့ တစ်ကြောင်းတည်းပြီးသလို အခု လို ၂ ကြောင်းနဲ့ ရေးလိုက်လည်း ရပါတယ်။

testString = @"Here's a test string in testString!";

NSString မှာ စာတွေ ထည့်ဖို့အတွက် @ sign ကို ရှေ့ ဆုံးမှာ ထည့်ဖို့လိုပါတယ်။

NSLog(@”testString: %@”, testString);

%@ ဆိုတာကတော့ Objective-C object ကို ဆိုလိုတာပါ။ %@ နေရမှာ testString ကို အစားထိုးမှာပါ။ ကဲ … အပေါ်က code ကို run ကြည့်လိုက်ပါ။ Command + Shfit + R ကို နှိပ်ပြီး Debugger Console ကို ဖွင့်ဖို့လိုပါတယ်။ NSLog နဲ့ ထုတ်ထားတာတွေကတော့ Debugger Console မှာပဲ မြင်ရမှာပါ။

Inheritance

NSString ကို ကျွန်တော်တို့ သိပါပြီ။ NSMutableString , NSArray စတာတွေကလည်း single NS Class တွေပါပဲ။ code တွေ အားလုံးမှာ init လုပ်ဖို့ လိုပါတယ်။ အဲလို လုပ်ရတာ အလုပ်ပိုတယ်လို့ ထင်နေတယ်မဟုတ်လား။ ဟုတ်ပါတယ်။ root Class က NSObject ဖြစ်ပြီး သူ့ ပေါ်မှာ implemented လုပ်ထားရပါတယ်။ ဘာကြောင့်လည်းဆိုတော့ အဆင့်ဆင့် inherit အချင်းချင်းလုပ်ထား ပါတယ်။

NSMutableString ဆိုရင် NSString က parent ပါ။ NSString ရဲ့ parent ကတော့ NSObject ပါ။

NSObject မှာ method အသုံးပြုဖို့အတွက် init လုပ်ပါတယ်။ ဒါကြောင့် subclass တွေမှာလည်း init ပါလာပါတယ်။ NSObject ဟာ တကယ်တန်းတော့ return ကိုယ့်ဘာသာ မပြန်ထားပါဘူး။ ဒါကြောင့် method တွေကို overwritten လုပ်လို့ရပါတယ်။ NSArray class ဟာ init ကို override လုပ်ထားပြီး functionality တွေ ပေါင်းထည့်ထားပါတယ်။ အဲဒါကြောင့် memory avaiable ဖြစ်ဖို့အတွက်ရယ် လိုအပ်တဲ့ instance variable တွေကိုလည်း ပြင်ဆင်နိုင်ပါတယ်။

inheriting classes တွေက ထပ်ပြီး extend လုပ်နိုင်တဲ့အတွက် အသုံးဝင်လှပါတယ်။ ကျွန်တော်တို့တွေဟာ extend class ကို ထပ်ဆောက်ပြီး လိုအပ်တဲ့ functionality တွေကို ထပ်မံ ဖြည့်ပေးနိုင်ပါတယ်။ ကျွန်တော်တို့ ကိုယ်ပိုင် NSString version ကို ဖန်တီးပြီး methods တွေ ထပ်ဖြည့်နိုင်ပါတယ်။

Summary

ကျွန်တော်တို့ Class တွေကို ဘယ်လို အသုံးချရမလဲ ဘယ်လို Inheritance လုပ်ထားလဲ။ နောက်ပြီး inheritance လုပ်ထားတဲ့အတွက် ဘယ်လို အသုံးဝင်သလဲဆိုတာတွေကို ဖော်ပြထားပါတယ်။

ဒီအပိုင်းက ကျွန်တော် သိပ်ပြီး ပိုင်နိုင်မှု မရှိပဲနဲ့ ဘာသာပြန်ထားရတဲ့ အပိုင်းဆိုလည်း မမှားပါဘူး။ မှားနေတာတွေ ရှိရင် ထောက်ပြနိုင်ပါတယ်။

reference: http://mobile.tutsplus.com/tutorials/iphone/learn-objective-c-day-3/