`

面向对象的经典语录

 
阅读更多

 

         任何一个傻瓜都能写出计算机可以理解的程序,只有写出人类容易理解的程序才是优秀的程序员       ____Martin Flower《重构》

 

 

接口优点:

一个对象仅能通过其接口(功能)才会被其它对象所了解。

Client(客户端程序)不必知道其使用对象的具体所属类。 

松散藕合(loosens   coupling)

提高了(对象)组合的机率,因为被包含对象可以是任何实现了一个指定接口的类。

接口缺点:

设计的复杂性略有增加 

 

接口表示“…像…”(LikeA)的关系,继承表示“…是…”(IsA)的关系,组合表示“…有…”(HasA)的关系。

 

其实有些东西或许并没有你想象的那么复杂,现实生活中接口的例子也很多,例如插座,不管是电视机,还是冰箱,微波炉的插头都是可以插上去的,因为插头的规格是统一的(也就是接口),家电只要遵循插头的规格,就可以接到插座上去

 

只要软件架构师,软件工程师等设计了软件的整个架构和(或)类设计,定义接口之后,扔给下面的人去做具体的实现就可以了...

 

比如一个方法里面有读数据库的需要,传入参数为IDataReader接口,实际调用时,可以传入SqlDataReader对象,也可以传入OracleDataReader对象,数据库由SQLserver变为Oracle,此方法不需要作任何修改

 

 

================================================

 

设计模式是“封装变化”思想的最佳阐释。无论是创建型模式、结构型模式还是行为型模式,归根结底都是寻找软件中可能存在的“变化”,然后利用抽象的方式对这些变化进行封装。

 

 

有些代码不是给客户用的,而是给开发人员用的

 

已有软件模块,特别是最重要的抽象层模块不能再修改,使变化中的软件系统有一定的稳定性和延续性

接口(interface),抽象类的应用对可变性封装:将可变性封装到一个对象里。

不允许更改的是系统的抽象层,而允许更改的是系统的实现层。

 

要依赖于抽象,不要依赖于具体。

抽象不应当依赖于细节;细节应当依赖于抽象;

要针对接口编程,不针对实现编程。

传递参数,或者在组合聚合关系中,尽量引用层次高的类。

 

使用多个专门的接口比使用单一的总接口总要好。换而言之,从一个客户类的角度来讲:一个类对另外一个类的依赖性应当是建立在最小接口上的。

过于臃肿的接口是对接口的污染。

每一个接口应该是一种角色,不多不少,不干不该干的事,该干的事都要干。

过大的类往往是类抽象不合理的结果,类抽象不合理将降低了代码的复用率。方法是类王国中的诸侯国,诸侯国太大势必动摇中央集权。过长的方法由于包含的逻辑过于复杂,错误机率将直线上升,而可读性则直线下降,类的健壮性很容易被打破。当看到一个过长的方法时,需要想办法将其划分为多个小方法,以便于分而治之。

A类需要调用B类的过多方法访问B的内部数据,在关系上这两个类显得有点狎昵,可能这两个类本应该在一起,而不应该分家。

 

组合:一荣俱荣,一损俱损,整体和部分的生命周期是一样的(人,肢体)。

聚合:部分可以是整体的一部分,也可以脱离整体而存在。(List,台式机)

 

要尽量使用组合/聚合,尽量不要使用继承。

导致错误的使用继承而不是合成/聚合的一个常见的原因是错误的把"Has-A"当作"Is-A"。

 

一个对象应当对其它对象有尽可能少的了解。不要和陌生人说话

 

好的继承关系中,只有叶节点是具体类,其他节点应该都是抽象类,也就是说具体类是不被继承的。

将尽可能多的共同代码放到抽象类中。

 

 

面向对象的三大特征:

封装:隐藏内部实现

继承:复用现有代码

多态:改写对象行为

 

 

开闭原则(Open-Closed Principle):一个软件实体应当对扩展开放,对修改关闭

 

对修改关闭:不能对原有代码重新编译

 

 

程序代码更是不能搞重复建设,如果同一个类中有相同的代码块,请把它提炼成类的一个独立方法,如果不同类中具有相同的代码,请把它提炼成一个新类,永远不要重复代码。 

 

分享到:
评论

相关推荐

    西电面向对象经典讲义01

    ### 西电面向对象经典讲义01:面向对象技术概览 #### 一、面向对象技术概述 **面向对象技术**(The Technology of Object Orientation)是计算机科学领域中的一种编程思想和技术方法,它强调以“对象”为中心进行...

    面向对象葵花宝典-电子版

    面向对象是目前最流行的一种程序设计和实现思想,无论你是从事企业级开发、互联网应用开发,还是手 机软件开发,都会使用到面向对象的技术;主流的编程语言中,C++,Java,C#,PHP,Python等都是支持 面向对象的语言;...

    面向对象分析与设计UML2.0(PDF)

    详细介绍了面向对象的分析与设计,全面探讨了面向对象概念、软件开发过程、UML和多层技术。本书使用最常见的技术和方法,通过一个贯穿全书的案例分析,对面向对象的软件开发过程和使用面向对象技术的编程过程进行了...

    面向对象概要设计模板

    面向对象概要设计模板 面向对象设计是一种软件设计方法,它强调对象之间的交互和协作,以达到软件系统的高内聚、低耦合的目标。在软件设计中,面向对象设计方法可以帮助开发者更好地理解系统的需求和行为,从而提高...

    实用面向对象软件工程教程

    本教程“实用面向对象软件工程教程”旨在深入探讨面向对象分析(OOA)和面向对象设计(OOD)的关键原则,帮助开发者构建高质量、可维护的软件系统。 在面向对象分析阶段,我们首先理解问题域,识别出关键实体和它们...

    Python 3面向对象编程

    Python 是一种面向对象的解释型语言,面向对象是其非常重要的特性。《Python 3面向对象编程》通过Python 的数据结构、语法、设计模式,从简单到复杂,从初级到高级,一步步通过例子来展示了Python 中面向对象的概念...

    Java面向对象经典案例10个

    "Java面向对象经典案例10个" 本文档提供了十个 Java 面向对象编程的经典案例,涵盖了 Java programming 的基础知识点,适合初学者和大学老师经典讲课习题。本文档的内容包括类继承、方法重载、多态、数组操作等方面...

    plc面向对象编程架构与实现

    面向对象编程是计算机语言的一种先进的编程模式,在工业控制系统的PLC程序中也可以采用这种设计思想,虽然我们无法实现面向对象的很多特点如“继承”,甚至于它根本就不具备面向对象编程语言的特点,但面向对象编程...

    面向对象分析与设计.pdf

    由于提供的文件内容不包含实际的文本信息,而是重复的URL链接,因此无法从该部分提供有关面向对象分析与设计(OOAD)的知识点。但是,我将尽可能详细地介绍面向对象分析与设计的相关知识点,以满足您的需求。 面向...

    面向过程、面向对象、面向组件、面向服务软件架构的分析与比较

    面向过程、面向对象、面向组件、面向服务软件架构的分析与比较 软件开发历程与架构演进 软件开发从汇编语言、过程式语言、面向对象、面向组件发展到面向服务,这一进程不仅反映了编程技术的不断进步,更是软件工程...

    面向对象分析与设计(第3版).pdf

    《面向对象分析与设计(第3版)》是一本全面介绍面向对象方法论的经典著作,由Grady Booch、Robert A. Maksimchuk、Michael W. Engle、Bobbi J. Young、Jim Conallen 和 Kelli A. Houston 共同编写。本书旨在为读者...

    面向对象软件工程

    《面向对象软件工程》 作者:Stephen.R.Schach 学校:(美)范德比尔特大学 书名原名:Objected-Oriented Software Engineering 目录: 第一部分 面向对象软件工程简介  第一章 面向对象软件工程的范畴  第二章 ...

    面向对象程序设计—C++语言描述PDF

    《面向对象程序设计:C++语言描述(原书第2版)》内容丰富,结构合理,写作风格严谨,深刻地论述了c++语言的面向对象编程的各种技术,主要内容包括:面向对象编程方法、c++语言的各种特性、stl、c++输入/输出流、mfc等。...

    C++面向对象程序设计教程——课件PPT

    C++是一种强大的编程语言,以其面向对象特性而闻名,它结合了过程化编程和面向对象编程的优势。在“C++面向对象程序设计教程——课件PPT”中,我们可以深入学习这一主题,由陈维兴和林小茶编著,清华大学出版社出版...

    UML面向对象设计基础

    《UML面向对象设计基础》是面向对象技术领域的一本经典入门书籍。它通过系统地介绍面向对象设计的基础知识、符号表示、发展历史、原理、优点和缺点,为读者提供了一个全面的、可操作的学习框架。无论是初学者还是...

    c#面向对象编程的小案例 c#经典案例.pdf

    "C#面向对象编程小案例:模拟彩票选号器" 本资源详细介绍了C#面向对象编程的小案例,模拟彩票选号器的实现。该案例主要使用C#语言,通过面向对象编程的思想,实现了一个彩票选号器的模拟。 知识点1:System.Random...

    面向对象方法教学大纲

    ### 面向对象方法教学大纲相关知识点 #### 一、课程教学目标 - **目的**: 本课程旨在培养学生在已有的计算机基础知识之上,深化理解并掌握面向对象的基本方法和技术,具备利用面向对象方法解决实际问题的能力。 - ...

Global site tag (gtag.js) - Google Analytics