Posts Tagged Programming

iPhone Train Center

ตอนนี้เห็นหลายๆคนถามผมว่า “รับ Train เขียน App บน iPhone มั้ยครับ” ซึ่งถ้าเป็นเมื่อก่อน(ที่ยังไม่ได้ทำงานประจำ)ก็คงจะรับ Train อยู่ แต่ตอนนี้ทำงานประจำแล้ว ก็คงต้อง “จำใจไม่รับ Train นะครับ” ต้องขออภัยจริงๆ เอาเป็นว่าผมเองก็คงช่วยได้จากการเขียนโพสเป็นหัวข้อใน Blog นี่ละกันนะครับ มีปัญหาอะไรก็โพสเข้ามาถามกัน จะพยายามช่วยหาคำตอบมาให้นะครับ อ้อ ถามใน www.i-gee.co.cc นะครับ เวบนั้นผมอยากให้มันเป็นศูนย์รวม iPhone Dev จริงๆ(ส่วนเรื่อง url ไว้จะเปลี่ยนมันทีหลังนะครับ)

จากหัวข้อเรื่อง ก็คือตอนนี้ถึงผมจะไม่ได้รับ Train iPhone Programming แต่ตอนนี้ก็มีที่ที่รับ Train นะครับ คือที่ทรู ตอนนี้เริ่มเปิด Training สำหรับผู้สนใจพัฒนา App บน iPhone แล้วนะครับ รายละเอียดดูได้ที่ http://www.trueappcenter.com/ โดยสิ่งที่ต้องมีคือ Mac (จริงหรือเถื่อนก็ได้ครับ) กับความรู้เรื่อง Objective-C สำหรับคนที่อยากได้ Training Course ถ้าสนใจก็ลองติดต่อไปทางทรูได้ครับ

ส่วนใครอยากศึกษากับผมก็ Train กันผ่าน Blog ก็แล้วกันนะครับ :P

Add comment มิถุนายน 24, 2009

iPhone Development – View, Drawing

สำหรับ Entry นี้อาจจะพูดถึงส่วนของ View ใน iPhone นะครับ ซึ่งอยู่ใน Lecture ที่ 5 ของ stanford course ซึ่งจะกล่าวถึงคลาส UIView ของ iPhone, การใช้เครื่องมือสำหรับการวาดอย่างง่ายครับ

ไม่แน่ใจว่ามันจะก้าวกระโดดไปนิดรึเปล่า เอาเป็นว่า Entry นี้ผมจะหลักเลี่ยงการโค้ดนะครับ เริ่มกันที่ View นะครับ

ส่วนที่เป็น View คือส่วนที่เป็นสี่เหลี่ยมผืนผ้าตรงหน้าจอนั่นแหละครับ ทั้งหมดเลย ซึ่งภายใน View จะมีการทำงาน 2 อย่างอยู่ด้วยกัน คือ ส่วนของ Content และ Event

Content ก็คือตัวอักษร, รูปภาพหรือสิ่งที่ถูกวาดขึ้นบนจอภาพนั่นเองครับ ใน View แต่ละหน้าจะมี View หลักตัวหนึ่ง(เทียบตาม Tree ก็เป็น Root) เราเรียกว่า Superview ครับ ภายใน Superview ก็จะมี View ย่อยๆ เรียกว่า Subview ถ้านึกไม่ออกว่าเป็นไง ก็ลองนึกถึงกระดานปักหมุด(Superview)ที่มีกระดาษ(subview)แปะอยู่แล้วกันครับ ส่วน Event คือเหตุการณ์ที่เกิดขึ้นบนหน้าจอนั่นเองครับ ไม่ว่าจะเป็นการ Tab, การ Scroll ฯลฯ ทั้งหมดที่จะสั่งการให้ iPhone ทำงานได้ ถือเป็น Event หมด

เนื่องจาก View เป็นการวาดรูปภาพขึ้นมาบนส่วนของ Content ดังนั้นโครงสร้างต่างๆที่เกี่ยวข้องกับ View ก็เป็นเกี่ยวกับการวาดเช่นกัน ได้แก่ CGPoint หมายถึง ตำแหน่งที่อยู่(x,y) ,CGSize หมายถึง ขนาด(Width, Height) และ CGRect หมายถึงกรอบ(CGPoint, CGSize) ลักษณะ Coordinate ของ iPhone จะไม่เหมือนกับพิกัดการวาดรูปทั่วๆไปครับ จุด origin จะอยู่ที่มุมซ้ายบน (จากปกติมักจะอยู่ซ้ายล่าง)

