Đa hình phương thức trong c# là gì?

Đ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ì?

Đ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:

  • Con trỏ và cấp phát động trong C++
  • Cơ bản về Class trong C++
  • Kế thừa trong C++
  • Vector trong C++

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é:
Một người cùng một lúc có thể có đặc điểm khác nhau. Giống như một người đàn ông đồng thời là một người cha, một người chồng, một nhân viên. Vì vậy, cùng một người sở hữu những hành vi khác nhau trong các tình huống khác nhau. Điều này được gọi là đa hì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ại

Lớ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 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).

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).
Tính đa hình dùng để chỉ việc nhiều phương thức cùng tên nhưng chức năng khác nhau (Nguồn: Unsplash).

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à:

  • Lập trình viên không phải viết lại mã hoặc lớp đã có sẵn. Sau khi một đoạn mã hoặc lớp được khởi tạo thành công, ta có thể tái sử dụng chúng nhờ vào Tính đa hình.
  • Lập tình viên có thể dùng một tên duy nhất để lưu trữ biến của nhiều kiểu dữ liệu khác nhau (float, double, long, int,…).
  • Lập trình viên có thể phát triển thêm Tính trừu tượng từ những đoạn mã đơn giản. Bạn có thể tham khảo nội dung này ở những bài viết liên quan.

Tính đa hình trong C#

Đăng bởi Trung Nguyen 2 năm trước trong Lập Trình 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.

  • Tính đóng gói (Encapsulation).
  • Tính kế thừa (Inheritance).
  • Tính đa hình (Polymorphism).
  • Tính trừu tượng (Abstraction).

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ì?

Trung NguyenComdy

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.

Video liên quan

Chủ đề