JAVA面向对象

来源:互联网 发布:mac 不能玩炉石传说么 编辑:程序博客网 时间:2024/05/21 14:52

面向对象技术是继面向过程技术又一编程技术,面向对象技术能解决更加复杂的现实问题。java认为万物皆对象。

所有的事物都有两个方面:有什么(属性):用来描述对象。

            能够做什么(方法):告诉外界对象本对象有什么功能。

后者以前者为基础,大的对象的属性也可以是一个对象。

有了面向过程了,为什么要使用面向对象:

首先,面向对象符合人类看待事物的一般规律。对象的方法的实现细节是屏蔽的,只有对象创建者了解细节。

其次,采用面向对象方法可以使系统各部分各司其职、各尽所能。

面向对象的3个基本特征:封装,继承,多态。

封装,就是把客观事物封装成抽象的类,并且类可以把自己的变量和方法让可信的类进行操作,对不可信的类进行信息隐藏。封装是面向对象的主要特征之一,是对象和类概念的主要特征之一。简单地说,一个类就是把数据和操作这些数据的方法封装成一个逻辑实体。而且在类的内部,类的创建者可以对成员的访问权限进行设置,让外界类只能通过正常方式访问类的成员,防止程序中无关的部分意外的访问或者错误的使用了私有部分。

继承,所谓继承就是让某个类获得另一个类的属性与方法,它支持按级分类的概念。继承是指这样一种能力:它可以使用现有类的任何一种功能,并在无需重新编写原来类的情况下对这些功能进行扩展。通过继承产生的新类称为“子类”或者“派生类”,被继承的类成为“父类”,“基类”或者“超类”。继承是一种从一般到特殊的过程,要实现继承可以通过继承(Inheritance)和组合(Composition)来实现。继承概念的实现有两种,实现继承与接口继承。实现继承是指继承现有的一个类,可以使用被继承的累的所有属性与方法,用关键字extends实现;接口继承仅能使用static属性和方法名称,方法要由继承者来实现。

多态,指一个类实例的相同方法在不同情况下有不同表现形式,多态能使具有不同内部结构的类实例拥有相同的外部接口。多态的基础是继承。

记录完了面向对象的3个基本特征,再来说说类设计的5个基本原则:

1,开放关闭原则(Open-Closed Principle)

软件实体应该是可以扩展而不可以修改的。也就是对扩展开放对修改关闭。开放关闭原则主要体现在两个方面:1、对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况;2、对修改关闭,类的设计一旦完成,就可以独立完成其工作,而不要对其进行任何尝试的修改。

实现开放关闭原则的核心思想就是对抽象编程而不对具体编程,因为抽象相对稳定。让类依赖于固定的抽象,所以修改就是封闭的;而通过面向对象的继承和多态机制,又可以实现对抽象类的继承,通过覆盖其方法来改变固有行为,实现新的拓展方法,所以就是开放的。

需求总是在变化,没有不变的软件,所以用开放关闭原则来封闭变化来满足需求,同时还能保证软件内部封装体系的稳定性,不被需求的变化所影响。

2,单一职责原则(Single-Resposibility Principle)

就一个类而言,它只能有一个功能和一个引起它产生变化的原因。设计这个类的功能要单一,不能有两个或者三个。也可以理解为引起这个类变化的原因,当你发现引起这个类变化的原因有两个或者更多,那你就应该拆分这个类了。

在使用SRP的时候有一些注意点:

1、一个合理的类应该仅有一个引起它改变的原因,即单一职责;

2、在没有变化征兆的情况下使用SRP或者其他原则是不明智的;

3、在需求发生变化时就应该使用SRP或其他原则来重构代码;

3,Liskov替换原则(Liskov- Substituion Principle)

子类型必须能够替换基类型。

这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证程序在运行时识别子类,这是保证继承复用的基础。在子类和父类的行为中,必须严格把握继承层次中的关系和特征,将基类替换成子类,程序的行为不会发生任何变化。同时,这一约束反过来是不成立的,即用到子类的地方不一定能替换成父类。

Liskov替换原则,主要着眼于对抽象和多态建立在继承的基础上,因此只有遵循了Liskov替换原则,才能保证继承复用是可靠的。实现的方法是面向接口编程:将公共接口抽象为基类接口或抽象类,通过Extract Abstract Class,在子类中通过覆写父类的方法实现新的方式支持同样的职责。

Liskov替换原则是继承机制的设计原则,违反Liskov原则就必然违反开放关闭原则。

Liskov替换原则能保证系统具有良好的扩展性,同时实现基于多态的抽象机制,能够减少代码冗余,避免运行期的类型判别。

4,依赖倒置原则(Dependecy-Inversion Principle)

设计要依赖于抽象而不是具体化。

抽象不应当依赖于细节,细节应当依赖于抽象。要针对接口编程,不针对实现编程。

使用传统过程化程序设计所创建的依赖关系,策略依赖于细节,这是糟糕的,因为策略受到细节改变的影响。依赖倒置原则使策略和细节都依赖与抽象,抽象的稳定性决定了细节的稳定性。

怎样做到依赖倒置原则?

以抽象方式耦合是是实现依赖倒置原则的关键。抽象耦合关系总要涉及到具体类从抽象类继承,并且能保证在引用基类的地方都能替换成派生类,因此里氏替换原则是依赖倒置原则的基础。在抽象层次上的耦合虽然有灵活性,但也带来了额外的复杂性,如果一个具体类发生变化的可能性非常小,那么抽象耦合能发挥的好处便非常有限,这时候用具体耦合反而会更好。

层次化,所有结构良好的面向对象架构都有清晰的层次定义,每个层次通过一个定义良好的、受控的接口向外提供一组内聚的服务。

依赖于抽象:建议不依赖于具体类,即程序中所有的依赖关系都应当终止于抽象类或者接口。尽量做到任何变量都不应当持有一个指向具体类的指针或者引用;任何类都不应当从具体类中派生;任何方法都不应该覆写他的基类中已经实现的方法。

5,接口隔离原则(Interface-Segregation Principle)

使用多个功能专一的接口比使用一个功能复合总接口要好。从一个客户类的角度讲,一个类对另外一个类的依赖性应当是建立在最小接口上的,过于臃肿的接口是对接口的污染,不应该强迫客户依赖于他们不用的方法。

优点:会使一个软件系统功能扩展时,修改的压力不会传到别的对象那里。

如何实现接口隔离原则

1、利用委托分离接口。

2、利用多继承分离接口。





1 0
原创粉丝点击