Search

Tính trừu tượng (Abstraction) trong C# là gì

Tính trừu tượng (Abstraction) trong C# là gì

Tính trừu tượng (Abstraction) trong C# là gì? Ví dụ Abstract Class & Interface dễ hiểu

Tính trừu tượng (Abstraction) là một trong bốn trụ cột quan trọng của lập trình hướng đối tượng (OOP) trong C# (bên cạnh Encapsulation, Inheritance và Polymorphism).

Bài viết này sẽ giúp bạn:

  • Hiểu đúng tính trừu tượng là gì
  • Phân biệt Abstract ClassInterface
  • Hiểu rõ ứng dụng thực tế trong C#
  • Xem ví dụ dễ hiểu, sát thực tế

1. Tính trừu tượng (Abstraction) là gì?

Tính trừu tượng cho phép lập trình viên:

  • Chỉ quan tâm đến những hành vi chung
  • Ẩn đi chi tiết cài đặt cụ thể
  • Làm việc thông qua kiểu cha thay vì lớp con

👉 Biết đối tượng làm được gì, không cần biết làm như thế nào.

Trong C#, trừu tượng được thể hiện qua:

  • abstract class
  • interface

2. Ví dụ thực tế: Citizen – Student – Teacher

Giả sử ta xây dựng hệ thống quản lý công dân, trong đó:

  • Sinh viên
  • Giáo viên
    đều là Citizen

3. Abstract Class trong C#

Khai báo lớp trừu tượng Citizen

 
public abstract class Citizen
{
    public string Name { get; set; }

    protected Citizen(string name)
    {
        Name = name;
    }

    // Phương thức trừu tượng
    public abstract void Work();
}

👉 Citizen không thể khởi tạo trực tiếp
👉 Chỉ dùng để làm khuôn mẫu chung


Lớp Student kế thừa Citizen

 
public class Student : Citizen
{
    public Student(string name) : base(name) { }

    public override void Work()
    {
        Console.WriteLine($"{Name} đang đi học");
    }
}


Lớp Teacher kế thừa Citizen

 
public class Teacher : Citizen
{
    public Teacher(string name) : base(name) { }

    public override void Work()
    {
        Console.WriteLine($"{Name} đang giảng dạy");
    }
}

4. Khởi tạo đối tượng theo cách thông thường

 
Student s = new Student("An");
Teacher t = new Teacher("Bình");

❌ Nhược điểm:

  • Code phụ thuộc trực tiếp vào lớp con
  • Khó mở rộng, khó bảo trì

5. Khởi tạo theo tính trừu tượng (Abstraction)

 
Citizen c1 = new Student("An");
Citizen c2 = new Teacher("Bình");

Điều gì đang xảy ra?

  • Khi viết codec1, c2Citizen
  • Khi chương trình chạy (runtime):
    • c1Student
    • c2Teacher
 
c1.Work(); // An đang đi học
c2.Work(); // Bình đang giảng dạy

👉 Đây là đa hình (Polymorphism)
👉 Và nó chỉ tồn tại nhờ tính trừu tượng


6. Vì sao IntelliSense không thấy method của Student?

 
c1. 

IDE chỉ gợi ý các method của Citizen, không phải Student.

👉 Vì kiểu khai báo của c1Citizen

✔ Giúp code an toàn
✔ Giảm phụ thuộc
✔ Đúng chuẩn thiết kế OOP


7. Quản lý nhiều đối tượng bằng tính trừu tượng

 
List<Citizen> citizens = new List<Citizen>
{
    new Student("An"),
    new Teacher("Bình"),
    new Student("Cường")
};

foreach (var citizen in citizens)
{
    citizen.Work();
}

👉 Không cần quan tâm đó là Student hay Teacher
👉 Chỉ cần biết đó là Citizen


8. Interface trong C# là gì?

Interface là một dạng trừu tượng thuần túy hơn:

  • Không chứa logic
  • Chỉ định nghĩa hành vi
  • Một class có thể implement nhiều interface

Ví dụ Interface IWorkable

 
public interface IWorkable
{
    void Work();
}

Citizen implement Interface

 
public abstract class Citizen : IWorkable
{
    public string Name { get; set; }

    protected Citizen(string name)
    {
        Name = name;
    }

    public abstract void Work();
}

👉 Interface giúp chuẩn hóa hành vi
👉 Abstract class giúp tái sử dụng code chung


9. So sánh Abstract Class và Interface

Tiêu chíAbstract ClassInterface
Có field✅ Có❌ Không
Có constructor✅ Có❌ Không
Kế thừa nhiều❌ Không✅ Có
Chứa logic✅ Có❌ (trước C# 8)

👉 Thực tế: kết hợp cả hai là cách làm phổ biến nhất


10. Ứng dụng thực tế của tính trừu tượng

✔ Xây dựng hệ thống lớn
✔ Viết code dễ mở rộng
✔ Áp dụng Dependency Injection
✔ Dùng trong MVC, Clean Architecture, Microservices


11. Tổng kết

  • Tính trừu tượng giúp code linh hoạt, dễ bảo trì
  • Luôn khai báo bằng abstract / interface
  • Khởi tạo bằng class cụ thể
  • Trừu tượng là nền tảng của đa hình

💡 Code tốt không phải là code chạy được, mà là code dễ mở rộng về sau.

Culi Dev

Culi Dev

Enjoy coding, enjoy life!

Leave a comment

Your email address will not be published. Required fields are marked *

Your experience on this site will be improved by allowing cookies Cookie Policy