Thừa kế (Inheritance) trong Objective-C

Share:

Ở phần trước thì mình đã thao tác với NSString. Có phải mình đã dùng những phương thức init? Đúng vậy NSMutableString, NSArray và thực tế thì bất cứ lớp NS nào cũng đều có thể dùng phương thức init. Có vẻ chúng ta đã phí phạm khá nhiều mã lệnh để có thể đưa những phương thức init trong mỗi một lớp, và điều này liệu có đúng? Thật sự không phải như vậy, trong lập trình hướng đối tượng có 1 khái niệm đó là tính kế thừa, nó cung cấp cho lập trình viên 1 khả năng đó là khi có rất nhiều lớp, có tính chất và hành động tương đương nhau thì ta sẽ tạo 1 lớp chứa những tính chất và hành động chung đó, sau đó thì những lớp con sẽ kế thừa tới lớp cha và có thể sử dụng lại những tính chất và hành động của lớp cha mà không cần phải viết lại bất kì một dòng lệnh nào. Thực tế trong foundation framework, các lớp thư viện có chung 1 nguồn gốc, tức là tất cả các lớp thừa kế đều tới 1 lớp gốc, đó là  NSObject. Dĩ nhiên là quá trình thừa kế này hoàn toàn có thể tiếp tục để những lớp con cháu, lớp chắt sẽ thừa kế lớp con của lớp cha. Tuy vậy sự thừa kế chính là một sự thừa kế đơn. Tức là mỗi một lớp con chỉ có thể thừa kế 1 lớp cha duy nhất mà thôi. Chúng ta có thể nhìn vào sơ đồ phía dưới để thấy sự phân cấp quan hệ giữa 1 số lớp căn bản trong foundation framework. 

inheritance

Ở sơ đồ này, các nhà sáng lập ngôn ngữ Objective-C chỉ cần tạo trong  NSObject một phương thức được gọi là init, sau đó những lớp con sẽ kế thừa lớp NSObject để sử dụng lại phương thức init và để có thể đảm bảo những đối tượng con sẽ được khởi tạo đúng như nhau. Tuy vậy trong quá trình kế thừa thì những lớp con cũng có thể ghi đè hoặc sửa đổi nội dung và 1 số đặc tính hay phương thức của lớp cha. Đó chính là kế thừa có cải tiến hay còn được gọi là ghi đè phương thức. Nguyên nhân của việc này là do lập trình hướng đối tượng, khi những lớp con cùng thừa kế 1 lớp cha nhưng vẫn muốn phải đảm bảo được tính đa dạng hay đa hình của những đối tượng con khi tạo ra có thể khác nhau một chút ít từ hình thức cho tới 1 số chi tiết hoạt động. Việc này cũng hoàn toàn hợp lý, và nó cũng vô cùng hiệu quả bởi chúng ta có thể hoàn toàn tạo ra một lớp mới dựa vào những lớp đã được tạo sẵn, tuy nhiên chúng ta có thể thêm vào 1 số gia vị khác ở những lớp con để tạo nên một đặc trưng riêng của những lớp do ta tạo ra.

Ví dụ sau sẽ minh họa việc này:

class_inheritance

 

 

 

Lời kết

Cho tới lúc này, mình có thể chắc chắn rằng các bạn đã nắm rõ được những nguyên tắc cơ bản của lập trình hướng đối tượng trong Objective-C. Chúc các bạn học tốt!

Share:

Leave a reply