小试基于JavaScript的面向对象思想实践

经常看到“面向对象已死”、“面向对象被弃用”、“面向对象已过时”等等论调,作为开发大军里的一枚边际小棋子,实在不敢妄断,也不清楚前沿大佬是怎么看待、分哪几个派别。不过,目前来看,J2EE占主流的应用开发市场,到处充斥着类和对象的定义。——这一定义是在大学时期学习面向对象思想(C++)课程时接触到的。上了大半学期,老师——万琳,穿绿色衣服的,如巧遇同门希望能点赞示意:-)——说过一句话,这门课主要是讲述面向对象思想,不是Windows编程,那是另外一门课。说实话,当时一下子懵了:学了半天学了个寂寞,这不是编程啊,是披着windows外衣的C++语言?

学完谭浩强的经典C语言编程书籍,再学C++是不是意味着我们的水平进一步提升了?还是学校觉得我们的水平提高了,可以接触更难的C++了?——当时就是这么想的,汇编这种低开发效率、晦涩难懂、“过时”的语言,学校教了个皮毛,学习了个云山雾绕;学完C语言,大体能写点什么了,但总感觉档次太低,水平有限,只能在命令行环境运行;总认为哪些写窗体的才是大牛——你看,人家做的界面跟windows的主题风格一致,也符合用户的操作习惯,这才是编程!

当然,自从被罗云彬拐跑以后,再也没怎么碰过界面开发呵呵,这是后话。彼时,只认为编程必讲类、对象、继承、多态、封装......,高级语言嘛,讲这个才高级、内行、上档次!只要有需求,先建一个xx类,添加一堆函数,按需添加几个变量,一般都是共有的呵呵,相当开放,不会有错。最后实例化对象,和其它对象协作运行程序,似乎面向对象思想也不过如此呵呵。但仍有一丝丝疑虑:这就是oo?升级版的结构、联合和printf函数?也有人对之一竿子打翻:只不过是套了个面向对象的壳子!嗯,从此疑窦丛生,深以为然。没觉得它比面向过程的C语言高级到哪里去,除了“cout、cin”比“printf”更简洁一些以外。不过也没多想,也许开发的世界里大抵如是吧。至少“类”这种抽象的思想已经植根于脑海了,也算了解了oo的基础。相信大家都被普及过银行与用户的例子,这是很典型的类与对象的现实例子。

这还是有实际意义的:后来接触C#、Java等都觉得十分容易上手,不存在什么入门、转型门槛了,几乎拿个例子来看看就能照猫画虎。可以说“面向搜索引擎”编程已经是水到渠成。O(∩_∩)O~这让开发成了体力活、青春饭。那么何去何从?

另外,虽然因项目的原因对JavaScript也有所了解,不过始终认为它只是用于辅助前端展示的小工具,根本不能和C/C++、Java等相提并论,更不屑于去投入精力深入了解。连定义个变量都只用“var”,根本没有“int、float、char”等这种类别,人称其“弱类型”语言。想想这也够简单,如同玩具。多年来回头看,发觉这可能也是它的长处:这就不存在类型匹配、类型转换的问题了(当然JavaScript中仍存在强制类型转换,但不是同一概念)。这也有时代的原因,当时的JavaScript远没有现在这么强大,也就是用于提交一下表单等。

直到有一天,遇到了一堆不明其故的“乱码”——$("#div").html("value").....

如果没有接触过jQuery的话,估计是看不懂这是在干吗。这个风格一改往日JavaScript的面貌,令人耳目一新。本以为这么复杂的“符号式”程序代码会很难,但是发现它的理念相当舒适:“write less,do more”。这不是我们梦寐以求的吗?于是花了一点时间学习了一下,突然发现它的学习成本很低,一篇w3cshool,居然能让人得心应手地把jQuery玩出花来。从此开始重视前端了,原来JavaScript还可以这么玩!感觉jQuery精华是其本身源码,而不是它的衍生物。第一次对JavaScript对象,prototype原型等有了初步了解,不得不感叹作者的实力与思想,远非我等可以望其项背的。可能先入为主吧,以后对React和Vue就没那么狂热了。

从此与前端结缘......

仅仅结缘而已,真正有过面向对象O-O体会的,还得从一本书说起。书名忘了,是关于设计模式的JavaScript实现的书,肯定是电子版,为了解决生活空间和搜索效率的问题^_^。副作用就是,硬盘被人为损坏后,再也想不起它的书名了( ˇˍˇ )。书中用JavaScript,不是jQuery,实现了工厂模式、单体模式、适配器模式、命令模式等等各式各样的模式。书中的实例都采用面向对象的方式,定义类、对象等,并通过继承来验证一些功能等。哪怕需要一个div标签、input标签,作者也是通过document.createElement()来创建,不用html静态标签。为什么作者用JavaScript,我一直有点疑惑。按理说用C++或Java会更大众化。不过正是这个疑惑,让我重新认识了JavaScript:

