首页 > 编程语言 >实验1:UML与面向对象程序设计原则

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

时间:2023-11-24 21:11:29浏览次数:38  
标签:frame new class 面向对象 static void 程序设计 UML public

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

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

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

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

 

[实验任务一]:UML复习

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

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

1. 关联关系

表示一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法。子类可以继承父类的特征,同时可以添加新的特征或修改继承的特征。

LoginForm登陆界面中的注册按钮JButton

 

 

其它关联关系

(1) 双向关联,例如:顾客Customer与购买的商品之间的关联

 

 

(2) 单向关联,例如顾客类Customer与其地址Address的关联

 

 

(3) 自关联:与对象本身形成关联关系

 

 

(4) 多重性关联,例如,一个表单可以包含多个按钮

 

 

(5) 聚合关系,整体与部分的关系(部分可以脱离整体而存在)

 

 

(6) 组合关系,整体与部分的关系(共同生死)

 

 

2. 依赖关系(接口以及其实现)

表示一个类在某种程度上依赖另一个类,通常表现为一个类使用了另一个类的某些成员(如方法或属性)。

 

 

3. 泛化关系(继承)

示一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法。

 

 

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

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

 

 

实验要求:

1. 源代码和对应的数据库文件

(1)DBUtil

package com.hua.main;

 

import java.sql.*;

import java.sql.SQLException;

 

public class DBUtil {

    //返回数据库连接对象

    public static  Connection getConnection() throws SQLException {

        String url="jdbc:mysql://localhost:3306/wjm";

        String user="root";

        String password="sqlsql";

        try {

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

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        }

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

        return conn;

    }

}

(2) UserDAO

package com.hua.main;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class UserDAO {

    public static boolean findUser(String userName,String userpassword)

    {

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

        Connection connect = null;

        try {

            connect = DBUtil.getConnection();

        } catch (SQLException e) {

            e.printStackTrace();

        }

        Statement statement;

        try {

            statement = connect.createStatement();

            ResultSet result = statement.executeQuery(sql);

            if(result.next())

            {

                return true;

            }

            else

            {

                return false;

            }

        }

        catch (SQLException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        return false;

 

    }

}

(3) UserDAO

package com.hua.main;

 

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.*;

 

@SuppressWarnings("serial")

 

public class LoginForm extends JFrame implements ActionListener{

    public static JTextField te1;

    public static JLabel L1;

    public static JPasswordField te2;

    public static JLabel L2;

    public static JButton B1;

    public static JFrame frame;

    UserDAO userdao=new UserDAO();

    public void init( )

 

    {

        frame=new JFrame();

        //点击关闭按钮的操作

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

        te1=new JTextField(25);

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

        te2=new JPasswordField(25);

        B1=new JButton("登陆");

        B1.addActionListener((ActionListener) this);

    }

 

    public void display( )

    {

        frame.setSize(300,300);

        frame.setLayout(new FlowLayout());

        frame.setTitle("登陆界面");

        frame.add(L1);

        frame.add(te1);

        frame.add(L2);

        frame.add(te2);

        frame.add(B1);

        frame.setVisible(true);

    }

 

    @SuppressWarnings("static-access")

    public void actionPerformed(ActionEvent e) {

        String username=te1.getText();

        String password=String.valueOf(te2.getPassword());

        JDialog frame1 = new JDialog();//构造一个新的JFrame,作为新窗口。

        frame1.setBounds(// 让新窗口与SwingTest窗口示例错开50像素。

                new Rectangle(

                        (int) frame.getBounds().getX() + 50,

                        (int) frame.getBounds().getY() + 50,

                        (int) frame.getBounds().getWidth(),

                        (int) frame.getBounds().getHeight()

                )

        );

        JLabel jl = new JLabel();// 注意类名别写错了。

        frame1.getContentPane().add(jl);

        if(userdao.findUser(username, password))

        {

            jl.setText("登陆成功");

            jl.setVerticalAlignment(JLabel.CENTER);

            jl.setHorizontalAlignment(JLabel.CENTER);

            frame1.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);

            frame1.setVisible(true);

        }

        else

        {

            jl.setText("登陆失败");

            jl.setVerticalAlignment(JLabel.CENTER);

            jl.setHorizontalAlignment(JLabel.CENTER);

            frame1.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);

            frame1.setVisible(true);

        }

    }

}

 

 

 

 

