Tất Tần Tật Về Lập Trình Hướng Đối Tượng? (Phần 1)

Đó là một trong những chủ đề được hỏi thường xuyên đến mức bạn không thể cho phép mình không biết. Trong series này mình cùng nhau tìm hiểu những khái niệm và các đặc điểm tính chất của OOP nhé.

Trong phần này mình sẽ sơ lược cho các bạn về các khái niệm cơ bản cần nắm và làm quen với lập trình hướng đối tượng

1. Lập trình hướng đối tượng có những gì?

Lập trình hướng đối tượng (Object Oriented Programming, viết tắt: OOP) là một kỹ thuật lập trình cho phép lập trình viên tạo ra các đối tượng trong code trừu tượng hóa các đối tượng thực tế trong cuộc sống. Nói đến đây có thể các bạn chưa hiểu để mình giải thích rõ hơn:

Đối tượng (Object) có thể là con người, điện thoại, máy tính, yasuo, leesin … và điểm chung là đều gồm 2 thành phần chính là:

  • Thuộc tính (Attribute): là những thông tin, đặc điểm của đối tượng.
  • Phương thức (Method): là những hành động mà đối tượng có thể thực hiện.

Mình lấy một ví dụ là máy vi tính cho những bạn dễ hiểu nha :

  • Máy tính sẽ có các thuộc tính như: màu sắc, kích thước, bộ nhớ, …
  • Và các phương thức như: quét virus, tắt máy, khởi động máy, mở LoL …

Khi một đối tượng có những đặc tính như nhau sẽ được gom lại thành một lớp đối tượng (class) và cũng sẽ có 2 thành phần là thuộc tínhphương thứcLớp (class) cũng có thể được dùng để định nghĩa một kiểu dữ liệu mới.

Với ví dụ máy vi tính trên ta hiểu lớp (class) máy vi tính có:

  • Các thuộc tính như: màu sắc, kích thước, bộ nhớ, …
  • Và các phương thức như: quét virus, tắt máy, khởi động máy, mở LoL …

đối tượng (object) có thể là các dòng máy như Asus, Acer, Lenovo, Thinkpad, … đều mang đặc tính của lớp máy vi tính.

Vậy tại sao lại cần đến cái “Lập trình hướng đối tượng” rối rắm này?

Nếu như trước đây tất cả chúng ta lập trình với hướng thủ tục thì sẽ chia thành những hàm để giải quyết và xử lý, thì giờ đây khi sử dụng hướng đối tượng thì tất cả chúng ta sẽ chia thành những đối tượng để giải quyết và xử lý .
Vì lập trình hướng đối tượng sinh ra sau nên nó khắc phục được tổng thể những điểm yếu của những giải pháp lập trình trước đó. Cụ thể nó có những ưu điểm sau :

  • Dễ dàng quản lý code khi có sự thay đổi chương trình.
  • Dễ mở rộng dự án.
  • Có tính bảo mật cao.
  • Có thể sử dụng mã nguồn, tiết kiệm tài nguyên.

2. Các đặc điểm cơ bản của lập trình hướng đối tượng:         

2.1. Tính đóng gói (Encapsulation): Tính chất này không cho phép người dùng trực tiếp tác động đến dữ liệu bên trong đối tượng mà phải thông qua các phương thức mà đối tượng cung cấp. Tính chất này đảm bảo tính toàn vẹn của đối tượng.

Một ví dụ về tính đóng gói

class mayvitinh {
private:
    string mausac;
    int chieudai, chieurong;
public:
    void input()
    {
        cout << "Nhap mau sac may: ";
        fflush(stdin);
        getline(cin, this->mausac);
        cout << "Nhap chieu dai may: ";
        cin >> this->chieudai;
        cout << "Nhap chieu rong may: ";
        cin >> this->chieurong;
    }
 
    void output()
    {
        cout << "Mau sac may: " << this->mausac << endl;
        cout << "Chieu dai may: " << this->chieudai << endl;
        cout << "Chieu rong may: " << this->chieurong << endl;
    }
};

Trong đoạn code trên tính đóng gói được thể hiện qua các thuộc tính mausac, chieudai, chieurong và phương thức input(), output() vào trong class mayvitinh. Bạn không thể truy cập đến các private data hoặc gọi đến private methods của class từ bên ngoài class đó.

2.2. Tính kế thừa (Inheritance): Kế thừa, tái sử dụng phương thức, thuộc tính của lớp cơ sở và lớp kế thừa được gọi là lớp con, nó sẽ thừa hưởng những gì lớp cha có và cho phép.

Cũng với ví dụ là class mayvitinh, class này sẽ có các thuộc tính: mausac, chieudai, chieurong. Một class mayAsus, mayAcer sẽ kế thừa class mayvitinh do mayAsus cũng có các thuộc tính: mausac, chieudai, chieurong.  Thay vì sao chép những thuộc tính này, ta nên đặt chúng vào một lớp chung gọi là lớp cha – trong trường hợp này là mayvitinh và có những lớp con mayAsus, mayAcer kế thừa từ nó, tạo ra một mối quan hệ cha/con.

2.3. Tính đa hình (Polymorphism): Tính đa hình cho phép các chức năng (method) khác nhau được thực thi khác nhau trên các đối tượng khác nhau.

Ví dụ như class mayvitinh ở trên, mỗi một dòng máy đều kế thừa từ lớp cha mayvitinh nhưng được chạy với một hệ điều hành quản lý khác nhau, mayAsus thì được chạy với hệ điều hành quản lý Windows, còn mayMacbook sẽ được chạy với hệ diều hành MacOs .

2.4. Tính trừu tượng(Abstraction): Tập trung vào cốt lõi của đối tượng, bỏ qua những thứ không liên quan và không quan trọng.

 Ví dụ: Bài toán quản lý sinh viên chúng ta chỉ cần quản lý các thông tin như

  • Họ tên
  • Ngày sinh
  • Giới tính

mà lại không cần quản trị thêm những thông tin :

  • Cân nặng
  • Màu da
  • Chiều cao

Tại vì chúng thực sự không thiết yếu .

Kết

Đây chỉ là những khái niệm cơ bản những bạn cần nắm đề chuẩn bị sẵn sàng cho những part sau. Cụ thể mình sẽ khám phá rõ hơn về từng đặc thù của lập trình hướng đối tượng. Các bạn nhớ đón xem và góp ý để những bài sau tốt hơn nhé .

Rate this post