Tính trừu tượng trong C#

Tính trừu tượng (Abstraction) 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ì?

Tính trừu tượng là khả năng ẩn chi tiết triển khai, chỉ cung cấp thông tin tính năng tới người dùng.

Tính trừu tượng được thể hiện qua abstract class và interface.

Triển khai tính trừu tượng bằng Abstract class

Sử dụng từ khóa abstract để khai báo abstract class trong C#. Abstract class có những đặc điểm sau:

  • Không thể tạo thể hiện cho abstract class.
  • Một abstract class có thể chứa các phương thức thông thường, phương thức ảo (virtual method) và phương thức trừu tượng (abstract method).
  • Không thể sử dụng từ khóa sealed cho abstract class vì nó ngăn không cho một lớp dẫn xuất kế thừa abstract class, trong khi đó abstract class cần phải được kế thừa vì không tạo thể hiện từ abstract class được.

Ví dụ về kế thừa abstract class trong C#:

using System;

namespace AbstractionApplication 
{
   abstract class ExportDataBase
   {
      public abstract void Export();
   }
   
   class TextExport : ExportDataBase 
   {
      public override void Export()
      {
         Console.WriteLine("Export data to .txt file");
      }
   }
   
   class CsvExport : ExportDataBase 
   {
      public override void Export()
      {
         Console.WriteLine("Export data to .csv file");
      }
   }
   
   class Application
   {
      private readonly ExportDataBase _exportData;
      
      public Application(ExportDataBase exportData)
      {
         _exportData = exportData;
      }
      
      public void ExportData()
      {
         _exportData.Export();
      }
   }
   
   class RectangleTester 
   {
      static void Main(string[] args) 
      {
         Application app = new Application(new TextExport());
         app.ExportData();
         Console.ReadKey();
      }
   }
}

Kết quả khi biên dịch và chạy chương trình trên:

Export data to .txt file

Triển khai tính trừu tượng bằng Interface

Interface được định nghĩa là một hợp đồng mà tất cả các lớp triển khai thực hiện (implement) interface phải tuân theo. Interface xác định phần 'cái gì' của hợp đồng và các lớp dẫn xuất xác định phần 'làm thế nào' của hợp đồng.

Interface khai báo các thuộc tính, phương thức và sự kiện là các thành viên của interface. Interface chỉ khai báo các thành viên, trách nhiệm của lớp dẫn xuất là triển khai thực hiện các thành viên này. Interface thường giúp cung cấp một cấu trúc tiêu chuẩn mà các lớp dẫn xuất sẽ tuân theo.

Các abstract class ở một mức độ nào đó phục vụ cho cùng một mục đích. Tuy nhiên, chúng chủ yếu được sử dụng khi chỉ có một vài phương thức được khai báo bởi lớp cơ sở và lớp dẫn xuất triển khai thực hiện các phương thức này.

Dưới đây là ví dụ về tính trừu tượng trong C# sử dụng interface:

using System;

namespace AbstractionApplication 
{
   interface IExportData
   {
      void Export();
   }
   
   class TextExport : IExportData 
   {
      public void Export()
      {
         Console.WriteLine("Export data to .txt file");
      }
   }
   
   class CsvExport : IExportData 
   {
      public void Export()
      {
         Console.WriteLine("Export data to .csv file");
      }
   }
   
   class Application
   {
      private readonly IExportData _exportData;
      
      public Application(IExportData exportData)
      {
         _exportData = exportData;
      }
      
      public void ExportData()
      {
         _exportData.Export();
      }
   }
   
   class RectangleTester 
   {
      static void Main(string[] args) 
      {
         Application app = new Application(new TextExport());
         app.ExportData();
         Console.ReadKey();
      }
   }
}

Kết quả khi biên dịch và chạy chương trình trên:

Export data to .txt file

Như các bạn thấy, lớp Application có chức năng ExportData, nó gọi phương thức Export của interface IExportData mà không cần quan tâm tới phương thức này làm gì.

Trên chương trình trên mình muốn xuất dữ liệu ra file txt nên khi khởi tạo thể hiện của class Application, mình chỉ cần truyền vào thể hiện của class TextExport là xong.

Nếu muốn xuất ra file csv thì mình chỉ cần thay thế bằng thể hiện của class CsvExport.

Lập Trình C#Lập Trình C# Cơ Bản
Bài Viết Liên Quan:
Làm việc với PriorityQueue của .NET 6
Trung Nguyen 25/10/2021
Làm việc với PriorityQueue của .NET 6

Bài viết này sẽ giúp bạn tìm hiểu PriorityQueue của .NET 6 là gì, cách chúng ta thêm các phần tử và cách chúng ta có thể xếp hàng lại cho các phần tử.

Hướng dẫn nhanh và ví dụ về pattern matching trong C#
Trung Nguyen 23/10/2021
Hướng dẫn nhanh và ví dụ về pattern matching trong C#

Bài viết này sẽ trình bày một số ví dụ về pattern matching hữu ích và bạn có thể xem xét sử dụng trong các dự án hiện tại hoặc tương lai của bạn.

Sử dụng chuỗi kết nối Redis-CLI trong StackExchange.Redis
Trung Nguyen 18/10/2021
Sử dụng chuỗi kết nối Redis-CLI trong StackExchange.Redis

Bài viết này sẽ hướng dẫn chúng ta cách viết một phương thức mở rộng để phân tích chuỗi kết nối redis-cli có thể sử dụng với thư viện StackExchange.Redis.

Sử dụng .NET để xác thực JSON bằng lược đồ JSON
Trung Nguyen 17/10/2021
Sử dụng .NET để xác thực JSON bằng lược đồ JSON

JSON được cho là một trong những định dạng dữ liệu phổ biến nhất hiện nay. Chúng ta sẽ tìm hiểu cách đọc và xác thực JSON bằng lược đồ JSON.