没错的编程姿势

最近点滴单星期日,我下 plantuml (贝尔实验室产品了一个超级绘图工具
graphviz,
这是一个包装版)把自之绘图项目举行了千篇一律次等全面的接口及类似的可视化。使用了许多设计模式,包括:桥接、装饰器、生成器、抽象工厂。绘制了晚,图像是生抖的,接口之间的互相和参数定义清晰优雅。很美好!

iPhone X
是苹果于宏观屏领域的率先涂鸦尝试,虽然说其实手体验不是特别之两全,尤其是老大刘海的计划性给人已经觉得挺生戏,但好于顶级的习性弥补了她的短,让其亦可以每大传媒评选的春十深手机榜单上名列榜首。

然并卵!

离开iPhone
X上市不交零星个半月,关于苹果要在2018年推出新升级版的iPhone X的音信直接不停,日前虽说生消息称,苹果除了以生产新一代的iPhone X新机外,还将推出同样版本又特别屏幕,但价格可愈发划算的iPhone X产品,屏幕尺寸为6.1英寸。而任何一样缓慢传闻中将推出的iPhone X Plus屏幕尺寸将再度怪,尺寸将到6.5英寸。

此项目以支付之处已背离了自己的有的感觉,对于程序设计的感到。从自我本着数据库及服务器的多年经验,使用基于数据表和多少说明的抽象结构,你说到底能够取最简易好用而扩大的软件结构。

时下而起重多iPhone X
Plus消息曝光,据台湾产业链爆料称,LG已经确定会为今年之初iPhone供应OLED屏,供应量约在1500万片左右,屏幕尺寸要汇集在6.5英寸。

而,这个绘图项目真正好复杂,涉及了森的多态和关系。比如,在一个抬高之列表中蕴藏种类不一之图纸,这些图存储的绘图数据与相关信息都不比,我欲拿这些数据视做同一种植档次,然后迭代它们,选出需要的一个而动它的连锁信息。所以,我尝试以学术界的设计模式来解决其中的题目。

事先传闻苹果会在当年解除用三星球的OLED屏幕,改用京东方还是LG的屏。如果确定LG成为新iPhone
X的OLED屏提供商,那么廉价版的iPhone X屏幕挺有或就是是京东方提供了。

当型转移得老大庞大之时节,我发觉及设计模式屁都不是。诸如桥接、装饰器以及另,都是树立以平种植而,假要你的父组件和子组件总是好忽略对方的细节,而得统一的处理它们。比如,面包来奶油味、抹茶味、水果味,面包又发出起码材料、高档材料,那么您可以把味道和资料分为两只不等之接口,然后分别抽象,并且结合这有限独接口生成更丰富的面包,比如低档材料的删减茶味面包。但是,真实的编程世界面临,这样的精彩状态颇少。在实的编程世界中,面包还想如果双重多的东西,比如奶油味的发生甜味,抹茶味的没有糖,有甜的面包放在左边柜台及,没有糖的面包放在右边柜台上。看到了吧,复杂度升级了,柜台和面包来无出糖是绑定的。这意味,如果您想像前那么抽象两单接口—味道和素材,那您本要考虑柜台。因为低档材料的去茶味面包是绝非糖的,放在右边柜台。现在,你只能抽象出味道和柜台的涉。在面的接口之上再增一重合。每当你的急需复杂一点,这种层即见面提升。比如,红糖面包与白糖面包。

根据,iPhone X Plus采用了跟iPhone
X类似之筹划语言,机身使用了含有“刘海”的一揽子屏造型。另外呢生信息指出,除了三星和LG,夏普、JDI也当争取成为苹果OLED的老三个供应商。iPhone
X廉价版和iPhone X
Plus采用的6.1英寸和6.5英寸屏幕对于市场吧需求量会生大,而苹果于供应商的选项以是异常挑剔,所以这些厂商能否在2018年变为新iPhone的供应商对他们自来说也是如出一辙种植品相的认可。

总的说来,就算设计模式避免了接近继承的爆裂,但是也避免不了抽象层级的扑朔迷离。

比方iPhone X Plus也改为当下屏幕尺寸最为特别之圆满屏手机,之前最充分的OPPO R11S
Plus和vivo X20 Plus的屏幕大小也6.43寸。在部署达到,iPhone X
Plus搭载了重强的A12电脑,4G运存,后置VR三替相机,3000毫安的电池,双玻璃机身+手术刀级别金属中框,最使中国果粉开心的凡,其开展支持双卡双待!

为此,我看自身以无会见编程了。于是,我尽量的又思考这些计划,并且又于网络上摸索曾经支持自己的筹划论调:面向数据结构编程而无是目标。如果未是为着是绘图项目,我绝对免会见铤而走险再同不良以设计模式和面向对象。

但于标价达到,鉴于目前版本都如八九千,更甚还胜iPhone X
Plus售价上万是某些悬念都无了!

自家本搜到了一致死堆 Linus 排斥面向对象和 C++ Java
的言辞,从感觉上,这些就是我面临设计困难时候的觉得。我曾经无数软这样化解自身的顺序设计。

这就是说,你针对下同样暂缓的iPhone
X期待吗?或者发生啊要讨论的言辞,欢迎留言为明美无限参与并脑暴吧!

git的设计其实深的简要,它的数据结构很平静,并且有长的文档描述。事实上,我大之同情应该围绕我们的数据结构来统筹代码,而休是根据其它的,我觉得这吗是git之所以成功的由有。[…]
依我的见地,好程序员和烂程序员之间的反差就在他们认为是代码更重要还是数据结构更要紧。

