OO,OO以后,及其极限(1)

OO,OO以后,及其极限(1)

请作者与我们联系
(本文转载自软件工程专家网www.21cmm.com,不代表gigix观点)

1、什么是软件开发?

  软件开发的过程就是人们使用各种计算机语言将人们关心的现实世界映射到计算机世界的过程;

  现在的计算机的数学理论基础是由计算机的开山鼻祖,大名鼎鼎的图灵于1937年提出的图灵机模型。 随后不到十年,电子计算机就诞生了(1945)。(埃尼亚克)

  我们都知道,它当时的主要任务之一就是用于导弹弹道轨迹的计算。当时的软件开发(如果可以称之为软件开发的话)与现在的大不相同。为了算一道题,要有人事先把完成加减乘除等各类运算的部件像搭积木那样搭起来,如果换一道题,则要把这些部件分解开来,根据新的要求重新搭建,效率极低(与现在比)。

  现代电子计算机的体系结构及实际计算模型来自冯.诺依曼的思想。 1946年他和他的同事们发现了埃尼亚克的缺陷,发表了一份报告,提出了程序放入内存,顺序执行的思想,这样,当算一道新题时就只需采取改变计算机中的程序的“软”的方法。

  英国的科学家维尔克斯实现了冯.诺依曼的思想,领导研制了“艾克萨克”,在技术上比埃尼亚克来了个大的飞跃。

  因此,现在的计算机通常被称为冯.诺依曼计算机。

  软件开发的历史也从此正式开始。

  早期程序员们使用机器语言来进行编程运算;随着编译技术的出现,人们设计了许多更高级别的语言;这些语言摆脱了机器语言繁琐的细节,更接近于人的自然语言,迅速流行开来。   据统计,全世界的高级语言起码有几千种,但从可计算性的角度看,它们的计算能力都等价于图灵机。 已经证明,一个计算机语言,只要除了赋值语句之外,还包括顺序语句,条件语句和循环语句,它的计算能力即相当于图灵机。 这里当然要排除其他技术因素的影响,如程序长度,变量个数,数据精度等。

  由于图灵机的想法是把问题转化为一步一步按规则执行的机械求解过程,各种计算机语言也不过都是某种形式语言,因此软件开发的过程实质上就是程序员们对客观世界问题域的形式化的过程。   程序员们先建立问题的模型(形式化),再用计算机语言加以合适的表达,最后再输入计算机里进行计算。


