Java入门(1)——注释,面向对象,问题分解
注释
简单程序里广泛注释显然是愚蠢的,但是设计更大的,更复杂的程序是一种非常有用的记录。
面向对象
扩展类的实例同时也是现有类的实例。
这个怎么理解?虽然我知道类这个概念是源于面向对象的。现有类应该是个基础,扩展类则继承了现有类的属性:
举个例子:人——》周杰伦。周杰伦继承了人的固有属性,但是同时也有自己发音不清的个性。所以人是现有类,周杰伦是扩展类。或者说人是超级类,周杰伦是子类。
这里有个问题,供我日后解答:
java里有类,也有函数(这个我现在不知道叫什么,但和c里的函数很像,所以姑且叫它为函数)。这是为什么呢,因此我也难以理解面向对象和面向过程到底有什么本质区别,难道仅仅是思维过程的不同吗?面向对象讲求的是分解的思想而面向过程讲求的是过程。
其实这些一切的东西用c语言中的函数不就可以搞定吗。C的函数像一个黑箱,提供了几个输入的接口和输出的接口,java的类也是这样,只是把函数做的更灵活了,可以只调用其中的一小部分内容,通过属性。然而为什么java还允许写一些类似函数的“私有”的东西呢?
这里不得不提一点,如果有了尽可能多的函数那么可以解决尽可能多的问题,当这些函数多到一定数量时对生活的影响将是巨大的,如果有个公司肯将所有编程用到的函数弄一个数据库,当然我不知道这个库的大小是否在可实现的数量级,程序员的工作不再是编码而是挑选适合的函数用到程序里(现在的程序员也是这样吧,我不知道),或许那时编程已经类似于桌面软件一般的简单,进入我刚刚设想的数据库,搜索功能,输入参数,成功解决。
问题分解
一个程序分成若干小部分的过程。因此选择一个恰当的分解路径将是一个程序中比较困难的部分。
分解原则:
每个子问题应该执行一个在概念上简单的任务,这里无需关注在具体的实现过程是多么复杂。如何检验这任务在概念上是简单的呢?通过对它的命名,是否能对它进行准确而又简单的命名。
每个子问题应该执行尽可能通用的任务,而不是只用一遍,那还不如不分解呢。因此在评定程序的实施方案是尽可能通用的分解也成了一个重要的方面。
(本次笔记来自于《karellearnsjava》第二章)
Java入门(2)——bug,结构化程序,软件工程,算法
Bug
对于初学者来说bug肯定是很多,常见的有以下几点:
语法错误:
变量,方法名字书写错误。
将私有方法直接写在public里面。
将else写在if里面。
逻辑错误:
Fenceposterror,就是栅栏柱错误。少算了一个或者多算了一个。
Oboe(offbyoneerror),缺了一个错误,也是栅栏柱错误的一种。
解决以上两种错误的方法是,写成类似的代码:
while(条件){
执行语句
}
执行语句
第三类bug:
这个完全是我生造的概念,指的是不能将程序设计的更具有普遍性,给日后的开发管理带来难度,其实这是最大的却最很难关注的bug。
结构化程序:
在学会循环语言之前,同学们所写的程序,都是线性的。
循环的具体选择原则:
for循环:已知程序的循环次数。
while循环:未知程序的循环次数。
当然在大多数情况下他们是可以转换的(应该是这样的吧。)
软件工程:
软件工程是为了让程序的开发复杂性,即开发难度降低到可管理的范围内的一系列方法。其中最重要的方法论,便是自上而下设计(逐步求精)。
自上而下设计(逐步求精):
原则是从一个问题的顶部开始程序设子。也就是从程序最概念化,抽象化的地方开始程序设计,例如helloworld程序可以被我们概念化的称为问好。然后具体到,问什么好用什么方式问。
用这样的方法可以得到程序大体框架,然后逐步分层解决。
因此一个程序可能被分成很多方法,一个方法被调用时必须满足的条件被称为前置条件,于此相对,后置条件则指一个方法完成后必须达成的条件。
算法:
设计一个问题的解决思路的过程被称为算法设计。其中解决问题的方法就被称为算法。
算法必须具备以下要素。
清晰而且毫不含糊的表达形式。
该思路的每一步都应该是可行的。
在有限的几部之后,该思路总是会终止的,而不是死循环。
(本次笔记来自于《karellearnsjava》第三,四,五章。)
6/15/201207:06
Java入门(3)——计算机发展及初探,算法及编程过程,面向对象
计算机发展及初探
发展
计算机发展迅速,但也只是近几百年的故事。如果把公元前两千多年的算盘算上的话,计算机发展路线酷似一个底数大于1的指数函数。
计算机科学
与其说计算机科学是关于计算机的科学,毋宁说是一门解决问题的科学。
硬件
算法及编程过程
算法
算法是抽象的问题解决方案,对于编程新人来说具体编程的实现难度大于算法的,而随着编程经验的增加,算法的设计越来越成为一件有挑战的事。
之前的笔记中也提到过算法的三个要素:准确定义,有效,有限。
编程过程
- 创建及编辑程序
- 编译
- 调试
- 维护
语言类型:
1.编译型:在不同的硬件上有不同的编译器,将源文件转换为机器指令,根本原因在于基本硬件使用的是不同的机器语言。
2.解释型:将代码转换为解释器可认的中间语言,这些语言在通过解释器执行,而不是像编译型直接装换为机器语言。
Java采用的是结合策略:Java将源代码编译为普通的中间语言。java为了跨平台的同时保持程序的运行效率引入了虚拟机的概念。虚拟机将中间语言链接后的代码翻译为机器语言。具体的过程如图:
面向对象
在“面向过程”的语言中,程序是由过程或是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。
本次笔记来自于《Java语言的科学与艺术》
6/21/201209:06
Java入门(4)——编程示例:Java程序结构,程序欣赏方式,类和对象,图形程序
Java程序结构:
如图一个入门级别java程序的结构是这样的,注释,输入,主类。
注释:
注释有两种方式,一种是:/*注释内容*/,通常用于整段的注释;一种是//用于单行注释。
输入:
Java可以方便的使用程序库,这些程序库通常是其他编程人员写的工具的集合。通常大多数程序在注释后会包含import行。
主类:
这显然是java程序的主体,一般包括标题行和类定义的主体。我们可以从标题行得到重要的关于程序主体的信息,又可以在类定义的主体体会程序细节。上图程序中extends是java关键字中的一员,她表示HelloProgram是GraphicsProgram的子类,因此GraphicsPogram能做的,HelloProgram都能做。类的主体中则包括了java方法的一个示例,方法中包含的便是语句,准确的说语句才是程序的主体,虽然这里整个程序只有这一条语句。无论什么时候运行java程序,计算机总是执行包含在主类的run方法主体中的语句。
程序欣赏方式:
整体观:整体观只要求知其功能,而不必知其细节,实现。需要了解每行语句,或者每个方法,甚至每个程序的功能。
细节观:细节观则要求知其细节,而不对整体要求。需要知道每个变量,每个关键字的具体含义,以及每个程序的具体实现。
对于初学者更多的要求是两种观点的相互转换,既不能淹没在具体语言细节里而忽略软件工程;也不应过分的整体化而导致程序无法实现。而这样做的机会则是编程,用编程学会语言,用编程学会编程。因为在实验中我们能学会很多东西。
习语或编程模式:
Java中有着很多结构化的重复性的代码,这些代码被我们称为习语或编程模式。有时候,这些模式像Java规则或库提供的宏大有冗长的故事,然而熟记这些故事可以隐藏很多细节,好比中国成语一样,有事侯短短的几个字下面就是一个丰富多彩的故事。识别并熟记这些模式可以方便程序的实现。事实上,我们并不需要可以的记背这些模式,编程到了一定的累积程度,很多细节便自动转换成了习语或编程模式。
类和对象:
类,是可扩充的模板。它制定了对象的特殊风格的结构。每个对象都是特殊类的实例,类可以分别作为不同对象的模板。
对象,是一个封装状态和行为的综合实体。而对象的状态由一组属性组成,这些属性适用于该对象,并且可以随时间而更改。对象的行为指对象对其内部事件或外部对象发出请求的响应。触发特殊行为的词语称为消息。
图形程序:
或许有人认为对于初学者来说图形程序包含了很多解决问题以外的细节,因而不太适合初学者。所以一Java作为学生的第一门语言的课程都会使用冷冰冰的控制台程序,然而这是课程设计者丝毫不管学生的声音的愚蠢行为,更多的同学渴望的是可以写出易于交互的图形程序。这点也是本书的开创性之举。
7/3/201219:07