Apr 30, 2012

Khái niệm về đối tượng trong OOP

Đây là những kiến thức mình lượm lặt được, lượt dịch trong sách “Thinking in C++”, Wiki … Và đây là những kiến thức cơ bản nhất về đối tượng trong OOP
Một buổi tối loay hoay đi tìm định nghĩa đối tượng trong C++. Sau buổi seminar Kỹ thuật lập trình lên bờ xuống ruộng, một bài học được rút ra là không nên quá tin vào Wikipedia.
Thằng Wiki nó bảo: "OOP vẫn còn là một đề tài của nhiều tranh cãi vđịnh nghĩa chuẩn xác hay về các nguyên lý của nó.".
Đành dùng định nghĩa lấy từ cuốn Thinking in C++, và một open course của MIT vậy:
  • Trong C++, một đối tượng là một biến (an object is just a variable, "a region of storage" ).  Nơi để chứa dữ liệu và thực hiện các phép toán. - Đây là một định nghĩa thuần gốc. Một class chứa các đặc tính (characteristic) và hành vi (behaviors) tương tự như một struct chứa các biến và hàm. Khai báo biến với kiểu là struct, trong OOP tức là khai báo một đối tượng của một lớp.
  • "object" trong OOP là sự trừa tượng của đối tượng ở thế giới thực, chứa thuộc tính ( attributes hay properties), và ứng xử (methods). (Nguồn)
  • www.cplusplus.com là một nguồn tin cậy: " In terms of variables, a class would be the type, and an object would be the variable."
Tuy nhiên, một ngôn ngữ lập trình nếu chỉ hỗ trợ một cấu trúc dữ liệu trong đó chứa các kiểu dữ liệu và hàm thì đơn thuần nó chỉ là object-based language.

Trong một struct của C++ ta có thể định nghĩa một hàm trong đó. Nếu chỉ có vậy thì C++ không phải là OOP nữa.
typedef struct STRUCT{

    int a,b;

    int add(int a, int b);

};

int STRUCT::add(int a, int b) {

    return (a+b);

}
 Một ngôn ngữ lập trình hướng đối tượng (object-oriented programming) (có thể ) bao gồm các tính năng sau:
  • Trừu tượng hóa dữ liệu (data abstraction).
  • Đóng gói (encapsulation).
  • Thông điệp (messaging).
  • Mô đun hóa (modularity).
  • Đa hình (Polymorphism).
  • Kế thừa (inheritance).