面向对象与面向过程
类就是一种非常好的组织这些函数和数据结构的方式,是一种将代码模块化的有效手段。你可能会说,像 C 语言这种面向过程的编程语言,我们也可以按照功能的不同,把函数和数据结构放到不同的文件里,以达到给函数和数据结构分类的目的,照样可以实现代码的模块化。你说得没错。只不过面向对象编程本身提供了类的概念,强制你做这件事情,而面向过程编程并不强求。
利用面向过程的编程语言照样可以写出面向对象风格的代码,只不过可能会比用面向对象编程语言来写面向对象风格的代码,付出的代价要高一些。
[design pattern, programming language, programming paradigm]
OOP四大特性
封装 : 封装特性存在的意义,一方面是保护数据不被随意修改,提高代码的可维护性;另一方面是仅暴露有限的必要接口,提高类的易用性。
抽象: 抽象存在的意义,一方面是提高代码的可扩展性、可维护性,修改实现不需要改变定义,减少代码的改动范围;另一方面,它也是处理复杂系统的有效手段,能有效地过滤掉不必要关注的信息。
继承: 继承主要为了多态,和用来解决代码复用的问题。
多态: 多态可以提高代码的扩展性和复用性,是很多设计模式、设计原则、编程技巧的代码实现基础。
java中多态的三种实现方式: 继承,抽象类,接口。有些动态语言如Python还有duck type这种实现方式。c中可以通过指针模拟多态。继承不一定就能实现多态,继承+重写才能实现多态,但这样会违反里氏替换法则。
抽象类更多的是为了代码复用,而接口就更侧重于解耦。可以用类或抽象类模拟接口: 普通类定义所有方法的内容为,不支持该方法异常。抽象类只使用抽象方法。
[OOP, programming language, programming paradigm]
