软件开发是什么有形的工具是人类肢体的延伸
发表时间:2023-10-27 11:06:19
文章来源:炫佑科技
浏览次数:206
菏泽炫佑科技
软件开发是什么有形的工具是人类肢体的延伸
有形工具是人体的延伸; 计算机系统是人脑的延伸:
把人脑中的系统模型放到计算机系统中运行,从而解放人脑去做更有价值的事情。
“人脑中的系统模型”可以比喻为导演脑海中的电影。 在实际拍摄之前,导演会在脑海中播放出来,然后通过演员、道具等进行再现。或者可以比喻为电气设计师脑海中的电气设备。 在投入生产之前,设计者脑子里就有完整的电气模拟。
将“人脑中的系统模型”变成可以在计算机系统中运行的系统的过程就是软件开发。
设计者心中的电气模型必须适应当前的生产工艺和技术水平,才能生产出产品。 先进的设计只能停留在概念阶段; 导演的天马行空的想象如果超出现实拍摄技术的限制就无法拍成电影。 “人脑中的系统模型”要想*终成为可操作的计算机系统,也受到计算机技术发展水平的限制(包括硬件技术和软件技术的限制),必须进行一些适应性调整。被制作。 我们只是希望随着计算机技术的发展,这种调整的范围越来越小,所以我们不应该被迫妥协我们的假设。
在计算机技术发展初期,计算机只能做一些科学计算,人类只能将一些“科学计算模型”交给计算机来实现; 随着计算机技术的发展并能够完成更复杂的任务,我们希望计算机系统可以帮助我们做的不仅仅是计算,我们还可以做一些行政工作或处理一些繁琐的事情。
2.如何进行软件开发
*初,计算机只能用于一些科学计算,人脑中的计算过程模型只能放入计算机中运行。 软件开发的思维方式自然是面向过程的,现阶段的编程语言也是面向过程的。 的。 后来的结构化编程只是代码层面的优化,即“提高程序的清晰度和质量,避免写出意大利面条式的代码”。
随着计算机硬件技术的发展以及计算能力和存储能力的提高,计算机应用到了更多的领域。 这些领域的模型不再是线性的,而是三维的、层次化的。 然而,在软件世界中,由于历史编程语言和编程思想的限制,我们仍然继续使用面向过程的编程思想和编程语言来描述人脑中的模型。 这就需要转换——将三维层次模型转换为线性过程模型。 它们之间没有天然的联系。 程序本身也晦涩难懂,因为它并没有直接反映人脑中的模型。
针对这些问题,面向对象的思想开始兴起。 面向对象编程起源于Doug的观点:计算机是人脑的延伸。 Alan Kay 后来创建了一种编程语言()来通过代码实现他的想法。 事实上,这位面向对象编程先驱的目标就是用代码捕捉人们头脑中的模型。 今天图形交互界面的繁荣和面向对象语言的统治地位就是当年这些面向对象思想的结果。
然而,“用代码捕捉人们头脑中的模型”的目标尚未完全实现。 目前掌握的面向对象编程语言,如Java、C++、C等,都不能很好地捕捉人们头脑中的模型。
人脑中的模型大致可分为活体动态模型(人、组织、动物等)、响应性静态模型(机器、电子设备等)和完全静态模型(建筑物、构筑物等)。 现代计算机系统一般代表人类处理事务,类似于人或组织,在人脑中描绘出一个“活的动态模型”。 计算机系统有时会被用来进行模拟、仿真等来描绘人脑的“响应式静态模型和完全静态模型”。 现代编程语言可以很好地表征后两种模型,但不能很好地表征“活的动态模型”。 现代面向对象编程语言中的对象非常接近“反应式静态模型和完全静态模型”。 它们都是没有生命的,只有当线程看到并调用它时才具有短暂的执行过程。 即便如此,现代面向对象编程语言在描述静态模型时仍然存在很多问题。 例如,人类的“响应静态模型和完全静态模型”可能是电子设备,它受到物理和几何特性的限制。 构成电子设备的组件之间的连接松动。 耦合性高内聚,组件接口清晰明了,组件之间的组装非常自然轻松。 然而,我们程序中的对象通常不是松散耦合的,而是高度内聚的。 我们总是认为我们可以做得比自然更好软件开发是什么有形的工具是人类肢体的延伸,但我们常常陷入困境。 这就是为什么产生了这么多设计原则、设计模式等来指导我们设计。
虽然通过设计原则、设计模式等指导,我们可以完美地描述人脑中的“响应式静态模型和完全静态模型”,但描述“活体动态模型”仍然存在一些先天不足,语言级别不支持捕获模型中的动画对象、角色变化、交流方式等。 例如,组织单位中的每个人都是一个独立的生命体,其角色可以是多重的,也可以是可转换的。 人与人之间的沟通可以是直接的、同步的、异步的,也可以通过对话机制间接进行。 。 这些模型还不能直接通过现代面向对象语言来表达。
将人脑模型放入计算机系统的理想过程可能如下所示:
(1)人脑首先利用其优势以自然的方式构建商业模型(不是程序思维或计算机思维)
(2)业务模型不断细化为能够满足业务需求、能够在人脑中推演并顺利运行的模型系统。 此阶段应输出*终的详细模型。
(3)计算机系统理解上一步输出的详细模型,利用计算机相对于人脑的优势,更好地运行模型并提供模型中预定义的服务。
理想情况下,(2)和(3)之间的连接应该是如上所述的无缝连接,或者至少连接应该是相对自然和容易的。 然而,现代编程语言尚不能很好地描述人脑中的模型,以达到自然、轻松连接的目的。 我们来谈谈现代面向对象语言的问题。
(一)现代面向对象语言的优劣
1、漏包问题
(1) 对象的私有属性可能是对象
(2) 所有对象都位于每个人都可以访问的堆空间中
私有属性可能会被共享——有时是有意设计的,但通常是偶然的(我们只需要传递对属性对象的引用),无论哪种方式都意味着失去对私有属性的本地控制,并且也失去了本地简单推理的正确性,并且数据封装容易被破坏。 从表面上看,对象只能通过其公共方法来访问私有属性,但实际上有很多隐藏的方式(直接修改私有属性引用的对象、通过反射机制访问私有属性等)来访问私有属性。
2.内部状态一致性问题
即使对象的私有属性是原始类型(如int、long等),安全性也得不到保证,比如下面的A类:
A级
整数计数;
事物事物=新事物();
空白()
……
计数 = 42;
事物.f();
...
计数=42; thing.f()执行后软件开发,count的值是多少? 无法确定,因为 count 的值可能会被 thing.f() 调用修改。 这种不确定性有时很难预防,就像我们熟悉的全局变量问题一样。
上述对象问题导致我们看到的(脑海中的模型)与实际执行的(计算机系统模型)不同。 很容易在没有意识到的情况下犯错误。
3、现代面向对象语言中的对象与我们OO思想中的对象不同
(1)一切物体都是死的,没有自己的生命
(2)所有对象方法都必须由外部线程调用——它们必须面向调用者
(3)任何看到该对象的线程都可以调用该对象的方法,而对象本身无法阻止该方法被调用。
(4)即使对象本身处于不适当的状态,也不能阻止别人访问它,对象也无法控制自己
(5)每个线程在调用对象方法时都会给对象带来短暂的生命。
(6)线程可以随意跨越对象的边界,而不管底层结构的状态是否不平衡。
(2)回归面向对象思想
(1)对象封装数据和操作数据的算法
(2)对象中的数据和算法是私有的。 外界看不到数据,也无法直接执行组件中的方法。
(3)对象有自己的生命体(线程),对象中的算法由内部生命体执行
(4)对象之间的通信方式有很多种:同步、异步、直接、间接、一对多、多对一、多对多等,但都不是直接方法调用,而是发送消息。
炫佑科技专注互联网开发小程序开发-app开发-软件开发-网站制作等