Ôn tập: bộ tính toán hình học
Thuộc phần Lập trình hướng đối tượng trong hành trình C# của Coddy. Bài học 30 trên 70.
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 mọi kiến thức bạn đã học về giao diện và tính đa hình. Bạn sẽ tạo một hệ thống có thể xử lý đồng nhất các hình dạng khác nhau thông qua một giao diện chung, qua đó thể hiện sức mạnh của tính đa hình lúc chạy.
Bạn sẽ sắp xếp code trong bốn tệp:
IShape.cs: Định nghĩa một giao diện tên làIShapetrong không gian tênShapes. Mỗi hình dạng phải có thể tính diện tích và tự mô tả. Khai báo hai phương thức:CalculateArea()trả vềdouble, vàGetDescription()trả vềstring.Circle.cs: Tạo một lớpCircletrong không gian tênShapes, lớp này triển khaiIShape. Hình tròn có thuộc tínhRadius(double), được thiết lập thông qua hàm khởi tạo. Công thức tính diện tích làMath.PI * Radius * Radius. Phần mô tả cần trả về"Circle with radius {Radius}".Rectangle.cs: Tạo một lớpRectangletrong không gian tênShapes, lớp này triển khaiIShape. Hình chữ nhật có các thuộc tínhWidthvàHeight(cả hai đều là double), được thiết lập thông qua hàm khởi tạo. Diện tích được tính bằng chiều rộng nhân với chiều cao. Phần mô tả cần trả về"Rectangle {Width}x{Height}".Program.cs: Trong tệp chính, hãy tạo một hình tròn và một hình chữ nhật bằng các giá trị đầu vào, sau đó lưu chúng vào một mảng các tham chiếuIShape. Duyệt qua mảng và với mỗi hình dạng, in phần mô tả rồi đến diện tích được làm tròn đến hai chữ số thập phân. Cách này cho thấy bạn có thể xử lý những hình dạng hoàn toàn khác nhau thông qua cùng một giao diện!
Bạn sẽ nhận ba giá trị đầu vào:
- Bán kính hình tròn (double)
- Chiều rộng hình chữ nhật (double)
- Chiều cao hình chữ nhật (double)
In đầu ra theo định dạng sau cho mỗi hình dạng:
{GetDescription() result}
Area: {CalculateArea() rounded to 2 decimal places}Ví dụ, nếu các giá trị đầu vào là 5, 4 và 6, đầu ra sẽ là:
Circle with radius 5
Area: 78.54
Rectangle 4x6
Area: 24.00Lưu ý rằng vòng lặp không cần biết nó đang xử lý hình tròn hay hình chữ nhật, nó chỉ cần gọi các phương thức của giao diện và để tính đa hình xử lý phần còn lại. Đây chính là sự tinh tế của việc lập trình dựa trên giao diện!
Tự làm thử
using System;
using Shapes;
class Program
{
public static void Main(string[] args)
{
// Đọc các giá trị đầu vào
double circleRadius = Convert.ToDouble(Console.ReadLine());
double rectWidth = Convert.ToDouble(Console.ReadLine());
double rectHeight = Convert.ToDouble(Console.ReadLine());
// TODO: Tạo đối tượng Circle với bán kính đã cho
// TODO: Tạo đối tượng Rectangle với chiều rộng và chiều cao đã cho
// TODO: Tạo mảng IShape chứa cả hai hình
// TODO: Duyệt qua mảng và với mỗi hình:
// - In ra mô tả bằng GetDescription()
// - In ra "Area: ", sau đó là kết quả CalculateArea() làm tròn đến 2 chữ số thập phân
}
}
Tất cả bài học trong Lập trình hướng đối tượng
1Các khái niệm cơ bản về lập trình hướng đối tượng
Tệp bên ngoàiKhông gian tên và chỉ thịGiới thiệu về lớp và đối tượngTừ khóa thisPhương thức và tham sốTrường và thuộc tínhHàm khởi tạoKhởi tạo đối tượngÔn tập: Máy tính đơn giản4Kế thừa
Cú pháp kế thừa cơ bản (:)Từ khóa 'base'Từ khóa virtual và overrideLớp sealedLớp cơ sở 'object'Ôn tập: hệ phân cấp nhân viên7Tính năng nâng cao
Nạp chồng toán tửBộ lập chỉ mục (this[])Ghi đè ToString()Phương thức mở rộngÔn tập: Danh sách tùy chỉnh10Các mẫu thiết kế phần 1
Giới thiệu về mẫu thiết kếSingleton an toàn với luồngMẫu FactoryMẫu Observer (sự kiện)Mẫu Strategy2Thuộc tính và thành viên tĩnh
Thuộc tính tự độngThuộc tính chỉ đọc hoặc chỉ ghiTrường và phương thức tĩnhLớp tĩnhThành viên có thân biểu thức5Đa hình và interface
Đa hình lúc biên dịch và lúc chạyInterface và lớp trừu tượngNhiều interfaceInterface tường minhUpcasting và downcastingÔn tập: bộ tính toán hình học8Các khái niệm OOP nâng cao
Ưu tiên composition hơn kế thừaGenerics (lớp và phương thức)Delegate và sự kiệnAttribute và reflectionGiao diện IDisposable và câu lệnh usingKiến thức cơ bản về dependency injection11Các mẫu thiết kế phần 2
Mẫu lệnhMẫu bộ chuyển đổiMẫu trang tríMẫu phương thức khuôn mẫuMẫu trạng tháiMẫu tổ hợpTự luyện tập: Trình biên dịch C# online