Ngày Thi: 25/9/2022
Thời gian 21:00:00 ngày 25/9/2022 đến 21:59:59 ngày 26/9/2022
*** Điểm trừ : Bài làm giống nhau***
Xây dựng các class như mộ hình UML như hình sau

Một dung dịch hóa học được cho là có tính axit nếu nó có giá trị nguyên pH từ 1 đến 6. Độ pH càng thấp, dung dịch càng có tính axit.
Một thí nghiệm có một số lượng lớn các dung dịch hóa chất được sắp xếp theo một đường thẳng và một cánh tay máy (Mechanical Arm) di chuyển qua lại dọc theo đường thẳng, do đó tính axit của mỗi dung dịch có thể được thay đổi bằng cách thêm các hóa chất khác nhau. Một dung dịch hóa học được xác định bởi interface ISolution bên dưới.
interface ISolution{
//@return an integer value that ranges from 1 (very acidic) to 14
uint GetPH();
//Set PH to newValue @param newValue the new pH value
void SetPH(uint newValue);
}
Hình dưới đây thể hiện cho các dung dịch và cánh tay cơ học (Mechanical Arm) trong một thí nghiệm. Cánh tay, được biểu thị bằng mũi tên, hiện đang ở chỉ số 4 và hướng về bên trái. Hàng thứ hai đại diện cho các giá trị pH của các dung dịch.
| Index | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| pH | 7 | 4 | 10 | 5 | 6 | 7 | 13 |
| ← |
Trạng thái của cánh tay cơ học bao gồm chỉ số và hướng của nó (bên phải hoặc bên trái). Một cánh tay cơ học được chỉ định bởi interace IMechanicalArm bên dưới.
interface IMechanicalArm{
/*@return the index of the current location of the mechanical arm*/
int GetCurrentIndex();
/*
* @return true if the mechanical arm is facing right (toward solutions with larger indexes)
* false if the mechanical arm is facing left (toward solutions with smaller indexes)
*/
bool IsFacingRight();
/*
* Moves the mechanical arm forward in its current direction by the number of locations specified
* @param numLocs the number of locations to move
*/
void MoveForward(uint numLocs);
}
Một thí nghiệm được đại diện bởi lớp Experiment được hiển thị bên dưới.
class Experiment
{
IMechanicalArm arm;
List solutions;
/*
* Resets the experiment
* Postcondion
* - The mechanical arm has a current index of 0.
* - It is facing right
*/
public void Reset() { }
/* finds and returns the index of the most acidic solution.
* @return index the location of the most acidic solution
* or -1 if there are no acidic solutions
* Postcondition
* - The mechanical arm is facing right
* - Its current index is at the most acidic solution, or at 0 if there are no acidic solutions
*/
public int MostAcidic() { return 0; }
}
a) Viết phương thức Reset() trong lớp Experiment để đặt cánh tay cơ học quay về bên phải, tại vị trí 0.
Ví dụ, giả sử thí nghiệm chứa các dung dịch có giá trị pH được hiển thị. Mũi tên đại diện cho cánh tay cơ học
| Index | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| pH | 7 | 4 | 10 | 5 | 6 | 7 | 13 |
| ← |
Gọi phương thức Reset() sẽ cho kết quả
| Index | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| pH | 7 | 4 | 10 | 5 | 6 | 7 | 13 |
| → |
b) Viết phương thức MostAcidic() trong lớp Experiment trả về chỉ số của dung dịch có tính axit mạnh nhất và đặt cánh tay cơ học ngay tại vị trí của dung dịch có tính axit mạnh nhất và hướng về tay phải. Dung dịch có tính axit nếu pH của nó nhỏ hơn 7. pH càng thấp thì dung dịch càng có tính axit. Nếu không có dung dịch axit nào trong thí nghiệm, phương thức MostAcidic() phải trả về -1 và đặt cánh tay cơ học ở chỉ số 0, hướng về bên phải.
Ví dụ: giả sử thử nghiệm có trạng thái sau:
| Index | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| pH | 7 | 4 | 10 | 5 | 6 | 7 | 13 |
| ← |
Khi gọi phương thức MostAcidic() sẽ trả về giá trị 1 và dẫn đến trạng thái sau cho thử nghiệm:
| Index | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| pH | 7 | 4 | 10 | 5 | 6 | 7 | 13 |
| → |
Nếu trang thái của thí nghiệm có trạng thái
| Index | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| pH | 7 | 9 | 8 | 8 | 12 | 13 | 14 |
| ← |
Nếu gọi phương thức MostAcidic() sẽ trả về -1 và trạng thái của thí nghiệm sẽ có kết quả như sau
| Index | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| pH | 7 | 9 | 8 | 8 | 12 | 13 | 14 |
| → |
Đặt tên file là HoTen.zip rồi gửi vào gmail: refactortop@gmail.com Chúc các bạn làm bài tốt