一种计算机编程架构,面向对象编程

如何面向对象编程?
先让我知道面向对象的三个特性:封装封装是把客观事物封装成抽象的类 , 并且类可以把自己的数据和方法只让可信的类或者对象操作 , 对不可信的进行信息隐藏 。换而言之 , 类是一个封装了它自身数据和操作这些数据的代码的抽象 。在类内部 , 某些代码或某些数据可以是私有的 , 不能被外界访问;也可以是私有的 , 能够被外界访问 。以此可以防止代码中意外改变或错误使用了类的私有部分 。
继承继承是让某个类获得另一个类的属性和方法 。它可以使用现有类的除了私有以外的所有功能 , 不需要重新编写原来的类的情况下对这些功能进行扩展 。通过继承创建的新类称为“子类” , 被继承的类称为“父类” 。继承概念的实现方式有两种:实现继承和接口继承 。实现继承是直接使用父类的属性和方法而不需要额外的编码;接口继承是仅使用属性和方法的名称 , 但子类必须实现父类的方法 。
多态多态是一个类实例的相同方法在不同情形有不同表现形式 。多态机制使具有不同内部结构的对象可以共享相同的外部接口 。这意味着 , 虽然针对不同对象的具体操作不同 , 但通过一个公共的接口 , 它们可以通过相同的方式予以调用 。多态概念的实现方式有两种:重载和重写 。重载是同一个类中有多个同名的方法 , 但是这些方法有着不同的参数 , 方法的内部实现也不同;重写是子类可以覆盖父类的方法 , 因此同样的方法会在父类和子类中有着不同的内部实现 。
面向对象编程的弊端是什么?
面向对象编程是一种处理复杂问题的设计工具 , 本身没有什么好坏之分 , 只有用的好坏之分 。但面向对象的问题在于长期以来的技术环境、编程语言、一些工具的推广、培训和教育都大大的过分乐观的强调了面向对象编程本身可以带来的好处 。以至于很多学习编程的人都深深的相信“只要用了面向对象编程(以及基于其基础之上的的一系列设计模式、规范、工具、框架) , 就能得到非常容易维护、可以复用、明晰可理解的代码“ 。
但 , 这并不是真的 。如果你经历过很多 , 就会发现“只要如何如何 , 就一定能如何如何”这个提法一旦出现 , 基本上就不靠谱 , 不管是编程还是别的什么事情 。在大量的场景中 , 可以偏执的认为“万物皆对象”(或者万物皆别的什么) , 但是哲学上的单纯并不一定能让现实中的工程变得更“好” 。如果说非得有个“万物皆XX” , 那么这个XX八成就是根据众多需求综合到一起的“折衷” 。
简单从工程讲的话 , 如果程序(或者说工作)是一次性的 , 那么怎么写得快 , 能work就怎么来 。这个相对好理解 。但是 , 如果程序是要长期维护的 , 那么如何管理其复杂性是核心的问题 。而管理复杂性的要点在于让事情本身变得简单 。这说白了就是砍需求 , 研发和PM之间要经常沟通去避免nice to have的需求变动带来的程序复杂性的剧烈变化(比如一个1对1的实体关系 , 需求变动一点就变成了麻烦的多的“有时1对1 , 有时1对多”的混合关系) 。
运用隔离的手段将复杂性拆解为互相影响很小的单元 。一个单元对外只暴露一个简单的“接口” , 隐藏内部复杂性 。这就是“抽象”或者“封装“的力量 。但是问题在于 , 这个抽象本身是否做的合适是由于问题决定的 , 而不是代码本身决定的 。即便是抽象 , 也有很多种做法 。可以定义一组接口 , 这个接口是一组函数、一组服务的RPC还是一个class的public method都可以根据实际情况商讨 。

推荐阅读