文档章节

电源插座和软件设计

 普罗旺斯的啊
发布于 2016/11/12 11:15
字数 1334
阅读 5
收藏 0
点赞 0
评论 0

  2002年的冬天,我在北京联通出差。刚参加工作,有点小紧张,给电脑接电源,插三孔插座的时候错位60度,噗哧一下冒起了火花。没有酿成事故,但是这件事情一直没能忘记。其实国标的三孔操作在设计规范上已经考虑了这种错误,三个插孔的开口方向是不一样的。问题出在插座上面,当时用的是万能接线板,除了国标,欧标和美标也能插进去,因此国标插头即便错开60度,用点力气也能插进去。此后到其他地区出差,特别留意他们的插座,发现最安全的是欧标,三相插孔的设计两阴一阳,根本没有错位的可能。

  

 

  欧标插头和插座

  欧标插座还有其他优点,比如最多调整90度就可以对准;插头作为整体嵌入插座,不用担心金属部分暴露漏电;圆柱状金属头加球面前端设计,省力且牢固。这些暂且按下不表,今天想谈的是程序设计语言中的安全措施。

  程序语言的插座–类型系统

  最近用python开发过几个小工具,颇为趁手。原因之一是python支持duck typing。可以把任意类型的对象赋值给变量,运行时系统在访问到这个对象的时候才会判断其类型是否正确。换句话说,实现了类级别的运行时多态(对比一下,C++/JAVA通过接口和虚函数支持函数级的运行时多态,而模板支持类和函数级别的编译时多态)。

  首先,不要求提前定义接口。可以边思考边写代码,不用在接口部分和实现部分之间来回切换。

  其次,不要求统一的对象界面。实现多态的时候不需要对象都是从统一接口上扩展出来的,对象可以拥有只在某些特定分支下会被调用的接口,其他对象,如果不会命中这些分支,就可以不用定义这些接口。如果习惯了c++/java,这种风格就是脑残,但是对快速开发真的很有效。想象一下,在静态语言的OOD中,如果原来设计的统一接口满足不了需求,通常意味着概念抽象出了问题。乐观情况下,要么扩展原有接口方法的内涵,并在调用者和被调用者之间重新分布职责;要么把无法涵盖的部分抽取出来,增加一个接口方法。

  凡事必有两面,首先是正确性不易验证。类型错误只有程序运行时才能检测出来,通电以后才能发现抽头插错了,用静态语言,同样的错误最晚编译时就能检查出来。

  其次是理解代码费力。阅读静态语言,看看数据结构、函数原型(C语言),或者类型/接口定义(C++/JAVA),对程序结构能了解个八九不离十。动态语言,非得把对象间的调用代码读完,才能把握程序的设计结构。

  JAVA是相反风格的代表,典型的“欧标插座”。不支持动态类型,更不支持内存这种“万能插座”。做一件事情,JAVA只给你一种方法。

  语言设计和程序设计要考虑两个认知因素,一是方便写,一是方便读。动态类型方便写,静态类型方便读。动态语言编写结构复杂,确定性要求高的程序还是面临挑战。语言没有内置“欧标插座”,必然要求语言的使用者自律,尤其是团队协作开发时必须遵循一致的设计策略。

  提升安全的语言特性

  更多阅读请点击:郑州白癜风医院

  更多阅读请点击:郑州牛皮癣医院

  程序设计语言一直在往里面添加安全特性。比如ANSI C添加对函数原型的支持(最古老的C语言只关心函数名字,不检查返回值和参数类型,C的链接器现在还保留这样的设计),const和static修饰符;C++链接器的隐式函数类型检查,引用类型,类成员的可见性修饰;java对指针的弃用,package,等等。恰当使用这些特性,可以把错误捕获在编码阶段。

  不止是软件设计

  但凡人会犯糊涂的地方,都是“欧标插座”的用武之地。只能单向打开的消防门,电脑机箱里的各种接线缆接头,优秀软件的人机界面等等。程序设计语言和API,本质上是一种抽象的人机界面。程序语言是人和计算机之间的界面,API是人和另外一堆代码的界面。记得读大学的时候,学校里有个工业心理学实验室,主任是现在阿里的王坚,他们的主要方向就是各种人机界面设计问题。

© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 7
码字总数 6339
作品 0
郑州
设计模式——适配器模式(adpter模式)

适配器模式:按照字面理解可以理解为要适应要配合才能一起很好的工作。 专业定义:把一个类的API转换成用户期望的另一种API,让原本不能在一起工作的类能够在一起工作。如果理解起来不是很明...

姬鑫 ⋅ 2015/05/16 ⋅ 0

怎么做办公室网络布线

怎么做办公室网络布线 浏览:1144 | 更新:2014-10-07 17:43 1 2 3分步阅读 网络布线实现广域网或者局域网的链接和应用。 工具/原料 网线 光纤 路由器 方法/步骤 一、办公室网络布线设计原则...

james_laughing ⋅ 2016/02/26 ⋅ 0

攒机号外之三

呵呵,为了复习一些基础知识,网上到处游 一、主板图解    一块主板主要由线路板和它上面的各种元器件组成   1.线路板   PCB印制电路板是所有电脑板卡所不可或缺的东东。它实际是由几层...

match2000 ⋅ 2011/12/12 ⋅ 0

