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. 编译
  3. 调试
  4. 维护

语言类型:

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

转载于:https://www.cnblogs.com/bear-lab/archive/2013/02/13/2910677.html

Java概览(java语言编程艺术笔记)相关推荐

  1. R语言编程艺术(1)快速入门

    这本书与手上其他的R语言参考书不同,主要从编程角度阐释R语言,而不是从统计角度.因为之前并没有深刻考虑这些,因此写出的代码往往是一条条命令的集合,并不像是"程序",因此,希望通过学 ...

  2. R语言编程艺术(3)R语言编程基础

    本文对应<R语言编程艺术> 第7章:R语言编程结构: 第9章:面向对象的编程: 第13章:调试 ============================================== ...

  3. R语言编程艺术(4)R对数据、文件、字符串以及图形的处理

    本文对应<R语言编程艺术> 第8章:数学运算与模拟: 第10章:输入与输出: 第11章:字符串操作: 第12章:绘图 =================================== ...

  4. 基于《狂神说Java》JUC并发编程--学习笔记

    前言: 本笔记仅做学习与复习使用,不存在刻意抄袭. -------------------------------------------------------------------------- ...

  5. [Objective-C]编程艺术 笔记整理

    看了<禅与 Objective-C 编程艺术>,发现不少平时不注意的或注意但没有系统总结的东西,特此记录一下. 这次没有整理完,后续更新会结合手里的一些其他资料整理. 新博客wossone ...

  6. java webservice 线程_编程实践笔记{Java 线程 并发处理 Webservice}

    1,保证线程安全的三种方法: a,不要跨线程访问共享变量 b,使共享变量是final类型的 c,将共享变量的操作加上同步 2,一开始就将类设计成线程安全的, 比在后期重新修复它,更容易. 3, 编写多 ...

  7. 【Java】流式编程学习笔记

    文章目录 一.流简介 二.创建流 2.1 由值创建流:of 2.2 由列表创建流:stream 2.3 由 Builder 创建流:build 2.4 由文件生成流:lines 2.5 由函数生成流 ...

  8. 1000以内所有同构数java算法_C语言编程求出1~1000的同构数

    2015-10-06 C语言问题.要求编程求出总成绩并按总成绩排? #include int main() { int i,j,k; int tempX,tempY; int res[6][2]={0 ...

  9. 系统自学R的第十二天#参考书籍《R语言编程艺术》

    时隔一天,我又来了. 今日也是函数的内容. 向量化的ifelse()函数 除了多数语言中常见的if-then-else结构,R还有一个向量化的版本:ifelse()函数.它的形式如下: ifelse( ...

最新文章

  1. shell脚本常用脚本:while
  2. Xamarin Essentials教程剪贴板Clipboard
  3. Java中的初始化顺序
  4. 院士学术不端,怎么处理?文件来了:中国工程院院士失范行为处理办法
  5. FD.io VPP基本介绍-理解VPP软件架构
  6. mysql回表查询uuid_MySQL数据库回表与索引
  7. 泛函编程(7)-数据结构-List-折叠算法
  8. sublime Text2 2.0.2 build 2221 64位 破解(已测试)
  9. 微信小程序实例教程(一)
  10. 冬夜读书示子聿 鉴赏
  11. 闪存卡提示格式化怎么办?里面的数据怎么恢复
  12. 小李飞刀:Python我又来啦,例无虚发~
  13. 简单安装与配置mysql数据库(绿色版)
  14. 《Web安全之机器学习入门》笔记:第十章 10.3 K-Means算法检测DGA域名
  15. 仅用Python三行代码,实现数据库和excel之间的导入导出
  16. python修改电脑名称_windows更改计算机名称
  17. 基于MVC模式的电商购物系统
  18. TextView 显示出现单词折行问题
  19. python老男孩培训
  20. koder code editor使用教程_教程 | 使用VS Code舒适地开发Verilog HDL V1.1

热门文章

  1. [洛谷P4918]信仰收集
  2. Seurat | 单细胞分析工具
  3. 【JZOJ4819】【NOIP2016提高A组模拟10.15】算循环
  4. Quartz简单实例
  5. Hibernate中主键生成策略
  6. css3 多列布局使用
  7. MySQL查询结果条数编号示例 mysql 查找结果中自动加序号列
  8. 员工薪酬管理设计方案
  9. 优麒麟在linux下安装教程,在优麒麟Ubuntu Kylin系统中安装百度网盘Linux版.deb的方法...
  10. 中文整合包_MIMOSA2: 基于微生物组和代谢组数据的整合分析