Ôn tập: máy tính hình học
Thuộc phần Lập trình hướng đối tượng trong hành trình Java của Coddy. Bài học 33 trên 87.
Thử thách
DễHãy xây dựng một chương trình tính toán hình dạng, kết hợp tất cả khái niệm về tính đa hình (polymorphism) bạn đã học trong chương này. Bạn sẽ tạo một lớp Shape trừu tượng với các lớp con cụ thể, sau đó dùng tính đa hình để tính và hiển thị diện tích theo cùng một cách.
Bạn sẽ sắp xếp code trong bốn tệp:
Shape.java: Tạo một lớp trừu tượng làm nền tảng cho mọi hình dạng. Mỗi hình dạng có một trườngname(String). Thêm hàm khởi tạo để khởi tạo trường này, phương thức gettergetName()và phương thức trừu tượnggetArea()trả về một giá trị double. Thêm cả phương thứcdescribe()trả về:[name]: [area](trong đó area được định dạng với 2 chữ số thập phân bằngString.format("%.2f", getArea())).Circle.java: Tạo một lớp cụ thể kế thừa từ Shape. Hình tròn có trườngradius(double). Dùngsuperđể truyền "Circle" làm tên. Triển khaigetArea()để trả về diện tích bằng cách dùngMath.PI * radius * radius.Rectangle.java: Tạo một lớp cụ thể khác kế thừa từ Shape. Hình chữ nhật có các trườngwidthvàheight(đều là double). Truyền "Rectangle" làm tên cho hàm khởi tạo của lớp cha. Triển khaigetArea()để trả về tích của width và height.Main.java: Xây dựng chương trình tính toán hình dạng để minh họa tính đa hình trong thực tế. Bạn sẽ nhận ba đầu vào: bán kính hình tròn, chiều rộng và chiều cao hình chữ nhật.Tạo một Circle và một Rectangle, sau đó lưu chúng trong một mảng các tham chiếu
Shape. Duyệt qua mảng và với mỗi hình dạng, in phần mô tả bằng phương thứcdescribe().Sau vòng lặp, tính và in tổng diện tích của tất cả hình dạng theo định dạng:
Total area: [sum](cũng được định dạng với 2 chữ số thập phân). Dùng một vòng lặp riêng hoặc biến tích lũy để tính tổng diện tích bằng cách gọigetArea()trên từng tham chiếu hình dạng.
Bạn sẽ nhận ba đầu vào: bán kính hình tròn (double), chiều rộng hình chữ nhật (double) và chiều cao hình chữ nhật (double).
Đầu ra gồm ba dòng, một dòng mô tả cho mỗi hình dạng, tiếp theo là tổng diện tích. Hãy chú ý cách bạn có thể xử lý thống nhất các hình dạng khác nhau thông qua kiểu trừu tượng Shape, trong khi mỗi hình dạng tự tính diện tích theo cách riêng!
Tự làm thử
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Đọc các giá trị đầu vào
double radius = scanner.nextDouble();
double width = scanner.nextDouble();
double height = scanner.nextDouble();
// TODO: Tạo đối tượng Circle bằng bán kính
// TODO: Tạo đối tượng Rectangle bằng width và height
// TODO: Tạo một mảng chứa các tham chiếu Shape và lưu cả hai hình vào đó
// TODO: Duyệt mảng và in ra mô tả của từng hình bằng describe()
// TODO: Tính tổng diện tích của tất cả các hình
// Dùng vòng lặp hoặc biến tích lũy để cộng diện tích bằng cách gọi getArea() cho từng hình
// TODO: In ra tổng diện tích theo định dạng: "Total area: [sum]"
// Dùng String.format("%.2f", totalArea) để định dạng
}
}
Tất cả bài học trong Lập trình hướng đối tượng
1Kiến thức cơ bản về lập trình hướng đối tượng
Tệp bên ngoàiGiới thiệu về lập trình hướng đối tượngLớp và đối tượngTừ khóa thisPhương thứcTrường (thuộc tính)Phương thức khởi tạoNạp chồng phương thức khởi tạoÔn tập: Máy tính đơn giản4Kế thừa
Kế thừa cơ bản (extends)Từ khóa superGhi đè phương thức (@Override)Chuỗi gọi hàm khởi tạoLớp ObjectKế thừa đơn và đa cấpVì sao không hỗ trợ kế thừa nhiều lớpÔn tập: Phân cấp lớp Employee7Phương thức đặc biệt và lớp Object
Phương thức toString()equals() và hashCode()Phương thức clone()compareTo() và ComparableGiao diện ComparatorÔn tập: sắp xếp tùy chỉnh2Bộ điều chỉnh quyền truy cập và đóng gói
Tổng quan về các mức truy cậpPhương thức getter và setterẨn thông tinTừ khóa finalÔn tập: Trình quản lý tài khoản ngân hàng5Tính đa hình
Kiến thức cơ bản về nạp chồng phương thứcGhi đè phương thức (thời gian chạy)Chuyển kiểu lên và chuyển kiểu xuốngToán tử instanceofLớp và phương thức trừu tượngÔn tập: máy tính hình học8Khái niệm OOP nâng cao
Kết hợp và kế thừaKết tập và hợp thànhLớp bên trong, lớp lồng nhau và lớp ẩn danhKiểu enum và phương thức enumBản ghi (Java 16+)Lớp sealed (Java 17+)3Thuộc tính lớp và thành viên tĩnh
Biến của instance và biến tĩnhPhương thức tĩnhKhối tĩnhHằng số (static final)Ôn tập: bộ đếm và tiện ích6Giao diện và lớp trừu tượng
Giới thiệu về giao diệnTriển khai giao diệnTriển khai nhiều giao diệnPhương thức mặc định và tĩnh trong giao diệnLớp trừu tượng và giao diệnGiao diện hàmÔn tập: hệ thống thanh toán9Kiểu tổng quát
Giới thiệu về kiểu tổng quátLớp tổng quátPhương thức tổng quátTham số kiểu có giới hạnKý tự đại diện (?, extends, super)Ôn tập: vùng chứa tổng quát12Mẫu thiết kế, phần 2
Mẫu CommandMẫu AdapterMẫu DecoratorMẫu Template MethodMẫu StateMẫu CompositeMẫu IteratorTự luyện tập: Trình biên dịch Java online