如何以面向对象的思想设计存在关联的实体类?

针对前两天在本人公司引起同事激烈讨论的话题(如何以面向对象的思想设计存在关联的实体类),我设想了一个虚拟的应用场景,通过翻阅各种资料、请教各位同事以及结合我自己的一些经验,进行了简单的设计。这种设计是我自认为合理,并极力鼓吹加以应用的一种设计方法。欢迎各位高人猛烈抨击,不吝指教,指出设计缺陷,以求大家共同进步!

 

补充:

针对各位网友的评论,我把我当时遇到的问题也贴出来,让大家来议论一下,怎么做才是真正的面向对象。

我的问题疑问点:当两个实体类是“has”关系时,该如何设计这两个类?

1、班级类中有List<学生类>属性,学生类中有班级类属性;

2、班级类中有List<学生类>属性,学生类中没有任何关于班级的属性;

3、两个类中都没有任何对方的属性,它们的关系体现在业务类中;

4、班级类中没有List<学生类>属性,学生类中有标明班级的唯一标示的、类型是基本类型的属性

以上是我们形成的四种不同的观点,那哪一种是面向对象的呢?

我个人认为

第1种会造成嵌套;

第2种把List<学生类>当成一个属性,是否会使这个类变的庞大?如果不是班级,而是仓库和仓库里上万种的物料呢。岂不是List里有上万笔记录,在不需要的时候,不占内存吗?

第3种看起来好像很符合面向对象,但在处理诸如已知一个学生,然后得到他对应的班级中的全部学生时有点麻烦;

第4中就是我现在想出来的方法,但大家都说这个不符合面向对象,那到底应该怎么做呢?

  

 以下就是我目前想出来的方案:

假设需求:设计一个学生管理系统,实现如果发现某班级中的一位同学犯错误,则全班同学每个人都扣除一个小红花;

1、  设计实体类;如图:

 

2、  映射数据表;

3、  设计客户端

a)         由需求得知这里需要一个公开的惩罚方法:Punish(blunderStudent : Student)

b)         由需求得知实现惩罚方法的算法:

                                       i.              通过某个学生得到该学生所在的班级:GetClass(classId : Integer) : Class

                                     ii.              通过班级得到该班的全部学生: GetStudentList(classId : Integer) : List<Student>

                                    iii.              循环所有学生,扣除每个人一个小红花:SubFlower(blunderStudent : Student)

    

4、  设计业务类

a)         业务中有两个方法需要学生业务类去实现:GetClass(classId : Integer) : ClassSubFlower(blunderStudent : Student)

 

b)         业务中有一个方法需要班级业务类去实现:GetStudentList(classId : Integer) : List<Student>

5、  设计持久层接口

a)         学生业务类中的GetClass(classId : Integer) : Class方法需要通过持久层获取对象;SubFlower(blunderStudent : Student)方法需要通过持久层保存对象;

 

b)         班级业务类中的GetStudentList(classId : Integer) : List<Student>方法需要通过持久层获取对象列

 

6、  设计持久层

a)         分别实现持久层接口

 

7、  通过ORM工具实现持久层与数据表的关联

8、  根据不同的部署环境,选择设计Web UIWinForm UI,或其他用户界面

 

         附:整个类图

 

各位网友,根据你们提的意见,我对此设计做了一些改动,请大家继续讨论,这样是否就更贴近于面向对象的设计。

惩罚学生功能设计第二版:

我做了以下改动:

1、将减少小红花的行为,重新放回到学生实体类中。依据是:“自己的事情自己做”

2、删除原来客户端业务类中的不必要的私有方法,变成了只封装“惩罚学生”的公共方法的业务类

3、原来的StundetnController和ClassController类其实是服务类,故变成一个统一的服务类,这个服务类本质是提供持久层操作服务的,故设计了根据班级ID查找学生队列,以及保存学生最新状况的方法,而这个服务类是依赖于IDao接口的。

4、设计持久层接口,提供根据自身ID查找子类列以及更新对象的泛型方法;

5、设计持久层泛型类,处理实体类的CURD操作;

