Lập trình hướng đối tượng là loại lập trình sử dụng đối tượng và lớp cho chức năng của nó. Lập trình hướng đối tượng dựa trên các thực thể thực tế như kế thừa, đa hình, ẩn dữ liệu, v.v. Nó nhằm gắn kết dữ liệu và hàm hoạt động trên tập dữ liệu đó thành một thực thể đơn lẻ để hạn chế sử dụng.
Một số khái niệm cơ bản của lập trình hướng đối tượng:
- CLASS
- OBJECTS
- ENCAPSULATION
- POLYMORPHISM
- INHERITANCE
- ABSTRACTION
Class − Một class là kiểu dữ liệu có thành viên riêng, tức là thành viên dữ liệu và hàm thành viên. Nó là bản thiết kế cho đối tượng trong ngôn ngữ lập trình hướng đối tượng. Nó là khối xây dựng cơ bản của OOP trong C++. Các thành viên của class được truy cập bằng cách tạo instance của class.
Một số thuộc tính quan trọng của class:
Class là kiểu dữ liệu do người dùng định nghĩa.
Class chứa các thành viên như thành viên dữ liệu và hàm thành viên.
Thành viên dữ liệu là biến của class.
Hàm thành viên là các phương thức dùng để thao tác thành viên dữ liệu.
Thành viên dữ liệu định nghĩa thuộc tính của class, hàm thành viên định nghĩa hành vi của class.
Một class có thể có nhiều đối tượng với thuộc tính và hành vi chung cho tất cả.
Cú pháp
class class_name {
data_type data_name;
return_type method_name(parameters);
}
Object − Đối tượng là instance của một class. Là thực thể với đặc điểm và hành vi dùng trong OOP. Đối tượng là thực thể được tạo để cấp phát bộ nhớ. Class khi định nghĩa không có khối bộ nhớ, bộ nhớ sẽ được cấp phát ngay khi đối tượng được tạo.
Cú pháp
class_name object_name;
Ví dụ
#include<iostream>
using namespace std;
class calculator {
int number1;
int number2;
char symbol;
public:
void add() {
cout<<"Tổng là "<<number1 + number2;
}
void subtract() {
cout<<"Hiệu là "<<number1 - number2;
}
void multiply() {
cout<<"Tích là "<<number1 * number2;
}
void divide() {
cout<<"Thương là "<<number1 / number2;
}
calculator(int a, int b, char sym) {
number1 = a;
number2 = b;
symbol = sym;
switch(symbol){
case '+' : add(); break;
case '-' : subtract(); break;
case '*' : multiply(); break;
case '/' : divide(); break;
default : cout<<"Toán tử sai";
}
}
};
int main() {
calculator c1(12, 34, '+');
}
Kết quả
Tổng là 46
Encapsulation Trong OOP, encapsulation là khái niệm gói gọn dữ liệu và thông tin thành một đơn vị duy nhất. Định nghĩa chính thức: encapsulation là gắn kết dữ liệu và hàm liên quan có thể thao tác dữ liệu đó.
Hãy hiểu qua ví dụ thực tế dễ hiểu:
Trong trường đại học, có khoa cho từng khóa học như khoa học máy tính, công nghệ thông tin, điện tử, v.v. Mỗi khoa có sinh viên và môn học riêng được quản lý và dạy. Hãy nghĩ mỗi khoa là một class đóng gói dữ liệu về sinh viên khoa đó và môn học được dạy. Cũng có quy tắc, hướng dẫn cố định mà sinh viên khóa đó phải tuân theo như giờ, phương pháp học tập, v.v. Đây là encapsulation trong thực tế: có dữ liệu và có cách thao tác dữ liệu.
Nhờ khái niệm encapsulation trong OOP, một khái niệm quan trọng khác là có thể: trừu tượng dữ liệu hoặc Ẩn dữ liệu. Điều này có thể vì encapsulation che giấu dữ liệu và chỉ hiển thị thông tin cần thiết.
Polymorphism Tên định nghĩa đa hình là nhiều dạng. Nghĩa là polymorphism là khả năng của OOP làm việc gì đó bằng nhiều dạng. Hành vi của phương thức phụ thuộc vào kiểu hoặc tình huống mà phương thức được gọi.
Ví dụ thực tế: Một người có thể có nhiều hành vi tùy tình huống. Ví dụ một phụ nữ là mẹ, quản lý và con gái. Điều đó định nghĩa hành vi của cô ấy. Khái niệm polymorphism xuất phát từ đây.
Trong C++, polymorphism đạt được bằng hai cách: nạp chồng toán tử và nạp chồng hàm.
Operator overloading Trong nạp chồng toán tử, một toán tử có thể có nhiều hành vi trong các trường hợp sử dụng khác nhau.
Function overloading Các hàm cùng tên có thể làm nhiều loại dựa trên điều kiện.
Inheritance Là khả năng của class kế thừa hoặc dẫn xuất thuộc tính, đặc điểm từ class khác. Rất quan trọng trong OOP vì nó cho phép tái sử dụng, tức là dùng phương thức định nghĩa trong class khác bằng kế thừa. Class dẫn xuất thuộc tính gọi là class con hoặc subclass, class được kế thừa gọi là class cha hoặc base class.
C++ hỗ trợ các loại kế thừa sau:
- Kế thừa đơn
- Kế thừa đa
- Kế thừa nhiều cấp
- Kế thừa phân cấp
- Kế thừa lai
Abstraction Trừu tượng dữ liệu hoặc Ẩn dữ liệu là khái niệm che giấu dữ liệu và chỉ hiển thị dữ liệu liên quan cho người dùng cuối. Cũng là phần quan trọng của OOP.
Ví dụ thực tế: Khi cưỡi xe máy, ta chỉ biết bấm phanh sẽ dừng xe và vặn ga sẽ tăng tốc, nhưng không biết nó hoạt động như thế nào và cũng không cần biết. Đó là lý do khái niệm trừu tượng dữ liệu tồn tại.
Trong C++, có hai cách đạt được trừu tượng dữ liệu:
- Sử dụng class
- Sử dụng file header