[實驗任務一]:UML複習
閱讀教材第一章複習UML,回答下述問題:
物件導向程式設計中類與類的關係都有哪幾種?分別用類圖例項說明。
1、關聯關係
2、聚合關係
3、依賴關係
4、組合關係
[實驗任務二]:單一職責原則
登入模組在實際專案開發中很常見,請按照教材28頁(PPT49頁)利用單一職責原則重構後的類圖實現這一模組。
實驗要求:
1.提交原始碼和對應的資料庫檔案(注意將此模組儲存,以備以後使用);
2.注意程式設計規範。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>登入</title>
</head>
<body>
<h1>登入</h1>
<form action="login" method="post">
<p>使用者名稱: <input type="text" name="username"></p>
<p>密碼: <input type="password" name="password"></p>
<input type="submit" value="登入">
</form>
</body>
</html>
資料庫:DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` int NOT NULL AUTO_INCREMENT,
`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`role` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;
SET FOREIGN_KEY_CHECKS = 1;
[實驗任務三]:依賴倒轉原則與合成複用原則
在一畫圖軟體中提供了多種大小不同的畫筆,並且可以給畫筆指定不同的顏色,某設計人員對畫筆進行了如上圖所示的設計。透過分析,可以發現增加畫筆的種類和顏色會使得系統中類的數目急劇增加,請根據合成複用原則和依賴倒轉原則對上述設計進行重構。
實驗要求:
1.提交原始碼;
2.畫出重構後的類圖。
抽象出顏色介面:public interface Color {
String getColor();
}
public class Red implements Color {
@Override
public String getColor() {
return "Red";
}
}
public class Green implements Color {
@Override
public String getColor() {
return "Green";
}
}
抽象出畫筆大小介面:public interface PenSize {
String getSize();
}
public class SmallPen implements PenSize {
@Override
public String getSize() {
return "Small";
}
}
public class MiddlePen implements PenSize {
@Override
public String getSize() {
return "Middle";
}
}
public class BigPen implements PenSize {
@Override
public String getSize() {
return "Big";
}
}
組合顏色和大小:public class Pen {
private Color color;
private PenSize size;
public Pen(Color color, PenSize size) {
this.color = color;
this.size = size;
}
public void draw() {
System.out.println("Drawing with a " + color.getColor() + " " + size.getSize() + " pen.");
}
}