Tính đa hình trong OOP là một nội dung không mới, nhưng ít ai thực sự hiểu rõ về khái niệm này. Bài viết sẽ giải thích về Tính đa hình cũng như giới thiệu về các loại đa hình mà bạn cần biết.Bạn đang xem: Tính đa hình là gì

Tổng quan về Tính đa hình trong OOP

Khái niệm

Tính đa hình (Polymorphism) là một trong bốn tính chất cơ bản của Lập trình hướng đối tượng (Object-oriented programming – viết tắt là OOP). Các tính chất còn lại bao gồm: Tính đóng gói (Encapsulation), Tính kế thừa (Inheritance) và Tính trừu tượng (Abstraction).

Bạn đang xem: Đa hình là gì

Trong tiếng Hy Lạp, thuật ngữ “polymorphism” mang ý nghĩa là “có nhiều dạng”. Tương tự, trong lập trình thuật ngữ này dùng để ám chỉ đến 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. Tức là nhiều hàm hoặc phương thức có thể 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

Lập trình viên có thể tận dụng Tính đa hình trong OOP vào những trường hợp sau:

Khi các lớp con cần dùng phương thức của lớp cha để bổ sung cho một phương thức khác.Khi một lớp cần có nhiều phương thức cùng tên nhưng khác tham số (parameter).
*

Nhìn chung, nếu lập trình viên tận dụng được Tính đa hình thì sẽ mang lại nhiều lợi ích trong quá trình phát triển phần mềm. Những lợi ích đó có thể là:

Minh họa về Tính đa hình

Tính đa hình trong đời sống

Bạn hãy thử tưởng tượng nếu bạn yêu cầu những người sau thực hiện hành động “CẮT”:

Bác sĩ phẫu thuậtNhà tạo mẫu tócDiễn viên

Khi đó, chuyện gì sẽ xảy ra?

Bác sĩ phẫu thuật sẽ bắt đầu rạch dao mổ.Nhà tạo mẫu sẽ bắt đầu cắt tóc cho một ai đó.Nam diễn viên sẽ ngừng diễn cảnh hiện tại, chờ đạo diễn hướng dẫn.

Ví dụ trên cho thấy bản chất của Tính đa hình. Nó tượng trưng cho việc cùng một tên gọi nhưng hành vi thì khác nhau.

Tính đa hình trong OOP

Sau đây là một ví dụ về Tính đa hình trong OOP được viết theo ngôn ngữ lập trình Python.


*

Minh họa về Tính đa hình trong OOP của ngôn ngữ Python.

Từ đoạn mã trên, chúng ta thấy rằng trong chương trình có hai hàm cùng mang tên là “print”. Tuy nhiên, hai hàm lại có tham số khác nhau. Do đó, chức năng của hai hàm này cũng hoàn toàn khác nhau. Cụ thể:

Hàm print thứ nhất có tham số kiểu chuỗi (string). Vì vậy, mục đích của hàm này là để in một chuỗi ra màn hình.Hàm print thứ hai có tham số kiểu danh sách (list). Vì vậy, mục đích của hàm này là để in một danh sách ra màn hình. Trong trường hợp trên là danh sách kiểu số nguyên (int).

Các loại đa hình cần biết

Theo đó, Tính đa hình cho phép một phương thức thực thi những hành vi khác nhau theo hai hướng: sử dụng phương thức ghi đè (method overriding) hoặc phương thức nạp chồng (method overloading).

Đa hình thời gian chạy

Đây là trường hợp 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 gian chương trình đang chạy.

Đa hình thời gian chạy sử dụng phương thức ghi đè. Cụ thể, lớp con sẽ dùng lại một phương thức cùng tên với phương thức sẵn có của lớp cha.


*

Minh họa về phương thức ghi đè trong ngôn ngữ lập trình Python.

Đa hình thời gian biên dịch

Đây là trường hợp 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 gian chương trình đang biên dịch.

Đa hình thời gian biên dịch sử dụng phương thức nạp chồng. Cụ thể, các phương thức hoặc hàm có thể cùng tên, nhưng sẽ khác một số tham số (parameter) được truyền vào trong lệnh gọi. Tùy vào số lượng tham số được truyền vào mà phương thức đó sẽ cho ra các kết quả khác nhau.

Lưu ý về Tính đa hình

Vẫn còn một điểm mà bạn cần lưu ý về Tính đa hình. Đó là mỗi ngôn ngữ lập trình khác nhau lại có cách tiếp cận khác nhau. Chẳng hạn, Java, C ++ có hỗ trợ phương thức nạp chồng nhưng Python, JavaScript thì không.

Trong Python, bạn có thể dùng phương thức nạp chồng nhưng chương trình sẽ chỉ ghi nhớ lần khởi tạo cuối cùng. Do đó, khi sử dụng ngôn ngữ nào thì bạn cần phải nghiên cứu thật kỹ về Tính đa hình của ngôn ngữ bạn đang dùng để làm chủ nó tốt hơn.

Tóm lại, Tính đa hình là một tính chất hay mà lập trình viên nên tận dụng. Hy vọng qua bài viết, các bạn sẽ có góc nhìn rõ ràng hơn về Tính đa hình trong OOP.

Xem thêm: Luyện Tập Trang 110 Giải Toán Lớp 5 Trang 110, Luyện Tập Tiết 106

Tham khảo: Geeksforgeeks.org

Nếu bạn quan tâm, hãy xem các vị trí đang tuyển dụng của Got It tại: bit.ly/gotit-hanoi và đọc thêm về quy trình tuyển dụng tại đây.