- Lập trình hướng đối tượng (OOP) là một phương pháp lập trình dựa trên việc sử dụng các "đối tượng" để phát triển phần mềm. Một đối tượng trong OOP thường bao gồm hai thành phần chính: tính chất (properties) và phương thức (methods). Tính chất mô tả trạng thái của đối tượng, trong khi phương thức xác định hành động mà đối tượng có thể thực hiện.
1. Đóng gói (Encapsulation)
- Định nghĩa: Đóng gói là tính chất cho phép bảo vệ dữ liệu của đối tượng bằng cách giới hạn quyền truy cập. Dữ liệu và các phương thức thao tác với dữ liệu được gộp lại trong một lớp, và chỉ các phương thức công khai (public) được phép truy cập hoặc sửa đổi dữ liệu đó.
public class BankAccount
{ private double balance; public void Deposit(double amount) { if (amount > 0) { balance += amount; } } public double GetBalance() { return balance; }
}
- Trong ví dụ này, biến balance được đóng gói và không thể truy cập trực tiếp từ bên ngoài lớp BankAccount. Người dùng chỉ có thể thực hiện các thao tác thông qua các phương thức Deposit và GetBalance.
2. Kế thừa (Inheritance)
- Định nghĩa: Kế thừa cho phép tạo ra một lớp mới dựa trên một lớp đã có, giúp tái sử dụng mã và mở rộng chức năng của lớp cha mà không cần viết lại mã.
public class Animal
{ public void Eat() { Console.WriteLine("Animal is eating."); }
} public class Dog : Animal
{ public void Bark() { Console.WriteLine("Dog is barking."); }
}
- Trong ví dụ này, lớp Dog kế thừa các phương thức từ lớp Animal và có thêm phương thức riêng Bark. Bạn có thể tạo một đối tượng Dog và sử dụng cả phương thức Eat từ lớp cha.
3. Đa hình (Polymorphism)
- Định nghĩa: Đa hình cho phép các đối tượng thuộc các lớp khác nhau có thể được xử lý thông qua cùng một giao diện. Điều này giúp viết mã linh hoạt hơn.
public class Animal
{ public virtual void Speak() { Console.WriteLine("Animal speaks."); }
} public class Cat : Animal
{ public override void Speak() { Console.WriteLine("Cat meows."); }
} public class Dog : Animal
{ public override void Speak() { Console.WriteLine("Dog barks."); }
} public void MakeAnimalSpeak(Animal animal)
{ animal.Speak();
}
- Khi bạn gọi MakeAnimalSpeak với một đối tượng Dog hoặc Cat, phương thức Speak tương ứng sẽ được gọi. Điều này cho phép bạn viết mã linh hoạt và mở rộng.
4. Trừu tượng (Abstraction)
- Định nghĩa: Trừu tượng cho phép bạn tạo ra các lớp hoặc giao diện mà chỉ định nghĩa các phương thức mà không cung cấp chi tiết cụ thể. Điều này giúp người dùng chỉ cần biết cách sử dụng mà không cần hiểu sâu về cách thực hiện.
public abstract class Shape
{ public abstract double Area();
} public class Circle : Shape
{ public double Radius { get; set; } public override double Area() { return Math.PI * Radius * Radius; }
} public class Rectangle : Shape
{ public double Width { get; set; } public double Height { get; set; } public override double Area() { return Width * Height; }
}
- Trong ví dụ này, lớp Shape định nghĩa phương thức trừu tượng Area, và các lớp Circle và Rectangle cung cấp các chi tiết cụ thể để tính diện tích của từng hình dạng. Người dùng chỉ cần biết cách gọi phương thức Area mà không cần hiểu cách thực hiện bên trong.
5. Lý do xài OOP
- Bốn tính chất cơ bản của lập trình hướng đối tượng (Đóng gói, Kế thừa, Đa hình và Trừu tượng) giúp lập trình viên xây dựng ứng dụng dễ bảo trì, mở rộng và linh hoạt hơn. Những tính chất này là nền tảng để phát triển phần mềm hiệu quả và tối ưu.