关键词:
(看看我的笔记就知道了,《Java编程思想》这本书的逻辑有多糟糕,尤其是第一章,我很怀疑作者的语文水平,虽然我的语文好像也不好)
·元素属性,关系 + 协议
·计算机起源于机器,因而编程语言始于对机器的模仿:
· 计算机,头脑延伸的工具,不同类型的表达媒体
· 面向对象程序设计——计算机作为表达媒体的大趋势中的组成部分
面向对象程序设计
·OOP的基本概念(含开发方法)
→ 帮助了解面向对象程序设计的全貌
·了解到对象的重要性
·了解到怎样使用对象进行设计
1.1抽象过程
·抽象类型=抽象针对的是什么,质量 <决定> 能够解决的问题的复杂性
·机器 —— 解空间
·问题 —— 问题空间(如业务问题)
映射:解空间——问题空间
抽象类型 |
优缺点 |
举例 |
面向机器(面向解空间) |
建立映射费力 |
汇编、命令式语言(FORTRAN、Basic、C) |
面向问题(面向问题空间) |
解决问题能力有限 |
LISP、APL、PROLOG |
面向对象(表示问题空间中的元素) |
可扩展(灵活)-通过添加新类型的对象来使自身适用于某个特定问题 |
SmallTalk、Java、CPP |
·面向对象特征:
·万物皆对象
·程序世界是对象的集合
·每个对象都有自己的由其他对象所构成的存储(存在)
·每个对象都有其类型
·某一特定类型的所有对象都可以接收同样的消息(交互方式与交互内容)
·对象属性:
·状态:属性
·行为:方法
·标识:内存中有唯一地址(跨机器和地址空间存在的对象必须由内存地址以外的某些东西确定)
1.2 每个对象都有一个接口(一种类型?)
·类 ~ 抽象数据类型
·class的由来:在程序执行期间具有不同的状态而其他方面都相似的对象会被分组到对象的类中
·运行方式:抽象数据类型的运行方式与内置类型几乎完全一致
·抽象数据类型:定义的Java类(扩展编程语言)
·内置类型:表示机器中的存储单元的数据类型
·对象:
·所有的对象都是唯一的,但同时也是具有相同的特征和行为的对象所归属的类的一部分
·每一个对象都属于定义了特性和行为的某个特定的类
1.3 每个对象都提供服务
·开发或理解程序设计时:将对象想象为“服务提供者”:
·将问题从表象中抽取出来,那么什么样的对象可以马上解决我的问题?
·附带好处:提高对象的内聚性
1.4 被隐藏的具体实现
·类创建者(开发者) & 客户端程序员(使用者)
·创建者向使用者暴露必需的部分(抽象~宏观~接口),而隐藏其他部分(细节~微观~实现)
·好处:便于开发者维护,避免使用者修改产生Bug
·实现方式:访问控制
·访问权限修饰符
1.5 复用具体实现(类级别的复用)
·组合(聚合:动态发生的组合) ~ 拥有
·继承 ~ (像)是一个
·相比继承,组合更加灵活
1.6 继承
·类型
·描述了作用于一个对象集合上的约束条件
·描述了父类与子类之间的相似性,同父类下子类间的差异性
·类型层次结构:用继承构建类型层次结构
使子类和父类产生差异的方法 |
子类和父类的关系 |
覆盖 |
(纯粹只有覆盖)是一个 |
添加新方法 |
像是一个 |
1.7 伴随多态的可互换对象
·类层次结构当中:编译时泛化处理(向上转型),运行时动态绑定具体类型。
·函数调用:
·非OOP(传统意义):前期绑定-编译器产生对一个具体函数名字的调用,而运行时将这个调用解析 到将要被执行的代码的绝对地址(还是不懂)。
·OOP: 后期绑定-当向对象发送消息时,被调用的代码地址直到运行时才能确定。
·编译器确保被调用方法的存在,并对调用参数和返回值执行类型检查(无此保证者被称为弱类 型的),但是并不知道将被执行的确切代码。
·后期绑定实现条件:Java使用一小段特殊的代码来替代绝对地址调用。这段代码使用在对象中存储的信息来计算方法体的地址。这样,根据这一小段代码的内容,每个对象都可以具有不同的行为表现。
1.8 单根继承结构
·终极类:java.lang.Object
·单根继承结构优势:
·保证所有对象都具备某些功能。所有对象都可以很容易地在堆上创建,而参数传递也得到了极大的简化(怎么讲?)。
·使垃圾回收器的实现变得容易得多。
1.9 容器
·容器出现原因:解决有些问题需要的对象数量、存活时间、占用空间等信息在运行时才能知道
·Java容器:List、Map、Set
·容器构件:队列、树、堆栈
·容器多样化原因:
1.不同容器提供了不同类型的接口和外部行为;
2.不同的容器对于某些操作具有不同的效率:如ArrayList和LinkedList。
·容器复用问题:
·向上转型:放入容器|安全
·向下转型:从容器中取出|不安全|需要额外的程序运行时间
·泛型:
·向上转型:编译时进行类型限制和检查
·向下转型:无需类型转换
1.10 对象的创建和生命周期
·使用对象的问题:
·生成方式:占用资源(尤其是内存)
·销毁方式:释放资源(内存)
语言 |
对象存放位置 |
对象存储空间和生命周期 |
对象销毁 |
CPP |
堆栈|限域变量|静态存储区域 |
编写程序时确定 |
自动销毁 |
Java |
堆(动态内存分配) |
运行时确定(编译器不知) |
垃圾回收器 |
·Java垃圾回收器:知道对象何时不再被使用,并自动释放对象占用的内存
1.所有对象都是继承自单根基类Object
2.只能在堆上创建对象
1.11 异常处理
·异常处理:就像是与程序正常执行路径并行的、在错误发生时执行的另一条路径。
·因为是另一条完全分离的路径,故不会干扰正常的执行代码。
1.12 并发编程
·并发:同一时刻处理多个任务
·线程:一个程序中彼此独立运行的部分
·并发最常见的例子:用户界面
·问题:共享资源
·解决方案:某个任务锁定某个资源,完成任务,然后释放资源锁,使其他任务可以使用这项资 源。
1.13 Java与Internet
·web
·问题:单一的服务器,要同时为多个客户服务
·事务处理
·性能问题:延迟
·减轻处理任务的负载:
1.分散给客户机器处理
2.使用中间件将负载分散给在服务器端的其他机器
·客户端编程:
·Java特技:并发、数据库访问、网络编程、分布式计算
·服务器端编程:
·servlet、JSP
[读书笔记]java编程思想(代码片段)
目录第1章对象导论第2章一切都是对象第3章操作符第4章控制执行流程第5章初始化与清理第6章访问权限控制第7章复用类第8章多态第9章接口第10章内部类第11章持有对象第12章通过异常处理错误第13章字符串第14章类型信息第15章泛... 查看详情
java编程思想第一章对象导论
对象导论阅读理解: 1、解决问题的复杂性直接取决于抽象的类型和质量(抽象类型及抽象的是什么?)。 汇编语言是对底层机器的轻微抽象,而C、Basic等指令式语言都是对汇编语言的抽象,它们所做的主要抽象仍要求... 查看详情
需求工程思维导图
...范围文档第6章面谈第7章原型第8章观察和文档第10章面向对象建模与UML概述第11章用例建模第12章活动图与建模过程第13章系统分析与对象类建模第14章系统动态建模状态模型第15章需求规格说明第16章需求验证第17章需求管理第18章... 查看详情
算法导论
第一部分基础知识第1章算法在计算中的作用第2章算法基础第3章函数的增长第4章分治策略第5章概率分析和随机算法第二部分排序和顺序统计量第6章堆排序第7章快速排序第8章线性时间排序第9章中位数和顺序统计量第三部分数据... 查看详情
数据挖掘导论第1章
第1章绪论数据挖掘是在大型数据存储库中,自动地发现有用信息的过程。 数据挖掘是数据库中知识发现(knowledegdiscoveryindatabase,KDD)不可缺少的一部分,而KDD是将未加工的数据转换为有用信息的整个过程。KDD:输入数据→数... 查看详情
数据挖掘导论第1章绪论
第1章绪论1.1什么是数据挖掘数据挖掘是在大型数据存储库中,自动地发现有用信息的过程。 数据挖掘与知识发现数据挖掘是数据库中知识发现(knowledgediscoveryindatabase,KDD)不可缺少的一部分,而KDD是将未加工的数据转换为有... 查看详情
第一章对象导论
...重要知识 1、简单描述:这一章主要介绍基本的面向对象的相关知识,并对程序设计方式和Java的基本特性做了一个简单的描述和说明。 2、主要知识点:万物皆对象对象之间的关系对象的自身属性和方法对象的型别(type... 查看详情
算法导论第1章参考答案与编程题选
系列地址:算法导论(CLRS)参考答案与配套编程题选1.1算法1.1-1例如大学生学期统计排序以分配奖学金等等。1.1-2例如解决问题需要使用的内存等等。1.1-3顺序表,优点有支持随机查找,可以在\(O(1)\)内查找元素,缺点是增添/删... 查看详情
算法导论第1章编程题自选
系列地址:算法导论(CLRS)参考答案与配套编程题选熟悉OnlineJudge请选择你喜欢的OJ,通过搜索引擎找到其对应的水题列表,刷上一定量题目来获得基础的OJ编程能力。浙大PAT乙级都是水题,感兴趣的同学不妨一试。为了使后面... 查看详情
需求工程思维导图
...范围文档第6章面谈第7章原型第8章观察和文档第10章面向对象建模与UML概述第11章用例建模第12章活动图与建模过程第13章系统分析与对象类建模第14章系统动态建模状态模型第15章需求规格说明第16章需求验证第17章需求管理第18章... 查看详情
数据挖掘导论第3章探索数据
第3章探索数据数据探索有助于选择合适的数据预处理和数据分析技术 汇总统计汇总统计(summarystatistics)是量化的(如均值和标准差),用单个数或数的小集合捕获可能很大的值集的各种特征。 1、频率和众数给定一个... 查看详情
算法导论第10章,基本数据结构
...素可以过来。 10.2链表双向链表:每一个元素是一个对象,有prev,next两个指针,还有元素本身的数值,两边的元素是NoneL.head指向第一个元素。链表搜索、插入、删除、哨兵:主 查看详情
算法导论第15章,动态规划
动态规划问题的步骤1、描述最优解的结构2、递归定义最优解的值3、自底向上计算最优解的值4、由计算的结果构造最优解一般要在第3步记录一些附加信息, 自底向上逐步计算还有另外一种方法,可以带备忘录自顶而下计算... 查看详情
《算法导论》读书笔记--第12章课后题(转)
第一章 转自http://www.cnblogs.com/batteryhp/p/4654860.html思考题1-1(运行时间的比较)确定时间t内求解的问题的最大规模。上面是网上提供的答案。注意点:1、最左边一列的是关于n的增长情况描述,值得记住的是这些增长的排列顺... 查看详情
补基础:自学:计算机科学导论第一章绪论
1.1图灵模型AlanTuring(阿兰·图灵)在1937年首次提出了一个通用计算设备的设想,也就是图灵机。1.1.1 数据处理器计算机会被定义成一个数据处理器,用来输入数据、处理数据并产生输出数据的黑盒。1.1.2可编程数据处理器图灵... 查看详情
骗分导论(代码片段)
新版骗分导论THENEWGUIDEOFCHEATINGININFORMATICSOLYMPIAD蒟蒻的宝书目录 第1章绪论 第2章从无解出发 2.1无解情况 2.2样例——白送的分数 第3章“艰苦朴素永不忘” 3.1模拟 3.2万能钥... 查看详情
算法导论第2章参考答案与编程题选
系列地址:算法导论(CLRS)参考答案与配套编程题选2.1插入排序练习2.1-1原题为\(A=<31,41,59,26,41,58>\),每一次排序后变化如下:为了演示效果,所有值统一减\(10\).下面演示对\(A=<21,31,49,16,31,48>\)的排序过程:练习2.1-2重写... 查看详情
算法导论第13章,红黑树
红黑树是一种“平衡的”查找树,能确定动态集合操作时间为O(logn) 13.1红黑树的性质 红黑树的每个节点除了key,value,p,left,right之外,还有color, 有value的都视为内节点,如果没有儿子,认为儿子都是NIL, 红黑性质:1... 查看详情