3.1_面向对象设计原则
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EmailSender + send (Customer customer) : void ...
EmailSender + send (CommonCustomer customer) : void + send (VIPCustomer customer) : void ...
VIPCustomer - name : String - email : String + getName () + setName (String name) + getEmail () + setEmail (String email) ...
CustomerDAO + addCustomer () : void ...
CustomerDAO - util : DBUtil + addCustomer () : void ...
DBUtil + getConnection () : Connection ...
...... util.getConnection(); ......
# # + + + +
: String : void : String : void
Customer name : String email : String getName () setName (String name) getEmail () setEmail (String email) ...
BarChart + display () : void ...
1. 在某CRM系统中可以使用不同的方式 显示图表,如饼状图和柱状图等,原 始设计方案如图所示
ChartDisplay - chart : AbstractChart + setChart (AbstractChart chart) : void + display () : void ... chart.display(); PieChart + display () : void ... BarChart + display () : void ... AbstractChart {abstract} + display () : void ...
实训练习
1. 在某CRM系统中客户可以分为VIP客户和普通客户两类,系统需要提 供一个发送Email的功能,原始设计方案如图
CommonCustomer - name : String - email : String + getName () : String + setName (String name) : void + getEmail () : String + setEmail (String email) : void ...
+ readFile () : void ...
CustomerDAO + addCustomers () : void ...
ExcelDataConvertor + readFile () : void ...
实训练习
CustomerDataDisplay ConcreteClass + + + + + + dataRead () transformToXML () createChart () displayChart () createReport () displayReport () ...
• 可扩展性(Extensibility) • 灵活性(Flexibility) • 可插入性(Pluggability)
Peter Coad
面向对象设计原则概述
面向对象设计原则简介
常用的面向对象设计原则包括7个,这些原则并不是孤立存在的,它们相 互依赖,相互补充。
设计原则名称 单一职责原则 (Single Responsibility Principle, SRP) 开闭原则 (Open-Closed Principle, OCP) 里氏代换原则 (Liskov Substitution Principle, LSP) 依赖倒转原则 (Dependency Inversion Principle, DIP) 接口隔离原则 (Interface Segregation Principle, ISP) 合成复用原则 (Composite Reuse Principle, CRP) 迪米特法则 (Law of Demeter, LoD) 设计原则简介 类的职责要单一,不能将太多的职责放在一个类中 软件实体对扩展是开放的,但对修改是关闭的,即在不修改一 个软件实体的基础上去扩展其功能 在软件系统中,一个可以接受基类对象的地方必然可以接受一 个子类对象 要针对抽象层编程,而不要针对具体类编程 使用多个专门的接口来取代一个统一的接口 在系统中应该尽量多使用组合和聚合关联关系,尽量少使用甚 至不使用继承关系 一个软件实体对其他实体的引用越少越好,或者说如果两个类 不必彼此直接通信,那么这两个类就不应当发生直接的相互作 用,而是通过引入一个第三者发生间接交互 重要性 ★★★★☆ ★★★★★ ★★★★☆ ★★★★★ ★★☆☆☆ ★★★★☆ ★★★☆☆
实训练习
1. 在某CRM系统中提供了一个客户信息 图表显示模块,原始设计方案如图所 示
CustomerDataChart - dao : CustomerDAO + createChart () : void + displayChart () : void ...
+ + + +
CustomerDataChart getConnection () findCustomers () createChart () displayChart () ... : Connection : List : void : void
List
Label
List
Label
Mediator
ComboBox
TextBox
ComboBox
TextBox
END
1. 在某CRM系统中设计人员针 对客户数据显示模块设计了 接口如图
Client
+ + + + + +
dataRead () transformToXML () createChart () displayChart () createReport () displayReport () ...
DataHandler + dataRead () ... XMLTransformer Client + transformToXML () ... ChartHandler + createChart () + displayChart () ... ReportHandler + createReport () + displayReport () ... + dataRead () + createChart () + displayChart () ...
3.1
面向对象设源自文库原则
本章教学内容
面向对象设计原则概述
单一职责原则 开闭原则
里氏代换原则
依赖倒转原则 接口隔离原则 合成复用原则 迪米特法则
面向对象设计原则概述
软件的可维护性和可复用性
软件工程和建模大师Peter Coad认为,一个好的系统 设计应该具备如下三个性质:
ConcreteClass
DBUtil + getConnection () : Connection ... ...... super.getConnection(); ......
实训练习
1. 在某CRM系统初期,由于客户数量 不多,系统采用了MySQL作为数据 库,与数据库操作有关的类如 CustomerDAO需要连接数据库,原 始设计方案如图所示.随着客户数量 的增加,系统决定升级为Oracle数 据库,如何修改?
CustomerDAO - util : DBUtil + findCustomers () : List ...
DBUtil + getConnection () : Connection ...
PieChart + display () : void ...
实训练习
ChartDisplay + display (String type) : void ...
OracleDBUtil + getConnection () : Connection ...
实训练习
1. 在某CRM系统中客户信息管理界面中,界面组件之间存在较为复杂的 交互关系,如果删除一个客户,则从客户列表中删掉对应的项,对应 的儿童机标签Label中显示的客户信息数将减1,且客户选择组合框中 的客户名称也将减少一个,如果增加一个客户信息,则反之。
Button
List
Label
ComboBox
TextBox
实训练习
1. 在某CRM系统中客户信息管理界面中,界面组件之间存在较为复杂的 交互关系,如果删除一个客户,则从客户列表中(List)删掉对应的项, 对应的统计标签Label中显示的客户信息数将减1,且客户选择组合框 (Combox)中的客户名称也将减少一个,如果增加一个客户信息,则 反之。Button Button
: String : void : String : void
CommonCustomer
VIPCustomer
TXTDataConvertor
实训练习
1. 在某CRM系统中需要将存储各种文件 格式,如TXT文件或Excel文件中的客 户信息转存到数据库中,因此需要进 行个数转化。在客户数据操作类中将 调用数据格式转换类的方法实现格式 转换和数据库插入操作,原始设计方 案如图所示