`

面向对象健身操

阅读更多

本文内容来自《软件开发沉思录》


优秀设计背后的七条核心概念:内聚性,松耦合,零重复,封装,可测试性,可读性,单一职责。

采用这些规则的关键是,使用面向对象的思考。


规则1 :方法只使用一级缩进

动机 :庞大的方法往往缺少内聚性,一个常见的原则是将方法控制着5 行以内(不包括入参检查)。你可以尝试让每个方法只做一件事情——每个方法只保护一个控制结构或一个代码块。

方法 :利用IDE 的抽取方法的功能,不断的抽取方法中的行为,直到一个方法只有一级缩进位置。

“运用这些规则的技能师一种艺术,它能将程序员提升到一个新的高度。”


规则2 :拒绝 else 关键字

动机 :复杂的条件判决难于理解,而且易产生重复代码。

方法 :对于简单判断可以使用卫语句和提前返回,对于复杂的条件判断则可以使用多态。另外也可以使用策略模式。


规则3 :封装所有的原生类型和字符串

动机 :整数只是代表一个数量,没有实际的含义。用类来表示原生类型,比如年,月,日等。这样可以进行严格的类型检查。


规则4 :一行代码只有一个“ . ”(或者“ -> ”)运算符

动机 :如果一行中含有多个“. ”,则说明很多职责的位置放置错了。尝试让对象为你做一些事情,而不要窥视对象内部的细节。封装的含义就是,不要让类的边界跨入到它不应该知道的类型中。


规则5 :不要使用缩写

动机 :缩写的原因:1 )一遍一遍的敲打同样的单词,则可能是因为某个方法调用过于频繁——要消除一下重复。 2)方法名字太长——可能是职责没有放在应该在的位置或者有确实的类。

方法 :所有实体对象的名称都只能包含一到两个单词,不要使用缩写。


规则6 :保持对象实体简单清晰

动机 :超过50 行的类所做的事情通常都不止一个。这会导致他们难以理解和重用。这意味着每个类的长度不能超过50 行。每个包所包含的文件不超过 10 个。


规则7 :任何人类中的实例变量不要超过两个

动机 :将一个对象从拥有大量属性的状态,解构成分层次的,相互关联的多个对象,会直接产生一个更实用的对象模型。将一个复杂的大的对象,分解成多个简单的对象。

方法 :可以将实例变量按照相关性分离在两个部分中;可以创建一个新的对象来封装两个已有的实例变量。


规则8 :使用一流的集合

集合的概念应该是一类实例的集合。比如,定时器对象的集合——包括所有的定时器。我一般是放在定时器类中,然后使用static 来表示集合。看了这个方法要改一下了。

任何包含集合的类都不能再包含其他的成员变量。每个集合都被封装在自己的类中。集合其实是一种应用广泛的原生类型。


规则9 :不要使用任何的 Geter/Setter/Proerty

Geter/Setter/Proerty会对对象的封装性找出破坏。

在严格封装的边界背后,真正的动机是迫使程序员在完成编码后,一定要为这段代码的行为找到一个合适的位置,确保它在对象模型中的唯一性。

这样可以减少重复性的差错,以及在添加新特性的时候,可以在一个更合适的位置引入变化。


这九条原则可以作为对面向对象优秀设计的训练(可以通过一个小的项目),但是,在实际的过程中不可以教条的应用上面的原则。引用P.J. Plauger 的话:

“你在应用某种设计方法的时候越教条化,你所能解决的现实问题就会越少。请把设计看出是一个险恶的,杂乱的和启发式的过程(没有教条化的规则可以遵循,能够巧好解决现实问题的方案才是最佳的方案)。不要停留于你所想到的第一套方案,而是去寻求合作,探求简洁性,在需要的时候做出原型,迭代,并进一步迭代。你将对你的设计成果感到满意。”

分享到:
评论

相关推荐

    面向对象 面向对象 面向对象

    面向对象 面向对象 面向对象面向对象 面向对象 面向对象面向对象 面向对象 面向对象面向对象 面向对象 面向对象面向对象 面向对象 面向对象

    对象健身操详解 - Tech For Fun.pdf

    面向对象九诫,摘自ThoughtWorks文集、博文!对象健身操,写好代码,值得收藏,随时告诫自己!

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

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

    面向对象分析与设计

    《面向对象分析与设计(第3版)》是UML创始人Grady Booch的代表作之一,书中介绍的概念都基于牢固的理论基础。同时,《面向对象分析与设计(第3版)》又是一本注重实效的书,面向架构师和软件开发者等软件工程实践者的...

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

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

    Python 3面向对象编程

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

    漫画面向对象编程 Java

    借助于漫画展示的形式,面向对象的简、由类创建一个对象的方法、类的编写与对象的创建、类的构造函数、类的方法、修饰符、Java中的封装/继承/多态等特征、Java中的线程、用Java创建一个小世界、多线程共享数据,以及...

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

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

    习题解答-Java面向对象程序设计-邢国波-清华大学出版社.pdf

    习题解答-Java面向对象程序设计-邢国波-清华大学出版社.pdf习题解答-Java面向对象程序设计-邢国波-清华大学出版社.pdf习题解答-Java面向对象程序设计-邢国波-清华大学出版社.pdf习题解答-Java面向对象程序设计-邢...

    面向对象课本课后题面向对象课后题面向对象课后题

    面向对象课后题面向对象课后题面向对象课后题面向对象课后题面向对象课后题面向对象课后题

    经典面向对象思想 经典面向对象思想

    经典面向对象思想 经典面向对象思想 ...经典面向对象思想经典面向对象思想经典面向对象思想经典面向对象思想经典面向对象思想经典面向对象思想 经典面向对象思想经典面向对象思想经典面向对象思想经典面向对象思想

    java面向对象编程源码

    本书内容由浅入深,紧密结合实际,利用大量典型实例,详细讲解Java面向对象的编程思想、编程语法和设计模式,介绍常见Java类库的用法,总结优化 Java编程的各种宝贵经验,深入阐述Java虚拟机执行Java程序的原理。...

    面向对象实验报告面向对象的验报告

    面向对象实验报告面向对象实验报告面向对象实验报告面向对象实验报告面向对象实验报告面向对象实验报告

    面向对象的网络协议面向对象的网络协议

    面向对象的网络协议面向对象的网络协议面向对象的网络协议面向对象的网络协议面向对象的网络协议面向对象的网络协议面向对象的网络协议

    面向对象软件工程

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

    面向对象技术讲解面向对象技术讲解

    面向对象技术讲解面向对象技术讲解面向对象技术讲解面向对象技术讲解面向对象技术讲解面向对象技术讲解

    面向对象的软件测试面向对象的软件测试

    面向对象的软件测试面向对象的软件测试面向对象的软件测试面向对象的软件测试

    面向对象程序设计论文

    面向对象程序设计论文面向对象程序设计论文面向对象程序设计论文面向对象程序设计论文面向对象程序设计论文面向对象程序设计论文面向对象程序设计论文面向对象程序设计论文面向对象程序设计论文面向对象程序设计论文...

    面向对象程序设计

    面向对象程序设计 廖裕青 面向对象的软件开发

    面向对象的软件测试面向对象的软件测试面向对象的软件测试

    面向对象的软件测试面向对象的软件测试面向对象的软件测试面向对象的软件测试面向对象的软件测试

Global site tag (gtag.js) - Google Analytics