11.8

阅读教材第一章复习UML,回答下述问题:
面向对象程序设计中类与类的关系都有哪几种?分别用类图实例说明。

  1. 关联关系
    (1).单相关联
    学生可以选修课程,但课程不需要知道哪些学生选修了它。

(2).双向关联

(3).自关联关系
以公司的组织结构为例,一个员工可以是另一个员工的管理者。

(4).多重关联
一个教师可以在多个部门任教,一个部门也可以有多个教师。

(5).聚合关联
大学包含多个学院,但学院可以独立存在。

(6).组合关联
引擎是汽车不可分割的一部分,没有汽车,引擎就没有意义。每辆汽车必须有且只有一个引擎,Engine的生命周期完全依赖于Car,当Car被销毁时,Engine也会被销毁

  1. 依赖关系
    订单类在处理付款时依赖于支付类,但这种依赖并不是持久的。

  2. 泛化关系
    "圆形"和"矩形"都是"形状"的具体实现。

  3. 接口与实现关系

[实验任务二]:单一职责原则
登录模块在实际项目开发中很常见,请按照教材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

[实验任务三]:依赖倒转原则与合成复用原则
在一画图软件中提供了多种大小不同的画笔,并且可以给画笔指定不同的颜色,某设计人员对画笔进行了如上图所示的设计。通过分析,可以发现增加画笔的种类和颜色会使得系统中类的数目急剧增加,请根据合成复用原则和依赖倒转原则对上述设计进行重构。
实验要求:

  1. 提交源代码;

  2. 画出重构后的类图。

// 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() + "画笔绘画。");
}

}

posted @   aallofitisst  阅读(4)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示