Java编程思想笔记-第一章对象导论


前言

计算机革命起源于机器,因此,编程语言的产生也始于对机器的模仿

一、抽象过程

  • 所有的编程语言都提供抽象机制。可以认为,人们所能够解决的问题的复杂性直接取决于抽象的类型和质量。
  • 面向对象方式通过向程序员提供表示问题空间中的元素的工具而更近了一步。这种表示方式非常通用,使得程序员不会受限于任何特定类型的问题。程序可以通过添加新类型的对象使自身适用于某个特定的问题。
  • 1)万物皆为对象。
  • 2)程序是对象的集合,它们通过发送消息来告知彼此所要做的。
  • 3)每个对象都有自己的由其他对象所构成的存储。
  • 4)每个对象都拥有其类型。
  • 5)某一特定类型的所有对象都可以接收同样的消息。
  • 对象具有状态、行为和标识。

二、每个对象都有一个接口

  • 创建抽象数据类型(类)是面向对象程序设计的基本概念之一。
  • 抽象数据类型的运行方式与内置类型几乎完全一致:你可以创建某一类型的变量(按照面向对象的说法,称其为对象或实例),然后操作这些变量(称其为发送消息或请求;发送消息对象就知道要做什么)。
  • 在计算机中被表示成唯一的实体,这些实体就是对象,每一个对象都属于定义了特性和行为的某个特定的类。
  • 当看到类型一词时,可将其作为类来考虑,反之亦然。
  • 类描述了具有相同特性(数据元素)和行为(功能)的对象集合,所以一个类实际上就是一个数据类型。
  • 怎样才能获得有用的对象呢?必须有某种方式产生对对象的请求,使对象完成各种任务,如完成一笔交易、在屏幕上画图、打开开关等等。每个对象都只能满足某些请求,这些请求由对象的接口(interface)所定义,决定接口的便是类型。以灯泡为例做一个比喻:
    Light lt = new Light();
    lt.on();
    在这里插入图片描述

接口确定了对某一特定对象所能发出的请求。但是,在程序中必须有满足这些请求的代码。这些代码与隐藏的数据一起构成了实现。
向某个对象发送消息(产生请求),这个对象便知道此消息的目的,然后执行对应的程序代码。
类型/类的名称是Light,特定了Light对象的名称是lt,可以向Light对象发出的请求是:打开它、关闭它、将它调亮、将它调暗。以下列方式创建了一个Light对象:定义这个对象的“引用”(lt),然后调用new方法来创建该类型的新对象。为了向对象发送消息,需要声明对象的名称,并以圆点符号连接一个消息请求。

—————————————————————————————————————————————— 2021/4/21

三、每个对象都提供服务

  • 程序本身将向用户提供服务,它将通过调用其他对象提供的服务来实现这一目的。你的目标就是去创建能够提供理想的服务来解决问题的一系列对象。

四、被隐藏的具体实现

  • 将程序开发人员按照角色分为类创建者(那些创建新数据类型的程序员)和客户端程序员(那些在其应用中使用数据类型的类消费者)是大有裨益的。
  • 类的部分加以隐藏,客户端程序员将不能够访问它,意味着类创建者可以任意修改被隐藏的部分,而不用担心对其他任何人造成影响。被隐藏的部分通常代表对象内部脆弱的部分,它们很容易被粗心的或不知内情的客户端程序员所毁坏,因此将实现隐藏起来可以减少程序bug。
  • 访问控制的第一个存在原因就是让客户端程序员无法触及他们不应该触及的部分——这部分对数据类型的内部操作来说是必须的,但并不是用户解决特定问题所需的接口的一部分。
  • 访问控制的第二个存在原因就是允许库设计者可以改变类内部的工作方式而不用担心会影响到客户端程序员。
  • Java用三个关键字在类的内部设定边界:public、private、protected。
  • public表示紧随其后的元素对任何人都是可用的,而private这个关键字表示除类型的创建者和类型的内部方法之外的任何人都不能访问的元素。protected关键字与private作用相当,差别仅在于继承的类可以访问protected成员,但是不能访问private成员。
  • Java还有一种默认的访问权限,当没有使用前面提到的任何访问指定词时,它将发挥作用。这种权限通常被称为包访问权限,因为在这种权限下,类可以访问在同一个包(库构件)中的其他类的成员,但是在包之外,这些成员如同指定了private一样。
    —————————————————————————————————————————————— 2021/4/22

五、复用具体实现

  • 一旦类被创建并被测试完,那么它就应该(在理想情况下)代表一个有用的代码单元。
  • 代码复用是面向对象程序设计语言所提供的最了不起的优点之一。
  • 新的类可以由任意数量、任意类型的其他对象以任意可以实现新的类中想要的功能的方式所组成。因为是在使用现有的类合成新的类,所以发这种概念被称为组合(composition),如果组合是动态发生的,那么它通常被称为聚合(aggregation)。
  • 在建立新类是,应该首先考虑组合,因为它更加简单灵活。

六、继承

  • 通过概念将数据和功能封装到一起,因此可以对问题空间的观念给出恰当的表示,而不用受制于必须使用底层机器语言。这些概念用关键字class表示,它们形成了编程语言中的基本单位。
  • 通过继承我们能够以现有的类为基础,复制它,然后通过添加和修改这个副本来创建新类。
  • 当源类(被称为基类、超类或父类)发生变动时,被修改的“副本”(被称为导出类、继承类或子类)也会反映出这些变动。
  • 一个基类型包含其所有导出类型所共享的特性和行为。
  • 创建一个基类型来表示系统中某些对象的核心概念,从基类型中导出其他类型,来表示此核心可以被实现的各种不同方式。
    在这里插入图片描述
  • 导出类与基类具有相同的类型。
  • 两种方法可以使基类与导出类产生差异
    第一种方法非常直接:直接在导出类中添加新方法。
    第二种也是更重要的一种使导出类和基类之间产生差异的方法是改变现有基类的方法的行为,这被称之为覆盖(overriding)那个方法。要想覆盖某个方法,可以直接在导出类中创建该方法的新定义即可。
    —————————————————————————————————————————————— 2021/4/25
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值