面向对象三大特征:“封装”,“继承”,“多态”码农们都能顺口念出,但设计模式的三大原则能准确说出的就不多了。这三大原则是“开放-封闭原则“,”里氏代换原则”和“依赖倒转的原则”。
开放---封闭原则:
软件实体可以扩展,但是不可以修改(当然错误是必须修改的,这里的修改常指需求改变、增加)。即对于开展是开放的,对于修改是封闭的。面对需求,对程序的改动是通过增加代码来完成的,而不是改动现有代码。
里氏代换原则
一个软件实体如果使用的是一个父类的话,那么一定适用于其子类。而且他察觉不出父类和子类对象的区别。也就是说:在软件里面把父类替换为子类,程序的行为没有变化。
依赖倒转原则
抽象不应该依赖细节,细节应该依赖抽象。即针对接口编程,不要实现编程。高层模块不能依赖低层模块,两者都应该依赖抽象。
依赖倒转原则是面向对象的标志,用哪种语言编写程序不重要,如果编写时考虑的是如何针对抽象编程而不是针对细节编程,即程序的所有依赖关系都终止于抽象类或接口。那就是面向对象设计,反之那就是面向过程的设计。
这三大原则和面向对象三大特征的关系? 三大原则的实现就是基于三大特征而来。
PS:
C能不能面向对象?
答案是肯定的,OOP是一种思想,跟语言无关,只是新兴编程语言发明时候就考虑了对面向对象的支持,提供了相关关键字和语法。作为拥有指针,能写操作系统内核的语言,面向对象难不倒C。
Linux把所有的设备都抽象为文件,对所有的设备的操作都可以通过对“文件描述符”的读写来实现,而不需要去了解其实现细节。这就是一种完美的OO设计。
C可以使用struct来实现封装,通过函数指针来实现成员函数。只包含函数指针成员的struct,就是一个完美的抽象接口实现。一个struct包含另一个struct这就实现了继承。当然实际使用上是肯定没有C#,Java,C++那么方便的,但C永远有它们比不过的地方。