精华内容
下载资源
问答
  • 抽象数据类型

    千次阅读 2016-09-28 16:42:34
    数据类型(data type)是一个值的集合和定义在这值集上的组操作的总称。 原子类型:如C/C++语言的整形、字符型等标准类型及指针等简单的导出类型和空类型结构类型:其值是由若干成分按某种结构组成的,因此是...

    抽象数据类型

    1.首先回顾一下程序设计语言中的数据类型

    数据类型(data type)是一个值的集合和定义在这个值集上的一组操作的总称。

    • 原子类型:如C/C++语言的整形、字符型等标准类型及指针等简单的导出类型和空类型。
    • 结构类型:其值是由若干成分按某种结构组成的,因此是可以分解的,并且它的成分可以是非结构的,也可以是结构的,通常是由标准类型派生的。例如,C/C++中的数组、结构等类型。

    2.抽象数据类型(abstract data type, ADT)是指一个数学模型以及定义在该模型上的一组操作。它通常是指对数据的某种抽象,定义了数据的取值范围及其结构形式,以及对数据的操作的集合。

    “抽象”的意义在于数据类型的数学抽象特性。

    3.抽象数据类型的描述方法

    (D,S,P)

    D是数据对象,S是D上的关系集,P是对D的基本操作集。

    4.抽象数据类型一般可以由数据对象、数据关系及基本操作来定义。

    ADT  抽象数据类型

    {

        数据对象(数据对象的定义)

        数据关系(数据关系的定义)

        基本操作(基本操作的定义)

    }ADT 抽象数据类型名

    其中,数据对象和数据关系的定义用集合描述,基本操作的定义格式为

        返回类型 基本操作名(参数表)

    5.对于每个操作,包含下列5个基本要素:

    • 输入
    • 前置条件
    • 过程
    • 输出
    • 后置条件
    6.基本操作有两种参数:赋值参数只为操作提供输出值;引用参数以&开头,除可提供输出值外,还将返回操作结果。

    7.面向对象的程序设计(OPP)方法。

       在面向对象程序设计语言中,借助对象描述抽象数据类型,存储结构的说明和操作函数的说明被封装在一个整体结构中,这个整体结构称为类(class),属于某个类的具体变量称为对象(object)。

    8.数据结构的定义为对象的属性域,过程或函数定义在对象中称为方法(method)。

    9.ADT和类的概念实际上反映了程序或软件设计的两层抽象:ADT相当于是在概念层(抽象层)上描述问题,而类相当于是在实现层上描述问题。

    抽象数据类型与C++中类的对应关系如下:

                             抽象数据类型——类

                             数据对象——数据成员(属性)

                             基本操作——成员函数(方法)

    10.在C++中,类的成分(数据成员和成员函数)可以有3种访问级别。

    • private: 只允许类的成员函数进行访问。
    • protected:只允许类的成员函数及其子孙类进行访问。
    • public:允许类的成员函数、类的实例及其子孙类、子孙类的实例进行访问。

    展开全文
  • 数据抽象三种抽象 视图抽象: 把现实世界中的信息按照不同用户的观点抽象为多逻辑数据结构。 每逻辑数据结构称为一个视图,描述了某些图特定用户所关心的数据。 所有视图的集合形成了数据库的外模式。 概念...

    数据抽象

    三种抽象

    • 视图抽象:
      把现实世界中的信息按照不同用户的观点抽象为多个逻辑数据结构。
      每个逻辑数据结构称为一个视图,描述了某些图特定用户所关心的数据。
      所有视图的集合形成了数据库的外模式。
      这里写图片描述
    • 概念抽象
      把数据库的外模式抽象为数据库的概念模式。
      数据库的概念模式综合了外模式中所有视图,反映了所有数据库用户所关心的现实世界的抽象,形成了数据库的整体逻辑结构。
      这里写图片描述
    • 物理抽象
      把数据库的概念模式进一步抽象成为数据库的内模式。
      数据库的内模式抽象地描述了概念数据库如何在物理存储设备上存储。
      这里写图片描述

    这里写图片描述

    两种数据独立性

    • 物理数据独立性
      由内模式与概念模式之间的映射实现。
      物理数据独立性是指当数据库的内模式发生改变时,数据的逻辑结构不变,从而用户编写的应用程序可以不变。
    • 逻辑数据独立性
      由概念模式与外模式之间的映射实现。
      逻辑数据独立性是指当概念数据库模式发生改变时,数据库的外模式不变,从而建立在外模式上的应用程序不需要修改。

    数据库系统结构图

    这里写图片描述

    展开全文
  • Python实现抽象基类的3三种方法

    千次阅读 2017-10-28 12:11:33
    Python实现抽象基类的3三种方法

    Python的抽象基类类似于Java、C++等面向对象语言中的接口的概念。抽象基类提供了一种要求子类实现指定协议的方式,如果一个抽象基类要求实现指定的方法,而子类没有实现的话,当试图创建子类或者执行子类代码时会抛出异常。这里简单介绍一下Python实现抽象基类的三种方法。


    方法一:使用NotImplementedError

    见下面的测试代码,只有子类实现了run方法才能运行run。

    >>> class Task():
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
    >>> class Task():
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
        def run(self):
            raise NotImplementedError('Please define "a run method"')
    
    >>> t = Task(1, 2)
    >>> t.run()
    Traceback (most recent call last):
      File "<pyshell#12>", line 1, in <module>
        t.run()
      File "<pyshell#10>", line 6, in run
        raise NotImplementedError('Please define "a run method"')
    NotImplementedError: Please define "a run method"
    >>>
    >>> class SubTask(Task):
        def __init__(self, x, y):
            super().__init__(x, y)
    
        def run(self):
            print('Task(x=%s, y=%s)' % (self.x, self.y))
    
    >>> st = SubTask(1, 3)
    >>> st.run()
    Task(x=1, y=3)
    >>> 


    方法二:使用元类

    class TaskMeta(type):
        def __new__(cls, name, bases, attrs):
    
            new_class = super(TaskMeta, cls).__new__(cls, name, bases, attrs)
    
            if attrs.pop('abstract', False):
                return new_class
    
            if not hasattr(new_class, 'run') or not callable(new_class.run):
                raise TypeError('Please define "a run method"')
    
            return new_class
    
    
    class Task(metaclass=TaskMeta):
        abstract = True
    
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
    
    class SubTask(Task):
        def __init__(self, x, y):
            super().__init__(x, y)
    
        def run(self):
            print('Task(x=%s, y=%s)' % (self.x, self.y))

    测试代码一:

    >>> t = Task(1, 3)
    >>> t.run()
    Traceback (most recent call last):
      File "E:/Code/python3/loggingTest/task.py", line 32, in <module>
        t.run()
    AttributeError: 'Task' object has no attribute 'run'
    >>> st = SubTask(1, 3)
    >>> st.run()
    Task(x=1, y=3)


    这个示例类似于方法一,但有一些细微的区别。第一个区别就是Task类本身仍然能被实例化,但是不能运行run方法,否则会抛出AttributeError错误。更为重要的区别在于子类。当子类被创建时元类会运行__new__方法,解释器讲不再允许创建没有run方法的子类。

    >>> class SubTask(Task):
    ...    pass
    ...
    Traceback (most recent call last):
      File "E:/Code/python3/loggingTest/task.py", line 31, in <module>
        class SubTask(Task):
      File "E:/Code/python3/loggingTest/task.py", line 10, in __new__
        raise TypeError('Please define "a run method"')
    TypeError: Please define "a run method"


    方法三:使用@abstractmethod

      abc模块提供了一个使用某个抽象基类声明协议的机制,并且子类一定要提供了一个符合该协议的实现。

    import abc
    
    
    class Task(metaclass = abc.ABCMeta):
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
        @abc.abstractmethod
        def run(self):
            pass
    
    
    class SubTask(Task):
        def __init(self, x, y):
            super().__init__(x, y)
    
        def run(self):
            print('Task(x=%s, y=%s)' % (self.x, self.y))
    
    class OtherSubTask(Task):
        def __init(self, x, y):
            super().__init__(x, y)

    和方法一、方法二的示例类似,但略有不同。第一,Task类本身不能被实例化。

    >>> t = Task(1, 3)
    Traceback (most recent call last):
      File "E:/Code/python3/loggingTest/test.py", line 23, in <module>
        t = Task(1, 3)
    TypeError: Can't instantiate abstract class Task with abstract methods run


    这与方法一不同,方法一允许基类Task被实例化。

    对于不能正确重写run方法的子类,在错误的情况下它与之前的两个方法的差别也是不同的。方法一中,使用NotImplementedError,最终在run方法被调用时引发NotImplementedError错误。在方法二中,使用了自定义的TaskMeta元类, 当这个抽象类被创建时引发TypeError错误。

    当没有实现run方法的子类实例化时会报错,给出的错误信息与实例化Task类时给出的一样,逻辑上完全符合预期。

    >>> ot = OtherSubTask(1, 3)
    Traceback (most recent call last):
      File "E:/Code/python3/loggingTest/test.py", line 27, in <module>
        ot = OtherSubTask(1, 3)
    TypeError: Can't instantiate abstract class OtherSubTask with abstract methods run
    但是,当你定义了一个重新了run方法的子类时,那么子类就能够被实例化,就能正常工作。

    >>> st = SubTask(1, 3)
    >>> st.run()
    Task(x=1, y=3)



    展开全文
  • 数据类型: 是一个值的集合和定义在此集合上组操作的总称。 数据类型有两:简单型和结构类型。...抽象数据类型(Abstract Datat Type, ADT): 是一个数学模型和定义在此数学模型上组操作。 ...

    数据类型: 是一个值的集合和定义在此集合上一组操作的总称。
    数据类型有两种:简单型结构类型
    对于结构类型,比如数组,它的值是可以分割的,它是某个结构的值,因此数组这个数据类型的子集是一个数据结构。所以数据类型也可以看做是一个数据结构和定义在这个数据结构上一组操作的总称。

    抽象数据类型(Abstract Datat Type, ADT): 是一个数学模型和定义在此数学模型上一组操作。
    在数据结构中,这个数学模型指的就是数据结构。因此在数据结构中,讨论的抽象数据类型是:一个数据结构和定义在这个数据结构上的一组操作
    因为ADT有两个重要特征,所以从抽象数据类型这个角度讨论数据结构有很多好处。
    【ADT的两个重要特征】
    1.数据抽象
    数据的抽象性指的是:用ADT描述程序处理的实体时,强调的是其本质的特征、其所能完成的功能以及它和外部用户的接口(即外界使用它的方法)。
    强调的是本质特征,自然会忽略掉无关紧要的属性;描述的是外部使用的接口,能保证外部用户正确地使用它们。
    例如: 抽象复数的数据类型
    复数类型在高级语言里不能直接进行加减,为了使外部用户能够直接使用它,这时就可以定义抽象数据类型复数。
    抽象数据类型复数的定义:

    ADT Complex{
    数据对象:
        D={e1,e2 | e1,e2∈RealSet}
        
    数据关系:
        R1={<e1,e2> | e1是复数的实数部分,e2是复数的虚数部分}
        
    基本操作:
        InitComplex(&Z,v1,v2)   //初始化一个复数
        操作结果:构造复数Z,其实部和虚部分别被赋以参数v1和v2值。
        DestroyComplex(&Z)     //销毁一个复数
        操作结果:复数Z被销毁。
        GetReal(Z,&realPart)   //取复数的实部
        初始条件:复数已存在。
        操作结果:用realPart返回复数Z的实部值。
        GetImageNet(Z,&imagPart)   //取复数的虚部
        初始条件:复数已存在。
        操作结果:用imagPart返回复数Z的虚部值。
        Add(z1,z2,&sum)   // 两个复数相加
        初始条件:z1,z2是复数。
        操作结果:用sum返回两个复数z1,z2的和值。
    }ADT Complex
    

    外部用户对复数操作的时候,只需要简单地调用相加的函数就能实现,这样就实现了抽象数据类型的抽象性。
    2.数据封装
    数据的封装性指的是:将实体的外部特性和其内部实现的细节分离,并且对外部用户隐藏其内部实现细节。
    例如:对于刚才的抽象数据类型复数,外部用户想要实现两个复数的相加,只需要调用相加的函数就可以了,不需要关心复数在计算机内部是怎么表示的。

    抽象数据类型的描述方法: 抽象数据类型可用(D, S, P)三元组表示,其中,D是数据对象,即具有相同特性的数据元素的集合,S是D上的关系集,P是对D的基本操作集。
    说明: D+S实际上就是数据结构,P就是定义在这个数据结构上的操作集。当在讨论数据结构的时候,都是从抽象数据类型出发的,也就是说数据结构和它的操作集是一个整体。

    抽象数据类型的表示方法: 抽象数据类型通过已有的数据类型来实现。

    展开全文
  • 如何理解数据结构中的抽象数据类型

    万次阅读 多人点赞 2018-09-04 18:49:23
    抽象数据类型(Abstract Data Type,ADT)是指一个数学模型以及定义在这模型上的组操作。 抽象数据类型的定义仅仅取决于它的组逻辑特性,而与它在计算机中的表示和实现无关。 例如,int类型的数据表示的.....
  • 数据库系统的个主要目的是给用户提供数据的抽象视图,也就是说,隐藏关于数据存储和维护的某些细节。数据库系统的数据抽象可以分为物理层、逻辑层、视图层三个层次。
  • 数据结构、数据类型抽象数据类型之间的区别

    千次阅读 多人点赞 2019-11-03 20:15:37
    数据结构:是相互之间存在一种或多种特定关系的数据元素的集合,包括逻辑结构和物理结构。(数据元素是最基本的数据单位,最基本的数据元素是一二进制位。) 逻辑结构指反映数据元素之间的逻辑关系的数据结构,...
  • 数据结构-抽象数据类型

    千次阅读 2017-12-19 14:19:27
    抽象数据类型的定义可以由一种数据结构和定义在其上的一组操作组成,数据结构又包括数据元素以及元素之间的关系。因此抽象数据元素类型一般由元素、关系及操作种元素来定义。(D,R,P) D 是数据对象、R是D上的...
  • 它是数据的一种属性。这个属性限定了该数据的变化范围。数据类型仅局限于计算机中定义并实现了的数据类型。 数据结构:指的是数据之间的相互关系。主要体现在三个方面:1.数据间的逻辑结构,及数据元素之间的关系...
  • 工厂兄弟之抽象工厂模式(

    万次阅读 多人点赞 2013-07-13 16:40:12
    3 抽象工厂模式概述 抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品。抽象工厂模式定义如下: 抽象工厂模式(Abstract ...
  • 抽象”是一种存在思想逻辑中的概念,而“具体”是一种可见可触摸的现实对象。简单说,比如“人”比“男人”抽象一点,“动物”又比“人”更抽象一点,而“生物”又比“动物”更抽象抽象的概念是由具体概念依...
  • 服务的三种类型

    千次阅读 2019-08-04 20:29:07
    一般认为服务有以下三种主要的表现类型: 1. 工具服务 工具服务(Utility Service)代表可重用服务,区别业务模型。作为应用程序与技术基础设施之间的交叉点,工具服务的特点是业务领域无关,本质是面向技术、具备...
  • 、逻辑结构类型集合:数据元素间仅同属一个集合,无其他关系。线性结构:1:1关系,开始和终端节点都是唯一的,除了开始节点和终端节点以外,其余节点都有且仅有一个前驱节点,有且仅有一个后继节点。树形结构:1:n...
  • 抽象数据类型定义(ADT)

    千次阅读 2014-08-14 13:33:48
    抽象数据类型定义(ADT) 作用:抽象数据类型可以使我们更容易描述现实世界。...例:线性表这样的抽象数据类型,其数学模型是:数据元素的集合,该集合内的元素有这样的关系:除第一个和最后
  • 工厂兄弟之抽象工厂模式(

    万次阅读 多人点赞 2013-07-13 16:17:57
    此时,我们可以考虑将一些相关的产品组成一个“产品族”,由同一个工厂来统一生产,这就是我们本文将要学习的抽象工厂模式的基本思想。1 界面皮肤库的初始设计 Sunny软件公司欲开发一套界面皮肤库,可以对Java桌面
  • /*3、设计一vehicle交通工具抽象类,提供抽象方法--驾驶drive  Car汽车作为交通工具的一种,实现了驾驶的方法(在马路上驾驶)  Train火车作为交通工具的一种,实现了驾驶的方法(在铁路上驾驶)  Airplane飞机...
  • Java抽象类与oop大特征

    万次阅读 2018-05-27 10:00:37
    抽象方法是一种特殊的方法:它 只有声明,而没有具体的实现 。抽象方法的声明格式为:abstract void fun();抽象方法 必须用 abstract关键字进行修饰 。如果一类含有抽象方法,则称这类为抽象类,抽象类必须在类...
  • (1)使用继承机制,分别设计实现抽象基类图形类,派生类圆形类、正方形类、长方形类,要求: ①抽象图形类中有属性画笔颜色、图形是否填充,有方法获取图形面积、获取...①画一个红色、无填充、长和宽分别为10.0与...
  • 数据结构、数据类型抽象数据类型,这三个术语在字面上既不同又相近,反映出它们在含义上既有区别又有联系。 数据结构是在整个计算机科学与技术领域上广泛被使用的术语。它用来反映个数据的内部构成,即个数据...
  • C++ 抽象工厂模式

    万次阅读 多人点赞 2017-04-24 19:45:02
    抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一接口,使客户端在不必指定产品的具体的情况下,创建多产品族中的产品对象。 简述 模式结构 优缺点 适用场景 案例...
  • Java抽象类 详解

    万次阅读 多人点赞 2016-10-05 00:06:35
    抽象类的基本概念普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法、普通方法、static方法、常量和变量等内容。而抽象类是指在普通类的结构里面增加抽象方法的组成部分。...
  • java设计模式,工厂模式、简单工程、工厂方法、抽象工厂
  • C#之十九 抽象工厂模式

    千次阅读 2016-06-01 20:26:28
    如何绕过常规的对象的创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合?这就是我们要说的抽象工厂模式。   重点: Ø 抽象工厂模式概念 Ø 抽象工厂模式的...
  • 抽象类”到底抽不抽象?实例对比看便知!

    千次阅读 多人点赞 2020-06-14 22:06:07
    目录 什么是抽象类? 如何定义抽象类? 什么是抽象方法? ...如何定义抽象方法?...抽象类和抽象方法的实现 ...其实在进行开发时,我们可以假定抽象类是一种对内容的约束,打比方来说,平行四边形类应该具有的特征和.
  • java:抽象的两实现方式(抽象类和接口)及其比较

    千次阅读 多人点赞 2018-02-23 20:57:38
    对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现面向对象的编程(OOP)的抽象...抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为: abstract v...
  • 【任务2】下面给出了基类Animal和main()函数。 (任务2.1)根据main()函数给出的注释提示,设计出相关的各个类。 (任务2.2)显然,Animal设计为抽象类更合适,Animal不需要...(任务2.3)每一个Animal的派生类都有
  • 块存储和文件存储是我们比较熟悉的两种主流的存储类型,而对象存储(Object-based Storage)是一种新的网络存储架构,基于对象存储技术的设备就是对象存储设备(Object-based Storage Device)简称OSD。  首先...
  • 设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类、长方形类、正方形类、三角形类来继承图形类,并实现上述两方法 设计抽象类 就要使用abstract关键字,抽象类中的抽象方法要...
  • Java 抽象类和接口,看这篇就够了

    千次阅读 2018-12-21 08:32:57
    尽管接口使得抽象更进一步,但任何抽象性都应该根据真正的需求而产生,因此恰当的原则是优先选择类而不是接口,只有在真正需要接口的时候再重构代码。
  • JavaScript是一种动态类型的脚本语言

    千次阅读 2018-11-25 04:16:01
    JavaScript是一种动态类型的脚本语言;在1995年时,由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 717,045
精华内容 286,818
关键字:

一种抽象类型包括那三个