对象导论
面向对象程序设计 Object-oriented Programming oop
一、抽象过程
所有编程语言都提供抽象机制,解决问题的复杂性直接取决于抽象的质量和类型。
面向对象的五个基本特征:
1,万事万物接对象
2,程序是对象的集合
3,每个对象都有自己的由其他对象所构成的存储
4,每个对象都拥有其类型
5,某一特定类型的所有对象都可以接受同样的消息
二、每个对象都有一个接口
创建抽象数据类型(类-class)是面向对象程序设计的基本概念之一
类描述了就有相同特征(数据)和行为
三、每个对象都提供服务
程序通过调用其他对象提供服务实现这一目的,提高对象内聚性。
四、被隐藏的具体实现
访问控制让别人无法触及他们不应该触及的部分。
允许创建者可以改变类内部的工作方式而不担心影响到客户端。
类内部的设定边界:public,private,protected
五、复用具体实现
代码复用是面向对象程序设计与语言提供的最了不起的优点之一
继承在面向对象程序设计中十分重要。
六、继承
基类/父类/超类,导出类/继承/子类
父子类出现差异的范式:子类单独建,父类方法重写。以应用场景为准
七、伴随多态的可换对象
通过导出新的子类型而轻松扩展设计的能力是对改动进行封装的基本方式之一,可以极大改善设计,降低软件维护代价。
面向对象采取后期绑定的概念,即方法运行时,被调用的方法才能被绑定。
八、单根继承结构
java所有的类都继承自单一的基类,单根继承结构中的所有对象都具有一个共用接口,都是基本的类型。
单根继承保证所有对象都具备某些功能,执行某些操作,对象可以很容易在堆上创建,参数传递得到简化。
单根继承使垃圾回收器的实现变得简单,具有相同的类型信息,方便确定对象类型。
九、容器
创建一种对象类型,这种新的对象类型持有对其他对象的引用。java称容器,也是集合
不同容器提供了不同类型的接口和外部行为,不同的容器对某些的操作有不同的效率。
java通用的类型--Object,单根继承结构以为这所有东西都是Object类型,可以存储Object的容器可以存储任何东西,即复用思想。
类向上转型会丢失身份(泛化,安全),取回时,获取对Object对象的引用,而不是对置入时那个类型的引用。
类向下转型更具体(具体,不安全),需要检查和匹配对象类型
十、对象的创建和生命期
1,对象的生成和销毁方式--是使用对象的最关键的问题之一。对象的生存需要资源,尤其内存,对象不需要就得清理,释放内存资源。
2,如何销毁对象?
1,对象的数据位于何处?怎样控制对象的生命周期?c++认为效率是最重要的议题,所以给程序员提供了选择的权利。为了追求最大的执行速度,对象的存储空间和生命周期可以在编写程序时确定,通过将对象置于堆栈(自动变量或者限域变量)或静态存储区来实现。这种方式将存储空间分配和释放置于优先考虑的位置,某些情况下,这样控制非常有价值,但是,也牺牲了灵活性,因为必须在编写程序的时候确认对象的数量,生命周期和类型。
2,在堆的内存池中动态创建对象。运行时才知道要创建多少对象,生命周期,具体类型信息。因为存储空间是在运行的时候被动态管理的,所以需要大量的时间分配存储空间,这可能远远大于在堆栈中创建存储空间的时间。在堆栈中创建存储空间和释放存储空间通常各需要一条汇编指令即可,分别对应将栈顶指针向下移动和将栈顶指针向上移动。创建堆存储空间的时间依赖于存储机制的设计。
3,动态方式有这样一个一般性的逻辑假设:对象趋于变得复杂,所以查找和释放存储空间的开销不会对对象的创建造成重大冲击。java采用动态内存分配方式。
4,对象的生命周期:对允许在堆栈上创建对象的语言,编译器可以确定对象的存活时间,并可以自动销毁它。如果是在堆上创建对象,编译器会对它生命的周期一无所知。
5,java的垃圾回收器自动发现对象何时不再使用,并继而销毁它。而且提供了更高层的保障,避免暗藏的内存泄漏问题。
6,java垃圾回收器被设计用来处理内存释放问题。回收对象和单根继承基类OBJECT类以及只能以一种方式创建对象结合起来,使编程变得简单
十一、异常处理:处理错误
异常处理不是面向对象的特征,尽管它被描述为一个对象。
异常处理将错误处理直接置于编程语言中,有时置于操作系统中。异常提供一种从错误状况进行可靠恢复的途径,可以进行校正,并恢复程序执行,有助于编写更健壮的程序。
java一开始就内置了异常处理,而且强制使用,它是唯一唯一可接受的错误报告方式。
十二、并发编程
计算机编程有一个基本概念:同一时刻处理多个任务的思想。
并发隐患:共享资源。解决方式:某个任务锁定资源,完成任务,释放资源锁,其它任务使用。
java并发是内置于语言中的,依赖库支持。
十三、java与internet
java解决传统的单机程序设计非常有用,同样重要的是,它解决了万维网上的程序设计问题。
javascript的命名是想赶上java潮流。
十四、总结
以上是面向对象的两部分内容的定义:用来表示问题空间概念的对象,以及发送给这些对象的用来表示在此空间内的行为的消息。