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ệu
và hà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ụ
Trái Cây
Mít
Ổi
Xoài
Cam
Quýt
Ví dụ khác
Học Sinh
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ớpten_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 đặtten_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ậppublic
,private
,protected
, chúng ta sẽ học saukieu_du_lieu
: là kiểu dữ liệuint
,string
... mà chúng ta đã học, riêngkieu_du_lieu
của phương thức có thêm kiểuvoid
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áoten_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ớpTraiCay
ten_phuong_thuc
: làinTenTraiCay
(dòng 7), một phương thức của lớpTraiCay
ten_doi_tuong
: làmit
(dòng 13), là một đối tượng được tạo ra từ lớpTraiCay
- 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ớpTraiCay