面试对线记录2 如何理解面向对象

这个问题真的是逢面必问,而且我真的每次都答不好,所以我要在博客上记录一下,总的来说,面向对象有四大特性:抽象,继承,封装,多态;

  1. 抽象按照我的理解,就是将一类对象的共同特征总结出来构造类的过程,抽象的话可以分成数据抽象和行为抽象,抽象只关注对象的属性和行为,不关注具体的实现;
  2. 封装就是把数据和操作数据的方法绑定在一起,对数据的访问只能通过特定的接口来访问,说白了就是隐藏具体的实现,只给外人一个可以用的接口,这样子可以提高代码的复用性和安全性。
  3. 继承的话就是说很多类都有一种或者一类相同的属性和行为时,就可以把他们抽取到一个类中,这些类不用挨个定义这些属性和行为,直接从这个类继承即可。
  4. 多态的话就是是由继承产生的不同的类,其对象对同一消息会做出不同的响应,简单的来说就是龙生九子,各有不同的意思。 接下来就是一些我在网上学习这一部分的东西时,我查到的虽然这几天面试官没有跟我对线过程中问道的,也可能跟面试官对线过程中遇到的一个基础问题:面向对象的五大设计原则;
  5. 单一职责原则 说白了就是在设计类的时候,只让他干一个或者说一类的事情,不要分配太多的东西给一个类,每个类只设计一种功能就好了,因为功能多了的话,到了后面维护的时候简直是一场灾难,这个维护的工作落到谁手里,谁就会骂娘。。。。。(我就遇到过这种事情)
  6. 开放封闭原则 按照我的理解,就是说我们在设计类的时候,我们要对扩展开放,要对修改封闭,说白了就是类设计完了以后,就可以独立完成工作,不用进行一些修改; 但是在面对新的需求的时候,我们就可以对类做出良好的扩展,以适应新的情况。
  7. 里氏代换原则 emmm,这个说白了,就是对上面说的继承的具体描述,在一个稳定运行的系统中,子类可以直接代替基类进行正常服务,但是基类不能替换子类,因为子类有一些完全不同与基类的特征,按照我的理解,就是多态
  8. 依赖倒置原则 就是说白了,要在脑壳中形成一个金子塔的形象,顶层就是抽象,下层是具体,或者说一个树,树根就是抽象,是面向具体的根基,而具体就是从根上长出来的各种枝杈。具体描述就是高层模块不能依赖于底层模块,这些模块应该都依赖于抽象,抽象不依赖具体,而具体依赖抽象。(很拗口,哈哈哈哈哈哈),平时在软件过程设计过程中,如果两个或者多个类,模块都存在紧密的耦合关系的话,我们可以考虑将他们分离开来,形成接口和实现,也就是说在依赖之间定义一个抽象的接口,然后高层的模块可以调用这个接口,底层模块可以继承并且实现这个接口,通过这样子降低耦合关系,维持住抽象的稳定性。也就是面向接口编程。
  9. 接口隔离原则 这个原则有点像是单一职责原则的补充,就是说我们在设计接口的时候要使得每个接口的功能偏单一一些,不要使得一个接口内部的功能函数拥有太多种的功能,因为一个类和另一个类的依赖应该建立在最小的接口上,如果他继承了一个胖接口,但是有些其他种类的功能用不到,如果以后系统庞大起来,对这个胖接口进行更改的话,对整个系统的影响就好像一颗老鼠屎坏了一锅粥一样的级别。所以按照实际情况不要设计胖接口。