对象与函数

摘自《UML+OOPC嵌入式C语言开发精讲》

11.3  对象与函数

11.3.1  函数的角色

经济诺贝尔奖得主H.A.SimonH.A.Simon,计算机人工智能之父)在其1962年的文章《The Architecture of Complexity》中说道:“从小系统建造成庞大系统时,若有稳定的中间模块(Intermediate Module),则庞大的系统稳定且发展快速。”在日常生活中,高楼大厦之所以能够迅速建造起来,是因为使用了大量预制的中层模块(如帷窗等)。这些中层模块较平房常用的砖块大一些。

在计算机软件上,也适用同样的观念。程序的最小模块是一个指令,如果一个程序含有10 000行指令,但未加分组或分类,这样的程序将很复杂,难以驾驭。基于Simon的观念,人们将程序分而治之(Devide and Conque),分为几个中间模块(Module),就是通称的函数(Function)、程序(Procedure)、子程序(Subroutine)或段(Paragraph)。如图11-2所示。

此时,软件中的函数或子程序扮演着模块的角色,使得人们能快速建造出庞大的软件系统。函数如同砖块,是建造一般房子的中层模块。至于建造高楼大厦,则适宜采用更大的中层模块。因此计算机软件人员,必须将函数分门别类,并组成中上层的模块——对象(Object)。

11-2

传统程序直接由函数或子程序所组成,OOP软件则将函数纳入对象中,再由对象组成庞大程序。函数隶属于对象,与对象中的数据密切联系在一起。软件的建造理念和高楼大厦的建造观念是一致的。函数的角色为:

l  从对象本身观之,函数表达了对象的动态行为。

l  从整个系统观之,函数是支持中层模块(即对象)的支架。

在“泪眼问花花不语,乱红飞过秋千去”的例子中,女主角的行为有“流泪”(Cry)及“问”(Ask),花的行为有“语”(Say)和“飞”(Fly),秋千的行为有“摆荡”(Swing)。以对象来组织这些函数,如图11-3所示。

11-3

Cry() Ask() 是“女主角”对象内的函数,Say() Fly() 是“花”对象内的函数,而Swing() 为“秋千”对象内的函数。

11.3.2  对象与类

类是群体(或集合),而对象是类中的一份子。人们常用“是一个”(is a)来表达对象与类之间的关系。例如:

l  月亮是一个星球。

l  嫦娥是一位(个)美丽的神仙。

l  毕加索是一个艺术家。

l  毕加索是一个画家。

l  张大千是一个画家。

l  贝多芬是一个音乐家。

.....

所以“月球”是对象,属于“星球”类的一份子。毕加索是对象,艺术家是类,同样地,画家也是类,其中画家是艺术家群体中的小群体(部分集合)。毕加索和张大千同属于“画家”类,所以具有共同特点——精于美术绘画。

11.3.3  类的用途:描述对象的共同特点

软件中的对象为自然界对象的抽象表示,只表达了其重要特征与行为,而忽略了细节部分。至于哪些是重要特征和行为呢?程序中必须加以说明。同类的对象具有共同的重要特征与行为,因此可由类统一说明对象应表达的那些特征和行为。也就是说,类统一说明了对象应含哪些“数据”(Data)和哪些“函数”(Function)。例如:

        double a = 3.5 + 5;

        printf(a);

C语言已定义的doubleint等数据类型,其变量含有+-*/等基本运算(行为),凡double的变量皆能做这些运算。同理,如果我们创造了新的数据类型(即类)——花,且定义如下:

        CLASS()

        {

           char name[10];

           int color;

           void fly();

           void say();

        };

这就是花类的定义,它说明了,

花类内的对象(即“花”数据类型的变量)皆具两项共同特征:namecolor

l  花类的对象皆具两项共同行为:fly()say()

同类的对象特征和行为是一致的,所以只须在类定义中统一说明,不必对对象逐一说明。定义好以后,就能借花类来声明对象了,此时也可以将类视为数据类型,则花类的对象就是花数据类型的变量了。花类如图11-4所示。

11-4

更多样章试读请访问:http://www.china-pub.com/209254

转载于:https://www.cnblogs.com/bvbook/archive/2008/12/08/1350577.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435995.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android打包工具多渠道批量打包,Android 快速渠道批量打包详解教程-美团多渠道打包方案...

今天写一篇文章来总结下android批量打渠道包美团版本。之前项目上一直用的是gradle 批量打包方式,那个速度啊真是令人发指,15个渠道得跑上半个小时,出去吃顿饭回来,还在跑。特别是赶上项目上线的话,如果给测试提交了正…

【转】云社区 博客 博客详情 二维异形件排版算法介绍(一)

转自:https://bbs.huaweicloud.com/blogs/175385 【摘要】 排样问题(Nesting Problem)又称为下料问题(Cutting and stock problems)或填充问题(Packing Problem),其目标是在材料切割过程中寻找一个较高的材料利用率。排样问题属于…

增加RIL组件时编辑出现的问题

当我把RIL组件加进到CE6的项目里去编译,本来好好的项目编译不过去了,我就选择了RIL的所有feature,没有改任何东西,理论上sysgen就可以了,但是确总是编译不过去 看根目录下的build.log: E:/WINCE600/OSDesigns/POS410/POS410/Wince600/E6000_ARMV4I/cesy…

android 微信两个服务的,微信上线两个新功能

