Phần 4: “Tự sướng A2Z” với một chương trình Objective-C hoàn thiện


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

Chào mừng bạn đến với bài học thứ 4 của loạt bài về Objective-C. Qua 3 bài học, chắc hẳn các bạn đã có những khái niệm cơ bản nhất về OOP trong Objective-C. Tiếp tục trong bài này, chúng tôi sẽ hướng dẫn các bạn xây dựng một chương trình hoàn thiện dựa trên những đối tượng bạn đã sử dụng ở bài học thứ 2.

Bắt đầu

Chúng ta sẽ bắt đầu với Xcode và tạo ra một project mới thông qua các các bước File> New Project> Mac OS X> Application> Command Line Tool, tiếp tục đặt tên project là “TestCar” và chọn Type: Foundation.

new_project

TestCar_project

Cuối cùng bạn nhấn vào nút Create để lưu project “TestCar” vào một chỗ cố định trong ổ cứng của bạn. Khi cửa sổ project xuất hiện bên tay trái, chúng ta sẽ cần phải tạo một lớp mới. Để làm được điều ày, bạn cần phải ấn tổ hợp phím Command-N (hoặc vào File> New File), sau đó chọn MacOS X> Cocoa> Objective-C class. Chúng ta sẽ đặt tên cho Class là “Car” và để mặc định tùy chọn Subclass of là NSObject (có nghĩa là lớp Car ta tạo ra sẽ là lớp con của NSObject). Cuối cùng nhấn button Create để lưu class Car vào thư mục của project TestCar.

Car_class
Lớp Car bây giờ đã tạo ra nhưng nó không làm gì cả. Chúng ta sẽ thêm nội dung cho lớp Car. Tuy nhiên hãy ghi nhớ ở bài 2 chúng tôi đã có nói, Objective-C phân chia riêng biệt mã lệnh tạo một class thành 2 phần: một phần chứa các khai báo thuộc tính và phương thức là interface (file Car.h) và phần còn lại chứa phần lớp thực thi (file Car.m). Chúng ta sẽ tiến hành xây dựng interface trước tiên.

Xây dựng Interface

Chúng ta sẽ mở file Car.h và trong trạng thái ban đầu, nó sẽ giống ở trạng thái rỗng, có nghĩa là nội dung trong interface chưa có gì cả.

empty_Car_Interface

Trước hết, chúng ta phải khai báo foundation framework để có thể sử dụng được những lớp như NSString, NSMutableString… Sau đó, chúng ta sẽ tạo ra lớp Car là lớp con của NSObject. Trên lớp Car, chúng ta sẽ tạo ra một số thông tin lữu trữ những đặc tính của đối tượng Car. Cụ thể là đối tượng xe hơi thường sẽ có những thông tin như sau:

  • Make
  • Model
  • VIN

Thực tế thì một chiếc ôtô sẽ có rất nhiều thuộc tính. Tuy nhiên ở đây chúng tôi chỉ xin đề ra 3 thuộc tính rất thông dụng mà mọi ôtô đều có. Đó là thuộc tính make chứa thông tin về hãng xe, model chứa thông tin về mẫu xe và VIN (Vehicle dentification Number).  Như vậy ở trên interface Car ta sẽ khai báo 3 thuộc tính sau dòng khai báo interface và nằm trong ngoặc {} như đoạn mã bên dưới:

Car_Interface_with_attributes

Tuy nhiên để bên ngoài có thể truy xuất giá trị của các thuộc tính thuộc trong lớp Car thì trên interface Car ta phải tạo ra các phương thức set... nhằm có thể thay đổi giá trị thuộc tính và các phương thức get... nhằm lấy các giá trị thuộc tính của một đối tượng Car đã khởi tạo.

Car_Interface_with_get_set_methods

Ngoài những phương thức get...set... chúng ta có thể tạo thêm cho lớp Car một số phương thức hoạt động khác ví dụ như:

  • start
  • addGas
  • stop

Các phương thức trên sẽ được khai báo trong interface và ở đây chúng tôi xin áp dụng kiểu trả về là void cho cả 3 phương thức. Như vậy nội dung mới của interface Car sẽ như sau:

Car_Interface_with_attributes_and_methods

Xây dựng lớp thực thi

Vì vậy, bây giờ sau khi ta đã khai báo các thuộc tính và phương thức trên interface thì việc tiếp theo của chúng ta là phải khởi tạo nội dung cho các phương thức đã khai báo trong interface. Nhìn lại, chúng ta cần tạo 6 phương thức: setVin, setMake, setModelvin, make, model. Nội dung của file “Car.m” như sau:

Car_Class_with_methods

Nếu như các bạn đã tìm hiểu qua về OOP thì đều biết, bất cứ lớp nào được tạo ra đều có constructor có sẵn mặc định (phương thức khởi tạo đối tượng). Lớp Car trong Objective-C cũng giống như vậy, cho nên ta không cần tạo constructor trong lớp Car thì vẫn khởi tạo đối tượng Car được. Tuy nhiên để đảm bảo mỗi đối tượng được khởi tạo sẽ có sẵn những thông tin như chúng ta mong muốn thì ta phải tự xây dựng lại constructor. Cụ thể ta sẽ thêm đoạn mã tạo constuctor như sau:

Car_Class_with_constructor_and_methods

Xây dựng lớp chính (file main.m)

Xin chúc mừng! Nếu bạn đã hoàn tất các bước trên thì bước cuối cùng này sẽ giúp chúng ta kiểm tra lại kết quả mà ta đã xây dựng. Cụ thể trong bước này ta sẽ làm các công việc sau:

  • Khởi tạo đối tượng myCar (một thể hiện của lớp Car)
  • Set và get giá trị các thuộc tính của đối tượng myCar
  • Thực thi các phương thức start, addGasstop của đối tượng myCar

Để làm được những điều trên các bạn hãy mở file main.m và gõ theo nội dung dưới đây:

TestCar_main

Sau khi đã hoàn tất viết mã cho lớp main bạn có thể chạy chương trình bằng cách nhấn vào nút Run ở bên trên cửa sổ Project hoặc vào menu Product> Run. Nếu quá trình dịch thành công bạn sẽ nhìn thấy kết quả ở cửa sổ output bên dưới màn hình như sau:

TestCar_output

Phần tiếp theo

Bài học thứ 4 đã kết thúc với một chương trình trọn vẹn trong Objective-C. Tuy nhiên nếu các bạn thành thạo những kỹ thuật trong OOP thì chúng tôi khuyên các bạn nên đọc thêm sách và thực hành nhiều hơn nữa. Để tiếp tục hiểu sâu hơn về cơ chế cấp phát và quản lý bộ nhớ trong Objective-C, xin mời các bạn đọc bài học thứ 5…

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: