一、学习
1. 动态绑定
调用函数时根据所引用对象的实际类型来判断并调用其相应的方法。
2. 包或对象无环依赖原则
环意味着存在循环依赖,即包A依赖于包B,而包B又依赖于包A。这种循环依赖会导致设计上的复杂性,使得代码维护和更新变得困难。循环依赖使得模块之间的耦合度过高,不利于代码的解耦和模块化。
3. 里氏替换原则
- 子类可以替换父类。子类完全可以实现父类的功能。
按照里氏替换原则,如果我们将一个使用“鸟”类对象(比如调用其“飞”方法)的地方替换为“鸵鸟”类对象,程序的行为应该保持不变。但在这个例子中,这显然是不可能的,因为鸵鸟不能飞。因此,这个设计违反了里氏替换原则。
- 举例子
为了解决这个问题,我们可以对设计进行重构。一种可能的方案是,我们不再在“鸟”基类中定义“飞”方法,而是创建一个新的接口叫做“可飞的”,只有那些真正能飞的鸟类(如“麻雀”)才实现这个接口。这样,“鸟”类(包括不能飞的“鸵鸟”类)和“可飞的”接口就构成了里氏替换原则的正确使用。
4. 面向对象设计
1)概念
- 认定对象。对系统进行抽象和概括。
- 组织对象。组织对象的过程实际上是对对象进行分类和归纳的过程,旨在将具有相似属性和行为的对象聚合在一起,形成类。
- 对象之间相互作用。相互调用、定义消息传递机制等。
- 基于对象的操作(定义对象)。定义了对象之间相互作用之后,需要定义对象具体的行为和属性,确定参数返回值等。
2)面向对象设计语言
- OOP 为面向对象的具体实现
3) 面向对象设计
- OOD 为面向对象的设计
4) 面向对象分析
- OOD 为面向对象的分析
5. python语法
- list
python x = [1,2] 为List结构。x*2 = [1,2,1,2] 相当于List * 2。 - 概念
- tuple(元组):是不可变的,有序的,元素可以重复。
- dict(字典):是可变的,有序的,不能重复的
- list(列表):是可变的,有序的,可以重复的
- set(集合):是可变的,有序的,不能重复的
6. 数据库创建视图
数据字典中保存的是对视图的定义。如create view as …
7. 自然连接与等值连接
- 自然连接(Natural Join)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。这种操作在关系型数据库中常用于连接多个表以获取所需的数据。自然连接与等值连接的主要区别在于,自然连接会删除连接结果中的重复属性列,而等值连接则不会。
8. 笛卡尔积
笛卡尔积关系表达式描述了两个集合之间所有可能的有序对的集合。
- 实际运算
二、复习(三)
- 敏捷开发。并列争球法。学习橄榄球运动。紧密配合,通过协同来竞争
- 极限编程
- 简单设计。不过度设计,不断重构。保持代码简洁和易于理解。
- 小步快跑。多任务共同进行。
- 结对编程。相互分享知识,互相学习。
- 持续继承。不断提交代码。自动化测试。
- 测试驱动开发。编写测试代码保持正确性。
- 持续开发。保持经历可以高效工作并能够合理安排休息时间
- 水晶法
- 透明性和清晰性
- 适合小团队
- 注重沟通交互。分享项目进度。
- 注重交流反馈来推动项目进度
- 管道过滤器体系风格
- 高内聚低耦合。
- 适合高并发。
- 可维护性好
- 缺点是不适合交互式应用。系统性能不高。
- 白盒测试Mccabe
- 路径覆盖条数计算公式:m(边) - n(点) +2
- 软件修改维护
- 改正性
- 适用性
- 预防性
- 改善型(性能等)
- 软件测试分层
算法、类、模板、系统。 - UML序列描述
- 共同重用,对类和包放在一起形成组件或包
- 共同封闭,修改封闭内的共能不影响封闭外的功能
- 开发封闭。对拓展开放,对改便关闭。
- 接口分离。面向抽象编程而不是具体。不强迫用户使用他们用不到的方法。
三、复习(四)
- 时序图。时间顺序调用,下一个节点会在上一个节点执行完后调用。
- 用例图。参与者、用例、边界以及他们之间的关系构成的图
- 对象图。最明显特点就是生成某一时刻对象的实例,可重复
- 活动图。动作和动作导致状态改变的结果。
- 包图。是一种描述包和包之间关系的图。他之中会有类、接口、构建、节点、协作和可嵌套包。