КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Абстрактные структуры данных
В современных языках программирования структурам данных уделяется особое внимание (вследствие усложнения решаемых задач). Появляются дополнительные конструктивные элементы (модули, объекты). Возможность использования сложных структур данных позволяет максимально точно описывать реальные объекты внешнего мира и решать сложные задачи. С другой стороны, применение сложных структур данных усложняет отладку и является источником дополнительных ошибок. В качестве решения этих проблем был предложен принцип информационной локализованности. Идея принципа: сложная структура данных локализуется в одном модуле и становится невидимой для других модулей, использующих её, т.е. сложная структура данных перестаёт быть глобальной. Этот принцип нашёл своё воплощение в модулях и объектах. Появление модулей можно рассматривать как технологическое усовершенствование языков программирования, появление объектов – как революционное усовершенствование. Например, модуль как абстрактная структура данных на метаязыке может быть описан так: Имя_модуля: module Описание внутренней структуры данных Fcn1: function Begin … end; fcn2: function Begin … end; … end; Такое описание модуля позволяет рассматривать его в качестве абстрактной структуры данных, если все обращения к внутренней структуре данных осуществляются только через вызовы функций (процедур) модуля. Абстрактная структура данных абстрактна в том смысле, что она не привязана к машинному представлению данных. Работа со структурой данных абстрагирована от деталей её внутренней реализации.
Внутренняя структура данных может быть изменена произвольным образом, и это никак не скажется на использовании модуля, если не изменены спецификации абстрактных операций. Описание модуля: Unit Имя_модуля; Interface Описание видимых элементов Видимая часть (1) Implementation Описание невидимых элементов Begin Невидимая часть (2) Инициализация End. Модуль рассматривается как отдельно компилируемая программная единица; он является хранилищем описаний различных элементов программы: процедур, функций, переменных, констант, типов и т.д. Пример: Два модуля с одинаковым интерфейсом:
1. Unit Stack; interface type NameStr=string[15]; Procedure Push(NM:NameStr; M:integer); Procedure Pop(Var NM:NameStr; Var M:integer); Function Empty: Boolean; Implementation {Описываем внутреннюю изолированную структуру данных} Const StackSize=100; Type Student=record Name: NameStr; Mark: integer; End; Var List: array[1..StackSize]of Student; SP: integer; Procedure Push; {добвление} Begin If SP>StackSize then Exit; List[SP].Name:=NM; List[SP].Mark:=M; SP:=SP+1; End; Function Empty; {проверка пустоты стека} Begin If SP=1 then Empty:=true Else Empty:=false End; Procedure Pop; {извлечение} Begin If Empty then Exit; SP:=SP-1; NM:=List[SP].Name; M:=List[SP].Mark; End; {инициализация} begin SP:=1 End. 2. Unit Stack; interface type NameStr=string[15]; Procedure Push(NM:NameStr; M:integer); Procedure Pop(Var NM:NameStr; Var M:integer); Function Empty: Boolean; Implementation Type Link=^Student Student=record Name: NameStr; Mark: integer; Next: Link End; Var First: Link; A: Link; Procedure Push; {добавление элемента} Begin New(A); {создание динамической переменной} {запись формальных параметров процедуры во внутреннюю структуру} A^.Name:=NM; A^.Mark:=M; A^.Next:=First; First:=A End; Function Empty: Boolean; Begin If First=nil then Empty:=true Else Eempty:=false End; Procedure Pop; {извлечение элемента} Begin If Empty then Eexit; A:=First; First:=First^.Next; NM:=A^.Name; M:=A^.Mark; Dispose(A) {физическое удаление} End; {инициализация} begin First:=nil End. Пример программы, использующей эти модули: Program UsingStack; Var uses Stack; Name: NameStr; Mark: integer; Begin … readln (Name, Mark); push (Name, Mark); … end.
Дата добавления: 2014-01-07; Просмотров: 996; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |