⑴ 小鹏汽车:从城中村到纽交所 一个程序员的造车史
2004年8月,UC首次将服务器、客户端混合计算的云端架构应用到手机浏览器领域。
2017年8月,何小鹏从阿里巴巴退出,以董事长的身份正式加入小鹏 汽车 。
2020年8月,小鹏 汽车 敲响了IPO的钟声,正式于纽交所上市。
8月,是巧合,也是何小鹏的印记;而成功挂牌纽交所,却是小鹏 汽车 6岁的印记。
至此,小鹏、蔚来、理想,成了三家赴美上市的新势力造车代表,而中国新势力造车版图也终将形成“三国鼎立”的局面。接下来的两周里,我们将会用三篇系列报道,为你揭开三巨头背后的造车历程。
故事,就由小鹏开篇吧……
— 01角色的转变 —
“世事的起伏本来就是波浪式的,人们要是能够趁着高潮一往直前,一定可以功成名就;要是不能把握时机,就要终生蹭蹬,一事无成。”——莎士比亚
何小鹏就是那个会把握时机的人,但要说他有何独特之处,却并非是UC时代那个最优秀的产品经理,而是在他不惑之年,义无反顾地完成了一次角色转变:离开阿里,以一个投资人的身份加入到小鹏 汽车 ,并硬生生地把广州一座不起眼的城中村变成了属于他的“战地”,还一步一步将它带到了纽交所。
【这是何小鹏和他的上一个代表作 UC】
“造车很难!很重!”UC的成功,已然为何小鹏注入了企业家的“血液”。然而, 真正让他被圈内熟识的,还是从造车开始 。
尽管早已不是容易激动的年纪,但 汽车 界这场随之会来的大变局,还是激起了他内心涟漪。既然美国已经开始有变化了,中国应该也快了。
2014 年年中,何小鹏与他的“朋友圈”,及多家风投机构一起做了天使投资人,共同创办了小鹏 汽车 。这些人里,多数是他做UC时的紧密合作人。 持股31.6%,何小鹏成了最大股东 。
“最初,是纯投资者的心态”,这是何小鹏当时想法:只是觉得这个行业一定会有价值。
他的眼光确实独到。同年,马斯克宣布对外开放特斯拉的全部 228 项专利,这也就意味着会有更多公司加入到造车大潮。天时!地利!人和!还等什么?2014-2017年期间,这成了小鹏 汽车 的起步阶段,只不过那时的何小鹏还任职于阿里。
从创立UC到担任阿里移动事业群总裁,再在阿里任职时期投资和创建小鹏 汽车 ,这期间,何小鹏实际上已实现了财务自由——2014年6月,UC以43.5亿美金卖给了阿里巴巴。也就是说,在迈进 汽车 领域之前,何小鹏实际上已经是一个拥有了100亿以上的年轻富豪,然而他在冒险与保守间选择了再一次下注。
小鹏 汽车 ,这是他的第二次创业 。2017年8月,何小鹏从阿里巴巴退出,以董事长的身份正式加入小鹏 汽车 。
属于何小鹏的下半场,正式开始……
“自创业伊始,我就一直期望实现更大的梦想。”这是何小鹏在谈及创业感受时曾经说过的一句话。但是,造车毕竟与互联网行业不同,不仅要吸引人才、引进技术,还需要有足够的资金链,更需要铺建上下游体系……这是一个无底洞。
做得好了,名利双收;做得不好,血本无归。尽管“凶险”,但依旧有着大批和小鹏 汽车 一样的造车新势力拔地而起,因为,赶上了好时代!
— 02 互联网造车变一地鸡毛 —
就在小鹏 汽车 创立的前一年(2013年9月),国家为开发洁净能源 汽车 ,开始“输血式”地扶持这个行业发展,一举打开了新能源 汽车 的大门。财政部、 科技 部、工业和信息化部、发展改革委等四部委还联合下发了《关于继续开展新能源 汽车 推广应用工作的通知》,并明确了财政补贴支持推广应用新能源 汽车 的具体政策。而随后,各地方政府的补贴政策也陆续跟进。也就是说, 买一辆新能源 汽车 ,消费者可以拿到两份补贴 。
有补贴、政策扶持,毫无疑问地,中国新能源 汽车 的春天已然来临。一时间,“智能 汽车 ”这个概念开始大受资本追捧,第一代资本炒家开始疯狂投机,甚至很多互联网企业也看到了其中红利,纷纷入局。小鹏 汽车 ,也就是头几家站在风口的企业而已。
补贴红利时期,有人调侃说“只要PPT做得宏大,基本都会受到资本青睐。”2016-2018年期间,有数据明确显示,15家新造车势力其融资总额就能达到千亿级人民币,发展态势很是凶猛。
那个时候,贾跃亭还是站在互联网神坛上的一代风云人物,当时他还踌躇满志地说“造车是足够伟大的一件事, 汽车 业务即使把我们拖垮了,我们也要做。”但结果,也是真的“垮”了。
【贾跃亭的第一辆造车梦 FF91】
那个期间, 小鹏 汽车 开始晋级 :从数千万的天使轮迈进22+亿人民币的A轮融资、再从62亿人民币的B轮融资跨到13亿美金的C轮融资,单就2018年一年时间,小鹏 汽车 就融资高达65亿人民币(除了62亿元B轮融资,还有3亿元的战略融资)。这也成就了新造车势力中,单年完成的最大单轮融资。
然而仅仅三年,这个行业却开始紧急刹车。神话破灭,PPT造车沦为笑柄——2019年,随着融资“窒息”、市场转向、以及补贴政策断崖式的下滑。 这一年,造车新势力集体缩水、失声 。
造车,真的没想象中“光鲜”。不以长远为规划,终究一地鸡毛。然而像蔚来、小鹏、威马却成了新势力中第一关批量交付的优秀代表。但同时,真正的“厮杀”才正式开始!
— 03 有趣的投资者们 —
其实扒一扒小鹏 汽车 背后的“财团”,你会觉得这会是一个有趣的故事。
和何小鹏颇有渊源的阿里巴巴,从A+轮开始就与小鹏 汽车 结缘,随后在B轮和C++轮的融资里,也相继有阿里巴巴的影子。 阿里巴巴的投资一方面显示了对互联网造车的热情,另一方面,也是为了在BAT领域里有所抗衡。
你看,蔚来 汽车 算是与腾讯有着深度绑定的新造车公司,虽然网络也有参与其中;而威马 汽车 又是与网络走得最近的企业(发布量产车时陆奇也有出席),但威马 汽车 的副董事长熊明华却又担任过腾讯的首席技术官,与腾讯也有渊源。是不是有点儿意思!
但是,阿里出手,是继腾讯投资了蔚来、网络投资了威马之后,又一个亟需在战略上布局智能造车的企业。有人戏称“小鹏 汽车 是阿里的嫡系部队”,其实也不假,这里面应该也包含着何小鹏与阿里本身的“情分”。
除此,何小鹏早年间建立的人脉网络,也开始逐渐发挥重要作用——在小鹏 汽车 的Pre-A轮融资中,投资方包括小米的雷军、俞永福、李学凌、傅盛、腾讯前高管吴霄光、经纬创投张颖等,这一次的融资额是4200万元;而在A+轮融资中,又出现了很多互联网大咖的身影,这其中就包括58同城网创始人兼CEO姚劲波、大众点评创始人张涛、猎聘网创始人兼CEO戴科彬等,他们以个人的身份参与了投资。
雪球不断滚大,这造就了 小鹏 汽车 已累计完成10轮融资 ,共获得两百多亿元资金的支持。
— 04 钱花去哪里了 —
在何小鹏看来,获得融资后,有三笔钱必须得花:
第一笔钱都花在这里了:Xpilot自动驾驶+XsmartOS车载系统+SEPA电气化平台。与“蔚来看重服务、理想强调效率”不同的是,小鹏 汽车 更注重在技术和研发上的投入,尤其看重自动驾驶技术和智能操作系统领域的储备。
为了搭建一套完整的自研自动驾驶团队,小鹏 汽车 还在硅谷、圣地亚哥、北京、上海、广州,建立了不同的智能研发团队。IPO招股书显示,2019年小鹏 汽车 收入为23.2亿人民币,其中研发投入就高达20.7亿,占公司总收入的89.2%。而今年(截止6月),研发投入也已占据公司总收入的62.9%。这都是一笔大的开销。
除了造车本身的研发投入外,更重要的是需解决困扰造车新势力的一大难题——生产资质。这也是何小鹏认为必须要花的第二笔钱。
说起这个“准生证”,还有点儿意思。这是国家对于各个行业都有相应的监管和准入门槛,也就是说,你想要建厂造车,首先就要报备发改委,得到乘用车项目建设核准,这样才能合法建设一个整车生产工厂(小鹏肇庆工厂一、二期的总投资就达到了100亿元)。但是,工厂建好了又并不意味着就可以造车了,还需要得到工信部核准,产品登上工信部新车目录后才能合法的上市销售。而我们常说的“准生证”基本就是以工信部生产资质为准。
当时小鹏的首款产品G3还是由郑州海马代工生产。为了获得工厂“准生证”,小鹏 汽车 最快的办法就是收购一家业绩较差,甚至濒临破产,但拥有工信部生产资质的企业,这样就可以利用他的生产资质让旗下新车登上工信部新车目录。所以,何小鹏想到了收购福迪。
按照往年记录,为了这张“入场券”,那些造车新势力可都是花了大价钱的——理想收购力帆 汽车 资质花了6.5亿;威马收购黄海 汽车 花了11.8亿;爱驰入股江铃控股50%花了17.47亿;博郡和夏利合资的价格是20.34亿。不过,小鹏收购福迪的成交价格却是个谜: 外界流传小鹏仅花费1600万元就拿下福迪品牌及其生产资质 ,这相比此前各家的数亿收购价, 显然并不合理 ,没有十几亿肯定说不过去。
收购完成后, 福迪资质也顺利转移到了小鹏肇庆工厂 ,而以福迪资质申报的小鹏P7也迅速出现在了第332期工信部新车目录中。有了“造车资质”和工厂,这也就意味着有了成本管控和质量管控,而这也是除了技术和产品外的第二重要竞争要素。
第三笔钱则是建成规模化的超级充电站——除了自营充电体系,小鹏 汽车 也将引入第三方运营商。不过这需要有持续现金流的投入,相比起自动驾驶技术上的储备、以及“造车资质”的购买,小鹏 汽车 在超级充电站布局目前还未形成规模化。超级充电站的投资,应该远比我们想象中要大。 对于想要降低成本、保证交付、且有良好充电体验的小鹏 汽车 来说,这钱都花得值!
— 05 腹背受敌 —
融资和造车的过程是顺利的,但小鹏 汽车 也有日子不好过的时候。
2019年,小鹏 汽车 发布了2020款G3车型,说是改款,但却是做了一次全面升级。这于小鹏而言,把改款车型做了大升级,这是好事啊;但于消费者而言,换来的却是“老鹏友”的维权。
为何?您别好奇,听我慢慢道来!
从时间线来看,G3车型是在2018年12月12日正式上市,并于2019年3月开始正式交付。但在4个月后(也就是2019年7月),全面升级的2020款小鹏G3开始上市。也就是说,你可能面临着旧车还没交付,但改款的G3就宣布上市了,而且新车的续航还更长。这对还未提车,或刚提车不久的“鹏友”来说,认为小鹏 汽车 隐瞒了即将发布新车的事实,事情开始发酵。
【当年车主维权的图片】
随即, 小鹏 汽车 提出了两个解决方案进行二选一 。一是赠送小鹏商城10万积分,价值1万元,可用于车辆保养、超充充电、车辆维修、兑换精品和本人及直系亲属新车增购。二是G3 2019款三年6折保值置换回购,用于补差价换购小鹏 汽车 。而且对于已经订购2019款G3但尚未提车的用户,可以更换为520km的版本。
不过这个事件并未真正影响到G3销量,从数据上看,它依旧是2019年国内销量最高的三款电动SUV车型之一。但,小鹏 汽车 想要抢占新能源车市场,除了G3,应该更会寄希望于今年上市的小鹏P7。而P7所面临的,有一个绕不开的竞争对手:特斯拉。
小鹏 汽车 于特斯拉之间,就不光是竞争对手关系那么简单,这还涉及了特斯拉的一波起诉。
此前,特斯拉以Autopilot技术源代码被窃为由,起诉自家离职员工(现小鹏 汽车 员工)曹光植,并要求小鹏 汽车 披露其自动驾驶源代码,上交电脑硬盘图像,让员工接受面谈访问。
其中纠纷我们就不做过多猜测了,但资本市场真正关心的,还是 特斯拉的这波起诉,是否会对小鹏 汽车 上市后有影响 。
— 06 亏损和上市矛盾吗 —
北京时间8月8日凌晨2点,小鹏 汽车 向美国证监会提交了IPO文件。继蔚来、理想之后,小鹏成为了第三个赴美上市的新能源 汽车 。
小鹏IPO要点
1
财务方面:小鹏 汽车 2019年研发投入为20.7亿,全年净亏损36.9亿。 2020年上半年,小鹏 汽车 营收为10.03亿人民币,毛利为-3611.6万,毛利率为-3.6%同比大幅收窄,研发投入6.3亿,上半年净亏损7.95亿。
2
股东方面:IPO前,小鹏 汽车 管理层持股达40.9%,其中何小鹏持股31.6%为最大股东,阿里持股14.4%为最大外部股东,其他主要股东还包括小米、GGV纪源资本、晨兴资本。此外,小鹏 汽车 在近一月完成合计超9亿美元投资,阿里巴巴、高瓴、红杉、卡塔尔投资局等均参与其中。
3
技术优势: 当前小鹏拥有自研的自动驾驶软件平台Xpilot,是国内领先的自动驾驶智能 汽车 公司。
4
车型:小鹏 汽车 目前有两款车型在售,分别是SUV车型G3和轿车P7。截止2020年7月,小鹏 汽车 累计交付量达20707辆,总销量在造车新势力中排名领先。
根据小鹏 汽车 公布的数据,2020上半年,小鹏实现总营收10亿元人民币,同比下降18.6%;净亏损为8.0亿元人民币,净利亏损幅度同比收窄26.1%,净亏损率从155.8%下降至79.4%;毛利为-3611.6万人民币,毛利亏损幅度同比收窄92.3%,毛利率从-38.2%提升至-3.6%。虽然还未转正,但也有了很大幅度的提升。
不过 亏损并不会影响小鹏 汽车 的上市和估值 ,其主要原因就在于资本市场看好了其在产品研发上的投入(早期的特斯拉也是如此),小鹏 汽车 有着深度涉及智能化的产业基础,这是他很重要的一个筹码。加上,小鹏 汽车 还有G3和P7补充市场(目前估算,P7会有不错的潜力)、以及自己的生产基地,未来产能应该还会持续爬坡(肇庆工厂目前产能是每年10万辆),这是资本市场看好小鹏 汽车 的另一个砝码。
而至于为何又要在美国上市,在我说完以下几个原因后,相信你也会认同——
①美股执行的是注册制,只需要达到监管部门设立的标准就能上市,会更加市场化。
②在美股占一个坑位,对品牌的全球知名度和影响力都有巨大的帮助,尤其是对拓展企业海外融资渠道也会有帮助。
③对于还在不断“烧钱”的新能源 汽车 ,企业上市也是投资者最佳的退出机制。
从长远来看,小鹏 汽车 也可以通过上市来获取品牌力和市场信任度,同时还能为自动驾驶系统研发“物色”更多资源,这个商业潜力不可估量。
— 07结语 —
6年磨炼聚起的光晕终在敲钟那刻起被点燃,站在大锣前面的何小鹏,可能会想起小鹏 汽车 的第一次下线、第一次交付,也可能会想起受过的挫折和躺过的“枪”。但也因此,才让何小鹏打造了中国的“特斯拉”——小鹏P7。或许这个时刻,何小鹏又会重新意识到,梦想中的"小鹏王国"可能才刚开始。
站在新起点,小鹏 汽车 会被赋予更高的期望,如何提高品牌影响力、如何让中国的造车新势力在全球竞争中取得成功,这都将成为大家想要的答案。
但是,我愿意相信,中国的 汽车 行业会更好。
小鹏 汽车 ,加油!
(文:太平洋 汽车 网 王晓莉)
⑵ 汽车编程基础知识
给汽车编程最简单的方法就是使用转换和存储程序芯片的方法。更换不同程序的芯片时,只需拆开ECU背板,拔掉原芯片,换上新的即可。由于一些旧的E-ROM芯片只能写入程序一次,所以每次修改程序都需要用刻录机将程序刻成空白芯片来代替原来的芯片。
现在的车载电脑都是使用可擦写存储器,所以可以修改原来ECU中存储的程序。但是如果你是一个普通的电脑程序员,在汽车ECU里面编辑程序还是不够的,因为涉及到汽车的点火和喷油,各种传感器和执行器信号的输入输出,现在用的是CAN。所以要想编译汽车的语言,就要学习计算机的编程语言。需要了解汽车发动机的机械性能(包括各种转速下的点火时间和喷油时间等。),以及强大的汽车专业知识。现在,对局域网知识的要求增加了,所以在中国大陆只有一小部分人可以改变车载电脑中的程序。
⑶ 利用面向对象的方法设计一个汽车的类! 并利用该类创造一个汽车对象!
“所见即所得”的编程思想为原则,力图实现编程工作的可视化,即随时可以看到结果,程序与结果的调整同步。
可视化编程是与传统的编程方式相比而言的,这里的“可视”,指的是无须编程,仅通过直观的操作方式即可完成界面的设计工作,是目前最好的Windows应用程序开发工具。
可视化编程语言的特点主要表现在两个方面:一是基于面向对象的思想,引入了控件的概念和事件驱动;二是程序开发过程一般遵循以下步骤,即先进行界面的绘制工作,再基于事件编写程序代码,以响应鼠标、键盘的各种动作。
可视化编程十问
1. 什么是可视化程序设计?
可视化(Visual)程序设计是一种全新的程序设计方法,它主要是让程序设计人员利用软件本身所提供的各种控件,像搭积木式地构造应用程序的各种界面。
2. 可视化程序设计有哪些优点?
可视化程序设计最大的优点是设计人员可以不用编写或只需编写很少的程序代码,就能完成应用程序的设计,这样就能极大地提高设计人员的工作效率。
3. 能够进行可视化程序设计的语言有哪些?
能进行可视化程序设计的语言很多,比较常用的有微软的Visual Basic、Visual C++、中文Visual Foxpro、Borland公司的Delphi等。
4. 可视化程序设计中有哪些基本概念?
主要的几个基本概念有表单、组件、属性、事件、方法等。
5. 什么是表单(Form)?
表单是指进行程序设计时的窗口,我们主要是通过在表单中放置各种部件(如命令按钮、复选框、单选框、滚动条等)来布置应用程序的运行界面。
6. 什么是组件?
所谓组件,就是组成程序运行界面的各种部件,如:命令按钮、复选框、单选框、滚动条等。
7. 什么是属性?
属性就是组件的性质。它说明组件在程序运行的过程中是如何显示的、组件的大小是多少、显示在何处、是否可见、是否有效……
8. 属性可以分成哪几类?
属性可分成三类,设计属性:是在进行设计时就可发挥作用的属性;运行属性:这是在程序运行过程中才发挥作用的属性;只读属性:是一种只能查看而不能改变的属性。
9. 什么是事件?
事件就是对一个组件的操作。如用鼠标点击一个命令按钮,在这里,点击鼠标就称为一个事件(Click事件)。
10. 什么是方法?
方法就是某个事件发生后要执行的具体操作,类似以前的程序。例如当我们用鼠标单击“退出”命令按钮时,程序就会通过执行一条命令而结束运行,命令的执行过程就叫方法。
面向对象程序设计 1.历史回顾
1967年挪威计算中心的Kisten Nygaard和Ole Johan Dahl开发了Simula67语言,它提供了比子程序更高一级的抽象和封装,引入了数据抽象和类的概念,它被认为是第一个面向对象语言。20世纪70年代初,Palo Alto研究中心的Alan Kay所在的研究小组开发出Smalltalk语言,之后又开发出Smalltalk-80,Smalltalk-80被认为是最纯正的面向对象语言,它对后来出现的面向对象语言,如Object-C,C++,Self,Eiffl都产生了深远的影响。随着面向对象语言的出现,面向对象程序设计也就应运而生且得到迅速发展。之后,面向对象不断向其他阶段渗透,1980年Grady Booch提出了面向对象设计的概念,之后面向对象分析开始。1985年,第一个商用面向对象数据库问世。1990年以来,面向对象分析、测试、度量和管理等研究都得到长足发展。
实际上,“对象”和“对象的属性”这样的概念可以追溯到20世纪50年代初,它们首先出现于关于人工智能的早期着作中。但是出现了面向对象语言之后,面向对象思想才得到了迅速的发展。过去的几十年中,程序设计语言对抽象机制的支持程度不断提高:从机器语言到汇编语言,到高级语言,直到面向对象语言。汇编语言出现后,程序员就避免了直接使用0-1,而是利用符号来表示机器指令,从而更方便地编写程序;当程序规模继续增长的时候,出现了Fortran、C、Pascal等高级语言,这些高级语言使得编写复杂的程序变得容易,程序员们可以更好地对付日益增加的复杂性。但是,如果软件系统达到一定规模,即使应用结构化程序设计方法,局势仍将变得不可控制。作为一种降低复杂性的工具,面向对象语言产生了,面向对象程序设计也随之产生。
2.面向对象程序设计的基本概念
面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。通过这些概念面向对象的思想得到了具体的体现。
1)对象
对象是运行期的基本实体,它是一个封装了数据和操作这些数据的代码的逻辑实体。
2)类
类是具有相同类型的对象的抽象。一个对象所包含的所有数据和代码可以通过类来构造。
3)封装
封装是将数据和代码捆绑到一起,避免了外界的干扰和不确定性。对象的某些数据和代码可以是私有的,不能被外界访问,以此实现对数据和代码不同级别的访问权限。
4)继承
继承是让某个类型的对象获得另一个类型的对象的特征。通过继承可以实现代码的重用:从已存在的类派生出的一个新类将自动具有原来那个类的特性,同时,它还可以拥有自己的新特性。
5)多态
多态是指不同事物具有不同表现形式的能力。多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减少代码的复杂度。
6)动态绑定
绑定指的是将一个过程调用与相应代码链接起来的行为。动态绑定是指与给定的过程调用相关联的代码只有在运行期才可知的一种绑定,它是多态实现的具体形式。
7)消息传递
对象之间需要相互沟通,沟通的途径就是对象之间收发信息。消息内容包括接收消息的对象的标识,需要调用的函数的标识,以及必要的信息。消息传递的概念使得对现实世界的描述更容易。
3.面向对象语言
一个语言要称为面向对象语言必须支持几个主要面向对象的概念。根据支持程度的不同,通常所说的面向对象语言可以分成两类:基于对象的语言,面向对象的语言。
基于对象的语言仅支持类和对象,而面向对象的语言支持的概念包括:类与对象、继承、多态。举例来说,Ada就是一个典型的基于对象的语言,因为它不支持继承、多态,此外其他基于对象的语言还有Alphard、CLU、Euclid、Mola。面向对象的语言中一部分是新发明的语言,如Smalltalk、Java,这些语言本身往往吸取了其他语言的精华,而又尽量剔除他们的不足,因此面向对象的特征特别明显,充满了蓬勃的生机;另外一些则是对现有的语言进行改造,增加面向对象的特征演化而来的。如由Pascal发展而来的Object Pascal,由C发展而来的Objective-C,C++,由Ada发展而来的Ada 95等,这些语言保留着对原有语言的兼容,并不是纯粹的面向对象语言,但由于其前身往往是有一定影响的语言,因此这些语言依然宝刀不老,在程序设计语言中占有十分重要的地位。
4.面向对象程序设计的优点
面向对象出现以前,结构化程序设计是程序设计的主流,结构化程序设计又称为面向过程的程序设计。在面向过程程序设计中,问题被看作一系列需要完成的任务,函数(在此泛指例程、函数、过程)用于完成这些任务,解决问题的焦点集中于函数。其中函数是面向过程的,即它关注如何根据规定的条件完成指定的任务。
在多函数程序中,许多重要的数据被放置在全局数据区,这样它们可以被所有的函数访问。每个函数都可以具有它们自己的局部数据。下图显示了一个面向过程程序中函数和数据的关系。
图1 面向过程程序设计中函数和数据的关系示例
这种结构很容易造成全局数据在无意中被其他函数改动,因而程序的正确性不易保证。面向对象程序设计的出发点之一就是弥补面向过程程序设计中的一些缺点:对象是程序的基本元素,它将数据和操作紧密地连结在一起,并保护数据不会被外界的函数意外地改变。下图显示了一个面向对象程序中对象与函数和数据的关系。
图2 面向对象程序设计中函数和数据的关系示例
比较面向对象程序设计和面向过程程序设计,还可以得到面向对象程序设计的其他优点:
1)数据抽象的概念可以在保持外部接口不变的情况下改变内部实现,从而减少甚至避免对外界的干扰;
2)通过继承大幅减少冗余的代码,并可以方便地扩展现有代码,提高编码效率,也减低了出错概率,降低软件维护的难度;
3)结合面向对象分析、面向对象设计,允许将问题域中的对象直接映射到程序中,减少软件开发过程中中间环节的转换过程;
4)通过对对象的辨别、划分可以将软件系统分割为若干相对为独立的部分,在一定程度上更便于控制软件复杂度;
6)以对象为中心的设计可以帮助开发人员从静态(属性)和动态(方法)两个方面把握问题,从而更好地实现系统;
7)通过对象的聚合、联合可以在保证封装与抽象的原则下实现对象在内在结构以及外在功能上的扩充,从而实现对象由低到高的升级。
面对对象的程序设计方法
在数据输入模块内部设计中,采用面向对象的设计方法。[6]面向对象的基本概念如下:
对象:对象是要研究的任何事物。从一本书到一家图书馆,单的整数到整数列庞大的数据库、极其复杂的自动化工厂、航天飞机都可看作对象,它不仅能表示有形的实体,也能表示无形的(抽象的)规则、计划或事件。对象由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)构成一独立整体。从程序设计者来看,对象是一个程序模块,从用户来看,对象为他们提供所希望的行为。在对内的操作通常称为方法。
类:类是对象的模板。即类是对一组有相同数据和相同操作的对象的定义,一个类所包含的方法和数据描述一组对象的共同属性和行为。类是在对象之上的抽象,对象则是类的具体化,是类的实例。类可有其子类,也可有其它类,形成类层次结构。
消息:消息是对象之间进行通信的一种规格说明。一般它由三部分组成:接收消息的对象、消息名及实际变元。
面向对象主要特征:
封装性:封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。
继承性:继承性是子类自动共享父类之间数据和方法的机制。它由类的派生功能体现。一个类直接继承其它类的全部描述,同时可修改和扩充。继承具有传递性。继承分为单继承(一个子类只有一父类)和多重继承(一个类有多个父类)。类的对象是各自封闭的,如果没继承性机制,则类对象中数据、方法就会出现大量重复。继承不仅支持系统的可重用性,而且还促进系统的可扩充性。
多态性:对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。例如:Print消息被发送给一图或表时调用的打印方法与将同样的Print消息发送给一正文文件而调用的打印方法会完全不同。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。在OOPL中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性。
综上可知,在面对对象方法中,对象和传递消息分别表现事物及事物间相互联系的概念。类和继承是是适应人们一般思维方式的描述范式。方法是允许作用于该类对象上的各种操作。这种对象、类、消息和方法的程序设计范式的基本点在于对象的封装性和类的继承性。通过封装能将对象的定义和对象的实现分开,通过继承能体现类与类之间的关系,以及由此带来的动态联编和实体的多态性,从而构成了面向对象的基本特征。
面向对象设计是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。。按照Bjarne STroustRUP的说法,面向对象的编程范式:
l 决定你要的类;
2 给每个类提供完整的一组操作;
3 明确地使用继承来表现共同点。
由这个定义,我们可以看出:面向对象设计就是“根据需求决定所需的类、类的操作以及类之间关联的过程”。
面向对象设计方法的特点和面临的问题
面向对象设计方法以对象为基础,利用特定的软件工具直接完成从对象客体的描述到软件结构之间的转换。这是面向对象设计方法最主要的特点和成就。面向对象设计方法的应用解决了传统结构化开发方法中客观世界描述工具与软件结构的不一致性问题,缩短了开发周期,解决了从分析和设计到软件模块结构之间多次转换映射的繁杂过程,是一种很有发展前途的系统开发方法。
但是同原型方法一样, 面向对象设计方法需要一定的软件基础支持才可以应用,另外在大型的MIS开发中如果不经自顶向下的整体划分,而是一开始就自底向上的采用面向对象设计方法开发系统,同样也会造成系统结构不合理、各部分关系失调等问题。所以面向对象设计方法和结构化方法目前仍是两种在系统开发领域相互依存的、不可替代的方法。