Presentation is loading. Please wait.

Presentation is loading. Please wait.

计算机问题求解 – 论题1-7 - 不同的程序设计方法

Similar presentations


Presentation on theme: "计算机问题求解 – 论题1-7 - 不同的程序设计方法"— Presentation transcript:

1 计算机问题求解 – 论题1-7 - 不同的程序设计方法
计算机问题求解 – 论题 不同的程序设计方法 2018年10月30日

2 Part I 不同的抽象

3 问题1: 你听说过“历史往往有惊人的 相似之处”这句话吗?有什么 感触吗?

4 1919 1903 相对论、量子力学、基本粒子、宇宙学 1954 二次大战,以及无数局部战争与内战 软件危机

5 问题2: 抽象, 它的核 心价值 是什么? 控制复杂性 籍里柯: 梅杜莎之筏 1819; 491716cm; 巴黎卢浮宫

6 问题3: 在你们使用的程序设计语言 中,哪些地方体现了利用抽 象控制复杂性的思想? 过程抽象?数据抽象?

7 最长的一条直线

8 “侏罗纪”时代的语言 - Fortran The overall success of Fortran is difficult to overstate: It dramatically changed the way computers are used. This is, of course, in large part due to its being the first widely used high-level language. In spite of the inadequacies of Fortran, the momentum of the huge investment in Fortran software, among other factors, has kept it in use for nearly 60 years.

9 “成功悖论” – Algol 60 就凭这个称呼,Algol该算得上“成功语言”吧!

10 “适用至上” - COBOL 你听说过Y2K问题吗? 其实,还有两个绕不过去的名字:IBM, DoD
The story of COBOL is, in a sense, the opposite of that of ALGOL 60. Although it has been used for 65 years, COBOL has had little effect on the design of subsequent languages. Perhaps the most important reason why COBOL has had little influence is that few have attempted to design a new language for business applications since it appeared. 其实,还有两个绕不过去的名字:IBM, DoD

11 问题4: 阅读材料的章节标题是 “Programming Paradigm”。 Paradigm是什么意思?
Webster字典的解释:A model or pattern for something that may be copied 阅读材料上的解释:A programming paradigm is a way of thinking about the computer, around which other abstractions are built.

12 问题5: 你怎么理解阅读材料中对于 “way of thinking about computer”的解释? “离机器远/近”是指什么?

13 Part II 不同的抽象结果

14 问题6: 为什么C语言被称为 “imperative language”, 这样 的语言中你认为最突出的过程抽 象体现在何处?
According to Longman Dictionary Imperative: expressing an order

15 问题7: 你能说说C语言中如果体现数 据抽象吗? 如何理解“数据类型”?

16 从数据类型到抽象数据类型 整型数 (integer) 对计算机中表示的整数进行抽象 抽象对象:固定长度的二进码
抽象模型:数学中的整数(子集) 实例化:语言中的变量 允许的操作:语言的语义确定 队列 (queue) 对物理世界中的对象进行抽象 抽象对象:“先进先出”的“序结构” 抽象模型:抽象数据类型 实例化:“创建”一个实例 允许的操作:本身是抽象数据类型定义的组成部分,也是“全部”,例如:empty, front, add, remove, … For a taste: void remove(Quere q) Precondition: empty(q) is false; Postcondition: paired with add keeping the status of queue unchanged

17 Object-Oriented: the Idea
模拟物理世界中的“排队等候处理…” 服务申请 选择队列 接受服务 customer 受理客户入排队请求 根据cashier状态输送客户 维护队列 发送状态信息 处理客户服务 Checkout queue cashier

18 问题8: 你注意到这句话吗?它是否能反映 面向对象方法为什么会流行,并替 代传统的imperative方法?
严格地说,现在流行的是增加了对支持面向对象程序设计机制的imperative languages, 而不是“pure”面向对象语言。

19 问题9: Encapsulation和Inheritance是 Object-Oriented Programming的 重要概念,你能以前面的例子为背 景解释它们是如何体现通过抽象控 制复杂性的思想的吗?

20 C++一般被认为是imperative 语言增加了对Object-Oriented 的支持机制而设计的。你能明 确指出哪些是“增加”的吗?
问题10: C++一般被认为是imperative 语言增加了对Object-Oriented 的支持机制而设计的。你能明 确指出哪些是“增加”的吗? 回答这个问题的关键是什么是Object-Oriented最核心的features: abstract data type, inheritance, and dynamic binding.

21 问题11: 与imperative language相对的是 declarative language。你能根据 书上对函数式与逻辑式程序设计的 简短描述说说为什么将这类语言称 为“declarative”吗?

22 算法即函数:函数式语言 这也可以看作函数sum-salaries的递归定义。 数据的形式和“程序”(函数)是一样的 - list

23 从“前提”到“结论” 在logic programming中,“推理”和“计算”是统一的。
Prolog是通过一个“虚拟机”(推理引擎)来实现的。 它不仅要决定如何做,还要决定作什么。也就是说,程序员不仅要考虑程序的行为,还得考虑interpreter的行为。

24 问题12: 谁都可以设计一个程序设计语言,但能流行的总有它的道理!
artificial language constructed in 1887 by L.L. Zamenhof, a Polish oculist, and intended for use as an international second language. 谁都可以设计一个程序设计语言,但能流行的总有它的道理!

25 A Final Remark So-called “Turing complete” language

26 Beyond the Final… 客户提的要求 项目经理理解的 分析师设计的 程序员实现的 商务代表描述的 项目文档反映的 实际安装功能
用户账单体现的 后续技术支持 用户实际想的

27 课外作业 1. 用你现在使用的语言设计并实现抽象数据类型“复数”, 允许的操作包括:加减乘除、抽取复数的两个部分、 由两 个浮点值(常量、变量或者表达式)构造一个复数。(你能说 出仅用C的成分与可以用C++的差别吗?) 2. 前面引用了一幅程序设计语言“世系图”。除了课堂上提 到的,你还能在图中发现什么引起你注意的现象,并能发表 一点观点吗?(这张图出处如下:Robert Sebesta: Concepts of Programming Languages, 11th ed., Pearson 2016, p.59) 3.在网上查一下:什么是scripting language, 它们和C++ 这样的程序设计语言有什么不同?


Download ppt "计算机问题求解 – 论题1-7 - 不同的程序设计方法"

Similar presentations


Ads by Google