找回密码
 立即注册
首页 业界区 业界 难免的尴尬:代码依赖

难免的尴尬:代码依赖

怀陶宁 4 天前
相关文章连接

动力之源:代码中的泵
高屋建瓴:梳理编程约定
编程之基础:数据类型(一)
编程之基础:数据类型(二)
可复用代码:组件的来龙去脉
重中之重:委托与事件
物以类聚:对象也有生命
难免的尴尬:代码依赖


  • 12.1 从面向对象开始

    • 12.1.1 对象基础:封装
    • 12.1.2 对象扩展:继承
    • 12.1.3 对象行为:多态

  • 12.2 不可避免的代码依赖

    • 12.2.1 依赖存在的原因
    • 12.2.2 耦合与内聚
    • 12.2.3 依赖造成的尴尬

  • 12.3 降低代码依赖

    • 12.3.1 认识抽象与具体
    • 12.3.2 再看“依赖倒置原则”
    • 12.3.3 依赖注入

  • 12.4 框架中的“代码依赖”

    • 12.4.1 控制转换
    • 12.4.2 依赖注入对框架的意义

  • 12.5 本章回顾
  • 12.6 本章思考
在浩瀚的代码世界中,有着无数的对象,跟人和人之间有社交关系一样,对象跟对象之间也避免不了接触,所谓接触,就是指一个对象要使用到另外对象的属性、方法等成员。现实生活中一个人的社交关系复杂可能并不是什么不好的事情,然而对于代码中的对象而言,复杂的"社交关系"往往是不提倡的,因为对象之间的关联性越大,意味着代码改动一处,影响的范围就会越大,而这完全不利于系统重构和后期维护。所以在现代软件开发过程中,我们应该遵循"尽量降低代码依赖"的原则,所谓尽量,就已经说明代码依赖不可避免。
有时候一味地追求"降低代码依赖"反而会使系统更加复杂,我们必须在"降低代码依赖"和"增加系统设计复杂性"之间找到一个平衡点,而不应该去盲目追求"六人定理"那种设计境界。
    注:"六人定理"指:任何两个人之间的关系带,基本确定在六个人左右。两个陌生人之间,可以通过六个人来建立联系,此为六人定律,也称作六人法则。
12.1 从面向对象开始

在计算机科技发展历史中,编程的方式一直都是趋向于简单化、人性化,"面向对象编程"正是历史发展某一阶段的产物,它的出现不仅是为了提高软件开发的效率,还符合人们对代码世界和真实世界的统一认识观。当说到"面向对象",出现在我们脑海中的词无非是:类,抽闲,封装,继承以及多态,本节将从对象基础、对象扩展以及对象行为三个方面对"面向对象"做出解释。
    注:面向对象中的"面向"二字意指:在代码世界中,我们应该将任何东西都看做成一个封闭的单元,这个单元就是"对象"。对象不仅仅可以代表一个可以看得见摸得着的物体,它还可以代表一个抽象过程,从理论上讲,任何具体的、抽象的事物都可以定义成一个对象。
12.1.1 对象基础:封装

和现实世界一样,无论从微观上还是宏观上看,这个世界均是由许许多多的单个独立物体组成,小到人、器官、细胞,大到国家、星球、宇宙, 每个独立单元都有自己的属性和行为。仿照现实世界,我们将代码中有关联性的数据与操作合并起来形成一个整体,之后在代码中数据和操作均是以一个整体出现,这个过程称为"封装"。封装是面向对象的基础,有了封装,才会有整体的概念。
1.png

图12-1 封装前后
如上图12-1所示,图中左边部分为封装之前,数据和操作数据的方法没有相互对应关系,方法可以访问到任何一个数据,每个数据没有访问限制,显得杂乱无章;图中右边部分为封装之后,数据与之关联的方法形成了一个整体单元,我们称为"对象",对象中的方法操作同一对象的数据,数据之间有了"保护"边界。外界可以通过对象暴露在外的接口访问对象,比如给它发送消息。
通常情况下,用于保存对象数据的有字段和属性,字段一般设为私有访问权限,只准对象内部的方法访问,而属性一般设为公开访问权限,供外界访问。方法就是对象的表现行为,分为私有访问权限和公开访问权限两类,前者只准对象内部访问,而后者允许外界访问。
[code] 1 //Code 12-1 2 class Student //NO.1 3 { 4     private string _name; //NO.2 5     private int _age; 6     private string _hobby; 7     public string Name //NO.3 8     { 9         get10         {11             return _name;12         }13     }14     public int Age15     {16         get17         {18             return _age;19         }20         set21         {22             if(value

相关推荐

您需要登录后才可以回帖 登录 | 立即注册