以下是新的类图,欢迎继续拍砖!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
面向对象与UML 第一部分 软件开发活动 7 第一章 结构化的分析与设计 8 第一节 模型图 8 业务流程图 8 数据流图 11 功能结构图 12 功能树 13 网络结构图 14 程序流程图 15 第二节 需求分析 15 需求分析的任务 15 需求分析的步骤 15 需求分析的原则 16 需求分析的方法 16 第三节 概要设计 16 概要设计任务 17 概要设计过程 17 一些概念 17 概要设计原则 17 概要设计方法 17 第四节 详细设计 18 详细设计的任务 18 详细设计的原则 18 详细设计的表示方法 18 第二章 面向对象的分析与设计 18 第一节 面向对象方法概述 18 对象与面向对象 18 面向对象技术产生的原因 19 面向对象方法的基本思想 19 概念 19 面向对象技术的特点 19 面向对象语言及系统 19 第二节 面向对象的分析 20 OOA分析的任务 20 OOA分析的原则 20 OOA分析过程 20 第三节 面向对象设计 20 设计的模型 20 设计的三条重要原则 21 面向对象设计的概念 21 面向对象设计方法 21 第三章 UML概述 22 UML对软件工程的重大影响 22 UML的概念模型 22 UML的建模思想 23 第四章 用UML建模 24 第一节 建模概念 24 系统、模型和视图 24 概念和现象 25 数据类型、抽象数据类型和实例 25 类、抽象类和对象 26 事件类、事件和消息 27 面向对象的建模 27 证伪和原型化 28 第二节 UML的主要图形符号 28 用例图 28 类图 35 顺序图 40 状态图 42 活动图 44 图表组织 45 图表扩展 47 第五章 需求提出 47 第一节 需求提出概述 48 第二节 需求提出的概念 50 功能性需求--系统功能 50 功能的分类 50 非功能性需求和伪需求 51 系统属性 51 描述的层次 52 用例的分类 52 用例的层次:高层用例与扩展用例 53 主要、次要和可任选的用例 53 基本用例和真实用例 53 正确性、完整性、一致性、清晰性和现实性 54 可验证性和可追溯性 55 可跟踪性 55 greenfield工程、再工程、界面工程 56 第三节 需求提出活动 56 确定执行者 56 确定场景 57 确定用例 58 改进用例 60 确定执行者和用例之间的关系 60 确定最初的分析对象 62 确定非功能性需求 63 从用户得到信息的方法 64 第六章 需求分析概述 64 需求分析的概念 65 概念模型 65 实体对象,边界对象,控制对象 67 回顾关系重数 68 受限关系 69 归纳 69 第七章 需求分析活动:从用例到对象 70 第一节 识别概念 70 识别概念的策略一 70 识别概念的策略二 71 建立概念模型的指导原则 71 几个注意点 71 自然语言分析: Abbott的试探法 72 第二节 标识实体对象 72 标识实体对象的试探法 72 例子:报告紧急情况用例 73 例子:报告紧急情况用例的实体对象 73 第三节 标识边界对象 73 标识边界对象的试探法 73 例子:报告紧急情况用例的边界对象 74 第四节 标识控制对象 74 标识控制对象的试探法 74 例子:报告紧急情况用例的控制对象 74 第五节 标识关系 75 关系的属性: 75 标识关系的试探法 75 试探关系 75 冗余关系 75 惟一标识 76 找出关联——通用关联列表 76 关联原则 76 关联的命名 77 两个类型间的多重关联 77 关联和它的实现 77 例子:销售点问题中的关联 77 第六节 标识属性 78 属性的属性 78 有效的属性类型 78 非简单属性类型 78 识别属性 79 例子:销售点系统中的属性 79 术语表 80 第八章 需求分析活动:用动态模型表示系统行为 80 系统行为 80 交互图 80 交互图:协作图与顺序图 81 交互图的依赖关系 82 顺序图--两种观点 82 系统顺序图 82 系统事件和系统操作 83 如何建立一个系统顺序图 84 系统事件和系统边界 84 系统事件和操作的命名 84 对象顺序图 85 画顺序图的试探法 86 协作图的基本表示法 87 契约 90 活动及其之间的依赖关系 90 系统行为与契约 90 契约段 91 如何建立一个契约 91 后置条件 92 后置条件应该详细到什么程度 92 描述设计细节和算法——注释 93 前置条件 93 对书写契约的一些建议 93 用例enterItem的契约 93 概念模型的修改 93 标识状态 94 事件、状态和转移 94 状态图 94 用例状态图 95 系统状态图 95 状态无关和状态相关类型 95 何处需要状态图 95 外部和内部事件 96 其他的状态图表示法 96 对单个对象的重要行为进行建模:状态图 96 第九章 GRASP: 职责分配模式 97 导言 97 职责和方法 98 UML类图表示方法 98 职责和交互图 98 模式 99 GRASP: 职责分配中通用原则的模式 99 专家 99 问题: 99 解决方案: 99 举例: 99 专家模式的优点是: 100 创建者 100 问题: 100 解决方案: 100 举例: 100 优点: 101 低耦合度 101 问题: 101 解决方案: 101 举例: 101 优点: 102 高聚合度 102 问题: 102 解决方案: 102 高聚合度例 102 具有不同功能聚合度的一些场景如: 102 优点: 103 控制者 103 问题: 103 解决方案: 103 控制者例 103 优点: 104 问题要点和讨论 104 消息处理系统和命令模式 105 相关模式 106 职责、角色扮演和CRC卡 106 GRASP: 职责分配中通用原则总结 106 多态 106 问题: 106 解决方案: 107 举例: 107 讨论 107 优点 107 纯虚构 107 问题: 107 解决方案: 107 讨论 107 优点: 108 相关模式 108 中介者 108 问题: 108 解决方案 108 举例: 108 讨论: 108 优点: 低耦合 109 相关模式 109 “不要和陌生人讲话” 109 问题: 109 解决方案: 109 举例 109 讨论 109 优点: 低耦合 110 相关模式 110 第十章 需求分析活动:精化模型 110 建立交互图的步骤 110 例:运用对象和模式设计一个解决方案 110 交互图和其他制品 110 销售点系统的协作图 111 对对象间的归纳关系建模——泛化 113 泛化 114 UML表示法: 114 定义超类型和子类型 114 何时定义一个子类型 115 销售点终端系统的类型层次 115 组织模型 116 销售点终端系统的概念模型中的包 116 检查分析模型 116 检查提问 116 分析总结 117 第十一章 系统设计 118 第一节 系统设计概况 118 分析产生的需求模型由以下结果描述: 118 系统设计得到如下结果: 118 他们特别需要解决以下问题: 119 第二节 系统设计的概念 120 子系统和类 120 服务和子系统接口 121 耦合度与相关性 121 分层和分区 124 软件体系结构 126 UML配置图 131 两个包之间的可见性 131 服务包接口——虚包模式 131 模型-视图分离模式 132 一个系统中的间接通信 132 应用协调者 133 存储和持久化 133 第三节 系统设计活动:从对象到子系统 133 起点:路线设计系统的分析模型 134 确定设计目标 135 确定子系统 137 将子系统映射到处理器和组件 138 定义连续数据的存储 140 定义访问控制 142 设计全局控制流 146 确定边界条件 147 预期变化 149 系统设计综述 150 第四节 系统设计的管理 151 记录系统设计 151 分配任务 152 与系统设计相关的交流 153 系统设计的不断反复 153 第十二章 对象设计 154 第一节 对象设计概况 155 对象设计包括4组活动 155 对象设计是非线性的。 156 第二节 对象设计概念 157 应用域对象和解决域对象回顾 157 类型、声明和可见性回顾 157 合约:不变量、前提条件和后续条件 159 UML对象约束语言(OCL) 160 第三节 对象设计活动 161 规格说明活动 161 确定遗漏的属性和操作 163 指定类型、声明和可见性 166 指定约束条件 166 指定异常情况 167 组件选择活动 168 确定并调整类库 168 确定并调整应用程序框架 169 重组活动 169 实现关系 170 提高可复用性 172 消除实现的依赖性 173 优化活动 175 回顾访问路径 175 退化对象:将对象转变成属性 176 存储高开销计算的结果 176 推迟高开销计算 176 第四节 对象设计的管理 177 用文档记录对象设计 177 分配职责 180 设计类图 180 活动及其相互之间的依赖关系 181 何时创建设计类图 181 设计类图示例 181 如何建立设计类图 181 概念模型和设计类图的对比 182 建立销售点系统的设计类图 182 识别出类并画出它们。 182 添加关联和导航 183 添加依赖关系 183 细节的表示法 184
Bad climate change may greatly increase the fragility of the country. How to evaluate the impact of climate change and mitigate the impact of climate change has become an urgent problem. With regard to task one, a data envelopment analysis (DEA) model is established to get the country's fragility. First of all, we selected 4 climate factors as input indicators and 5 output indicators. Then, we use the entropy method to determine the weight and then the national vulnerability is divided. At the same time, we get the conclusion that temperature affects GDP and the times of armed conflict directly and affects the fragility indirectly. In view of task two, we choose Somalia as an object of study. First, all the indexes are divided into 5 levels by the method of cluster analysis. Second, we select 10 countries including Somalia, to solve the decision unit matrix. Then, using the model of the problem one, it is found that the increase in temperature and rainfall will cause the national vulnerability to rise and decrease, respectively. Finally, we assign 4 climate indicators to 0 of the decision units, and draw the conclusion that national vulnerability will be reduced without the impact of climate factors. When it comes to task three, we use the rough set theory to reduce the output index to the number of armed conflicts. Then, we use the BP neural network model to predict the conclusion: There is a significant increase in fragility in cases of much more armed conflict and abnormal temperature. When the average annual armed conflict is certain, the national vulnerability index will face an increasing turning point at the temperature of 10.01 and the rainfall of 1823mm. As to task four, three policies on energy reduction and emission reduction issued by the government have been selected, and a model of carbon cycle is established. Taking China as an example, we calculate the extent of the change of the average temperature by reducing the carbon dioxide emissions from the state, and calculate the change of the national vulnerability through the change of temperature. We conclude that when the temperature drops 1.9 degrees, the national vulnerability decreases by 0.1593 and the cost is 20.3 billion $. Last but not least, due to the relative accuracy of the DEA model, the urban fragile performance is accurately predicted while the continent is not. In this paper, the TOPSIS model of distance entropy of three parameter interval number is used to modify the decision matrix of the DEA model. By increasing the upper and lower bounds of the interval, the value of the decision unit is more accurate, and then the weight of the index is modified based on the schedule. When we use the North American continent for test, the error was about 2.9%。 主要解决国家脆弱性的问题,欢迎下载。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值