2 从 PO(面向过程)到OO(面向对象)

  从上一节的论述我们知道:

  软件开发的过程就是人们使用各种计算机语言将人们关心的现实世界(问题域)映射到计算机世界的过程;如下图:

  现实世界问题域 → 建立模型(借助某种建模思想) → 编程实现(借助某种编程语言) → 计算机世界执行求解

  在谈论OO之前,先让我们回顾一下高级语言的历史。

  最早的高级语言大约诞生于1945年,是德国人楚译为他的Z-4计算机设计的Plan Calcul,比第一台电子计算机还早几个月;在电子计算机上实现的第一个高级语言是美国尤尼法克公司于1952年研制成功的Short Code;而真正得到推广使用,至今仍在流行的第一个高级语言是美国的计算机科学家巴科斯设计,并于1956年首先在IBM公司的计算机上实现的FORTRAN语言。

  早期的高级语言主要是应用于科学和工程计算,其代表作有FORTRAN和ALGOL60。计算机进入商业和行政管理领域以后,出现了COBOL和 RPG等便于商界使用的语言。近年来,这类语言和数据库技术,图形界面技术(可视化编程),面向对象的思想及RAD(Rapid Application Devolopment)的概念相结合,形成了一批更方便使用的所谓第四代语言(4GL),如Powerbuilder,Delphi,VB等。

  前一类应用于科学和工程计算的大型语言相对来说更为基础,因而也更为灵活,应用范围更为广泛。 在FORTRAN,BASIC(学习型)之后,自70年代以来,模块特征更明显,简单易用,可靠性强的PASCAL异军突起,在世界范围内广泛流行。 但进入80年代以后,它的地位又逐渐为更实用的C语言替代。 到现在,C语言的地位已相当于一种“高级汇编语言”了。

  80年代后期,面向对象的语言开始浮出水面,C++借助使用C语言的庞大程序员队伍,一举建立了面向对象语言的老大地位。从而OO的思想正式统治了整个软件开发界。C++的流行甚至使得美国军方从80年开始大力扶植的Ada语言还未及推广便胎死腹中了。

  90年代以后,计算机世界更是发生了天翻地覆的变化,原先的单机平台让位于WEB,“网络就是计算机”,新的语言不仅要是OO的,Visual的,更要是基于WEB的。 Java语言借INTERNET的东风,横空出世,一夜红遍天下,变化之快令人瞠目结舌。

  上述这些变化,表面是不同的编程工具在城头变幻大王旗,但其背后反映的却是一种更为深刻的认识论的改变,即你是用何种观点来认识这个世界的?   在PO中,程序员们分析了问题域之后,得到一个PO的模型,其中常见的词语是变量,函数,过程等;

  PO: 现实世界 → 流程图(变量,函数) → PO语言 → 执行求解

  在OO中,程序员们先得到一个OO的模型,其中常见的词语是类,对象,方法,消息等;

  OO: 现实世界 → 类图(对象,方法) → OO语言 → 执行求解

  我们可以看到:

  PO更接近于计算机世界的物理实现;OO则更符合于人们的认识习惯;

  如果说,软件危机的根源在于人们认识表达的过程(不断反复,逐步深化)和冯.诺依曼计算机的实现过程(顺序执行)之间存在巨大鸿沟的话,那么从PO到OO意味这这鸿沟在逐渐缩小;

  OO作为一种思想及编程语言,为软件开发的整个过程——从分析设计到coding——提供了一个完整解决方案。 OO堪称是软件发展取得的里程碑式的伟大成就,人们无不为之喝彩!

  一提到OO,我们将会联想到C++,smalltalk,simula,联想到Use Case,ROSE,Mr Jacboson 以及Rational公司,但却很少有人会提及维特跟斯坦(Wittgenstein)。 然而,正是这位充满传奇色彩的哲学家,不仅第一次清楚地表达了OO的思想,更进一步提及了OO以后的事情,及其最后的极限所在。

  在目前这个变幻莫测的时代重温并认真思考一下这位先哲的思想,或许能使我们更加清醒,更明确前方道路的漫长。

