`
chelsea
  • 浏览: 117846 次
  • 来自: ...
社区版块
存档分类
最新评论

Thinking in Current Programming Way

    博客分类:
 
阅读更多

 

 

一、我们要解决的问题

  • 功能的描述、表达,即功能的实现

  • 结构的描述、表达,即功能的组织

  • 业务的描述、表达,即最终的目标

二、我们对功能的描述、表达

  • 开始,人们用指令封装了电路来表达功能

  • 后来,人们用函数封装了指令来表达功能

  • 再后来,人们用库封装了函数来表达功能

  • 那么现在,我们用什么来封装库去表达功能呢?【问题一】

三、我们对结构的描述、表达

3.1,programming principles

  • 开始,人们用文字来描述简单、正确、灵活、高效的有关软件结构的principles,如“模块化”、“松耦合和高内聚”,“抽象和实现隐藏”,“封装变化”等,可是,依然存在不合理的结构

  • 于是后来,人们强化了编程语言来支持这些principle,并发明了各种paradigms

3.2,programming paradigms

 

在大英百科全书关于“分类学理论”中提出:人类在认识和理解现实世界的过程中,普遍运用着三个构造法则:

  1. 区分对象及其属性,例如,区分一棵树和树的大小或空间位置。

  2. 区分整体对象及其组成部分,例如,区分一棵树和树枝。

  3. 不同对象类的形成及区分,例如,所有树的类和所有石头的类的形成和区分

  • 人们在表达软件的结构方面,已经使用了结构化编程,面向对象编程、函数式编程、泛型编程、及各种产生式编程等

  • 结构化编程固化了人们认识世界的第二个法则:区分整体对象及其组成部分

  • 面向对象则补充了第一和第三个法则,强化了第二个法则

  • 如果分类是正确的,那么似乎面向对象的表达能力已经足够了,为什么还需要函数式、泛型、AOP之类的呢?

  • 我们运用一下系统化的思维方式,那么可以发现,面向对象其实是一种“meta paradigm”,而我们日常所说的面向对象其实是“业务空间的面向对象”,泛型和函数式则是“算法空间的面向对象”,而AOP则可理解为“结构空间的面向对象”

  • 那么现在,我们最需要什么空间的面向对象?【问题二】

3.3,object oriented principles,idioms,and patterns

  • 开始,人们用文字来描述oo paradigm中有关软件结构的principles,如“Liskov替换原则”、“开放封闭原则”、“依赖倒置原则”等,可是,依然存在不合理的结构

  • 于是后来,人们发明了各种idioms和patterns,来支持这些principles

  • 但再次,idioms和patterns依然只是用文字来描述,如Effective xxx,GOF,POSA,PEAA等,因此依然存在不合理的结构

  • 于是后来,人们发明了直接的语言特性来固化各种idioms和patterns,如Java的“synchronized”固化了“scoped lock idiom”,“monitor object”(POSA2)等

  • 但被固化的只是少数简单的idioms和patterns,那么现在,我们用什么来固化复杂的idioms和patterns,以消除不合理的结构呢?【问题三】

四、我们对业务的描述、表达

  • 做过图形图像领域、做过通信领域、做过信息管理领域,但用的都是同样的或类似的编程语言,而它们都是面向实现的

  • 那么,我们应该用什么去直接描述业务呢?【问题四】

五、后模式时代

  • 先来看【问题三】,目前主流的思想是非形式化的模式语言,或模式系统,并认为模式的每一次具体实现都可以有略微的变化;这或许是对的

  • 但同一个project中,重复的代码段被认为是bad smell,并使用idioms和patterns消除,那么,不同project中,相似或相同的代码段算不算整个软件开发领域的bad smell呢?

  • 再来看【问题三】,各种framework做出了另外一种回答,包括.Net和J2EE,而印象最深的,则是loki和spring,便是本身基于各种模式开发,并提供了一个基于模式的开发平台

  • loki用模板元编程自动于编译时创建了各种pattern的骨架,基于loki编程,只需要编写特定pattern的单个组成部分,然后作为参数传递给loki,便会得到各种合理的结构

  • spring用Java元编程和配置,实现了IoC模式和Interceptor模式(POSA2,AOP便是一种自动化的Interceptor模式的实现),基于IoC和AOP,spring又进一步固化了工厂模式,代理模式,职责链模式,观察者模式等;如果决定使用spring编程,则应该尽量使基础架构基于spring,而不是仅仅在局部使用

  • 然而尚有许多模式没有流行的framework将其固化、没有被发现,我们尚需理解模式,并且基于库的解决方案导致我们再次得到【问题一】,那么什么技术能够使模式退居幕后,让我们感觉不到它们的存在呢?或者其实是无处不在,进入后模式时代呢?【问题五】

六、解决方案空间

  • 再来看【问题二】,我们最终是要解决问题,因此姑且将最需要的空间称之为解决方案空间,姑且令其包含“描述”和“实现”两部分,姑且将目前的各种paradigm都划作“实现空间”

  • 那么如此姑且之后,“描述空间”的面向对象的paradigm该是什么呢?【问题六】

七、最终的几个问题,后编程时代

  • 【问题一】, 我们用什么来封装库去表达功能呢?

  • 【问题四】, 我们应该用什么去直接描述业务呢?

  • 【问题五】, 什么技术能够使模式退居幕后,让我们感觉不到它们的存在呢?或者其实是无处不在,进入后模式时代呢?

  • 【问题六】, “描述空间”的面向对象的paradigm该是什么呢?

  • 呵呵,莫非是DSL和LOP?

分享到:
评论

相关推荐

    Thinking in C 录音版 part3

    Bruce Eckel是著名的计算机科学作家,其Thinking In系列是深受读者欢迎的经典著作,其中Thinking In C++/Java虽经一版再版,热度始终不减。除了Thinking In C++和Thinking In Java外,Bruce Eckel在大学授课时所将的...

    Thinking in Java 4th Edition Annotated Solutions Guide

    根据提供的文件信息,以下是对文件《Thinking in Java 4th Edition Annotated Solutions Guide》中所包含知识点的详细解释: 首先,文件标题《Thinking in Java 4th Edition Annotated Solutions Guide》指出了这是...

    Thinking in java和Thinking in c++中文版

    《Thinking in Java》和《Thinking in C++》是两本非常经典的编程教材,由Bruce Eckel撰写,分别针对Java和C++这两种强大的编程语言。这两本书深入浅出地讲解了各自语言的核心概念和编程思想,适合初学者入门,也对...

    Thinking in C++.pdf

    ### Thinking in C++:深入理解面向对象编程与C++特性 #### 一、书籍概述 《Thinking in C++》是一本由Bruce Eckel撰写的经典著作,被广泛认为是学习和掌握C++语言及其面向对象编程思想的重要参考资料之一。本书...

    Thinking in java .txt

    《Thinking in Java》第四版由布鲁斯·埃克尔(Bruce Eckel)撰写,他是MindView公司的总裁。这本书被广泛认为是学习Java编程语言的经典教材之一。从读者的反馈来看,《Thinking in Java》不仅覆盖了Java的核心概念...

    Thinking in C 录音版 part1

    Bruce Eckel是著名的计算机科学作家,其Thinking In系列是深受读者欢迎的经典著作,其中Thinking In C++/Java虽经一版再版,热度始终不减。除了Thinking In C++和Thinking In Java外,Bruce Eckel在大学授课时所将的...

    Thinking in java4(中文高清版)-java的'圣经'

    研讨课 Hands-on Java研讨课CD Thinking in Objects研讨课 Thinking in Enterprise Java Thinking in Patterns(with Java) Thinking in Patterns研讨课 设计咨询与复审 附录B 资源 软件 编辑器与IDE 书籍 分析与设计...

    《大象 Thinking in UML 第2版》PDF版本下载.txt

    《大象 Thinking in UML 第2版》PDF版本下载

    Thinking in C: Foundations for Java & C++

    Thinking in C: Foundations for Java & C++ by Chuck Allison produced by Bruce Eckel Chapter 1: Introduction and Getting Started40 MinutesStart Lecture Chapter 2: Fundamental Data Types41 ...

    大象:Thinking in UML 清晰完整版pdf

    学习UML的必备书籍 潭云杰著 大象:Thinking in UML。 将面向对象的分析设计思想巧妙地融入建模过程中,通过贯穿全书的实例将软件系统开发过程中方方面面的知识有机地结合在一起,用生动的语言和精彩的事例将复杂...

    Thinking in Patterns中文版

    <Thinking in C++><Thinking in Java>作者的又一力作。译得也很好,书中的代码Copy下来就可以直接运行。 这本书前一半是用JAVA语言来写的,后面一半用了多种语言合写的。 写得很通俗易懂,译得还是不错的。 Thinking...

    Thinking in C++习题答案

    《Thinking in C++》是一本深受程序员喜爱的C++学习指南,由Bruce Eckel编写,旨在帮助读者深入理解和掌握C++编程语言。该书分为两卷,第一卷主要介绍了C++的基础知识,包括面向对象编程的基本概念,而第二卷则更...

    thinking in c++ src

    《Thinking in C++ Volume 2》是一本深受程序员喜爱的经典C++教程,由Bruce Eckel撰写,旨在深入探讨C++编程语言的高级特性和实践应用。这个压缩包包含的就是该书第二卷中的源代码示例。 C++是面向对象编程(OOP)...

    大象-Thinking in UML.pdf

    作者在《大象-Thinking in UML》这本书中,试图通过浅显易懂的方式向读者展示UML及RUP的精髓,从而帮助读者克服学习障碍,真正理解并应用UML和RUP进行软件开发。这本书被认为是可遇而不可求的作品,作者自谦地将其...

    Thinking in C++(1,2卷)

    《Thinking in C++》是Bruce Eckel所著的一套经典的C++编程教程,分为两卷。这本书深入浅出地介绍了C++语言的核心概念和技术,旨在帮助程序员从思考的角度理解和掌握C++,而不仅仅是记住语法。 卷一主要涵盖基础,...

    Thinking in Java 4 源码 导入IDEA可直接运行

    《Thinking in Java》是Bruce Eckel的经典之作,第四版(TIJ4)更是Java程序员必读的书籍之一。这本书深入浅出地介绍了Java语言的核心概念和技术,包括面向对象编程、集合框架、多线程、网络编程等众多主题。源码是...

    Thinking in C++ 随书代码

    《Thinking in C++》是一本深受C++程序员喜爱的经典教程,由Bruce Eckel撰写,旨在帮助读者深入理解和掌握C++编程语言。这本书以其全面、深入的讲解和丰富的实例著称,是许多初学者和进阶者提升C++技能的重要参考...

    Modern C++ Design C++ 设计新思维The C++ Programming Language Thinking in C++

    Modern C++ Design C++ 设计新思维--泛型编程与设计模式之应用 STL源码剖析 简体中文 The C++ Programming Language Thinking in C++ 资源内容: Modern C++ Design zh-cn.pdf--(C++ 设计新思维--泛型编程与设计模式...

    大象—Thinking in UML

    《大象——Thinking in UML》以UML为载体,将面向对象的分析设计思想巧妙地融入建模过程中,通过贯穿《大象——Thinking in UML》的实例将软件系统开发过程中方方面面的知识有机地结合在一起,用生动的语言和精彩的...

    大象 Thinking in UML 高清完整版PDF-4

    大象 Thinking in UML 高清完整版PDF

Global site tag (gtag.js) - Google Analytics