1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng lập trình hướng đối tượng tuần 2

97 305 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 97
Dung lượng 694,21 KB

Nội dung

OOP Lập trình Hướng đối tượng Phạm Thi Vương 3/3/2009 Cơ hướng đối tượng C++ OOP Tài liệu tham khảo Bài giảng LTHĐT, Trần Minh Châu, Nguyễn Việt Hà, Đại học Công nghệ, ĐH Quốc gia HN Bài giảng LTHĐT, Nguyễn Việt Hà, Đại học Công nghệ, ĐH Quốc gia HN Bài giảng LTHĐT, Huỳnh Lê Tấn Tài, ĐH KHTN TPHCM C++ How to Program, Dietel ……………………… 3/3/2009 Lập trình Hướng đối tượng OOP Lớp C++ Một lớp bao gồm thành phần liệu thuộc tính phương thức hàm thành phần Lớp C++ thực chất kiểu liệu người sử dụng định nghĩa 3/3/2009 Lập trình Hướng đối tượng OOP Đối tượng Lưu giữ trạng thái: đối tượng có trạng thái (dữ liệu nó) thao tác Định danh: Mỗi đối tượng trạng thái có định danh đối xử thực thể riêng biệt Thông điệp: phương tiện để đối tượng A chuyển tới đối tượng B yêu cầu B thực số thao tác B 3/3/2009 Lập trình Hướng đối tượng OOP Lớp đối tượng - class Lớp: khuôn mẫu để tạo đối tượng (tạo thể hiện) Mỗi đối tượng có cấu trúc hành vi giống lớp đối tượng mà tạo từ Lớp ta thiết kế lập trình Đối tượng ta tạo (từ lớp) thời gian chạy 3/3/2009 Lập trình Hướng đối tượng OOP Classes & Objects class Rectangle { private: int width; int length; public: void set(int w, int l); int area(); } Rectangle r1; Rectangle r2; Rectangle r3; …… int a; OOP Khai báo lớp class { private: protected: public: }; 3/3/2009 Lập trình Hướng đối tượng OOP Defining a class Header class Rectangle { private: int width; int length; public: void set(int w, int l); int area(); }; class class_name { Access_Control_label: members; (data & code) Access_Control_label : members; (data & code) }; Định OOP nghĩa hàm thành phần bên khai báo lớp :: () { } void point::display() { …… } 3/3/2009 Lập trình Hướng đối tượng OOP Define a Member Function class Rectangle { private: int width, length; public: void set (int w, int l); int area() {return width*length; } } inline r1.set(5,8); rp->set(8,10); class name member function name void Rectangle :: set (int w, int l) { width = w; length = l; } scope operator 10 OOP Đối tượng cấp phát động Đối tượng cấp phát động đối tượng tạo phép toán new bị huỷ phép toán delete Phép toán new cấp đối tượng vùng heap (hay vùng free store) gọi phương thức thiết lập cho đối tượng cấp Dùng new cấp đối tượng dùng delete để huỷ đối tượng Dùng new delete cấp nhiều đối tượng huỷ nhiều đối tượng 3/3/2009 83 Lập trình Hướng đối tượng OOP Đối tượng cấp phát động class String { char *p; public: String(char *s) {p = strdup(s);} String(const String &s) {p = strdup(s.p);} ~String() {delete [] p;} // }; class Diem { double x,y; public: Diem(double xx, double yy):x(xx),y(yy){}; // }; // 3/3/2009 84 Lập trình Hướng đối tượng OOP Cấp huỷ đối tượng int *pi = new int; int *pj = new int(15); Diem *pd = new Diem(20,40); String *pa = new String("Nguyen Van A"); // delete pa; delete pd; delete pj; delete pi; 3/3/2009 85 Lập trình Hướng đối tượng OOP Cấp huỷ nhiều đối tượng  Trong trường hợp cấp nhiều đối tượng, ta cung cấp tham số cho phần tử cấp int *pai = new int[10]; Diem *pad = new Diem[5]; // Bao sai String *pas = new String[5]; // Bao sai  Thông báo lỗi cho đoạn chương trình sau: Cannot find default constructor to initialize array element of type 'Diem' Cannot find default constructor to initialize array element of type String’  Lỗi khắc phục cách cung cấp phương thức thiết lập để đối tượng có khả tự khởi động 3/3/2009 86 Lập trình Hướng đối tượng OOP Cấp huỷ nhiều đối tượng class String { char *p; public: String(char *s = "Alibaba") {p = strdup(s);} String(const String &s) {p = strdup(s.p);} ~String() {delete [] p;} // }; class Diem { double x,y; public: Diem(double xx, double yy):x(xx),y(yy){}; Diem():x(0),y(0){}; // }; 3/3/2009 87 Lập trình Hướng đối tượng OOP Cấp huỷ nhiều đối tượng  Khi phần tử cấp khởi động với giá trị int *pai = new int[10]; Diem *pad = new Diem[5]; // ca diem co cung toa (0,0) String *pas = new String[5]; // Ca chuoi cung duoc khoi dong bang “Alibaba”  Việc huỷ nhiều đối tượng thực cách dùng delete có thêm dấu [] trước delete [] pas; delete [] pad; delete [] pai; (?) Có thể thay ba phát biểu phát biểu sau không ? delete pas,pad,pai; // ?? 3/3/2009 88 Lập trình Hướng đối tượng OOP Giao diện chi tiết cài đặt  Lớp có hai phần tách rời, phần giao diện khai báo phần public để người sử dụng “thấy” sử dụng, hai chi tiết cài đặt bao gồm liệu khai báo phần private lớp chi tiết mã hoá hàm thành phần, vô hình người dùng  Ta thay đổi uyển chuyển chi tiết cài đặt, nghĩa thay đổi tổ chức liệu lớp, thay đổi chi tiết thực hàm thành phần (do thay đổi tổ chức liệu để cải tiến giải thuật) Nhưng bảo đảm không thay đổi phần giao diện không ảnh hưởng đến người sử dụng, không làm đổ vỡ kiến trúc hệ thống  Lớp ThoiDiem cài đặt với thành phần liệu giờ, phút, giây tổng số giây tính từ 3/3/2009 89 Lập trình Hướng đối tượng OOP Lớp ThoiDiem – Cách class ThoiDiem { int gio, phut, giay; static bool HopLe(int g, int p, int gy); public: ThoiDiem(int g = 0, int p = 0, int gy = 0) {Set(g,p,gy);} void Set(int g, int p, int gy); int LayGio() const {return gio;} int LayPhut() const {return phut;} int LayGiay() const {return giay;} void Nhap(); void Xuat() const; void Tang(); void Giam(); }; 3/3/2009 90 Lập trình Hướng đối tượng OOP Lớp ThoiDiem – Cách class ThoiDiem { long tsgiay; static bool HopLe(int g, int p, int gy); public: ThoiDiem(int g = 0, int p = 0, int gy = 0) {Set(g,p,gy);} void Set(int g, int p, int gy); int LayGio() const {return tsgiay / 3600;} int LayPhut() const {return (tsgiay%3600)/60;} int LayGiay() const {return tsgiay % 60;} void Nhap(); void Xuat() const; void Tang(); void Giam(); }; 3/3/2009 91 Lập trình Hướng đối tượng OOP Các nguyên tắc xây dựng lớp  Khi ta nghĩ đến “nó” khái niệm riêng rẽ, xây dựng lớp biểu diễn khái niệm Ví dụ lớp SinhVien  Khi ta nghĩ đến “nó” thực thể riêng rẽ, tạo đối tượng thuộc lớp Ví dụ đối tượng Sinh viên “Nguyen Van A” (và thuộc tính khác mã số, năm sinh…)  Lớp biểu diễn cụ thể khái niệm, lớp luôn DANH TỪ  Các thuộc tính lớp thành phần liệu, nên chúng luôn DANH TỪ  Các hàm thành phần thao tác rõ hoạt động lớp nên hàm ĐỘNG TỪ  Các thuộc tính liệu phải vừa đủ để mô tả khái niệm, Lập trình Hướng đối tượng 3/3/2009 không dư, không thiếu 92 OOP Các nguyên tắc xây dựng lớp  Các thuộc tính suy diễn từ thuộc tính khác dùng hàm thành phần để thực tính toán Chu vi, diện tích tam giác thuộc tính suy diễn // DUNG class TamGiac { Diem A,B,C; public: // double ChuVi()const; double DienTich() const; }; // SAI class TamGiac { Diem A,B,C; double ChuVi, DienTich; public: // }; 3/3/2009 93 Lập trình Hướng đối tượng OOP Các nguyên tắc xây dựng lớp Cá biệt có số thuộc tính suy diễn đòi hỏi nhiều tài nguyên thời gian để thực tính toán, ta khai báo liệu thành phần Ví dụ tuổi trung bình dân Việt Nam class QuocGia { long DanSo; double DienTich; double TuoiTrungBinh; // public: double TinhTuoiTB() const; // }; 3/3/2009 94 Lập trình Hướng đối tượng OOP Các nguyên tắc xây dựng lớp  Chi tiết cài đặt, bao gồm liệu phần mã hoá hàm thành phần thay đổi uyển chuyển phần giao diện, nghĩa phần khai báo hàm thành phần cần phải cố định để không ảnh hưởng đến người sử dụng Tuy nhiên nên cố gắng cài đặt liệu cách tự nhiên theo khái niệm // KHONG NEN class PhanSo { long tu_mau; public: // }; // NEN class PhanSo { int tu, mau; public: // }; 3/3/2009 95 Lập trình Hướng đối tượng OOP Các nguyên tắc xây dựng lớp Dữ liệu thành phần nên kết hợp thay phân rã // NEN class TamGiac { Diem A,B,C; public: // }; class HinhTron { Diem Tam; double BanKinh; public: // }; 3/3/2009 96 // KHONG NEN class TamGiac { double xA, yA, xB, yB, xC, yC; public: // }; class HinhTron { double tx, ty, BanKinh; public: // }; Lập trình Hướng đối tượng OOP Các nguyên tắc xây dựng lớp Trong trường hợp, nên có phương thức thiết lập để khởi động đối tượng Nên có phương thức thiết lập có khả tự khởi động không cần tham số Nếu đối tượng có nhu cầu cấp phát tài nguyên phải có phương thức thiết lập, phương thức thiết lập chép để khởi động đối tượng đối tượng kiểu có phương thức huỷ bỏ để dọn dẹp Ngoài phải có phép gán (chương tiếp theo) Ngược lại, đối tượng đơn giản không cần tài nguyên riêng không cần phương thức thiết lập chép không cần phương thức huỷ bỏ 3/3/2009 97 Lập trình Hướng đối tượng [...]... chiếu đến đối tượng đang gọi hàm thành phần int trung(point pt) {return(this->x==pt.x && this->y==pt.y);} 3/3 /20 09 30 Lập trình Hướng đối tượng OOP Phép gán đối tượng việc sao chép giá trị các thành phần dữ liệu (x, y) từ đối tượng a sang đối tượng b tương ứng từng đôi một point a, b; a.init(5 ,2) ; b=a; 3/3 /20 09 a b x 5 5 x y 2 2 y 31 Lập trình Hướng đối tượng OOP Phép gán đối tượng Nếu hai đối tượng A... 3/3 /20 09 27 Lập trình Hướng đối tượng OOP Đối tượng như tham số của hàm thành phần Hàm thành phần có quyền truy nhập đến các thành phần private của đối tượng gọi nó: void point::init(int xx,int yy) { x=xx; y=yy; } 3/3 /20 09 28 Lập trình Hướng đối tượng OOP Đối tượng như tham số của hàm thành phần Hàm thành phần có quyền truy nhập đến tất cả các thành phần private của các đối tượng, tham chiếu đối tượng. .. trình Hướng đối tượng OOP void main() { clrscr(); point p; p.init (2, 4); /*gọi hàm thành phần từ đối tượng* / p.display(); p.move(1 ,2) ; p.display(); getch(); } 3/3 /20 09 22 Lập trình Hướng đối tượng OOP Ham thanh phan init Ham thanh phan display Toa do: 2 4 Ham thanh phan move Ham thanh phan display Toa do: 3 6 3/3 /20 09 23 Lập trình Hướng đối tượng OOP Từ khoá xác định thuộc tính truy xuất Trong định nghĩa... 3/3 /20 09 20 Lập trình Hướng đối tượng OOP void point::init(int ox, int oy) { cout ... tiện để đối tượng A chuyển tới đối tượng B yêu cầu B thực số thao tác B 3/3 /20 09 Lập trình Hướng đối tượng OOP Lớp đối tượng - class Lớp: khuôn mẫu để tạo đối tượng (tạo thể hiện) Mỗi đối tượng. .. 3/3 /20 09 21 Lập trình Hướng đối tượng OOP void main() { clrscr(); point p; p.init (2, 4); /*gọi hàm thành phần từ đối tượng* / p.display(); p.move(1 ,2) ; p.display(); getch(); } 3/3 /20 09 22 Lập trình. .. liệu (x, y) từ đối tượng a sang đối tượng b tương ứng đôi point a, b; a.init(5 ,2) ; b=a; 3/3 /20 09 a b x 5 x y 2 y 31 Lập trình Hướng đối tượng OOP Phép gán đối tượng Nếu hai đối tượng A B kiểu,

Ngày đăng: 22/01/2016, 14:08

TỪ KHÓA LIÊN QUAN