เกี่ยวกับการวาดนั้น การอ้างอิงพิกัดหรือพ้ืนที่สำหรับวาด จะมีอยู่ 2 แบบ คืออ้างอิงจาก Frame และอ้างอิงจาก Bound ทั้งสองแบบแตกต่างกันตรงที่ “มันเป็นตำแหน่งเมื่อเทียบกับขอบกระดานปักหมุกหรือเทียบกับขอบกระดาษที่แปะ” ถ้า Frame คือเมื่อเทียบกับขอบกระดานปักหมุด แต่ถ้า Bound ก็เทียบกับกระดาษบนกระดานปักหมุด ถ้ายังไม่เข้าใจลองดูที่สไลด์ที่ 19 ก็อธิบายได้ชัดเจนดีครับ มีคำแนะนำอยู่นิดหน่อย (อยู่ในสไลด์ที่ 20) เกี่ยวกับการใช้งาน Frame และ Bound

สิ่งที่อยู่เหนือกว่า Superview คือ Window แต่ละ App จะมี 1 Window และ Window มักจะถูกจัดการมาให้เราใน template เรียบร้อยแล้ว

ส่วนเรื่องของการโค้ด มีตัวอย่างอยู่ใน สไลด์ที่ 25-27 นะครับ ไม่ขอเอามาเขียนซ้ำนะครับ แล้วก็คิดว่าโค้ดไม่น่าจะยากอะไรด้วย แต่ถ้าสงสัยก็โพสถามเอาละกันนะครับ

ต่อไปเรื่องของการ Drawing ครับ

การ Drawing ลงไปบน Content View นั่น จะทำโดยการ override คำสั่งการวาดไปในฟังก์ชั่น Drawrect ครับ แต่การสั่งให้ Draw จะไม่ได้ใช้วิธีการเรียกฟังก์ชั่น Drawrect ครับ แต่จะใช้คำสั่ง setNeedDisplay แทน งงมั้ยครับ? ลักษณะนี้เรียกว่า “Lazy Loading” ครับ view ของเราจะไม่ถูกวาดอยู่ตลอดเวลา แต่วาด(ตามที่สั่งใน drawRect)แค่เฉพาะตอนที่สั่ง(ว่า setNeedDisplay)เท่านั้น

เครื่องมือเกี่ยวกับการวาด จะเป็น Core Graphics และ Quartz 2D ทั้งสองตัวที่กล่าวถึงเป็น Graphic Library บน Cocoa ครับ ใช้โดย Library นี้เป็น C-Base API นะครับ ไม่ใช่ Objective-C ส่วนวิธีการวาดอย่างละเอียดนั้น คงไม่ขอพูดถึงในที่นี้ เพราะจะยาวจนเกินไปครับ(รวมทั้งอยากหลีกเลี่ยงการ Coding ใน Entry นี้ไปก่อนด้วย) คงจะมาอัพเดตในคราวหน้า แต่ถ้าสนใจก็ดูในสไลด์ก่อนก็ได้ครับ ใน Entry นี้ไว้เท่านี้ก่อนครับ

Add comment มีนาคม 23, 2009

Objective – C Custom Class

ก่อนอื่นขอบอกก่อนนะครับ ว่าหลังจากนี้ ผมจะอิงเนื้อหาจาก CS193P ของ Stanford มาเขียนเป็นบทๆ (เพราะถ้าตั้งหัวข้อเขียนเอง ท่าทางจะงง และจะไม่ครบถ้วน) ถ้าอยากดูสไลด์ประกอบก็ตามในเวบของ CS193P เลยนะครับ

จากก่อนหน้านี้ ผมอธิบายคร่าวๆเกี่ยวกับสิ่งต่างๆที่ต้องรู้ และในหัวข้อ Objective-C ก็อธิบายไว้คร่าวๆเหมือนกัน Entry นี้จะมาเจาะลึกกันซักหน่อย โดยจะเริ่มกันที่เรื่องของ Custom Class ของ Objective-C

ในการสร้าง Custom Class ใน Objective-C ไฟล์ที่ได้จากการสร้าง New Class จะมี 2 ไฟล์ คือไฟล์ .h และ .m
- ไฟล์ .h จะเป็น Header ไฟล์ ที่กำหนดลักษณะทั้งหมดของคลาส ว่า Class Name ชื่ออะไร มี Attribute และ Method อะไรบ้าง นอกจากนั้นยังเป็นส่วนที่กำหนดการเชื่อมต่อกับ Interface Builder ด้วย ลักษณะก็จะเป็นแบบนี้

#import <Foundation/Foundation.h>  // import เหมือนกับคำสั่ง include ของ C/C++

@interface ClassName : NSObject {
// Attribute ของ Class : เขียนเหมือนภาษา C ครับ
// Syntax: datatype varName
id  attr1;
NSString *attr2;

}
// Methods Header : คล้ายๆกับภาษา C เหมือนกันครับ ต่างกันนิดหน่อย
// Syntax: -/+ (returnDatatype)MethodName:(ParameterDatatype)parameterName;
- (void)setAttr2:(NSString *)aValue;
- (Nsstring *)attr2;

@end

