Alan Kay 第一个定义了面向对象的语言

1.万物皆对象
2.程序是对象的集合,他们彼此通过发送消息来调用对方.
3.每个对象都拥有由其他对象所构成的存储
4.每个对象都拥有其类型(TYpe)
5.某一特定类型的所有对象都可以接收同样的消息.
 
Booch提出一种更简洁的描述:
    对象拥有状态(state) 行为(behavior) 和标识(identity)
每个对象都有一个接口
每个对象都属于定义了特性和行为的某个类(特性可以理解为属性的状态,行为可以理解为method)
在面向对象的程序设计语言中都使用Class关键字表示数据类型.
每个对象都提供服务
你的目标是去创建能够提供理想服务来解决问题的对象集合.将对象看做服务提供者
被隐藏的具体实现
程序开发人员按角色分为类创建者和客户端程序员
类构建者的目标是构建类,该类只向客户端程序员暴露必需的部分,而隐藏其他部分。
客户端程序员是收集各种用来实现快速应用开发的类。
Java设置三个关键字来在类的内部设定边界:public private protected
public表示紧随其后的元素对任何人都可用
private表示除类型创建者和该类型内部方法之外的任何人都不可以访问的元素
protected与private相当,差别仅在于继承类可以访问protected成员,而不能访问private成员
缺省的访问权限又称为包访问权限,类可以访问在同一个包中的其他类的成员,包之外则不可以。
复用具体实现
代码复用是面向对象程序设计语言所提供的了不起的优点之一。
组合(强) 聚合(弱)
继承复用接口 
基础中有两种方式复用接口:
1.对新特性添加新方法
2.对新特性进行重载方法(继承基类的导出类中修改)
继承是is-a关系(没有新加接口元素)与like-a关系(导出类中新加了方法)
伴随多态的可互换对象
抽象基类和接口
抽象(abstract)方法只能在抽象类内部创建,当该类被继承时,抽象方法必须被实现.否则继承类仍然是抽象类
接口里面压根不允许有任何方法定义
对象的创建使用和生命周期
oop涉及抽象数据类型 继承 多态
java采用堆(heap)方式在内存池中动态创建对象,直到运行时刻才知道有多少对象,生命周期其具体类型等.是解决一般化编程问题的要点
java提供垃圾回收器(garbage collector)机制销毁对象,避免暗藏的内存泄露问题
集合(collection)和迭代器(iterator)
list(列表,用于存储序列)arraylist与linkedlist的区别(前者访问元素的时间是固定的,后者越靠近表尾的代价越高昂,但是如果你想在表中插入一个元素,linkedlist的开销却比arraylist小)
map类(散列表,也被称为关联数组,用来建立对象之间的关联)
set类(集类,用于存储一类对象)
迭代器是一个用来选取容器中的元素,并把它呈现给迭代器用户的对象.
单根继承结构
在java中所有的类最终都继承自一个单一的基类(Object)
单根继承结构以及在堆上创建所有对象,极大地简化了参数传递.
也使垃圾回收器的实现变得容易很多.
向下转型(downcasting)与模板/泛型(template/generic)
向上是转型为一个更泛化的类型(安全的)
向下是转型为一个更具体的类型
为了向下转型提供的解决方案是参数化类型(parameterized type)机制其使编译器可以自动定制作用于特定类型之上的类.
异常处理:处理错误
异常是一种对象,它从出错点被抛出(thrown),并被适当的专门被设计用来处理特定类型异常的异常处理器捕获(caught).是和正常代码并行执行的一条路径,不会影响代码正常执行.
并发(concurrency)又称为多线程(multithreading)
通常线程只是一种对单一处理器分配执行时间的手段.但有一个隐患,就是共享资源,比如同时请求打印机.于是在使用期间必须锁定
某个线程锁定某个资源,完成其任务(task),然后释放资源锁(使用synchronized表示),使其他线程可以使用
持久性(persistent)
java提供了对轻量级持久性的支持.这意味着你可以很容易将对象存储在磁盘上以便以后取回他们
----
java与internet
利用中间件将负载分散给在服务端的其他机器
中间件也被用来提高可维护性
客户端编程
比如表单校验
插件(Plug-in)
淘宝插件
脚本语言
例如JavaScript,被用来解决特定类型的问题.
主要是用来创建更丰富更具有交互性的图形化用户界面
可以解决百分之八十客户端编程问题
Java
Java是通过applet以及使用Javawebstart来进行客户端编程
在浏览器上升级是透明的,自动的.不像安装客户端那样,没升级一次,客户端也要做响应的升级
 
 
其余琐碎概念:
高内聚低耦合,是软件工程中的概念,是判断设计好坏的标准,主要是面向对象的设计,主要是看类的内聚性是否高,耦合度是否低。
高内聚
  内聚就是一个模块内各个元素彼此结合的紧密程度,高内聚就是一个模块内各个元素彼此结合的紧密程度高。
   所谓高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。
