Главная страница
Навигация по странице:

  • Структурные

  • Модификаторы компонентов

  • Структуры данных и эффективность алгоритмов. 4


    Скачать 2.32 Mb.
    НазваниеСтруктуры данных и эффективность алгоритмов. 4
    Анкорlekt1_sd4_1.doc
    Дата28.07.2018
    Размер2.32 Mb.
    Формат файлаdoc
    Имя файлаlekt1_sd4_1.doc
    ТипДокументы
    #22130
    страница9 из 15
    1   ...   5   6   7   8   9   10   11   12   ...   15

    Типы данных и структуры данных.


    Тип данных определяется парой:

    • Множество возможных значений.

    • Набор операций с такими значениями.

    Семейство типов данных обычно задается парой:

    • Набор базовых типов.

    • Набор операций конструирования новых типов на основе базовых и ранее сконструированных.

    В (процедурных) языках программирования в состав базовых типов данных обычно входят: числовые (целые и вещественные), символьный и логический типы данных, а также указательный тип данных, который имеет особый статус в наборе базовых. Базовые типы – предопределенные. В частности для них предопределены основные операции, в число которых обычно входят:

    • операции, возвращающие значения этого типа;

    • операции сравнения на равенство, возвращающие значение логического типа;

    • операции сравнения на меньше-больше, если на множестве значений соответствующего базового типа предопределено отношение порядка.

    В состав операций конструирования новых типов данных входят конструкторы типов (описатели типов) обычно следующих видов: массивов, записей (структур), а также (последовательных) файлов, у которых в различных (процедурных) языках программирования может быть специфически различный статус. Конструкторы типов занимают фундаментальное положение в языках программирования, они являются базовой основой для создания (конструирования) сложных структур данных13.

    Структурные (составные) типы данных – это типы данных, определенные с помощью набора операций конструирования, значениями которых являются наборы данных, связанных в соответствии со способом конструирования (группировки). Значения структурных типов состоят из компонентов (ранее определенных типов), поэтому для таких типов данных особый статус имеют предопределенные операции:

    • Селекторы компонентов, извлечение компонента по индексам – для массивов, по имени поля – для записей (структур), извлечение текущего компонента (с перемещением к следующему) – для последовательных файлов.

    • Модификаторы компонентов, позволяющие изменять значение компонентов. Реально в процедурных языках программирования модификаторы компонентов обычно не отличаются по синтаксису от селекторов (переменной с индексами, выборки поля), просто соответствующая языковая конструкция трактуется в правой части присваивания как селектор, а в левой – как модификатор. Но, например, для файлов – ситуация иная, операторы добавления компонентов синтаксически обычно отличаются от операторов чтения-извлечения компонентов.

    Как ранее уже отмечалось, структура данных - это набор данных, связанных специальным образом. С определенной точки зрения «структуры данных» можно трактовать как значения структурных типов, хотя с близкой несколько иной точки зрения, возможно правильнее, трактовать как хранилища данных (переменные) структурного типа. Хотя понятие «структура данных» (прежде всего) означает определенный способ организации взаимосвязей между компонентами (и способ представления этих взаимосвязей), но по существу подразумевает и набор операций для работы с ее компонентами.

    Новый этап в развитии понятия «тип данных» связан со становлением и утверждением в методологии и практике программирования понятий «абстрактный тип данных» и «объекты и классы». И в теории и в методологии программирования ещё много злободневных вопросов по этим понятиям, но в практике разработки программного обеспечения и собственно программирования эти понятия уже занимают значимое положение.
    1. Абстрактные типы данных.


    Абстрактным принято называть тип данных, в явном виде не имеющийся в языке программирования, в этом смысле это понятие относительное - тип данных, отсутствующий в одном языке программирования, может присутствовать в другом.

    Абстрактный тип данных (АТД) определяется независимо от способа его реализации:

    • множеством возможных значений этого типа,

    • и набором операций со значениями этого типа.

    Использование АТД может быть ограничено этапом разработки программного обеспечения, но для его явного использования в программе надо иметь его реализацию на основе уже имеющихся (и ранее реализованных) типов данных в языке программирования:

    АТД не является предопределенным в языке программирования, и даже более того – операции конструирования таких типов, предопределенные в языке, перекладывают на разработчика-программиста вопрос о способе представления значений такого типа и реализации операций со значениями этого типа. А потому, для таких типов данных вопрос о выборе определений и способов реализации операций вида конструктор (значений и хранилищ данных) такого типа, селектор и модификатор компонентов (значений и хранилищ данных) такого типа возлагается на разработчика-программиста.

    В концепции АТД особый статус имеют понятия интерфейс, открытый пользователю, и реализация, скрытая от него. Особая роль этих понятий в концепции АТД связана с основополагающим положением о независимости понятия АТД от способа его реализации.

    В современных «практических языках программирования» для конструирования АТД обычно используется предопределенная операция конструирования типов class, которая дает разработчику-программисту не только средства группировки данных и операций (с этими данными) в единое целое, но и средства инкапсуляции, наследования и полиморфизма для управления способами конструирования и доступа к таким данным. Отметим, что класс описывает одну возможную реализацию АТД, отображение класса в АТД выражается функцией абстракции, но обратное отношение, обычно, не является функциональным, реализаций одного и того же АТД может быть несколько.

    В исследованиях по абстрактным типам данных уже на раннем этапе была осознана важная роль понятия «параметризация типа». Действительно, например АТД «Стек» не зависит от типа элементов стека, но реализовать этот АТД указанием на «элементы какого-то одинакового типа» невозможно. В язык программирования Ada соответствующие средства конструирования параметризованных типов данных были включены изначально, а в современных «практических языках программирования» какие средства появились только со времен появления разработки по STL-библиотеке [9]. На сегодня понятие «обобщенное программирование» занимает значимое положение в практическом программировании благодаря включению в «практические языки программирования» средств конструирования параметризованных типов данных (шаблоны, template, generic).

    Всё вышесказанное означает, что с методологической и теоретической точки зрения необходимо более детальное точное определение понятия «абстрактный тип данных». В теории понятие «абстрактный тип данных» обычно определяется как многосортная (многоосновная) алгебраическая система, в которой дополнительно к множеству возможных значений (носителю) и набору операций над такими значениями выделены понятия:

    • Сорт и сигнатура – эти понятия позволяют расклассифицировать и элементы носителя и операции с ними по их типам (для операций - по типам их аргументов и возвращаемого значения).

    • Предикаты – отношения на элементах носителя. Это позволяет определять область возможных значений наложением ограничений (требований) на допустимые значения, а также в естественной трактовке работать с произвольными логическими выражениями, не принуждая интерпретировать их как функции принадлежности для множеств или как многозначные операции.

    На такой основе можно рассматривать абстрактные типы данных с единой целостной логико-алгебраической точки зрения, включая вопросы о конструкторах (типов и значений), селекторах и модификаторах свойств для объектов такого типа [10; 11; 12].

    Понятия «структура данных» и «абстрактный тип данных» в чем-то очень близкие. Можно конечно считать, что эти понятия - просто два взгляда на одно и то же. Способ представления значений АТД всегда основан на некоторой структуре данных, менее или более сложной, и реализация операций с такими значениями естественно зависит от этой выбранной структуры данных. С другой стороны, заинтересовавшую нас структуру данных при большом желании мы всегда можем оформить как АТД.

    Но все же мы будем различать эти два понятия, учитывая:

    • Абстрактный тип данных - подразумевает определенный уровень абстрагирования с целью фиксации прикладного (предметно-ориентированного) типа данных безотносительно к способам его реализации, и возможно включения этого типа данных в прикладную библиотеку, ну хотя бы для конкретной разработки конкретной программной системы. АТД может иметь несколько альтернативных реализаций, основанных на различных структурах данных.

    • Структура данных - скорее некоторая схема организации данных и управления ими, которая предполагает соответствующие конкретизации при ее использовании в конкретных ситуациях при решении конкретных задач.

    К абстрактным типам данных прежде всего естественно относятся математические базовые алгебраические системы – последовательности, множества, отношения и отображения (функциональные отношения, функции) [11; 12]. Но в программировании на переднем плане не исследование общих свойств этих математических понятий, а возможности их использования в разработке моделей решения задач предметной области, алгоритмов решения этих задач и эффективной реализации разработанных алгоритмов. А потому в программировании в виде АТД обычно оформляются с одной стороны ограниченные варианты этих базовых алгебраических систем, а с другой стороны расширенные специализированными наборами операций, представляющими прагматический интерес с точки зрения области применения.

      1. 1   ...   5   6   7   8   9   10   11   12   ...   15


    написать администратору сайта