РАЗРАБОТКА КЛАССА. СВЯЗАННЫЙ СПИСОК. Объектно-ориентированное программирование
РАЗРАБОТКА КЛАССА \»СВЯЗАННЫЙ СПИСОК\»
Пояснительная записка к курсовой работе по дисциплине
«Объектно-ориентированное программирование»
СОДЕРЖАНИЕ
ВВЕДЕНИЕ 4
1. ПОСТАНОВКА ЗАДАЧИ 6
2. СТРУКТУРА КЛАССА 9
2.1. Формальное описание класса 9
2.2. Структура данных класса 13
2.3. Структура методов класса 14
2.4. Инструкция программисту 16
3. ДЕМОНСТРАЦИОННАЯ ПРОГРАММА 18
3.1. Текст демонстрационной программы 18
3.2. Инструкция пользователю 21
3.3. Тестовый пример 22
ЗАКЛЮЧЕНИЕ 23
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 24
ПРИЛОЖЕНИЕ 1. Реализация класса Node 25
ПРИЛОЖЕНИЕ 2. Реализация класса LinkedList 27РАЗРАБОТКА КЛАССА \»СВЯЗАННЫЙ СПИСОК\»
Пояснительная записка к курсовой работе по дисциплине
«Объектно-ориентированное программирование»
СОДЕРЖАНИЕ
ВВЕДЕНИЕ 4
1. ПОСТАНОВКА ЗАДАЧИ 6
2. СТРУКТУРА КЛАССА 9
2.1. Формальное описание класса 9
2.2. Структура данных класса 13
2.3. Структура методов класса 14
2.4. Инструкция программисту 16
3. ДЕМОНСТРАЦИОННАЯ ПРОГРАММА 18
3.1. Текст демонстрационной программы 18
3.2. Инструкция пользователю 21
3.3. Тестовый пример 22
ЗАКЛЮЧЕНИЕ 23
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 24
ПРИЛОЖЕНИЕ 1. Реализация класса Node 25
ПРИЛОЖЕНИЕ 2. Реализация класса LinkedList 27
ВВЕДЕНИЕ
На сегодняшний день в программировании очень важным является понимание того, что разработка любых современных приложений, достаточно больших по затратам ресурсов, отличающихся высоким уровнем требований к надежности функционирования, диктует необходимость в новом подходе, который бы давал возможность выйти на качественно более высокий уровень производства программного обеспечения. Пожалуй, наиболее удачным в данном случае является так называемая парадигма объектно-ориентированного программирования, предложенная американцем Гради Бучем.
\»Объектно-ориентированное программирование — это методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования\» [1]. Таким образом, объектно-ориентированный подход означает, что структура данных и алгоритмов, используемых в программе, имеет представление, близкое к предметной области и может быть формально описано в терминах предметной области. Такой подход помогает значительно улучшить степень понимания программного кода, увеличить возможности интеграции при общении разработчиков программного обеспечения со специалистами из предметной области. Кроме того, практика показывает, что соблюдение правил ООП позволяет намного уменьшить число ошибок и сделать программу более гибкой и устойчивой к изменениям.
\»Каждый стиль программирования имеет свою концептуальную базу. Каждый стиль требует своего умонастроения и способа восприятия решаемой задачи. Для объектно-ориентированного стиля концептуальная база — это объектная модель. Она имеет четыре главных элемента:
— Абстрагирование. Абстракция выделяет существенные характеристики некоторого объекта, отличающие его от всех других объектов.
— Инкапсуляция — процесс отделения друг от друга элементов объекта, определяющих его устройство и поведение.
— Модульность — это свойство системы, разложенной на внутренне связные, но слабо связанные между собой модули.
— Иерархия — упорядочение абстракций, разложение их по уровням (наследование и агрегация)\».
Наличие этих свойств у проектируемой системы является необходимым для написания программ в объектно-ориентированном стиле. Кроме того, ООП подразумевает наличие у объекта таких свойств, как параллелизм, сохраняемость и типизация.
На данный момент существует большое количество разнообразных языков, позволяющих написание программ в объектно-ориентированном стиле. Наиболее распространенными из них являются C++, Object Pascal, Ada, Smalltalk, CLOS.
В данной работе будет рассмотрено создание класса \»Связанный список\» с использованием языка C++. Язык C++ соответствует всем необходимым для разработки класса требованиям и поддерживает создание приложений с помощью объектно-ориентированного подхода.
1. ПОСТАНОВКА ЗАДАЧИ
При решении различных задач часто возникает потребность в хранении некоторого объема данных, представляющих собой совокупность элементов одного типа. Такие данные обычно хранятся последовательно в памяти компьютера. Существует несколько основных способов для хранения информации подобного рода. Одним их них является представление данных в виде массива, который содержит последовательность хранимых в памяти значений, называемых элементами, однозначно идентифицируемых по их номеру (индексу). Однако такое хранение данных не всегда является удобным. Такие проблемы могут возникнуть, например, при хранении информации, объем которой динамически определяется в процессе исполнения программного кода. При этом часто может возникать ситуация, когда требуется удалить один из элементов (или добавить новый), чтобы при этом не нарушился общий порядок хранения данных. Такое поведение системы может вызвать немало проблем при использовании массивов, а если еще при этом учесть, что большинство современных языков программирования предоставляют достаточно медленные методы для работы с данными массивов, то нормальное функционирование всей системы становится труднореализуемым, если вообще не невозможным.
В таких случаях применяют данные, динамически связываемые друг с другом, и представляющие собой структуры типа \»связанный список\». Под \»связанным списком\» в программировании понимают тип хранения данных, при котором каждый элемент списка содержит, помимо базовой информации, еще и ссылку на место, где хранится другой элемент списка. При этом различают односвязные и двусвязные списки. Очевидно, что в односвязных списках каждый элемент имеет ссылку только на один элемент (предыдущий или последующий), а двусвязный хранит информацию как о предыдущем, так и о последующем элементах списка. Тип \»связанный список\» может также являться базовым для создания на его базе других типов, таких как очереди, стеки, деревья и др. Таким образом, возникает необходимость в разработке такого типа данных, который бы, к тому же, отвечал запросам той области, где он мог бы иметь свое применение.
В данной работе рассматривается разработка типа хранения данных \»связанный список\» в качестве класса языка программирования C++. Используя C++, возможно определять новые типы данных и полностью интегрировать их в среду программирования. Можно сказать, что \»класс — это определяемый пользователем тип\»[2], и в то же время \»класс — это некое множество объектов, имеющих общую структуру и общее поведение\»[1]. Таким образом, разрабатывая класс, мы разрабатываем не только способ хранения некоторой информации, но и множество методов для эффективной и безопасной обработки этой информации.
Очевидно, что для универсальности разрабатываемых алгоритмов нужно, чтобы они как можно меньше зависели от контекста хранимой информации. Необходимо, чтобы тип хранимых элементов был описан в общих чертах, среди которых бы выделялись только те, которые необходимы для создания на их базе связанного списка, а тип самой информации определялся динамически. Такую возможность дает язык C++. Для этого можно использовать шаблоны языка C++, а тип хранимых данных уже выбирать непосредственно из контекста решаемой задачи.
Кроме того, совершенно ясно, что для большего удобства и повышения надежности функционирования разрабатываемого класса, необходимо, чтобы тип хранимых данных также являлся классом языка C++. Такой подход позволить абстрагироваться от его внутреннего представления, а также создать некоторые базовые методы, необходимые для развития класса \»связанный список\».
Итак, сформулируем требования, предъявляемые к разрабатываемому классу, учитывая также замечания, характерные для написания программ в объектно-ориентированном стиле:
1. Необходимо создания базового класса Node, для хранения одного элемента. Этот класс должен также содержать ссылку на следующий элемент подобного класса, а также предоставлять возможность добавления новых и удаления старых элементов базового класса.
2. Для представления типа \»связанный список\» необходимо создание класса LinkedList, агрегирующего в себя базовый класс Node. Этот класс должен предоставлять возможности для хранения сведений о предыдущем элементе списка (список в таком случае будет являться двусвязным), а также вспомогательные сведения о начале и конце списка, о количестве элементов и о текущей позиции. Разрабатываемый класс должен иметь гибкий набор методов для добавления и удаления элементов в список. Должны быть некоторые вспомогательные методы, характеризующие конкретное состояние списка, а также доступа к данным, хранимым в объекте. Кроме того, очевидно, что должен быть и некий минимум методов, реализующих интуитивные математические действия со списками, такие как сложение (конкатенация), присваивание и сравнение.
Важно отметить, что перечень данных требований может быть существенно расширен в зависимости от конкретных запросов предметной области. В данной работе рассматривается возможность создания некоторого базового набора методов, реализуемых в создаваемом классе. Но при этом имеется возможность добавления новых методов без нарушения целостности класса и ухудшения его работы.
2. СТРУКТУРА КЛАССА
2.1. Формальное описание класса
Для создания класса LinkedList, удовлетворяющего сформулированным выше требованиям, необходимо наличие класса Node. При этом желательно, чтобы доступ к данным класса Node был возможен для класса LinkedList только с помощью специальных функций класса Node. Представление класса Node в нотации Буча….
Скачать полную версию работы ….

Народ, у кого есть этот курсовик залейте куданить плз
Файл обнавлен