阅读教材第一章复习UML,回答下述问题:
面向对象程序设计中类与类的关系都有哪几种?分别用类图实例说明。
- 关联关系
(1).单相关联
学生可以选修课程,但课程不需要知道哪些学生选修了它。
(2).双向关联
(3).自关联关系
以公司的组织结构为例,一个员工可以是另一个员工的管理者。
(4).多重关联
一个教师可以在多个部门任教,一个部门也可以有多个教师。
(5).聚合关联
大学包含多个学院,但学院可以独立存在。
(6).组合关联
引擎是汽车不可分割的一部分,没有汽车,引擎就没有意义。每辆汽车必须有且只有一个引擎,Engine的生命周期完全依赖于Car,当Car被销毁时,Engine也会被销毁
-
依赖关系
订单类在处理付款时依赖于支付类,但这种依赖并不是持久的。 -
泛化关系
"圆形"和"矩形"都是"形状"的具体实现。 -
接口与实现关系
[实验任务二]:单一职责原则
登录模块在实际项目开发中很常见,请按照教材28页(PPT49页)利用单一职责原则重构后的类图实现这一模块。
实验要求:
1.提交源代码和对应的数据库文件(注意将此模块保存,以备以后使用);
2.注意编程规范。
数据库sql
LoginForm.java
import javax.swing.;
import java.awt.;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class LoginForm extends JFrame {
private UserDAO dao;
private JTextField usernameField;
private JPasswordField passwordField;
private JLabel statusLabel;
public LoginForm() {
dao = new UserDAO();
initUI();
}
private void initUI() {
// 创建主面板
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
constraints.insets = new Insets(5, 5, 5, 5);
constraints.fill = GridBagConstraints.HORIZONTAL;
// 用户名标签和文本框
JLabel usernameLabel = new JLabel("用户名:");
constraints.gridx = 0;
constraints.gridy = 0;
panel.add(usernameLabel, constraints);
usernameField = new JTextField(20);
constraints.gridx = 1;
panel.add(usernameField, constraints);
// 密码标签和密码框
JLabel passwordLabel = new JLabel("密码:");
constraints.gridx = 0;
constraints.gridy = 1;
panel.add(passwordLabel, constraints);
passwordField = new JPasswordField(20);
constraints.gridx = 1;
panel.add(passwordField, constraints);
// 登录按钮
JButton loginButton = new JButton("登录");
constraints.gridx = 0;
constraints.gridy = 2;
constraints.gridwidth = 2;
constraints.anchor = GridBagConstraints.CENTER;
panel.add(loginButton, constraints);
// 状态标签
statusLabel = new JLabel();
constraints.gridx = 0;
constraints.gridy = 3;
constraints.gridwidth = 2;
panel.add(statusLabel, constraints);
// 设置登录按钮的事件监听器
loginButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String username = usernameField.getText();
String password = new String(passwordField.getPassword());
if (validate(username, password)) {
statusLabel.setText("登陆成功");
} else {
statusLabel.setText("无效的用户名或密码");
}
}
});
// 设置窗口属性
add(panel);
setTitle("登 录");
setSize(400, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
public boolean validate(String userName, String userPassword) {
return dao.findUser(userName, userPassword);
}
}
userDao.java
DButil.java
MainClass.java
[实验任务三]:依赖倒转原则与合成复用原则
在一画图软件中提供了多种大小不同的画笔,并且可以给画笔指定不同的颜色,某设计人员对画笔进行了如上图所示的设计。通过分析,可以发现增加画笔的种类和颜色会使得系统中类的数目急剧增加,请根据合成复用原则和依赖倒转原则对上述设计进行重构。
实验要求:
-
提交源代码;
-
画出重构后的类图。
// Color.java
// 颜色接口
public interface Color {
String getColorName();
}
// Red.java
// 红色实现
public class Red implements Color {
@Override
public String getColorName() {
return "红色";
}
}
// Green.java
// 绿色实现
public class Green implements Color {
@Override
public String getColorName() {
return "绿色";
}
}
// Size.java
// 尺寸接口
public interface Size {
String getSizeName();
}
// Small.java
// 小尺寸实现
public class Small implements Size {
@Override
public String getSizeName() {
return "小号";
}
}
// Middle.java
// 中等尺寸实现
public class Middle implements Size {
@Override
public String getSizeName() {
return "中号";
}
}
// Big.java
// 大尺寸实现
public class Big implements Size {
@Override
public String getSizeName() {
return "大号";
}
}
// Pen.java
// 画笔类
public class Pen {
private Color color; // 颜色属性
private Size size; // 尺寸属性
// 构造函数
public Pen(Color color, Size size) {
this.color = color;
this.size = size;
}
// 绘画方法
public void draw() {
System.out.println("正在使用" + color.getColorName() + size.getSizeName() + "画笔绘画。");
}
}
标签:java,String,new,11.8,panel,public,constraints From: https://www.cnblogs.com/wlxdaydayup/p/18527776