Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 80 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
80
Dung lượng
225,5 KB
Nội dung
Ngôn ngữ C++ Chơ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 sử dụng hàm thiết lập chép Vai trò hàm thiết lập ngầm định Đố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 tợng = Dữ liệu+Phơng 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 đợc an toàn tránh đợc 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 đợc 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 đợc xác định hai thành phần toạ độ đợc 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ự nh 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 đợc biết tới mô tả phơng thức nó, cách thức cài đặt 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 đợc thao tác mà không cần biết thao tác đợc thực nh nào, nh đ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ể đợc giấu đi) Mô tả đối tợng điểm { //dữ liệu int x,y; //ph¬ng thøc -40- 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ôn ngữ C++ Đó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 nhiều: thay đổi cấu trúc đố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ới 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ự nh 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ó đợ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 đợc 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 đợc 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 đợc nội dung đối tợng điểm q khá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 đợc ngời dùng định nghĩa việc tạo đối tợng đợc ví nh khai báo biến có kiểu lớp -41- Ngôn ngữ C++ 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 đợc 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 mäi 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 lần lợt đợc đề 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 Ví dụ 3.1 /*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); -42- Ng«n ngữ C++ 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