从拖拉控件编程到面向设计编程(一)
前言
一> 本书目的。
这是一本思想层面的书,主要是向读者展示,专业程序员是如何面向对象编程的?设计师是如何面向设计编
程的?逐步引导读者从控件编程到对象编程再到业务设计。
二>内容结构。
同事跟我说过一句话,所谓门坎,跨过了就是门,跨不过就是坎。在介绍本书内容之前,先带领大家了解一下从拖拉控件编程到面向设计编程的过程中,究竟有哪些坎,本书的目的是带你跨过那些坎,清楚了有哪些坎,大抵也就清楚了本书要讲些什么内容了。
大部分人将程序员分为码农和设计师,对此我是认同的,只是,什么是码农,什么是设计师,各有什么特点,从码农到设计师的瓶颈障碍是什么,要如何才能突破瓶颈才能从码农登堂入室设计师。如果回答不了这些问题,说明分类不具指导意义。如果码农指的是拖拉控件编程的程序员,那么,从码农到设计师,有两个障碍,第一个障碍是面向对象编程,这是技能问题,第二个障碍是用面向对象的思想化解业务逻辑,这是思想问题。细心的读者可能会发现,化解业务逻辑的工具是面向对象的思想,那么,想要掌握业务化解是不是得先学会面向对象编程?我欣喜地告诉您,是的!而且,掌握面向对象编程不是那么容易的一件事情。因此,根据瓶颈障碍,我将程序员分三类。
一类是业余程序员,他们写程序是,首先开个窗体,再拖拉控件做好界面,再编写代码实现功能。他们的特点是,先做界面后写功能。这类程序员,是业余程序员,他们写程序是面向过程编程。
二类是专业程序员,他们写程序是,首先开个单元,再创建并完成功能类,最后才做窗体调用功能类中的函数或方法。他们的特点是,先写功能后做界面。这类程序员,是专业程序员,他们写程序是面向对象编程。
三类是设计师,他们写程序是,首先将业务化解为对象,再设计对象之间的关系,最后交给专业程序员去实现这些类(当然也可能是自己去实现)。这类程序员,是设计师,他们写程序是面向设计编程。
相信读者已经看出,设计师设计的是业务逻辑,这就要求你的业务逻辑是独立的,好比娶老婆,你要娶的女人必须是独立的,如果她跟另一个男人如胶如漆粘在一起,你就娶她不成,就算娶成了,也是一团糟。既然程序设计要求业务逻辑独立,那么,如何才能独立业务逻辑?很简单,先写逻辑,把整个业务的逻辑写完了,再去做界面去调用即可。也许你会问,第二类程序员,也即专业程序员不正是这么做的吗?正是!所以说,你要想成长为设计师,首先必须掌握面向对象编程,先成为一个专业程序员。也正因为如此,我才提议将程序员分成三类,不管我的分类是否合理,如果你还是控件拖拉员,想要成长为设计师,瓶颈摆在那里,你得一一去突破。本书将带领您,从控件拖拉员,一步步步入程序设计的殿堂。
既然本书的目的是引领读者从控件拖拉员成长为设计师,相信读者已经能猜出本书要讲的内容了。从控件拖拉员到设计师有两个障碍,我将它称之为两个境界,境界一是面向对象编程,跨过了,你就是专业程序员了;境界二是面向设计编程,跨过了,你就是设计师了。至此,本书的内容也跃然纸上,一是引领读者掌握面向对象编程;二是引领读者掌握面向设计编程。
1> 面向对象编程
如何成为一个面向对象编程的专业程序员呢?只要看专业程序员是怎么写程序的即可。前面已经说过了,专业程序员写程序,首先开个单元,再创建并完成功能类,最后才做窗体调用功能类中的函数或方法。他们的特点是,先写功能后做界面。想成为专业程序员,你学他们就行了,写程序时先开个单元创建个类,把要写的功能都写在这个类中,你就是面向对象编程的专职程序员了。好象也没多难,是吧?
嘿嘿!所有事情都是这样,说起来容易,做起来就那么简单了。举个例来说,界面有个下拉框,用来显示员工姓名,既然界面与实现分离了,这就要求你的实现类的函数必须把从数据库读到的人员名单以返回值的形式提供给界面,你的函数打算返回什么类型给界面?想一下,是不是发现真要你做的时候就竟没法动手?至少笔者以前就是这样,定义好类以后,就无法动手了。
也许你会说,直接返回数据集。停!公司请你去是做事的,不是请你去挖公司墙脚的,具体内容里再跟你详细解说。让我直接告诉你答案好了,下拉框接收的是tstringlist类(字符串列表),那你直接返回tstringlist类不就结了?是的,返回一个tstringlist正是下拉框所需要的,问题是,我如何才能知道下拉框需要的数据类型是tstriglist类?这才是我真正想要跟你说的。
我如何才能知道下拉框所需要的的数据类型是tstriglist类?
如果你有同事会面向对象编程,最好的方法是看他的代码。不过,终有一天,你会接近他水平,很难再从他那学到东西。既然如此,就问一下你同事,看他的知识技能是从哪里学来的,授人以鱼,不如授人以渔。如果你认识的人里头没有人会面向对象编程,没处可学,没处可问,没关系,我告诉你就好了。
你要找的知识之源,叫类库!
类库是什么?
对程序员而言,类库即语言,语言即类库。
听说类库是很难的?
类库好比一片森林,我今天要做的不是带你去伐木,而是要领着你把森林里的路熟悉下来,在你需要伐木的时候,知道在什么地方可以找到你要找的树木。不用怕,我们今天是游客,不是伐木工,由我来当导游,领着大家完成一趟类库森林的冒险游行。
既然躲不过,那就勇敢面对吧!如何才能轻松搞懂类库?
想要搞懂类库,首先要知道类库做了什么。
类库做了什么?
类库只做了一件事,制作控件。而且,制作所有控件的方法是一样的。想要搞懂类库,只要搞懂一个控件即可。
如何搞懂一个控件?
这个问题有点不好回答。我认为,假如给你介绍一个你从来没见过的东西,给你看一下它的模样,再介绍一下它的用途,最后再跟你讲明白它是怎么做出来的,你是不是对这个东西就清楚了?我个人认为这样就能对所介绍的东西了然于胸了,因此,我打算从控件的出生、长相和行为三个方面跟大家把控件说透。
1.1>控件的创建。双击工具栏控件或者将工具拦上的控件拖到窗体上,窗体上就有了一个控件,这个控件是怎么来
的?
这个问题讲的是控件的出身,说得不那么亲和一些,就是控件的创建。在这部分将向您展现控件的创建过程,以及带领您用系统api创建一个控件,领略体验控件的创建过程。
1.2>控件的样式。每个控件的模样各不相同,这是怎么做到的?
这个问题讲的是控件的长相或者说模样,在这部分将向您介绍画布,以及在一个空白的控件上绘制一个您所熟悉的控件,目的是想告诉您,控件的模样是绘制出来的。
1.3>控件的消息机制。控件为什么能响应键盘和鼠标,这是怎么做到的?
这个问题讲的是控件的行为,试想一下,你平日经常编写控件的事件方法,你从来都只管写不管调用,既然都不调用,那些事件方法为什么会被执行呢?在这部分,将向您展现控件是如何获取系统消息的;控件的消息机制是如何将系统消息传导至你所实现的事件方法的;从控件得到系统消息到你实现的事件方法被触发的这个过程中,有哪些函数或方法处理了消息、这些函数或方法都做了些什么?
至此,控件或者说类库于您不再神秘。同时,控件制作,是运用面向对象编程经典中的经典,通过参悟控件的
制作过程,你将看到并体会,你在学校所学的专业知识在这个过程中是如何被运用的。亲爱的读者,你缺的不是面
向对象的知识,缺的是没人引领你如何去使用所学的知识。是时候脱离拖拉控件编程了!让我带领大家开始面向对
象编程吧!
2> 面向设计编程
如何成为一个面向设计编程的设计师呢?只要看设计师是怎么写程序的即可。前面已经说过了,他们写程序是,
首先将业务化解为对象,再设计对象之间的关系,最后交给专业程序员去实现这些类。由此可见,设计师的工作是化解业务与设计对象关系,只要掌握了业务化解与对象关系的设计,你也就是设计师了。好的!让我们开始吧!
2.1>如何化解业务?
在讲解业务化解之前,先要搞懂一个概念,什么是业务,业务是什么?
有人说,写程序,写到最后,就只有业务了。这句话我就不解释了,总之一句话,业务是一个程序的核心与灵魂,请务必领会掌握业务的概念。
废话少说,直接上菜。业务,即需求的逻辑部分。
我们来理解一下这句话。需求,简单说就是功能,事实上,需求不止是功能,它还有需求产生的背景,未来可能的拓展。我们是初学者,暂且不管那么多,先简单地当需求就是功能来理解。在专业程序员眼里,任何功能都是由逻辑与界面两部分组成(做服务的例外),既然需求就是功能,而业务又是需求的逻辑部分,那就是说,业务就是功能的逻辑部分。功能,想必大家都不陌生,除非你没写过程序。
现在,我们已经清楚,业务,即需求的逻辑部分,也即功能的逻辑部分!一波未平一波又起,又有一个问题了,功能的逻辑是什么?
这就要求你先理解界面。界面是做什么的?界面只有两个作用,一是输入,二是输出,简称为输入输出。输入输出以外的事,都是功能的逻辑。
现在清楚业务是什么了没有?通过刚才的分析,我们得出一个重要的结论,业务,就是功能除去输入输出之外的所有事情。现在来总结一下,业务,即需求的逻辑部分,是功能除去输入输出之外的所有事情。请记住这句话。
搞懂了业务的概念,接下来就要开始处理业务了,该怎么处理业务这个家伙?
我们已经知道了,业务,是功能除去输入输出之外的所有事情。既然是事情,那就简单了,按通常做事的方式处理它即可。平日里,大家是怎么做事的?这还不简单,大事化小,小事化了。再复杂的事情,只要将它分解为一个一个小事情,小事情再分解为一个一个更小的事情,整个事情的条理不就清楚了!不知不觉,你学会了业务化解的方法了,即大事化小,小事化了,专业的说法就是,用面向对象的思想分层化解。
2.2>如何设计对象关系
我们已经将业务化解成几个小业务了,小业务又化解为几个更小的业务了,业务对应着类,每个小业务都对应
着各自的一个小类,每个更小的业务也对应着各自一个更小的类。这样,我们就将业务转化为对象了。
业务和小业务以及更小的业务之前是有关系的,这种关系叫业务逻辑,与业务对应的对象、小对象以及更小的
对象之间,要体现这种关系,这种关系叫对象之间的逻辑关系。
理论上来说,我们已经将业务逻辑转换为对象关系了,设计任务算是完成了。但是,如果对象关系仅仅是体现
逻辑关系,从编程技能来说,这是还不够的。那编程技能于对象关系有什么要求呢?
从编程技能的角度来说,编程的最高境界是,不写一句重复代码。如何才能不写重复代码?这就要求你深刻理解继承、多态、接口等。在此部分,我将通过对象的内存结构让您从对象的物理层面理解继承、多态、接口、虚方法、动态方法的本质,不搞清楚他们的本质,你是用不好它们的。
二> 适应对象
本书对读者技能要求有两点:
1> 能使用最常用的十来个控件编程,语言不限,任意一门可视化编程语言都行。
2> 会使用数据集控件,要求不高,只要能读取数据库随意一个表中的记录到数据集就行。
如果不具备上述两点能力,施主,苦海无边,回头是岸!
上一篇: 关于防抖与节流的思考
下一篇: PHP用户输入数据进行过滤
推荐阅读
-
1.java小作业-计算1到100的整合-指定输入多少行输出就打印多少行-打印24小时60分钟每一分钟-重载基础练习-面向java编程初学者
-
使用java编程从0到1实现一个简单计算器
-
从拖拉控件编程到面向设计编程(一)
-
Python中使用列表的一部分——参考Python编程从入门到实践
-
《Python编程:从入门到实践》项目3遇到的一些问题记录
-
Python编程从入门到实践一(标题重复率过高?)
-
从能做什么到如何去做,一文带你快速掌握Python编程基础与实战
-
1.java小作业-计算1到100的整合-指定输入多少行输出就打印多少行-打印24小时60分钟每一分钟-重载基础练习-面向java编程初学者
-
每日一题· 有10个队员围成一圈,顺序排号,从第一个开始报数(从1到3报数), 凡报到3的人退出圈子,编程实现最后留下的是原来第几号队员?
-
PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程_php实例