当前位置:文档之家› 面向对象的几个基本原则讲义

面向对象的几个基本原则讲义

return bottom.getArea()*height; } }
//Geometry.java public abstract class Geometry{
public abstract double getArea(); }
//Pillar.java
public class Pillar{ Geometry bottom; double height;
bottom = new Circle(10); pillar = new Pillar(bottom,58); System.out.println(pillar.getVolume()); } }
5.2 开-闭原则
•所谓 “开-闭原则”(Open-Closed Principle)就是让你的设计应当对扩 展开放,对修改关闭。 •如果您的设计遵守了“开-闭原则”, 那么这个设计一定是易维护的,因为在 设计中增加新的模块时,不必去修改设 计中的核心模块。
2.组合与复用
• “黑盒”复用。 • 优点
– 使用委托机制 – 弱耦合关系 – 运行illar.java
public class Pillar{ Circle bottom; double height;
Pillar(Circle bottom, double height){ this.bottom = bottom; this.height = height;
} public double getVolume (){
Pillar(Geometry bottom, double height){ this.bottom = bottom; this.height = height;
} public double getVolume(){
return bottom.getArea()*height; } }
//Circle.java
(2)接口 接口(interface)具有如下特点: •接口中只可以有public权限的abstract方 法,不能有非abstract方法。 •接口由类去实现,即一个类如果实现一 个接口,那么它必须重写接口中的 abstract方法,即将abstract方法重新声 明,但必须去掉abstract修饰符,同时 要保证声明的方法名字、返回类型、参 数个数和接口中的方法完全相同。
本资料来源
第五章 面向对象的几个基本原则
5.1 面向抽象原则
1.抽象类和接口 (1)抽象(abstract)类 抽象(abstract)类具有如下特点: •抽象类中可以有abstract方法,也可以有非abstract 方法。 •抽象类不能用new运算符创建对象。 •如果一个非抽象类是某个抽象类的子类,那么它必 须重写父类的abstract方法,即在子类中将abstract 方法重新声明,但必须去掉abstract修饰符,同时要 保证声明的方法名字、返回类型、参数个数和类型 与父类的abstract方法完全相同。
public class Circle extends Geometry{ double r; Circle(double r){ this.r = r; } public double getArea(){ return(3.14*r*r); }
}
//Rectangle.java
public class Rectangle extends Geometry{ double a,b; Rectangle(double a,double b){ this.a = a; this.b = b; } public double getArea(){ return a*b; }
如果您的设计遵守了“开-闭原则”,那么这个设计一 定是易维护的,因为在设计中增加新的模块时,不必去 修改设计中的核心模块。
该设计中的Geometry和Pillar类就是系统 中对修改关闭的部分,而Geometry的子类是对 扩展开放的部分。当我们向系统再增加任何 Geometry的子类时(对扩展开放),不必修改 Pillar类,就可以使用Pillar创建出具有 Geometry的新子类指定的底的柱体。
}
//Application.java public class Application{
public static void main(String args[]){ Pillar pillar; Geometry bottom; bottom = new Rectangle(12,22); pillar = new Pillar(bottom,58); System.out.println(pillar.getVolume());
之所以提倡多用组合,少用继承, 是因为在许多设计中,人们希望系统 的类之间尽量是低耦合的关系,而不 希望是强偶合关系。即在许多情况下 需要避开继承的缺点,而需要组合的 优点。
1.继承与复用
• “白盒”复用 • 优点
– 易于修改、扩展被复用的方法
• 缺点
– 无法在运行时改变从父类继承的方法的行为 – 子类和父类是强耦合关系 – 父类的内部细节对于子类而言是可见的
2.面向抽象
所谓面向抽象编程,是指当设计一个 类时,不让该类面向具体的类,而是面向 抽象类或接口,即所设计类中的重要数据 是抽象类或接口声明的变量,而不是具体 类声明的变量。
//Circle.java
public class Circle{ double r; Circle(double r){ this.r = r; } public double getArea(){ return(3.14*r*r); }
通常我们无法让设计的每个部分都遵守“开 -闭原则”,甚至不应当这样去做,我们应当把 主要精力集中在应对设计中最有可能因需求变 化而需要改变的地方,然后想办法应用“开-闭 原则”。
当设计某些系统时,我们经常需要面向抽象
来考虑系统的总体设计,不要考虑具体类,这 样就容易设计出满足“开-闭原则”的系统。
5.3 多用组合少用继承原则
相关主题