Đa hình là gì?Đa hình là một trong bốn tính chất đặc trưng của lập trình hướng đối tượng bên cạnh tính đóng gói, tính trừu tượng và tính kế thừa. Vậy thì đa hình là gì? Show Đa hình (polymorphism) là hiện tượng mà các đối tượng thuộc các class khác nhau có thể biểu diễn cùng một thông thiệp theo các cách khác nhau. Hơi nặng về lý thuyết một chút nhưng xem ví dụ sau bạn sẽ rõ ngay! 1001 Tips: Con trỏ và hàm (Pointer & Function) trong C++ Bảng băm trong C++ Ví dụ hai con vật là con chó và con mèo, hai con vật này đều có thể phát ra tiếng nhưng con mèo sẽ kêu “meo meo” còn con chó lại sủa “gâu gâu”. Hành động phát ra tiếng này tuy là một hành động nhưng khi được 2 đối tượng khác nhau là chó và mèo thực hiện thì lại khác nhau. Trước khi đi vào chi tiết, hãy chắc chắn rằng bạn đã nắm được các kiến thức sau:
Tính đa hình là gì?Từ đa hình có nghĩa là có nhiều dạng. Nói một cách đơn giản, chúng ta có thể định nghĩa đa hình là khả năng của một thông điệp được hiển thị dưới nhiều dạng. Mình lấy một ví dụ thực thế nhé: Đa hình được coi là một trong những tính năng quan trọng của Lập trình hướng đối tượng. Tính đa hình C#Tính đa hình là một trong các đặc tính của lập trình hướng đối tượng, trong phần quá tải phương thức - nó đã thể hiện tính đa hình. Tính đa hình của nghĩa là có nhiều dạng, tính đa hình sẽ thể hiện rõ khi xây dựng các lớp kế thừa. Một phương thức được gọi, nó sẽ là phương thức cụ thể nào tùy thuộc vào đối tượng lúc nó thực thi. Phương thức ảo (hàm ảo) C#Một phương thức ảo trong lớp - là phương thức có thể định nghĩa lại (bị nạp chồng - bị đè) bởi lớp kế thừa. Muốn một phương thức là ảo, thêm từ khóa virtual vào khai báo tên hàm. class Product { protected double price = 0; // Phương thức ảo ProductInfo public virtual void ProductInfo() { Console.WriteLine($"Giá sản phẩm {price}"); } public void TestProduct() { this.ProductInfo(); } }Vì phương thức ProductInfo khai báo là loại phương thức virtual, nên ở lớp kế thừa nó, có thể định nghĩa lại - kỹ thuật này gọi là nạp chồng (override) Nạp chồng phương thứcỞ lớp kế thừa, có thể định nghĩa lại phương thức ảo của lớp cơ sở, việc này là thực hiện nạp chồng, để nạp chồng chỉ việc khai báo lại phương thức thêm vào từ khóa override class Iphone : Product { public Iphone() { price = 500; } public override void ProductInfo() { Console.WriteLine($"Điện thoại Iphone"); base.ProductInfo(); } }Khi sử dụng: Product p1 = new Product(); Product p2 = new Iphone(); p1.TestProduct(); // In ra: Giá sản phẩm 0 p2.TestProduct(); // In ra: Điện thoại Iphone Gọi đến ProductInfo đã định nghĩa lạiLớp Iphone đã định nghĩa lại phương thức ProductInfo, nên các lời gọi đến ProductInfo là hoàn toàn khác với định nghĩa ban đầu của nó. Tuy nhiên, nếu muốn thi hành code của hàm mà do lớp cơ sở định nghĩa thì bạn cần gọi đến nó thông qua ký hiệu base. class Iphone : Product { public Iphone() { price = 500; } public override void ProductInfo() { Console.WriteLine($"Điện thoại Iphone"); base.ProductInfo(); // gọi lại hàm ở base } } Product p = new Iphone(); p.TestProduct(); // Điện thoại Iphone // Giá sản phẩm 500Để nhìn rõ hơn về tính đa hình, viết lại 2 đoạn code như sau: Product p = new Product(); p.TestProduct(); Product p = new Iphone(); p.TestProduct();Đều gọi phương thức TestProduct() của lớp cơ sở, nhưng nó lại thi hành những tác vụ khác nhau. Tổng quan về Tính đa hình trong OOPKhái niệmTí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). 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ìnhLậ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:
Vì sao phải dùng Tính đa hình?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à:
Tính đa hình trong C#
Tính đa hình (Polymorphism) là một trong 4 tính chất trụ cột của lập trình hướng đối tượng OOP.
Nếu chưa hiểu rõ về lập trình hướng đối tượng thì bạn nên tham khảo bài viết dưới đây trước: Lập trình hướng đối tượng (OOP) trong C# | Comdy Lập trình hướng đối tượng (OOP) trong C# là gì? 5 khái niệm và 4 tính chất quan trọng của lập trình hướng đối tượng là gì? Tính đa hình là khả năng một đối tượng có thể thực hiện một tác vụ theo nhiều cách khác nhau. Đa hình gồm 2 loại là đa hình tĩnh và đa hình động. |