Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 85 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
85
Dung lượng
3,21 MB
Nội dung
ươ Chương Chương đối ượng đối tượng lớp (Object & Class) Mục đích chương này: Khái niệm đóng gói liệu Khai báo sử dụng lớp Khai báo sử dụng đối tượng, trỏ đối tượng, tham chiếu đối tượng Hàm thiết lập hàm huỷ bỏ Khai báo vµ sư dơng hµm thiÕt lËp chÐp Vai trò hàm thiết lập ngầm định Đối ượng Đối tượng Đối tượng khái niệm lập trình hướng đối tượng biểu thị liên kết liệu thủ tục (gọi phương thức) thao tác liệu Ta có công thức sau: Đối ượng Đối tượng = Dữ liệu+Phương liệu+Phươ ương thứ thức hiểu đối tượng công cụ hỗ trợ cho đóng gói Sự đóng gói chế liên kết lệnh thao tác liệu có liên quan, giúp cho hai an toàn tránh can thiệp từ bên việc sử dụng sai Nhìn chung định nghĩa đối tượng phức tạp so với định nghĩa biến cấu trúc thông thường, lẽ việc mô tả thành phần liệu, ta phải xác định thao tác tác động lên đối tượng Hình 2.1 mô tả đối tượng điểm mặt phẳng: Mỗi đối tượng xác định hai thành phần toạ độ biểu diễn hai biến nguyên Các thao tác tác động lên điểm bao gồm việc xác định toạ độ điểm mặt phẳng toạ độ (thể việc gán giá trị cho hai thành phần toạ độ), thay đổi toạ độ hiển thị kết lên mặt phẳng toạ độ (tương tự việc chấm điểm mặt phẳng đó) Lợi ích việc đóng gói nhìn từ bên ngoài, đối tượng biết tới mô tả phương thức nó, cách thức cài đặt Ngôn ngữ C++ liệu không quan trọng người sử dụng Với đối tượng điểm, người ta quan tâm đến việc thực thao tác mà không cần biết thao tác thực nào, điều xảy bên thân đối tượng Ta thường nói trừu tượng hoá liệu (khi chi tiết cài đặt cụ thể giấu đi) Mô tả đối tượng điểm { //dữ liệu int x,y; //ph¬ng thøc void init(int ox,int oy); void move(int dx,int dy); void display(); }; Hình 3.1 Mô tả đối tượng điểm Đóng gói có nhiều lợi ích góp phần nâng cao chất lượng chương trình Nó làm cho công việc bảo trì chương trình thuận lơi rÊt nhiỊu: mét sù thay ®ỉi cÊu tróc cđa mét đối tượng ảnh hưởng tới thân đối tượng; người sử dụng đối tượng không cần biết đến thay đổi (với lập trình cấu trúc người lập trình phải tự quản lý thay đổi đó) Chẳng hạn biểu diễn toạ độ điểm dạng số thực, có người thiết kế đối tượng phải quan tâm để sửa lại định nghĩa đối tượng người sử dụng không cần hay biết điều đó, miễn thay đổi không tác động đến việc sử dụng đối tượng điểm Tương tự vậy, ta bổ sung thêm thuộc tính màu số thao tác lên đối tượng điểm, để có đối tượng điểm màu Rõ ràng đóng gói cho phép đơn giản hoá việc sử dụng đối tượng Trong lập trình hướng đối tượng, đóng gói cho phép liệu đối tượng che lấp nhìn từ bên ngoài, nghĩa người dùng muốn tác động lên liệu đối tượng phải gửi đến đối tượng thông điệp(message) phương thức đóng vai trò giao diện bắt buộc đối tượng người sử dụng Ta có nhận xét: Lời gọi đến phương thức truyền thông báo đến cho đối tượng Các thông điệp gửi tới đối tượng gắn chặt với đối tượng đối tượng nhận thông điệp phải thực theo thông điệp đó; chẳng hạn đối tượng điểm độc lập với nhau, thông điệp thay đổi toạ độ đối tượng điểm p làm ảnh hưởng đến thành phần toạ độ p thay đổi nội dung đối tượng điểm q khác -41- Ngôn ngữ C++ So với lập trình hướng đối tượng tuý, cài đặt cụ thể đối tượng C++ linh động chút, cách cho phép che dấu phận liệu đối tượng mở rộng khả truy nhập đến thành phần riêng đối tượng Khái niệm lớp sở cho linh động Lớp mô tả trừu tượng nhóm đối tượng có chất Trong lớp người ta đưa mô tả tính chất thành phần liệu, cách thức thao tác thành phần này(hành vi đối tượng), ngược lại đối tượng thể cụ thể cho mô tả trừu tượng Trong ngôn ngữ lập trình, lớp đóng vai trò kiểu liệu người dùng định nghĩa việc tạo đối tượng ví khai báo biến có kiểu lớp Lớp 2.1 Khai báo lớp Từ quan điểm lập trình cấu trúc, lớp kiểu liệu tự định nghĩa Trong lập trình hướng đối tượng, chương trình nguồn phân bố khai báo định nghià lớp Sau ví dụ điển hình cú pháp khai báo lớp Kinh nghiệm cho thấy kiểu khai báo khác chuẩn hoá để đưa dạng class { private: public: }; Các chi tiết liên quan đến khai báo lớp đề cập đến phần sau Để dễ hình dung xét ví dụ khai báo lớp điểm mặt phẳng Trong ví dụ ta có đề cập đến vài khía cạnh liên quan đến khai báo lớp, đối tượng sử dụng chúng -42- Ngôn ngữ C++ Ví dụ 3.1 point.cpp /*point.cpp point.cpp*/ #include #include class point { /*khai báo thành phần liệu riêng*/ private: int x,y; /*khai báo hàm thành phần công cộng*/ public: void init(int ox, int oy); void move(int dx, int dy); void display(); }; /*định nghĩa hàm thành phần bên khai báo lớp*/ void point::init(int ox, int oy) { cout