对象导论

CH1 对象导论

Java编程思想 (第4版)

1.1抽象过程

  • 将问题空间中的元素及其在解空间上的表示称为 对象
  • 面向对象思想实质:程序可以添加新类型的对象
    使自身适用于某种问题

1.2每个对象都有一个接口

  • 创建抽象数据类型(类)是面向对象程序设计的基本概念之一。
  • 类描述了具有相同特性(数据元素)和行为(功能)的对象集合。
  • 接口 确定了对某一特定对象所能发出来的 请求
    • 每一个请求都与一个方法相关联
    • 满足这些请求的代码与隐藏的数据构成了 实现
  • UML(Unified Modelling Language,统一建模语言)
    1. 每个类都用一个方框表示
    2. 类名在方框的顶部
    3. 数据成员在方框中间
    4. 方法在底部
    5. 通常只有 类名和公共方法 被表示在图中

1.3每个对象都提供服务

当正在试图开发或理解一个程序设计时,最好的方法之一就是 将对象想像成”服务的提供者“。去调用或创建可以提供这一服务的对象

  • 好处:

      1.  将问题分解为对象的集合
      2.  提高对象 **内聚性** 
    

1.4被隐藏的具体实现

程序开发人员按角色分为 类创建者客户端程序员 是大有裨益的。

  • 类创建者的目标是构建类,这种类只向客户端程序员暴露必须的部分而隐藏其他部分。

  • 客户端程序员的目标是 收集各种用来快速应用开发的类。

  • 类访问限制符

    1. public
    2. private
    3. protected
    4. default(没有使用上述三者之一,就为默认)

1.5复用的具体实现

  1. 组合(composition)
  2. 继承
    优先使用组合

1.6 继承(extends)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HwQt2HLH-1576936805741)(en-resource://database/404:1)]

  • 导出类必须有其特定的实现,否则继承没有意义。有两种方法可以使二者产生差异

    1. 在导出类中添加新方法
    2. 覆盖 (overriding):改变基类现有方法

1.6.1是一个 与 像是一个 关系

  1. 是一个( is-a ): 继承只 覆盖 基类方法。导出类与基类是完全相同的类型,因为他们具有 完全相同 的接口。
  2. 像是一个(is-like-a): 扩展了接口

1.7伴随多态的可互换对象

在处理类型的层次结构时,经常想把一个对象不当作它所属的特定类型来对待,而是将其当作基类的对象来对待。
如此可以写出不依赖特定类型的代码。方法的操作都是 泛化(generic) 的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aJ2gEcHD-1576936805741)(en-resource://database/408:1)]
此为 多态 。面向对象编译器做的是 后期绑定 (即运行时才能确定具体代码的地址),而传统编译器做的是 前期绑定

  • 在 c++中使用 virtual 关键字来实现 动态绑定(后期绑定)。而java中动态绑定是默认行为。
向上转型(upcasting)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-38IYX43o-1576936805742)(en-resource://database/412:1)]

1.8 单根继承结构

在java (事实上还包括除C++外的所有OOP语言),都继承自一个单一基类,其就是 Object
好处:

1. 所有对象都具有一个公用的接口。
2. 单根继承结构保证所有对象都具备某些功能。所有对象都可以容易的再堆上创建,参数传递过程也得到极大简化。
3. 单根继承使得垃圾回收机制实现变得容易的多,而垃圾回收机制正是Java对C++的重要改进之一。

1.9 容器

创建另一种对象类型,这种新的对象类型持有对其他对象的引用。其通常被称为容器(集合)。在任何需要的时候都可以扩充自己以容纳你置于其中的东西。因此不需要知道将来会把多少个对象至于容器中,只需要创建一个容器对象,然后让它处理所有细节。

1.9.1参数化类型

在 JavaSE5 中加入了参数化类型,其被称为泛型。
例:

 ArrayList<Shape> shapes=new ArrayList<Shape>();

ps:在其之前容器中存储的都是通用存储类型Object。这意味着,在取回时得到的是Object类型的引用,为了得到具体类型,就要的 向下转型。这可能是不安全的。

1.10对象的创建和生命期

在使用对象时,关键的问题之一便是他们的生成和销毁方式。每个对象为了生存都需要资源,尤其是内存。当我们不需要某个对象时,它必须清理掉。

对象存放在何处
  1. 堆栈(栈)
    这种方式将存储空间分配和释放置于首要地位。有时利于控制但是牺牲了灵活性,因为必须知道对象确切的数量,生存周期和类型。
  2. 堆(heap)
    这种方式是在被称为堆的内存池中创建对象。这种方式知道运行时才知道要多少对象,它们的生命周期及具体类型。
  • 因为存储空间是在运行时动态管理的,所以需要大量时间在堆中分配存储空间。这远大于在栈中创建存储空间的时间,在栈中存储和释放存储空间分别只需要一条汇编命令即可,分别对应将栈顶指针向下和向上移动。而
    堆依赖于存储机制。

  • Java采用了完全动态内存分配的方式。

  • 在栈上的对象,编译器可以确定的存活时间,并可以自动销毁它。

  • 在堆上的对象,编译器对其生命周期一无所知。

  • Java的垃圾回收器被设计用来处理内存释放问题。这一点得益于 单根继承只能在堆上创建对象

1.11异常处理:处理错误

Java内置了异常处理机制

1.12并发编程

同一时刻处理多个任务。
隐患:资源共享
解决方法:

1.13 Java与Internet

1.13.1 web是什么

客户/服务器模型

核心思想:系统具有一个中央信息存储池(central repository of infomation),用来存储某种数据,它通常存在于数据库中,你可以根据需要将它分发给某些人或机器集群。

  • 服务器:信息存储池,用于分发信息的软件以及信息及软件所驻留的机器被称为服务器。
  • 客户机:获取处理显示这些信息的机器叫做客户机。
  • 事务处理:保证一个客户插入新的数据不会覆盖另一个客户插入的数据,也不会在插入的过程中丢失。
  • 中间件:将负载分散在服务器端的其他机器。(中间件也被用来提高可维护性)

1.14总结

理解OOP,根据需要选择相应的语言。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值