1、function不一定是函数,还可以是类(ES6以后有了class关键字)

2、JavaScript类的继承方式是原型继承,继承自原型链

3、创建对象使用new关键字,对象均继承自JavaScript对象Object,它是常量

4、好像还有个constructor构造函数,没用过,一般直接在用类定义对象的时候初始化

5、真正认识了this指针,也得益于对jQuery源码的分析

6、每个类都有一个隐藏属性:prototype,以前叫__proto__

这些大多都超出了的当时的认知水平,算是开眼界了。

转眼nnnn年过去了,ES6已不再是新宠,35岁门槛已成为行规,JavaScript的框架愈来愈多,j2ee占据半壁江山,面向对象已成鸡肋的说法甚嚣尘上,coding被鄙视papering(ppting)被颂扬......在工作中突然自行挖掘出一个管理云主机的需求:记录使用的云主机名、占用资源、账号密码、启用时间等。本来一个Excel表可以搞定,可是表越做越大,还得兼顾保密要求,时不时来个分类统计。

某一次灵光咋现,突然想到何不做一个简单系统?用于专门记录这些数据,并且可以自由选择可靠的加密方式,这保险系数和使用方式独一无二,既满足安全性还能自行按需进行二次开发调整。事实证明,可行,但不建议。当时想简单了,本以为开发一个简易的、用于记录简单数据的程序或表单,很简单。但是忽略了一个事实:任何用来记录数据或者数据库程序,至少要实现“CRUD”增删改查,随随便便一个内容的展示,都要至少匹配这四样功能(;′⌒`)。所以,看是简易,工作量还是不小,尤其改bug。庆幸,当时是满腔热血,一往直前,披荆斩棘,最后伤痕累累。工作成果可以认为是尝试探索,也可以看做是祭旗,就看主观立场和角度。也很庆幸,坚持下来了,有所收获,并不觉得亏。希望能对阅览者有所帮助,至少少走弯路,能够对面向对象是否已故给一个评价。

理一下需求:

1、云主机需要分类:如财务系统、智能分析系统、OA系统等

2、云主机要记录:CPU、内存、存储、账号、密码等信息

3、可总览或按分类查看云主机数量和信息

4、需要按分类统计计算资源(CPU、内存等)的使用量

5、操作维护简单

6、对第三方软件、插件依赖越少越好

就这么简单!

也许有人会说,access数据库+eclipse或VS,或者不用数据库直接把Excel文档当做数据源来做,太基础了。如果这样,还有必要讨论面向对象吗?

面对仍在服役的、使用奔腾(R)处理器的办公电脑,我确实不舍得安装开发环境^_^,怕它太累。于是想到了那本基于JavaScript的关于设计模式的书,默默地打开了记事本......

没错,第一次尝试着从面向对象的角度来设计一个软件:

1、所有云主机抽象为一个类,包含CPU、内存等属性,主机对象是类的一个对象或实例

2、所有云主机分类抽象一个类,包含分类名称,云主机明细等属性,分类为该类的一个对象或实例

3、分类对象可以增加、删除、修改、查询本分类的所有云主机

4、分类对象可以自动计算本分类指定资源的总量

5、文本文件作为数据源,便于移植和操作

6、文本文件内容可以被加密,使用AES加密方式(本来想使用RSA非对称加密,研究了半天突然醒悟到它不是做这个的)

7、尽量、尽量、尽量不使用第三方插件、中间件

8、坚持尝试使用原生JavaScript,可以免去编译操作

也许大神们会嗤之以鼻:就这?对,就这,这是我认知范围内,对面向对象思想的理解了。

html页面代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="crypto-js.min.js"></script>
    <style type="text/css">

        table.gridtable {

            font-family: verdana,arial,sans-serif;

            font-size:11px;

            color:#333333;

            border-width: 1px;

            border-color: #666666;

            border-collapse: collapse;

        }

        table.gridtable th {

            border-width: 1px;

            padding: 8px;

            border-style: solid;

            border-color: #666666;

            background-color: #dedede;

        }

        table.gridtable td {

            border-width: 1px;

            padding: 8px;

            border-style: solid;

            border-color: #666666;

            background-color: #ffffff;

        }

    </style>
</head>
<body>

    <table class="gridtable" id="tbl">

        <tr><td><input id='pwd' type="password" value="pswd"/></td><td><input type="button" onclick="login()" value="显示"/></td><td><a id="de">下载解密文件</a></td><td><a id="en">下载加密文件</a></td> </tr>

    </table>


<script type="text/javascript" src="serverViewjs.js"></script>
<script type="text/javascript" src="serverGroupjs.js"></script>
<script type="text/javascript" src="serverControllerjs.js"></script>
<script type="text/javascript" src="globlejs.js"></script>
<script>



	throw new Error('
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值