- ไฟล์ .m เป็นส่วนของการ Implement Method ของคลาสทั้งหมด ลักษณะก็ประมาณนี้

#import “headerFile.h”

@implementation ClassName

- (void)setAttr2:(NSString *)aValue {
attr2 = aValue;
}

- (NSString *)attr2 {
return attr2;
}

@end

ครับ จากตัวอย่างเป็นการสร้าง Class ที่มี Method Getter กับ Setter นะครับ ต่อไปก็จะเป็นการสร้าง Object, Memory Management และการ ลบ Object นะครับ เริ่มต้นที่การสร้าง Object

การสร้าง Object มีสองขั้นตอนคือ การจองพื้นที่ และ การกำหนดค่าตั้งต้นของ Object ซึ่งรูปแบบมีดังนี้

ObjectClass *ObjectName = [[ObjectClass alloc] init];

การกำหนดค่าตั้งต้นอาจจะมี Parameter อื่นๆได้ด้วย ในกรณีตัวอย่างหมายถึง Default การกำหนดนี้ จะเกี่ยวข้องกับ Memory Management ตรงที่ Object ที่ถูกประกาศ จะมี retain count เป็น 1 หมายความว่า ตราบใดก็ตามที่ Object ตัวนี้ยังมีค่า retain count เป็น 1 หมายความว่า object ตัวนี้จะยังคงอยู่ในหน่วยความจำไปเรื่อยๆ ถ้าเราต้องการลบ Object ตัวนี้เราก็ทำได้โดยการใช้คำสั่ง Release แบบนี้ครับ

[ObjectName release];

ซึ่งจากข้างต้น ให้พูดง่ายๆก็คือ malloc กับ free ในภาษา C นั่นแหละครับ

แล้วก็อย่างที่บอกก่อนหน้านี้ครับ หลังจาก Mac OS X ออกมาเป็นเวอร์ชั่น 10.5 Leopard สิ่งที่คลานตามออกมาด้วยกัน คือ Objective-C 2.0 หลักๆก็มีสามอย่างอย่างที่เคยบอกนะครับ แต่Entry นี้จะเน้นเรื่อง Property แค่เรื่องเดียว เพราะเป็นเรื่องสำคัญใน iPhone Development เลยทีเดียว

Property เป็นสิ่งที่เข้ามาช่วยกำหนดคุณลักษณะของ Attribute ของ Class ของเราครับ ว่ามันอยู่ในหน่วยความจำอย่างไร Access ค่าแบบไหน ถามว่ามันจะรู้ไปทำไมว่าอยู่ในหน่วยความจำอย่างไร (retain, assign, copy) ก็เพราะฟีเจอร์เกี่ยวกับ Garbage Collector ส่วนเรื่อง Access ค่าอย่างไร (readwrite, readonly) ก็เป็นเรื่องที่เกี่ยวกับการใช้งานฟีเจอร์สร้าง Method Getter/Setter อัตโนมัติของ Property เอง (มันจะสร้างแบบไหนก็เกี่ยวกับมันอยู่ในหน่วยความจำอย่างไรเช่นกัน)

ส่วนว่าแต่ละอย่างมันหมายความว่ายังไงบ้าง ก็หมายความอย่างนี้ครับ

retain – Attribute นั้นถูกประกาศขึ้นโดย retain Count เป็น 1 Value เป็น default

assign – Attribute นั้นเป็น Pointer ชี้ไปที่ Attribute อื่นอีกทีนึง

copy – Attribute นั้น Access ค่าโดยการ Copy ค่ามาจากที่อื่น แต่ไม่ได้เพิ่ม retain count ขึ้นมาด้วย

readonly, readwrite – เป็นตัวกำหนดการ Access Attribute ว่าให้อ่านอย่างเดียวหรือเขียนได้ด้วย

ซึ่งตัวอย่างการใช้งานก็จะเปลี่ยนจากตัวอย่างด้านบนมาเป็นลักษณะนี้ครับ

ไฟล์ Header

#import <Foundation/Foundation.h>

@interface ClassName : NSObject {
id  attr1;
NSString *attr2;
}
@property id attr1;
@property Nsstring *attr2;

@end

ไฟล์ Implement

#import “headerFile.h”

@implementation ClassName

@synthesis attr1;
@synthesis attr2;

@end

จะเห็นว่า Method Getter/Setter หายไปและแทนที่ด้วยการกำหนด property แทน และในส่วนของ implement ก็แค่ใช้คำสั่ง @synthesis <#attribute> เพื่อให้มันสร้าง Method Getter และ Setter ขึ้นมา สั้นและง่ายขึ้นเยอะเลยใช่มั้ยครับ

ส่วนเรื่องการใช้งาน จะใช้ dot syntax เข้ามาแทนการเข้าถึง attribute ที่กำหนด property ครับ ลักษณะก็เป็นแบบนี้ (ใช้ class จากตัวอย่างข้างต้น)