(未完待续)

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
<p> <span style="font-size:14px;color:#337FE5;">【为什么学爬虫?】</span> </p> <p> <span style="font-size:14px;">       1、爬虫入手容易但是深入较难如何写出高效率的爬虫如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中经常容易遇到被反爬虫比如字体反爬、IP识别、验证码等如何层层攻克难点拿到想要的数据这门课程你都能学到!</span> </p> <p> <span style="font-size:14px;">       2、如果是作为一个其他行业的开发者比如app开发web开发学习爬虫能让你加强对技术的认知能够开发出更加安全的软件和网站</span> </p> <p> <br /> </p> <span style="font-size:14px;color:#337FE5;">【课程设计】</span> <p class="ql-long-10663260"> <span> </span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 一个完整的爬虫程序无论大小总体来说可以分成三个步骤分别是: </p> <ol> <li class="" style="font-size:11pt;color:#494949;"> 网络请求:模拟浏览器的行为从网上抓取数据。 </li> <li class="" style="font-size:11pt;color:#494949;"> 数据解析:将请求下来的数据进行过滤提取我们想要的数据。 </li> <li class="" style="font-size:11pt;color:#494949;"> 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 </li> </ol> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 那么本课程也是按照这几个步骤循序渐进的进行讲解带领学生完整的掌握每个步骤的技术。另外因为爬虫的多样性在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性分别是: </p> <ol> <li class="" style="font-size:11pt;color:#494949;"> 爬虫进阶:包括IP代理多线程爬虫图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 </li> <li class="" style="font-size:11pt;color:#494949;"> Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 </li> </ol> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 通过爬虫进阶的知识点我们能应付大量的反爬网站而Scrapy框架作为一个专业的爬虫框架使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 </p> <p style="font-size:11pt;color:#494949;">   </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 从基础爬虫到商业化应用爬虫本套课程满足您的所有需求! </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <br /> </p> <p> <br /> </p> <p> <span style="font-size:14px;background-color:#FFFFFF;color:#337FE5;">【课程服务】</span> </p> <p> <span style="font-size:14px;">专属付费社群+定期答疑</span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <span style="font-size:16px;"><br /> </span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <span style="font-size:16px;"></span> </p>
<div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;"> </span> <div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;"> </span> <div style="color:rgba(0,0,0,.75);"> <div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;">当前课程中商城项目的实战源码是我发布在 GitHub 上的开源项目 newbee-mall 新蜂商城目前已有 6300 多个 star</span><span style="color:#4d4d4d;">本课程是一个 Spring Boot 技术栈的实战类课程课程共分为 3 大部分前面两个部分为基础环境准备和相关概念介绍第三个部分是 Spring Boot 商城项目功能的讲解让大家实际操作并实践上手一个大型的线上商城项目并学习到一定的开发经验以及其中的开发技巧。<br /> 商城项目所涉及的功能结构图整理如下:<br /> </span> </div> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <p style="color:#4d4d4d;"> <img alt="modules" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3N0b3JlL25ld2JlZS1tYWxsLXMucG5n?x-oss-process=image/format,png" /> </p> </div> <p style="color:rgba(0,0,0,.75);"> <strong><span style="color:#e53333;">课程特色</span></strong> </p> <p style="color:rgba(0,0,0,.75);">   </p> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <ul> <li> 对新手开发者十分友好无需复杂的操作步骤仅需 2 秒就可以启动这个完整的商城项目 </li> <li> 最终的实战项目是一个企业级别的 Spring Boot 大型项目对于各个阶段的 Java 开发者都是极佳的选择 </li> <li> 实践项目页面美观且实用交互效果完美 </li> <li> 教程详细开发教程详细完整、文档资源齐全 </li> <li> 代码+讲解+演示网站全方位保证向 Hello World 教程说拜拜 </li> <li> 技术栈新颖且知识点丰富学习后可以提升大家对于知识的理解和掌握可以进一步提升你的市场竞争力 </li> </ul> </div> <p style="color:rgba(0,0,0,.75);">   </p> <p style="color:rgba(0,0,0,.75);"> <span style="color:#e53333;">课程预览</span> </p> <p style="color:rgba(0,0,0,.75);">   </p> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <p style="color:#4d4d4d;"> 以下为商城项目的页面和功能展示分别为: </p> </div> <div style="color:rgba(0,0,0,.75);"> <ul> <li> 商城首页 1<br /> <img alt="" src="https://img-bss.csdnimg.cn/202103050347585499.gif" /> </li> <li> 商城首页 2<br /> <img alt="" src="https://img-bss.csdn.net/202005181054413605.png" /> </li> <li>   </li> <li> 购物车<br /> <img alt="cart" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvY2FydC5wbmc?x-oss-process=image/format,png" /> </li> <li> 订单结算<br /> <img alt="settle" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3Qvc2V0dGxlLnBuZw?x-oss-process=image/format,png" /> </li> <li> 订单列表<br /> <img alt="orders" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3Qvb3JkZXJzLnBuZw?x-oss-process=image/format,png" /> </li> <li> 支付页面<br /> <img alt="" src="https://img-bss.csdn.net/201909280301493716.jpg" /> </li> <li> 后台管理系统登录页<br /> <img alt="login" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvbWFuYWdlLWxvZ2luLnBuZw?x-oss-process=image/format,png" /> </li> <li> 商品管理<br /> <img alt="goods" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvbWFuYWdlLWdvb2RzLnBuZw?x-oss-process=image/format,png" /> </li> <li> 商品编辑<br /> <img alt="" src="https://img-bss.csdnimg.cn/202103050348242799.png" /> </li> </ul> </div> </div> </div> </div>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值