• 面向对象初步总结


     前言:

    新技术层出不穷,让人有点应接不暇,岁月在一天一天老去,让人有点跟不上时代的感觉,如果让自己“宝刀未老”,很多人都想过这个问题,我们不可能学会所有的技术,也不可能像国外程序员做到四五十岁,国内有三十岁转行的说法。如何保持自己的核心竞争力呢?什么是核心竞争力呢?毋庸置疑,经验和思想。OO就是一种思想,研发思想是可以传承的,未来一段时间是主流的开发思想。所以学好OO还是有前途+钱途。

    概况:

    主要讲解以下知识

    1.为什么要使用面向对象?(与面向过程比较)

    2.面向对象特点?

    3.面向对象分OOA 、OOD、OOP 各部分作用?(结合设计模式各自在研发过程的中的应用)

    第一为什么要使用OO?

    面向过程:把问题看做一系列需要完成的任务,按照一定顺序进行解决。实质:函数的逐步执行

    缺点:

    1.软件的重用性差:相同代码复制多次应用 vs OO中 代码重用(继承)、设计、分析模型的重用(思路的重用)

    2.可维护性差:实践证明,用面向过程开发出的软件,维护时费用和成本很高,因其可修改性差,维护难度增加  vs OO代码可读性好,由于继承存在,即使需求有变,局部代码修改

    3.满足用户需求性差 结构化开发软件,本质就是分解,自顶向下大系统分解小系统。结构化的功能基于“过程” 来构造系统,如果用户需求变化了,对设计来说是灾难性的,付出代价较大 vs OO 需求变化很正常,因为人的思想在变化,整个世界都在变化,OO 提供对需求不断的优化、重构、升级(常用工厂模式)。以对象为中心去处理问题。

    除此之外:OO易于扩展,由于继承、封装、多态的特性,可以设计出高内聚、低耦合的系统,这样易于扩展、升级

    第二 面向对象特点?

    封装、继承、多态:重载和覆盖(详见:http://www.cnblogs.com/lei2007/archive/2013/06/14/3135351.html

    第三面向对象分OOA 、OOD、OOP 各部分作用?(结合设计模式各自在研发过程的中的应用)

    OOA:提取用户需求的过程,这个过程关键识别对象、分析对象属性、明确各个对象之间关系、uml展示 forOOD

    OOD:面向对象设计应遵循的原则:

    1. 单一职责原则 SRP:一个类只能承担一个职责,身兼数职,造成高耦合。

    2. 开放封闭原则OCP:“对扩展开放,对修改封闭”,即:“被调用者开放扩展,调用者封闭修改”, 实现开开放封闭原则的核心思想就是对抽象编程.对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对其进行任何尝试的修改。例如:Door对象是被其它对象例如人People调用,那么Door就是被调用者,People就是调用者。Door对象可以扩展为“防盗门”、“防火门”、“逃生门”等,但People在调用的时候不需要关注具体是什么门,只需要调用这些门公共的“开门、关门”等操作即可。

    3.替换原则LSP:    其核心思想是:子类必须能够替换其基类。这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。

    4.依赖反转原则DIP:核心思想是:依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。基于接口编程,而不是基于实现编程

    5.接口隔离原则ISP:核心思想是:使用多个小的专门的接口,而不要使用一个大的总接口. 具体而言,接口隔离原则体现在:接口应该是内聚的,应该避免“胖”接口。一个类对另外一个类的依赖应该建立在最小的接口上,不要强迫依赖不用的方法,这是一种接口污染。

    总结:针对接口编程,而不是针对实现编程

    (结合:http://blog.csdn.net/yunhua_lee/article/details/5105524

    OOP:面向对象编程是一种实现方法,每个对象代表某一个类的实例进行研发

    结合设计模式:

    如果仅仅使用工厂模式,在判断使用哪一个工厂的时候,仍然需要条件判断,一旦增加工厂类,又要改变客户端实例代码。为了解决这个问题,我们可以使用反射技术+条件外置(config配置项)做到客户端更加灵活。始终就是 抽象工厂模式。

    抽象工厂模式:提供了一系列相关或相互依赖对象的接口,而不需要明确指定具体类(将抽象工厂类中的条件判断语句,用.NET中反射机制代替)

      例如:肯德基和麦当劳都是工厂,都有一系列产品(汉堡,可乐,薯条)

    总结

    使用OO,必须站在一定高度,同时结合现实定义对象。高屋建瓴勾勒出软件架构全貌。从软件工程的角度来看,在设计时结合客户需求、具体业务,定义对象、属性、行为、哪些需要封装、哪些需要暴露接口。结合业务,否则设计变成空中楼阁。

     ps:面向对象、面向接口、面向方面区别:

      面向对象编程就是一堆对象,通过封装、继承、多态等更加有效的组织程序。(面向对象是对复杂问题的分解) 
    面向接口编程就是一堆接口,通过接口规约对象的属性和方法,是面向对象一部分。 
      面向方面的编程是一种新概念,它解决了很多面向对象无法解决的问题,比如面向对象技术只能对业务相关的代码模块化,而无法对和业务无关的代码模块化。而面向方面正是解决这一问题的方案,
      它的关键思想是"将应用程序中的商业逻辑与对其提供支持的通用服务进行分离"。

    tks:李天平老师的《亮剑.net》

  • 相关阅读:
    零拷贝
    RxJava2源码解析
    一次博客崩溃日志分析
    Spring循环依赖的解决
    解决网络卡顿问题
    软工第一次作业
    3月26-27号训练笔记
    Codeforces Round #708 (Div. 2)题解A,B,C1,C2,E1,E2
    求出所有LIS的可行起点
    2020小米邀请赛决赛补题G,I,J(三DP)
  • 原文地址:https://www.cnblogs.com/lei2007/p/3264913.html
Copyright © 2020-2023  润新知