微信又上线新功能了!一个与你的钱包相关,一个与你的微信号相关,赶紧来看看吧微信支付分全面开放每个微信用户都拥有自己的一个分数值 ,且每月根据综合数据更新一次。达到一定的分值门槛,用户即可享受超千项便捷服务。这…

【转】二维异形件排版算法介绍(二)

转自:https://bbs.huaweicloud.com/blogs/196289【摘要】 二维不规则异形件主要有两种策略:分别是基于可行解的排样策略和基于重叠移除的排样策略。所谓基于可行解的排样策略,是指在排样过程中零件之间始终是不重叠的,而基于重叠移…

解决用户控件循环引用的笨办法

在上一篇中提到使用MagicAjax开发了一个项目,因为做这个项目之前对MagicAjax不是很了解,在里面使用了用户控件,我发现这是一个很致命的错误,用户控件在MagicAjax中用起来很痛苦.因我们的项目不是简单的只要求"看起来像"没有刷新页面,其中一个主要的页面有那么一点点复…

【转】介绍一些免费/开源的医学影像后处理工具

转自:https://blog.csdn.net/liaopiankun0618/article/details/84328331 来源:融视影像科技 综述 医学影像的处理有两个特质。一是复杂,整个处理流程涉及多种算法,需要调整的参数较多。二是发展快,从采集、重建到后…

android 安卓市场,安卓市场(Android Market).doc

安卓市场(Android Market)安卓市场(Android Market)Android (HiMarket) China market is the earliest and largest Android software and online game download platform, Netdragon well-known products, provide good service for users of mobile phone software. Since it…

IROM 浅见

IROM其实是三星已经固化在CPU里面的一段代码,我们要做的事情就是提供一段可以供IROM读取的8K代码程序,至于这8K代码放在哪里,由CPU的相关引脚决定(OM1-OM4,GPN13-GPN15)。也就是说从哪里启动的意思。 如果从…

LINQ是死是活?——很奇怪为什么会有这样的话题?

LINQ是死是活??? 如果我问您:机器代码死了吗?汇编死了吗?C死了吗?VB6.0死了吗?Delphi死了吗?您可能会觉得我很无聊。所以我觉得“LINQ是死是活”的说法也很奇怪? LINQ诞…

android gradle 语法,Gradle 1.语法

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?gradle 语法解析:gradle的语法十分简洁,以至于看起来跟像是配置文件。先看一个简单的android项目完整的gradle脚本:build.gradle123456789101112131415…

【转】二维异形件排版算法介绍(三)

转自:https://bbs.huaweicloud.com/blogs/203947 【摘要】 相比于基于可行解的排样算法,重叠移除算法在改变解的状态时,允许零件之间发生重叠,然后采用分离技术消除重叠,直到达到算法的终止条件为止。重叠移除算法的关…

WinCE6.0中应用程序如何直接访问物理空间

在实际开发过程中,经常希望能在应用程序中直接读写设备的物理空间。以前在做WinCE6.0下的MEMMgr时通过秘密加载一个内核态驱动实现了这个需求。但这种方式有一个明显的缺陷,每次读写都必须经由它才能完成。如果只是读取GPIO,那问题不算大。如…

开博之文

逛园子很久了,读而不写非礼也。分享技术,交流经验,体味人生,本博主旨,此为09年的开年大事。转载于:https://www.cnblogs.com/imstand/archive/2009/01/11/1373712.html

【转】Dicom格式文件解析器!!!!!!!

转自:https://www.cnblogs.com/assassinx/archive/2013/01/09/dicomViewer.html Dicom全称是医学数字图像与通讯,这里讲的暂不涉及通讯的问题 只讲*.dcm 也就是diocm格式文件的读取,读取本身是没啥难度的 无非就是字节码数据流处理。只不过确…

android 设置view最大高度,android-在RecyclerView上设置最大高度

我有一个对话框片段,其中包含线性布局,其中涉及RecyclerView上方的titleText,在最底部,recyclerView下方有一个按钮.由于recyclerView根据适配器设置的项目数展开或折叠,因此按钮有时会被截断并且不再显示在屏幕上,因为recyclerView仅覆盖整个屏幕.我的问题是,有没有一种方法可…

【转贴】利用 Javascript 获取 URL 参数(适合IE、FF)

.  ... .../test.html?str123456如何用Javascript接收类似上面的url参数呢?这个问题网上有很多答案,看了看,主要有两种,一个是利用字符串的截取,另一种是利用正则表达式。[正则式&#xff3d…

【WinCE】流设备驱动简介及GPIO驱动的实现

流设备驱动实际上就是导出标准的流接口函数的驱动,这是文档上面的定义。在WinCE中,所有的流设备都导出流设备接口,这样WinCE中的Device Manager可以加载和管理这些流设备驱动。 流设备驱动的架构如图: 首先我声明一下,…

android contentprovider api,Content Provider Basics

一个内容提供者访问数据的中央资源库。提供者是应用程序的一部分,提供自己的操作数据的UI。然而,内容提供者主要是被其他应用程序引用,通过提供者客户对象访问提供者。提供者和提供者客户端为数据提供一个一致的,标准的接口&#…

【转】医学影像调窗技术!!!!

转自:https://www.cnblogs.com/assassinx/p/3139505.html 在年初的时候做过一个dicom格式文件解析,当时只是提了下。看着跟别人的显示出来也差不多 其实是我想太简单了。整理了下思路 这里提供正确的调窗代码。 医学影像 说得挺高科技的 其实在这个过程…