objectExample.attr2 = @”test String”;  // อันนี้เป็นกรณี Setter method

NSLog(@”%@”, objectExample.attr2);  // อันนี้เป็นกรณีของ Getter method

ไม่ยากเกินไปใช่มั้ยครับ เกี่ยวกับเรื่องของ Custom Class ใน Objective-C สำหรับเนื้อหา Entry นี้อ้างอิง CS193P : Chapter 3 Custom Class นะครับ อยากดูสไลด์ก็ไปดูได้ (แต่ผมไม่ได้ทำหรอกนะ) เข้าใจไม่เข้าใจยังไงก็ติชมได้ครับ สำหรับบทนี้ขอจบเท่านี้ครับ

2 comments มีนาคม 6, 2009

Cocoa & iPhone Development : แนะนำแหล่งเรียนรู้เพิ่มเติม

ตอนนี้ การพัฒนาแอพพลิเคชั่นบน iPhone เป็นที่สนใจสำหรับหลายๆคน และผมก็เป็นคนหนึ่งและก็เขียนบทความเกี่ยวกับการพัฒนาบนแมคอยู่ที่นี่มา ที่มานั่งเขียน Entry ต่างๆก็เพราะตัวผมเองก็มีประสบการณ์กับเรื่องพวกนี้ประมาณ 2 ปีแล้ว พบว่า “แทบจะไม่มีบทความเกี่ยวกับการพัฒนาบนแมคที่เป็นภาษาไทยเลย” เท่าที่เสิร์ชเจออยู่สองที่ คือ ที่นี่ กับ แมคเฟทีเรีย ที่พูดถึงการพัฒนาบนแมคเป็นหลัก นอกนั้นอาจมีแค่ประปราย

แล้วผมไปศึกษาจากที่ไหนบ้าง ก็จะเอามาเขียนใน Entry นี้นะครับ บางที่อาจจะเคยโพสไว้ใน Entry เก่าๆ และบางอันอาจจะใหม่กิ๊งประมาณว่าเพิ่งเจอเมื่อไม่กี่วันนี้เอง คิดว่าน่าจะมีประโยชน์เหมือนกัน (อย่างน้อยก็กับคุณเป้นะครับ อิอิ ตามกันมาทุก Entry เลยทีเดียว)

1. Mac’Feteria Website : เวบไซต์เกี่ยวกับการพัฒนาบน iPhone อีกที่นึงที่เป็นภาษาไทย เท่าที่ผมเจอของคุณ ter (ที่จริงผมคิดว่าเคยเจอพี่เขาแล้วนะครับ ที่ VizRT คิดว่าไม่น่าผิดคน) เวบนี้ก็แบ่งเนื้อหาเป็นบทๆเรื่องๆเหมือนกันกับที่นี่ ตอนนี้เนื้อหาก็ยังเป็นส่วนของการเริ่มต้นเช่นกัน แต่เนื้อหาจะลงลึกไปถึง Coding เลย ลองเข้าไปสกรีน ไปดูคร่าวๆก่อนก็ได้ครับ เข้าใจมั่งไม่เข้าใจมั่ง เคยเห็นก็ยังดีแหละครับ

ลองเข้าไปดูที่ http://www.macfeteria.com

2. หนังสือ Cocoa Programming for Mac OS X – Aaron Hillegass : เล่มนี้เคยแนะนำไปแล้ว และก็จะขอแนะนำอีกที เล่มนี้คือ Bible สำหรับการพัฒนาบนแมคจริงๆครับ ผมก็เริ่มจากเล่มนี้แหละ ไม่เคยอ่านก็ต้องไปหามา ไม่ซื้อก็โหลดแหละครับ หาไม่ยากเลย (แต่แนะนำให้ซื้อ) ตอนนี้ออก 3rd Edition แล้ว เนื้อหาครอบคลุม Objective-C 2.0 และมีการใช้งาน Instrument Debugger ด้วย ห้ามพลาดครับเล่มนี้

3. Hot Cocoa Screencast – Thomas Vinck : อันนี้เพิ่งเจอเมื่อไม่กี่วันนี้เองครับ Screencast สอนการพัฒนาแอพพลิเคชั่นด้วย Cocoa Framework เนื้อหาเข้าใจง่าย ภาพคมชัดคุณภาพ HD และที่สำคัญ ฟรีครับ ไม่มีค่าใช้จ่าย ตอนนี้เนื้อหาเพิ่งอยู่บทที่ 9 ลองเข้าไปดูกันครับ วิธีก็คือใช้โปรแกรม iTunes ครับ เข้าไปที่ iTunes Store แล้วก็เสิร์ชเอาเลย ว่า Hot Cocoa แล้วก็ Subscribe เอาได้เลย

