Trong bài này sẽ đi sâu tìm hiểu về các method/hàm trong class. Tuy mỗi ngôn ngữ sẽ có syntax khác nhau một chút, tuy nhiên về cấu trúc thành phần cơ bản sẽ không có nhiều khác biệt.
1. Cấu trúc của hàm
Thành phần cơ bản của 1 phương thức bình thường (concrete method):
+ Method header: {modifier} {return value type} {method name} (parameter list)
+ Method body: Định nghĩa code thực thi, có thể trả về giá trị hoặc không – phụ thuộc vào return value type.
Note: với abtract method thì không có phần Method body. Body của nó sẽ được định nghĩa trong hàm Overiding của class thừa kế.
2. Một số loại hàm
+ Hàm khởi tạo (Constructor): code thực thi trong hàm này sẽ tự động chạy khi ta khởi tạo thực thể (trong quá trình thực thể hóa). Chú ý: Tên hàm trùng tên Class, hàm void chỉ thực hiện hành động (không return-trả về kết quả)
+ Hàm hủy khởi tạo (Deconstructor): hàm này ngược với hàm khởi tạo, được gọi khi đối tượng bị hủy, ít khi được dùng. Trong các ngôn ngữ lập trình ngày nay, khi chương trình kết thúc, bộ dọn khởi chạy và hàm này sẽ được gọi.
+ Hàm thường (Concrete Method): loại hàm còn lại, có code thực thi đầy đủ bên trong, thực thi khi ta chủ động gọi.
+ Hàm trừu tượng (Abstract Method): ngược lại với hàm thường, hàm trừu tượng không chứa code thực thi bên trong. Hàm trừu tượng được khai báo trong lớp trừu tượng (Abstract Class), buộc cho các class thừa kế từ lớp trừu tượng phải khai báo ghi đè (override) code thực thi cho hàm trừu tượng này.
+ Hàm tĩnh (Static Medthod): loại hàm này sẽ được khai báo thêm từ khóa “static”. Khác với hàm thường phải được gọi thông qua Object cụ thể thì Static method có thể gọi trực tiếp không thông qua đối tượng. Nó luôn chiếm sẵn một vùng nhớ cố định khi class được khai báo. Thường thì loại hàm này sẽ sử dụng để tạo nên các hàm tiện ích.
Trên đây là các loại hàm phổ biến được dùng trong OOP với các ngôn ngữ C#, Java, php. Vẫn còn một số loại khác trong các ngôn ngữ C++… nhưng mình không đề cập tới.
3. Overriding và Overloading
Method Overriding và Overloading có thể coi là 2 cách trong các cách “biến dị” của method làm nó khác biệt với việc một method thông thường hay một hàm thường được gọi.
Method Overriding – đè hàm: đây là phương thức được khai báo để ghi đè phương thức trừu tượng (hoặc phương thức thường) của superclass(class cha).
Method Overloading – chồng hàm: khai báo phương thức này cùng tên với 1 phương thức khác nhưng có sự khác nhau về Parameter.