Курсовая работа Реализация класса динамически перемещающихся графических объектов средствами языка программирования C#. Реализация класса динамически перемещающихся графических объекто. Реализация класса динамически перемещающихся графических объектов средствами языка программирования C#
Скачать 366.36 Kb.
|
Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования КУРСОВАЯ РАБОТА на тему: «Реализация класса динамически перемещающихся графических объектов средствами языка программирования C#» по дисциплине: «Объектно-ориентированный анализ, программирование» З А Д А Н И Е К курсовой работе Тема курсовой работы: «Реализация класса динамически перемещающихся графических объектов средствами языка программирования C#» 2. Срок сдачи студентом законченной работы: 21.12.2020 г. 3. Исходные данные к курсовому проектированию: предметная область, перечень литературных источников 4. Содержание курсовой работы (перечень вопросов, подлежащих разработке): предметная область и описание функциональных требований к программному продукту; объектно-ориентированная декомпозиция предметной области; проектирование интерфейса пользователя; обоснование выбора паттерна проектирования (при необходимости); реализация программного продукта; результаты тестирования разработанного программного продукта. РЕФЕРАТ В курсовой работе выполнены: проект на основе объектно-ориентированного подхода и разработка программного продукта “Динамически перемещающийся графический объект” на языке программирования C# в среде разработки Visual Studio 2019. Преимуществом данного программного продукта является удобный и функциональный пользовательский интерфейс. Целью курсовой работы является разработка, тестирование и отладка программного продукта с использованием объектно-ориентированной парадигмы программирования. Задачами выполнения курсового проектирования являются: изучение новых библиотек в языке программирования C#; проектирование пользовательских интерфейсов в среде программирования Visual Studio 2019. СОДЕРЖАНИЕ
ВВЕДЕНИЕ Программный продукт разработан на языке программирования C# в Visual Studio. Visual Studio включает интегрированную среду разработки программного обеспечения и ряд других инструментальных средств. Данный продукт позволяет разрабатывать приложения с графическим интерфейсом, в том числе с поддержкой технологии Windows Forms. Реализованный программный продукт выполнен на языке программирования C#. На данный момент язык программирования C# один из самых мощных, быстро развивающихся и востребованных языков в ИТ-отрасли. В настоящий момент на нем пишутся самые различные приложения от небольших доступных программ до крупных веб-порталов и веб-сервисов, обслуживающих ежедневно миллионы пользователей. Первая версия языка вышла вместе с релизом Microsoft Visual Studio .NET в феврале 2002 года. Текущая версия языка является версия C#9.0, которая вышла 10 ноября 2020 года вместе с релизом .NET 5. Целью курсового проектирования с помощью объектно-ориентированного анализа создать движение объекта по окружности с разной анимацией. Этой анимацией может быть: увелечение или уменьшениа, смена цвета объекта. Должен осуществляться выбор объекта, реализовать удобный пользовательский интерфейс. Задачами выполнения курсового проектирования является: изучение основных принципов парадигмы объектно-ориентированного программирования; изучение новых библиотек языка программирования C#; применения навыков ООП для создания классов; создание, отладка и тестирование программы на языке программирования С#; составления пояснительной записки, содержащей обоснование принятых проектных решений и описание методов и способов реализации и сопровождения программного обеспечения; применения нормативных документов, регламентирующих состав, содержание и форму технической документации на разработанный программный продукт. Выполнение курсовой работы по дисциплине «Объектно-ориентированный анализ, программирование» создает условия для практического применения знаний, полученных в области профессиональных дисциплин; приобретение навыков создания технической документации; обеспечения успеха в дальнейшей профессиональной карьере. 1 ПРЕДМЕТНАЯ ОБЛАСТЬ И ОПИСАНИЕ ФУНКЦИОНАЛЬНЫХ ТРЕБОВАЙ К ПРОГРАММНОМУ ПРОДУКТУ 1.1 Описание предметной области. Предметная область данного проекта – реализовать программу динамически перемещающихся объектов с помощью Windows Forms и пространство имен System.Drawing, которая предоставляет доступ к основным графическим функциям GDI+. Пользователь может самостоятельно выбирать объект и анимацию к этому объекту. Анимация выполнена с помощью Таймера, на каждом тике происходит движение объекта. 1.2 Функционал приложения. Приложение должно реализовывать следующий функционал: 1) Создания объектов двух типов 2) Перемещение объекта по окружности с постоянной скоростью и меняющий цвет случайным образом. 3) Удаление объекта. 4) Проверка на существование объекта. 5) Увеличение или уменьшение объекта на каждом витке. 6) Иметь удобный и красивый пользовательский интерфейс. 1.3 Основы ООП Понятие объектно-ориентированное программирование (ООП) означает один из самых эффективных подходов к современному программированию. Раньше программисты, в большинстве случаев, использовали функциональный или процедурный принцип программирования. Все программы, большие и маленькие, писались в одном файле. С течением времени программы становились всё сложнее и больше, что доставляло проблемы разработчикам при поддержке таких программ и внесении изменений. Эту проблему решает объектно-ориентированное программирование. ООП позволяет объединить данные и методы, относящиеся к одной сущности, и работать с ними, как с одним целым. ООП привносит нам два ключевых понятия: Класс и Объект. Класс – это тип данных. С помощью класса описывается некоторая сущность (ее характеристики и возможные действия). Например, класс может описывать студента, автомобиль и т.д. Описав класс, мы можем создать его экземпляр – объект. Объект – это уже конкретный представитель класса. Основные принципы структурирования в случае ООП связаны с различными аспектами базового понимания предметной задачи, которое требуется для оптимального управления соответствующей моделью: 1) Абстракция для выделения в моделируемом предмете важного для решения конкретной задачи по предмету, в конечном счёте — контекстное понимание предмета, формализуемое в виде класса. 2) Инкапсуляция для быстрой и безопасной организации собственно иерархической управляемости: чтобы было достаточно простой команды «что делать», без одновременного уточнения как именно делать, так как это уже другой уровень управления. 3) Наследование для быстрой и безопасной организации родственных понятий: чтобы было достаточно на каждом иерархическом шаге учитывать только изменения, не дублируя всё остальное, учтённое на предыдущих шагах. 4) Полиморфизм для определения точки, в которой единое управление лучше распараллелить или наоборот — собрать воедино. 1.4 Наследование в языке программирования C# Наследование – это механизм объектно-ориентированного программирования, позволяющий производным классам расширить или изменить функциональность базового класса. Базовый класс – класс от которого наследуется другой класс. Производный класс – тот который расширяет базовый класс. Доступность членов базового класса зависит от модификаторов доступа, которые применены к этим членам. Все члены базового класса с модификатором доступа public доступны без ограничений во всех производных классах. Члены базового класса с модификатором доступа private полностью закрыты для доступа из производного класса. Модификатор доступа protected закрывает член базового класса для доступа извне, однако, члены с таким модификатором доступны в любом производном классе. Если члену класса назначен модификатор доступа internal, то такой член базового класса доступен для всех производных классов, но только если они находятся в той же сборке, что и базовый класс. При разработке собственной иерархии наследования классов важно помнить, что по умолчанию члены класса являются закрытыми (private). Все типы C# неявно унаследованы от базового класса object. Следовательно, для каждого класса C# доступны члены базового класса object. Члены класса object, которые доступны любому типу C# благодаря механизму неявного наследования: 1) ToString – возвращает строку с именем типа, если не переопределен; 2) Equals – производит сравнение объектов; 3) GetType – возвращает объект Type, соответствующий типу объекта для которого вызван данный метод; 4) GetHashCode – возвращает хэш-код объекта; 5) MemberwiseClone – производит поверхностное копирование объекта; 6) Finalize – должен освобождать ресурсы объекта. В базовом классе и классе-наследнике могут быть объявлены конструкторы. Конструктор базового класса будет создавать ту часть объекта, которая принадлежит базовому классу, а конструктор наследника будет создавать свою часть. Когда конструктор определен только в наследнике, то здесь все просто – при создании объекта сначала вызывается конструктор по умолчанию базового класса, а затем конструктор наследника. Когда конструкторы объявлены и в базовом классе, и в наследнике – нам необходимо вызывать их оба. Для вызова конструктора базового класса используется ключевое слово base. В базовый конструктор передаются все необходимые аргументы для создания базовой части объекта. 1.5 Интерфейс в языке программирования C# Интерфейс представляет ссылочный тип, который может определять некоторый функционал - набор методов и свойств без реализации. Затем этот функционал реализуют классы и структуры, которые применяют данные интерфейсы. Для определения интерфейса используется ключевое слово interface. Как правило, названия интерфейсов в C# начинаются с заглавной буквы I, например, IComparable, IEnumerable (так называемая венгерская нотация), однако это не обязательное требование, а больше стиль программирования. Интерфейс может определять следующие сущности: 1) Методы; 2) Свойства; 3) Индексаторы; 4) События; 5) Статические поля и константы (с версии C# 8.0); Интерфейс может наследовать от одного или нескольких базовых интерфейсов. Когда интерфейс переопределяет метод, реализованный в базовом интерфейсе, он должен использовать синтаксис явной реализации интерфейса. Если список базовых типов содержит базовый класс и интерфейсы, базовый класс должен стоять первым в списке. Класс, реализующий интерфейс, может явно реализовывать члены этого интерфейса. При явной реализации члена к нему можно получить доступ только через экземпляр интерфейса, но не через экземпляр класса. Кроме того, обращение к членам интерфейса по умолчанию можно осуществлять только через экземпляр интерфейса. 1.6 Абстрактный класс в языке программирования C# Модификатор abstract указывает, что изменяемый элемент имеет отсутствующую или неполную реализацию. Модификатор abstract можно использовать с классами, методами, свойствами, индексаторами и событиями. Абстрактные классы предоставляют следующие возможности: 1) Создавать экземпляры абстрактного класса нельзя. 2) Абстрактный класс может содержать абстрактные методы и методы доступа. 3) Изменить абстрактный класс с модификатором sealed нельзя, так как два этих модификатора имеют взаимоисключающие значения. Модификатор sealed запрещает наследование класса, в то время как модификатор abstract указывает, что класс обязан иметь производные классы. 4) Неабстрактный класс, производный от абстрактного класса, должен включать фактические реализации всех наследуемых абстрактных методов и методов доступа. 1.7 Графика в Windows Forms На примере графики наглядно видны преимущества ООП, смысл использования классов, их методов и свойств. Пространство имен System.Drawing (Рисование) обеспечивает доступ к функциональным возможностям графического интерфейса GDI+, используя около 50 классов, в том числе класс Graphics. Для графических объектов необходимо создать экземпляр класса Graphics, в пространстве имен System Drawing. Существует три способа создания объекта данного класса: 1. Ссылку на объект Graphics получают из параметра PaintEventArgs, передаваемого в обработчик события Paint, возникающего при прорисовки формы или элемента: Private void Form1_Paint (object sender, PaintEventArgs e) { Graphics g=e.Graphics; // использование объекта } 2. Использование мтода CreateGraphics, описанного в классах формы и элемента управления: Graphics g; g= this.CreateGraphics; 3. Создание объекта с помощью объекта-потомка Image(для изменения существующего изображения): Bitmap bm = new Bitmap (“d: \\picture.bmp”); Graphics g = Graphics.FromImage (bm); После создания объекта типа Graphics его можно использовать для вывода линий, геометрических фигур, текста и изображений. Основными объектами, которые при этом применяются, служат: Pen – рисование линий и контуров геометрических фигур Brush – заполнение областей, Font – вывод текста, Color – выбор цвета. Начало координат располагается в верхнем левом углу формы. При этом эта четверть соответствует первой четверти, т.е. положительным направлениям значений X и Y Класс Graphics предоставляет методы для рисования объектов на устройстве отображения. Объект Graphics связан с конкретным контекстом устройства. Объект можно получить Graphics , вызвав Control.CreateGraphics метод для объекта, который наследуется от System.Windows.Forms.Control или путем обработки события элемента управления Control.Paint и доступа к Graphics свойству System.Windows.Forms.PaintEventArgs класса. Также можно создать Graphics объект из образа с помощью FromImage метода. С помощью объекта можно рисовать множество различных фигур и линий Graphics. К этим методам относятся DrawLine, DrawArc, DrawClosedCurve DrawPolygon и DrawRectangle. Изображения и значки можно также нарисовать с помощью DrawImage методов и DrawIcon соответственно. Кроме того, можно управлять системой координат, используемой Graphics объектом. С точки зрения приложений, интерфейс GDI состоит из контекста отображения и инструментов, предназначенных для рисования. Контекст отображения можно сравнить с листом бумаги, на котором приложение рисует то или иное графическое изображение, а также пишет текст. Инструменты для рисования — это перья, кисти (а также шрифты и даже целые графические изображения), с помощью которых создается изображение. Кроме контекста отображения и инструментов для рисования, приложениям доступны десятки функций программного интерфейса GDI, предназначенные для работы с контекстом отображения и инструментами. Что же касается приложений Microsoft .NET Framework, то они реализуют возможности интерфейса GDI+ с помощью набора соответствующих классов и интерфейсов. В терминах ОС Microsoft Windows контекст отображения (display context) представляет собой структуру данных, описывающую устройство отображения. В этой структуре хранятся различные характеристики устройства и набор инструментов для рисования, выбранный по умолчанию. Приложение может выбирать в контекст отображения различные инструменты (например, перья различной толщины и цвета, с различными «наконечниками»). Поэтому если Вам надо нарисовать линию красного или зеленого цвета, перед выполнением операции следует выбрать в контекст отображения соответствующее перо. Если приложение получает или создает контекст для устройства отображения, такой контекст называется контекстом отображения (display context). Поэтому когда, например, приложение получает контекст для отображения в одном из своих окон, такой контекст называется контекстом отображения. Если же ему требуется выполнять операцию вывода для устройства (для принтера или для экрана дисплея), приложение должно получить или создать контекст устройства (device context). Следует понимать, что контексты устройства и отображения содержат описания одних и тех же характеристик и имеют одинаковую структуру. Название контекста определяется только тем, относится ли контекст к окну отображения или устройству вывода. При создании ОС Microsoft Windows компания Microsoft избавила программистов от необходимости учитывать аппаратные особенности видеоадаптеров, переложив эту задачу на драйверы видеоадаптеров. Эти драйверы создаются разработчиками видеоадаптеров и наилучшим образом реализуют возможности аппаратуры. Что же касается приложений, то для них в составе ОС Microsoft Windows был предусмотрен набор системных функций, реализующих интерфейс графических устройств (Graphics Device Interface, GDI). Интерфейс графических устройств GDI, как это можно предположить из названия, предназначен для взаимодействия приложений Microsoft Windows с графическими устройствами, такими как видеоадаптер, принтер или плоттер. Когда приложения обращаются к GDI для выполнения операции вывода графического изображения, они работают не с реальными (физическими) устройствами вывода, а с логическими устройствами. Приложения Microsoft Windows не определяют тип видеоадаптера (EGA, VGA, SVGA и т.п.), а работают с логическим видеоадаптером, имеющим феноменальные характеристики: способность отображать практически любой цвет, имеющим огромное разрешение и т. д. Выполняя запрос приложения, GDI обращается к драйверу соответствующего устройства вывода, работающему, в свою очередь, непосредственно с физическим устройством вывода. В процессе выполнения запроса GDI (или драйвер) учитывает ограниченные возможности видеоадаптера и его аппаратные особенности, делая необходимые приближения. Например, приложение может указать для цвета линии любой из примерно 16 млн. цветов, однако не всякое устройство обладает таким цветовым разрешением. В зависимости от типа физического устройства, используемого для вывода, GDI может выбрать для отображения цвет, наиболее соответствующий запрошенному цвету, и допустимый для устройства. Например, если устройство вывода монохромное, вместо различных цветов могут использоваться градации серого цвета. Поэтому приложение может запросить для вывода любой цвет, но для рисования будет использован только такой, который может использовать данное физическое устройство. Такая ситуация, когда приложение запрашивает у ОС Microsoft Windows одно, а получает другое, возникает не только при работе с цветом. Приложение может запросить для вывода шрифт, описав его характеристики. Интерфейс GDI подберет для вывода наиболее подходящий (с его точки зрения) шрифт, соответствующий описанию, и предоставит его приложению. Такой подход удобен для обеспечения аппаратной независимости. 2 ОБЪЕКТНО-ОРИЕНТИРОВАННАЯ ДЕКОМПОЗИЦИЯ ПРЕДМЕТНОЙ ОБЛАСТИ |