4. CocoaCast – Boris Klaydman : อันน้ีก็ Screencast เหมือนกันครับ เคยเข้าไปดูนานแล้ว แล้วไม่ได้ดูต่อ ดีเหมือนกันครับ ตอนนี้ไม่รู้ไปถึงไหนแล้ว แต่ก็แนะนำไว้อีกที่ครับ วิธีการเข้าไปดูก็เหมือนกับอันบนครับ search ว่า cocoacast

5. iPhoneDevCentral.org website : เวบนี้ก็ดีครับ เป็นที่รวมทั้ง Article Tutorial และ  Screencast Tutorial และ Forum ต่างๆด้วย แถมแบ่งระดับให้อีกตะหาก เวบนี้ต้องลองครับ

6. iPhone Developer’s Cookbook – Erica Sadun : เล่มนี้เคยแนะนำใน Entry เก่าแล้วครับ ไม่เหมาะสำหรับมือใหม่เท่าไหร่ แต่ก็เป็น ตัวอย่างโค้ดสำหรับมือใหม่ได้ ส่วนมือที่ไม่ใหม่แล้วก็ได้ประโยชน์ดีครับ ทำอะไรเป็นขึ้นอีกเยอะเลย เล่มนี้ออกตั้งแต่ตุลาคมปีที่แล้วแล้วครับ ไปหาซื้อหาอ่านเอาเองได้ตามสะดวกครับ (มีให้โหลดแล้วนะครับ แต่ต้องหากันเองนะครับ)

7. Begining iPhone Development : Exploring iPhone SDK -Dave Mark & Jeff LaMarche : เล่มนี้ครับ ของใหม่มาแรง ผมเองก็เพิ่งได้มาเมื่อต้นมกราคม คิดว่าเล่มนี้น่าจะเป็นเล่มที่สมบูรณ์มากเล่มนึงเท่าที่ตอนนี้มี (ตอนนี้มีสองเล่ม เหอะๆ) เล่มนี้น่าจะเหมาะกับการเริ่มต้นศึกษาใหม่ๆ เพราะไม่ยากเกินไป (เล่มนี้หาโหลดได้อีกแล้วเช่นกัน)

8. Stanford CS193P Course : Course iPhone Development ของมหาลัย Stanford ครับ เปิดให้เข้าไปดู Slide ได้ฟรี (แต่ดู Video ไม่ได้ แย่จัง) เนื้อหาประมาณ 20 บทครับ มีประโยชน์ล้วนๆ!! และขอแนะนำแบบสุดๆให้ไปลองอ่านกันดู  (แล้วจะเข้าใจว่าทำไมฝรั่งมันเก่งกันนัก)

ลิงค์อยู่ที่นี่ครับ : CS193P Cocoa programming Course

ทั้งหมดนี้ก็เป็นแหล่งข้อมูลหลักๆที่ผมใช้ศึกษาทั้งที่ผ่านมาและปัจจุบันนะครับ แนะนำกันไว้เผื่อจะสนใจไปลองดูกัน แทบทั้งหมดเป็นภาษาอังกฤษนะครับ อยากให้ทำใจและอย่าไปกลัวกับเรื่องภาษา อันที่จริงผมก็ไม่ได้เก่งภาษาอังกฤษเลย (ดูจากที่แปล Entry เป็นภาษาอังกฤษก็รู้) และถ้าอยากให้มีเวบแบบนี้เป็นภาษาไทยเยอะๆ ก็ช่วยกันอ่าน ช่วยกันแปล ช่วยกันแชร์ข้อมูลนะครับ

12 comments กุมภาพันธ์ 2, 2009

Cocoa & iPhone Development : MVC Design Pattern

มาว่ากันด้วยเรื่องแรกที่เราต้องรู้จากที่กล่าวไว้ข้างต้นนะครับ(ถ้าไม่นับว่าต้องมีเครื่องแมค อันนั้นมีตังซื้อก็พอแล้ว อิอิ) เรื่องเกี่ยวกับ MVC (Model-View-Controller) Design Pattern นั่นเอง

อันที่จริง เกี่ยวกับ MVC นี้ หาอ่านได้ไม่ยากในอินเตอร์เนต ทั้งภาษาอังกฤษและภาษาไทย ซึ่งหลายๆที่ก็อธิบาย MVC ในเทอมต่างๆภาษาและเฟรมเวิร์คกันไป เช่น MVC บน PHPCake(PHP)  หรือ MVC บน Ruby on Rails(Ruby)  ในที่นี้ ผมเองก็จะขออธิบายในเทอมของ Cocoa ละกันนะครับ

เริ่มเลยแล้วกัน…

MVC Design Pattern คือ Design Pattern ในระดับ Architecture แบบนึง ที่ได้รับความนิยมในการ Design Application ขนาดใหญ่ในปัจจุบัน ตัว MVC ในชื่อของมัน ย่อมาจากคำว่า Model-View-Controller ซึ่งก็ตรงตัวกับลักษณะของมันนั่นเอง ซึ่งก็คือ “การแบ่งองค์ประกอบของ Application ออกเป็นสามส่วนแยกออกจากกัน” ซึ่งแต่ละส่วนจะทำงานเชื่อนโยงกันในลักษณะดังภาพ

