Object Oriented Programming

OOP Review

Câu 1. Payrol System

Công ty A muốn xây dựng một hệ thống Payroll. Hàng tháng, công ty cần tính tiền chi trả cho các hóa đơn (Invoice) và tiền lương cho nhân viên (Employee). Mặc dù các loại chi trả này thuộc các danh mục khác nhau và có cách tính khác nhau, nhưng chúng đều thực hiện nhiệm vụ tính tổng số tiền (getPaymentAmount) mà công ty cần chi trả.

Trong đó, Invoice có thông tin về danh sách hàng hóa (Goods), phương thức getPaymentAmount tính và trả về tổng số tiền cần phải chi trả cho các hàng hóa trong hóa đơn đó. Một đối tượng Goods bao gồm thông tin về tên sản phẩm, số lượng và giá.

Employee bao gồm thông tin tên (name) và địa chỉ (address) của nhân viên, phương thức getPaymentAmount tính và trả về số tiền mà công ty cần trả cho nhân viên. Để tính lương cho nhân viên, công ty chia nhân viên thành ba loại: SalariedEmployee, HourlyEmployeeCommissionEmployee.

Cụ thể, SalariedEmployee mỗi tuần được trả cố định một khoản weeklySalary không quan tâm số giờ họ làm việc. HourlyEmployee được trả h * hourSalary, trong đó hhourSalary lần lượt là số giờ làm việc trong tuần và mức lương của một giờ làm việc. CommissionEmployee được trả theo tỷ lệ hàng hóa họ bán được, theo công thức commissionRate * grossSales, trong đó commissionRategrossSales lần lượt là tỷ lệ hoa hồng họ được nhận và tổng giá trị họ đã bán được.

Yêu cầu:

  1. Hãy vẽ biểu đồ thiết kế lớp sử dụng lớp trừu tượng và/hoặc giao diện (interface) một cách thích hợp.
  2. Tính tổng số tiền cần trả theo hàng tháng.

Câu 2: Quản Lý Nhân Sự

Giả sử chúng ta đang viết ứng dụng quản lý nhân sự cho công ty phần mềm ABC. Mỗi nhân viên (Employee) chỉ có thể là lập trình viên (Developer), kiểm thử viên (Tester), hoặc quản lý (Manager). Người quản lý (Manager) giám sát một số nhân viên (bao gồm cả những quản lý khác).

Thông tin về nhân viên ở đây bao gồm họ tên (name) và các công việc hiện tại (listOfTask). Lớp Employee cung cấp phương thức displayInfo() để in ra tên, danh sách công việc, và tên của người quản lý của nhân viên. Lớp Manager có phương thức addEmployee(Employee e) để thêm một nhân viên vào danh sách những nhân viên do người đó quản lý.

Yêu cầu:
  1. Hãy thiết kế lớp cho ứng dụng trên
  2. Cài đặt phương thức displayInfo()
  3. Cài đặt phương thức addEmployee(Employee e)

Bài 3. Viết chương trình thực hiện các yêu cầu sau:

a. Thiết kế lớp cơ sở trừu tượng Shop

Đại diện cho khái niệm gian hàng trong trung tâm thương mại.

Thuộc tính (khai báo protected):

Phương thức:

b. Thiết kế hai lớp kế thừa từ lớp Shop:

Lớp RegularShop:

Gian hàng thông thường. Có thông tin bổ sung là hệ số phụ thu (hesophuthu: kiểu số thực).

Lớp FoodShop:

Gian hàng bán thực phẩm. Có thông tin bổ sung là chi phí an toàn thực phẩm (chiphiantoanTP: kiểu số thực) đều bằng 2000 cho mỗi gian hàng.

Phương thức của hai lớp trên bao gồm:

Với tiền thuê được tính như sau:

RegularShop:

FoodShop:

c. Thiết kế lớp ShopList để quản lý danh sách các gian hàng:

Thuộc tính:

Phương thức:

Câu 4: Mô phỏng hệ thống lưu trữ

Giả sử chúng ta đang viết chương trình mô phỏng hệ thống lưu trữ của máy tính. Hệ thống lưu trữ FS trên máy tính được tổ chức thành các đĩa (Disk). Mỗi đĩa có thể sẽ chứa các Folder, File, và Shortcut. Folder có thể chứa các File, các Shortcut và các Folder con.

Thuộc tính chính của Disk, Folder, File, và Shortcut là tên. Ngoài ra, Disk còn có thông tin về dung lượng; File có thông tin về kích thước, loại tệp (binary hoặc text); Shortcut có thông tin về phần tử nguồn (là Folder hoặc File mà shortcut trỏ đến).

Yêu cầu:
  1. Hãy xây dựng thiết kế lớp gồm FS, Disk, Folder, File, Shortcut và các lớp, giao diện cần thiết khác (Sinh viên vẽ biểu đồ lớp hoặc viết mã). (1 điểm)
  2. Cài đặt phương thức getFreeSpace() để tìm dung lượng chưa sử dụng của 1 đĩa. Giả sử kích thước của 1 shortcut là 1KB. Kích thước của 1 Folder bằng tổng kích thước các File, Shortcut và các Folder con chứa trong Folder đó. (1,5 điểm)