Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЗ_КР_PROGR.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
778.39 Кб
Скачать

Содержание

Введение 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].

Определение ООП и его основные концепции

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

Наличие инкапсуляции достаточно для «объектности» языка программирования, но ещё не означает его объектной ориентированности – для этого требуется наличие наследования.

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

Таким образом, существуют следующие концепции ООП:

  • инкапсуляция;

  • наследование;

  • полиморфизм.

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

  1. Анализ технического задания

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

При этом необходимо учесть следующие особенности:

    1. язык:

      1. использование С-подобного языка;

      2. использование объектно-ориентированных средств языка;

      3. использование основных концепций ООП;

    2. интерфейс:

      1. возможность сохранения результата работы программы в файл;

      2. возможность визуального контроля, за работой программы;

      3. обработка ошибок программы (на уровне пользователя);

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

    3. параметры:

      1. поддержка национальных форматов бумаги: A4 – A0 (ISO 216);

      2. поддержка пользовательского размера бумаги;

      3. поддержка основных фигур («начало/конец», «данные», «циклы», «ветвление», «процесс», «подпрограмма», «переходы»), использующихся при рисовании блок-схем (по ГОСТ 19.701-90) [2].

Исходя из требований к работе, в качестве среды разработки используется «Microsoft Visual Studio 2010» в сочетании со встроенным в нее языком «Visual C#». Данный язык является объектно-ориентированным по умолчанию.

  1. Разработка концептуальной объектной модели

Для описания фигур используются классы. Организация объектной модели представлена на рисунке 2.1.

Рисунок 2.1 – Объектная модель

В данной модели поля, свойства и методы, не помеченные ключевым словом «public» и «sealed», являются наследуемыми и «внутренними» (т.е. к ним нельзя обратиться через интерфейс класса). Абстрактные методы описывают общее поведение, характерное для потомков, поэтому такие методы в базовом классе не имеют реализацию.

Для хранения подобных фигур используется контейнер «List», который поддерживает операции добавления, удаления и поиска компонентов.

Фиксирование различных состояний осуществляется с помощью флагов, имеющих логический тип «bool» [3].

Для работы с графикой используется объект «Graphics». Данный объект является базовым в «Windows.Forms» и отличается от других подобных простотой и наличием всех необходимых функций (рисование линии, дуги, окружности и т.п.) [3].

  1. Разработка алгоритмов

Алгоритмы решения задачи – это определенная последовательность действий, которую необходимо выполнить для достижения результата [4].

Разработка алгоритмов является неотъемлемой частью разработки любого программного продукта. Для успешного решения задачи алгоритм должен обладать следующими свойствами:

  1. дискретность – алгоритм должен быть представлен в виде последовательности шагов. Решение задачи сводится к решению отдельных, более простых задач;

  2. определенность – каждый шаг должен быть однозначно определен, не должен допускать произвольных интерпретаций;

  3. массовость – возможность применения алгоритма для решения множества однотипных задач;

  4. эффективность – должен быть выполнен за приемлемое время;

  5. компактность – должен быть изложен в компактной форме.

Для удобства представления, алгоритмы имеют различные формы записи:

    1. словестная;

    2. псевдокод;

    3. структурограммы (схемы Насси-Шнайдермана);

    4. графическая (блок-схемы) [4].

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

Псевдокод – это смесь языка высокого уровня и фраз родного языка исполнителя.

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

В данной работе представлены алгоритмы в виде блок-схем [5]. Рассмотрим некоторые функции подробнее.

Алгоритм функции «bFigureButtons_Click» представлен на рисунке 3.1.

Рисунок 3.1 – Блок-схема функции «bFigureButtons_Click»

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

Алгоритм работы функции «panel1_MouseMove» представлен на рисунке 3.2.

Рисунок 3.2 – Блок-схема функции «panel1_MouseMove»

В данном случае флаги в блоке 2 формируются в зависимости от факта выделения фигур. В блоке 3 производится перебор коллекции фигур с помощью цикла «foreach» и проверка каждой из них на выделение. В случае положительного результата производится замена координат в зависимости от текущих координат мыши.