Luckyxyz
首页
归档
关于
友链
切换模式
返回顶部
首页
技术实践
书斋絮语
说点儿什么
Luckyxyz
首页
技术实践
书斋絮语
说点儿什么
首页
归档
关于
友链
【软考】E-R 图关系模式的转换、数据库的控制功能 事务管理、面向过程和面向对象、类、对象、消息、方法重载、封装
技术实践
·
7 天前
Luckyxyz
# 数据库 逻辑结构设计 E-R 图关系模式的转换: 实体向关系模式的转换 ## 联系向关系模式的转换: 方式一:(一般不用)  方式二:将联系归并到关联的两个实体的任一方,给待归并的一方实体属性集中增加另一方实体的码和该联系的属性。归并后的实体码保持不变 要归并厂长这个实体,所以要给厂长这个实体增加另一方实体的码,还有联系的属性 厂长(姓名,性别,年龄,厂号,任期) 工厂(厂号,厂名,地点)  ## 一对多联系的转换: 方式一:不常用,将联系转换成一个独立的关系模式。关系模式的属性取该联系所关联的两个实体的码及联系的属性,关系的码是多方实体的码  方式二:将联系归并到关联的两个实体的 **多方**,给待归并的多方实体属性集中增加一方实体的码 和 该联系的属性即可,归并后的多方实体码保持不变  ## 多对多联系的转换 多对多智能转换成一个独立的关系模式,关系模式的名称取联系的名称, 关系模式的属性取 该联系所关联的两个多方实体的码及联系的属性,关系的码是多方实体的码构成的属性组  --- # 数据库的控制功能 事务管理  --- # 面向过程和面向对象 举例:把大象装进冰箱需要几步? 1、打开冰箱 2、把大象装进冰箱 3、关上冰箱 面向过程; 关心的是,我该怎么做? 一步步去实现这个功能 1、我 打开冰箱 2、我 把大象装进冰箱 3、我 关上冰箱 面向对象: 关心的是,我该让谁(对象)去做? 去调用对象的操作,来实现这个功能。 万物皆对象。对象在做这件事情 对象:冰箱、大象 冰箱打开门 大象钻进冰箱 冰箱关上门 --- # 面向对象的基本概念 面向对象 = 对象(Object)+ 分类(类,Classification)+ 继承(Inheritance)+ 通过消息的通信 --- # 类 一个类定义了一组大体上相似的对象,一个类所包含的 方法 和 数据 描述一组对象的共同行为和属性。 把一组对象的 共同特征 加以抽象 并存储在一个类中,是面向对象技术最重要的一点。 类 是在对象之上的抽象,对象 是 类 的具体化,是 类 的 实例(Instance) 类 分为三种: - 实体类: - 实体类的对象表示显示世界中真实的实体,比如,人、物 等 - 实体类 是 应用领域中的核心类,一般用于保存系统中的信息,以及 提供针对这些信息的相关处理行为 - 接口类(边界类) - 接口类(边界类)的对象为 用户提供一种与系统合作 **交互** 的方式,分为 人 和 系统 两大类 - 人的接口:可以是显示屏、窗口、Web 窗体、对话框、菜单、列表框、其他显示控制、条形码、二维码 或者 用户与系统交互的其他方法 - 系统的接口:涉及到吧数据发送达到其他系统,或者从其他系统接受数据 - 控制类: - 用来控制活动流,充当 **协调者** 有些类之间存在:一般(父类)和特殊(子类)关系 - 某个类 是 一些类 的一般情况,这是一种 is-a 关系。 - 特殊类是一种一般类,比如,“汽车” 类、“轮船” 类、“飞机” 类,都是一种 “交通工具”类。特殊类是一般类的子类 - 一般类是父类,特殊类是子类 --- # 对象 对象 是 基本的运行时的实体,包括: - 数据、属性(状态、成员变量) - 作用于数据的操作(行为、方法、函数、成员函数) 一个对象通常可由: - 对象 - 属性 - 方法 创建一个对象(java): ```java 类名 对象名 = new 类名(); ``` 调用属性、方法: ```java 对象名.属性(成员变量、成员方法); ``` --- # 消息 对象之间进行通信的一种构造。 当一个消息发送给某个对象时,包含要求接收对象去执行某些活动的信息  对象.动作(外界消息) 给 m1 这个对象,发送 ChangeLevel 这个方法(消息),外界信息,可能包含某种参数:2 不用管接收对象有什么响应  共享行为和属性,但是具体的属性值一不一样就不一定了  状态就是属性,属性比如姓名年龄等是静态的,他们的值是动态的。 所以对象的状态标识了该对象的所有属性 --- # 方法重载  ```java public void sum(int a, int b) { System.out.println(a + b); } //第一种方法重载的方式:方法名相同、参数个数不同 public void sum(int a, int b, int c) { System.out.println(a + b + c); } //第二种方法重载的方式:方法名相同、参数类型不同 public void sum(int a, double b) { System.out.println(a + b); } public void sum(int a, float b) { System.out.println(a + b); } // 用第三种方法重载的方式:方法名相同、参数类型顺序不同 public void sum(float b, int a) { System.out.println(a + b); } public static void main(String[] args) { Test t = new Test(); t.sum(b:3.14f, a:1); // 有 f 单精度 t.sum(a:1, b:3.24f); t.sum(a:2, b:3.34); t.sum(a:4, b:5, c:6); } ``` --- #封装 一个对象把属性和行为封装为一个整体。 封装是一种信息隐蔽技术。 例子: 电视机(对象)把 边框(属性)、屏幕(属性)、开关机(属性)、增大音量(行为)封装成一个整体(都在一个电视机里)。把这些信息(属性和行为)就都隐蔽了,封装后会提供一个简单的操作入口(遥控器) 把复杂的一面隐藏起来,把简单的一面给你。 封装的目的是使对象的使用者和生产者分离,使对象的定义和实现分开。 生产者:电视厂商、使用者:你。 从程序设计者来看:对象是一个程序模块;从厂商来看,电视机就是一个程序模块,把这个模块实现相应的功能 从用户来看:对象为他们提供了所希望的行为。从用户来看,就看电视、开关机、看新闻联播。 在对象内的操作通常称为方法 ```java public class Person{ public String name; // 公有属性 public int age; // 公有属性 // 但是这样的属性还是直接暴露在外面 //行为:吃饭 public void eat(){ System.out.println("吃饭"); } //行为:跑步 public void rum(){ System.out.println("跑步"); } //行为:睡觉 public void sleep(){ System.out.println("睡觉"); } } // 把 类 实例化: public class Main{ public sratic void main(String[] args){ Person zst = new Person(); zst.name = "张三"; // 可以直接赋值 zst.age = "20"; //但是这样直接赋值可能会造成意外的修改,所以需要封装 //访问属性和方法: zst.eat(); //不需要知道方法里面有什么,调用方法名就好 zst.rum(); zst.sleep();//这些已经是封装过了 } } ``` Private String name; Private int age; ```java public class Person{ private String name; private int age; // 把公有的修饰符改为私有的 // 改为 私有的之后,只能在当前的这个类中访问了,比如跑步、睡觉等中加一下谁在睡觉 谁在跑步等 // 但是只能在这个类中访问的话,就没办法获取和修改其属性值了,所以就需要 set、get 方法 //set 方法: public void setName(String name){ // 提供这个接口肯定是一个公有的接口, // 设置一个属性,所以返回值肯定是空的, // 设置属性,属性的第一个字母要大写, // 需要参数,因为要接收用户的修改。 // 参数的类型和参数名和属性一样 this.name = name; // 谁调用这个接口(方法)谁就是当前对象 // 对象的属性 等于 形参的名字 // 但如果是 name = name 就是分配给自己,没有把值赋值过去,因为就近原则,形参的 name 和成员变量的 name 是一样的。 // 所以会在赋值号的左边加一个 this,当前对象的意思。 // 所以就可以通过对象名.属性,就可以把对象的属性赋值成右边的形参了,也就是把右边的形参赋值给左边的属性 } public void setAge(int age){ if(age >= 0 && age <= 150) // 也可以做一些判断,满足条件可以赋值 this.age = age; } // get 方法: public String getName(){ // get 获取,需要有返回值。那么就要跟姓名的类型是一样的 // 返回属性就可以了,没有形参 return name; } public int getAge(){ return age; } //行为:吃饭 public void eat(){ System.out.println(name + " " + age + "吃饭"); } //行为:跑步 public void rum(){ System.out.println(name + " " + age + "跑步"); } //行为:睡觉 public void sleep(){ System.out.println(name + " " + age + "睡觉"); } } // 把 类 实例化: public class Main{ public sratic void main(String[] args){ Person zst = new Person(); // zst.name = "张三"; // zst.age = "20"; //从上面的 public 改为 private 后,如果直接修改会报错,因为已经访问不到这两个属性了 zst.setName("张三"); //zst 调用 setName 这个方法 //zst.name = "张三"; zst.setAge(20); //访问属性和方法: zst.eat(); //不需要知道方法里面有什么,调用方法名就好 zst.rum(); zst.sleep();//这些已经是封装过了 } } ``` 这样 上面的运行结果: 
软考
取消回复
提交评论
Luckyxyz
我们谈论生活,讨论技术,借由文字,抵达心灵。
热门文章
Obsidian 迁移全记录(又名:纯小白的闭坑指南)
【Kubernetes】第一个实例 - Java Web 应用
新年新气象,关于年终总结,关于未来展望
使用宝塔面板对网站、数据库等进行定时备份到腾讯云 COS 对象存储
2025 年
在细雨中呼喊,在困顿中挣扎
Ubuntu 22.04 server 安装教程
最新评论
山佳Ellen: 有独到的见地,有个性的思想,精彩!
t: 2026 扬帆起航, 喜迎新年,万象更新, 时间旅行,人间探索,...
tls: 赞一个
lovingchina: 我也准备从Joplin迁移到Obsidian,刚好参考你这一篇哈...
tl.s: 很棒的一本书,可以解答很多人们关于人工智能的疑惑。或许未来怎样谁...
tl.s: 很实用 🦆🦆
tl.s: 绘图很清晰,图示质量很高
热门标签
软考
Kubernetes
读书笔记
Linux
Ubuntu
生活随笔
生活
2025
Python3
Debian
Ansible
空间智能
openFuyao
技术实践
在细雨中呼喊
粤ICP备2024349207号