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

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

时间:2024-10-23 19:00:29浏览次数:6  
标签:java String sql System 面向对象 程序设计 UML public out

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

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

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

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

 

[实验任务一]:UML复习

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

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

  • 继承(Inheritance):表示一个类(子类)继承另一个类(父类)的属性和方法。 
  •  

 · 关联(Association):表示两个类之间有某种关系。

 

 

 · 聚合(Aggregation):表示整体与部分的关系,部分可以独立于整体存在。

 

 

 · 组合(Composition):表示一种强关系,部分不能独立于整体存在。

 

 

 

  • ·依赖(Dependency):表示一个类使用另一个类,但不持有其生命周期。 

 

 

 

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

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

 

1.MainClass.java

 public class MainClass {

    private LoginForm loginForm;

    private UserDAO userDAO;

 

    public void main(String[] args) {

        init();

        display();

    }

 

    public void init() {

        loginForm = new LoginForm();

        userDAO = new UserDAO();

    }

 

    public void display() {

        loginForm.show();

    }

}

2.LoginForm.java

import java.util.Scanner;

 

public class LoginForm {

    private UserDAO userDAO;

 

    public LoginForm() {

        userDAO = new UserDAO(); // 初始化UserDAO

    }

 

    public void show() {

        System.out.println("欢迎登录系统");

        handleLogin(); // 调用登录处理方法

    }

 

    public void handleLogin() {

        Scanner scanner = new Scanner(System.in);

        

        System.out.print("请输入用户名: ");

        String userName = scanner.nextLine();

        

        System.out.print("请输入密码: ");

        String userPassword = scanner.nextLine();

        

        // 处理登录逻辑

        boolean isValid = userDAO.findUser(userName, userPassword);

        

        // 根据验证结果进行相应的操作

        if (isValid) {

            System.out.println("登录成功!");

        } else {

            System.out.println("用户名或密码错误,请重试。");

        }

        

        scanner.close();

    }

}

3.UserDAO.java

import

java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

public class UserDAO {

    private DBUtil dbUtil;

 

    public UserDAO() {

        dbUtil = new DBUtil();

    }

 

    public boolean findUser(String userName, String userPassword) {

        String sql = "SELECT password FROM users WHERE username = ?";

        try (Connection conn = dbUtil.getConnection();

             PreparedStatement pstmt = conn.prepareStatement(sql)) {

            pstmt.setString(1, userName);

            ResultSet rs = pstmt.executeQuery();

 

            if (rs.next()) {

                String storedPassword = rs.getString("password");

                return userPassword.equals(storedPassword);              }

        } catch (SQLException e) {

            e.printStackTrace();

            System.out.println("查询用户失败,数据库错误。");

        }

        return false; // 用户不存在或密码不正确

    }

 

    public void addUser(User user) {

        String sql = "INSERT INTO users (username, password) VALUES (?, ?)";

        try (Connection conn = dbUtil.getConnection();

             PreparedStatement pstmt = conn.prepareStatement(sql)) {

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

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

            pstmt.executeUpdate();

            System.out.println("用户注册成功!");

        } catch (SQLException e) {

            e.printStackTrace();

            System.out.println("注册失败,用户名可能已被占用。");

        }

    }

 

    public void deleteUser(String userName) {

        String sql = "DELETE FROM users WHERE username = ?";

        try (Connection conn = dbUtil.getConnection();

             PreparedStatement pstmt = conn.prepareStatement(sql)) {

            pstmt.setString(1, userName);

            pstmt.executeUpdate();

            System.out.println("用户删除成功!");

        } catch (SQLException e) {

            e.printStackTrace();

            System.out.println("删除用户失败,数据库错误。");

        }

    }

}

 

4.DBUtil.java

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

 

public class DBUtil {

    private String url = "jdbc:mysql://localhost:3306/aixin"; // 数据库URL

    private String username = "root"; // 数据库用户名

    private String password = "123456"; // 数据库密码

 

    public Connection getConnection() {

        Connection connection = null;

        try {

            // 注册JDBC驱动

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

            // 获取数据库连接

            connection = DriverManager.getConnection(url, username, password);

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

            System.out.println("数据库驱动加载失败。");

        } catch (SQLException e) {

            e.printStackTrace();

            System.out.println("获取数据库连接失败。");

        }

        return connection; // 返回连接

    }

}

6.用户表

