Feb 10, 2010

Tìm hiểu Objective - C

Cũng chẳng biết lý do nào cho mình chở thành một thằng dev-er ....

Hôm nay tìm hiểu về dev ứng dụng cho em IPhone nên là làm một tút về Objective - C chú này khá là mền dẻo và linh động trong sử lý nghe nói còn dẻo hơn cả C++ nữa chứ.

1. Một vài dòng về lịch sự ra đời và sự phát triển.
Cái gì cũng vậy ... mà hơn hết mình là dân Châu Á nên làm việc phải có trước có sau có cội có nguồn - ấy vì thế mà đừng vội đọc phần sau ngay mà hay quan tâm một chút tới cội nguồn của thàng Objective - C này.

Lịch sử ra đời
The wiky thì Bard Cox và Tom Love (không biết có thằng cha này không nhưng thấy wiki nó nói thì mình cũng đưa ra đây chắc lão Tom Love này cũng có chút ít công sức) thuộc Stepstone là cha đẻ của Objective - C. Ngôn ngữ này đc giới thiệu năm 1981 và chúng ta cũng nhớ rằng thập niên 80s của thế kỷ trước là sự lên ngôi của khái niệm lập trình OOP cũng là giai đoạn cực thịnh của sự ra đời các ngôn ngữ OOP trên nên C. Tiếp tục hoàn thiện trong vài năm đến 1986 Cox chính thức ấn hành chuẩn của Objective - C trong các cuốn sách Object-Oriented Programming, An Evolutionary Approach.

Sự kế tiếp của Steve Jobs
Cái tên này đã chở nên qua nổi tiếng từ cuộc đời ông cho đến sự nghiệp lẫy lừng và cả việc ông làm điên đảo cộng đồng IT thế giới cho đến chính bạn (chẳng phải bạn cũng đang diên đảo vì IPhone đây !_! )
Khi bi out khỏi Apple, năm 1988 Steve Jobs đã mua lại bản quyên của Obejctive - C từ Stepstone để viết cho ứng dụng phần cứng của mình. vọi là NeXTstep hay còn gọi là OpenStep công ty lúc này của Jobs là NeXT.
Cho đến 1996 khi Apple mua lại NeXT thì họ tiếp tục sử dụng công nghệ OpenStep để phát triên hệ điều hành Mac của họ và xây dựng một loạt công cụ XCode, Interface Builder .. và các Cocoa API ra đời...
Đến giờ thì đã hiểu là tại sao lại là Objective - C chứ không phải bất cứ ngôn ngữ nào khác để build các App trên nền Apples.


2. Tìm hiểu ngôn ngữ Ob-c

Đặc điểm cơ bản.
- Là ngôn ngữ hướng đối tượng
- Mở rộng từ C
- Nhẹ nhàng (không VM - không quá thực tạp với friend virtuals với template với ....)
- Mềm dẻo (mở rộng từ C nên bạn có thể dùng C thuần cấu trúc ngoài ra đây là ngôn ngữ run-time)
- Reflection (có hỗ chợ)
- nil thay thế cho NULL trong C, bởi vì bạn có thể gửi thông điệp cho nil, nhưng không thể làm như vậy với NULL.
- BOOL có 2 giá trị là YES và NO chứ không phải là true và false nữa.
- Khái niệm methods và message đc sử dụng mang ý nghĩa như nhau đối với ObC theo đó message có những thuộc tính đặc biệt. Mọto message có thể chuyền động từ obj tới một obj khác. Việc gọi thông điệp trên một obj không có nghĩa là obj đó sẽ thực hiện message nó có thể chuyển tiếp tới một obj khác chưa biết trước tóm lại có khả năng đáp trả thông điệp không trực tiệp thì gián tiếp.

Khi làm việc với Objective C bạn cần chú ý là bởi vì nó dc base trên nền của C cho nên việc bạn sử dụng cú pháp C chộn lẫn với cú pháp chính thống của Objective C là hoàn toàn chấp nhận, tuy nhìn có vẻ hơi củ chuối.


Phương thưc.
Cách khai báo phương thức trong Objective - C
Không tham số :
<(kiểu trả về)>

Có tham số:
<(kiểu trả về)> :<(kiểu)> :<(kiểu)> ;

Lời gọi phương thức:
không trả về: [<đối tượng> ];
[<đối tượng> :<(kiểu)> ];
[<đối tượng> :<(kiểu)> :<(kiểu)> ];

Trả về kết quả: = [<đối tượng> ];
= [<đối tượng> :<(kiểu)> :<(kiểu)> ];



Lớp và đối tượng.
Ob-C sử dụng khái niệm Interface và Implementation để phân biêt file Header và file Source của C (*.h và *.c) một lớp trong ObC định nghĩa là trên một giao diện (.h) còn phần thực thi trên file .m các bạn chú ý là m vì nó khác với C và C++.

@interface:

#import @interface Fraction: NSObject {
int numerator;
@private
int denominator;
}
-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;
-(int) numerator;
-(int) denominator;

@end

và đây là phần thực thi.
@implementation

#import "Fraction.h"
@implementation Fraction

-(void) print {
printf( "%i/%i", numerator, denominator );
}

-(void) setNumerator: (int) n {
numerator = n;
}

-(void) setDenominator: (int) d {
denominator = d;
}

-(int) denominator {
return denominator;
}

-(int) numerator {
return numerator;
}
@end

- Sử dụng #import để thay thế cho #include (đây là cơ chế thông minh hơn #include của C/C++ bạn chỉ phải thêm 1 lần thôi )
- ObC chỉ cho phép đơn kế thừa. Mặc định tất cả các lớp sẽ kế thừa từ NSObject.
- Cặp @.... và @end là cặp giới hạn phạm vi một lớp.
- Các thuộc tính dc khái báo trong cặp { ..... } và khai báo phương thức ở bên ngoài.
- Nếu phương thức bắt đâu bằng "+" có nghĩa nó là thuộc phạm vi lớp (static), còn nếu "-" thì nó ở phạm vi object.
- Các phạm vi truy xuất public,protected và private giống như C++ mặc định là protected.
- Các truy nhập phần tử cũng sử dụng toán tử "." đối với object và "->" nếu là con trỏ.
- không có các tầm vực truy xuất đối với phương thức (tức là trong ObC các phương thức có cùng một tầm vực là public)



2 comments:

  1. thank anh! nhung bai viet nay rat ro rang de hieu!
    Anh co the post them ve lap trinh iphone khong a em dang bat dau tim hieu ve iphone ma trinh do tieng anh van con kem ne mong anh som viet chut tai lieu de em co the tha khao duoc khong a! Cam on anh rat nhieu

    ReplyDelete
  2. Cam on bai viet huu ich

    ReplyDelete

 
Bạn có thể dùng bài viết của tôi tùy ý bạn nhưng vui lòng ghi lại rõ nguồn cung cấp
The world in a click_
Copyright © 2008 linhdkl