24.11.14

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

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

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

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


[实验任务一]:UML复习

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

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

1.  关联关系

 

 

一个老师可以有多个学生,一个学生可以有多个老师

2.  聚合关系

 

 

学校包含老师,学校倒闭了,老师依然存在

 

3.  组合关系

 

 

两者不可单独存在

4.  依赖关系

 

 

司机驾驶汽车

5.  泛化关系

 

 

6.  实现关系

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

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

实验要求:

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

2.注意编程规范。

 

1.  MainClass.java

 

package org.example;

 

public class MainClass {

 

    public static void main(String[] args) {

        LoginForm loginForm=new LoginForm() ;

        loginForm.display();

    }

}

 

2.  DBUtil.java

 

public class DBUtil {

 

public static String url =

"jdbc:mysql://localhost:3306/sheji;

    public static String user = "root";

    public static String password = "123456";

 

    public static Connection getConnection() {

        Connection conn = null;

 

        try {

            Class.forName("com.mysql.cj.jdbc.Driver");

            conn = DriverManager.getConnection(url, user, password);

        } catch (Exception e) {

            e.printStackTrace();

        }

 

        return conn;

    }

 

    public static void close(ResultSet rs, Statement state, Connection conn) {

        if (rs != null) {

            try {

                rs.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

 

        if (state != null) {

            try {

                state.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

 

        if (conn != null) {

            try {

                conn.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

    }

}

 

3.User.sql

CREATE TABLE `user`  (

  `userName` varchar(255) ,

  `userPassword` varchar(255)

);

insert into user (userName, userPassword) values ('gyg','123456');

 

 

 

4.UserDao.java

public class UserDao {

    String myPassword = null;

    Statement state = null;

    ResultSet rs = null;

Connection conn = DBUtil.getConnection();

        public boolean findUser(String username, String password) {

        String sql = "select * from user where userName ='" + username + "'";

        int flag = 0;

        try {

            state = conn.createStatement();

            rs = state.executeQuery(sql);

            while (rs.next()) {

                flag++;

                myPassword = rs.getString("userPassword");

            }

            if (flag == 0) {

                return false;

            }

            if (!password.equals(myPassword)) {

                return false;

            }

        } catch (SQLException e) {

            e.printStackTrace();

        } finally {

            DBUtil.close(rs, state, conn);

        }

        return true;

    }

}

 

5.LoginForm.java

public class LoginForm extends JFrame {

 

    private UserDao dao = new UserDao();

 

    private JButton jb = new JButton("登录");

    private JButton button = new JButton("重置");

    private JTextField username = new JTextField();

    private JPasswordField password = new JPasswordField();

 

    JLabel user_name = new JLabel("账号:");

    JLabel pass_word = new JLabel("密码:");

 

    public void init() {

        user_name.setBounds(50, 70, 300, 25);

        pass_word.setBounds(50, 130, 200, 25);

        username.setBounds(110, 70, 300, 25);

        password.setBounds(110, 130, 300, 25);

        button.setBounds(315, 225, 90, 20);

        jb.setBounds(95, 225, 90, 20);

        user_name.setOpaque(false);

        pass_word.setOpaque(false);

        jb.addActionListener(new ActionListener() {

            @SuppressWarnings("deprecation")

            public void actionPerformed(ActionEvent arg0) {

                validate(username.getText().trim(), password.getText().trim());

            }

        });

 

 

        button.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent arg0) {

                username.setText("");

                password.setText("");

            }

        });

 

    }

 

    public void display() {

        JFrame f = new JFrame();

        f.setTitle("登录页面");

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        f.setResizable(false);

        f.setLocationRelativeTo(null);

        f.setSize(500, 300);

        init();

        Container contentPanel = new Container();

        contentPanel.setLayout(null);

        contentPanel.add(user_name);

        contentPanel.add(pass_word);

        contentPanel.add(username);

        contentPanel.add(password);

        contentPanel.add(jb);

        contentPanel.add(button);

        f.add(contentPanel);

        //展示窗口

        f.setVisible(true);

    }

 

 

    public void validate(String username, String password) {

 

        if (username.trim().length() == 0 || password.trim().length() == 0) {

            JOptionPane.showMessageDialog(null, "用户名,密码不允许为空");

 

            return;

        }

 

        if (dao.findUser(username, password)) {

 

            JOptionPane.showMessageDialog(null, "登录成功!");

 

 

        } else {

            JOptionPane.showMessageDialog(null, "用户名或密码错误");

 

        }

 

    }

 

 

 

 

 

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

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

实验要求:

1.  提交源代码;

2.画出重构后的类图。

 

型号抽象类

public abstract class Size {

    public abstract void sizePen();

}

具体型号类

 

public class SmallPen extends Size{

    //小型

    public void sizePen() {

        System.out.println("小型");

    }

}

public class MiddlePen extends Size{

    //中型

    public void sizePen() {

        System.out.println("中型");

    }

}

public class BigPen extends Size{

    //大型

    public void sizePen() {

        System.out.println("大型");

    }

}

颜色抽象类

 

public abstract class Color {

    public abstract void colorPen();

}

具体颜色类

 

public class GreenPen extends Color{

    public void colorPen() {

        System.out.println("绿色");

    }

}

public class RedPen extends Color{

 

public void colorPen() {

 

        System.out.println("红色");

 

        }

 

        }

 

public class BluePen extends Color{

 

public void colorPen() {

 

        System.out.println("蓝色");

 

        }

 

        }

 

钢笔

 

public class Pen {

    //钢笔

    private Size size;

    private Color color;

    public Size getSize() {

        return size;

    }

    public void setSize(Size size) {

        this.size = size;

    }

    public Color getColor() {

        return color;

    }

    public void setColor(Color color) {

        this.color = color;

    }

}

聚合钢笔

 

public class MianClass {

    public static void main(String[] args) {

//颜色大小随意组合

        Pen pen=new Pen();

//组合小型红色钢笔

        pen.setSize(new SmallPen());

        pen.setColor(new RedPen());

//组合大型绿色钢笔

        pen.setSize(new BigPen());

        pen.setColor(new GreenPen());

    }

}

posted on 2024-11-14 15:25  Daniel350  阅读(14)  评论(0)    收藏  举报