软件构造课程面向对象编程学习心得

面向对象的编程


本章纲要是:

面向对象的标准

OOP的基本概念

OOP的主要特性:封装与信息隐藏,继承与重写,多态,子类型,重载,静态与动态分派

Java中一些重要的Object方法

设计良好的类

 

#面向对象的标准

面向对象的编程方法/语言应该具有类的概念作为中心概念。

语言应该能够为类和它的特征提供断言(即规范:前置条件,后置条件和不变量)和异常处理,依靠工具生成这些断言中的文档,并且可选地在运行时监视它们时间。

- 他们帮助生产可靠的软件;

- 他们提供系统文件;

- 它们是测试和调试面向对象软件的核心工具。

静态类型:一个定义良好的类型系统应该通过强制执行一些类型声明和兼容性规则来保证它接受的系统的运行时类型安全。

 

“准备改变”和“为重用设计”的泛型(泛型):应该可以编写具有代表任意类型的正式泛型参数的类。

继承(继承):应该可以将一个类定义为从另一个继承,以控制潜在的复杂性。

多态(Polymorphism):在基于继承的类型系统的控制下,应该可以将实体(表示运行时对象的软件文本中的名称)附加到各种可能类型的运行时对象。

动态分派/绑定:在一个实体上调用一个特性应该总是触发与所附加的运行时对象的类型相对应的特性,这在调用的不同执行过程中不一定是相同的。

 

#基本概念:对象,类,属性和方法

对象:

真实世界的物体有两个特征:它们都有状态和行为。

识别真实世界对象的状态和行为是从OOP开始思考的好方法。

- 狗有状态(名称,颜色,品种,饥饿)和行为(吠叫,取出,摇尾巴)。

- 自行车具有状态(当前档位,当前踏板节奏,当前速度)和行为(更换档位,改变踏板节奏,应用制动器)。

一个对象是一组状态和行为

状态- 包含在对象中的数据。

- 在Java中,这些是对象的字段

行为- 对象支持的操作

- 在Java中,这些被称为方法

- 方法只是面向对象的功能

- 调用一个方法=调用一个函数

类:

每个对象都有一个类

- 一个类定义方法和字段

- 统称为成员的方法和字段

类定义了类型和实现

- 类型≈可以使用对象的位置

- 执行≈对象如何处理事物

松散地说,类的方法是它的应用程序编程接口(API)

- 定义用户如何与实例进行交互

类的举例:


类变量类成员变量:与类关联的变量,而不是类的实例。您还可以将方法与类方法关联。

- 要引用类变量和方法,需要将类的名称和类方法或类变量的名称连同句点('。')一起加入。

不是类方法或类变量的方法和变量称为实例方法实例方法和实例变量实例成员变量。

- 要引用实例方法和变量,必须引用类实例中的方法和变量

Summary:

- 类变量和类方法与类相关联,并且每个类都会出现一次。 使用它们不需要创建对象。

- 实例方法和变量在类的每个实例中出现一次。


静态方法不与任何特定的类实例相关联,而实例方法(不带static关键字声明)必须在特定对象上调用。


 

#接口

–Interface和Class: 定义和实现ADT

– 接口之间可以继承

– 一个类可以实现多个接口

-     一个接口可以有多种实现

接口与类的比较:

接口:确定ADT规约,接口:确定ADT规约

接口的优点

接口指定了客户的合同,仅此而已。

- 接口库是客户程序员需要阅读才能理解ADT的全部内容。

- 客户端不能在ADT的代表上创建无意的依赖关系,因为实例变量根本无法放入接口。

- 实现完全保持完全分离,完全不同。

抽象数据类型的多个不同表示可以在同一个程序中共存,因为不同的类实现了接口。

- 当一个抽象数据类型被表示为一个单独的类时,如果没有接口,就很难拥有多个表示。

接口概述

-编译器和人员的文档

-允许性能权衡

-可选方法

-具有故意欠定规格的方法

-一个班的多个视图

-越来越不值得信赖的实现

接口概述

-避免错误

-ADT由它的操作定义,而接口就是这样做的。

-当客户端使用接口类型时,静态检查确保它们只使用接口定义的方法。

-如果实现类暴露其他方法 - 或更糟糕的是,具有可见的表示 - 客户端不会意外地看到或依赖它们。

-当我们有一个数据类型的多个实现时,接口提供方法签名的静态检查。

容易明白。

- 客户和维护人员确切知道在哪里查找ADT的规范。

- 由于接口不包含实例字段或实例方法的实现,因此更容易将实现的细节保留在规范之外。

准备好改变。

- 我们可以通过添加实现接口的类轻松地添加新类型的实现。