低耦合
  耦合:一个软件结构内不同模块之间互连程度的度量(耦合性也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的信息
    对于低耦合,粗浅的理解是:一个完整的系统,模块与模块之间,尽可能的使其独立存在。也就是说,让每个模块,尽可能的独立完成某个特定的子功能。模块与模块之间的接口,尽量的少而简单。如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。这样有利于修改和组合
类关系总结
泛化--->代表的是继承关系用  子类 实线空心三角箭头  父类 
依赖--->代表的是使用关系   人----->剪刀
通常情况下依赖关系体现在某个类的方法使用另外一个类作为参数.
关联--->代表的是结构关系  公司 实线> 员工
通常情况下关联关系通过类的成员变量变量来实现
关联分为聚合和组合两种
聚合--->描述的是一种has-a关系   school 空心菱形+实线+箭头 student(人和电脑 关系较弱)
组合--->描述的是一种contains-a关系  window 实心菱形+实线+箭头 menu(汽车 引擎(人手)统一的生命周期,关系较强)
实现--->描述的是连个实体之间的合约,对类来说就是一个类实现一个接口
person 空心三角-----------student 
HotSpot是一款高性能的Java虚拟机,可以大大提高Java运行的性能。Java原先是把源代码编译为字节码在虚拟机执行,这样整体执行效率不 高。而HotSpot关注的是对部分热点(hot spot)代码的动态优化,将那些频繁执行的热点代码编译为本地原生代码,这样就显著地提高了性能。
 
 

java编程思想笔记(第一章)的更多相关文章

  1. Java编程思想笔记(第二章)

    第二章  一切都是对象 尽管Java是基于C++的,但相比之下,Java是一种更纯粹的面向对象程序设计语言. c++和Java都是杂合型语言(hybird language) 用引用(referenc ...

  2. Java编程思想(第一章 对象入门)总结

    面向对象编程(oop) 1.1抽象的进步 所有编程语言的最终目的都是提供一种“抽象”方法.   难点是 在机器模型(位于“方案空间”)和实际解决问题模型(位于“问题空间”)之间,程序员必须建立起一种联 ...

  3. Java编程思想——第17章 容器深入研究 读书笔记(三)

    七.队列 排队,先进先出. 除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: ad ...

  4. Java编程思想 第21章 并发

    这是在2013年的笔记整理.现在重新拿出来,放在网上,重新总结下. 两种基本的线程实现方式 以及中断 package thread; /** * * @author zjf * @create_tim ...

  5. Java编程思想——第17章 容器深入研究(two)

    六.队列 排队,先进先出.除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: add ...

  6. Java编程思想 笔记

    date: 2019-09-06 15:10:00 updated: 2019-09-24 08:30:00 Java编程思想 笔记 1. 四类访问权限修饰词 \ 类内部 本包 子类 其他包 publ ...

  7. java编程思想笔记(1)

    java编程思想笔记(1) 一,对象的创建和生命周期 对象的数据位于何处?怎样控制对象的生命周期? 在堆(heap)的内存池中动态地创建对象. java完全采用了动态内存分配方式. 二,垃圾回收器 自 ...

  8. #Java编程思想笔记(一)——static

    Java编程思想笔记(一)--static 看<Java编程思想>已经有一段时间了,一直以来都把笔记做在印象笔记上,今天开始写博客来记录. 第一篇笔记来写static关键字. static ...

  9. 2.1(java编程思想笔记)位移操作

    java位移操作主要有两种: 有符号位移:有符号位移会保留原有数字正负性,即正数依然是正数,负数依然是负数. 有符号位左移时,低位补0. 有符号右移时:当数字为正数,高位补0.当数字为负时高位补1. ...

随机推荐

  1. requirejs实现模块化

    使用requirejs实现模块化编程 > 序言 - -# 公司大了,业务多了,前端代码量也逐渐增大,我们渐渐的依赖js实现的交互越来越多,长期以来会导致我们的代码维护越来越困难,所以依赖的插件也 ...

  2. Navicat工具Oracle数据库复制 or 备用、恢复功能(评论都在谈论需要教)

    GXPT它是一个分布式系统,该系统包括一个临时许可系统.基本系统.教学评价体系.考试系统,每个系统都有自己的oracle数据库.统,而评教系统的正常须要借助于权限系统和基础系统,详细的业务这里就不多解 ...

  3. springMVC注解优化

    本文是本人在学习网络视频的过程中的一些总结. 本文是对关于一些springMVC在使用注解的优化. 使用以下的标签,会自己主动引入Annotation的配置 <mvc:annotation-dr ...

  4. thinkphp学习笔记8—命名空间

    原文:thinkphp学习笔记8-命名空间 新版本(3.2)中采用命名空间的方式定义和加载类库文件,解决多个模块之间的冲突问题,并实现了更加高效的自动加载机制. 需要给类库定义所在的命名空间,命名空间 ...

  5. Android(Lollipop/5.0) Material Design(六) 使用图像

    Material Design列 Android(Lollipop/5.0)Material Design(一) 简单介绍 Android(Lollipop/5.0)Material Design(二 ...

  6. javascript系列之this

    原文:javascript系列之this 引言 在这篇文章里我们将会讨论与执行上下文直接相关的更多细节.讨论的主题就是this关键字.实践证明,这个主题是足够难的并且在不同的执行上下文中判定this的 ...

  7. —软测试—(5)计算机系统CPU组成

    事实上,我们不得不很早就接触到电脑系统的知识,但仍然会出现不起眼,现象清醒的认识,非常严重丢分. 要我们花功夫去理解,由于非常多东西我们接触不到,比方校验码.码制等.假设你不去理解而是去记,就非常难參 ...

  8. 如何监控第三方应用程序(SOAP or RESTful client)访问HTTPS当数据站点?

    随着越来越多的互联网应用,在我们日常的开发和调试,其中(例如,调试SOAP和RESTFul什么时候),我们经常需要访问工具,通过第三方获取HTTPS网站.为了简化叙述说明,如本文所用,IE浏览器访问G ...

  9. c++中string类的具体解释

    通过在站点上的资料搜集,得到了非常多关于string类使用方法的文档,通过对这些资料的整理和增加一些自己的代码,就得出了一份比較完整的关于string类函数有哪些和如何用的文档了! 以下先罗列出str ...

  10. MVC 6 写法

    MVC 6 一些不晓得的写法 今天在看 Scott Guthrie 的一篇博文<Introducing ASP.NET 5>,在 MVC 6 中,发现有些之前不晓得的写法,这边简单记录下, ...