今天学习到了面向对象设计(Object Oriented Design)的6个原则,取他们的首字母拼成solid来方便记忆,又因为l是重复的所以只记一个。
下面分述一下我对这六个原则的理解,才疏学浅难免有不足之处,希望各位朋友不吝赐教。
1.S---Single Responsibility Principle即单一责任原则
比较官方的说法是说一个类发生变化的原因应该是唯一的。我认为该原则主要强调一个类应该只负责一部分相联系的功能。但是所谓的“相联系”,
其联系程度究竟有多紧密呢?个人的拿捏程度不同,也不能说谁的程度拿捏的最好。但是我们肯定明白不能把八竿子打不着的功能放在一个类中实现。
2.O---Open Closed Principle即开闭原则
书面的说法是,对扩展开放,对修改封闭。简言之,就是写过的代码,尽量不改,只是需要加新功能的时候去扩充它。但我觉得这是一种美好的愿望,
尤其当你碰到一个很不负责的产品经理的时候,他不会考虑返工的代价,一茬接一茬的满足客户无理需求,发现最后要么少东西,要么逻辑不对,改的
东西海了去了。。。哼哼,有点跑偏了,总之,作为程序员我们自己写东西的时候还是要思考全面,为将来程序的可扩展性做好准备,同时也能确保程
序正确而不至于后期返工大修大改。
3.L1---Liskov Substitution Principle即里氏替换原则
里氏替换原则简单的说,需要父类出现的地方子类出现了是绝对正确的,龙生龙,凤生凤,老鼠生的会打洞。
这里就牵扯到OOP(面向对象编程)语言中几个比较重要的概念。
a.override重写,这发生在子类继承父类的时候,重新实现父类的函数时
classA
{
public:
A(){}
virtual void foo()
{
cout<<"ThisisA."<<endl;
}
};
classB:publicA
{
public:
B(){}
void foo()
{
cout<<"ThisisB."<<endl;
}
};
b.overload重载,这发生在一个类中的多个同名函数,但是他们的参数列表不同,在函数调用时会根据你的参数列表来决定调用哪个函数,这叫重载
classA{
public:
int add(int a,int b){
return a+b;
}
double add(double a,double b){
return a+b;
}
};
c.polymorphism多态
多态,是面向对象的程序设计语言最核心的特征。多态,意味着一个对象有着多重特征,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。从程序设计的角度而言,多态可以这样来实现(以java语言为例):
public interface Parent//父类接口
{
public void simpleCall();
}
public class Child_A implements Parent
{
public void simpleCall();
{
//具体的实现细节;
}
}
public class Child_B implements Parent
{
public void simpleCall();
{
//具体的实现细节;
}
}
//当然还可以有其他的实现
然后,我们就可以看到多态所展示的特性了:
Parent pa = new Child_A();
pa.simpleCall()则显然是调用Child_A的方法;
Parent pa = new Child_B();
pa.simpleCall()则是在调用Child_B的方法。所以,我们对于抽象的父类或者接口给出了我们的具体实现后,pa 可以完全不用管实现的细节,只访问我们定义的方法,就可以了。事实上,这就是多态所起的作用,可以实现控制反转这在大量的J2EE轻量级框架中被用到,比如Spring的依赖注入机制。
4.L2---Law Of Demeter || Least Knowledge Principle即迪米特法则或最小知识原则
这个原则我认为强调的是低耦合,即一个类对其他类的实现什么的知道的越少越好。
5.I---Interface Segregation Principle即接口隔离原则
如果说单一责任原则强调的是“什么样”,接口隔离原则则强调的是“怎么用”,接口隔离,分两步。一,不该用的接口不用。二,满足条件的接口选规模最小的。
6.D---Dependency Inversion Principle即依赖倒置原则
主要强调两个方面:1.高层不依赖低层,它们都该依赖于抽象。2.具体依赖于抽象,抽象不依赖于具体。其实归根结底还是第二点,我们编程应该是考虑抽象的去编程。具体实现是具体实现的事。只要抽象的接口定义好就是成功的。
这种东西说来说去没做过几个项目还是没感觉,像我这样缺乏项目经验的人就云里雾里的。总结的东西希望在将来实战中遇到他们的时候可以会心一笑