微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 面向对象编程——OO思想

面向对象编程——OO思想

时间:08-27 来源:ZLG致远电子 点击:

周立功教授数年之心血之作《程序设计与数据结构》以及《面向AMetal框架与接口的编程(上)》,电子版已无偿性分享到电子工程师与高校群体,书本内容公开后,在电子行业掀起一片学习热潮。经周立功教授授权,本公众号特对《程序设计与数据结构》一书内容进行连载,愿共勉之。

第四章为面向对象编程,本文为4.1OO思想。

第四章导读

面向过程编程(Process-Oriented Programming,POP)是一种以过程为中心的编程思想,以正在发生的事件为主要目标,指导开发者利用算法作为基本构建块构建复杂系统。

面向对象编程OOP(Object-Oriented Programming,OOP)是利用类和对象作为基本构建块,指导开发者探索基于对象和面向对象编程语言的表现力。因此分解系统时,要么从算法开始,要么从对象开始,然后利用得到的结构作为框架构建系统。

>>>  4.1 OO思想

>>>  4.1.1 职责转移

1、人脑的限制

由于受到电脑的信息处理功能的影响,因此于20世纪60年代初产生了以信息处理论为基础的认知心理学。美国心理学家乔治•米勒在信息记忆上的研究成就,为新兴的认知心理学提供了理论的证据。

虽然当时的心理学家已将信息处理的历程,大致区分为感官记忆(2秒以下)、短时记忆(15秒以下)与长时记忆,但短时记忆的性质及其重要性,则是在乔治•米勒1956 年发表研究报告《神奇的数字7 +/- 2,我们信息加工能力的局限》之后才被确定的,即米勒魔术——人类只能记住和处理7加或减2项内容。

后来的证据表明基数可能少到3或4,这个数字代表大脑"暂存器"解决问题时所能保存的信息容量。无论实际数目是多少,如果要求普通人同时考虑大约15件事情,实际上最多只能记住和处理其中9件甚至更少。

如果要求处理的事情更多,一次只有几件可以同时处理,其它的会被快速切入或切出暂存器。想一想去商店采购15件东西,如果没有一份购物清单,你很可能漏掉东西或买回来的东西数量不正确。同样的道理,如果需求列表或产品清单中的事项成千上万,那么你的大脑根本没办法处理这样复杂的事情,除非将它分解成更小的结构化分组。

2、核心域和非核心域

一个软件系统封装了若干领域的知识,其中一个领域知识代表了系统的核心竞争力,这个领域被称为"核心域",其它领域称为"非核心域"。虽然更通俗的说法是"业务"和"技术",但使用"核心域"和"非核心域"更严谨。

非核心域就是别人的领域,比如,底层驱动、操作系统和组件,即便你有一些优势,那也是暂时的,竞争对手也能通过其它渠道获得。非核心域的改进是必要的,但不充分,还是要在核心域上深入挖掘,让竞争对手无法轻易从第三方获得。因为在核心域上深入挖掘,达到基于核心域的复用,这是获得和保持竞争力的根本手段。

要达到基于核心域的复用,有必要将核心域和非核心域分开考虑。因为人脑的容量是有限的,而过早地将各个领域的知识混杂,会增加不必要的负担,从而导致开发人员腾不出脑力思考核心域中更深刻的问题。

正因为人脑的容量和运算能力有限,待解决的问题的规模一旦变大,就必须分而治之,因为核心域与非核心域的知识都是独立的。比如,一个计算器要做到没有漏洞,其中的问题也很复杂。如果不使用状态图对领域逻辑显式地建模,再根据模型映射到实现。而是直接下手编程,领域逻辑的知识靠临时去想,最终得到的代码肯定破绽百出。其实有利润的系统,其内部都是很复杂的,千万不要幼稚地认为"我的系统不复杂"。

3、职责转移

在面向过程编程时,由于主程序承担的责任太多,要确保一切正确工作,还要协调各个函数并控制它们的先后顺序,因此经常会产生非常复杂的代码。很多时候变化是不可避免的,而功能分解法却又无法应对可能出现的变化。一旦修改代码,则bug越来越多。更重要的是,由于人类的大脑无法做太多复杂的处理,记忆力和理解力也是有限的。因此面对复杂的软件开发时,主程序不能做太多的事情,必须通过"分离关注点"进行职转移责。

假设要乘出租车去机场,一种方式是告诉司机,按照"启动、右转、左转、停止"等单独的接口去机场。这种方式需要乘客对自己的行为负责,乘客知道每个城市去机场的路线。

既然用户的需求总是在变化之中,我们将无法阻止变化。与其抱怨变化,不如改变开发过程,从而更有效地应对变化,面向对象编程就是这样作为对抗软件复杂性的手段出现的。

在面向对象编程时,另一种方式是告诉司机,"请载我去机场"。尽管具体实现在广州、北京

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top