OO 编程基本功--(1)

OO编程的基本功 (1)

本系列将浅谈一些OO编程语言的基本功。

编程的基本功决定了代码质量,编程思路以及编程水平,在工作中是重中之重。本文作为开篇,介绍一下OO编程中的基础与重点--保证抽象的一致性。

Code

什么是Code?把需求转为软件环境下可正确执行的软件的过程,称为编程。而实现这个编程的具体化流程,就叫做写code。在OO的编程世界里,写code既像写story,又像写一篇从抽象到具体的文章。

为了说明本文的主旨-保证抽象的一致性,我们就以code与Story和Code与写文章的对比作为本系列的开篇示例吧。

写code与story

一个好的实现:

左边的code反应了编程时应当把握的重心--抽象层次要一致(在本例中,抽象层次为domain级别)。不合格的code也许会写成类似这样:

可以看到,本次实现的code抽象层次参差不齐,显然CheckPassword的抽象层次要低于User.Pay,因为它是User.Login的具体实现;而User.Order.Status则为User.SaveOrder的具体实现。代码的抽象层次不一致,除了降低可读性,也带来了维护成本和扩展难度。

写code与写文章

保持抽象一致的代码实现:

抽象层次混乱的实现:

首先,登录的抽象层次是domain级别的。同一个方法里,暴露了Order的实现,付款的实现。抽象层次显然不一致,因此,这段代码是需要重构的。

结论:

可见,code与写文章的思路是一样的,都是从抽象到具体,抽象层次依次降低。在同一个函数里,代码调用的抽象层次应该是一致的。如果是线性的流程,按照从抽象到具体的步骤“翻译”即可;如果是可以并行的流程(不分先后顺序),还可以考虑是多线程来优化。

在OO的编程中,无论是类,接口,还是函数的设计,关键都在于,抽象的层次要始终保证一致。

OO 编程基本功--(1)

时间: 2024-08-02 13:33:29

OO 编程基本功--(1)的相关文章

OO编程基本功(3) 注释

OO编程基本功(3)  注释 1. 避免依赖注释来逃避重构 注释在code中可以使得代码更容易理解,可是相当多的情况下,它会使得程序员过于"依赖"注释而容许代码的自我说明程度降低. 需要注释?是否代码名称不够清晰,或者代码的抽象层次混乱,还是代码的动机不够明确导致需要注释来做额外说明?合格的代码本身一般是不需要额外注释的. 例如: //newPasswordMUST at least 6 digits User.Password= newPassword ; 可以重构为: privat

OO编程基本功(2)--命名

OO编程基本功(2)--命名 1. 使用词组作为函数名称,名词作为类名称,描述性的词作为变量名 如果business使用了domain model,类名称通常为model的名称,就是我们domain model里面直接map过来的名称: Customer Student Account 注意,如果出现了XxManager , XXExecutor , XXProcessor 之类的名称,那么要考虑修改design了,因为很可能已经follow过程式的编程思维. 方法名示例 在business 层

编程基本功(4)

编程基本功 (4) 数据结构与对象 数据结构 在OO世界里,数据结构往往意味着没有不论什么能力的纯实体.这样的情况是非常少见的(由于意味着纯粹数据结构的集成). 样例: public struct Point { public double X {get; set;} public double Y {get; set;} private double x; private double y; } 1. 我们能够用它来存一个点,这个点能够是不论什么形状的一部分 2. 它不具备不论什么能力,仅仅是

编程基本功训练:流程图画法及练习

对于"程序设计"的工作,很多刚開始学习的人的理解就是"写代码".相同,新手们苦恼的问题是,他们仅仅会"写代码".当接到一个新的任务,不少人总是在第一时间就爬到键盘上去敲代码.敲着敲着,就把自己绕糊涂了.头晕脑胀地坚持下来,程序能执行,阿弥托佛,赶紧撤.这样做出的程序,并不可靠. 在程序设计中,最重要的不是敲代码,而是设计.就像建筑.机械等行业的要画设计图.施工图,程序设计的思路也有必要用图的形式画出来.绘图的过程就是思考的过程,因为其直观性,绘图

编程基本功训练:流程图画法及练?

对于"程序设计"的工作,很多刚開始学习的人的理解就是"写代码".相同,新手们苦恼的问题是,他们仅仅会"写代码".当接到一个新的任务,不少人总是在第一时间就爬到键盘上去敲代码.敲着敲着,就把自己绕糊涂了.头晕脑胀地坚持下来,程序能执行,阿弥托佛,赶紧撤.这样做出的程序,并不可靠. 在程序设计中,最重要的不是敲代码,而是设计.就像建筑.机械等行业的要画设计图.施工图,程序设计的思路也有必要用图的形式画出来.绘图的过程就是思考的过程,因为其直观性,绘图

脚本编程基本功

脚本编程基本功 一.脚本基础 1.格式要求:首行shebang机制:#!/bin/bash 2.#注释(日期.联系方式.作者.目的.文件名) 3.检测脚本中的语法错误 bash -n /path/to/some_script 4.调试执行 bash -x /path/to/some_script 二.变量 1.Shell中变量命名法则:不能使程序中的保留字:例如if, f等:只能使用数字.字母及下划线,且不能以数字开头:见名知义 :统一命名规则:驼峰命名法,大驼峰和小驼峰. 2.Shell中命名

编程基本功之数组求和

今天CisternData的刘总给我看了几个她看到的关于编程基础的小问题.感觉很有意思!说这几个是小问题,是因为谁都会做.说它们有难度--确实是现在多数的初级程序员遇到这种初级问题,还真的难以做得有多完美.那么接下来几天,就逐一的对这几个问题进行演练. 问题1. 使用for循环.while循环和递归写出3个函数来计算给定数列的总和. 首先是for循环,这是最基本的计算. var arrData = [1,2,3]; var summary = 0; for( i = 0; i < arrData

PHP OO 编程零散笔记

1. 类中的方法不是全局方法,可以和外部的普通方法重名,例如: <?php function time(); 则会报错:不能重新声明方法 Fatal error: Cannot redeclare time() 而在类中定义则可以: <?php class clock{ public function time(){ echo date('Y-m-d H:i:s'); } } $c = new clock(); $c -> time(); 页面输出: 2015-02-28 16:47:3

编程基本功之数组交叉合并

继续昨天的话题.今天的内容比较简单,数组的交错合并.问题如下 编写一个交错合并列表元素的函数.例如:给定的两个列表为[a,B,C]和[1,2,3],函数返回[a,1,B,2,C,3]. 代码参考下面的程序. 测试画面 // 取得两个数组的内容 var arrData = new Array(); arrData[0] = document.getElementById("Q2I1").value.split(","); arrData[1] = document.g