Phần 6: Chuẩn bị “lên đỉnh” với iPhone application


Phần 1: “Lần đầu” với lập trình Objective-C
Phần 2: “Khám phá” OOP trong Objective-C
Phần 3: “Quan hệ” giữa các đối tượng trong Objective-C
Phần 4: “Tự sướng A2Z” với một chương trình Objective-C hoàn thiện
Phần 5: “Vật lộn” với quản lý bộ nhớ trong Objective-C
Phần 6: Chuẩn bị “lên đỉnh” với iPhone application

Sau 5 bài học từ những cảm nhận “lần đầu” đến sự “vật lộn” với Objective-C, có lẽ các bạn cũng đã có trong tay một gia tài kha khá về lập trình Objective-C. Vậy đây có phải là mục tiêu cuối cùng của bạn chưa? Chúng tôi tin chắc rằng hầu hết các Apple developer đều mong muốn là có thể “lên đỉnh” với những ứng dụng cho iPhone, iPad do chính mình viết. Nếu quả thật như vậy thì các bạn sẽ còn cả một chặng đường dài phía trước. Tuy nhiên, để giúp các bạn có thể hoàn thiện về Objective-C cũng như có thêm những khái niêm liên quan đến iPhone development, chúng tôi xin giới thiệu thêm về Categories và Cocoa Touch (framework dùng để phát triển ứng dụng trên iOS).

Categories

Vì vậy, category là gì? Rất nhiều các hướng dẫn hay bài học về Objective-C thường không nhắc tới nó. Theo quan điểm của chúng tôi đó là một điều rất đáng tiếc bởi vì thực sự đó là một tính năng khá hữu ích. Category giúp giữ mã lệnh sáng sủa và ít lộn xộn bằng cách loại bỏ sự cần thiết cho việc khai báo các lớp con không cần thiết. Từ những gì chúng ta đã học được cho đến nay, nếu chúng ta có một đối tượng NSString và chúng ta muốn thêm một phương thức, ví dụ như để thay thế tất cả các ký tự ‘a’ với một ‘4 ‘ thì chúng ta có thể tạo một lớp con của lớp NSString và thêm phương thức đó vào. Chúng tôi cũng đã chỉ các cách để tạo lớp con và thêm các phương thức trong ví dụ làm việc với lớp Car. Tạo lớp con là một cách tiếp cận tốt và chúng tôi không nói là các bạn không nên dùng lớp con. Tuy nhiên, trong một số tình huống nhất định, category cung cấp một cách tiếp cận tốt hơn để thêm một số chức năng bổ sung cho một lớp.

Category cho phép chúng ta có thể thêm các phương thức vào một lớp đã tồn tại, do đó tất cả các đối tượng thể hiện của lớp đó trong chương trình sẽ có thêm các phương thức mới. Ví dụ, chúng ta có 100 đối tượng NSString trong chương trình, nhưng bạn muốn tạo một lớp con tùy chỉnh để từng NSString có thêm một phương thức mới (giả sử là reverseString). Với các category, chúng tôi chỉ đơn giản là có thể thêm các phương thức vào một lớp thuộc category cụ thể (do chúng ta tạo nên) và tất cả các thể hiện trên category đó sẽ được phép sử dụng phương thức mới đó. Cú pháp rõ ràng là hơi khác so với việc sử dụng lớp con và category không cho phép bạn sử dụng instance variables. Tuy nhiên, nó có thể overriding các method đã được đặt ra, nhưng điều này nên được thực hiện một cách thận trọng và chỉ làm khi thực sự cần thiết.

Syntax

Category khai báo giống như bình thường chỉ khác ở chỗ sau tên lớp ta sẽ cho thêm tên của category. Cụ thể ta sẽ tìm hiểu cú pháp tạo category trong interface và lớp thực thi. Khai báo trong interface sẽ như sau:

@interface ClassName(category)
// method declarations go here...
@end

Còn trong lớp thực thi sẽ là:

@implementation ClassName(category)
// method implementations go here...
@end

Triển khai ví dụ

Thực sự là dễ dàng và dễ hiểu có phải không? Vì vậy, chúng ta hãy xem ví dụ: thực hiện một phương thức đơn giản mà sẽ đảo ngược một chuỗi. Các bạn đừng quan tâm đến ý nghĩa của phương thức mà hãy quan tâm đến cách thức ta sử dụng category để sau này có thể áp dụng vào bài toán của chính mình. Cụ thể ở interface sẽ như sau:

@interface NSString(reverse)
-(NSString *)reverseString;
@end

