
Содержание
Введение 4
1 Анализ технического задания 8
2 Разработка концептуальной объектной модели 9
3 Разработка алгоритмов 11
4 Кодирование программы 14
5 Контрольный пример 18
6 Руководство пользователя 19
Заключение 23
Список использованных источников 24
Приложение А 25
Введение
Объектно-ориентированное, или объектное, программирование (в дальнейшем ООП) – парадигма программирования, в которой основными концепциями являются понятия объектов и классов. В случае языков с прототипированием вместо классов используются объекты-прототипы.
ООП возникло в результате развития идеологии процедурного программирования, где данные и подпрограммы (процедуры, функции) их обработки формально не связаны. Для дальнейшего развития объектно-ориентированного программирования часто большое значение имеют понятия события (так называемое событийно-ориентированное программирование) и компонента (компонентное программирование, КОП).
Формирование КОП от ООП произошло в тот момент, когда случилось формирование модульного от процедурного программирования. Процедуры сформировались в модули – независимые части кода до уровня сборки программы, так объекты сформировались в компоненты – независимые части кода до уровня выполнения программы. Взаимодействие объектов происходит посредством сообщений. Результатом дальнейшего развития ООП, по-видимому, будет агентно-ориентированое программирование, где агенты – независимые части кода на уровне выполнения. Взаимодействие агентов происходит посредством изменения среды, в которой они находятся.
Языковые конструкции, конструктивно не относящиеся непосредственно к объектам, но сопутствующие им для их безопасной и эффективной работы, инкапсулируются от них в аспекты (в аспектно-ориентированном программировании). Субъектно-ориентированное программирование расширяет понятие объект посредством обеспечения более унифицированного и независимого взаимодействия объектов. Может являться переходной стадией между ООП и агентным программирование в части самостоятельного их взаимодействия.
Первым языком программирования, в котором были предложены принципы объектной ориентированности, была Симула. В момент своего появления (в 1967 году), этот язык программирования предложил поистине революционные идеи: объекты, классы, виртуальные методы и др., однако это всё не было воспринято современниками как нечто грандиозное. Тем не менее, большинство концепций были развиты Аланом Кэйем и Дэном Ингаллсом в языке Smalltalk. Именно он стал первым широко распространённым объектно-ориентированным языком программирования.
В настоящее время количество прикладных языков программирования (список языков), реализующих объектно-ориентированную парадигму, является наибольшим по отношению к другим парадигмам. В области системного программирования до сих пор применяется парадигма процедурного программирования, и общепринятым языком программирования является язык C. Хотя при взаимодействии системного и прикладного уровней операционных систем заметное влияние стали оказывать языки объектно-ориентированного программирования. Например, одной из наиболее распространенных библиотек мультиплатформенного программирования является объектно-ориентированная библиотека «Qt», написанная на языке C++ [1].
Рассмотрим основные понятия.
Абстракция (абстрагирование) – это способ выделить набор значимых характеристик объекта, исключая из рассмотрения незначимые. Соответственно, абстракция – это набор всех таких характеристик [1].
Инкапсуляция – это свойство системы, позволяющее объединить данные и методы, работающие с ними в классе, и скрыть детали реализации от пользователя [1].
Наследование – это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым, родительским или суперклассом, а новый класс – потомком, наследником или производным классом [1].
Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта [1].
Класс является описываемой на языке терминологии (пространства имён) исходного кода моделью ещё не существующей сущности (объекта). Фактически он описывает устройство объекта, являясь своего рода чертежом. Говорят, что объект – это экземпляр класса. При этом в некоторых исполняющих системах класс также может представляться некоторым объектом при выполнении программы посредством динамической идентификации типа данных. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области [1].
Объект – это сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса или копирования прототипа (например, после запуска результатов компиляции и связывания исходного кода на выполнение) [1].
Прототип – это объект-образец, по образу и подобию которого создаются другие объекты. Объекты-копии могут сохранять связь с родительским объектом, автоматически наследуя изменения в прототипе; эта особенность определяется в рамках конкретного языка [1].
Определение ООП и его основные концепции
В центре ООП находится понятие объекта. Объект – это сущность, которой можно посылать сообщения, и которая может на них реагировать, используя свои данные. Объект – это экземпляр класса. Данные объекта скрыты от остальной программы. Сокрытие данных называется инкапсуляцией.
Наличие инкапсуляции достаточно для «объектности» языка программирования, но ещё не означает его объектной ориентированности – для этого требуется наличие наследования.
Но даже наличие инкапсуляции и наследования не делает язык программирования в полной мере объектным с точки зрения ООП. Основные преимущества ООП проявляются только в том случае, когда в языке программирования реализован полиморфизм; то есть возможность объектов с одинаковой спецификацией иметь различную реализацию.
Таким образом, существуют следующие концепции ООП:
инкапсуляция;
наследование;
полиморфизм.
Целью данной курсовой работы является разработка программы-редактора для выполнения чертежей алгоритмов в виде блок-схем.
Анализ технического задания
Исходя из технического задания, следует, что необходимо составить программу, в которой должны быть реализована возможность рисования элементов блок-схем.
При этом необходимо учесть следующие особенности:
язык:
использование С-подобного языка;
использование объектно-ориентированных средств языка;
использование основных концепций ООП;
интерфейс:
возможность сохранения результата работы программы в файл;
возможность визуального контроля, за работой программы;
обработка ошибок программы (на уровне пользователя);
наличие справочной системы (руководство пользователя);
параметры:
поддержка национальных форматов бумаги: A4 – A0 (ISO 216);
поддержка пользовательского размера бумаги;
поддержка основных фигур («начало/конец», «данные», «циклы», «ветвление», «процесс», «подпрограмма», «переходы»), использующихся при рисовании блок-схем (по ГОСТ 19.701-90) [2].
Исходя из требований к работе, в качестве среды разработки используется «Microsoft Visual Studio 2010» в сочетании со встроенным в нее языком «Visual C#». Данный язык является объектно-ориентированным по умолчанию.
Разработка концептуальной объектной модели
Для описания фигур используются классы. Организация объектной модели представлена на рисунке 2.1.
Рисунок 2.1 – Объектная модель
В данной модели поля, свойства и методы, не помеченные ключевым словом «public» и «sealed», являются наследуемыми и «внутренними» (т.е. к ним нельзя обратиться через интерфейс класса). Абстрактные методы описывают общее поведение, характерное для потомков, поэтому такие методы в базовом классе не имеют реализацию.
Для хранения подобных фигур используется контейнер «List», который поддерживает операции добавления, удаления и поиска компонентов.
Фиксирование различных состояний осуществляется с помощью флагов, имеющих логический тип «bool» [3].
Для работы с графикой используется объект «Graphics». Данный объект является базовым в «Windows.Forms» и отличается от других подобных простотой и наличием всех необходимых функций (рисование линии, дуги, окружности и т.п.) [3].
Разработка алгоритмов
Алгоритмы решения задачи – это определенная последовательность действий, которую необходимо выполнить для достижения результата [4].
Разработка алгоритмов является неотъемлемой частью разработки любого программного продукта. Для успешного решения задачи алгоритм должен обладать следующими свойствами:
дискретность – алгоритм должен быть представлен в виде последовательности шагов. Решение задачи сводится к решению отдельных, более простых задач;
определенность – каждый шаг должен быть однозначно определен, не должен допускать произвольных интерпретаций;
массовость – возможность применения алгоритма для решения множества однотипных задач;
эффективность – должен быть выполнен за приемлемое время;
компактность – должен быть изложен в компактной форме.
Для удобства представления, алгоритмы имеют различные формы записи:
словестная;
псевдокод;
структурограммы (схемы Насси-Шнайдермана);
графическая (блок-схемы) [4].
Словестная формы записи – это тщательно отобранный набор фраз, не допускающий повторений и неоднозначностей. Основной его недостаток – это отсутствие наглядности.
Псевдокод – это смесь языка высокого уровня и фраз родного языка исполнителя.
При графическом представлении метода решения задачи, используются символы для отображения операций и данных [4].
В данной работе представлены алгоритмы в виде блок-схем [5]. Рассмотрим некоторые функции подробнее.
Алгоритм функции «bFigureButtons_Click» представлен на рисунке 3.1.
Рисунок 3.1 – Блок-схема функции «bFigureButtons_Click»
Данная функция представляет собой обработчик нажатия кнопок. Данный обработчик является универсальным для всех инструментальных кнопок и предназначен для подготовки к рисованию фигур.
Алгоритм работы функции «panel1_MouseMove» представлен на рисунке 3.2.
Рисунок 3.2 – Блок-схема функции «panel1_MouseMove»
В данном случае флаги в блоке 2 формируются в зависимости от факта выделения фигур. В блоке 3 производится перебор коллекции фигур с помощью цикла «foreach» и проверка каждой из них на выделение. В случае положительного результата производится замена координат в зависимости от текущих координат мыши.