Ôn tập: bộ sưu tập tùy chỉnh
Thuộc phần Lập trình hướng đối tượng trong hành trình Dart của Coddy. Bài học 75 trên 110.
Thử thách
DễHãy xây dựng một hệ thống ScoreBoard để theo dõi điểm số của người chơi và minh họa cách các phương thức đặc biệt phối hợp với nhau để tạo nên một lớp hoàn chỉnh, chuyên nghiệp!
Bạn sẽ sắp xếp code thành hai tệp:
score_board.dart: Tạo lớpPlayervà lớpScoreBoardphối hợp với nhau để quản lý điểm số trong trò chơi.Lớp
Playercần cóname(String) vàscore(int). Lớp này cần:- Triển khai
Comparable<Player>để có thể sắp xếp người chơi theo điểm số giảm dần, từ cao nhất trở xuống - Ghi đè
==vàhashCodeđể xem hai người chơi có cùng tên là bằng nhau, bất kể điểm số - Ghi đè
toString()để trả về:[name]: [score] points
Lớp
ScoreBoardcần lưu danh sách người chơi và cung cấp:- Phương thức
addPlayer(Player player)chỉ thêm người chơi nếu họ chưa tồn tại, hãy dùng cách triển khai phép so sánh bằng của bạn! - Phương thức
call()không nhận đối số và trả về bản sao đã sắp xếp của danh sách người chơi, theo điểm số từ cao nhất trở xuống - Ghi đè
toString()để hiển thị tất cả người chơi theo thứ tự chưa sắp xếp, mỗi người trên một dòng, với tiêu đềScoreBoard:ở dòng đầu tiên
- Triển khai
main.dart: Nhập tệp bảng điểm và minh họa cách tất cả các phương thức đặc biệt này phối hợp với nhau:- Tạo một
ScoreBoard - Thêm những người chơi sau:
Alicevới150,Bobvới200,Charlievới175 - Thử thêm lại
Alicevới điểm số999, người chơi này sẽ bị từ chối vì trùng lặp - In bảng điểm bằng
toString()của nó - In một dòng trống
- In
Rankings: - Gọi bảng điểm như một hàm để lấy bảng xếp hạng đã sắp xếp, rồi in từng người chơi
- Tạo một
Thử thách này kết hợp toString() để hiển thị, == và hashCode để phát hiện mục trùng lặp, compareTo() để sắp xếp và call() để tạo giao diện có thể gọi một cách gọn gàng!
Đầu ra dự kiến:
ScoreBoard:
Alice: 150 points
Bob: 200 points
Charlie: 175 points
Rankings:
Bob: 200 points
Charlie: 175 points
Alice: 150 pointsTự làm thử
import 'score_board.dart';
void main() {
// TODO: Tạo một ScoreBoard
// TODO: Thêm người chơi: Alice (150), Bob (200), Charlie (175)
// TODO: Thử thêm lại Alice với điểm số 999 (phải bị từ chối vì trùng lặp)
// TODO: In bảng điểm bằng phương thức toString()
// TODO: In một dòng trống
// TODO: In "Rankings:"
// TODO: Gọi bảng điểm như một hàm (function) để lấy bảng xếp hạng đã sắp xếp, rồi in từng người chơi
}
Tất cả bài học trong Lập trình hướng đối tượng
1Nền tảng về lập trình hướng đối tượng
Tệp bên ngoàiThư viện và câu lệnh importGiới thiệu về lập trình hướng đối tượngLớp và đối tượngTừ khóa thisPhương thứcBiến thể hiệnKiến thức cơ bản về hàm khởi tạoÔn tập: Máy tính đơn giản4An toàn với giá trị null
Giới thiệu về an toàn với giá trị nullCó thể null và không thể nullToán tử ? và !Từ khóa late và an toàn với giá trị nullToán tử xử lý nullAn toàn với giá trị null trong lớpÔn tập: hệ thống hồ sơ người dùng7Lớp trừu tượng và interface
Lớp trừu tượngPhương thức trừu tượngInterface trong DartInterface ngầm địnhTriển khai và kế thừaNhiều interfaceÔn tập: Máy tính hình10Bộ sưu tập và kiểu tổng quát
Tổng quan về List, Set và MapBộ sưu tập an toàn về kiểuLớp tổng quátPhương thức tổng quátRàng buộc kiểu tổng quátIterable và IteratorÔn tập: Lưu trữ tổng quát2Hàm khởi tạo trong Dart
Hàm khởi tạo mặc địnhHàm khởi tạo có tênDanh sách khởi tạoHàm khởi tạo hằng sốHàm khởi tạo nhà máyHàm khởi tạo chuyển hướngÔn tập: Trình tạo hình dạng5Đóng gói
Thành viên công khai và riêng tưQuy ước tiền tố _Tính riêng tư ở cấp thư việnTìm hiểu sâu về getter và setterChe giấu thông tinÔn tập: hồ sơ học sinh8Mixin
Giới thiệu về MixinTạo MixinSử dụng nhiều MixinTừ khóa on trong MixinMixin và kế thừaMixin và giao diệnÔn tập: hệ thống động vật11Phương thức đặc biệt
Ghi đè toString()Ghi đè hashCode và ==Giao diện ComparablePhương thức call()Ghi đè noSuchMethodÔn tập: bộ sưu tập tùy chỉnh3Thuộc tính của lớp
Thành viên instance và thành viên tĩnhTrường final và constBiến latePhương thức và trường tĩnhGetter và setterÔn tập: trình quản lý tài khoản ngân hàng6Kế thừa
Kế thừa cơ bảnTừ khóa superGhi đè phương thứcChú thích @overrideTừ khóa lớp finalHàm khởi tạo và kế thừaÔn tập: phân cấp nhân viên9Đa hình
Khái niệm cơ bản về đa hìnhĐa hình qua giao diệnKiểm tra kiểu lúc chạyToán tử is và asTừ khóa hiệp biếnÔn tập: Bộ xử lý thanh toánTự luyện tập: Trình biên dịch Dart online