Trang chủ » Lập trình » Lập trình hướng đối tượng cung cấp cho lập trình viên những khả năng gì?

Lập trình hướng đối tượng cung cấp cho lập trình viên những khả năng gì?

1136 Lượt xem

Ngôn ngữ lập trình hướng đối tượng đã xây dựng một mối liên kết khắng khít giữa cấu trúc dữ liệu và những phương thức điều tác chúng. Điều quan trọng là khi tiếp cận với lập trình hướng đối tượng những gì bạn phải nghĩ đến không còn là cấu trúc dữ liệu và các hàm điều tác. Thay vào đó bạn phải luôn nghĩ đến cái gọi là "đối tượng" (object).



Hầu hết mọi người khi nhìn vào một chiếc xe hơi, họ không nghĩ về những thông tin mà nó có và làm cách nào để điều quản những thông tin ấy. Họ nghĩ về các bánh xe, bộ truyền động, hộp số… Họ nghĩ về cách cho xe chạy, dừng lại, tăng tốc… Họ nghĩ về đường đi, cảnh sát công lộ và những vé phạt quá tốc độ… Nói ngắn gọn là hầu hết mọi người nghĩ đến những sự vật (things) và những sự vật đó làm những gì. Thực tế, đây là cách mà loài người nghĩ về mọi thứ. Quá trình tiến hoá hàng chục triệu năm đã dạy chúng ta cách nhìn về một thế giới như được lắp đầy bởi những sự vật. Một vài trong số những sự vật đó chúng ta có thể ăn, một số khác lại ăn chúng ta…



Một cách lý tưởng, phần mềm của chúng ta được mô hình hóa rất giống với thế giới thực. Nhìn theo góc độ này, những chương trình của chúng ta trở nên dễ hiểu hơn và dễ bảo trì hơn. Những đối tượng trong thế giới thực có những đặc tính và những hành vi riêng, đối tượng trong chương trình cũng vậy.



Bây giờ chúng ta xem những khác biệt trong ngôn ngữ lập trình hướng đối tượng mà cụ thể là C++. Hãy xem đoạn mã sau:



#include <iostream.h>

class Employee

{

public:

Employee(int salary, int level);

~Employee(){}



void GiveARaise(double pctg);

int GetSalary() const {return mSalary;}

private:

int mSalary;

int mLevel;

};

Employee::Employee(int salary, int 

level):mSalary(salary),mLevel(level)



cout<<"Initializing Employee with salary :"<<mSalary<<endl;

}

void Employee::GiveARaise(double pctg)

{

int increment = int(mSalary*pctg);

cout<<"Incrementing salary by "<<increment<<endl;

mSalary+=increment;

}

int main()

{

Employee Emp(50000,3);

Cout<<"Emp''s salary :"<<Emp.GetSalary()<<endl;

}



Trong chương trình trên chúng ta khai báo một lớp (class) có tên là Employee. Một lớp chẳng qua là một kiểu dữ liệu mở rộng. Chúng ta bắt đầu với những kiểu dữ liệu xây dựng sẵn trong C như kiểu int, double, float … nhưng bây giờ chúng ta thêm vào một danh sách bằng cách tạo ra một kiểu dữ liệu mới và sau đó khai báo biến sử dụng kiểu dữ liệu mới này.



Một kiểu dữ liệu có thể có những hành vi (behavior) và những thuộc tính (atribute). Hành vi được thể hiện bởi những phương thức (method) trong lớp, còn những thuộc tính được đại diện bởi các biến thành viên của lớp. Trong lớp Employee ở trên có 2 biến thành viên: mSalary và mLevel; 4 phương thức: hàm dựng (contructor), hàm hủy (destructor), hàm truy cập (accessor) GetSalary và GiveARaise.



Hàm dựng dùng để khởi tạo các biến khi đối tượng được tạo ra. Trong ví dụ của chúng ta, hàm dựng làm tác vụ khởi tạo giá trị cho hai biến là mSalary và mLevel.



Hàm hủy được dùng khi huỷ đối tượng và có tác dụng giải phóng tài nguyên như bộ nhớ mà đối tượng được cấp phát. Trong ví dụ này, hàm hủy không làm gì cả.



GetSalary chỉ làm công việc trả về giá trị của mSalary.



GetARaise là hàm thành viên của Employee và nó truy xuất được đến biến cục bộ mSalary. Hàm này được dùng khi bạn muốn tăng lương cho nhân viên.