- 博客(325)
- 资源 (7)
- 收藏
- 关注
原创 OOD教学(Java8)-导航
通过若干典型的实验例子,引入并介绍面向对象设计的基本原理和设计模式。通过解决问题而“获得”设计模式,以掌握设计模式的本质、揭示设计模式之间的内在联系;以期解决学习设计模式的知易行难困境。
2013-02-19 21:37:49 15121 2
原创 【实验2:框架设计者 C语言版】
为什么要提供框架设计者C语言版呢?是希望你们自己体会控制反转/Ioc的含义、依赖倒置原则(Dependency Inversion Principle、DIP) 的荒谬。
2021-03-09 01:18:38 1258
原创 【实验1:回调机制的实现】
实验目的:通过3门编程语言实现回调机制,理解什么是回调机制以及各种编程语言采用了什么方式来实现回调机制实验内容:下层模块/框架中需要设计一个op函数,对两个参数值进行“某种”操作后返回一个值。
2021-03-06 16:22:33 2093 1
原创 漫谈顺序、分支和循环
顺序(sequencing),分支/选择(alternation)和循环(iteration)这三种流程结构就足以表达所有程序的本质。三种流程结构如同万花筒中的彩纸,构成无穷无尽极富变化的程序。
2021-03-03 20:25:45 2913 2
原创 5.5 Map-Reduce(映射-归约)模型
Java8引入的流即java.util.stream.Stream,被称为具有函数式编程风格。其流水线操作就属于本章的主题:封闭性操作。对流的认识和把握,可以溯源于映射-归约模型。Map-Reduce/映射-归约,是一种借鉴信号处理过程、对大规模数据进行处理的模型。它包含3方面:对于一个数据序列,. 对(数据序列的)每一个数据进行转换,Map-Reduce中的Map,指从一个数据序列得到另一个数据序列。转换操作,包括函数映射/map、过滤/filter等操作; 对这个数据序列进行归约。Map-R
2020-06-13 22:36:40 1895
原创 增强内容,归整博客
CSDN上的博客,有技术含量的高质量文章,越来越少了。我的博客,也很少发新东西。一直在将原有的文章加以补充、整理和系统化。修改原来的文章、删除垃圾文章,留下来的为学习资料。...
2020-05-20 13:22:48 417 1
原创 6.2访问者模式(5.11)
6.1 Java模拟 双分派(Double Dispatch)上节[6.1 Java模拟双分派]重点关注源代码的变化。本节讨论实验结果的意义——访问者(Visitor)模式使用双分派技术,能够为被访问者添加新的操作。【注:Java模拟双分派,解决了Visitor模式的结构和实现方面的问题。本节讲大道理】6.2.1表达式问题通常情况下,Shape所需的一些方法draw()和area(...
2019-12-14 12:25:36 444
原创 写作思考:命令模式(5.2)
命令模式是一个学习起来相对较难的模式。难点在于Invoker为什么会想到不管不顾地依赖Command,而后者封装一个普适方法exe ()。另一方面,在于GoF对于命令模式意图的描述夸大其词,使得命令模式与策略模式/行为参数化混淆。命令模式(5.2)放在哪里讲,一直定不下来。可以放在第二章行为参数化中,现在放在《第四章策略模式的演变》中,命令模式不是演变,是对立/对比。还有个问题:适配器应该在命...
2019-11-24 13:45:22 515
原创 定义Java的三元函数
java.util.function包Function家族很庞大,共25个函数接口。但是Java 库只提供单个参数和两个参数的函数映射接口。如果需要更多参数,如三元函数,可以自己编写,还可以采用柯里化技术先获得BiFunction对象。package chap2.closure.currying;import java.util.function.BiFunction;/** * 三...
2019-11-18 20:28:28 2019
原创 2.2 模板方法模式(5.10)
看一本关于设计模式的书,首先翻阅其模板方法模式。一方面,模板方法模式极为基础,也包含很多设计思考;另一方面,它反映作者对设计模式的理解程度,这一章写得不好,一定是水货师傅。
2019-11-15 18:01:10 558
原创 什么是依赖注入——板砖拍Martin Fowler
今天yqj2065用板砖,拍一下Martin Fowler的《IoC容器和依赖注入模式》(Inversion of Control Containers and the Dependency Injection pattern[1] )。将我在其他博客中关于他这篇文章的吐槽,条理化。
2018-08-11 11:55:09 1977 2
原创 拍到什么程度
写一本《OOD(Java8)》,最难的地方,在于OOD领域存在大量错误认识,而我们又必须建立完整的逻辑体系。在讲解OOD的“正确”知识时,我就需要拍一下GoF、Robert C. Martin、Martin Fowler。对于GoF,我是心怀敬意的,但是Robert C. Martin的DIP,就要把它拍到粪坑中去,因为DIP论文,夸张滴说,错误无处不在(1.2 抛弃依赖倒置原则)。现在多...
2018-07-13 08:56:25 484
原创 2017-2018-2 OOD试卷AB
一、 编程论述题:框架设计者1. 以SortTest和IntSort为例,说明什么是控制反转IoC(7分)2.什么是抽象依赖原则,它与应用程序、框架的关系(5分)3. 有一个接口如下 package util;@FunctionalInterface public interface DoubleOP { double op(double m,double n) ;}编写应用程序App...
2018-06-26 20:00:17 2129 2
原创 《OOD实战(Java8)》难产中
虽然yqj2065自认为不是一个很负责的老师,但是比起绝大多数老师,我算得上对得起我的学生。我讲课的内容,全世界独一无二。你们不会在任何其他人那里获得,除了我的博客中,零零散散。我也准备了大量例程、文字...但是将它们搞成一本书,还差得远。但是,我有更有趣的事情要做,身体也不宜久坐,写书挺无趣。最最重要的是,我对待出书,有洁癖般的要求。那就是当我死的时候,它应该有资格陪我进火葬场。我也不想写什么论...
2018-06-24 22:39:07 1013
原创 我是OO砖家
yqj2065是OO砖家.作为OO砖家,我都不屑拍国内的设计模式书籍的作者,都是垃圾书,有什么好拍的。要拍的是GoF、Robert C. Martin、Martin Fowler这些装逼的货。 并且,要求学生一起拍。拍得不好,我挂你!...
2018-06-10 21:40:34 1033
原创 编程类课程的问题
本文已经纳入编程语言应该学些什么,作为引子。在讲授一门语言时,应该介绍什么呢?我认为,简单地说,三大抽象(如果是面向对象的语言)+其编程范式。我国绝大多数高校,是从C语言教学开始的。从数据抽象、行为抽象的角度看,C语言并不是合适的入门级编程语言(后面再解释)。现行教学体系中,编程类课程有一个存在很久的问题:语法派的教学。教学方式上,很多人不是在讲授如何编程,而是在讲一门语言的语法。以谭浩...
2018-01-18 19:43:08 644 1
原创 考前提示
考试前请学生们注意:1.本课程开卷,不限制你带任何书籍和资料。我不知道教务处有没有限制你们不得使用手机,但是我不建议你们用手机,因为你肯定不懂才到处查资料,而你查到的网上的资料,大多数我会认为是错误的。2.不得大篇幅抄袭我的博客中的内容。你不会的,抄唐诗宋词比较好。抄我的,驴头不对马嘴,会让我心烦。3.考试前,我不会整合博客内容。和考试关联度高的博客,我可能会暂时隐藏。4.看...
2018-01-14 23:42:23 1724 1
原创 1.2.4 依赖倒置原则(Dependency Inversion Principle、DIP)的错误
摘要:依赖倒置原则(Dependency Inversion Principle、DIP)是一个错误的尝试,Robert C. Martin希望将针对接口编程和控制反转两个概念纳入其DIP中,却形成了一个思路混乱的、不知所云的原则。作为正文,不能够喜怒笑骂。草稿抛弃依赖倒置原则将被修改为吐槽版。1.4.2 抛弃依赖倒置原则(DIP)在讨论OOD原则时,常常被提到的一个原则叫依赖倒...
2017-12-29 21:55:10 1482 1
原创 动态类型+面向对象 = shit
动态类型+面向对象 = shit1.动态类型动态类型语言,属于看起来方便,用后麻烦的东西,我不喜欢它们。除非不需要考虑软件工程场合——如作为脚本语言。动态类型+高阶函数,使得Scheme定义的op非常强大,如同酒驾的司机,非常狂野。(define (op a b how-op)( how-op a b) )op可以对两个参数a,b进行“某种”how-op操作...
2017-12-26 18:30:54 797
原创 为什么人们说Python容易?
在讲OOD时,我用了C、Java和Scheme的例子,对语言我比较了解。有学生说Python学习起来很容易。Python有动态类型、面向对象、lambda表达式,它会容易?
2017-12-24 12:16:59 2859 1
原创 《Head First 设计模式·4工厂模式》评价
近期整合静态工厂、工厂方法和抽象工厂模式。因为我很厌恶DIP,所以仔细看了一下《Head First 设计模式·4工厂模式》。一个字评价烂,两个字,超级烂。这本书的行文风格,各有喜好,我不评价——虽然我不喜欢花里胡哨的插图等。我们看其内容。不应该用new,这节没有问题。《识别变化的方面》给出一个很烂的例子。PizzaStore与Pizza。抽象类Pizza有一系列子类型如CheeseP...
2017-07-09 23:23:32 852
原创 4.1.3 模板方法模式(5.10)
【2019.7.1】看一本关于设计模式的书,首先翻阅其模板方法模式。一方面,模板方法模式极为基础,也包含很多设计思考;另一方面,它反映作者对设计模式的理解程度,这一章写得不好,一定是水货师傅。我们通过设计累积函数,引入策略模式的扩展、模板方法模式(5.10)。-------------------------------------------第4章 多重策略4.1.3 模板方...
2017-06-17 16:42:29 1074
原创 IT界,不需要“下一个伟大的思想”
近期写《抛弃依赖倒置原则》,yqj2065不知道国内外有没有吃相似观点的,因为没有找到。突然间,我惊奇:如此稀烂地DIP,为什么没有人质疑呢?联想ERP.CRM...云计算、大数据...是不是IT咨询界也在复制管理界的《下一个伟大的思想》?这是令人毛骨悚然的猜测。如果理工科也流行文科的套路,软件工程专家们像卖减肥药一样吆喝,那真是悲剧。IT界,不需要“下一个伟大的思想”
2017-06-10 23:34:43 759 3
原创 util.God -2
util.God的局限性:1)仅能够按照默认构造器创建对象;2)仅支持属性配置文件,3)不支持标注。有同学问,yqj2065.util.God是Martin Fowler文章中的DI还是Service Locator?答:DI。总体而言,yqj2065比较烦引入太多概念。【Service Locator模式背后的基本思想是:有一个对象(即服务定位器)知道如何获得一个应用程序所需的所有服...
2017-05-28 19:24:59 870
原创 凡事都有例外-父类型依赖子类型
抛弃依赖倒置原则中,yqj2065对“抽象不应该依赖细节。细节应该依赖抽象”,描写成“一个毫无价值的废话,都能够包装成令很多人脑洞大开的原则”。但是,凡事都有例外。虽然极其罕见,有时候父类型需要事先知道其子类型。这是一种什么样的感觉呢?
2017-05-26 13:06:16 844
原创 0.3.1 一切皆概念/类型
本文介绍柏拉图原则。1.由来面向对象编程范式的核心观念是:以概念/类型建模一切。从编程的问题域(problem domain)中抽象/提取各种概念,符合人们的心智模型,而所有的概念被映射为解域中的类型。面向对象编程范式的思考单元,(毕竟,基于类的语言是主流)是概念/类型,而不是实例化的对象。只有喜欢进程的人、现实的人、生活在内存中的人,才喜欢说面向对象。编写源代码的人/神,喜欢...
2017-05-22 17:03:08 579
原创 REPL 与Java
REPL (Read-Eval-Print-Loop)会在Java 9中引入,这个东西,我总觉得只在表达式为编程单元的语言中、脚本语言中有点用。在最少以函数、动辄以类为单元的编程中,这个东西就不好使了。即使在Scheme中,我也不太喜欢这个功能。BlueJ中code Pad,我就没有仔细用过。2+35 (int)
2017-05-05 00:08:34 572
原创 Java 表达式如何转化成字符串输出?
复合函数z = g(f(x)),例如f(x) = x+1g(x) = x*x计算其结果后,我想输出: g(x) = x*x,f(x) = x+1,g(f(2)) =9怎么搞?难道要将 “x*x”首先就作为字符串,编写解释器?
2017-05-01 21:47:41 1257
原创 吐槽 依赖倒置原则/DIP
即使yqj2065清楚地知道Robert C. Martin想说的东西,这么胡言乱语的神经病的东西,要逐一地指出其问题,差一点 把我都搞得神经病了。所以,后面的文字乱七八糟的。我留底。
2017-04-29 00:02:11 2954 1
原创 C语言的变量
变量(variable) 是源代码中表示一个存储场所、保存值的符号化地址。这是C/Java中关于变量的名词解释。1.抽象例如int x=80;变量x表示了内存中的某一块区间,例如从0013fed8到0013fedb这4字节,该4字节共同保存整数80;通常程序员不会在意、也不可能考虑x的具体位置,只要知道在程序中x表示某个位置,因此说x是符号化地址,是对数据的存储场所的抽象。
2017-04-28 00:14:49 924
junit-4.8.2-sources.jar
2014-10-07
编程导论_codes_2013.4.1
2014-08-01
Type Systems
2008-11-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人