Bây giờ chúng ta sẽ xây dựng lớp thực thi như sau:

@implementation NSString(reverse)
-(NSString *)reverseString{}
@end

Tiếp theo, chúng ta sẽ thêm một số mã lệnh đơn giản để đảo ngược chuỗi. Để đảo ngược chuỗi chúng ta cần một đối tượng chuỗi trung gian chứa chuỗi đảo ngược. Cách chúng tôi sẽ đảo ngược chuỗi là chỉ đơn giản lặp các ký tự trong chuỗi hiện có theo thứ tự đảo ngược và lưu các ký tự đó vào chuỗi tạm thời. Mã lệnh cho cách thức trên sẽ như sau:

NSString+reverse_interface

Phương pháp này khá đơn giản, chúng ta sẽ dùng vòng lặp duyệt các ký tự trong chuỗi. Chúng ta nối thêm các ký tự hiện tại bằng cách sử dụng stringWithFormat và ký tự nhận dạng (%c). Nếu tất cả diễn ra tốt đẹp thì sau đó tất cả các đối tượng NSString trong chương trình của chúng ta phải tuân theo category mới. Cụ thể, bây giờ tất cả các đối tượng của NSString của chúng ta sẽ có phương thức reverseString để đảo ngược chuỗi mà nó đang chứa.

Ta sẽ lưu mã lệnh trong các file interface và lớp thực thi vào các file với tên theo theo quy ước riêng. Cụ thể, hai file mà chúng tôi đã tạo ra được đặt tên: NSString+reverse.h (interface) và NSString+reverse.m (lớp thực thi). Đây là một quy ước đặt tên biến điển hình của kiểu lớp mà có thêm một category (‘+’, và tên của category). Tiếp tục chúng ta sẽ vào lớp main. m để xây dựng đoạn mã để kiểm tra xem quá trình tạo category vừa rồi cho ta kết qủa như thế nào. Các bạn chú ý phải import  file header vừa tạo vào đầu file main.m. Trong đoạn mã lệnh bên dưới, chúng ta có khởi tạo đối tượng NSString nhưng các bạn đừng nhầm là đó là đối tượng nguyên bản trong foundation framework mà đó là đối tượng NSString thuộc categoryreverse” mà chúng ta đã tạo ra và như vậy ta có thể kiểm tra phương thức reverseString. Cụ thể, nội dung sẽ như thế này:

ReversedString_main

Nếu tất cả các bước trên bạn đã thực hiện đúng thì còn chần chừ gì nữa. Hãy ấn ngày button “Run” và tận hưởng kết quả là một chuỗi đã được đảo ngược “txeT elpmaS” trên màn hình output.

Như bạn có thể thấy, category thực sự là khá hữu ích (đặc biệt là với chuỗi). Chúng có thể sử dụng trong bất kỳ chương trình nào, một trong những trường hợp phổ biến chúng tôi hay sử dụng là phương thức kiểm tra tính hợp lệ đối với dữ liệu. Bằng cách này, chúng ta có thể giữ tất cả phương thức kiểm tra tính hợp lệ của dữ liệu ở một chỗ và không phải sử dụng bất kỳ subclass phức tạp nào cả.

Chuẩn bị “lên đỉnh” với iPhone application

Có lẽ nhiều bạn đọc đến đây sẽ rất “máu” và mong muốn “vọc” vào viết iPhone application ngay. Tuy nhiên đừng vội, hãy chuẩn bị thật kỹ vì chúng ta còn có nhiều thời gian. Phần tiếp theo chúng tôi xin giới thiệu một số khái niệm về Cocoa framework, một thành phần rất quan trọng đối với các Apple developer. Phần này chúng tôi sẽ không đi sâu nói về Objective-C nữa mà tôi muốn giới thiệu qua cho các bạn những công cụ, hướng dẫn hay cụ thể là những API mà các bạn cần dùng trong quá trình phát triển các iPhone application sau này.

Xcode và iOS SDK

