2018.2.20 OOP week2

回到PL了,准备一口气完成最后一部分。

Dan对比了OOP和functional programming。可以看到这两种范式处理问题是截然相反的思路:对于同一个“用函数去处理类”的问题,函数式编程选择去抽象函数,这样在用同一个函数处理一个输入的时候,需要把输入以不同的类型做区分;而OOP选择去抽象类,结果就是一个类下面有一大堆的方法,而不同的类下面的方法很可能都是做着类似的事情。

Double Dispatch是OOP这种思路的一个具体体现,感觉Dan讲这个就是为了黑OOP的。Double Dispatch解决的是当对象类型可能不统一时如何调用方法的问题,实际上这个问题用pattern matching或者 if else从句 + 类型判断 都可以很轻松的解决。但问题是大家可能觉得pattern matching太函数式,if else从句 + 类型判断太过程式,所以就弄出一个特别OOP的Double Dispatch。Double Dispatch确实很OOP,它不但像一般的OOP写法那样把同样的方法放到每个类里面,而且这个方法自己还要针对不同的类做分支。那这样一分支呢,其实出现了乘法的情况,就造成了次方级的分支复杂度,所以为了保持OOP的统一范式,其实是牺牲了代码的简洁性的。

后面又讲了C++中的多重继承,ruby的mixin,和java中的interface,功能依次变弱,副作用也依次减少。纯从概念上来感觉,觉得后两个都还蛮不错的。

明天写PL最后一份作业,不知道要写多久。。。

原文地址:https://www.cnblogs.com/dynasty919/p/8456187.html

时间: 2024-10-09 12:29:25

2018.2.20 OOP week2的相关文章

python 学习第三天(简单购物系统)2018.2.20

#_author_:"Bushii" #data:2018/2/20 print("*******************************") print("Welcome to the shopping system.") print("*******************************") money=int(input("Money:")) a=[5800,9000,30,80,1

2018.4.20 五周第三次课

shell介绍 shell脚本在日常的Linux系统管理中是必不可少的: shell是系统跟计算机硬件交互时使用的中间介质. shell是一个命令解释器,提供用户和机器之间的交互: 支持特定语法,比如逻辑判断.循环: 每个用户都可以由自己特定的shell: centOS7默认shell为bash(Bourne Agin shell) 还有zhs.ksh等. shell记录命令历史,默认保存至 .bash_history 文件中 概念:我们执行过的命令Linux都会记录,预设可以记录1000条命令

2018.2.20 寒假作业 A - Multiplication Puzzle

题目: The multiplication puzzle is played with a row of cards, each containing a single positive integer. During the move player takes one card out of the row and scores the number of points equal to the product of the number on the card taken and the

2018.3.20 来自微信群 慢半拍的以哲 分享的推广心得

写在前面的话 首先我真诚的感谢以哲大大为我们分享的推广经验,同时感谢以哲大大给我授权,使我有权利去整理他的分享记录并做以下详细记录(并以严谨的态度来写),并分享给大家: 同时我也很感谢网易云课堂,在这里我要表白网易云课堂: 网易云课堂,遇见你是最美的意外: 注:如果以下,未标明是我自己所写,则就是以哲大大分享的内容: 以哲简介 以哲大大受到群主大大的邀请之后,昨晚在群里和我们分享了<关于网易云课堂课程推广经验>,分享的内容主要分为以下内容: 关于网易云课堂 我的推广业绩 微专业推广经验分享 针

Pygame初步-AlienInvasion部分代码 2018/07/20

AlienInvasion.py 1 """ 2 BlackAlien名称是因为飞船是黑色的 3 该文件是alien invasion的主程序 4 """ 5 6 from settings import Settings 7 from ship import Ship 8 from game_function import * 9 from pygame.sprite import Group 10 from bullet import * 1

【2018.9.20】JOI 2017 Final T2「準急電車 / Semiexpress」

日文原题 题目描述 JOI 铁路公司是 JOI 国唯一的铁路公司. 在某条铁路沿线共有 $N$ 座车站,依次编号为 $1...N$. 目前,正在服役的车次按照运行速度可分为两类:高速电车(简称快车)与普通电车(简称慢车). 慢车每站都停.乘慢车时,对于任意一座车站 $i(1?i<N)$,车站 $i$ 到车站$ i+1$ 用时均为 $A$. 快车只在车站 $S_1, S_2, \ldots, S_M$?? 停车 $(1=S_1<S_2<\cdots<S_M=N)$.乘快车时,对于任意

【2018.9.20】JOI 2017 Final T3「JOIOI 王国 / The Kingdom of JOIOI」

题目描述 为了兼顾表意清楚与简洁,我翻译时脑补了 RJOIR_{JOI}R?JOI?? 和 RIOIR_{IOI}R?IOI??,所以不要问我为啥原题找不到…… JOIOI 王国是一个 HHH 行 WWW 列的长方形网格,每个 1×11\times 11×1 的子网格都是一个正方形的小区块.为了提高管理效率,我们决定把整个国家划分成两个省 JOI 和 IOI . 我们定义,两个同省的区块互相连接,意为从一个区块出发,不用穿过任何一个不同省的区块,就可以移动到另一个区块.有公共边的区块间可以任意移

android studio 2018.3.20 用户输入

用户输入 货币兑换功能  邮箱目录程序 注意:变量的作用域(全局变量,局部变量) 管理调查表的应用:Health Check可以告诉使用者他们的生活健康程度 全局变量适用于保存变量之前的值,他们是保存应用状态的方法,他们并不适用于保存变量的中间值 如果你的变量只存在于代码块内部,那就不用设为全局变量了,他是被局部使用的,他只是在这个方法内使用,message就是这样的一种变量,它是中间变量,只在这个时刻使用,所以message不用设置为一个全局变量 当设置了一个全局变量,却没有给他初始值,它会被

2018/03/20 变量引用-对象引用

就目前的工作中的话,很少. -- 变量的引用 $a = 'a'; $b = 'b'; $c = &$a; echo $a; // 输出 a echo $b; // 输出 b echo $c; // 输出 a $a = 'c'; echo $c; // 输出 c PHP 的引用允许你用两个变量来指向同一个内容 $a 和 $c 共用的是同一份内存空间 -- 函数的传址调用 传址调用我就不多说了 下面直接给出代码 function test (&$a) { $a = $a + 100; } $b