根据给定的文件信息,我们可以深入探讨北京大学软件与微电子学院在2013年春季学期教授的“软件设计模式”课程的相关知识点。这门课程是计算机科学领域中非常重要的一部分,它不仅帮助学生理解如何有效地设计软件系统,还教会他们如何解决常见的软件设计问题。 ### 软件设计原则 在课程的描述中提到了七个核心的设计原则,这些原则对于指导软件设计具有重要意义: 1. **单一职责原则(SRP)**:一个类应该只有一个改变的原因,这意味着每个类的功能应当尽可能单一且明确。 2. **开放封闭原则(OCP)**:软件实体(类、模块、函数等)应该是可以扩展的,但不应该被修改。即在添加新功能时,尽量不要修改现有代码,而应通过扩展的方式实现。 3. **里氏替换原则(LSP)**:子类型必须能够替换掉它们的基类型。也就是说,任何基类可以出现的地方,子类也一定可以出现。 4. **依赖倒置原则(DIP)**:高层模块不应该依赖于低层模块,二者都应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象。 5. **接口隔离原则(ISP)**:客户端不应该被迫依赖于它不使用的方法。应该将臃肿的接口分解为更小、更具体的接口,这样用户只需知道它关心的那部分。 6. **组合/聚合复用原则(CARP)**:优先使用对象组合或聚合,而不是继承来达到复用的目的。这是因为继承打破了封装性,而且会带来类的紧密耦合。 7. **迪米特法则(LoD)**:一个对象应该对其他对象有尽可能少的了解。这有助于降低系统的复杂度,减少模块间的耦合。 ### GoF设计模式 课程中提到的GoF(Gang of Four)设计模式是指由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位作者在《设计模式:可复用面向对象软件的基础》一书中提出的23种设计模式。这23种模式可以分为三大类:创建型模式、结构型模式和行为型模式。 ### State模式 State模式是一种行为型设计模式,它允许一个对象在其内部状态改变时改变其行为。对象看起来像是改变了其类。这个模式通常用于当一个对象的行为取决于其当前状态,并且必须在运行时根据状态改变行为时。 ### Template Method模式 Template Method模式是一种行为型设计模式,它定义了一个算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这种模式的主要优点是封装了不变的部分,开放了可变的部分。 ### GRASP设计模式 GRASP(General Responsibility Assignment Software Patterns)是一组用于分配软件系统中责任的指南,它包含了九个设计原则,包括信息专家、高内聚、控制者、创造者、多态、保护变化、纯虚构、间接性和开闭原则。GRASP模式帮助开发人员在系统设计阶段做出更好的决策,确保系统更加健壮和可维护。 ### 其他知识点 课程中还提到了装饰器模式(Decorator Pattern)和策略模式(Strategy Pattern)。装饰器模式是在不改变对象结构的情况下动态地给一个对象添加一些额外的职责,而策略模式则定义了一系列算法,并将每一个算法封装起来,使它们可以相互替换。这些模式都是软件设计中的重要工具,能够帮助开发人员更好地组织和优化代码结构。 “软件设计模式”课程是软件工程教育中的一个重要组成部分,它不仅教会学生如何应用各种设计模式和原则来提高软件质量和可维护性,还培养了他们在实际项目中解决复杂问题的能力。通过学习这些模式和原则,学生能够设计出更加灵活、可扩展和易于维护的软件系统。
一、24个选择题 * 1.5分 = 36分
前三四个是有关软件设计中的7大原则的选择题,主要是问,某种方法符合了什么原则,选项是7种原则中的4种,选择一个
附:
软件设计中的7大原则
1、单一职责原则(SRP)
2、开-闭原则(OCP)
3、LisKov替换原则(LSP)
4、依赖倒置原则(DIP)
5、接口隔离原则(ISP)
6、合成/聚合复用原则(CARP)
7、迪米特法则(LoD)
后边的大约20道题基本都是给出一种场景,让你选择用哪种GoF的设计模式最好。
二、5个简答题(44分)
1、什么是开闭原则,举出三个符合开闭原则的GoF设计模式(6分)
2、State模式适用于什么样的场景?(8分)
3、简单工厂、工厂方法、抽象工厂三种设计模式之间的异同(10分)
4、有人说Template Method模式只使用了继承,违背了面向接口编程的思想,你是怎么看的?(10分)
5、什么是GRASP设计模式,它的内容和原则(好像是原则,记不清了)都是什么?(10分)
三、设计题(20分)
购书网站促销,有一个购物车,要求以下条件
1、教材类每本打折1元
2、连环画类打折3%
- 粉丝: 2
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 【java毕业设计】电影售票系统源码(ssm+mysql+说明文档).zip
- 【java毕业设计】大学生综合素质评分平台源码(ssm+mysql+说明文档+LW).zip
- Java实现字符串的逆序StringReverse
- 【java毕业设计】宠物医院信息管理系统源码(ssm+mysql+说明文档+LW).zip
- Linux内核5.0基础架构解析: ARM64架构、内存管理及进程管理
- 【java毕业设计】员工在线知识培训考试平台源码(ssm+mysql+说明文档).zip
- 【java毕业设计】演出道具租赁管理系统源码(ssm+mysql+说明文档).zip
- ScanMaster RPP3 脉冲放大器手册
- 【java毕业设计】社区医院儿童预防接种管理系统源码(ssm+mysql+说明文档).zip
- 【java毕业设计】企业台账管理平台源码(ssm+mysql+说明文档+LW).zip