第九章 对象设计-说明接口
- 格式:ppt
- 大小:1.12 MB
- 文档页数:21


面向对象程序设计中的类与接口设计原则分析随着科技的不断发展,计算机编程技术也在逐步提高,而面向对象程序设计则是其中非常重要的一个方向。
在面向对象编程中,类与接口的设计是非常重要的一环,它们起到了定义对象行为与属性的关键作用。
因此,本文将从类与接口的设计原则分析入手,探讨类与接口所扮演的角色,以及如何更好的进行设计。
一、什么是类?首先要了解什么是类。
在面向对象的程序设计中,类是一种基本的代码单元,它定义了一个对象的属性和行为。
通过类的定义,我们可以创建一个或多个该类的实例,从而对对象进行操作。
类具有以下特点:1、封装性 - 隐藏了对象的内部细节,只开放特定的方法供外部调用。
2、继承性 - 可以继承父类的属性和方法。
3、多态性 - 同种行为的不同表现形式。
在类的设计中,我们需要遵循高内聚低耦合的原则,即实现类的方法内部应该协调一致,而不是散乱无章的单独处理某个问题。
同时,类之间的耦合也应该尽可能的降低,减少相互影响,提高程序的稳定性和可维护性。
二、接口的定义另一个重要的概念是接口。
在面向对象编程中,接口定义了类或对象所提供的服务或约定。
它是一个包含了一组方法的特殊类,但是这些方法都没有实现体,只有方法名称、返回值类型、参数列表与方法签名。
接口的特点如下:1、强调规范性 - 接口规定了类或对象应该提供的服务或约定。
2、多态性 - 接口可以用于实现多态。
3、解耦 - 接口限制了实现类的行为,使它们更具有独立性和松耦合性。
三、类与接口的设计原则类与接口的设计原则非常重要,它们能够影响程序的效率和质量。
在面向对象程序设计中,通常有以下类与接口设计原则:1、单一职责原则 - 一个类只负责单一的职责,这样可以使类结构更加清晰。
2、开闭原则 - 一个类或模块应该可以扩展,但是不应该修改已有的代码,这样可以提高代码的稳定性和可维护性。
3、里氏替换原则 - 子类可以替换父类并且不会影响程序正确性,这样可以实现代码重用。
3.简答题(1)UML中的模型元素主要有哪些?答:UML语言中的模型元素包括事物和事物之间的联系。
一、事物UML语言中事物可以分为结构事物、动作事物、分组事物和注释事物。
1、结构事物结构事物分为:类、接口、协作、用例、活动类、组件和节点(1)类。
类是对具有相同属性、方法、关系和语义的对象的抽象,一个类可以实现一个或多个接口。
类用包括类名、属性和方法的矩形表示。
(2)接口。
接口是为类或组件提供特定服务的一组操作的集合。
(3)协作。
协作定义了交互操作。
一些角色和其他元素一起工作,提供一些合作的动作,这些动作比元素的总和要大。
UML中协作用虚线构成的椭圆表示。
(4)用例。
用例描述系统对一个特定角色执行的一系列动作。
在模型中用例通常用来组织动作事物,它是通过协作来实现的。
UML中,用例用标注了用例名称的实线椭圆表示。
(5)活动类。
活动类是类对象有一个或多个进程或线程的类。
在UML中活动类的表示法和类相同,只是边框用粗线条。
(6)组件。
组件是实现了一个接口集合的物理上可替换的系统部分。
(7)节点。
节点是在运行时存在的一个物理元素,它代表一个可计算的资源,通常占用一些内存和具有处理能力。
一个组件集合一般来说位于一个节点,但也可以从一个节点转到另一个节点。
2、动作事物UML语言中动作事物是UML模型中的动态部分,它们是模型的动词,代表时间和空间上的动作。
交互和状态机是UML模型中最基本的两个动态事物元素。
(1)交互。
交互是一组对象在特定上下文中,为达到某种特定的目的而进行的一系列消息交换组成的动作。
在交互中组成动作的对象的每个操作都要详细列出,包括消息、动作次数(消息产生的动作)、连接(对象之间的连接)。
(2)状态机。
状态机由一系列对象的状态组成。
3、分组事物分组事物是UML模型中组织的部分,分组事物只有一种,称为包。
4、注释事物注释事物是UML模型的解释部分。
二、UML语言中的关系1、关联关系关联关系连接元素和链接实例,它用连接两个模型元素的实线表示,在关联的两端可以标注关联双方的角色和多重性标记。
面向对象--接口与抽象类的恩恩怨怨接口与抽象类是面向对象编程中两个非常重要的角色,二者各自起着非常重要的作用。
但是很多初学的朋友往往会对使用接口还是抽象类存在的很大的迷惑。
就我自己的一点心得,发表一下拙见。
面向对象的一些回顾:面向对象世界中有一个古老的法则:接口隔离原则,指的是不要把多个功能全部都集中在一个接口里面。
接口实现的功能要相对单一;衍生开来可以得到另外一个结论:对一组或者称一系列功能的实现,尽量定义相对功能单一的小模块来实现这一组功能。
这其实也是解耦和的体现。
那这跟我们的接口和抽象类有什么关系呢?那又得摆出另外一个法则:依赖倒置原则,针对接口编程而不是针对实现编程。
说到这,又会有一个新的问题蹦出来,这是自相矛盾啊,既然要针对接口编程还要抽象类干吗使?我们经常说面向对象,面向对象是来源于生活的。
是人们要把对现实世界中的一系列方法论应用到程序设计当中来。
从对象这一概念的引入我们就可以揣摩这一点。
人类社会中有很多对象的概念,人、车、物体。
不幸的是用程序来实现这些对象比在概念上定义对象要难很多。
(如果能达成这一共识,您可以继续往下看,否则就请看官您移步至留言讨论吧)MS给出开发者的建议是,用抽象类来实现接口。
子类再继承基类。
实例说明:为什么要这么建议?OK,我们试着结合实际来说明一下这个问题吧。
我们要造车。
这个车有个基本的属性就是能移动、还必须有轮子。
那我们就设计一个接口1public interface ICar2 {3 string Wheel4 {5 get;6 set;7 }8 void Move();9 }10接下来的事情,就是实现了。
造什么车都行,继承一下就行。
随着科技的发展,我们的车想要飞了。
此时当然不能修改这个接口,因为要遵循开闭原则。
为什么要遵循?我们可以想一下,人坐上飞机能飞上天。
但是也没见谁认为人有会飞这个特性的。
那也好办,不许修改,那我再加一个接口。
1interface IFlyable2 {3 void Fly();4 }5好,我们的飞行汽车最后应该是这样的。
⾯向对象编程语⾔中的接⼝(Interface)在⼤多⾯向对象的编程语⾔中都提供了Interface(接⼝)的概念。
如果你事先学过这个概念,那么在谈到“接⼝测试”时,会不会想起这个概念来!?本篇⽂章简单介绍⼀下⾯向对象编程语⾔中的Interface。
Java中的Interface 在Java中定义接⼝使⽤interface关键字来声明,可以看做是⼀种特殊的抽象类,可以指定⼀个类必须做什么,⽽不是规定它如何去做。
为什么使⽤接⼝? ⼤型项⽬开发中,可能需要从继承链的中间插⼊⼀个类,让它的⼦类具备某些功能⽽不影响它们的⽗类。
例如 A -> B -> C -> D -> E,A 是祖先类,如果需要为C、D、E类添加某些通⽤的功能,最简单的⽅法是让C类再继承另外⼀个类。
但是问题来了,Java 是⼀种单继承的语⾔,不能再让C继承另外⼀个⽗类了,只到移动到继承链的最顶端,让A再继承⼀个⽗类。
这样⼀来,对C、D、E类的修改,影响到了整个继承链,不具备可插⼊性的设计。
接⼝是可插⼊性的保证。
在⼀个继承链中的任何⼀个类都可以实现⼀个接⼝,这个接⼝会影响到此类的所有⼦类,但不会影响到此类的任何⽗类。
此类将不得不实现这个接⼝所规定的⽅法,⽽⼦类可以从此类⾃动继承这些⽅法,这时候,这些⼦类具有了可插⼊性。
我们关⼼的不是哪⼀个具体的类,⽽是这个类是否实现了我们需要的接⼝。
接⼝提供了关联以及⽅法调⽤上的可插⼊性,软件系统的规模越⼤,⽣命周期越长,接⼝使得软件系统的灵活性和可扩展性,可插⼊性⽅⾯得到保证。
接⼝在⾯向对象的 Java 程序设计中占有举⾜轻重的地位。
事实上在设计阶段最重要的任务之⼀就是设计出各部分的接⼝,然后通过接⼝的组合,形成程序的基本框架结构。
所以简单总结其⽤途为:实现类的多继承,以解决Java只能单继承,不⽀持多继承的问题。
下⾯通过例⼦介绍Java中接⼝的使⽤。
定义接⼝(IAnimal.java):package mypor.interfaces.demo;public interface IAnimal {public String Behavior(); //⾏为⽅法,描述各种动物的特性}实现接⼝⼀(Dog.java):package mypor.interfaces.demo;import mypor.interfaces.demo.IAnimal;//类: 狗public class Dog implements IAnimal{public String Behavior(){String ActiveTime = "我晚上睡觉,⽩天活动";return ActiveTime;}}实现接⼝⼆(Cat.java):package mypor.interfaces.demo;import mypor.interfaces.demo.IAnimal;//类:猫public class Cat implements IAnimal{public String Behavior(){String ActiveTime = "我⽩天睡觉,晚上捉⽼⿏。