- 如果我们避免使用静态工厂方法的构造函数,客户端将只能看到该接口。

- 这意味着我们可以切换客户端正在使用的实现类,而无需更改其代码。

 

#封装和信息隐藏

信息隐藏

将精心设计的模块与不好的模块区分开来的唯一最重要的因素是其隐藏内部数据和其他模块的其他实施细节的程度。

设计良好的代码隐藏了所有实现细节:

- 将API与实施完全分开

- 模块只通过API进行通信

- 对彼此的内在运作没有意识

被称为信息隐藏或封装,这是软件设计的基本原则。

信息隐藏的好处

去耦合构成系统的类。

- 允许它们独立开发,测试,优化,使用,理解和修改

加速系统开发。

- 类可以并行开发

减轻维护负担。

- 类可以更快速地理解和调试,而不用担心损害其他模块

启用有效的性能调整。

- “热”类可以单独优化

增加软件重用。

- 松散耦合的类通常在其他情况下证明是有用的

信息隐藏接口

使用接口类型声明变量,客户端仅使用接口中定义的方法,客户端代码无法直接访问属性

 

#继承和重写

严格继承:子类只能添加新方法,无法重写超类中的方法。

父类型中的被重写函数体不为空:意味着对其大多数子类型来说,该方法是可以被直接复用的。对某些子类型来说,有特殊性,故重写父类型中的函数,实现自己的特殊要求。

当子类包含一个覆盖超类方法的方法时,它也可以使用关键字super调用超类方法。重写的时候,不要改变原方法的本意。

 

#抽象类

抽象方法和抽象类

抽象方法:

- 具有签名但没有实现的方法(也称为抽象操作)

- 由关键字抽象定义

抽象类:

- 一个包含至少一个抽象方法的类被调用

  抽象类

接口:只有抽象方法的抽象类

- 接口主要用于系统或子系统的规范。 该实现由子类或其他机制提供。

 

#三种多态

三态多态

-特殊多态:当一个函数表示不同的和潜在的异构实现时,取决于单独指定类型和组合的有限范围。 使用函数重载在许多语言中支持特设多态。

-参数化多态:当代码被写入时没有提及任何特定的类型,因此可以透明地使用任何数量的新类型。 在面向对象编程社区中,这通常被称为泛型或泛型编程。

-分类(也称为子类型多态或包含多态子类型多态,包含多态):当一个名称表示许多不同类的实例与某些公共超类相关时。

 

#特殊多态

当函数适用于几种不同的类型(可能不会显示公共结构)并且可能以不相关的方式表现每种类型时,可以获得特殊多态。

 

#重载

重载:多个方法具有同样的名字,但有不同的参数列表或返回值类型

价值:方便client调用,client可用不同的参数列表,调用同样的函数

重载根据参数列表进行最佳匹配,静态类型检查,在编译阶段时决定要具体执行哪个方法。

与之相反,重写则是在run-time进行动态检查!

重载必须有不同的参数列表。

#泛型

参数多态性

当函数在一系列类型上均匀工作时获得参数多态性; 这些类型通常具有一些共同的结构。

- 它能够以通用的方式定义函数和类型,以便它可以在运行时传递参数的基础上工作,即允许在没有完全指定类型的情况下进行静态类型检查。

- 这是Java中所谓的“泛型(泛型)”。

通用编程是一种编程风格,其中数据类型和函数是根据待指定的类型编写的 - 稍后将在需要时作为参数提供的特定类型实例化。

泛型编程围绕从具体,高效的算法中抽象出来以获得可与不同数据表示形式结合的泛型算法来生成各种各样有用软件的想法相关。

一个类型变量是一个不合格的标识符。

- 它们由泛型类声明,泛型接口声明,泛型方法声明和泛型构造函数声明引入。

如果一个类声明了一个或多个类型变量,则它是通用的。:

- 这些类型的变量被称为类的类型参数。

- 它定义了一个或多个作为参数的类型变量。

- 泛型类声明定义了一组参数化类型,每个类型参数部分的每个可能的调用都有一个类型声明。

- 所有这些参数化类型在运行时共享相同的类。

如果接口声明类型变量,则该接口是通用的

- 这些类型变量被称为接口的类型参数。

- 它定义了一个或多个作为参数的类型变量。

- 通用接口声明定义了一组类型,每种类型参数部分的每个可能的调用都有一个类型。

- 所有参数化类型在运行时共享相同的接口。

如果方法声明了类型变量,则该方法是通用的。

- 这些类型的变量被称为方法的形式类型参数。

- 形式类型参数列表的形式与类或接口的类型参数列表相同。

 





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值