工作中用到android 有点陌生 决定从java开始系统的学习
java仅仅是一门语言?
程序设计其实是对复杂性的管理:待解决问题的复杂性,以及用来解决该问题的工具的复杂性。这种复杂性导致多数程序设计的失败
java减少了程序的复杂性。关心的是减少开发健壮代码所需的时间以及困难
一、抽象
1.1抽象的定义
1)万物皆为随想
对象是奇特的变量,可以存储数据,还可以要求自身的操作。 (万事可以是对象)
2)程序是对象的集合,通过发消息来告诉彼此需要的行为
3)每个对象都有自己的由其他对象构成的存储
也就是说可以通过简单的对象来创建新的复杂的对象。将复杂性隐藏于简单之后
4)每个对象都有类型
5)某个特定的类型的所有对象都可以接受同样的消息
这里应该指的是抽象和继承
假设:形状的一些行为 正方形是不是也应该具有呢?
此外抽象还有更加简洁的描述:对象需要有状态、行为和标识
1.2每个对象都有一个接口
一个类创建处理就可以随心所欲的去使用它,使用的是他的接口。 例如:一个灯应该有开关接口
1.3每个对象都提供服务
将对象想想成服务提供者,程序本身向用户提供服务
1.4被隐藏的具体实现
通常被隐藏起来的是对象内部的脆弱成分。很容易被粗心的或者是不明内情的客户端程序员所毁坏。
因此引入了访问权限(access specifier)
好处:
1)你可能为了减轻开发任务而以某种简单的方式实现了某个特定类,之后你发现必须要重新改写他。
如果接口和实现可以清晰的分离并得以保护,你可以很简单的完成这个任务。
2)你可以不允许其他程序员去触及他们不应该触及的部分。
1.5复用
这个需要经验跟敏锐的洞察力
最简单的复用某个类的方式就是直接使用该类的一个对象,此外也可以将那个类的一个对象至于某个新类中去
这里运用到组合(composition) 。如果组合是动态发生的那么我们称之为聚合(aggregation)
组合的关系是 拥有has-a 汽车拥有引擎
实际上我们建立新类的时候应该首先考虑组合
1.6继承
对象将数据和功能封装到一起。但是遇到一个麻烦。新类跟这个类具有相似的功能
这个时候我们需要用到继承了
继承引发了某种讨论 (继承是不是应该只是覆盖基类的一些方法 而不是添加新的功能 也就是一个是和像的问题)
1.7伴随多态可以相互转换对象
在处理类型的层次结构的时候,经常把一个对象不当做它所属的特定类型来对待,而是将其当做基类的对象来看待。这样的好处是:可以编写出不依赖特定类型的代码
这里涉及到的技术叫后期绑定
在某些语言必须明确希望某个方法具备后期绑定属性所带来的灵活。例如C++ 使用virtual 这些语言中默认情况下不是动态绑定的。
在java中动态绑定是默认行为。不需要添加额外的关键字。
1.8单根继承结构
单根继承结构保证所有对象都剧本某些功能。C++为了兼容C并没有做这种保证 但是别的OOP语言基本上都是yes
1.9容器
通常来说,不知道解决某个特定问题时需要多少个对象,或者他们将存活多久,那么就不可能知道如何存储这些对象。如何才能知道需要多少空间来创建这些对象,答案也许你可能不知道。还好大部分OOP语言都提供了容器
List Map Set,以及队列、树、堆栈等更多的构建
参数化类型
1.10对象的创建和生命周期
1.11 异常处理 处理错误
1.12并发编程
1.13java和internet
1.客户/服务器技术
核心思想:系统有一个中央信息存储池,用来存储数据,通常存储在数据库中。
基本概念并不复杂关键是。问题是你只有的单一的服务器。却要同时为多个客户服务。通常这会涉及数据库管理系统。因此设计者把数据均衡分布于数据表中,以取得最优的使用效果。而且一般允许用户插入新的信息。这意味着必须保证插入新数据不会覆盖另一个客户插入的数据,也不会丢失。。
最重要的是性能问题:
任意时刻都可能有成千上万的客户向服务器发送请求。所以任何小的延迟都可能也有重大的影响。为了将延迟最小化,程序员努力减少处理任务的负载,通常是分散给客户端机器处理,但有时也会将中间件将负载分散给服务器端的其他机器(中间件也被用来提高可维护性)
分发信息这个简单思想的复杂性实际上是有很多不同层次的,这使得整个问题可能看起来高深莫测,但是仍然至关重要: