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. ABP应用层——权限验证

    ABP应用层——权限验证 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:http://www.aspnetboilerpla ...

  2. Java日志性能那些事(转)

    在任何系统中,日志都是非常重要的组成部分,它是反映系统运行情况的重要依据,也是排查问题时的必要线索.绝大多数人都认可日志的重要性,但是又有多少人仔细想过该怎么打日志,日志对性能的影响究竟有多大呢?今天 ...

  3. Python输出文件由线解释和扩展的具体内容

    结束此处的测试代码中作者写的,第一段包含不正确的版本号,后者是正确的版本号: #! /usr/bin/python2.7 try:     filename = raw_input('please i ...

  4. Robot Framework自动化测试(一)---第一个脚本(转)

    最近工具中用Robot Framework框架来做自动化,所以,花时间学习了一下. =======所需环境=================== Python: https://www.python. ...

  5. Java变量参数

    Java1.5添加新功能:可变参数:它适用于参数不确定性的数量,判断形势的类型.java变量参数数组操作. 特点: 1.今天的参数列表只能持续. 2.省略号(...)位于变量类型和变量名之间,前后有无 ...

  6. Oracle数据库之开发PL/SQL子程序和包

    Oracle数据库之开发PL/SQL子程序和包   PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保 ...

  7. android该系统的应用API选择演示版本

    转载请注明出处[http://blog.csdn.net/y150481863/article/details/41280045] 首先我们在开发一个应用之前,特别是一个android应用.首先要考虑 ...

  8. [转]JS中的prototype

    JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个 ...

  9. GitHub Top 100 简介

    主要对当前 GitHub 排名前 100 的项目做一个简单的简介, 方便初学者快速了解到当前 Objective-C 在 GitHub 的情况. GitHub 地址:https://github.co ...

  10. Cocos2d-android游戏引擎-介绍

    一.游戏引擎概念 什么是游戏引擎       游戏引擎是指一些已编写好的可编辑游戏系统或者一些交互式实时图像应用程序的核心组件.这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计 ...