Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа разработка класса матрица.docx
Скачиваний:
68
Добавлен:
19.05.2015
Размер:
64.58 Кб
Скачать

Министерство образования и науки российской федерации

Тверской государственный технический университет

Кафедра программного обеспечения

Курсовая работа

на тему: "Разработка класса "Матрица"

Выполнил студент ИДПО ИСТ 236

Божков Дмитрий Игоревич

Проверил Мальков Александр Анатольевич

Тверь 2014 год

Содержание

Введение 3

1. Требования к курсовой работе 3

2. Теоретическая часть. 4

2.1 Основные термины и положения ООП 4

2.2 Структура данных 6

2.3 Характеристики класса Матрица 8

2.4 Постановка задачи 12

3. Разработка алгоритма 12

4. Реализация проекта 12

Заключение 16

Список литературы 17

1. Введение

Понятие Матрица в европейской науке было введено в работах У. Гамильтона1и А. Кэли2в середине XIX века.

Матричные обозначения широко распространены в современной математике и её приложениях. Матрица – полезный аппарат для исследования многих задач теоретической и прикладной математики. Так, одной из важнейших является задача нахождения решения систем линейных алгебраических уравнений.

Следствием разнообразия областей применения матричного аппарата в современной науке является наличие в любом из больших математических программных комплексов (Mathcad, Mathematica, Derive, Mapple) подсистем, выполняющих операции над матрицами, а также существование специальных программных библиотек (ScalaPack, PlaPack), рассчитанных на обработку огромных (десятки и сотни тысяч строк) матриц, в том числе с использованием распределенных (параллельных) вычислений.

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

1. Требования к курсовой работе

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

Реализовать консольное приложение, демонстрирующее работоспособность разработанного класса.

2. Теоретическая часть

2.1 Основные термины и положения ооп

В 1980-е годы, когда массовое распространение получили персональные компьютеры, вычислительные и расчетно-алгоритмические задачи стали занимать второстепенное место. Компьютер перестал восприниматься в качестве простого вычислителя, он превратился в среду решения различных прикладных задач обработки и манипулирования данными. На первый план вышли задачи организации простого и удобного человеко-машинного взаимодействия, разработка программ с удобным графическим интерфейсом, создание автоматизированных систем управления и пр. При решении этих задач принципы структурного программирования стали неэффективны, поскольку в процессе разработки таких приложений часто могли изменяться функциональные требования, что усложняло процесс создания программного обеспечения. Также увеличивались размеры программ, что требовало привлечения немалого числа программистов и дополнительных ресурсов для организации их согласованной работы. В этот момент ведущим при разработке программ стал объектно-ориентированный подход, который основан на использовании в программах набора моделей объектов, описывающих предметную область решаемой задачи. Такие модели называют объектными, или объектно-информационными.

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

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

Множество объектов с одинаковым набором свойств и поведением называется классом.

Инкапсуляция данных

Этот термин включает в себя логическое связывание данных с конкретной операцией. Она так же означает, что они являются не -глобальными доступными всей программе, а локальными – доступными только малой ее части. Инкапсуляция также автоматически подразумевает защиту данных. Именно для этого предназначена структура class в С++. В классе управление функциональными деталями объекта осуществляется при помощи спецификаторов private, public, protected. Для создания объектов класса служат специальные методы, которые называют конструкторами. Они необходимы для корректной инициализации объекта. Например, при создании матрицы заданных размеров конструктор должен выделить память для хранения элементов этой матрицы. Уничтожением объекта также занимается специальный метод класса, который называют деструктором. Его задача – освободить ресурсы, занимаемые объектом (закрыть используемые файлы, соединения с базами данных и пр.). Одним из принципов объектно-ориентированного программирования (ООП) – инкапсуляция. Этот термин характеризует сокрытие отдельных деталей внутреннего устройства класса от внешних по отношению к нему объектов или пользователей.

Класс «Матрица» (Matrix) содержит переменные, доступ к которым может быть осуществлен только из методов класса. Такой подход используется для того, чтобы защитить переменные от несанкционированного доступа. Например, если дать возможность программисту, который будет работать с объектом класса Matrix, изменять напрямую значения переменных для хранения размера матрицы, то эти значения могут стать некорректными (отрицательными, очень большими, или не соответствующими действительным размерам). А, выполняя то же самое с помощью методов класса, можно включить в них проверку корректности введенных значений. Для нашего класса таким методом может быть метод ввода матрицы.

Иерархия классов

В общем случае можно представить себе иерархию классов как родословную в генеалогическом древе, где класс С++ представляет собой шаблон для создания классов-потомков. Объекты, полученные из описания класса, называют экземплярами этого класса. Можно создать иерархию классов с классом-родителем и несколькими классами-потомками. Основой для этого являются производные классы.

Наследование

Наследование в ООП позволяет классу получать совйства другого класса объектов. Родительский класс служит шаблоном для производного класса; этот шаблон можно менять различными способами. Наследование является важным положением, поскольку оно позволяет повторно использовать определение класса без значительных изменений в коде.

Полиморфизм

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

Виртуальные функции

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

Конструктор вызывается каждый раз, когда создается объект его класса. Задача конструктора в данном случае состоит в связывании виртуальной функции с таблицей адресной информации. Во время компиляции адрес виртуальной функции неизвестен; вместо этого ей отводится позиция в таблице адресов. Эта позиция будет содержать адрес функции [5].

Помимо структурных характеристик класса сокрытию подлежит и реализация операций класса. Для пользователя нет необходимости знать, как реализован тот или иной метод. Надо знать только то, что метод выполняет, как к нему обратиться и как воспользоваться результатом его работы. Например, определитель квадратной матрицы можно вычислить различными способами: методом исключений Гаусса или по формуле Лапласа – разложение по строке или столбцу. Для пользователя не имеет значения, какой алгоритм заложен в методе класса.