[原创] 从历史聊软件架构—面向对象编程(三)

bigbat   2021-4-14 19:39 楼主

随着计算机应用的快速发展,软件已经进入到一些行业的核心业务中。例如银行业务中已严重的依赖软件。一些银行营业厅在无法使用计算机的情况下甚至拒绝手工办理业务。软件的需求迅猛的增加,随着软件代码量的快速增加开发难度也随之增加。初期使用单一编程语言的开发模式也遇到了困难,80年代甚至还有使用汇编语言编写程序的项目。传说汉字213系统只使用汇编和debug完成。在80's年代后期出现了由多种语言程序编写同一软件项目的情况。如:使用C语言扩展foxBase的功能,在其文字档案中增加图片功能。这一时期虽然出现了图形界面但仍然以字符界面为主。那时混合编程和系统汉化代表着软件的最高标准。
80's年代讨论最多的是各种的编程语言。如:BASIC、C语言、dBase、pascal、COBOL、FORTRAN 等等。其中COBOL和FORTRAN语言主要在一些特定的领域内使用。在通用软件开发上比较少见。2002年的时候听有同事讲:"那时银行分理处的主机上核心业务还是使用COBOL编写的批处理程序来完成"。其中dBase和BASIC语言编程写的MIS软件最为常见。当时有两句顺口溜:"要想富,学数据库"。"学会C语言,一辈子花不完"。80's年代使用的编程语言多数还是面向过程的语言,面向对象的语言在我国的流行从90年代中期才开始流行。
"面向过程"和"面向对象"是两种编程方法,也有称编程思想。"面向"这一词也不是谁翻译的!真是误国误民。"面向"( 英语:Oriented),你可以理解为"使用"。面向过程、面向对象可以理解为:"使用"过程的编程和"使用"对象的编程。过程是什么呢,对象又是什么呢。过程就是C语言中的"函数function"、Pascal中的"过程procedure",其它语言中也又称“方法method”,就是被"封装"起来的一段代码和数据,"封装"就是将代码或数据组织成一个单元通过接口来引用。举个例子:C语言中定义函数时使用{花括号}包裹起来的程序代码和实参数据组成的单元就是被封装起来的封装体,"接口"就是调用时函数的形参和返回值。著名的printf函数,你不需要知道该函数体中的代码和数据,但确不影响你调用。对于程序语言封装的范围越大,程序代码的可重用代码就越简洁。对象就是C++语言中使用class类型或struct类型创建的"自定义类型的变量",也可以称"类型实体"。C++中class类型是一种可以封装函数和数据的自定义数据类型。那么class封装了什么呢?class封装了函数(method)和数据(data),class可以封装函数,也就是说class结构的封装级别高于函数。目前class是最高级别的封装,"切面(Aspect) 、模板(Template)等"只是改进了class的性能。那么面向对象的接口是什么呢?在编写class结构体中将不需要调用者直接操作的函数或数据定义为private,需要调用者直接操作的函数或数据定义为public。对象的接口就是public的定义部分。对象调用者只需要知道接口中的public函数或数据就可以使用该对象了。面向对象的设计原则就是通过"接口"来简化编程。 image.png

例如:From1 frm= new From1(); frm.show();中只要通过show()函数就可以使窗体显示出来了。至于show中调用什么函数和使用了什么数据是不需要调用者了解的。其实我理解到上述的内容,花费了2、3年的时间。

image.png

回复评论 (9)

面向对象似乎最适合的就是GUI。不少地方纯OO搞起来别扭。

默认摸鱼,再摸鱼。2022、9、28
点赞  2021-4-14 22:42
引用: freebsder 发表于 2021-4-14 22:42 面向对象似乎最适合的就是GUI。不少地方纯OO搞起来别扭。

java不是纯OO,搞起来特别扭;scala和ruby是纯OO,然而更灵活。

点赞  2021-4-15 09:22
引用: lcofjp 发表于 2021-4-15 09:22 java不是纯OO,搞起来特别扭;scala和ruby是纯OO,然而更灵活。

面向对象的语言只要支持:

1、class封装

2、继承

3、多态

就是面向对象语言

点赞  2021-4-15 10:07
引用: freebsder 发表于 2021-4-14 22:42 面向对象似乎最适合的就是GUI。不少地方纯OO搞起来别扭。

面向对象程序主要问题是:软件的效率较C语言、汇编低。内存管理复杂。这个与GUI没关系,代码量大的情况下面向对象语言比较有优势,例如:非GUI的HTTP servic软件多数也是面向对象软件多一些。

点赞  2021-4-15 10:15
引用: lcofjp 发表于 2021-4-15 09:22 java不是纯OO,搞起来特别扭;scala和ruby是纯OO,然而更灵活。

scala和ruby就算啦,推荐java的替代go、c++的替代rust

点赞  2021-4-15 10:17
引用: lcofjp 发表于 2021-4-15 09:22 java不是纯OO,搞起来特别扭;scala和ruby是纯OO,然而更灵活。

这种是垃圾。。。凡是那种“一切皆xxx”的,根本就适应不了多样化。所以python大行其道,js这种垃圾大行其道,java在服务领域大行其道。。。

默认摸鱼,再摸鱼。2022、9、28
点赞  2021-4-15 13:47
引用: bigbat 发表于 2021-4-15 10:15 面向对象程序主要问题是:软件的效率较C语言、汇编低。内存管理复杂。这个与GUI没关系,代码量大的情况下 ...

效率不算低,至少在99.99的场景中虚函数这点效率损失可以忽略不计。然后有虚拟机的语言,效率接近原生系统,但是整个系统的运行期行为例如反射,带来的好处远大于虚拟机的运行开销。面向对象不是指语言,而是说的建模,C也可以实现所谓的继承多态封装的语言层面的面向对象,只是很别扭,很不自然,OO语言当然也可以实现各种功能,只是在某些不适合OO建模的地方弄得很别扭。GUI是天然适合面向对象建模来描绘的东西。

默认摸鱼,再摸鱼。2022、9、28
点赞  2021-4-15 13:53

楼主大佬,可不可以分享一下C下面的面向对象编程。

点赞  2024-5-12 08:23
引用: lugl4313820 发表于 2024-5-12 08:23 楼主大佬,可不可以分享一下C下面的面向对象编程。

不知道问的是什么内容:“C下面的面向对象”,只得是什么,面向对象语言的特征:类封装、继承、多态

点赞  2024-5-12 09:30
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复