zoukankan      html  css  js  c++  java
  • 面向对象(oo)分析设计思想

    前言

    在阅读下文时,先列举一下10个面向对象理论,看看自己掌握了多少。
           避免重复,DRY(Don’t repeat yourself):  如果你准备在不同地方写同一段代码,那么只写一个方法。如果你不止一次硬编码某个值,那么将其声明成public final常量。这么做的好处就是容易维护。但是不要滥用这一条,重复不是指代码的重复,而是指功能的重复。
         将变化封装起来:所以最好将你觉得将来会有改变的代码封装起来。这样做的好处就是更容易测试和维护正确的被封装的代码。
        开放且封闭的设计理论(Open Closed Design Principle):类、方法以及功能应该对扩展开放(新的功能),而对更改封闭。软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。
        单一责任原理(Single Responsibility Principle (SRP)):每次一个类只有一个更改的原因,或者一个类只应该完成单一的功能。如果你将多过一个功能放在一个类中,它会将两个功能耦合在一起,如果你改变了其中的一个功能,可能会破坏另外一个功能,这样便需要更多的测试以确保上线时不出现什么岔子。
       依赖注入或反转原理(DIP The Dependency Inversion Principle):高层模块不应该依赖于低层模块,二者都应该依赖于抽象 ; 抽象不应该依赖于细节,细节应该依赖于抽象 ;容器会提供依赖注入,Spring非常好的实现了依赖注入。
      多用组合,少用继承:组合(接口继承,纯虚类)的灵活性高过继承。组合可以在运行时通过设置某个属性以及通过接口来组合某个类,我们可以使用多态,这样就能随时改变类的行为,大大提高了灵活性。
      Liskov替代原理(Liskov Substitution Principle (LSP)):当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有is-A关系 
      接口分离理论(Interface Segregation principle (ISP)):不能强迫用户去依赖那些他们不使用的接口。换句话说,使用多个专门的接口比使用单一的总接口总要好;如果客户端没有使用一个接口(不使用的接口)的话,就不要实现它。当一个接口包含两个以上的功能,如果客户端仅仅需要其中某个功能,而不需要另外一个,那么就不要实现它(总接口)。
      针对接口编程,而不是针对实现编程:尽量针对接口编程,这样如果要引入任何新的接口,也有足够的灵活性。在变量的类型、方法的返回类型以及参量类型中使用接口类型。
     代理理论(Delegation principle):不要所有的事情都自己做,有时候要将任务代理给相应的类去做。运用代理模式最经典的例子就是equals()和hashCode()方法。为了比较两个对象的相等与否,我们没有用客户端代码去比较,而是让对象自己去比较。

    正文

    1.面向对象(oo)

     a.什么是面向对象(Object):object是指一个具体的事物的实例

     b.面向对象的概念:

     Object oriented:指面向客观事物之间的关系(对象与对象)

     面向对象的定义:根据用户需求抽象出业务对象,然后再根据需求进行合理划分;形成相对独立的业务功能,之后再设计业务逻辑。利用面向对象的特点(封装、抽象、继承、多态)的编程思想实现业务需求,最后通过每个业务之间功能的关系进行整合,从而满足客户的要求。

    在分析项目业务关系的时候,应用一些UML(Unified Modeling Language)图,例如常用的用例图(use case diagram),类图(class diagram),时序图(sequence diagram)等等,会有很大的帮助,这样能尽快找出业务逻辑主要面对的对象,然后对每个对象进行行为划分,最后再实现对象之间的集成和通信。

    2.面向对象分析设计(object oriented analysis design) 是现代软件企业广泛采用的一种有效技术。

     a.方法:要求设计中要映射现实世界中指定的问题域中的对象和实体。

     b.优点:能够构建于现实世界相对应的问题模型。并且能够保持它们的结构、关系和行为的一种编程思想。

    c.面向对象中的概念:

    a.类型(类):名词

    b.引用(变量):用来指向具体东西的代词

    c.对象:指具体概念的个体实例

    d.行为:方法、动作。

    e.多态:行为多态,通过相同的动作完成的,但是完成结果不同;引用多态,同一个代词指代对象不同。

    f.封装:任何对象实例都是尽可能的保护其内部的具体实现,减少暴露。他的实现细节补血药其他对象关注。比如:汽车的发动机。

    总结

    1.就先从我今天使用Beyond Compare 3比对工具说起,今天,我对该工具有了更生层次的领悟:它用于是发现跟自己的cr无关的代码,让我们测试过的代码上生产。
    2.第二点是,关于代码的特殊处理,针对临时代码,我们需要详细注释,尤其是uat测试的临时代码,应写在组件里面,以便uat写死的数据可以方便的在上生产时去掉;当然组件加些自我检测的代码更好。不要因为环境的问题而导致程序不一致,要将应用处理的逻辑分离出来。减少与环境的关联性
    3.程序员看待开发:
    心中要当作没有测试环节(uat测试),程序质量不要依赖后续的测试,即使测试通过,并不代表版本正确。要从设计保证质量
    4谈谈关于程序的维护:
    关联和独立性,第一,代码中经常动的和不经常动的要分离;第二业务经常变化和不变化的分离。
    注:只测试变动的代码,并不是完整的测试,尤其是耦合度高的代码更是如此。
    5.读代码也是测试的一种方法,大脑可以带数据的测试。
    6.S.O.L.I.D是面向对象设计和编程(OOD&OOP)中几个重要编码原则(Programming Priciple)的首字母缩写
    SRP(The Single Responsibility Principle )单一责任原则;OCP(The Open Closed Principle )开放封闭原则;LSP(The Liskov Substitution Principle)里氏替换原则;DIP(The Dependency Inversion Principle)依赖倒置原则;SP (The Interface Segregation Principle)接口分离原则


    博客:https://kunnan.blog.csdn.net
  • 相关阅读:
    php 单双引号的区别
    SpringBoot动态代理使用Cglib还是jdk的问题
    SpringBoot MyBatis 一级缓存和二级的配置理解
    SpringBoot+MyBatis,显示SQL方式
    java lambda分页
    关于Spring的@Value注解使用Integer方式
    mysql死锁,等待资源,事务锁,Lock wait timeout exceeded; try restarting transaction解决
    关于Integer包装类对象之间值的比较
    你未必了解的DNS
    SpringCloudConfig报错Cannot clone or checkout repository:https://gitee.com/yanfa401/config-repo
  • 原文地址:https://www.cnblogs.com/zhang_kun_nan/p/3636510.html
Copyright © 2011-2022 走看看