Java编程思想(第一章 对象入门)总结
面向对象编程(oop)
1.1抽象的进步
所有编程语言的最终目的都是提供一种“抽象”方法。 难点是 在机器模型(位于“方案空间”)和实际解决问题模型(位于“问题空间”)之间,程序员必须建立起一种联系。造成程序员代码很难编写。因此造成的副作用便是一门完善的“编程方法”学科。
面向对象的程序设计在此基础上则可以利用一些工具表达问题空间中的元素。因为这种表达非常普通,所以不必受限于特定类型的问题。
将问题空间中的元素以及它们在方案空间的表示物称为“对象”(object)、
编程对象的五大共同特征:
1所有东西都是对象。将对象想象成一种新型变量;它保存着数据,但是可以要求它最自身进行操作。理论上,
可从要解决的问题身上提出所有概念性的组件,然后在程序中将其表达为一个对象;
2程序是一大堆对象的组合:通过消息传递,各对象知道自己该做什么。为了向对象发出请求,需要向那个对象“”发送一条消息“”,可将消息想想成一个调用请求,它调用的是从属于目标对象的一个 子例程或函数
3每个对象都有自己的存储空间,可容纳其他对象。即通过封装现有的对象,可以制作出新型对象。
4每个对象都有一种类型。根据语法,每个对象都是某个“类”的一个“实例”。其中,"类"(class)是类型(type)的同义词。一个类最重要的特征就是“能将什么消息发送给他”;
5同一类所有对象都能接收相同的消息。这一特性为对象的“可替换性”
1.2对象的接口
在面向对象的程序设计中,尽管我们要做的是新建各种各样的数据“类型”(TYpe),但是所有的都使用class关键字,因此我们看到type时需要想到 class关键字
挑战:如何在“问题空间”(问题实际存在的地方)的元素与“方案空间”(对实际问题进行建模的地方)的元素之间建立起理想的“一对一”
的映射关系。
想要利用对象进行工作,则需要对对象发出请求,令其做一些实际的事情。我们向对象发出的请求是通过它的“接口”定义的,对象的“类型”或“类”则规定了它的接口形式。“类型”与“接口”的等价或对应关系是面向对象程序设计的基础
列举灯泡为例:
类型/类的名称是Light
为Light对象创建一个句柄 new新建一个对象,并用等号将其赋给句柄
Java采用三个显示(明确)关键字以及一个隐式(暗示)关键字来设置类边界:public,private,protected以及暗示性的friendly。若未明确指定其他关键字则默认是后者。
public:任何人都可以使用
private:除了自己、类型的创建者、以及那个类型的内部函数成员,其他任何人都不能访问后续的定义信息。
friendly:设计包装或封装的概念(package)的概念 即Java用来构建库的方法。若某一样东西是友好的,意味着它只能在这个包装的范围内使用(所以这一访问级别有时也叫做“”“包装访问”)。
protected:只是一个继承的类可访问受保护的成员,但是不能访问私有成员。
1.4 方案的重复使用 是面向对象的程序设计提供的最伟大的杠杆
为了重复使用一个类
可以直接使用哪个类的对象,单同时可以将那个类的一个对象置入一个新类。----创建一个成员对象。
新类可以由任意数量和类型的其他对象构成。无论何时,只要新类达到了设计要求即可。
这个概念叫做组织---在现有类的基础上组织一个新类。 有时,我们也将组织成为包含关系。
新建类的时候,首先应该考虑“”“组织对象”,这样更加简单和灵活。利用对象的组织,我们可以使实际保持清爽。一旦需要用到继承,就会意识到这一点
1.5 继承:重新使用接口
对象在概念上可以允许我们将各种各样的数据和功能封装在一起。这样便可以表达“问题空间“”的概念,不要刻意的遵照基础机器的表达方式。
在程序设计语言中,这些概念则反映为具体的数据类型(class)
继承的目标:利用现成的数据类型,对其进行克隆,在根据情况进行添加和修改;
继承的过程:若原始类发生了变化,修改过的“克隆”类也会反映出这种变化
继承的实现:Java中使用extends关键字实现的
使用继承时,衍生类具有与基础类相同的接口,所以那个接口必须进行特殊的设计。即对象接收到一条特定的消息后,必须有一个方法能够执行
将衍生类和原来的基础类进行区分:
1为衍生类添加新的函数(功能),所以需要添加更多的函数。
1.5.1改善基础类
2改变基础类的一个现有函数的行为
第二个办法是改变基础类一个现有函数的行为。目标是:尽管使用的函数接口未发生改变,但是他的新版本具有不同的表现。
1.5.2等价与类似的关系
可以将衍生类的一个对象换成基础类的一个对象,可将其想象成一种“纯替换”。
类似关系是指:我们为衍生类型加入新的接口元素,所以不仅扩展了接口,也创建一种新的类型。这种新类型仍可以替换成基础类型,但是这种替换不是完美的,因为不可能在基础类中访问新函数。
1.6多形对象的互换使用
Upcasting(上溯造型)把衍生类型当作它的基本类型处理。
cast(造型)是根据一个现成的模型创建。
Up(向上)表明继承的方向是从“上面”来的-----即基础类位于顶部而衍生类在下方展开。
1.6.1动态绑定
多形性:将一条消息发送给对象时,如果并不知道对方的具体类型是什么,但采取的行动同样是正确的。
动态绑定:用以实现多形性的方法
其中函数的动态绑定是自动运行的,所以将一条消息发送给对象时,我们完全可以肯定对象会采取正确的行动,即使其中涉及上溯造型之类的处理。
1.6.2抽象的基础类和接口
我们希望基础类只为自己的衍生类服务,即不想其他任何人实际创建基础类的一个对象,为了达到这个目的,需要把那个类变成抽象的----使用abstract关键字。
也可以用abstract关键字描述一个尚未实现的方法---作为一个“根”使。
抽象方法也许只能在一个抽象类里创建。继承了一个类后,那个方法就必须实现,否则继承的类就会变成抽象类。通过城建一个抽象方法,可以讲一个方法置入接口中。
1.7对象的创建和存在时间
Java提供了一个垃圾收集器
1.7.1集合与继承器
集合:容器,集合会自动扩充自己,以便适应我们在其中置入的任何东西。
倘若希望对集合中的一系列元素进行操作则需要使用“继续器”
继续器:是一种对象,负责选择集合内的元素,并把它们提供给继承器的用户。通过集成器的作用,集合被抽象成一个简单的序列。继承器允许我们遍历那个序列,同时不要关心基础结构是什么
1.7.2单根结构
利用单根结构可以方便地实现一个垃圾收集器。
下塑造性:是下塑造型成一种更特殊的造型。
1.7.4消除 违例控制
1.9多线程
使用多线程时需要程序员创建一个对象,用它代表一把锁,所有线程在访问那个资源时都必须检查这把锁
1.11.1什么是Web
1客户机/服务器计算
服务器(server):将各种元素集中到一起,信息仓库,用于投递信息的软件以及信息及软件所在的机器。
客户:对于驻留在远程机器上的软件,他们需要与服务器通信,取回信息,进行适当的处理,然后在远程机器上显示出来
中间件:为了避免访问拥塞,可让客户机负担部分处理任务,但是有时也可以分派给服务器所在地的其他机器。
1.11.2客户端编程
1.12.1不要迷失
时刻提醒自己注意一下问题:、
1对象是什么(怎样将自己的项目分割成一系列单独的组件)
2它们的接口是什么(需要将什么消息发送给每一个对象?)
在确定了对象和接口之后,便可以着手编写一个程序。
整个过程可以分为4个阶段
阶段0 拟出一个计划
阶段1要制作什么?建立需求分析和系统规格
阶段2如何构建
阶段3开始创建
阶段4校订 维护
Java编程思想(第一章 对象入门)总结的更多相关文章
- [Java编程思想] 第一章 对象导论
第一章 对象导论 "我们之所以将自然界分解,组织成各种概念,并按其含义分类,主要是因为我们是整个口语交流社会共同遵守的协定的参与者,这个协定以语言的形式固定下来--除非赞成这个协定中规定的有 ...
- 学习java编程思想 第一章 对象导论
一.面向对象的五个基本特性: 1.万物皆为对象.将对象视为奇特的变量,他可以存储数据,还可以要求它在自身上执行操作. 2.程序是对象的合集,他们通过发送消息告诉彼此所要做的. 3.每个对象都有自己的由 ...
- JAVA编程思想第一章——对象导论
- JAVA 编程思想第一章习题
//: ch1.01/IntChar.java package object; import java.util.*; public class IntChar { int x; char y; pu ...
- Java编程思想学习(一)----对象导论中多态的理解
1.1抽象过程 1)万物皆对象. 2)程序是对象的集合,他们通过发送消息来告知彼此所要求做的. 3)每个对象都有自己的由其他对象所构成的存储. 4)每个对象都拥有其类型. 5)某一特定类型的所有对象都 ...
- java编程思想第九章接口
9.1抽象类和抽象方法 为什么要有抽象类? 是希望通过通用接口操作一系列类. 那么抽象类的形式是什么样的呢? 声明类的使用使用abstract关键字,且在该类中应该具有抽象方法. 注:抽象方法被关键字 ...
- [Java编程思想] 第二章 一切都是对象
第二章 一切都是对象 2.1 用引用操纵对象 创建一个String引用: String s; 这里所创建的只是引用,并不是对象. 创建一个引用的同时便初始化: String s = &qu ...
- Java编程思想 第九章 接口
第九章 接口 抽象类和抽象方法 抽象:从具体事物抽出.概括出它们共同的方面.本质属性与关系等,而将个别的.非本质的方面.属性与关系舍弃,这种思维过程,称为抽象. 这句话概括了抽象的概念,而在Java中 ...
- 烟大 Contest1024 - 《挑战编程》第一章:入门 Problem G: Check The Check(模拟国际象棋)
Problem G: Check The Check Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 10 Solved: 3[Submit][Statu ...
随机推荐
- php注意事项|要点
1. 用单引号代替双引号来包含字符串,这样做会更快一些.因为 PHP 会在双引号包围的 字符串中搜寻变量,单引号则不会,注意:只有 echo 能这么做,它是一种可以把多个字符 串当作参数的“函数”(译 ...
- bzoj 1924
所用点的编号为输入顺序,因为只有在存在联通门的宫室中存在宝藏.其余点不考虑 对于每一行,选定一个横天门,向该行横天门连双向边,其余门单向边纵列同理自.由门用map判周围八个点是否存在,存在即连边 Ta ...
- tarjan模板(带注释)
//dfsn[x]记录x节点有没有被访问过,有,则是第几个 //lowlink[x]记录x能到的祖先中编号最小的 //dfs_clock是个编号累计器 //scc记录一个 inline void df ...
- WEB测试重点及视频教程
WEB测试重点如下: 1.WEB测试基础-2.理解网络协议-3.HTTP协议详解-4.WEB前段分析-5WEB安全性测试-6.WEB兼容性及可用性测试. 1.通常需要承受长时间的大量操作,因此web项 ...
- Web开发入门教程:Pycharm轻松创建Flask项目
Web开发入门教程:Pycharm轻松创建Flask项目 打开Pycharm的file,选择创建新的项目,然后弹出对话框,我们可以看到里面有很多的案例,Flask.Django等等,我们选择生成Fla ...
- HDU 4374 One hundred layer(单调队列DP)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=116242#problem/E 题意:差不多就是男人勇下百层的游戏.从第一层到最 ...
- 5 款最酷的 Linux 终端模拟器
转载:https://cloud.tencent.com/developer/article/1040344 首先我要推荐的第一个终端是 Xiki. Xiki 是 Craig Muth 的智慧结晶,他 ...
- tar中的参数 cvf,xvf,cvzf,zxvf的区别
tar cvf etcbak.tar etc/ 打包一个tar tar xvf etcbak.tar 解开一个tar tar cvzf etcbak.tar.gz etc/ 打包压缩 ...
- pwn学习日记Day22 《程序员的自我修养》读书笔记
知识杂项 软连接 命令: ln -s 原文件 目标文件 特征: 1.相当于windows的快捷方式 2.只是一个符号连接,所以软连接文件大小都很小 3.当运行软连接的时候,会根据连接指向找到真正的文件 ...
- linux下如何设置日志级别?
答: echo $level > /proc/sys/kernel/printk 如: echo 8 4 1 7 > /proc/sys/kernel/printk