9.26

[实验任务一]:UML复习

阅读教材第一章复习UML,回答下述问题:

面向对象程序设计中类与类的关系都有哪几种?分别用类图实例说明。

关联(Association):

  • 表示类之间的“有一个”(has-a)关系。
  • 例如,一个班级和学生之间的关系。

 

聚合关联

 

· 聚合(Aggregation)关系表示整体与部分的关系

· 在聚合关系中,成员对象是整体对象的一部分,但是成员对象可以脱离整体

对象独立存在

 

· 在UML中,聚合关系用带空心菱形的直线表示

 

组合关联

· 组合(Composition)关系也表示类之间整体和部分的关系,但是在组合关系

中整体对象可以控制成员对象的生命周期,一旦整体对象不存在,成员对象

也将不存在

· 成员对象与整体对象之间具有同生共死的关系

· 在UML中,组合关系用带实心菱形的直线表示

 

 

容器与成员

依赖(Dependency):

  • 依赖(Dependency)关系是一种使用关系,特定事物的改变有可能会影响到使用
  • 该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系
  • 大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数
  • UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方

 

继承(泛化)关系

 

子类(派生类)继承父类(基类)的属性和方法,从而实现代码的重用和扩展。继承可以是单继承(一个子类仅继承一个父类)或多继承(一个子类可以继承多个父类)。

 

[实验任务二]:单一职责原则

登录模块在实际项目开发中很常见,请按照教材28页(PPT49页)利用单一职责原则重构后的类图实现这一模块。

实验要求:

1. 提交源代码和对应的数据库文件(注意将此模块保存,以备以后使用)

2. 

数据库建表

CREATE TABLE users

(

 username VARCHAR(50) NOT NULL UNIQUE,

password VARCHAR(255) NOT NULL 

);

登录 Servlet (LoginServlet.java)

package com.example;

import com.example.newuml.DBUtil;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        // 验证用户
        try {
            if (isValidUser(username, password)) {
                response.getWriter().println("<h1>登录成功</h1>");
            } else {
                response.sendRedirect("index.jsp?error=用户名或密码错误");
            }
        } catch (Exception e) {
            e.printStackTrace(response.getWriter());
        }
    }

    private boolean isValidUser(String username, String password) throws Exception {
        String query = "SELECT * FROM users WHERE username=? AND password=?";
        try (Connection connection = DBUtil.getConnection();
             PreparedStatement pstmt = connection.prepareStatement(query)) {
            pstmt.setString(1, username);
            pstmt.setString(2, password); // 在此处应使用哈希后的密码进行比较

            ResultSet rs = pstmt.executeQuery();
            return rs.next(); // 如果用户存在,返回true
        }
    }
}

 

....

2.注意编程规范。

 

[实验任务三]:依赖倒转原则与合成复用原则

 

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

实验要求:

1. 提交源代码;

public enum Color {  

    RED, GREEN, BLUE; // 可以根据需要添加更多颜色  

}  

public enum Size {  

    SMALL, MIDDLE, BIG; // 可以根据需要添加更多尺寸  

}  

 

public class Pen {  

    private Color color;  

    private Size size;  

 

    public Pen(Color color, Size size) {  

        this.color = color;  

        this.size = size;  

    }  

 

    // 其他方法,例如绘图等  

}

2.画出重构后的类图。

 

 

posted @ 2024-11-27 08:13  The-rich  阅读(20)  评论(0)    收藏  举报