01-33.pdf
Document Details
Uploaded by Deleted User
Full Transcript
Lập trình đa nền tảng Nguyễn Duy Nhật Viễn Chương 3 Lập trình hướng đối tượng trong Dart Lớp Khái niệm Lớp: lớp của các đối tượng, trong Dart, mọi thứ đều là đối tượng. Các lớp đều kế thừa từ lớp Object Trong lớp có thể có các thành viên:...
Lập trình đa nền tảng Nguyễn Duy Nhật Viễn Chương 3 Lập trình hướng đối tượng trong Dart Lớp Khái niệm Lớp: lớp của các đối tượng, trong Dart, mọi thứ đều là đối tượng. Các lớp đều kế thừa từ lớp Object Trong lớp có thể có các thành viên: Các phương thức khởi tạo - Hàm được gọi khi tạo ra một đối tượng mới từ class Các biến lưu dữ liệu của đối tượng - gọi là các trường - các thuộc tính – các dữ liệu thành viên Các hàm - gọi là các hàm thành viên - các phương thức Các hàm đặc biệt gọi khi thực hiện gán thuộc tính / truy cập thuộc tính - hàm setter/getter Khai báo và sử dụng Sử dụng: để truy cập vào thành viên của đối tượng, sử dụng toán tử ‘.’ theo dạng thức: tên_đối_tượng.tên_thành_viên. Trong phương thức của lớp, để tham khảo đến đối tượng của lớp dùng từ khóa this, ví dụ trong hàm calulateTotal() có đoạn return this.price * this.quantity Hàm tạo Hàm tạo là hàm đặc biệt, có tên trùng với tên lớp và không có kiểu dữ liệu trả về Hàm tạo được gọi qua khai báo đối tượng final myObject = new MyClass(); final myObject = MyClass(); //từ Dart 2, ta có thể bỏ từ khoá new Hàm tạo Nullable và late Các dữ liệu thành viên _numerator và _denominator khởi tạo null Khắc phục: khai báo late để khởi tạo sau. - late final: dữ liệu thành viên không thể thay đổi sau đó - late (không có final): dữ liệu thành viên có thể thay đổi giá trị Hàm tạo Nullable và Khởi tạo chính tắc: Dart team khuyến cáo nên dùng khởi tạo chính tắc Khởi tạo chính tắc vẫn có thể truyền giá trị cho dữ liệu thành viên sau đó Danh sách khởi tạo Khi sử dụng cách khởi tạo chính tắc, tên của các dữ liệu thành viên phải khớp với tên được khai báo trong hàm tạo. Điều này làm lộ thông tin dữ liệu nội bộ của lớp Để đảm bảo bí mật, ta có thể sử dụng danh sách khởi tạo Hàm tạo có tên Hàm tạo có tên để khởi tạo một số dữ liệu thành viên cụ thể Hàm tạo chuyển hướng Đôi khi hàm tạo thực hiện tương tự một hàm thành viên khác. Sử dụng hàm tạo chuyển hướng để tránh trùng lặp mã Ví dụ: Hàm oneHalf() gọi lại hàm tạo chính tắc để khỏi lặp code Quyền truy cập Dart không có các quyền truy cập: public, protected, và private. Cùng một file.dart thì mọi thứ là public. Các tài nguyên thuộc về file.dart khác nếu tên biến có bắt đầu bởi kí tự _ thì được coi là private ở các mức độ packages/ files/ libraries. Hàm tạo factory Từ khóa factory trả về một phiên bản của lớp đã cho mà không phải là một lớp mới. Hữu ích khi: muốn trả về một thể hiện của một lớp con thay vì chính lớp đó, muốn triển khai một Singleton, muốn trả về một thể hiện từ bộ nhớ cache. Hàm tạo factory không sử dụng this. Hàm tạo factory Singleton Static Thành viên "static" là thành viên của chính lớp đó thay vì trên những đối tượng của lớp. Ta có thể truy xuất thành viên static ngay cả khi không có đối tượng nào của lớp đó Static Thành viên static có phạm vi lớp, không phải phạm vi đối tượng Không sử dụng this trong các hàm thành viên static Const Từ khoá const được dùng cho các giá trị không đổi, kiểu dữ liệu có thể giản lượt Từ khoá final được dùng cho nhưng giá trị không đổi nhưng chưa biết lúc biên dịch Const Các dữ liệu thành viên đều có thể là final, nhưng const chỉ được phép khi dữ liệu thành viên là static Hàm tạo hằng – const constructor Hàm tạo hằng chỉ được sử dụng khi muốn khởi tạo một danh sách các dữ liệu thành viên final Lớp bất biến - immutable class Lớp bất biến là lớp chỉ có các thành viên final Lớp bất biến phải sử dụng hàm tạo hằng Phương thức - method Phương thức là các hàm mà cung cấp các hành vi cho đối tượng Phương thức tĩnh Các phương thức (hàm) trong lớp chỉ truy cập được trên một đối tượng cụ thể Phương thức tĩnh không cần đối tượng triển khai từ lớp để hoạt động mà có thể gọi hàm đó thông qua tên lớp. Setter và getter Khi khai báo dữ liệu thành viên là public thì mọi nơi đều có thể truy xuất, điều này dẫn đến lớp mất đi tính an toàn Setter và getter Trong lớp này, ta chuyển _numerator và _denominator thành private. Getter chuyển dữ liệu thành read-only Setter và getter Setter truy xuất thành viên private. Setter và getter trùng tên, nhưng thuộc tính khác nhau Setter để ghi giá trị an toàn Bad and Good Khi dữ liệu là read-only và public, không cần sử dụng getter Bad and Good Khi dữ liệu không cần kiểm tra hợp lệ, không cần dùng getter và setter Quá tải toán tử Lưu ý: không quá tải 1 toán tử nhiều hơn 1 lần Quá tải toán tử-Các lớp gọi được Phương thức call () đặc biệt liên quan đến quá tải toán tử vì nó cho phép các lớp có thể gọi được như là các hàm với toán tử (). Phương thức call() có thể có nhiều tham số, cơ thể có kiểu dữ liệu trả về hoặc void Quá tải toán tử-Các lớp gọi được Các lớp có phương thức call() được xem là lớp gọi được Trong Dart, mọi thứ đều là đối tượng, hàm cũng là đối tượng Nhân bản đối tượng anotherMe tham chiếu đến me, thay đổi trên me → thay đổi trên anotherMe và ngược lại Nhân bản đối tượng Nhân bản đối tượng với một số dữ liệu khác