1. Trang chủ
  2. » Tất cả

Bài giảng lập trình hướng đối tượng chương 3 thực hiện ẩn khởi tạo và hủy bỏ đối tượng

31 1 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

1 Chương Chương 3 Th3 Thựực hic hiệện n ẩẩnn KhKhởởi ti tạạo vo vàà hhủủy by bỏỏ đ đốối tưi tượợngng HuHuỳỳnh Quynh Quyếết Tht Thắắngng Cao TuCao Tuấấn Dn Dũũng ng BBộộ môn CNPMmôn CNPM TS H Q ThTS H[.]

Chương 3: Thực ẩn Khởi tạo hủy bỏ đối tượng Huỳnh Quyết Thắng Cao Tuấn Dũng Bộ môn CNPM Vai trò thực ẩn     Khi viết chương trình thơng thường có hai trường hợp xảy ra: (1) viết thư viện (2) chúng sử dụng thư viện Trong truờng hợp (1): không muốn cho LTV sử dụng thư viện truy nhập/can thiệp vào phần lõi thư viện Trong trường hợp (2): không cần quan tâm tới phần lõi thư viện, cần quan tâm giao diện phần sử dụng không bị thay đổi Giải pháp: Các chế thực hiện/khai báo ẩn (hidden implementation) TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ môn CNPM Đối tượng giao tiếp với giới bên Bên Phần giao diện Phần Lõi/nhân TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ mơn CNPM Từ khóa xác định thuộc tính truy nhập (access specifier)    C++/Java quy định từ khóa xác định tính chất thuộc tính đối tượng: public, private, protected Public: quy định thuộc tính đối tượng phép sử dụng/truy nhập từ ai/đối tượng Private: quy định thuộc tính đối tượng khơng phép sử dụng từ đối tượng bên Đây tường LTV bên đối tượng TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ mơn CNPM Từ khóa xác định thuộc tính truy nhập (access specifier)     Protected: từ khóa đặc biệt quy định tính chất đối tượng phép truy nhập đối tượng bên lớp phải thuộc lớp kế thừa lớp thời Khi khai báo lớp từ khóa có ý nghĩa đánh dấu tính chất thuộc tính (hàm thành phần liệu thành phần) kể từ lúc gặp từ khố tương ứng gặp từ khóa khác Mặc định: private Thứ tự xuất từ khóa tùy ý TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ mơn CNPM Ví dụ minh họa class Square { private: int side; public: void setSide(int s) { side = s; } int getSide() getSide() { return side; } }; int main() { Square s1; s1.setSide(10); s1.side = 15; } TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ môn CNPM Ví dụ minh họa public class Car { private String model; public int mileage; } Car aCar = new Car(); aCar.mileage = 23000; // ok System.out.println(aCar.mileage); // ok aCar.model = "VW Beetle"; // error System.out.println(aCar.model); // error TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ môn CNPM Java class Sundae { private Sundae() {} static Sundae makeASundae() { return new Sundae(); } } public class IceCream { public static void main(String[] args) { //! Sundae x = new Sundae(); Sundae x = Sundae.makeASundae(); } } TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ môn CNPM Contructor phương thức private Không dùng toán tử new Việc tạo đối tượng phải thông qua phương thức: makeASundae() Các phương thức mà kết để phục vụ cho phương thức lớp (helper method) nên để chế độ private Cấu trúc lớp thường dùng class X { void private_function(); int internal_representation; public: void interface_function(); }; Các phương thức mà kết để phục vụ cho phương thức lớp (helper method) nên để chế độ private TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ môn CNPM Java: Truy nhập lớp, package   Quy đị định quyề quyền truy nhậ nhập đế đến mộ lớ lớp củ mộ thư việ viện Từ khó khóa public class X: lớ lớp X đượ nhì nhìn thấ thấy từ từ nơi bên ngoà public class Widget { … import mylib.Widget; hoặ  import mylib.*; Ngượ Ngược lạ lại, lớ lớp X chỉ đượ nhì nhìn thấ thấy bở cá lớ lớp cù package vớ với nó TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ môn CNPM 10 C++: Cơ chế hàm bạn    Muốn truy nhập tới liệu thành phần private đối tượng theo quy định có hàm thành phần lớp Chúng ta muốn có hàm đặc biệt hàm “bạn” lớp, khơng phải hàm thành phần lớp quyền truy nhập thành phần liệu riêng (private) đối tượng Tính chất đặc biệt hàm bạn: – quyền truy nhập thành phần liệu riêng (private) – hàm thành phần TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ môn CNPM 11 Hàm bạn: chất, ý nghĩa, tồn Các đối tượng bên lớp public private Các đối tượng kế thừa Hàm bạn protected TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ môn CNPM 12 Hàm bạn: chất, ý nghĩa, tồn  Các đặc điểm hàm bạn: – Phải định nghĩa với từ khóa friend lớp mà hàm muốn trở thành hàm bạn – Trong đối số hàm bạn phải có đối tượng thuộc lớp (để truyền biến truy nhập thành phần đối tượng) – Vị tri khai báo hàm bạn lớp tuỳ ý không bị ảnh hưởng/chi phối từ khóa private/public/protected TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ môn CNPM 13 Hàm bạn: chất, ý nghĩa, tồn    Hàm bạn khơng phải hàm thành phần có quyền truy nhập liệu thành phần Tư tưởng hàm bạn ngược lại với tư tưởng đóng gói (encapsulation) thể thực ẩn Bản chất C++ ngơn ngữ lập trình hướng đối tượng lai tạp (hybriđ), hàm bạn thêm vào để tăng tính mềm dẻo kỹ thuật lập trình ngơn ngữ TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ môn CNPM 14 Các dạng hàm bạn  Có nhiều kiểu hàm bạn: – Hàm tự bạn lớp – Hàm thành phần lớp bạn lớp khác – Hàm bạn bạn nhiều lớp – Tất hàm thành phần lớp hàm bạn lớp khác TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ môn CNPM 15 Hàm tự bạn lớp class A { private: // Khai báo thuộ thuộc tính public: // Khai báo hàm bạn // lớp A friend void f1( ); friend double f2( ); friend A f3( ); }; // Xây dựng hàm f1, f2, f3 void f1( ) { } double f2( ) { } A f3( ) { } TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ môn CNPM 16 So sánh phương thức hàm bạn: Cộng hai số phức: phương thức class SP { private: double a; // Phầ Phần thự thực double b; // Phầ Phần ảo public: SP cong(SP u2) { SP u: u.a = this thisa + u2.a; u.b = this thisb + u2.b; return u; } }; Cách dùng : SP u, u1, u2; u = u1.cong(u2); TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ môn CNPM 17 Cộng hai số phức: hàm bạn class SP { private: double a; // Phầ Phần thự thực double b; // Phầ Phần ảo public: friend SP cong(SP u1, SP u2) { SP u: u.a = u1.a + u2.a; u.b = u1.b + u2.b; return u; } }; TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ môn CNPM Cách dùng : SP u, u1, u2; u = cong(u1, u2); 18 Hàm thành phần bạn lớp khác class A; class B { ………… int f(A); f(A); ……… ……… }; class A { ……… ……… friend int B::f (A); …… }; int B::f(A) B::f(A) { … }  int f(A) hàm thành phần lớp B  int f(A) hàm bạn lớp A TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ môn CNPM 19 Hàm bạn nhiều lớp  Khi hàm bạn nhiều lớp, có quyền truy nhập tới tất thuộc tính đối tượng lớp class A; // Khai báo trướ trước lớp A class B; // Khai báo trướ trước lớp B // Định nghĩ nghĩa lớp A class A { // Khai báo hàm f bạn lớp A friend void f( ); }; TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ môn CNPM 20 10 Phương thức Set (Mutator) Thườ Thường chứa toá toán tử tử gán, và nhậ nhận tham số số từ bên ngoà class Person{ private: int age; } public: void setAge(int newAge){ newAge){ if ((newAge newAge > 0) && (newAge (( (newAge < 150)) age = newAge; newAge; } TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ môn CNPM 33 Phương thức Set   Nếu phương thức get/set có nhiệm vụ cho ta đọc ghi giá trị cho thành viên liệu, quy định thành viên private để ích lợi gì? Ngồi việc bảo vệ ngun tắc đóng gói, ta cịn cần kiểm tra xem giá trị cho thành viên liệu có hợp lệ hay khơng – Ví dụ, cần đảm bảo điểm trung bình sinh viên khơng bị gán số âm  Sử dụng phương thức truy vấn cho phép ta thực việc kiểm tra trước thực thay đổi giá trị thành viên TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ mơn CNPM 34 17 Ví dụ: Phương thức Set Lớp sinh viên có có phương thứ thức Điể Điểm trung bì bình int Student::setGPA(double newGPA) {  if ((newGPA >= 0.0) && (newGPA gpa = newGPA; return 0; // Return to indicate success } else return -1; // Return -1 to indicate failure } TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ môn CNPM 35 Phương thức Get (Truy vấn)    Các phương thức truy vấn (query method, accessor) phương thức dùng để hỏi giá trị thành viên liệu đối tượng Có nhiều loại câu hỏi truy vấn có thể: – truy vấn đơn giản (“giá trị x bao nhiêu?”) – truy vấn điều kiện (“thành viên x có lớn 10 không?”) – truy vấn dẫn xuất (“tổng giá trị thành viên x y bao nhiêu?”) Đặc điểm quan trọng phương thức truy vấn khơng nên thay đổi trạng thái đối tượng – không thay đổi giá trị thành viên liệu TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ môn CNPM 36 18 Phương thức Get  Đối với truy vấn đơn giản, quy ước đặt tên phương thức: tiền tố “get”, tên thành viên // query returns value of member x int getX(); // query returns value of member size int getSize();   Các loại truy vấn khác nên có tên có tính mơ tả Truy vấn điều kiện nên có tiền tố “is” int Foo::getXPlusY() { return x + y; } bool Foo::isXPositive() { return x > 0; } TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ môn CNPM 37 Khởi tạo hủy bỏ đối tượng Ý nghĩa trình khởi tạo huỷ bỏ đối tượng Quá trình khởi tạo: hàm thiết lập (constructor) Quá trình huỷ đối tượng: hàm huỷ (destructor) Các đặc điểm hàm khởi tạo hàm huỷ Hàm khởi tạo mặc định Các trường hợp đối tượng tao giải phóng TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ môn CNPM 38 19 Ý nghĩa    Mỗi đối tượng tồn hoạt động hệ điều hành cấp pháp vùng nhớ (theo giao diện lớp) để lưu lại giá trị liệu thành phần Khi tạo đối tượng hệ điều hành gán cho liệu thành phần giá trị khởi tạo tuỳ theo mong muốn LTV quy định lệnh khai báo biến-đối tượng Ngược lại kết thúc vòng đời đối tượng cần phải giải phóng hợp lý tất nhớ cấp phát cho đối tượng (do LTV Trình BD) TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ mơn CNPM 39 Q trình khởi tạo: Các hàm thiết lập Constructor   Các trình gán liệu hay huỷ liệu phải thực tự động trước người lập trình tác động lên đối tượng Hàm thiết lập hàm đặc biệt Hàm gọi tự động có đối tượng tạo Chức hàm thiết lập khởi tạo giá trị thành phần liệu đối tượng hay xin cấp phát nhớ cho thành phần nhớ động TS H.Q Thắ Thắng - TS C.T Dũ Dũng Bộ Bộ môn CNPM 40 20 ... CNPM 37 Khởi tạo hủy bỏ đối tượng Ý nghĩa trình khởi tạo huỷ bỏ đối tượng Quá trình khởi tạo: hàm thiết lập (constructor) Quá trình huỷ đối tượng: hàm huỷ (destructor) Các đặc điểm hàm khởi tạo. .. thực tự động trước người lập trình tác động lên đối tượng Hàm thiết lập hàm đặc biệt Hàm gọi tự động có đối tượng tạo Chức hàm thiết lập khởi tạo giá trị thành phần liệu đối tượng hay xin cấp phát... dạng phương thứ thức: – Thiế Thiết lậ lập, khở khởi tạ tạo (constructor) và hủy bỏ bỏ (destructor) đố đối tượ tượng – Thay đổ đổi trạ trạng thá thái đố đối tượ tượng (mutator –setter): Cá Các phương

Ngày đăng: 28/02/2023, 16:44

Xem thêm: