1/ Vài nét về OPP

Lập trình hướng đối tượng, gọi tắt là OOP (Object-Oriented Programming) là tạo các đối tượng (object) chứa cả dữ liệuhàm.

Trước khi OOP xuất hiện, thì các chương trình được lập trình hướng thủ tục (procedural programming) chẳng hạn như ngôn ngữ Pascal, nghĩa là viết các thủ tục hoặc hàm thực hiện các thao tác trên dữ liệu.

Hàm (function)  và Thủ tục (procedure)

  • Một hàm (function) trả về một giá trị (kiểu int, string...) và một thủ tục (procedure) chỉ thực hiện các lệnh.
  • Gọi là Hàm do nó bắt nguồn từ toán học, nó được sử dụng để tính toán một giá trị dựa trên đầu vào.
  • Thủ tục là một tập hợp các lệnh có thể được thực hiện theo thứ tự.
  • Trong hầu hết các ngôn ngữ lập trình ngày nay, ngay cả các hàm cũng có thể có một tập hợp các lệnh. Do đó, sự khác biệt ở chỗ có hay không có trả về một giá trị.

Lập trình hướng đối tượng có một số ưu điểm so với lập trình hướng thủ tục:

  • OOP nhanh hơn và dễ thực thi hơn
  • OOP cung cấp một cấu trúc rõ ràng cho các chương trình
  • OOP giúp giữ cho mã C++ "Không lặp lại chính mình" (DRY - Don't Repeat Yourself) và làm cho mã dễ bảo trì, sửa đổi và gỡ lỗi hơn
  • OOP giúp chúng ta có thể tận dụng lại mã một cách dễ dàng, nên thời gian phát triển ứng dụng sẽ ngắn hơn và ít viết mã hơn

DRY - Don't Repeat Yourself: là một nguyên tắc lập trình chuyên nghiệp nhằm giảm việc lặp lại mã. Các em nên trích xuất các mã phổ biến (được sử dụng lại ít nhất 2 lần) của ứng dụng và đặt chúng ở một nơi duy nhất và gọi chúng khi cần sử dụng thay vì viết mã lặp lại.

OOP khá trừu tượng và khó hiểu các em nhé!

2/ Lớp và Đối tượng

Lớp (class) và đối tượng (object) là hai khía cạnh chính của OOP.

Một lớp là một khuôn mẫu (template) cho các đối tượng và một đối tượng là một thể hiện (instance) của một lớp.

Ví dụ

Lớp (Class)
Trái Cây
Các Đối tượng (Objects) tạo ra từ Lớp
Mít
Ổi 
Xoài
Cam
Quýt
                    

Ví dụ khác

Lớp (Class)
Học Sinh
Các Đối tượng (Objects) tạo ra từ Lớp
Tí
Sửu
Dần
Mẹo
Thìn
                    

Khai báo Lớp

Mọi thứ trong C++ đều được liên kết với các lớp và đối tượng, cùng với các thuộc tính (attribute) và phương thức (method) của nó. Các thuộc tính và phương thức là các biến (variable) và hàm (function) thuộc về lớp. Chúng thường được gọi là "thành phần của lớp".

Cú pháp khai báo lớp

class ten_lop {  // The class
  chi_dinh_truy_cap:
    kieu_du_lieu ten_thuoc_tinh;

    kieu_du_lieu ten_phuong_thuc() {
     // ma thuc thi
    }
};
  • class: là từ khóa khai báo lớp
  • ten_lop: là tên lớp, cách đặt tên như đặt tên biến, nhưng để phân biệt, các em nên đặt ten_lop luôn luôn bắt đầu bằng chữ cái in Hoa, ví dụ như TraiCay thay vì traiCay
  • chi_dinh_truy_cap: là chỉ định truy cập public, private, protected, chúng ta sẽ học sau
  • kieu_du_lieu: là kiểu dữ liệu int, string... mà chúng ta đã học, riêng kieu_du_lieu của phương thức có thêm kiểu void
  • ten_thuoc_tinh, ten_phuong_thuc: là tên của thuộc tính và phương thức thuộc lớp, cách đặt tên như đặt tên biến. Các em có thể thêm nhiều thuộc tính và phương thức tùy thích.

Tạo Đối tượng

Các đối tượng được tạo ra từ lớp và chúng kế thừa tất cả các thuộc tính và phương thức của lớp.

Cú pháp tạo đối tượng từ lớp

ten_lop ten_doi_tuong;
  • ten_lop: tên lớp đã khai báo
  • ten_doi_tuong: cách đặt tên như đặt tên biến
  • đối tượng sau khi được tạo, dùng dấu chấm . để truy cập các phương thức và thuộc tính của lớp

Ví dụ

#include <iostream>
using namespace std;

class TraiCay {
  public:
    string ten;
    void inTenTraiCay() {
     cout << "Toi ten: " << ten;
    }
};

int main() {
  TraiCay mit; 
  mit.ten = "Xoai ne";
  mit.inTenTraiCay();
  return 0;
}

Kết quả

Toi ten: Xoai ne

Trong ví dụ trên:

  • ten_lop: là TraiCay (dòng 4)
  • chi_dinh_truy_cap: là public (dòng 5)
  • kieu_du_lieu: là string (của thuộc tính) (dòng 6) và void (của phương thức) (dòng 7)
  • ten_thuoc_tinh: là  ten (dòng 6), một thuộc tính của lớp TraiCay
  • ten_phuong_thuc: là inTenTraiCay (dòng 7), một phương thức của lớp TraiCay
  • ten_doi_tuong: là mit (dòng 13), là một đối tượng được tạo ra từ lớp TraiCay
  • dòng 14, 15: cho thấy đối tượng mit kế thừa tất cả các thuộc tính và phương thức của lớp TraiCay