วันพุธที่ 29 สิงหาคม พ.ศ. 2555

Introduction to Objective - C (Day01 @ iDeveloper03)


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 พื้นฐาน

  • 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)

การใช้งานสามารถกำหนดค่าสตริงได้ดังนี้

  • "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"


ปล. แบ่งออกมาตามคำแนะนำของเพื่อนจักร อิอิ
ปล. หากมีข้อผิดพลาดประการใด ขออภัยมา ณ ที่นี้ด้วยนะ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

หมายเหตุ: มีเพียงสมาชิกของบล็อกนี้เท่านั้นที่สามารถแสดงความคิดเห็น