实验1:UML与面向对象程序设计原则
[实验任务一]: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.");
}
}