一、ADT概念理解:
1、概念:指一个数学模型及定义在该模型上的一组操作,抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关
2、组成:一个抽象数据类型定义了:一个数据对象、数据对象中各数据元素之间的关系及对数据元素的操作
3、意义:抽象数据类型体现了程序设计中问题分解、抽象和信息隐藏的特性。抽象数据类型把实际生活中的问题分解为多个规模小且容易处理的问题,然后建立一个计算机能处理的数据模型,并把每个功能模块的实现细节作为一个独立的单元,从而使具体实现过程隐藏起来
4、举个例子:
抽象数据类型听着很抽象,实际上很具体。你玩英雄联盟操作的英雄本质上就是一种抽象数据类型(ADT),他的底层是由很多基本数据类型构成的,并且还定义了在数据上的很多操作,比如我们的德玛西亚:他的英雄属性,比如生命值、攻击力、攻击速度,就是很多基本数据类型。 他的操作技能,比如致命打击 (Q)、德玛西亚正义(R)就是数据上的操作。 基本数据组合、数据上的操作,加在一起就成了抽象数据类型;英雄属性、操作技能,加在一起就成了德玛西亚。
二、OOP的概念与标准:
1、概念:面向对象的编程方法/语言应该具有类的概念作为中心概念。语言应该能够为类和它的特征提供断言(即规范:前置条件,后置条件和不变量)和异常处理,依靠工具生成这些断言中的文档,并且可选地在运行时监视它们 时间。
2、核心概念:
①静态类型:一个定义良好的类型系统应该通过强制执行一些类型声明和兼容性规则来保证它接受的系统的运行时类型安全。
②泛型(Genericity):用于“准备改变”和“为/重用设计”:应该可以编写具有表示任意类型的正式泛型参数的类。
③继承(Inheritance):应该可以将一个类定义为从另一个继承,以控制潜在的复杂性。
④多态(Polymorphism):在基于继承的类型系统的控制下,应该可以将实体(表示运行时对象的软件文本中的名称)附加到各种可能类型的运行时对象。
⑤动态分派/绑定(Dynamic dispatch / binding):在一个实体上调用一个特性应该总是触发与所附加的运行时对象的类型相对应的特性,这在调用的不同执行过程中不一定是相同的。
3、编程语言与OOP:
随着软件的进步,人们写的代码越来越多越来越复杂,不得不对语言规范做出更严格的控制,才能让软件规模进一步扩大。这也是自然的过程,现在不管什么日常用品,都要考虑安全性、实用性、美观性,这是发展的趋势。为了增强规范性,增强可读性,还要防止程序员犯错,编程语言做了哪些事呢?举几个例子:
①为加强权限管理,防止手滑修改变量,打造了一系列关键字,包括访问权限控制的public、private等。
②Java和C#等语言,要求几乎所有的代码必须写在class内部,让面向对象更加纯粹。
③继承和多态,为了它打造了一系列配套设施,比如C#至少就有virtual、override、new、protected、abstract、is、as等等有关的关键字。
④static关键字,用于把属性和方法绑定到类本身,而不是对象。
⑤“接口”的概念也和面向对象紧密相关,用它可以实现更灵活、更广泛的多态系统。当然相关的概念也多出来一堆。
三、ADT与OOP的关系:
面向对象程序设计的四大思想:封装、继承、多态、抽象
ADT刚好也体现了封装和抽象两个编程思想。想要实现ADT和具体实现语言无关(不管你用什么语言都可以体现某种编程思想)。因此你问题中“实现了面向对象编程中的封装”这种说法本身就有问题,不能说“实现”某种思想,只能说“体现”。
此外,ADT(抽象数据类型)只是一种数据类型,这种数据类型是一种数学模型和定义在该模型上的一组操作。封装、继承、多态、抽象是面向对象编程所使用的思想,ADT根本不是一门语言,只是一种模型,二者不能相提并论。
————————————————
版权声明:本文为优快云博主「weixin_46013544」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/weixin_46013544/article/details/125353451