CREATE TABLE users (

    id INT PRIMARY KEY AUTO_INCREMENT,

    username VARCHAR(50) NOT NULL UNIQUE,

    password VARCHAR(255) NOT NULL

);

 

 实验要求:

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

2.注意编程规范。

 

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

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

 

 

重构后的类图:

 

 

 

源代码:

1.Pen.java

public class Pen {

    private Color color;

    private Size size;

 

    public Pen(Color color, Size size) {

        this.color = color;

        this.size = size;

    }

 

    public void draw() {

        System.out.println("Drawing with a " + size + " " + color + " pen.");

    }

}

2.Color.java

public enum Color {

    RED,

    GREEN,

    BLUE,

    YELLOW;

}

3.Size.java

public enum Size {

    SMALL,

    MEDIUM,

    BIG;

}

 

实验要求:

1.提交源代码;

2.画出重构后的类图。

 

标签:java,String,sql,System,面向对象,程序设计,UML,public,out
From: https://www.cnblogs.com/aixin52129211/p/18498086

相关文章

  • 第四章 面向对象(2)
    一.this关键字this关键字代表当前对象(哪一个对象在访问,this就表示哪个)使用this关键字引用成员变量使用this关键字引用成员方法或构造方法。在一个类的方法或构造方法内部,可以使用“this.成员变量名”这样的格式来引用成员变量名,常常用来区分同名的成员变量和局部变量。......
  • UML之用例图详解
    ~犬......
  • 循环结构程序设计之习题
    输入两个正整数m和n,求其最大公约数和最小公倍数//输入两个正整数m和n,求其最大公约数和最小公倍数#include<stdio.h>intmain(void){ intm,n,iMax,iMin,iGcd; scanf("%d%d",&m,&n); if(m>n) { iMax=m; iMin=n; } else { iMax=n; ......
  • 画图神器之争:PlantUML和Mermaid那个更适合你?
    PlantUML和Mermaid都是流行的工具,用于通过文本描述快速创建图表,特别是UML图。尽管它们的目标相似,但在一些方面存在差异:语法和易用性:PlantUML:使用一种类似于编程语言的语法,对于程序员来说可能更容易上手。它提供了丰富的语法来创建多种类型的UML图。Mermaid:它的语法更加简洁和近......
  • 面向对象(下):继承
    继承是面向对象(下)的第一节内容,也是后面整个面向对象(下)的学习基础,务必掌握扎实,对后面的学习会很有帮助。大二初学,欢迎各位大佬批评指正、不胜感激!继承:对共性进行抽取,达到代码的复用。父类→共性,子类→个性。 句式:public(修饰符)class 子类 extends 父类 先上一张面向对象......
  • 【JAVA】第二张_面向对象
    引言Java面向对象是一种编程方法论,它将软件系统看作是一组对象的集合,每个对象都有自己的状态和行为,并且能够相互之间进行通信和协作。java面向对象知识的思维导图1、面向对象思想面向对象(Object-Oriented)是一种编程思想和方法论,它的核心理念是将问题拆解成由对象组成的模......
  • Springboot计算机毕业设计程序设计竞赛团队管理系统72262
    Springboot计算机毕业设计程本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能:团队信息,用户,团队风采,团队成员,团队项目,项目反馈,团队任务开题报告内容一、研究背景与意义随着信息技术的飞速发展......
  • 计算机课程程序设计经验分享
    作为一名全栈工程师,这些年来我积累了许多关于Linux、Python、Java、PHP等技术的项目经验,同时也经常为大学生完成作业和项目提供帮助。陆陆续续指导了近百位学弟学妹课程,这段经历让我深入了解了如何将复杂的编程问题拆解成易于理解的步骤,并最终实现高效、可扩展的解决方案。因此,我......
  • C++程序设计基础实验1
    任务一:源代码task1.cpp#include<iostream>#include<string>#include<vector>#include<algorithm>usingnamespacestd;//声明//模板函数声明template<typenameT>voidoutput(constT&c);//普通函数声明voidtest1();voidtest2();void......
  • 初始面向对象(上)
    大二学生,初始面向对象上,刚开始感觉颇有难度,不过经过反复思考和写代码后,难度也就相应降下来了。个人认为学java很重要一点就是要针对每个模块的知识做思维导图,这样各个知识点的联系就一清二楚了,这样写代码的时候才能写得更快。初学java,做的思维导图还有待完善。如果有的地方有错......