Introduction to Objective - C
การเขียนโปรแกรมแบบ OOP
ประวัติโดยย่อ ของ ภาษา Objective - C
- เป็นภาษาเชิงวัตถุซึ่งเป็นส่วนขยายของภาษา C
- Brad J Cox และ Tom Love ออกแบบในยุค 80
- มีแนวคิดมาจากภาษา SmallTalk
การนิยามคลาสในภาษา Objective - C
ขั้นตอนที่ 1 : เขียนส่วน interface ของคลาส
เป็นส่วนที่ประกาศว่าคลาสนั้นมี Attribute และ Method อะไรบ้าง
โดยจะบันทึกไว้ในไฟล์ที่มีนามสกุล .h ซึ่งเรียกว่า Header File
@interface CLASSNAME : SUPERCLASSNAME
{
Attribute declarations
}
Method declarations
@end
- CLASSNAME : ชื่อคลาส
- SUPERCLASSNAME : ชื่อคลาสหลักที่ทำการสืบทอดมา เป็นคลาส UI..... , NS..... , เป็นต้น
- Attribute Declarations : ตัวแปรที่ระบุถึงคุณสมบัติภายในคลาส
- Method Declarations : กระบวนการที่ภายในคลาสสามารถทำได้
ตัวอย่างเช่น
@interface Account : NSObject
{
int accountID;
NSStrint *accountName;
float balance;
}
-(void)deposit : (float)amount;
-(void)withdraw : (float)amount;
-(float)getBalance;
@end
**หมายเหตุ**
-(void)deposit : (float)amount;
- เครื่องหมาย - +
- - คือ (instance) method สร้าง Object ขึ้นมาได้และเรียกใช้
- + คือ class method ที่สามารถเรียกใช้ได้โดยตรง
ในส่วนนี้เค้ายังไม่เข้าใจว่า ตัว + - หมายถึงอะไร แต่ส่วนใหญ่ - ถูกใช้เยอะที่สุด
และถ้าหาคำตอบได้ จะมาบอกเน้อ จุ๊ฟๆ
- void คือ RETURN TYPE
- deposit คือ Method name
- float คือ Parameter TYPE
- amount คือ Parameter NAME
- สรุปคือ - (Returne Type) Method name : (Parameter TYPE) parameter name
- เปรียบได้เหมือนกับ public void deposit (float amount) ในการเขียน Function ทั่วไป
ขั้นตอนที่ 2 เขียนส่วน Implementation ของคลาส
โดยจะบันทึกไว้ในไฟล์ที่มีนามสกุล .m ซึ่งเรียกว่า Implementation File
#import "interfaceFile.h"
@implementation CLASSNAME
Method definitions
@end
ตัวอย่างเช่น
#import "Account.h"
@implementation Account
-(void)deposit : (float)amount;
{
balance = balance + amount;
}
-(void)withdraw : (float)amount;
{
balance = balance - amount;
}
-(float)getBalance;
{
return balance;
}
@end
การสร้างอ๊อบเจกต์ในภาษา Objective - C
#import "Account.h" //import interface ของคลาส Account ก่อนเรียกใช้
int main()
{
Account *myAcc; //สร้างตัวแปร pointer เพื่อใช้ชี้ไปยังอ๊อบเจกต์ประเภท Account
myAcc = [Account alloc]; //ส่ง message "alloc" ไปยัง Account เพื่อสร้างอ๊อบเจกต์ใหม่ โดยให้ myAcc ไปชี้ที่อ๊อบเจกต์ใหม่ที่สร้างขึ้นมาใหม่
[myAcc init]; //ส่ง message "init" ไปยังอ๊อบเจกต์ชี้โดย myAcc เพื่อทำการ intiallize อ๊อบเจกต์ขึ้นมาใหม่
}
จากกระบวนการทั้ง 3 บรรทัด
Account *myAcc;
myAcc = [Account alloc];
[myAcc init];
สามารถรวมได้เป็น Account *myAcc = [[Account alloc] init];
การส่ง message
[myAcc init];
[myAcc deposit : 100]; //การส่ง message สำหรับการฝากเงินจำนวน 100 บาท
[myAcc withdraw : 50];
NSObject : คลาสหลักของคลาสเกือบทั้งหมด เป็นคลาสที่เป็น method พื้นฐาน
การสร้างอ๊อบเจกต์ในภาษา Objective - C
#import "Account.h" //import interface ของคลาส Account ก่อนเรียกใช้
int main()
{
Account *myAcc; //สร้างตัวแปร pointer เพื่อใช้ชี้ไปยังอ๊อบเจกต์ประเภท Account
myAcc = [Account alloc]; //ส่ง message "alloc" ไปยัง Account เพื่อสร้างอ๊อบเจกต์ใหม่ โดยให้ myAcc ไปชี้ที่อ๊อบเจกต์ใหม่ที่สร้างขึ้นมาใหม่
[myAcc init]; //ส่ง message "init" ไปยังอ๊อบเจกต์ชี้โดย myAcc เพื่อทำการ intiallize อ๊อบเจกต์ขึ้นมาใหม่
}
จากกระบวนการทั้ง 3 บรรทัด
Account *myAcc;
myAcc = [Account alloc];
[myAcc init];
สามารถรวมได้เป็น Account *myAcc = [[Account alloc] init];
การส่ง message
[myAcc init];
[myAcc deposit : 100]; //การส่ง message สำหรับการฝากเงินจำนวน 100 บาท
[myAcc withdraw : 50];
NSObject : คลาสหลักของคลาสเกือบทั้งหมด เป็นคลาสที่เป็น method พื้นฐาน
- Alloc : เป็นคลาส ใช้สร้างอ๊อบเจคใหม่ในหน่วยความจำ กำหนดค่า Attribute ทุกตัวเป็น 0 และ return pointer ไปยังอ๊อบเจกต์ที่สร้างขึ้นมา
- Dealloc : จะถูกเรียนกโดยอัตโนมัติเมื่ออ๊อบเจกต์ถูกทำลาย โดยมีหน้าที่ทำการคืนทรัพยากรให้กับกน่วยความจำ
- init : มีหน้าที่ initialize อ๊อบเจกต์ใหม่ ถ้าทำสำเร็จจะทำการ return pointer กลับไปยังอ๊อบเจกต์ แต่ถ้าทำผิดพลาดจะทำการ return nil กลับไปแทน
- copy : สร้างอ๊อบเจกต์ใหม่ขึ้นมา และคัดลอกคุณสมบัติอีกอ๊อบเจกต์หนึ่งเข้าไป โดยจะ return pointer ของอ๊อบเจกต์ใหม่ออกมา
Object Initialization : กระบวนการการเตรียมอ๊อบเจกต์ที่สร้างใหม่ให้พร้อมใช้งาน
- ทุกคลาสที่มีการสืบทอดจาก NSObject มี Methods ชื่อ init ไว้สำหรับการกำหนดค่าเริ่มต้นแล้ว
- แต่ถ้าหากต้องการกำหนด initialize เพิ่มเติมจากคลาส ต้องทำการ override init ขึ้นมา
- เมื่อกำหนดค่าเริ่มต้นได้สำเร็จ ควรจะ return pointer ไปยังอ๊อบเจกต์เองเลย แต่หากมีข้อผิดพลาดก็จะทำการ return nil ไปให้กับอ๊อบเจกต์
- Sub Class ที่ Override init นั้นจำเป็นต้องมีการเรียกใช้ [super init] สามารถตรวจสอบว่า super class ดำเนินการ init สำเร็จหรือไม่
กำหนดค่าเริ่มต้นให้กับคลาสได้โดย
-(id)init
{
self = [super init]
if(self)
{
//Initialization code here.
}
return self;
}
สตริง (NString)
NSString เป็นคลาสที่มาพร้อมกับเฟรมเวิร์ค Foundation ของอ๊อบเจกต์ของคลาส
ใช้เก็บข้อความที่ประกอบไปด้วยอักขระ (Unicode)
สตริงเก็บอยู่ในรูปของอ๊อบเจกต์ไม่สามารถเปลี่ยนแปลงได้ (immutable)
การใช้งานสามารถกำหนดค่าสตริงได้ดังนี้
สตริง (NString)
NSString เป็นคลาสที่มาพร้อมกับเฟรมเวิร์ค Foundation ของอ๊อบเจกต์ของคลาส
ใช้เก็บข้อความที่ประกอบไปด้วยอักขระ (Unicode)
สตริงเก็บอยู่ในรูปของอ๊อบเจกต์ไม่สามารถเปลี่ยนแปลงได้ (immutable)
การใช้งานสามารถกำหนดค่าสตริงได้ดังนี้
- "abcd" เป็นการเก็บแบบอาเรย์
- @"abcd" เป็นการเก็บไว้ภายในอ๊อบเจกต์เดียว
วิธีการสร้างอ๊อบเจกต์ NSString ในรูปแบบที่ใช้บ่อย
- NSString Iuteral :
- NSString *accountName = @"iDev2";
- Alloc and init :
- NSString *accountName = [[NSString alloc] initWithFormat : @"iDev%d", 2];
- String builder method :
- NSString *accountName = [NSString stringWithFormat : @"iDev%d",2];
- สรัางสตริงจากภาษา C
- NSString *accountName = [[NSString alloc] initWithCString : "iDev2"];
- สร้างสตริงใหม่โดยการต่ออ๊อบเจกต์
- NSString *String1 = @"iDevelopers";
- NSString *String2 = @"course";
- NSString *String3 = [NSString stringWithFormat : @"%@ %@", string1 , string2];
เมื่อแสดงผลโดย NSLog(@"%@ : %d",String3 , 3);
จะได้เป็น
iDevelopers course : 3
การตัดข้อความภายใน NSString
NSString *String1 = @"iDevelopers";
NSString *String2 = [String1 substringFromIndex : 2];
//การเก็บสตริงตัวที่ 2 เป็นต้นไป โดยตัดตัวที่ 0 - 1
NSString *String3 = [String1 substringToIndex : 5];
//การตัดเก็บสตริงไว้เพียง 5 ตัวแรก คือตัวที่ 0 - 4
NSString *String4 = [String1 substringWithRange : (NSRange){3,4} ];
//การเก็บสตริงตั้งแต่ตัวที่ 3 ไว้จำนวน 4 ตัว คือ ตัวที่ 3 - 6
ดังนั้นผลลัพธ์คือ
String 1 = @" iDevelopers "
String 2 = @" veelopers "
String 3 = @" iDeve "
String 4 = @" velo "
การค้นหาคำภายใน String
NSString *String1 = @"age";
NSString *String2 = @"pager";
NSRange foundRange = [String2 rangoOfString: String1 option: (NSCaseInsensitiveSearch)];
ผลลัพธ์ที่ได้จะเป็น foundRange = NSRange {1 , 3}
การเปรียบเทียบ NSString
NSString *String1 = @"abcd";
NSString *String2 = @"ABCD";
BOOL isEqual = [String1 isEqyalToString : String2];
//ผลลัพธ์ที่ได้จะเป็น isEqual = NO
การกำหนดรูบแบบอักษร
NSString *String1 = @"apple MAC iOS";
NSString *String2 = [String1 uppercaseString];
//การกำหนดให้ตัวอักษรเป็นตัวใหญ่ทั้งหมด
//String2 = @"APPLE MAC IOS"
NSString *String3 = [String1 lowercaseString];
//การกำหนดให้ตัวอักษรเป็นตัวเล็กทั้งหมด
//String3 = @"apple mac ios"
NSString *String4 = [String1 capitalizedString];
//การกำหนดให้ตัวอักษรตัวแรกเป็นตัวใหญ่เท่านั้น ที่ตามมาเป็นตัวเล็ก
//String4 = @"Apple Mac Ios"
ปล. แบ่งออกมาตามคำแนะนำของเพื่อนจักร อิอิ
ปล. หากมีข้อผิดพลาดประการใด ขออภัยมา ณ ที่นี้ด้วยนะ
ปล. แบ่งออกมาตามคำแนะนำของเพื่อนจักร อิอิ
ปล. หากมีข้อผิดพลาดประการใด ขออภัยมา ณ ที่นี้ด้วยนะ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น
หมายเหตุ: มีเพียงสมาชิกของบล็อกนี้เท่านั้นที่สามารถแสดงความคิดเห็น