美文网首页
面向对象编程和面向过程编程

面向对象编程和面向过程编程

作者: YQ_1024 | 来源:发表于2024-01-13 10:35 被阅读0次

    面向对象的三大基本特性

    • 封装
      将现实世界中的事物抽象成类。通过类的维度来管理事物的属性和行为,便于对现实事物映射的代码进行理解、维护
    • 继承
      映射现实世界的继承关系,在编程的角度上来说就是为了达到代码的复用
    • 多态
      一个接口的实现有多种,具体的方式需要在Runtime的时候根据接口的实现类来确定。可以达到调用方和实现方解偶目的。

    面向对象和面向过程的对比

    • 面向对象编程
      利用封装将对象的属性和行为封装在一起,这里体现了高内聚的思想。由对象来承载这些行为和数据,同时可以选择暴露和不暴露一些细节,便于API的提供者更改实现细节。
      利用继承的特性,减少代码量,实现代码的复用;利用重载自定义某些实现。
      利用多态搭建执行过程,解偶具体实现。
    • 面向过程编程
      将行为和数据通过函数进行封装,没有多态和继承的支持。对于代码的组织和开发没有面向对象语言方便。比如:多人同时开发,面向对象的语言可以先申明接口给合作者使,合作者不关心具体实现。这样可以达到并行开发和任意切换实现的目的。

    继承和实现

    在java中,接口可以继承接口,抽象类可以实现接口,抽象类也可以继承具体类。普通类可以实现接口,普通类也可以继承抽象类和普通类。
    ps:java中的字段只可以被继承。不能被覆盖。如果子类和父类有相同的字段。这个时候只会根据调用的类型进行确认。

    面向对象的五大原则

    • 单一职责原则
      一个类最好只干一件事。
      提高可维护性:当一个类只负责一个功能时候,提实现逻辑通常清晰。让代码的理解和维护变得简单。修改一个代码的时候不用考虑其他的影响点
      减少代码修改的影响:修改代码不会影响其他地方。减少了代码对其他其他部分的影响。
      ps:单一职责原则在spring中的使用


      BeanFactory—UML.png

      我们都知道,spring中的bean有原型、单例等scope.其中的单例是通过SingletonBeanRegistry来实现的,下面是对该接口的官方解释。

    Interface that defines a registry for shared bean instances. Can be implemented by org.springframework.beans.factory.BeanFactory implementations in order to expose their singleton management facility in a uniform manner.

    而BeanFactory的职责是用来访问容器bean的。下面是官方解释

    The root interface for accessing a Spring bean container.
    This is the basic client view of a bean container; further interfaces such as ListableBeanFactory and org.springframework.beans.factory.config.ConfigurableBeanFactory are available for specific purposes.
    可见,由于beanfacatory和单里注册本质是两个不同的职责,Spring的BeanFacroty接口没有声明和单里注册相关的方法,甚至BeanFacroty接口都没有继承SingletonBeanRegistry。只是AbstractBeanFactory组合使用了两个接口。

    • 开闭原则
      对扩展开发对修改关闭
      也就是需要留有扩展点,预见可能需要扩展和自定义的部分,留出口子进行扩展。避免修改已经编写好的逻辑
      ps:spring中提供了很多扩展点,可以自定义bean的特性。如常见的BeanPostProcessor。其中AutowiredAnnotationBeanPostProcessor就是用于实现@Autowired自动注入的。Dubbo与Spring框架的集成也是依赖于Spring提供的BeanPostProcessor机制,实现服务的发布和客户端对象的动态代理生成。者一切原因都是因为Spring在实现的时候设计了正确的开闭原则。
      以下BeanPostProcessor的官方说明

    Factory hook that allows for custom modification of new bean instances — for example, checking for marker interfaces or wrapping beans with proxies

    • 里氏替换原则
      子类必须能够替换其父类
      保证多态的特性,保证代码在面向接口编程中的可互换性。
    • 依赖倒置原则
      程序要依赖接口,不要依赖实现
      减小系统的耦合
    • 接口隔离原则
      接口也要满足单一职责原则。使用多个小的专门接口,而不是一个大的总接口。
      减少系统的耦合:使用小的接口避免系统依赖不相关的部分
      提升系统的稳定性:更高和实现小接口比大接口风险小
      ps:还行拿Spring举例:


      ApplicationContext.png

      在spring中我们熟悉的ApplicationContext是由多个小而细的职责明确的接口组合而成。其中的某个接口实现再后期可以轻松的使用其他实现替换。

    相关文章

      网友评论

          本文标题:面向对象编程和面向过程编程

          本文链接:https://www.haomeiwen.com/subject/zepfodtx.html