Динамические структуры данных; списки: основные виды и способы реализации. Технологии программирования



 

Способы конструирования программ

Динамические структуры данных – сложные, организованные определенным образом данные, которые могут менять размер и/или свою структуру во время работы программы. Т

Типичными динамическими структурами являются массивы, стеки, очереди, списки, деревья. Универсальными способами организации таких структур является использование указателей.

Указатели – переменные, содержащие не сами данные, а адреса памяти.

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

Previous – указатель на тип элемента stack

Массивы – последовательность упорядоченных, индексированных значений одного типа.

 

Количество элементов динамических массивов можно изменять во время работы.

Stack Item Queue Item List Item
Data Data Data
Previous Next Pointes

 

Описание динам. массива: TypeName = Array of BaseType

Очередь – линейная динамическая структура. Отличается от стэка тем, что при добавлении элемент помещается в конец очереди.

Список – линейная динамическая структура связанных элементов.

Для списка определены следующие операции:

Вставка элемента в список;

Удаление элемента из списка;

Перемещение элемента по списку;

Извлечение данных элемента списка;

Поиск элемента и сортировка (дополнительно).

Pointes – указатели для перемещения по списку.

Если каждый элемент имеет указатель на один соседний элемент, то список однонаправленный. Перемещение производится в одну сторону. Если на 2 элемента, то двунаправленный.

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

Для реализации двунаправленного списка элемент должен содержать данные data и указатели previous и next на предыдущий и последующий элемент соответственно. Перемещение по списку осуществляется простыми перемещениями указателя Current на предыдущий и последующий элемент.

В языках программирования (Pascal, C, др.) существует и другой способ выделения памяти под данные, который называется динамическим. В этом случае память под величины отводится во время выполнения программы. Такие величины будем называть динамическими. Раздел оперативной памяти, распределяемый статически, называется статической памятью; динамически распределяемый раздел памяти называется динамической памятью (динамически распределяемой памятью).

Использование динамических величин предоставляет программисту ряд дополнительных возможностей. Во-первых, подключение динамической памяти позволяет увеличить объем обрабатываемых данных. Во-вторых, если потребность в каких-то данных отпала до окончания программы, то занятую ими память можно освободить для другой информации. В-третьих, использование динамической памяти позволяет создавать структуры данных переменного размера.

Работа с динамическими величинами связана с использованием еще одного типа данных — ссылочного типа. Величины, имеющие ссылочный тип, называют указателями.

Указатель содержит адрес поля в динамической памяти, хранящего величину определенного типа. Сам указатель располагается в статической памяти.

Адрес величины — это номер первого байта поля памяти, в котором располагается величина. Размер поля однозначно определяется типом.

Далее будем более подробно обсуждать указатели и действия с ними в языке Pascal.

В версиях Турбо-Паскаля, работающих под операционной системой MS DOS, под данные одной программы выделяется 64 килобайта памяти (или, если быть точнее, 65520 байт). Это и есть статическая область памяти. При необходимости работать с большими массивами информации этого может оказаться мало. Размер динамической памяти — много больше (сотни килобайт). Поэтому использование динамической памяти позволяет существенно увеличить объем обрабатываемой информации.

Следует отчетливо понимать, что работа с динамическими данными замедляет выполнение программы, поскольку доступ к величине происходит в два шага: сначала ищется указатель, затем по нему — величина. Как это часто бывает, действует "закон сохранения неприятностей": выигрыш в памяти компенсируется проигрышем во времени.

Технология программирования - это совокупность методов и средств разработки (написания) программ и порядок применения этих методов и средств. Основные походы:

Операциональный подход. В эпоху ЭВМ 1 - го и 2-го поколений основным требованием к алгоритму была его узко понимаемая эффективность:

1) минимальные требования в отношении оперативной памяти компьютера - программа должна была использовать наименьшее возможное число ячеек оперативной памяти компьютера;

2) минимальное время исполнения (минимальное число операций). При этом программы составлялись из команд, непосредственно или почти непосредственно исполнявшихся компьютером (точнее говоря, процессором):

* операции присваивания;

* простейших арифметических операций;

* операций сравнения чисел;

* операторов безусловного и условных переходов (изменяющих порядок вычисления команд в программе);

* операторов вызова подпрограмм (вспомогательных алгоритмов).

Такой подход в программировании (создании алгоритмов), ориентированный на непосредственно выполняемые компьютером операции, можно назвать операциональным. Программа созданная в таком подходе малоэффективная. Много времени. Линейная.

Структурное программирование – это методология программирования, основанная на иерархическом решении задач. Основная цель – это дисциплинированность программирования. Принципы:

Принцип абстракции – рассмотрение решаемой задачи в целом, без учета деталей ее реализации.

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

Принцип модульности – каждая из подзадач реализуется в отдельном модуле.

Модуль – независимая часть программы, которая может быть разработана, отлажена и откомпилирована отдельно от основной программы. Каждый модуль может ссылаться на другие модули. Количество используемых модулей называется размахом (шириной) модуля, который не должен превышать 7. Использование модулей имеет следующие преимущества:

1) возможность создания программы несколькими программистами;

2) простота проектирования и последующих модификаций программы;

3) упрощение отладки программы - поиска и устранения в ней ошибок;

4) возможность использования готовых библиотек наиболее употребительных модулей.

Стандарты СП:

разбивать программы на модули (задачииподзадачи),

использовать стандартные алгоритмические конструкции,

использовать значимые имени,

использовать префиксы для родственных имен.

не допускать вложенности условных конструкций (ифов) – не более трех,

не использовать выражения с неочевидной семантикой (смыслом).

Объектно-ориентированное программирование (ООП) - методология, которая основана на представлении программ в виде набора объектов отражающая части модели и определение способов взаимодействия между ними (парадигма программирования, в которой основными концепциями являются понятия объектов и классов). Цель методологии разработки программ: дисциплинированность программирования и эффективность разработки программ. Принципы ООП:

Принцип модульности – программа состоит из модулей, в каждом модуле реализованы объекты родственных классов, модули могут быть разработаны отдельно.

Инкапсуляция (encapsulation) заключается в объединении данных и методов обработки данных в одной структуре (объекте) и обеспечения скрытия данных и контролирования данных (доступ к своим данным контролирует сам объект).

Наследование (inheritance) – способность порождать новые классы объектов от уже существующих. Класс, от которого порождается новый, называется базовым классом или родительским или предок (ancestor).Порождаемый класс называется наследником или потомком (descendant).Потомок наследует все свойства и методы предка, а также может вводить свои новые свойства и методы или изменять родительские. В свою очередь от наследника могут порождаться новые классы. Причем от 1го класса могут быть порождены несколько наследников или от нескольких классов 1н наследник (множественное наследование).

Полиморфизм(polymorphism) – способность объектов разных, но родственных классов, выполнять одинаковые действия по-своему. Для решения задачи в рамках ООП должна быть разработана иерархия классов необходимых для реализации модели решаемой задачи.

Основные признаки (свойства) ООП:

- абстрагирование – это процесс выделения абстракции предметной области задачи. Это совокупность существующих характеристик некоторого объекта. Эти характеристики отличают его от других объектов.

- ограничение доступа – это сокрытие отдельных элементов абстракции.

- модульность – это принцип разработки программной системы предполагающей реализацию его отдельных частей модулей.

- иерархия – это ранжирование, упорядочение систем абстракции.

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

- параллелизм – это свойство нескольких объектов одновременно находящихся в активном состоянии и выполняют некоторые действия. В основном реализуют только в многопроцессорных машинах.

- устойчивость – это свойство абстракции существует во времени не зависимо от процесса, его породившего. Различают: * временные объекты (промежуточное); * локальные объекты (существуют только в том блоке, в котором описаны); * глобальные объекты (существует во время работы основной программы); * сохраненные в файлах;

Язык считается ООП, если в нем реализованы хотя бы 1-4 признака: С++, Паскаль с версии 5.5 и выше, Delphi и др.

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

Таким образом в структурном программировании на 1е место поставлена логика выполнения решаемой задачи т.е логика алгоритма определяет структуру программы. В ООП на 1е место поставлена структура данных необходимых для решения задач т.е структура программы определена данными. На практике эти подходы сочетаются.


Дата добавления: 2020-01-07; просмотров: 500; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!