Skip to main content

Cơ bản về ngôn ngữ Dart - Lập trình hướng đối tượng

· 4 min read

Dart OOP Hero

Dart là một ngôn ngữ lập trình hướng đối tượng mạnh mẽ, hỗ trợ đầy đủ các tính năng của OOP. Bài viết này sẽ giúp bạn hiểu rõ về các khái niệm cơ bản của lập trình hướng đối tượng trong Dart.

1. Class và Object

Định nghĩa Class

Class là một khuôn mẫu để tạo ra các đối tượng. Trong Dart, chúng ta định nghĩa class như sau:

class Person {
// Thuộc tính (Properties)
String name;
int age;

// Constructor
Person(this.name, this.age);

// Phương thức (Methods)
void introduce() {
print('Xin chào, tôi là $name, $age tuổi.');
}
}

Tạo và sử dụng Object

void main() {
// Tạo đối tượng từ class
var person = Person('John', 25);

// Gọi phương thức
person.introduce();

// Truy cập thuộc tính
print(person.name); // John
print(person.age); // 25
}

2. Tính đóng gói (Encapsulation)

Dart hỗ trợ tính đóng gói thông qua các access modifier:

class BankAccount {
// Private field (bắt đầu bằng dấu _)
double _balance = 0;

// Getter
double get balance => _balance;

// Setter
set balance(double value) {
if (value >= 0) {
_balance = value;
}
}

// Public method
void deposit(double amount) {
if (amount > 0) {
_balance += amount;
}
}

// Private method
void _updateBalance(double amount) {
_balance = amount;
}
}

3. Kế thừa (Inheritance)

Dart hỗ trợ kế thừa đơn thông qua từ khóa extends:

// Class cha
class Animal {
String name;

Animal(this.name);

void makeSound() {
print('Some sound');
}
}

// Class con
class Dog extends Animal {
Dog(String name) : super(name);

@override
void makeSound() {
print('Woof!');
}

void fetch() {
print('$name is fetching the ball');
}
}

4. Đa hình (Polymorphism)

Dart hỗ trợ đa hình thông qua việc ghi đè phương thức:

class Shape {
double area() {
return 0;
}
}

class Circle extends Shape {
double radius;

Circle(this.radius);

@override
double area() {
return 3.14 * radius * radius;
}
}

class Rectangle extends Shape {
double width;
double height;

Rectangle(this.width, this.height);

@override
double area() {
return width * height;
}
}

5. Interface và Abstract Class

Abstract Class

abstract class Vehicle {
void start();
void stop();

// Có thể có phương thức có sẵn
void honk() {
print('Beep beep!');
}
}

class Car extends Vehicle {
@override
void start() {
print('Car starting...');
}

@override
void stop() {
print('Car stopping...');
}
}

Interface

Trong Dart, mọi class đều là một interface. Chúng ta có thể sử dụng từ khóa implements:

class Flyable {
void fly() {
print('Flying...');
}
}

class Bird implements Flyable {
@override
void fly() {
print('Bird is flying');
}
}

6. Mixins

Mixins cho phép tái sử dụng code giữa các class:

mixin Swimming {
void swim() {
print('Swimming...');
}
}

mixin Flying {
void fly() {
print('Flying...');
}
}

class Duck with Swimming, Flying {
void quack() {
print('Quack!');
}
}

7. Ví dụ thực tế

// Định nghĩa class Product
class Product {
final String id;
final String name;
final double price;

Product(this.id, this.name, this.price);
}

// Định nghĩa class Cart
class Cart {
final List<Product> _items = [];

void addItem(Product product) {
_items.add(product);
}

void removeItem(String productId) {
_items.removeWhere((item) => item.id == productId);
}

double get total => _items.fold(0, (sum, item) => sum + item.price);

void displayItems() {
for (var item in _items) {
print('${item.name}: \$${item.price}');
}
print('Total: \$${total}');
}
}

// Sử dụng
void main() {
var cart = Cart();

cart.addItem(Product('1', 'Laptop', 999.99));
cart.addItem(Product('2', 'Mouse', 29.99));

cart.displayItems();
}

Kết luận

Lập trình hướng đối tượng trong Dart cung cấp một cách tiếp cận mạnh mẽ và linh hoạt để tổ chức và quản lý code. Hiểu rõ các khái niệm cơ bản như class, object, inheritance, polymorphism và encapsulation sẽ giúp bạn viết code Dart hiệu quả và dễ bảo trì hơn.


Tài liệu tham khảo: