本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。
小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
三大特性
三大特性指的是
- 封装
- 继承
- 多态
六大原则
单一职责原则
指的是一个模块(接口)的功能尽量是单一的,这样不同功能的接口就不会耦合在一起了,同时维护起来也方便。
开闭式原则
一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。
迪米特原则
指的是模块是所有的依赖都要保存最少,这一点和接口隔离原则有点重复,或者可以说接最小知道原则包含接口隔离原则,同时最小知道原则还有对外界影响最小的意味。这几个原则说的都是类和接口设计要尽量降低耦合的问题。
里氏替换原则
这个原则挺简单,讲的就使用接口的时候,我们必须确保子类能够替换父类所出现的任何地方。纯粹就字面的意思来讲,就是父类接口必须确保所有子类都可以实现需求,而不是某一个子类。
依赖倒置原则
这个原则也是讲究解耦,他指的是让高层模块不要依赖低层模块。这个是个纯粹的面向接口,面向模块开发思路了,因为面向对象而言,各个对象自己的东西和外界是解耦的,因为封装特性把它们自己的属性都封装起来了,所以是不会和其他对象有耦合关系的(如c++的友元除外);但是各个对象仍然是相互耦合的,最强的耦合就属于继承耦合了,对象组合起码还是轻耦合,继承是个高耦合呀。依赖倒置就是让各个对象耦合度降低,高层模块不能继承底层模块,需要底层的东西也是外界注入而不是自己创建得到;同时调用的时候也是使用接口调用,而不是依赖具体实现,并且因为是接口调用,具体实现模块可以被任意替换了。
接口隔离原则
强调每个类继承的接口一定要保存最少,不能继承无用的接口,保证接口隔离原则的前提是先要保证职责单一原则.
面向对象的软件开发过程
面向对象的基本概念
-
对象:由数据及其操作所构成的封装体,是系统中用来描述客观事务的一一个实体,是构成系统的-一个基本单位。-个对象通常可以由对象名、属性和方法3个部分组成。
-
类:现实世界中实体的形式化描述,类将该实体的属性(数据)和操作(函数)封装在一起。对象是类的实例,类是对象的模板。类可以分为三种:实体类、接口类(边界类)和控制类。实体类的对象表示现实世界中真实的实体,如人、物等。接口类(边界类)的对象为用户提供一种与系统合作交互的方式,分为人和系统两大类,其中人的接口可以是显示屏、窗口、Web窗体、对话框、菜单、列表框、其他显示控制、条形码、二维码或者用户与系统交互的其他方法。系统接口涉及到把数据发送到其他系统,或者从其他系统接收数据。控制类的对象用来控制活动流,充当协调者。
-
抽象:通过特定的实例抽取共同特征以后形成概念的过程。它强调主要特征,忽略次要特征。一个对象是现实世界中- - 个实体的抽象,-一个类是一组对象的抽象,抽象是一一种单- -化的描述,它强调给出与应用相关的特性,抛弃不相关的特性。
-
封装:是一种信息隐蔽技术,将相关的概念组成一一个单元模块,并通过- -个名称来引用。面向对象封装是将数据和基于数据的操作封装成--个整体对象,对数据的访问或修改只能通过对象对外提供的接口进行。
-
继承:表示类之间的层次关系(父类与子类),这种关系使得某类对象可以继承另外-类对象的特征,又可分为单继承和多继承。
-
多态:不同的对象收到同一个消息时产生完全不同的结果。包括参数多态(不同类型参数多种结构类型)、包含多态(父子类型关系)、过载多态(类似于重载,一个名字不同含义)、强制多态(强制类型转换)四种类型。多态由继承机制支持,将通用消息放在抽象层,具体不同的功能实现放在低层。
-
接口:描述对操作规范的说明,其只说明操作应该做什么,并没有定义操作如何做。
-
消息:体现对象间的交互,通过它向目标对象发送操作请求。
-
覆盖:子类在原有父类接口的基础上,用适合于自已要求的实现去置换父类中的相应实现。即在子类中重定义一个与父类同名同参的方法。
-
函数重载:与覆盖要区分开,函数重载与子类父类无关,且函数是同名不同参数。
-
绑定是一个把过程调用和响应调用所需要执行的代码加以结合的过程。在一般的程序设计语言中,绑定是在编译时进行的,叫作静态绑定。动态绑定则是在运行时进行的,因此,一个给定的过程调用和代码的结合直到调用发生时才进行。
面向对象的分析
是为了确定问题域,理解问题。包含五个活动:认定对象、组织对象、描述对象间的相互作用、确定对象的操作、定义对象的内部信息。
面向对象的设计
是设计分析模型和实现相应源代码,设计问题域的解决方案,与技术相关。OOD同样应遵循抽象、信息隐蔽、功能独立、模块化等设计准则。
面向对象的分析模型主要由顶层架构图、用例与用例图、领域概念模型构成;设计模型则包含以 包图表示的软件体系结构图、以交互图表示的用例实现图、完整精确的类图、针对复杂对象的状态图 和用以描述流程化处理过程的活动图等。
面向对象的测试:
一般来说,对面向对象软件的测试可分为下列4个层次进行。
-
算法层。测试类中定义的每个方法,基本上相当于传统软件测试中的单元测试。
-
类层。测试封装在同一个类中的所有方法与属性之间的相互作用。在向面对象软件中类是基本模块,因此可以认为这是面向对象测试中所特有的模块测试。
-
模板层。测试一组协同工作的类之间的相互作用,大体上相当于传统软件测试中的集成测试,但是也有面向对象软件的特点( 例如,对象之间通过发送消息相互作用)。
-
系统层。把各个子系统组装成完整的面向对象软件系统,在组装过程中同时进行测试。