Tutorial 1_UML与面向对象程序设计基本原则

软件

软件设计                  石家庄铁道大学信息学院

 

实验1UML与面向对象程序设计原则

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、掌握面向对象程序设计中类与类之间的关系以及对应的UML类图;

2、理解面向对象程序设计原则

 

[实验任务一]UML复习

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

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

1、依赖关系(Dependency

对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。

2、关联关系(Association

对象之间一种引用关系,比如客户类与订单类之间的关系。这种关系通常使用类的属性表达。关联可以有方向,即导航。一般不作说明的时候,导航是双向的,不需要在线上标出箭头。 大部分情况下导航是单向的,可以加一个箭头表示。

3、聚合(Aggregation

聚合(关联关系的一种):表示 has-a 的关系。与关联关系一样,聚合关系也是通过实例变量来实现这样关的。关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。如汽车类与引挚类,轮胎类之间的关系就是整体与个体的关系。与关联关系一样,聚合关系也是通过实例变量来实现的。空心菱形

4、组合(Composite

对象 A 包含对象 B,对象 B 离开对象 A 没有实际意义。是一种更强的关联关系。人包含手,手离开人的躯体就失去了它应有的作用。
组合:表示 contains-a 的关系,是一种强烈的包含关系。组合类负责被组合类的生命周期。也使用属性表达组合关系,是关联关系的一种,是比聚合关系强的关系。

5、继承(Generalization,又称为泛化, is-a 的关系)

类与类的继承关系,类与接口的实现关系。

场景:父与子、动物与人、植物与树

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

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

底层调用代码,交互,连接

实验要求:

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

2.注意编程规范。

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

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

实验要求:

1.  提交源代码;

(1)DAO.java

package login_;

 

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

 

 

public class DAO {

/**

    * login(Connection con,User user) 登录验证

    * (Connection con,User user)注册功能

    * @author 蒋鑫

    */

public user login(Connection con,user user) throws Exception{

 user resultUser=null;

String sql="select * from t_user where userName=? and password=?";

PreparedStatement pstmt=con.prepareStatement(sql);

pstmt.setString(1, user.getUserName());

pstmt.setString(2, user.getPassword());

    ResultSet rs=pstmt.executeQuery();

    if(rs.next()){

    resultUser=new user();

    resultUser.setUserName(rs.getString("userName"));

    resultUser.setPassword(rs.getString("password"));

    }

    return resultUser;

}

   

    //注册功能

    public boolean register(Connection con,user user) throws Exception{

        boolean flag=false;

        PreparedStatement pstmt = null;

        String sql="INSERT INTO t_user(userName,password)VALUES(?,?)";

        pstmt = con.prepareStatement(sql);

        pstmt.setString(1, user.getUserName());

        pstmt.setString(2, user.getPassword());

        if (pstmt.executeUpdate() > 0) {

                flag = true;

        }

        return flag;

        }

 

}

 

 

(2)DBUtil.java

package login_;

 

import java.sql.Connection;

import java.sql.DriverManager;

 

public class DBUtil {

 

    private String dbUrl="jdbc:mysql://localhost:3306/login";

 

 

    private String dbUserName="root";

    private String dbPassword="root";

 

 

 

 

    private String jdbcName="com.mysql.jdbc.Driver";

 

    public Connection getCon() throws Exception{

        Class.forName(jdbcName);

        Connection con=DriverManager.getConnection(dbUrl,dbUserName,dbPassword);

        return con;

    }

    public void closeCon(Connection con) throws Exception{

        if(con!=null){

            con.close();

        }

    }

 

 

    public static void main(String[] args) {

        DBUtil dbUtil=new DBUtil();

        try {

            dbUtil.getCon();

            System.out.println("数据库连接成功");

        } catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

}

 

 

(3)LoginServlet.java

package login_;

 

import java.io.IOException;

import java.sql.Connection;

 

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{

    @Override

    protected void doGet(HttpServletRequest req,HttpServletResponse resp)throws

    ServletException,IOException{

        this.doPost(req, resp);

    }

   

    @Override

    protected void doPost(HttpServletRequest req,HttpServletResponse resp)throws

    ServletException,IOException{

       

        String userName=req.getParameter("userName");

        String password=req.getParameter("passeord");

       

        DBUtil db=new DBUtil();

        user user=new user(userName,password);

        DAO dao=new DAO();

        try {

            Connection con=db.getCon();

           

            if(dao.login(con, user)!=null){

                resp.sendRedirect("ok.jsp");

            }else {

                resp.sendRedirect("register.jsp");

            }

        }

        catch(Exception e) {

            e.printStackTrace();

           

        }

    }

}

 

 

(4)RegisterServlet.java

package login_;

 

import java.io.IOException;

import java.sql.Connection;

 

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("/RegisterServlet")

public class RegisterServlet extends HttpServlet{

 

    @Override

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        this.doPost(req, resp);

    }

 

    @Override

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

   

 

        /**

       * 接收前台传来的值 账号和密码

       */

        String userName=req.getParameter("userName");

 

        String password=req.getParameter("password");

 

        DBUtil db= new DBUtil();

        user user=new user(userName,password);

        DAO dao=new DAO();

        try {

            //数据库链接

            Connection con=db.getCon();

 

            if(dao.register(con,user)) {

                resp.sendRedirect("login.jsp");

            }else {

                resp.sendRedirect("register.jsp");

            }

 

        } catch (Exception e) {

            e.printStackTrace();

}

    }

}

 

 

(5)user.java

package login_;

 

publicclass user {

    private String userName;

    private String password;

   

    public user() {}

   

    public user(String userName,String password) {

        this.userName=userName;

        this.password=password;

    }

   

    public String getUserName() {

        returnuserName;

    }

    publicvoid setUserName(String userName) {

        this.userName=userName;

    }

    public String getPassword() {

        returnpassword;

    }

    publicvoid setPassword(String password) {

        this.password=password;

    }

}

 

 

(6login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>登录界面</title>

</head>

<body>

    <form action="LoginServlet" method="post">

    <h3>登录界面</h3>

        账号:<input type="text" name='userName'/><br/>

        密码:<input type="password" name='password'/><br/>

        <input type="submit" value="登录"/>

    </form>

</body>

</html>

 

 

 

(7)register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>会员注册</title>

</head>

<body>

    <form action="RegisterServlet" method="post">

        账号:<input type="text" name='userName'/><br/>

        密码:<input type="password" name='password'/><br/>

        <input type="submit" value="注册"/>

    </form>

</body>

</html>

 

实验截图:

2.画出重构后的类图。

软件设计                  石家庄铁道大学信息学院

 

实验1UML与面向对象程序设计原则

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、掌握面向对象程序设计中类与类之间的关系以及对应的UML类图;

2、理解面向对象程序设计原则

 

[实验任务一]UML复习

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

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

1、依赖关系(Dependency

对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。

2、关联关系(Association

对象之间一种引用关系,比如客户类与订单类之间的关系。这种关系通常使用类的属性表达。关联可以有方向,即导航。一般不作说明的时候,导航是双向的,不需要在线上标出箭头。 大部分情况下导航是单向的,可以加一个箭头表示。

3、聚合(Aggregation

聚合(关联关系的一种):表示 has-a 的关系。与关联关系一样,聚合关系也是通过实例变量来实现这样关的。关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。如汽车类与引挚类,轮胎类之间的关系就是整体与个体的关系。与关联关系一样,聚合关系也是通过实例变量来实现的。空心菱形

4、组合(Composite

对象 A 包含对象 B,对象 B 离开对象 A 没有实际意义。是一种更强的关联关系。人包含手,手离开人的躯体就失去了它应有的作用。
组合:表示 contains-a 的关系,是一种强烈的包含关系。组合类负责被组合类的生命周期。也使用属性表达组合关系,是关联关系的一种,是比聚合关系强的关系。

5、继承(Generalization,又称为泛化, is-a 的关系)

类与类的继承关系,类与接口的实现关系。

场景:父与子、动物与人、植物与树

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

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

底层调用代码,交互,连接

实验要求:

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

2.注意编程规范。

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

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

实验要求:

1.  提交源代码;

(1)DAO.java

package login_;

 

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

 

 

public class DAO {

/**

    * login(Connection con,User user) 登录验证

    * (Connection con,User user)注册功能

    * @author 蒋鑫

    */

public user login(Connection con,user user) throws Exception{

 user resultUser=null;

String sql="select * from t_user where userName=? and password=?";

PreparedStatement pstmt=con.prepareStatement(sql);

pstmt.setString(1, user.getUserName());

pstmt.setString(2, user.getPassword());

    ResultSet rs=pstmt.executeQuery();

    if(rs.next()){

    resultUser=new user();

    resultUser.setUserName(rs.getString("userName"));

    resultUser.setPassword(rs.getString("password"));

    }

    return resultUser;

}

   

    //注册功能

    public boolean register(Connection con,user user) throws Exception{

        boolean flag=false;

        PreparedStatement pstmt = null;

        String sql="INSERT INTO t_user(userName,password)VALUES(?,?)";

        pstmt = con.prepareStatement(sql);

        pstmt.setString(1, user.getUserName());

        pstmt.setString(2, user.getPassword());

        if (pstmt.executeUpdate() > 0) {

                flag = true;

        }

        return flag;

        }

 

}

 

 

(2)DBUtil.java

package login_;

 

import java.sql.Connection;

import java.sql.DriverManager;

 

public class DBUtil {

 

    private String dbUrl="jdbc:mysql://localhost:3306/login";

 

 

    private String dbUserName="root";

    private String dbPassword="root";

 

 

 

 

    private String jdbcName="com.mysql.jdbc.Driver";

 

    public Connection getCon() throws Exception{

        Class.forName(jdbcName);

        Connection con=DriverManager.getConnection(dbUrl,dbUserName,dbPassword);

        return con;

    }

    public void closeCon(Connection con) throws Exception{

        if(con!=null){

            con.close();

        }

    }

 

 

    public static void main(String[] args) {

        DBUtil dbUtil=new DBUtil();

        try {

            dbUtil.getCon();

            System.out.println("数据库连接成功");

        } catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

}

 

 

(3)LoginServlet.java

package login_;

 

import java.io.IOException;

import java.sql.Connection;

 

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{

    @Override

    protected void doGet(HttpServletRequest req,HttpServletResponse resp)throws

    ServletException,IOException{

        this.doPost(req, resp);

    }

   

    @Override

    protected void doPost(HttpServletRequest req,HttpServletResponse resp)throws

    ServletException,IOException{

       

        String userName=req.getParameter("userName");

        String password=req.getParameter("passeord");

       

        DBUtil db=new DBUtil();

        user user=new user(userName,password);

        DAO dao=new DAO();

        try {

            Connection con=db.getCon();

           

            if(dao.login(con, user)!=null){

                resp.sendRedirect("ok.jsp");

            }else {

                resp.sendRedirect("register.jsp");

            }

        }

        catch(Exception e) {

            e.printStackTrace();

           

        }

    }

}

 

 

(4)RegisterServlet.java

package login_;

 

import java.io.IOException;

import java.sql.Connection;

 

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("/RegisterServlet")

public class RegisterServlet extends HttpServlet{

 

    @Override

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        this.doPost(req, resp);

    }

 

    @Override

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

   

 

        /**

       * 接收前台传来的值 账号和密码

       */

        String userName=req.getParameter("userName");

 

        String password=req.getParameter("password");

 

        DBUtil db= new DBUtil();

        user user=new user(userName,password);

        DAO dao=new DAO();

        try {

            //数据库链接

            Connection con=db.getCon();

 

            if(dao.register(con,user)) {

                resp.sendRedirect("login.jsp");

            }else {

                resp.sendRedirect("register.jsp");

            }

 

        } catch (Exception e) {

            e.printStackTrace();

}

    }

}

 

 

(5)user.java

package login_;

 

publicclass user {

    private String userName;

    private String password;

   

    public user() {}

   

    public user(String userName,String password) {

        this.userName=userName;

        this.password=password;

    }

   

    public String getUserName() {

        returnuserName;

    }

    publicvoid setUserName(String userName) {

        this.userName=userName;

    }

    public String getPassword() {

        returnpassword;

    }

    publicvoid setPassword(String password) {

        this.password=password;

    }

}

 

 

(6login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>登录界面</title>

</head>

<body>

    <form action="LoginServlet" method="post">

    <h3>登录界面</h3>

        账号:<input type="text" name='userName'/><br/>

        密码:<input type="password" name='password'/><br/>

        <input type="submit" value="登录"/>

    </form>

</body>

</html>

 

 

 

(7)register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>会员注册</title>

</head>

<body>

    <form action="RegisterServlet" method="post">

        账号:<input type="text" name='userName'/><br/>

        密码:<input type="password" name='password'/><br/>

        <input type="submit" value="注册"/>

    </form>

</body>

</html>

 

实验截图:

2.画出重构后的类图。

 设计

软件设计                  石家庄铁道大学信息学院

 

实验1UML与面向对象程序设计原则

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、掌握面向对象程序设计中类与类之间的关系以及对应的UML类图;

2、理解面向对象程序设计原则

 


[实验任务一]UML复习

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

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

1、依赖关系(Dependency

对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。

2、关联关系(Association

对象之间一种引用关系,比如客户类与订单类之间的关系。这种关系通常使用类的属性表达。关联可以有方向,即导航。一般不作说明的时候,导航是双向的,不需要在线上标出箭头。 大部分情况下导航是单向的,可以加一个箭头表示。

3、聚合(Aggregation

聚合(关联关系的一种):表示 has-a 的关系。与关联关系一样,聚合关系也是通过实例变量来实现这样关的。关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。如汽车类与引挚类,轮胎类之间的关系就是整体与个体的关系。与关联关系一样,聚合关系也是通过实例变量来实现的。空心菱形

4、组合(Composite

对象 A 包含对象 B,对象 B 离开对象 A 没有实际意义。是一种更强的关联关系。人包含手,手离开人的躯体就失去了它应有的作用。
组合:表示 contains-a 的关系,是一种强烈的包含关系。组合类负责被组合类的生命周期。也使用属性表达组合关系,是关联关系的一种,是比聚合关系强的关系。

5、继承(Generalization,又称为泛化, is-a 的关系)

类与类的继承关系,类与接口的实现关系。

场景:父与子、动物与人、植物与树

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

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

底层调用代码,交互,连接

实验要求:

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

2.注意编程规范。

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

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

实验要求:

1.  提交源代码;

(1)DAO.java

package login_;

 

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

 

 

public class DAO {

/**

    * login(Connection con,User user) 登录验证

    * (Connection con,User user)注册功能

    * @author 蒋鑫

    */

public user login(Connection con,user user) throws Exception{

 user resultUser=null;

String sql="select * from t_user where userName=? and password=?";

PreparedStatement pstmt=con.prepareStatement(sql);

pstmt.setString(1, user.getUserName());

pstmt.setString(2, user.getPassword());

    ResultSet rs=pstmt.executeQuery();

    if(rs.next()){

    resultUser=new user();

    resultUser.setUserName(rs.getString("userName"));

    resultUser.setPassword(rs.getString("password"));

    }

    return resultUser;

}

   

    //注册功能

    public boolean register(Connection con,user user) throws Exception{

        boolean flag=false;

        PreparedStatement pstmt = null;

        String sql="INSERT INTO t_user(userName,password)VALUES(?,?)";

        pstmt = con.prepareStatement(sql);

        pstmt.setString(1, user.getUserName());

        pstmt.setString(2, user.getPassword());

        if (pstmt.executeUpdate() > 0) {

                flag = true;

        }

        return flag;

        }

 

}

 

 

(2)DBUtil.java

package login_;

 

import java.sql.Connection;

import java.sql.DriverManager;

 

public class DBUtil {

 

    private String dbUrl="jdbc:mysql://localhost:3306/login";

 

 

    private String dbUserName="root";

    private String dbPassword="root";

 

 

 

 

    private String jdbcName="com.mysql.jdbc.Driver";

 

    public Connection getCon() throws Exception{

        Class.forName(jdbcName);

        Connection con=DriverManager.getConnection(dbUrl,dbUserName,dbPassword);

        return con;

    }

    public void closeCon(Connection con) throws Exception{

        if(con!=null){

            con.close();

        }

    }

 

 

    public static void main(String[] args) {

        DBUtil dbUtil=new DBUtil();

        try {

            dbUtil.getCon();

            System.out.println("数据库连接成功");

        } catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

}

 

 

(3)LoginServlet.java

package login_;

 

import java.io.IOException;

import java.sql.Connection;

 

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{

    @Override

    protected void doGet(HttpServletRequest req,HttpServletResponse resp)throws

    ServletException,IOException{

        this.doPost(req, resp);

    }

   

    @Override

    protected void doPost(HttpServletRequest req,HttpServletResponse resp)throws

    ServletException,IOException{

       

        String userName=req.getParameter("userName");

        String password=req.getParameter("passeord");

       

        DBUtil db=new DBUtil();

        user user=new user(userName,password);

        DAO dao=new DAO();

        try {

            Connection con=db.getCon();

           

            if(dao.login(con, user)!=null){

                resp.sendRedirect("ok.jsp");

            }else {

                resp.sendRedirect("register.jsp");

            }

        }

        catch(Exception e) {

            e.printStackTrace();

           

        }

    }

}

 

 

(4)RegisterServlet.java

package login_;

 

import java.io.IOException;

import java.sql.Connection;

 

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("/RegisterServlet")

public class RegisterServlet extends HttpServlet{

 

    @Override

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        this.doPost(req, resp);

    }

 

    @Override

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

   

 

        /**

       * 接收前台传来的值 账号和密码

       */

        String userName=req.getParameter("userName");

 

        String password=req.getParameter("password");

 

        DBUtil db= new DBUtil();

        user user=new user(userName,password);

        DAO dao=new DAO();

        try {

            //数据库链接

            Connection con=db.getCon();

 

            if(dao.register(con,user)) {

                resp.sendRedirect("login.jsp");

            }else {

                resp.sendRedirect("register.jsp");

            }

 

        } catch (Exception e) {

            e.printStackTrace();

}

    }

}

 

 

(5)user.java

package login_;

 

publicclass user {

    private String userName;

    private String password;

   

    public user() {}

   

    public user(String userName,String password) {

        this.userName=userName;

        this.password=password;

    }

   

    public String getUserName() {

        returnuserName;

    }

    publicvoid setUserName(String userName) {

        this.userName=userName;

    }

    public String getPassword() {

        returnpassword;

    }

    publicvoid setPassword(String password) {

        this.password=password;

    }

}

 

 

(6login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>登录界面</title>

</head>

<body>

    <form action="LoginServlet" method="post">

    <h3>登录界面</h3>

        账号:<input type="text" name='userName'/><br/>

        密码:<input type="password" name='password'/><br/>

        <input type="submit" value="登录"/>

    </form>

</body>

</html>

 

 

 

(7)register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>会员注册</title>

</head>

<body>

    <form action="RegisterServlet" method="post">

        账号:<input type="text" name='userName'/><br/>

        密码:<input type="password" name='password'/><br/>

        <input type="submit" value="注册"/>

    </form>

</body>

</html>

 

实验截图:

2.画出重构后的类图。

 石家庄铁

软件设计                  石家庄铁道大学信息学院

 

实验1UML与面向对象程序设计原则

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、掌握面向对象程序设计中类与类之间的关系以及对应的UML类图;

2、理解面向对象程序设计原则

 

[实验任务一]UML复习

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

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

1、依赖关系(Dependency

对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。

2、关联关系(Association

对象之间一种引用关系,比如客户类与订单类之间的关系。这种关系通常使用类的属性表达。关联可以有方向,即导航。一般不作说明的时候,导航是双向的,不需要在线上标出箭头。 大部分情况下导航是单向的,可以加一个箭头表示。

3、聚合(Aggregation

聚合(关联关系的一种):表示 has-a 的关系。与关联关系一样,聚合关系也是通过实例变量来实现这样关的。关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。如汽车类与引挚类,轮胎类之间的关系就是整体与个体的关系。与关联关系一样,聚合关系也是通过实例变量来实现的。空心菱形

4、组合(Composite

对象 A 包含对象 B,对象 B 离开对象 A 没有实际意义。是一种更强的关联关系。人包含手,手离开人的躯体就失去了它应有的作用。
组合:表示 contains-a 的关系,是一种强烈的包含关系。组合类负责被组合类的生命周期。也使用属性表达组合关系,是关联关系的一种,是比聚合关系强的关系。

5、继承(Generalization,又称为泛化, is-a 的关系)

类与类的继承关系,类与接口的实现关系。

场景:父与子、动物与人、植物与树

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

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

底层调用代码,交互,连接

实验要求:

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

2.注意编程规范。

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

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

实验要求:

1.  提交源代码;

(1)DAO.java

package login_;

 

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

 

 

public class DAO {

/**

    * login(Connection con,User user) 登录验证

    * (Connection con,User user)注册功能

    * @author 蒋鑫

    */

public user login(Connection con,user user) throws Exception{

 user resultUser=null;

String sql="select * from t_user where userName=? and password=?";

PreparedStatement pstmt=con.prepareStatement(sql);

pstmt.setString(1, user.getUserName());

pstmt.setString(2, user.getPassword());

    ResultSet rs=pstmt.executeQuery();

    if(rs.next()){

    resultUser=new user();

    resultUser.setUserName(rs.getString("userName"));

    resultUser.setPassword(rs.getString("password"));

    }

    return resultUser;

}

   

    //注册功能

    public boolean register(Connection con,user user) throws Exception{

        boolean flag=false;

        PreparedStatement pstmt = null;

        String sql="INSERT INTO t_user(userName,password)VALUES(?,?)";

        pstmt = con.prepareStatement(sql);

        pstmt.setString(1, user.getUserName());

        pstmt.setString(2, user.getPassword());

        if (pstmt.executeUpdate() > 0) {

                flag = true;

        }

        return flag;

        }

 

}

 

 

(2)DBUtil.java

package login_;

 

import java.sql.Connection;

import java.sql.DriverManager;

 

public class DBUtil {

 

    private String dbUrl="jdbc:mysql://localhost:3306/login";

 

 

    private String dbUserName="root";

    private String dbPassword="root";

 

 

 

 

    private String jdbcName="com.mysql.jdbc.Driver";

 

    public Connection getCon() throws Exception{

        Class.forName(jdbcName);

        Connection con=DriverManager.getConnection(dbUrl,dbUserName,dbPassword);

        return con;

    }

    public void closeCon(Connection con) throws Exception{

        if(con!=null){

            con.close();

        }

    }

 

 

    public static void main(String[] args) {

        DBUtil dbUtil=new DBUtil();

        try {

            dbUtil.getCon();

            System.out.println("数据库连接成功");

        } catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

}

 

 

(3)LoginServlet.java

package login_;

 

import java.io.IOException;

import java.sql.Connection;

 

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{

    @Override

    protected void doGet(HttpServletRequest req,HttpServletResponse resp)throws

    ServletException,IOException{

        this.doPost(req, resp);

    }

   

    @Override

    protected void doPost(HttpServletRequest req,HttpServletResponse resp)throws

    ServletException,IOException{

       

        String userName=req.getParameter("userName");

        String password=req.getParameter("passeord");

       

        DBUtil db=new DBUtil();

        user user=new user(userName,password);

        DAO dao=new DAO();

        try {

            Connection con=db.getCon();

           

            if(dao.login(con, user)!=null){

                resp.sendRedirect("ok.jsp");

            }else {

                resp.sendRedirect("register.jsp");

            }

        }

        catch(Exception e) {

            e.printStackTrace();

           

        }

    }

}

 

 

(4)RegisterServlet.java

package login_;

 

import java.io.IOException;

import java.sql.Connection;

 

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("/RegisterServlet")

public class RegisterServlet extends HttpServlet{

 

    @Override

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        this.doPost(req, resp);

    }

 

    @Override

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

   

 

        /**

       * 接收前台传来的值 账号和密码

       */

        String userName=req.getParameter("userName");

 

        String password=req.getParameter("password");

 

        DBUtil db= new DBUtil();

        user user=new user(userName,password);

        DAO dao=new DAO();

        try {

            //数据库链接

            Connection con=db.getCon();

 

            if(dao.register(con,user)) {

                resp.sendRedirect("login.jsp");

            }else {

                resp.sendRedirect("register.jsp");

            }

 

        } catch (Exception e) {

            e.printStackTrace();

}

    }

}

 

 

(5)user.java

package login_;

 

publicclass user {

    private String userName;

    private String password;

   

    public user() {}

   

    public user(String userName,String password) {

        this.userName=userName;

        this.password=password;

    }

   

    public String getUserName() {

        returnuserName;

    }

    publicvoid setUserName(String userName) {

        this.userName=userName;

    }

    public String getPassword() {

        returnpassword;

    }

    publicvoid setPassword(String password) {

        this.password=password;

    }

}

 

 

(6login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>登录界面</title>

</head>

<body>

    <form action="LoginServlet" method="post">

    <h3>登录界面</h3>

        账号:<input type="text" name='userName'/><br/>

        密码:<input type="password" name='password'/><br/>

        <input type="submit" value="登录"/>

    </form>

</body>

</html>

 

 

 

(7)register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>会员注册</title>

</head>

<body>

    <form action="RegisterServlet" method="post">

        账号:<input type="text" name='userName'/><br/>

        密码:<input type="password" name='password'/><br/>

        <input type="submit" value="注册"/>

    </form>

</body>

</html>

 

实验截图:

2.画出重构后的类图。

 道大学信息学院

 

实验1UML与面向对象程序设计原则

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、掌握面向对象程序设计中类与类之间的关系以及对应的UML类图;

2、理解面向对象程序设计原则

 

[实验任务一]UML复习

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

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

1、依赖关系(Dependency

对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。

2、关联关系(Association

对象之间一种引用关系,比如客户类与订单类之间的关系。这种关系通常使用类的属性表达。关联可以有方向,即导航。一般不作说明的时候,导航是双向的,不需要在线上标出箭头。 大部分情况下导航是单向的,可以加一个箭头表示。

3、聚合(Aggregation

聚合(关联关系的一种):表示 has-a 的关系。与关联关系一样,聚合关系也是通过实例变量来实现这样关的。关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。如汽车类与引挚类,轮胎类之间的关系就是整体与个体的关系。与关联关系一样,聚合关系也是通过实例变量来实现的。空心菱形

4、组合(Composite

对象 A 包含对象 B,对象 B 离开对象 A 没有实际意义。是一种更强的关联关系。人包含手,手离开人的躯体就失去了它应有的作用。
组合:表示 contains-a 的关系,是一种强烈的包含关系。组合类负责被组合类的生命周期。也使用属性表达组合关系,是关联关系的一种,是比聚合关系强的关系。

5、继承(Generalization,又称为泛化, is-a 的关系)

类与类的继承关系,类与接口的实现关系。

场景:父与子、动物与人、植物与树

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

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

底层调用代码,交互,连接

实验要求:

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

2.注意编程规范。

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

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

实验要求:

1.  提交源代码;

(1)DAO.java

package login_;

 

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

 

 

public class DAO {

/**

    * login(Connection con,User user) 登录验证

    * (Connection con,User user)注册功能

    * @author 蒋鑫

    */

public user login(Connection con,user user) throws Exception{

 user resultUser=null;

String sql="select * from t_user where userName=? and password=?";

PreparedStatement pstmt=con.prepareStatement(sql);

pstmt.setString(1, user.getUserName());

pstmt.setString(2, user.getPassword());

    ResultSet rs=pstmt.executeQuery();

    if(rs.next()){

    resultUser=new user();

    resultUser.setUserName(rs.getString("userName"));

    resultUser.setPassword(rs.getString("password"));

    }

    return resultUser;

}

   

    //注册功能

    public boolean register(Connection con,user user) throws Exception{

        boolean flag=false;

        PreparedStatement pstmt = null;

        String sql="INSERT INTO t_user(userName,password)VALUES(?,?)";

        pstmt = con.prepareStatement(sql);

        pstmt.setString(1, user.getUserName());

        pstmt.setString(2, user.getPassword());

        if (pstmt.executeUpdate() > 0) {

                flag = true;

        }

        return flag;

        }

 

}

 

 

(2)DBUtil.java

package login_;

 

import java.sql.Connection;

import java.sql.DriverManager;

 

public class DBUtil {

 

    private String dbUrl="jdbc:mysql://localhost:3306/login";

 

 

    private String dbUserName="root";

    private String dbPassword="root";

 

 

 

 

    private String jdbcName="com.mysql.jdbc.Driver";

 

    public Connection getCon() throws Exception{

        Class.forName(jdbcName);

        Connection con=DriverManager.getConnection(dbUrl,dbUserName,dbPassword);

        return con;

    }

    public void closeCon(Connection con) throws Exception{

        if(con!=null){

            con.close();

        }

    }

 

 

    public static void main(String[] args) {

        DBUtil dbUtil=new DBUtil();

        try {

            dbUtil.getCon();

            System.out.println("数据库连接成功");

        } catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

}

 

 

(3)LoginServlet.java

package login_;

 

import java.io.IOException;

import java.sql.Connection;

 

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{

    @Override

    protected void doGet(HttpServletRequest req,HttpServletResponse resp)throws

    ServletException,IOException{

        this.doPost(req, resp);

    }

   

    @Override

    protected void doPost(HttpServletRequest req,HttpServletResponse resp)throws

    ServletException,IOException{

       

        String userName=req.getParameter("userName");

        String password=req.getParameter("passeord");

       

        DBUtil db=new DBUtil();

        user user=new user(userName,password);

        DAO dao=new DAO();

        try {

            Connection con=db.getCon();

           

            if(dao.login(con, user)!=null){

                resp.sendRedirect("ok.jsp");

            }else {

                resp.sendRedirect("register.jsp");

            }

        }

        catch(Exception e) {

            e.printStackTrace();

           

        }

    }

}

 

 

(4)RegisterServlet.java

package login_;

 

import java.io.IOException;

import java.sql.Connection;

 

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("/RegisterServlet")

public class RegisterServlet extends HttpServlet{

 

    @Override

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        this.doPost(req, resp);

    }

 

    @Override

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

   

 

        /**

       * 接收前台传来的值 账号和密码

       */

        String userName=req.getParameter("userName");

 

        String password=req.getParameter("password");

 

        DBUtil db= new DBUtil();

        user user=new user(userName,password);

        DAO dao=new DAO();

        try {

            //数据库链接

            Connection con=db.getCon();

 

            if(dao.register(con,user)) {

                resp.sendRedirect("login.jsp");

            }else {

                resp.sendRedirect("register.jsp");

            }

 

        } catch (Exception e) {

            e.printStackTrace();

}

    }

}

 

 

(5)user.java

package login_;

 

publicclass user {

    private String userName;

    private String password;

   

    public user() {}

   

    public user(String userName,String password) {

        this.userName=userName;

        this.password=password;

    }

   

    public String getUserName() {

        returnuserName;

    }

    publicvoid setUserName(String userName) {

        this.userName=userName;

    }

    public String getPassword() {

        returnpassword;

    }

    publicvoid setPassword(String password) {

        this.password=password;

    }

}

 

 

(6login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>登录界面</title>

</head>

<body>

    <form action="LoginServlet" method="post">

    <h3>登录界面</h3>

        账号:<input type="text" name='userName'/><br/>

        密码:<input type="password" name='password'/><br/>

        <input type="submit" value="登录"/>

    </form>

</body>

</html>

 

 

 

(7)register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>会员注册</title>

</head>

<body>

    <form action="RegisterServlet" method="post">

        账号:<input type="text" name='userName'/><br/>

        密码:<input type="password" name='password'/><br/>

        <input type="submit" value="注册"/>

    </form>

</body>

</html>

 

实验截图:

2.画出重构后的类图。

猜你喜欢

转载自www.cnblogs.com/cuijunfeng/p/13207668.html