zoukankan      html  css  js  c++  java
  • 0.面向对象分析与设计学习

      三年前刚转.Net的时候买了几本关于面向对象的书,下载了李建忠老师的<C#面向对象设计模式纵横谈>的视频教程,硬着头皮看看了几章,虽然看的时候能够记住一些基础的概念,可过后很快又忘记了....显然是没有真正的理解,就这样反反复复看了几次最后还是放弃了。三年之后一个无聊的晚上,再一次打开教程,以前觉得难以记住的概念以及一些奇怪的设计原则,现在看来似乎 已经不那么难理解了。突然间觉得自己终于入门了....三年项目的磨练,虽然时间有点长.但总算是有进步...

      闲话不多说,下面是这次重新学习的一些笔记及心得:

      一、面向对象的三大特性:封装,继承,多态. 这是三个在各种书籍上被说烂的词语。可要真正理解起来却没那么简单,这一点我是深有体会。

      封装(Encapsulation隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。回头看下这三年的编程经历,虽然有在不断的重构代码,但是并没有刻意地去封装一些比较通用的类,以致于每次需要复用代码时都要费一翻功夫。为了避免这样的悲剧,我已经慢慢的注意平时开发中遇到的一些通用类及接口的整理及封装。路漫漫其。。。

      继承(Inheritance):指一个对象直接使用另一对象的属性和方法,简单的说就是复用现有代码。下面是继承的一些原则: 

      1. 继承是可以传递的。如果C从B中派生,B又人A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中的成员。Object类作为所有类的基类。
      2. 派生类应当是对基类的扩展。派生类可以添加新的成员,但不能除去已经继承的成员定义。 
      3. 构造函数和析构函数不能被继承。除此以外的其它成员,不论对它们定义了怎样的访问方式,都有能被继承。基类中的成员的访问方式只能决定派生词类能否访问它们。
      4. 类可以定义虚方法、虚属性以及虚索引指示器,它的派生类能够重载这些成员,从而实现类可以展示出多态性。

      多态(Polymorphism:在C#中,多态的定义是:同一操作作用于不同的类实例,不同的类将进行不同的解释,最后产生不同的执行结果。两种类型的多态:

      1. 编译时的多态性:编译时的多态性是通过重载来实现的。对非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。
      2. 运行时的多态性:运行时的多态就是直接到系统运行时,才根据实际情况决定实现何种操作。C#中,运行时的多态性通过此类成员实现。

      二、面向对象的一些设计原则

      单一职责原则(SRP):

      一个类应该只有一个使它发生变化的原因。

      开闭原则(OCP):

      软件实体(类、模块、函数等)应该是可以扩展的,但是不可惜修改。

      Liskov替换原则(LSP):

      子类型必须能够替换掉它们的基类型。

      依赖倒置原则(DSP):

      抽象不应该依赖于细节,细节应该依赖于抽象。

      接口隔离原则(ISP):

      不应该强迫客户依赖于它们不用的方法,接口属于客户,不属于它们所在的类层次结构。

      重用发布等价原则(REP):

      重用的粒度就是发布的粒度。

      共同封闭原则(CCP):

      包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,   则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。

      共同征用原则(CRP):

      一个包中的所有类应该是共同征用的。如果征用了包中的一个类,那么就要征用包中的所有类

      无环依赖原则(ADP):

      在包的依赖关系图中不允许存在环。

      稳定依赖原则(SDP):

      朝着稳定的方向进行依赖。

      稳定抽象原则(SAP):

      包的抽象程序应该和其稳定程度一致。

      三、  

      

  • 相关阅读:
    Java必会之多线程
    第一周JVM核心技术-工具与GC策略
    JVM核心技术(第一篇)
    SpringCloudAlibaba使用seata做分布式事务
    Go中的interface(接口)
    快排与堆排
    优先队列原来不难!带你手写一个
    【LeetCode】557. 反转字符串中的单词 III
    【LeetCode】214. 最短回文串
    【LeetCode】17. 电话号码的字母组合(回溯)
  • 原文地址:https://www.cnblogs.com/lindj0307/p/2596847.html
Copyright © 2011-2022 走看看