Arduino可穿戴开发入门教程LilyPad和LilyPad Simple的介绍

Arduino可穿戴开发入门教程LilyPad和LilyPad Simple的介绍 LilyPad和LilyPad Simple的介绍 LilyPad和LilyPad Simple是LilyPad微控制器板的两个主要变型。他们是本书的核心,所以在开始使用之...

大学霸 ⋅ 2016/06/03 ⋅ 0

戴森召回逾11万台进口空气净化器,曾被质检总局通报,宣扬的中产标签是否符实?

日前,戴森贸易(上海)有限公司向国家质检总局提交了召回计划,从2017年12月12日起召回部分进口空气净化暖风器。据统计,中国大陆地区受影响的产品数量共计116283台。 据澎湃新闻报道,本次...

智科技 ⋅ 2017/12/15 ⋅ 0

安森美半导体的行业首款单芯片移动电源方案更智能且支持快充

随着移动设备越来越丰富的功能,耗电量却也显著增加,而消费者同时希望设备持续连接的生活方式和时尚轻薄的外形,电池续航力成为亟需解决的问题,更智能且支持快充的移动电源方案便应运而生。...

玄学酱 ⋅ 04/23 ⋅ 0

设想一个没有开源的世界

“如果蜜蜂从地球上消失,那么人类只能存活四年。”说这句话出自阿尔伯特·爱因斯坦之口实际是误传,而这一大胆的预言,其描绘的景象以及与地球生命的相关性都具有深远意义。人类的生存依赖于...

oschina ⋅ 2015/01/01 ⋅ 19

家电安装5大注意事项,你注意到没

家电安装很重要!!!常州室内设计为大家分享这5点注意事项大家一定要明白!   家电安装的5大注意事项介绍:   1、不可带电操作   为了防止触电,保护人身安全,家电设备的安装及操作必...

MathType ⋅ 2016/09/18 ⋅ 0

《JAVA与模式》之适配器模式

在阎宏博士的《JAVA与模式》一书中开头是这样描述适配器(Adapter)模式的: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够...

李序锴 ⋅ 2017/11/12 ⋅ 0

云计算不是万能 应用于电网存在危险性

编者:这些砖家还真是敢想,个人觉得云计算在计算机领域尚且不成熟,更别说电网了。 有部分专家提出云计算模式可以应用于电力企业供电网络发展中。这些专家认为,只要将云计算模式的原理应用...

红薯 ⋅ 2010/06/13 ⋅ 5

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Cloud构建微服务架构—创建“服务注册中心”

创建一个基础的Spring Boot工程,命名为eureka-server,并在pom.xml中引入需要的依赖内容: <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-par......

itcloud ⋅ 19分钟前 ⋅ 0

拖动

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>event</title> <style> #box { width: 100px; height: 100px; background-color: aquamarine; position: absolute; } </style......

fyliujj ⋅ 21分钟前 ⋅ 0

es6 polyfill array

polyfill之javascript函数的兼容写法——Array篇 1. Array.isArray(obj) if (!Array.isArray) { Array.isArray = function(arg) { return Object.prototype.toString.call(arg) === '[objec......

球球 ⋅ 23分钟前 ⋅ 0

kibana启动异常

检查一下:kibana.yml 每一对key:value中,冒号之后应有空格。

增删改查1 ⋅ 25分钟前 ⋅ 0

js修改img的src属性刷新图片时的图片缓存问题

问题:上传一张图片,通过js更新src属性刷新图片使其即时显示时, 当img的src当前的url与上次地址无变化时(只更改图片,名称不变,不同图片名称相同)图片不变化(仍显示原来的图片) 但通过...

HaierBrother ⋅ 25分钟前 ⋅ 0

Mysql

1.Jdbc Url 设置allowMultiQueries为true和false mysql的批量更新是要我们主动去设置的, 就是在数据库的连接url上设置一下,加上* &allowMultiQueries=true *即可。 参数名称 参数说明 缺省...

瑟青豆 ⋅ 28分钟前 ⋅ 0

mysql导出导入表结构与数据

当我们需要进行数据迁移时,mysql自带的mysqldump会是最好的方式。 1.导出某张表的结构和数据 首先,我们应当使用服务器,打开终端,连接到所需要导出的表所在的服务器上。执行命令: mysqld...

hengbao5 ⋅ 29分钟前 ⋅ 0

世界杯也走向“比拼”大数据的时代

《日本经济新闻》6月19日报道称,俄罗斯足球世界杯已于6月14日揭开战幕。作为第21次举办的足球世界杯,如何活用大数据有可能成为决定各支球队胜负的重要因素。从对阵球队的分析到战术建议,还...

加米谷大数据 ⋅ 29分钟前 ⋅ 0

金额转为千分制,金额转中文大写

金额转关为大写 /** 数字金额大写转换(可以处理整数,小数,负数) */ function digitUppercase(n){ if(!n) reutrn "" let fraction = ['角', '分']; let digit = [...

YXMBetter ⋅ 32分钟前 ⋅ 0

开发利器JRebel部署SpringBoot项目

不要以为年纪轻轻就跌倒了人生谷底,未来还有更大的下降空间等着你。 idea下载和安装JRebel 激活JRebel 访问https://my.jrebel.com/ 使用facebook或twitter登录 勾选 Build project automati...

郑龙飞 ⋅ 38分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部