每当偌大的门类中,人们对无是祥和开支之模块并无打听,能很快掌握外模块中函数的适度含义才能够增强支付效率。而C++引入的各种抽象则使代码非常靠上下文,想了解一段子代码,需要看大抵得多的上下文。

面向对象语言为目标呢主干,加有并行关联的艺术,简直是呓语。重要的物应该是数据结构,对象自我来甚要?真正有意思的,是在不同档次的例外目标交互而且产生锁规则的时刻。但是,即使是这,封装什么“对象接口”也决大错特错,因为不再是十足对象的问题了。

诙谐之是,这里产生同篇另外一各长辈的怪早的契,推在 Google+ 上,来自 Unix
核心创建者之一 Rob Pike:

原稿链接
A few years ago I saw this page:
http://www.csis.pace.edu/~bergin/patterns/ppoop.html

Local discussion focused on figuring out whether this was a joke or
not. For a while, we felt it had to be even though we knew it wasn’t.
Today I’m willing to admit the authors believe what is written there.
They are sincere.

But… I’d call myself a hacker, at least in their terminology, yet my
solution isn’t there. Just search a small table! No objects required.
Trivial design, easy to extend, and cleaner than anything they
present. Their “hacker solution” is clumsy and verbose. Everything
else on this page seems either crazy or willfully obtuse. The lesson
drawn at the end feels like misguided epistemology, not technological
insight.

It has become clear that OO zealots are afraid of data. They prefer
statements or constructors to initialized tables. They won’t write
table-driven tests. Why is this? What mindset makes a multilevel type
hierarchy with layered abstractions better than searching a three-line
table? I once heard someone say he felt his job was to remove all
while loops from everyone’s code, replacing them with object stuff.
Wat?

But there’s good news. The era of hierarchy-driven, keyword-heavy,
colored-ribbons-in-your-textook orthodoxy seems past its peak. More
people are talking about composition being a better design principle
than inheritance. And there are even some willing to point at the
naked emperor; see
http://prog21.dadgum.com/156.html
for example. There are others. Or perhaps it’s just that the old guard
is reasserting itself.

Object-oriented programming, whose essence is nothing more than
programming using data with associated behaviors, is a powerful idea.
It truly is. But it’s not always the best idea. And it is not well
served by the epistemology heaped upon it.

Sometimes data is just data and functions are just functions.

— Rob Pike (One of the Unix creators (Ken Thompson, Dennis M.
Ritche, and Rob Pike))

几年前自己顾了此网页:
http://www.csis.pace.edu/~bergin/patterns/ppoop.html

本身实在不了解就首文章到底是匪是于搞笑。读了转,我则那个怀念说就不是千篇一律篇将笑的稿子,但是,拜托,它根本就是。让自己来和你们讲说他们于为笑啊吧。

e…以他们之口舌,我当称自己为 hacker
(黑客),不管我弗体贴这些。Hello! 你只是待一个粗的非能够重稍微之 table

根本无待什么目标。朴素平凡,容易扩展,容易清除,(比从她们之那种设计)多
TM 简单。他们的 “hacker solution”
真的是还要蠢又笨。他们写出来的那么堆物到处透漏着疯狂和愚昧。他们差技术认知。

颇明朗,OO 的狂热者们提心吊胆数据。他们好用讲话或者组织器来初始化 tables
。他们从来未写 table-driven 的测试。Why is this?
得起差不多坏之胸臆才见面选用一连串并且大多层的好像华而不实,而无失去用一个小三行
table ? 我一度听说有人用各种 OO 的物替换掉 while 循环。

而是好信息是,hierarchy-driven, keyword-heavy,
colored-ribbons-in-your-textook orthodoxy
这些东东抢绝望了。更多的人口摘取做而不是继承。有些人就再次开始认识
OO。

面向对象编程语言,其本意是下数据和相关的表现进行编程,这是一个很好的想法。事实真这样。但是,这个想法并无总是顶好的
idea。 这个想法并没了的体会编程的世界。

Sometimes data is just data and functions are just functions.

— Rob Pike (Unix 创建者之一之 (Ken Thompson, Dennis M. Ritche, and
Rob Pike))

是,我们得的就是是数量的肤浅和多少的解释器。用表来存储你待的各个数据,对于多态,C
语言中略直接干净:union。使用这样一个简便的结构,你能积存各种不同之档次,而且你仅仅需要仓储他们之指针,这意味着你切莫见面浪费多少内存,同时你能博取同样内存段但是多少不同的抽象。

然后,使用一个链表或者屡屡组,把这个 union
装进去,遍历,cast,然后利用你要的特定数据。

洋洋语言都发出 union 的变体,现代语言中的泛型就是 union
的如出一辙种植语法糖,但是若往往忘记了这种布局的实在价值跟企图。仔细回味下是全新的筹划:

enum ShapeKind {
  skLINE, skPORT, skBOARD
}

class Shape {
  kind: ShapeKind   
  value: Line | Port | Board
  contains(x: number, y: number): boolean
}

class ShapeContainer {
  shapes: Array<Shape>
  search(x: number, y: number): [ShapeKind, Shape]
}

type
  ShapeKind = enum
    skLINE, skPORT, skBOARD

  Shape = ref object
    case kind: ShapeKind
    of skLINE:
      line: Line
    of skPORT:
      port: Port
    of skBOARD:
      board: Board
    contains: (x: number, y: number): bool

  ShapeContainer = object
    shapes: seq[Shape]

proc search(c: ShapeContainer, x: number, y: number): tuple[kind: ShapeKind, shape: Shape]

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图