3、多态操作—包括重载和真正多态 大多数语言均使用特殊的符号来表示一组不同的操作, 具体操作的选择将依赖于参数的数据类型。此即所谓重 载。如:十可以是整数加、实数加,甚至可用于字符和 字符串操作 重载是一个在语法层次上处理的概念。有编译器处理。 真正的多态通常是语义级别的概念,操作符的具体动作 的确定是在运行时进行。如:函数语言中,类型可以作 为参数带入,从而使函数的动作的选择依据类型实参而 确定。恒等函数就是典型的多态 面向对象的继承机制也提供了所谓的包含多态性,即子 类的对象可用于父类对象出现的地方 4、类型检査——最重要的目标,属语义检查,目标是 排错,分静态或动态类型检查。类型检查提供了很好的 防止错误的机制
3、多态操作——包括重载和真正多态 大多数语言均使用特殊的符号来表示一组不同的操作, 具体操作的选择将依赖于参数的数据类型。此即所谓重 载。如:+可以是整数加、实数加,甚至可用于字符和 字符串操作。 重载是一个在语法层次上处理的概念。有编译器处理。 真正的多态通常是语义级别的概念,操作符的具体动作 的确定是在运行时进行。如:函数语言中,类型可以作 为参数带入,从而使函数的动作的选择依据类型实参而 确定。恒等函数就是典型的多态。 面向对象的继承机制也提供了所谓的包含多态性,即子 类的对象可用于父类对象出现的地方。 4、类型检查——最重要的目标,属语义检查,目标是 排错,分静态或动态类型检查。类型检查提供了很好的 防止错误的机制
类型检查和类型转换 计算机硬件固有的数据存储表示通常不含类型信息、。数据 上的基本原操作也不需类型检查。如一个位串: 111001 0011 可能是整数、实数、字符串、或指令,没有办法来区分, 硬件提供的基本操作(如加法),不能检査其参数是否为 整数,他们仅仅是位串。 汇编语言或机器语言编程中常见的错误源于错误的操作类 型,这种错误难于发现,因为操作并不以明显的方式失败。 操作可进行,但结果没有意义。 有时这种错误可在连续的一串操作后出错,有时程序停 止也不出错。 类型检査:指检査程序中每个操作均接收了正确数目的正 确类型参数,可在运行时完成,即动态类型检査;或编译 时检查,即静态类型检査
类型检查和类型转换 计算机硬件固有的数据存储表示通常不含类型信息。数据 上的基本原操作也不需类型检查。如一个位串: 111001……0011 可能是整数、实数、字符串、或指令,没有办法来区分。 硬件提供的基本操作(如加法),不能检查其参数是否为 整数,他们仅仅是位串。 汇编语言或机器语言编程中常见的错误源于错误的操作类 型,这种错误难于发现,因为操作并不以明显的方式失败。 操作可进行,但结果没有意义。 有时这种错误可在连续的一串操作后出错,有时程序停 止也不出错。 类型检查:指检查程序中每个操作均接收了正确数目的正 确类型参数,可在运行时完成,即动态类型检查;或编译 时检查,即静态类型检查
高级语言的主要优点之一:可提供对所有(或几乎所有) 操作的类型检查。 动态类型检查:需类型标志,不需对变量声明(即变量是 无类型的)。 优点:编程的灵活性。程序员不需考虑类型问题,具有 较高灵活性。 缺点: 程序难于调试,不能完全消去所有参数类型错误。 程序测试不可能检测所有的路径。 需要在执行过程中保持类型信息,需存储空间 动态检查需以软件实现,有时间花销
高级语言的主要优点之一:可提供对所有(或几乎所有) 操作的类型检查。 动态类型检查:需类型标志,不需对变量声明(即变量是 无类型的)。 优点:编程的灵活性。程序员不需考虑类型问题,具有 较高灵活性。 缺点: 程序难于调试,不能完全消去所有参数类型错误。 程序测试不可能检测所有的路径。 需要在执行过程中保持类型信息,需存储空间。 动态检查需以软件实现,有时间花销
静态类型检查:需要的信息通常由程序员在声明中及在其他 语言结构中提供。需要: 1、对每个操作,其参数的数量、顺序、类型及结果类型 2、对每个变量,被关联的命名数据对象的类型 每个常量数据对象的类型 编译器在翻译的早期阶段收集声明中的类型信息,以后将用 于类型检查。 静态检查将针对程序中的所有操作进行,所有可能的执行路 径均被检査。因此,关于类型错误的进一步测试是不需要的, 因而不需类型标记和运行时类型检查。 静态检査涉及语言的多个方面:声明、数据控制结构、分别 编译等。 在多数语言中,对某些语言结构的静态检査在某种情况下是 不可能的。解决方案: 采用动态类型检查或不检查
静态类型检查:需要的信息通常由程序员在声明中及在其他 语言结构中提供。需要: 1、对每个操作,其参数的数量、顺序、类型及结果类型。 2、对每个变量,被关联的命名数据对象的类型。 3、每个常量数据对象的类型。 编译器在翻译的早期阶段收集声明中的类型信息,以后将用 于类型检查。 静态检查将针对程序中的所有操作进行,所有可能的执行路 径均被检查。因此,关于类型错误的进一步测试是不需要的, 因而不需类型标记和运行时类型检查。 静态检查涉及语言的多个方面:声明、数据控制结构、分别 编译等。 在多数语言中,对某些语言结构的静态检查在某种情况下是 不可能的。解决方案: 采用动态类型检查或不检查
强类型 如果我们可以静态地检测程序中的所有类型错误,则称 语言是强赋类型的 通常类型为程序提供了一个安全层次 个函数fS→R称为类型安全的,如果执行不会 产生R以外的值。 类型安全的操作均不需动态检查 很少有语言是真正强类型的。 类型推导 如果解释不会出现二义性,则类型声明可以省去。可由 语言实现推导出失去的类型信息
•强类型 如果我们可以静态地检测程序中的所有类型错误,则称 语言是强赋类型的。 通常类型为程序提供了一个安全层次。 一个函数f: S→R称为类型安全的,如果f的执行不会 产生R以外的值。 类型安全的操作均不需动态检查。 很少有语言是真正强类型的。 •类型推导 如果解释不会出现二义性,则类型声明可以省去。可由 语言实现推导出失去的类型信息