面向对象强调的是对问题域的理解,只有理解了问题才能去解决问题,它采用了渗透人类思维方式中的组织方法来组织、分析和设计,这就使得我们能够在对象提供的属性和服务与我们习惯思考方式达成一致,提高了分析结果的内在一致性。面向对象还利用了对象的继承特性来重用不同对象间属性和服务的共性之处。
面向对象分析包括5个层次:
首先是 主题层,它提出了分析模型的总体概念
其次是 对象层,对象是数据及其处理的抽象,这反应了系统保存信息和与现实交互的能力
第三是 结构层,这反映了问题的复杂程度
第四是 属性层,属性是用来描述分类结构的数据单元,它会在数据库中说明
第五是 方法层,方法也就是服务,是收到消息后执行的处理
面向对象的执行一般分5个步骤
首先是 标识对象和类,这主要是使系统的技术表示同现实的概念观点联系得更加紧密,这有助于建立一个关于分析与说明的稳定模型。
其次是 标识结构,分两类。一类是分类结构,为了获得类——成员组织;一类是组装结构,为了刻画整体——部分组织。分类结构表
达人们的一种基本组织方式,因为大多数人类活动都涉及分类;组装结构也表达了人类的一种基本组织方式,即自然的整体和
部分的关系
第三是 标识主题,主题是一种引导我们研究大型复杂模型的机制,这可以使我们同时考虑模型的数目,另外,主题也给出了总体的概貌
第四是 定义属性,属性能为对象和结构提供更多的细节,明确对象或结构名字的含义,在选择属性是应当选择那些与当前问题相关的特性
,作为下一步定义这些属性上的服务以及封装属性和服务的基础。要注意的是,随时间的推移,问题中的对象是比较稳定的,而
对象内的属性是可以改变的。
第五是 定义服务,所谓服务就是收到消息之后执行的处理,服务表明了某个类的对象能提供哪些行为
面向对象设计一般分四个部分
第一部分就是人机交互,即有效达到输入和显示。
第二部分就是问题空间部分,这部分需管理面向对象分析的一些类、结构、属性和服务的分解与组合
第三部分就是任务管理部分,主要包括任务的定义、通信和协调,也包括硬件的分配、外部系统以及装置协议
第四部分就是数据管理部分,包括永久性数据的访问和管理
面向对象的几大特点;
封装,封装的目的就是为了将对象的用户和设计分开,用户不必了解对象的行为是怎么实现的,他们只需使用设计者提供的接口来访问对象
继承,就相当于先粗分类,后细分类,相当于生物上的遗传和变异
多态性,系统中不同的对象对同一消息作出的不同反应。分动态类型和静态类型。动态类型的多态性是指统一消息可以在程序执行期间据负责
接受的实例不同而变化,静态类型多态则指写程序时就被决定了的
多态主要有两类:重载类型和覆盖类型
当一个类中出现一些同名的方法是,就出现了重载类型(只要求参数个数不同或参数类型不同)
当程序调用其中的一个方法时,由系统通过检查参数个数或参数类型来确定你真正想调用的那个方法
多态性的覆盖类型便是由对象间的继承带来的(方法名、参数数量、类型和拍了次序都相同,便会出现覆盖)
类与对象的关系,就好比变量和变量类型的关系
对象是类这种数据类型的一个变量,是数据的集合,也是一个操纵这些数据的操作的集合
构造函数不能直接引用的,系统会在对象创建期间自动调用构造函数
this这个关键字在java中代表的就是当前的类,也就是说,你在程序中可以使用this来引用当前对象本身,不必声明和需其他操作,总是给你返回当前变量的引用。
super与this相对应,super关键字可以使你访问父类对象,并容许你调用父类构造函数以及该父类的其他方法
instanceof运算符是非常有用的,可以用来判断一个具体的实例对象是否为某个类的实例或其子类的实例,返回值为布尔值
关键词 static/final
用static声明一个变量时,可以使多个类对象共享这个变量,如果一个对象改变了一个static变量的值,那么每个对象都见到这个被更新的值
把一个变量声明成final变量,这个变量值就不能再被更改
在类中将一个方法声明为static方法是,程序不用创建对象就可以调用这个方法,若把一个方法声明为final方法,另一个类就不能覆盖这个方法