Để phát triển các ứng dụng trên iPhone hay iPad các bạn cần phải hiểu kỹ về hệ điều hành mà các thiết bị này đang sử dụng bạn. Đó chính là hệ điều hành iOS. Đối với “người mới”, chắc hẳn các bạn sẽ lo lắng làm thể nào có thể trải nghiệm iOS hay dùng công cụ gì để phát triển các ứng dụng trên iOS. Không phải lo lắng, Apple đã làm hết cho bạn rồi. Nếu bạn đã cài hệ điều hành MacOS X thì bạn có thể cài thêm các option về XcodeiOS SDK. Xcode là một bộ công cụ cực kỳ tuyệt vời giúp bạn có thể dễ dàng tạo, xây dựng, kiểm tra và chạy thử các ứng dụng cho iOS. Tuy nhiên bạn đừng quên bạn sẽ không thể giả lập hay sử dụng tất cả các tính năng như trên các thiết bị thật nếu thiếu iOS SDK. Bộ SDK này chứa đầy đủ các thư viện để phát triển ứng dụng cũng như công cụ giả lập thiết bị giúp bạn có  cái nhìn trực quan các ứng dụng chạy trên iPhone hay iPad. Một lời khuyên chân thành là “hãy đầu tư một máy tính của Apple để phát triển các ứng dụng cho Apple“.

ios_sdk

Cocoa Touch framework

Cocoa Touch framework chứa các thư viện, API và runtime giúp cho Apple developer có thể nhanh chóng xây dựng các ứng dụng trên iOS.  Cocoa Touch framework được xây dựng tập trung vào giao diện cảm ứng và tối ưu hóa các ứng dụng trên iOS. Trong Cocoa Touch framework, thành phần UIKit cung cấp các công cụ cơ bản mà bạn cần để xây dựng các ứng dụng GUI và hướng sự kiện trong iOS. UIKit được xây dựng dựa trên cơ sở của Foundation framework – thành phần rất quan trọng cho phát triển ứng dụng trên hệ điều hành MacOS X – bao gồm cả xử lý tập tin, mạng, xây dựng chuỗi và nhiều tính năng khác nữa.

Giao diện duy nhất của iOS có nghĩa rằng Cocoa Touch dùng để tạo ra có GUI có thiết kế độc đáo để phù hợp chỉ cho các thiết bị chạy iOS. Sử dụng UIKit bạn có quyền truy cập vào các điều khiển giao diện cảm ứng đa chạm, nút bấm, và xem toàn màn hình trên iOS.

framework_layer_2x_details

Cocoa Touch và Objective-C

Phần lớn Cocoa Touch được tạo bởi Objective-C, một ngôn ngữ OOP được biên dịch để chạy với tốc độ đáng kinh ngạc. Bởi vì Objective-C được xây dựng từ C nên sẽ rất dễ dàng để kết hợp C và cả C++ vào các ứng dụng Cocoa Touch của bạn.

Khi ứng dụng của bạn chạy, Objective C runtime khởi tạo các đối tượng dựa trên quá trình thi hành logic – không chỉ ra trong quá trình biên dịch. Ví dụ, một ứng dụng Objective-C chạy có thể tải một interface (một tập tin nib được tạo ra bởi Interface Builder), kết nối các đối tượng Cocoa trong interface vào mã lệnh ứng dụng của bạn, sau đó gọi đúng phương thức mỗi khi UI button được nhấn. Không cần thiết phải biên dịch lại.

Tổng kết toàn bộ các bài học

Đây không chỉ là phần tổng kết của bài hướng dẫn này mà còn là phần tổng kết của seri bài về các nguyên tắc cơ bản trong Objective-C. Kết thúc seri này, các bạn đã tìm hiểu được những chủ đề sau:

  • Nguyên tắc cơ bản của lập trình Objective-C
  • Nguyên tắc cơ bản của OOP
  • Lớp và tính thừa kế
  • Quản lý bộ nhớ
  • Thực hành xây dựng một bài toán đơn giản từ A tới Z
  • Một số mở rộng của Objective-C

Chúng tôi hy vọng loạt bài này sẽ thực sự có ích cho các bạn mong muốn chinh phục Apple application và chúng tôi khuyên các bạn nên đọc lại seri bài viết này thêm một vài lần nữa để có thể hiểu sâu hơn về Objective-C trước khi bắt tay vào phát triển các ứng dụng cho iPhone hay iPad.

Thách thức

Đến thời điểm này, chúng ta đã hoàn tất toàn các bài học nhưng thách thức là vô tận nhất là nếu bạn còn muốn “lên đỉnh” với iPhone application. Chúng tôi sẽ đánh giá cao các bạn nếu các bạn quyết định sẽ xây dựng một ứng dụng đầu tiên ngay sau seri bài này. Xin chúc các bạn thành công với Objective-CiPhone application.

2 Responses to Phần 6: Chuẩn bị “lên đỉnh” với iPhone application

  1. Demo says:

    Cảm ơn bạn rất nhiều, bài viết vô cùng hữu ích.

  2. lamvu80 says:

    Bạn ơi, bạn đã lên đỉnh với “iPhone App” chưa?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: