Bài tập thực hành C# 5

Nội dung thực hành

  • Tính kế thừa (Inheritance)
  • Tính đa hình (Polymorphism)

Bài tập

Bài 1: Thừa kế

Khởi tạo một class có tên Person và hai class con là Student and Employee. Tạo 2 class Faculty và Staff là class con của class Employee. Person có các thuộc tính tên, số điện thoại và địa chỉ email. Student có thuộc tính: môn học (Kinh doanh, Khoa học Máy tính ...). Employee có các thuộc tính: bộ phận công tác, tiền lương và ngày làm việc. Một Faculty có các thuộc tính: giờ làm việc và xếp loại. Một Staff có thuộc tính: tiêu đề. Bạn được yêu cầu:

  • Ghi đè ToString () để hiển thị tên lớp và tên, địa chỉ email của Student.
  • Sử dụng property để cung cấp khả năng đọc và ghi giá trị cho các thuộc tính.
  • Faculty(Giảng viên) nhận được 1000 + 0,05 * Tiền lương và Staff(Nhân viên) nhận được 0,06 * Tiền lương
  • Faculty (Giảng viên) được 5 tuần nghỉ phép nếu làm việc trên 3 năm và thêm một tuần nếu là "Giảng viên cao cấp". Nếu không thì 4 tuần. Staff(Nhân viên) được nghỉ phép 4 tuần nếu công tác trên 5 năm. Nếu không được 3 tuần

Bài 2: Viết một chương trình với thiết kế được thể hiện dưới đây

i 3: Xây dựng lớp cha Shape và các lớp con của nó (Circle, RectangleSquare) như sơ đồ lớp bên dưới

Tạo lớp cha tên là Shape (như trong sơ đồ lớp trên) chứa:

  • 2 trường dữ liệu tên là color (string) và filled (bool)
  • 2 phương thức khởi tạo: 1 cái không có tham số truyền vào với 2 giá trị khởi tạo mặc định cho color là “green” và filledtrue và 1 có 2 tham số để truyền vào các giá trị khác nhau cho colorfilled
  • Các phương thức getter và setter cho các trường dữ liệu private của lớp Shape
  • 1 phương thức toString() trả về thông tin của đối tượng ShapeA Shape with color of xxx and filled/Not filled

Viết 1 lớp chính chứa phương thức main tên là ShapeDemo (ShapeDemo.cs) để kiểm tra các phương thức đã định nghĩa trong lớp Shape.

Tiếp tục, các bạn hãy tạo 2 lớp con của lớp Shape tên là CircleRectangle như trong sơ đồ lớp ở trên.

Lớp Circle chứa:

  • 1 trường dữ liệu tên là radius (double).
  • 3 phương thức khởi tạo, trong đó có 1 cái không có tham số và khởi tạo giá trị của radius là 1.0
  • Các phương thức getter và setter cho trường dữ liệu radius
  • Phương thức getArea()getPerimeter()
  • Ghi đè phương thức toString() của lớp cha để trả về thông tin “A Circle with radius=xxx, which is a subclass of yyy“, trong đó yyy kết quả trả về của phương thức toString() từ lớp cha

Lớp Rectangle chứa:

  • 2 trường dữ liệu width (double) và length (double)
  • 3 phương thức khởi tạo, trong đó 1 cái không có tham số khởi tạo giá trị widthlength1.0
  • Các phương thức getter và setter cho các trường dữ liệu
  • Phương thức getArea()getPerimeter()
  • Ghi đè phương thức toString() của lớp cha để trả về thông tin “A Rectangle with width=xxx and length=zzz, which is a subclass of yyy“, trong đó yyy kết quả trả về của phương thức toString() từ lớp cha

Xây dựng tiếp lớp Square là lớp con của lớp Rectangle. Lớp Square không có các trường dữ liệu của riêng nó mà sẽ thừa kế các trường dữ liệu từ lớp cha Rectangle. Lớp Square chứa:

  • 3 phương thức khởi tạo trong đó có 1 phương thức sẽ thừa kế tới phương thức khởi tạo của lớp cha. Gợi ý:
    public Square(double width, double height):base(width, height)
            {
                // Call superclass
                 Rectangle(width, height)
            }
    	
  • Ghi đè phương thức toString() của lớp cha để trả về thông tin “A Square with side=xxx, which is a subclass of yyy“, trong đó yyy kết quả trả về của phương thức toString() từ lớp cha
  • Bạn thử xem xét xem có cần ghi đè phương thức getArea()getPerimeter() của lớp cha hay không?
  • Ghi đè phương thức setLength()setWidth() để thay đổi cả widthlength, để duy trì hình dạng hình vuông

Complete and Continue