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. 恢复SQLSERVER被误删除的数据

    原文:恢复SQLSERVER被误删除的数据 恢复SQLSERVER被误删除的数据 曾经想实现Log Explorer for SQL Server的功能,利用ldf里面的日志来还原误删除的数据 这里有 ...

  2. SpringMVC注释启用

    这篇文章是我学习的网络视频SpringMVC写的过程. 谢谢公布各位前辈的视频 以下评论SpringMVC几个关键步骤,注意事项启用: 首先需要加载配置文件(假设请使用自定义路径) <? xml ...

  3. 基于LINUX的多功能聊天室

    原文:基于LINUX的多功能聊天室 基于LINUX的多功能聊天室 其实这个项目在我电脑已经躺了多时,最初写完项目规划后,我就认认真真地去实现了它,后来拿着这个项目区参加了面试,同样面试官也拿这个项目来 ...

  4. c++界面设计皮肤工具

    1. 先进行软件界面设计,确定软件界面美术包装方案 2. 依据软件界面美术设计装方案制作对应的图片,图片格式请參见AUDK的帮助文档或皮肤工具SkinTool 的 Demo 3. 打开皮肤工具 Ski ...

  5. hdu Just a Hook

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698 线段树+lazy操作     线段树是从上到下开始建树,树状数组是从下到上建树.... 代码: ...

  6. C# 使用摄像头拍照 支持Win7 64位

    原文:C# 使用摄像头拍照 支持Win7 64位 So, how do we capture an image from a WebCam? Once you download the source ...

  7. php_linux_ubuntu_安装mysql_apache_php

    用apt-get方法安装mysql5 + Apache2 + PHP5+Phpmyadmin [建议] http://www.sudu.cn/info/html/edu/20080102/283439 ...

  8. FindBugs:Compiler output path for module can not be null. check your module/project settings问题原因

    这可能是很多人在使用Android studio 该插件会发现此错误信息:Compiler output path for module can not be null. check your mod ...

  9. vb.net窗口继承(房重建知识汇总)

    在项目的开发,我们经常会遇到特殊的相界面似窗户,然后,我们将能够使用继承的窗口.透过窗户下面简单的例子来实现继承. 1.创建父窗口Form1 2.把须要重写的事件改为Overridable,将priv ...

  10. 吞吐量(Throughput)、QPS、并发数、响应时间(RT)对系统性能的影响

    首先对吞吐量().QPS.并发数.响应时间(RT)几个概念一直比较模糊,也不知道哪些指标可以较好的衡量系统的性能.今天特意查了些资料做一些记录:首先看一些概念(来自百度百科) 1. 响应时间(RT) ...