zoukankan      html  css  js  c++  java
  • 为什么使用面向对象编程

                                                                                                              为什么使用面向对象编程

       因为面向对象编程基于7大原则编写,  这让用面向对象编程编写的程序有了可扩展,可维护,可复用的效果,更灵活一些。 

         7大原则:

             (网上看的,解释是自己的理解,不一定对,标准的请上网上)

                1、单一职责原则SRP(Single Responsibility Principle)
                 一个类只负责它本身的功能    这样可以降低类的复杂度,每个类都有了专属的作用,阅读,修改,排错时都更容易            

                2、开放封闭原则OCP(Open-Close Principle)
                就是写基本代码时写好一个基本的架构,然后可以在需要的时候添加新的类来完成新的功能或要求,但是原有的代码不进用(也最好不能)行更改。就是只能        加,不能改。(为了未来的要求而写)
               3、里氏替换原则(the Liskov Substitution Principle LSP)
                  子类应当可以替换父类并出现在父类能够出现的任何地方。

              4、依赖倒转原则(the Dependency Inversion Principle DIP)

                 (没看懂,大意好像是让具体实现功能的类依赖抽象类(父类)或接口,接口和抽象类是更底层的代码,而实现功能的是高层类)
                  具体依赖抽象,上层依赖下层。假设B是较A低的模块,但B需要使用到A的功能,
                 这个时候,B不应当直接使用A中的具体类: 而应当由B定义一抽象接口,并由A来实现这个抽象接口,B只使用这个抽象接口:这样就达到
                 了 依赖倒置的目的,B也解除了对A的依赖,反过来是A依赖于B定义的抽象接口。通过上层模块难以避免依赖下层模块,假如B也直接依赖A的实现,那么就可                   能造成循环依赖。一个常见的问题就是编译A模块时需要直接包含到B模块的cpp文件,而编译B时同样要直接包含到A的cpp文件。

    5、接口分离原则(the Interface Segregation Principle ISP)

    (一样不太懂) 
    模块间要通过抽象接口隔离开,而不是通过具体的类强耦合起来。即面向接口编程

    6、“迪米特”法则

    (。。。。。。。。是类应该尽量独立的意思吗? 应该就是上边的接口分离类似,一个隔离模块,一个让类尽可能独立,功能单一性? 单一职责原则?)


    又叫最少知识原则,就是说,一个对象应当对其他对象有尽可能少的了解
    ① 在类的划分上,应该创建有弱耦合的类;
    ② 在类的结构设计上,每一个类都应当尽量降低成员的访问权限;
    ③ 在类的设计上,只要有可能,一个类应当设计成不变类;
    ④ 在对其他类的引用上,一个对象对其它对象的引用应当降到最低;
    ⑤ 尽量降低类的访问权限;
    ⑥ 谨慎使用序列化功能;
    ⑦ 不要暴露类成员,而应该提供相应的访问器(属性)。

    7、.组合/聚合原则(泛型集合的类型是一个类,这个类又有其他类的集合包含在里面,这个算么?)

    又叫合成复用原则。原则就是在一个新的对象里面通过关联关系(包括组合关系和聚合关系)使用一些已有的对象,使之成为新对象的一部分,新对象通过委派调用已有对象的方法达到复用其已有功能的目的。也就是,要尽量使用类的合成复用,尽量不要使用继承。

    就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象通过向这些对象的委派达到复用已有功能的目的。这个原则有一个简短的描述:要尽量使用合成、聚合,尽量不要使用继承。

    1)  新对象存取成分对象的唯一方法是通过成分对象的接口

    2)  这种复用是黑箱复用,因为成分对象的内部细节是新对象所看不到的

    3)  这种复用可以在运行时间内动态进行,新对象可以动态的引用与成分对象类型相同的对象

    4)  合成、聚合可以应用到任何环境中去,而继承只能应用到一些有限环境中去

    5)  导致错误的使用合成、聚合与继承的一个常见原因是错误的把“Has-a”关系当作“Is-a”关系。如果两个类是“Has-a”关系那么应使用合成、聚合,如果是“Is-a”关系那么可使用继承

    在面向对象设计中,可以通过两种基本方法在不同的环境中复用已有的设计和实现,即通过组合/聚合关系或通过继承。

    1)   继承复用:实现简单,易于扩展。破坏系统的封装性,从基类继承而来的实现是静态的,不可能在运行时发生改变,没有足够的灵活性;只能在有限的环境中使用。(“白箱”复用 )

    2)   组合/聚合复用:耦合度相对较低,选择性地调用成员对象的操作;可以在运行时动态进行。(“黑箱”复用 )

    组合/聚合可以使系统更加灵活,类与类之间的耦合度降低,一个类的变化对其他类造成的影响相对较少,因此一般首选使用组合/聚合来实现复用;

    其次才考虑继承,在使用继承时,需要严格遵循里氏代换原则,有效使用继承会有助于对问题的理解,降低复杂度,而滥用继承反而会增加系统构建和维护的难度以及系统的复杂度,因此需要慎重使用继承复用。

                     

                  总结面向对象编程:就是面向对象(对像:男朋友或女朋友),他/她的要求才是你编程的方向,你得面向他/她才行,或者说是面向要求编程,对象就是一个实实在在的存在,你要考虑到他的各种需求。

                那为什么要面向对象编程那:就是考虑了一些可能的情况,在将来需要的时候更容易完成,在单一的,隔离,开放封闭等这样的基础下复用性更强,更简单。

                                对于面向对象的7大原则的理解,我还差的太远,只是刚知道而已,更别提面向对象编程了,在做书上的项目时就经常疑惑,自己写的好像不是面向对象。

      不过这篇文章我会随着理解的加深,一点点的补上自己对7大原则的看法,也许得一直写吧。

               

      


  • 相关阅读:
    mysql中字符集和排序规则说明
    结束进程的批处理文件
    内有干货!2个人3个月怎样从零完毕一款社区App《林卡》
    九度OJ 1006 ZOJ问题 (这题測试数据有问题)
    简易版的堆的写法
    hbase
    JNDI配置c3p0连接池
    [effictive c++] 条款04 确定对象被使用前已被初始化
    第九十五题(推断一字符串是不是对称的)
    OpenFace库(Tadas Baltrusaitis)中基于Haar Cascade Classifiers进行人脸检測的測试代码
  • 原文地址:https://www.cnblogs.com/xiangtianxiayu/p/4827736.html
Copyright © 2011-2022 走看看