一、《计算机科学概论》第九章—面向对象设计与高级程序设计语言
(一)面向对象方法
自顶向下设计的重点就是任务。相反的,面向对象的设计方法使用叫“对象”的独立实体生成解决方案。一旦收集全了所有问题中的对象,就能构成问题的解决方案。
1.面向对象
(1)对象(object)在问题背景中相关的事物或实体
(2)对象类,简称类(object class or class)一组具有相似的属性和行为的对象的描述
(3)域(field)类中的特定项,可以是数据或子程序
(4)方法(method)定义了类的一种行为的特定算法。
2.设计方法
(1)集体讨论:确定可能需要的对象类
(2)过滤:筛选整合,集体讨论的成果
(3)场景:明确对象类的责任(管什么的)(动词),“如果。。。将会。。。”
(4)责任算法:为责任编写算法
(5)总结:在软件的设计说明书上,关注动词—程序性;关注名词—面向对象
(二)翻译过程
1.编译器(compiler)把用高级语言编写的程序翻译成机器码的程序
2.解释器(interpreter)输入高级语言编写的程序,指导计算机执行每个语句制定的动作的程序
3.解释执行,通常比编译执行慢
(1)解释器(interpreter)输入高级语言编写的程序,指导计算机执行每个语句指定的动作的程序
(2)字节码(bytecode) 编译java源代码使用的标准机器语言
(3)标准化的语言提供的可移植性(在有该语言编译器的电脑上可直接运行)、与、解释字节码提供的可移植性(在有JVM的电脑上可直接运行),不同。
(三)程序设计语言的规范
1.命令式范性
描述解决问题的必要处理,具有顺序执行指令的特征
(1)面向过程的范性:程序是子程序分层次构成的
(2)面向对象的范性:对象和操作对象的代码绑在一起,使得每个对象负责控制自己的操作。Java、Python,C++既有面向对象的部分,又有面向过程的特点。
2.声明式范性
描述结果
(1)函数式:基本原理是函数的求值,而不是变量和赋值语句。
①Lisp、Scheme、ML
(2)逻辑式:基于象征逻辑的原则。
(四)高级程序设计语言的功能性
分支结构、循环结构是命令式语言的标志。
1.布尔表达式(boolean expression)一个标识符序列,标识符之间有相容的运算符隔开,求得的值是true or false
2.数据归类
(1)强类型化(strong typing)每一个变量都有一个类型,只有这种类型的值才能被存储到该变量里面
(2)数据类型(data type)一组值以及能够应用于这种类型的值的基本操作集合的说明。
(3)数据类型:整数、实数、字符、布尔型、字符串、
(4)声明(declaration)把变量、动作、语言中其他实体和标志符关联起来的语句,使程序员可以通过名字引用这些项目。??注释??
(5)保留字(reserved word)具有特殊意义的字,不能用作标志符
(6)区分大小写(case sensitive)
3.输入/输出
4.控制结构
(1)Control structure:确定程序中的其他指令的执行顺序的指令
①重复、选择、子程序
(2)嵌套逻辑
(3)异步处理:也叫作事件驱动处理。这样的处理是背程序指令序列以外发生的事件所控制的。
①异步(asynchronous)不与计算机中其他操作同时发生;换句话说,与计算机的动作不同步
②异步处理经常出现在Java和VB中,而很少出现在别的语言中。
(五)面向对象语言的功能性
1.封装(encapsulation)实施信息隐蔽。把数据和动作打包在一个袋子里。对其他的对象一无所知,如果一个对象需要另一个对象的信息,他必须向另一个对象请求。
(1)对象类(object class)问题求解阶段:属性和行为相似的一组对象的说明,是与问题背景相关的事物或实体
(2)对象,实现阶段,是对象类的一个实例
(3)类,实现阶段,对象的模式
2.类
(1)实例化:创建类的对象
3.继承(inheritance)获取其他类的属性(数据域和方法)的机制
4.多态(polymorphism)一种语言的继承体系结构中具有两个同名方法且能够根据对象应用合适的方法的能力。
(六)杂问
1.结构化程序设计原则
2.Java、python只能使用值参?VB、C++会使用引用参数?
二、《自学是一门手艺》
第十二章—刻意思考
这东西能用在哪?
主动找活干,“能者多劳”这话没错,但“劳者多能”也许更准确一点,没机会联系,就主动制造机会,以用代替练
干活要有产出
更进一步,这东西还能用在哪里?
所谓触类旁通,活学活用,就是把知识方法,内化为能力思想,从而实现极高的“可移植性”
第十三章—战胜难点
困难幻觉:事实上,所有的难点都可以拆解成更小的单元,并逐一突破。
把一切都当做一门手艺的好处之一就是心态平和。以为你知道,手艺不考天分和智商,它考靠另外几样东西:不混时间,刻意思考,刻意练习。
天下无难事,只怕有心人。其实世间所有的事情都是一样的,只是你在不同方面的手艺,有熟练有没入门的区别而已。
无论学什么都一样,难的部分不学会,就等于整个没学。为什么偏偏要把自己学成一个半吊子?
开始自学,和开始断奶,其实是一回事。自学本身就是枯燥的,就像“人生本无意义,有意义的人生都是自己活出来的”一样。
能够耐心读完那么多在别人看来“极度枯燥”的资料是自学者所擅长的。可在别人看来“无与伦比”的耐心,究竟是从哪里来的,又是如何造就的?没断奶的人想象不出来。
很简答。首先,平静的接受自学枯燥的本质。其次,“无论多枯燥,总能读完;无论多难,多读几遍总能读懂”,于是,到最后,只不过是习惯了而已
那一点点的差异,却造就了后来这么大的差距。看破苦难幻想,决心断奶,接受自学枯燥的本质,多给一些预算,多给一些耐心,没有什么速成。
(一)第十四章第一节
类——面向对象编程(object oriented programming OOP)
- 面向对象编程:是一种编程范式,或者说是一种方法论。在作者看来,现代软件工程之所以能实现那么多复杂、宏伟的项目,基本上都得益于OOP的普及
- 争议:支持OOP的问题在于,他们总是携带一堆并不明确的环境—你明明只想要个香蕉,可你获得的是一只手里拿着香蕉的大猩猩,记忆那只大猩猩背后的整片丛林,
- 封装:我们可以把灯泡想象成一个对象,使用灯泡的人只需要与开关这个界面打交道,而不必关心灯泡的内部结构和工作原理,说实话,这是一个很伟大的思想。
- 抽象,就是省去不必要的细节,就像漫画家画的Q版人物,明明不是画的真实的人,但因为保留了“必要特征”而能被认出来是人。这种必要特征称之为属性。别保留下来的“必要行为”称为方法。
- 在设计复杂对象的时候,抽象到极致是十分必要的。一层一层的抽象。所以当我们创建对象的时候,通常是先创建最抽象的类(class)再创建子类(subclass),在OOP中这种关系称为“继承”。例如,狗这个对象可以从哺乳动物这个对象继承过来,那么狗就有哺乳动物的所有属性。
- 当我们创建好一个类,就可以根据这个类创建它的多个实例(instances)。例如,创建狗这个类后,我们就可以根据这个类创建很多条狗,这些狗,就是狗这个类的实例。
第二节——类的python实现
- 在class 代码中,如果定义了_init_() 函数,系统就会把它当成Instance创建后被初始化的函数。这个函数名称是强制指定的,初始化函数必须使用这个名称。