Chuyển tới nội dung chính

Các bước và mẹo giải quyết

Để làm được dạng bài này, trước hết, phải bình tĩnh và không được hoảng loạn sau khi đọc đề:v. Đề câu 3 thường nhiều chữ khiến sinh viên lười đọc và đôi khi có các thông tin nhiễu để đánh lừa người đọc, tuy nhiên cấu trúc bài giải thường không quá phức tạp. Thế nên cần bình tĩnh đọc đề và xác định đúng nội dung của đề theo các bước như sau:

Bước 1: Xác định được các lớp đối tượng có trong đề bài:

  • Mối quan hệ giữa các lớp: Lớp nào là lớp cha, lớp nào là lớp con, lớp nào là một thuộc tính của lớp khác?
  • Các lớp con đa số sẽ được liệt kê sẵn trong đề bài, và lớp cha sẽ là lớp trừu tượng được đúc kết từ các điểm chung của lớp con.
  • Thông thường sẽ có thêm một lớp “danh sách” gì đó (có thể gồm một mảng các con trỏ thuộc lớp cha) để biểu diễn một danh sách các đối tượng trong đề.

Bước 2: Thiết kế thuộc tính:

  • Thuộc tính nào mà tất cả các lớp con đều có thì sẽ được khai báo ở lớp cha.
  • Các thuộc tính riêng chỉ xuất hiện ở một số lớp con thì nên đặt ở lớp con tương ứng.
  • Hạn chế để lớp con sỡ hữu các thuộc tính mà nó không cần dùng tới.

Bước 3: Thiết kế phương thức:

  • Dựa vào các yêu cầu của đề bài để xác định phương thức cho từng lớp.
  • Tìm ra các phương thức ở lớp cha trước, sau đó xác định phương thức nào nên là phương thức ảo.
  • Tiếp theo là xác định xem các lớp con sẽ định nghĩa thêm các phương thức mới nào và cần ghi đè những phương thức ảo nào từ lớp cha.
  • Lưu ý là những phương thức nào mà chỉ lớp con mới cần sử dụng thì không nên đặt ở lớp cha.

Một số tip khác:

  • Khi vẽ sơ đồ lớp thì phải ghi đầy đủ kiểu dữ liệu của các thuộc tính, kiểu trả về của các phương thức, vẽ đường nối biểu diễn các mối quan hệ (kế thừa, một nhiều, …)
  • Khi code giấy thì nên khai báo hết tất cả các phương thức bên trong lớp trước rồi định nghĩa sau.
  • Khi thao tác trên nhiều đối tượng, để áp dụng tính đa hình, ta sẽ thường sử dụng một mảng các con trỏ thuộc lớp cha. Trước khi nhập từng đối tượng trong mảng, ta sẽ cấp phát vùng nhớ cho các biến con trỏ tương ứng với loại lớp con mà ta muốn, ví dụ:
// Mảng các con trỏ thuộc lớp cha
LopCha* arr[50];
// Nhập số lượng đối tượng sẽ quản lý
int n; cin >> n;
// Khởi tạo các đối tượng lớp con
for (int i = 0; i < n; i++) {
int loai; cin >> loai;
if (loai == 1) arr[i] = new LopCon1();
if (loai == 2) arr[i] = new LopCon2();
...
}