Cocoa MVC - ภาพจาก Apple.com

Cocoa MVC - ภาพจาก Apple.com

แนวคิดของ Design Pattern จากภาพจะเห็นว่า แอพพลิเคชั่นแบ่งออกเป็น 3 ส่วน คือ View และ Model เชื่อมต่อกันผ่าน Controller แล้วแต่ละส่วนมันเป็นยังไงไงบ้างหล่ะ ?

Model คือ ส่วนของข้อมูล ตัวอย่างเช่น Database หรือ Datasource ของตารางใน Application เป็นต้น Model อาจรวมถึง State ของ Application ได้ด้วยเช่นกัน เช่น Preference Setting ของโปรแกรมก็ได้ ไม่ได้จะหมายถึง Information อย่างเดียวเท่านั้น ซึ่งตัว Model เองก็จะต้องมี Model Logic อยู่ด้วย ซึ่งก็หมายถึง เงื่อนไขการเข้าถึงหรือการเก็บข้อมูล จะเก็บอย่างไร ชนิดไหน อย่างไร ฯลฯ  (ในส่วนของ Model Logic จะเห็นชัดเมื่อเรารู้จัก Property List ใน Objective-C 2.0 ที่จะพูดถึงในภายหลังนะครับ ตอนนี้ Push Stack ไว้ก่อนนะครับ) หน้าที่ของ Model ไม่มีอะไรไปมากกว่า “การเก็บข้อมูล” และ “การส่งข้อมูล” เท่านี้จริงๆครับ ไม่มีมากไปกว่านี้ อย่าสับสนกับ Model Logic นะครับ

View คือ ส่วนของการแสดงผล เช่นกันครับ หน้าที่ของ View ไม่มีไปมากไปกว่า “การแสดงผล” และ “การรอรับคำสั่ง” View ที่เห็นๆกันก็คือ GUIs นั่นแหละครับ ภายใน View ก็เหมือนกับ Model ครับ ต้องมี View Logic เช่นกัน View Logic ก็คือข้อกำหนดของการแสดงผลครับ หน้าต่างกว้าง-ยาว แค่ไหน ปุ่มเป็นสไตล์ไหน ตัวอักษรสีอะไร ฯลฯ นีแหละครับ View Logic น่าจะพอเห็นภาพนะครับ

Controller ส่วนนี้เป็นส่วนที่เชื่อมการทำงานระหว่าง Model กับ View จะพูดให้ง่ายกว่านั้นก็คือ มันคือ “User Logic หรือ Action Logic” ครับ เพราะมันเป็นส่วนควบคุมการทำงานของ User ที่ทำต่อ Application นั่นเอง ว่า User ทำอะไรได้บ้าง แล้ว Application ต้องทำอะไรบ้างเมื่อได้รับ Action นั่นมาแล้ว นั่นคือหน้าที่ของ Controller ครับ

ใน Cocoa Framework ยังมี Object อีกประเภทนึง เรียกว่า “Hybrid Model” ซึ่งหมายถึง Model ที่รวม Model กับ Controller เข้าไว้ด้วยกัน เพราะบางครั้งการแยกกันแบบ MVC อาจไม่ได้เหมาะสมกับ Application ทุกแบบ(รวมกันอาจจะดีกว่า ง่ายกว่า เร็วกว่า) ตัวอย่างของ Hybrid Model ใน Cocoa ก็เช่น Array Controller เป็นต้น และใน iPhone App Dev ก็เช่น Image Picker เป็นต้น(นอกจากนี้ยังมีอีกเยอะ แต่ยังไม่ได้ลอง) ซึ่งก็จะได้รู้จักกันภายหลังนะครับ (Push Stack ไว้อีกอันแล้วกันนะครับ)

ในส่วนของ MVC ก็ขอจบไว้เท่านี้นะครับ สามารถศึกษาเรื่องของ MVC ได้จากที่อื่นด้วยนะครับ บางที่อาจจะเขียนดีกว่าผมซะอีก เห็นว่ายังไงก็แนะนำกันได้นะครับ แล้วเจอกันใน Entry ถัดไปนะครับ (กะว่าจะอธิบายสั้นๆนะ ทำไมมันยาวไปซะได้ละเนี่ย เหอๆ)


Let’s talk about first thing, which you must know before start to iPhone application development, It’s MVC Design Pattern

In fact, You can find an article about MVC very easy from internet. Thai and English both. Each articles will explain about MVC in term of any language and framework such as MVC on PHPCake(PHP) or MVC on Ruby on Rails(Rails). So, I’ll explaining MVC in term of Cocoa Framework .

Let’s start

MVC Design Pattern is one Design Pattern in “Architecture Level” which popular in “Large scale application design” in this time. MVC is stand for Model-View-Controller which explain self structure from name is “Separate an element of application to 3 parts”. Each part is work together like in illustrate.

Cocoa MVC - ภาพจาก Apple.com

Cocoa MVC - ภาพจาก Apple.com

From the illustrate, you see Application separate in 3 parts is “View” and “Model” is connected by controller. How its work?

Model is data storage part. Such as Database or Data source in table in application. Model part is can be include state of application like preference setting not only “Information”.Model must have a “Model logic” inside. Model logic is a “Condition for storage”, how to storage?, which type and etc (we’ll talk about this again in “Property list in Objective-C 2.0 entry). A load of Model is not more than “storage” and “retrieve” a data. Not more than that.

View is a show result part. Same as “Model” a load of View is not more than “Show result” and “Wait for action”. A well-known View is GUIs. Inside View must have “View Logic” like Model too. Model Logic is an attribute for display such as Dimension (height-width), button style, font color and etc.

Controller is a connection part with “Model” and “View”. Say an easier is a “User Logic” or “Action Logic”. Because its controlled an action of user to do on application. What user can do ?. When got an action, What should application do ? , This is Controller load.

In Cocoa Framework still has one object type called “Hybrid Model”. Its a Model which have controller integrated. Because maybe a separate in 3 part like MVC is not good solution for all. For example for “Hybrid model” on Cocoa such as “Array Controller” and in iPhone App Dev is such as “Image Picker”. We’ll say again in later.

I finished entry about MVC only this. You can read MVC article from other place (somewhere can explain better than me). See you again in next Entry.

4 comments มกราคม 24, 2009

อย่ามั่วสิครับ คุณสือ

จากที่ยุ่งๆอยู่ พออ่านหนังสือพิมพ์ไปเจอคอลัมน์นึง ก็ตกใจจนต้องมาเขียน Blog ซะหน่อย 

บังเอิญว่าไปอ่านคอลัมน์ตอบปัญหาคอมพิวเตอร์ ไม่บอกแล้วกันว่าคอลัมน์อะไร บอกแค่ว่าฉบับวันศุกร์ที่ 19 ธ.ค. พอแล้วกัน มีน้องเขามาถามว่า อยากได้โน๊ตบุคซักเครื่องนึง เล็ง VAIO เอาไว้ คิดว่าเป็นอย่างไร บ้าง บวกกับน้องเขาศึกษาข้อดีข้อเสียของยี่ห้ออื่นๆในท้องตลาดแล้ว ทั้ง HP, Acer, etc… รวมไปถึง Apple!! แล้วสาเหตุที่น้องเขาอยากได้โน๊ตบุคเพราะเขาสนใจด้านการเขียนโปรแกรม ตอนนี้น้องเขาเพิ่งจะขึ้น ม.ปลายเท่านั้นเอง

ส่วนคำตอบที่น้องเขาได้รับก็แบ่งเป็นประเด็นๆ คือ เครื่องที่น้องเขาเล็งไว้ (VAIO)  ก็แรงดีแถมสเป็คใหม่ อัพโน่นอัพนี่ และใช้ได้อีกนาน เสียอย่างเดียว แพง แต่ถ้างบถึงก็ซื้อได้เลย

จากที่ตอบข้างต้นก็ไม่ได้ว่าอะไร ถ้าไม่มีประโยครั้งท้ายว่า “Apple คงจะไม่เหมาะถ้าจะเขียนโปรแกรม”

ฟังอย่างงี้ผมก็งงสิครับ เครื่องแมคไม่เหมาะจะเขียนโปรแกรมยังไง ผมเองก็ไม่ใช่สาวกแมคจ๋าขนาดไหนนะครับ แต่ก็เล่น OS มาพอสมควร ทั้ง Windows, Linux และ OSX นอกจากนั้นก็เขียนโปรแกรมมาทั้ง 3 Platform อาจจะไม่ใช่โปรแกรมใหญ่ๆ แต่ก็เคยทำงานกันมา พูดได้เต็มปากครับ ว่า “Platform ไม่เกี่ยว!!” จริงอยู่การพัฒนา Application มันต้องดู Platform ด้วย แต่ปัจจัยมันไม่ได้อยู่ที่ภาษานะครับ ภาษามันทำงานได้แทบทุก Platform แหละ แต่ปัจจัยมันอยู่ที่ Framework ตะหาก

