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.
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:
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.
Sử dụng từ khóa abstract để khai báo abstract class trong C#. Abstract class có những đặc điểm sau:
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
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.
Bạn có thể vui lòng tắt trình chặn quảng cáo ❤️ để hỗ trợ chúng tôi duy trì hoạt động của trang web.
Trong loạt bài này, tôi sẽ xem xét một số
Ngôn ngữ C# đã bật các bộ tăng áp liên
Trong bài viết này, chúng ta sẽ tìm hiểu lớp tiện ích ZipFile trong C#, cách nén tập tin và thư mục, cùng với giải nén tập tin zip.
Bài viết này sẽ giới thiệu cách đơn giản nhất mà tôi đã tìm thấy để đọc và ghi file Excel bằng C# sử dụng ExcelMapper.