Tính đa hình trong OOP đã trở thành một khái niệm không còn mới mẻ, tuy nhiên, hiểu rõ về nó là điều hiếm có. Bài viết này sẽ giải thích về Tính đa hình và giới thiệu đến bạn các loại đa hình quan trọng mà bạn cần nắm rõ.
Tổng quan về Tính đa hình trong OOP
Khái niệm
Tính đa hình là một trong tứ tính chất cơ bản của lập trình hướng đối tượng (OOP), bao gồm tính đóng gói, tính kế thừa và tính trừu tượng.
Trong tiếng Hy Lạp, thuật ngữ “polymorphism” có nghĩa là “đa hình”. Trong lập trình, thuật ngữ này được sử dụng để chỉ việc một biến, một hàm hoặc một phương thức có thể tồn tại ở nhiều dạng khác nhau. Điều này có nghĩa là nhiều hàm hoặc phương thức có thể có cùng một tên nhưng chức năng thực sự của chúng lại khác nhau.
Mục đích của Tính đa hình
Có thể sử dụng tính đa hình trong lập trình hướng đối tượng (OOP) cho những trường hợp sau đây:
Vì sao phải dùng Tính đa hình?
Nếu lập trình viên biết sử dụng Tính đa hình, thì việc phát triển phần mềm sẽ mang lại nhiều lợi ích. Các lợi ích có thể là:
Minh họa về Tính đa hình
Tính đa hình trong đời sống
Hãy cùng tưởng tượng xem nếu bạn yêu cầu những người sau thực hiện hành động “CẮT”:
Sau đó, điều gì sẽ diễn ra?
Ví dụ trên minh họa bản chất của Tính đa hình. Nó biểu trưng cho việc cùng một tên gọi nhưng có hành vi khác nhau.
Tính đa hình trong OOP
Dưới đây là một ví dụ minh họa về Tính đa hình trong OOP, được viết bằng ngôn ngữ lập trình Python.
Chúng ta có thể nhận thấy từ đoạn mã trên rằng chương trình chứa hai hàm có cùng tên là “print”. Tuy nhiên, hai hàm này lại có các tham số khác nhau, điều này dẫn đến hai chức năng hoàn toàn khác nhau cho mỗi hàm. Chi tiết như sau:
Các loại đa hình cần biết
Trong OOP, có hai loại đa hình là đa hình thời gian chạy (Runtime Polymorphism) và đa hình thời gian biên dịch (Compile Time Polymorphism).
Tính đa hình cho phép một phương thức thực hiện những hành vi khác nhau theo hai hướng: ghi đè phương thức hoặc nạp chồng phương thức.
Đa hình thời gian chạy
Đây là một trường hợp mà một đối tượng bị ràng buộc với chức năng của chúng ngay tại thời điểm chương trình đang hoạt động.
Phương thức ghi đè được sử dụng để thực hiện đa hình trong thời gian chạy. Cụ thể, lớp con sẽ tái sử dụng một phương thức có cùng tên với phương thức có sẵn của lớp cha.
Đa hình thời gian biên dịch
Đây là một trường hợp khi một đối tượng bị ràng buộc với chức năng của chúng ngay từ thời điểm chương trình đang được biên dịch.
Công nghệ đa hình trong lập trình cho phép chúng ta sử dụng phương thức nạp chồng. Điều này có nghĩa là chúng ta có thể có các phương thức hoặc hàm cùng tên, nhưng khác nhau về số lượng và loại tham số được truyền vào. Khi gọi phương thức, kết quả trả về sẽ phụ thuộc vào số lượng tham số mà ta truyền vào.
Lưu ý về Tính đa hình
Mỗi ngôn ngữ lập trình có cách tiếp cận khác nhau đối với Tính đa hình. Ví dụ, trong Java và C++, có hỗ trợ phương thức nạp chồng, trong khi Python và JavaScript không có.
Trong Python, bạn có thể sử dụng phương thức nạp chồng, tuy nhiên chỉ lần khởi tạo cuối cùng được ghi nhớ. Vì vậy, việc sử dụng ngôn ngữ nào cũng đòi hỏi bạn phải nghiên cứu kỹ về tính đa hình của ngôn ngữ đó để làm chủ nó tốt hơn.
Tính đa hình là một tính chất hữu ích mà lập trình viên có thể khai thác. Hy vọng qua bài viết này, các bạn sẽ có cái nhìn sâu sắc hơn về tính đa hình trong lập trình hướng đối tượng.
Tôi là Nguyễn Văn Sỹ có 15 năm kinh nghiệm trong lĩnh vực thiết kế, thi công đồ nội thất; với niềm đam mê và yêu nghề tôi đã tạo ra những thiết kếtuyệt vời trong phòng khách, phòng bếp, phòng ngủ, sân vườn… Ngoài ra với khả năng nghiên cứu, tìm tòi học hỏi các kiến thức đời sống xã hội và sự kiện, tôi đã đưa ra những kiến thức bổ ích tại website nhaxinhplaza.vn. Hy vọng những kiến thức mà tôi chia sẻ này sẽ giúp ích cho bạn!