ผมหวังให้น้องคนนั้นได้ฟลุคมาอ่าน Entry ผมบ้างนะครับ อยากจะบอกว่า สำหรับการศึกษาการโปรแกรมมิ่ง ต้องแยกกันเรียนระหว่าง “ภาษา” กับ “Framework” อย่างจะเห็นได้ว่า ใน Windows มี Framework เป็น .NET อย่างที่รู้จักกัน OSX ก็จะมี Cocoa เป็น Framework ซึ่ง Framework เหล่านี้ทำหน้าที่เชื่อมต่อกับ Environment ของ OS เพื่อเป็นโครงสร้างให้กับโปรแกรมของเรา นั่นแหละครับ นั่นก็หมายความว่า “ถึงเราจะใช้แค่ ภาษา C++ อย่างเดียว เราก็สามารถเอามาทำงานได้ ทั้ง Windows และ Mac นั่นแหละ” ขึ้นกับว่าจะเอาไปใส่ลงใน Framework ยังไงเท่านั้นเอง จากที่กล่าวมาข้างต้นในทำนองเดียวกันนะครับ “การจะหัดเขียนโปรแกรมบนเครื่องแบบไหน Platform ไหนก็สามารถประยุกต์ใช้ข้าม Platform ได้เช่นกัน” เพราะฉะนั้นที่บอกว่า “เครื่อง Apple ไม่เหมาะกับการเขียนโปรแกรม ผมเถียงขาดใจครับ”

สาเหตุที่สองที่ต้องเอามาเขียนเพราะเสียดายครับ ถ้าจะไปปิดตาน้องเขาไม่ให้รู้จัก OS อื่นๆบ้าง จะไม่ใช้ Mac ก็ไม่ว่าครับ น้องจะซื้อเครื่องธรรมดามาลง Linux บ้างก็ได้ Ubuntu, Fedora หรืออะไรก็ได้ครับ แต่ถ้าน้องรู้จัก OS ที่มัน Based on Unix ซะตั้งแต่เนิ่นๆ จะมีประโยชน์กับน้องเขามากๆครับ ทุกวันนี้ Server ที่ทำงานด้วย OS ที่ Based on Unix มีอยู่เยอะแยะ และคนส่วนมากมักจะกลัว OS ที่มันไม่ใช่ Windows การที่น้องกล้าจะลองของใหม่ๆผมถือเป็นเรื่องดีที่น่าเสียดายถ้าน้องเขาไม่ได้ทำ กว่าผมจะมาลองเล่น OS อื่นๆก็ตั้งปีสองโน่นแน่ะ ลองแล้วผมไม่กลับไปใช้ Windows เลยด้วยซ้ำ(นอกจากเล่นเกมส์) ไม่อยากให้น้องต้องตาบอดอยู่กับ OS แค่ตัวเดียวนะครับ

อย่างที่สาม การเรียนโปรแกรมมิ่งไม่จำเป็นต้องใช้เครื่องแรงก็ได้ครับ ย้ำนะครับว่าเรียน เพราะระหว่างเราหัดเขียนภาษา เราแทบไม่ได้ใช้อะไรไปนอกจาก Compiler ซึ่งกินแรมแทบไม่ถึงเมกนะครับ แต่กราฟฟิคหรืออนิเมชั่นก็อีกเรื่องนะครับ เอาเป็นว่า มันไม่ได้ต้องใช้ทุนสูงเท่าที่คิดหรอก เครื่องช้าเครื่องเต่าก็ได้ ถ้าไม่รำคาญมันซะก่อน

ไม่ได้อยากจะ Defend Apple หรือจะด่าสื่อนะครับ แค่อยากพูดในฐานะที่เป็น Programmer แล้วเห็นน้องๆสนใจทางเดียวกันกำลังหลงทางเท่านั้นเอง ถ้าโชคดีน้องคง Search Entry นี้เจอก่อนจะซื้อคอมนะครับ

Add comment ธันวาคม 20, 2008


สัตว์เลี้ยง

ไปเห็นในเวบบอร์ดมา อยากลองเอามาแปะเล่นๆดูมั่ง ผ่านเข้ามาก็แวะกดให้อาหารมันเล่นๆให้หน่อยก็แล้วกันนะครับ อิอิ


ให้อาหารหน่อยครับ คลิกที่นี่

อยากมีสัตว์เลี้ยงมั่ง คลิกเลย

Reading book

Beginning iPhone Development: Exploring the iPhone SDK

ใช้หัวคิด

Post Calendar

พฤศจิกายน 2009
พฤ อา
« ก.ค.    
 1
2345678
9101112131415
16171819202122
23242526272829
30  

New Coming Post

หมวดหมู่

Blogroll

Mac & iPhone Dev Useful Link

ป้ายกำกับ

2 Language Entry Book Books Buddhist cocoa Cocoa Programming Cocoa Touch Programming core data core image core webservice DVD Food Games gmail hotmail iPhone iPhone SDK itune iTunes mac Macbook mail microsoft mighty mouse Monitor Monitor calibrate Movie Music mv nikon D70 Nutrition Obj-C person Personal Philosophy Photography Podcast Political Programming Quicktime Travel White Balance windows Wish list Work