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

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

Tutorial 1_UML与面向对象程序设计基本原则软件设计                  石家庄铁道大学信息学院

 

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

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

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

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

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

 

[实验任务一]:UML复习

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

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

1、依赖关系(Dependency)

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

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

2、关联关系(Association)

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

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

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

3、聚合(Aggregation)

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

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

4、组合(Composite)

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

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

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

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

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

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

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

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

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

实验要求:

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

2.注意编程规范。

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

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

实验要求:

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;

    }

}

 

 

(6)login.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>

 

实验截图:

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

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

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

2.画出重构后的类图。

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

Tutorial 1_UML与面向对象程序设计基本原则软件设计                  石家庄铁道大学信息学院

 

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

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

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

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

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

 

[实验任务一]:UML复习

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

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

1、依赖关系(Dependency)

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

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

2、关联关系(Association)

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

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

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

3、聚合(Aggregation)

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

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

4、组合(Composite)

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

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

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

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

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

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

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

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

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

实验要求:

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

2.注意编程规范。

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

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

实验要求:

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;

    }

}

 

 

(6)login.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>

 

实验截图:

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

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

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

2.画出重构后的类图。

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

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

Tutorial 1_UML与面向对象程序设计基本原则软件设计                  石家庄铁道大学信息学院

 

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

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

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

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

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


[实验任务一]:UML复习

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

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

1、依赖关系(Dependency)

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

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

2、关联关系(Association)

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

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

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

3、聚合(Aggregation)

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

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

4、组合(Composite)

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

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

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

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

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

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

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

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

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

实验要求:

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

2.注意编程规范。

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

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

实验要求:

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;

    }

}

 

 

(6)login.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>

 

实验截图:

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

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

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

2.画出重构后的类图。

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

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

Tutorial 1_UML与面向对象程序设计基本原则软件设计                  石家庄铁道大学信息学院

 

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

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

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

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

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

 

[实验任务一]:UML复习

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

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

1、依赖关系(Dependency)

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

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

2、关联关系(Association)

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

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

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

3、聚合(Aggregation)

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

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

4、组合(Composite)

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

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

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

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

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

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

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

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

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

实验要求:

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

2.注意编程规范。

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

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

实验要求:

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;

    }

}

 

 

(6)login.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>

 

实验截图:

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

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

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

2.画出重构后的类图。

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

 道大学信息学院

 

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

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

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

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

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

 

[实验任务一]:UML复习

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

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

1、依赖关系(Dependency)

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

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

2、关联关系(Association)

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

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

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

3、聚合(Aggregation)

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

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

4、组合(Composite)

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

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

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

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

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

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

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

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

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

实验要求:

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

2.注意编程规范。

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

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

实验要求:

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;

    }

}

 

 

(6)login.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>

 

实验截图:

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

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

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

2.画出重构后的类图。

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

 

上一篇:python tutorial


下一篇:scrapy爬取快代理并保存mongo数据库