(4) UserDAO

package com.hua.main;

 

public class MainClass {

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        LoginForm loginform=new LoginForm( );

        loginform.init();

        loginform.display();

    }

}

数据库文件:

 

SET NAMES utf8mb4;

SET FOREIGN_KEY_CHECKS = 0;

 

-- ----------------------------

-- Table structure for user_table

-- ----------------------------

DROP TABLE IF EXISTS `user_table`;

CREATE TABLE `user_table`  (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

  `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

  PRIMARY KEY (`id`) USING BTREE

) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

 

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

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

实验要求:

 

 

1. 源代码

//型号抽象类

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 class GreenPen extends Color{

    public void colorPen() {

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

    }

}

public class RedPen 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());

    }

}

 

 

2.重构后的类图

 

 

标签:frame,new,class,面向对象,static,void,程序设计,UML,public
From: https://www.cnblogs.com/130-gzh/p/17854772.html

相关文章

  • 2023-2024-1 20231320 《计算机基础与程序设计》第九周学习总结
    2023-2024-120231320《计算机基础与程序设计》第九周学习总结作业信息这个作业属于哪个课程<班级的链接>(2023-2024-1计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2022-2023-1计算机基础与程序设计第九周作业)这个作业的目标<自学《计算机基础与......
  • 面向对象基础,定义类和对象(构造函数)
    类和对象的定义类:就是具有相同属性和功能的一类事物--抽象对象:就是类的具体表现形式--具体表现类的语法class类名:属性(类中定义的变量)方法(类中定义的函数)class:类的关键字类名:首字母大写,其他部分遵循驼峰命名原则属性:符合标识符命名规则方法:函数,见名知意,符合标识符命名规则......
  • Java开发者的Python快速进修指南:面向对象基础
    当我深入学习了面向对象编程之后,我首先感受到的是代码编写的自由度大幅提升。不同于Java中严格的结构和约束,Python在面向对象的实现中展现出更加灵活和自由的特性。它使用了一些独特的关键字,如self和cls,这些不仅增强了代码的可读性,还提供了对类和实例的明确引用。正如Java,Python也......
  • #2023-2024-1 20231308 《计算机基础与程序设计》第九周学习总结
    2023-2024-120231308《计算机基础与程序设计》第九周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第九周作业这个作业的目标计算机科学概论第10,11章《C语言程序设计》第8章并完成......
  • 2023-2024-1 20231329《计算机基础与程序设计》第9周学习总结
    作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK09这个作业的目标计算机科学概论第10,11章并完成云班课测试《C语言程序设计》第8章并完成云班课测试......
  • 2023-2024 20231313《计算机基础与程序设计》第九周学习总结
    2023-202420231313《计算机基础与程序设计》第九周学习总结作业速达作业课程班级链接作业要求计算机基础与程序设计第九周学习总结作业内容计算机科学概论第10,11章《C语言程序设计》第8章并完成云班课测试,操作系统责任、内存与进程管理、分时系统、CPU调度、......
  • 学期(2023-2024-1) 学号(20231414) 《计算机基础与程序设计》第九周学习总结
    学期(2023-2024-1)学号(20231414)《计算机基础与程序设计》第九周学习总结作业信息这个作业属于哪个课程<班级的链接>(2023-2024-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2023-2024-1计算机基础与程序设计第九周作业)这个作业的目标<写上具体方面......
  • 面向对象04:类与对象的创建
     ......
  • 前端学习-JavaScript学习-JavaScript高级程序设计-第3章笔记
    第3章基础概念数据类型Number<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"......
  • 面向对象03:回顾方法的调用
    一.静态与非静态初识:1.为什么会有静态和非静态?解释:Java中的静态和非静态是指成员变量和成员方法的修饰符,Java中有静态和非静态,是为了满足不同的编程需求。2.静态和非静态的定义:静态:(有static)静态变量和方法是属于类的,而不属于类的实例或对象。它们可以通过类名直接访问,不需要创建......