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

2. Постановка задач

2.1 Цель

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

2.2 Задачи

а) разработать привлекательный интерфейс

б) предоставить удобные инструменты взаимодействия с программой

в) реализовать три гадания типа «пасьянс», которые в результате дают

однозначный ответ на вопрос («да» или «нет», т.е. сбудется желание или

не сбудется)

г) создать гадание на домино и гадание на «Картах судьбы», которые

выдают в качестве результата текстовую информацию, которую

пользователь может интерпретировать по своему усмотрению

д) предоставить пользователю вспомогательную документацию для работы

с приложением.

2.3 Область применения

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

2.4 Актуальность

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

2.5 Входные данные

После запуска программы водится имя пользователя. Затем делается выбор в пользу одного из пяти режимов.

2.6 Выходные данные

Выходные данные формируются в зависимости от того, какой режим был выбран. Если был выбран один из первых трех режимов, то результатом одно из двух возможных сообщений: «Желание сбудется» или «Желание не сбудется», если же был выбран четвертый или пятый режим, то результатом работы программы будет сообщение, содержащее текстовую информацию, которая зависит от выбранного объекта.

3. Разработка программного средства

3.1 Обоснование выбора языка программирования с#

Для разработки проекта был выбран язык программирования С#, платформа программирования .NET, а также среда программирования Microsoft Visual Studio 2010. Выбор сделан неслучайно, известно, что язык программирования С# позволяет быстро и легко разрабатывать приложения с разными уровнями сложности и объединил лучшие черты целого ряда предшественников.

C# основан на строгой компонентной архитектуре и реализует передовые механизмы обеспечения безопасности кода.

К числу принципиально важных решений, которые реализованы в языке C#, можно отнести следующие:

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

б) Свойства как средство инкапсуляции данных (характерно также в целом для ООП). Свойство сочетает в себе поле с методами доступа к нему. Свойства очень похожи на индексаторы. В частности, свойство состоит из имени и аксессоров get и set. Аксессоры служат для получения и установки значения переменной. Главное преимущество свойства заключается в том, что его имя может быть использовано в выражениях и операторах присваивания аналогично имени обычной переменной, но в действительности при обращении к свойству по имени автоматически вызываются его аксессоры get и set. Однако стоит иметь в виду, что свойства не определяют место в памяти для хранения полей, а лишь управляют доступом к полям. Это означает, что само свойство не предоставляет поле, и поэтому поле должно быть определено независимо от свойства.

в) Обработка событий (имеются расширения, в том числе в части обработки исключений, в частности, оператор try). Обработка событий хорошо известна тем разработчикам, которые программировали графический пользовательский интерфейс. Когда пользователь взаимодействует с ним (например, нажав кнопку), один или более методов, ожидающих этого отклика, запускаются. Событие может быть сгенерировано и без взаимодействия с пользователем. Обработчики событий это методы в объекте, привязанные к событию, возникающему в приложении. Механизм обработки ошибок С# позволяет закодировать пользовательскую обработку для каждого типа ошибочных условий, а также отделить код потенциально порождающий ошибки, от кода, обрабатывающего их. Исключениями, или исключительными ситуациями, обычно называются аномалии, которые могут возникать во время выполнения и которые трудно, а порой и вообще невозможно, предусмотреть во время программирования приложения. В .NET поддерживается стандартная методика для генерации и выявления ошибок в исполняющей среде, называемая структурированной обработкой исключений. Прелесть этой методики состоит в том, что она позволяет разработчикам использовать в области обработки ошибок унифицированный подход, который является общим для всех языков, ориентированных на платформу .NET. Благодаря этому, программист на С# может обрабатывать ошибки почти таким же с синтаксической точки зрения образом, как и программист на VB и программист на С++, использующий C++/CLI.

г) Унифицированная система типизации (соответствует идеологии Microsoft .NET в целом). Таким образом, значение любого типа может интерпретироваться как объект. Любой тип в C#, прямо или косвенно, является наследником класса object. Ссылочные типы рассматриваются как простые объекты типа object. Типы-значения - как результат выполнения операции приведения типов.

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

е) Индексаторы (indexer – операторы индекса для обращения к элементам класса-контейнера). В С# имеется возможность проектировать специальные классы и структуры, которые могут быть индексированы подобно стандартному массиву, посредством определения индексатора. Это конкретное языковое средство наиболее полезно при создании специальных типов коллекций (обобщенных и необобщенных). Индексаторы могут быть одно- или многомерными. Определение индексатора во многом напоминает определение свойств, кроме двух крупных отличий. Во-первых, индексатор принимает аргумент индекс. Во-вторых, поскольку сам класс применяется как массив, в качестве имени индексатора используется ключевое слово this. Об индексаторах в С# нужно помнить следующие вещи: у каждого индексатора должен быть хотя бы один параметр, но их может быть и больше; индексаторы часто создают для использования в ассоциативном массиве; вы можете определять несколько индексаторов, но они должны принимать разные наборы значений.

ж) Перегруженные операторы (развитие ООП). В С#, подобно любому языку программирования, имеется готовый набор лексем, используемых для выполнения базовых операций над встроенными типами, но язык предоставляет возможность строить специальные классы и структуры, которые также уникально реагируют на один и тот же набор базовых лексем (вроде операции +). Перегрузка операторов позволяет переопределить операторы С# для применения их к типам, определенным пользователем. При перегрузке операторов учитываются следующие факты: все методы, представляющие перегружаемые операторы, должны быть определены как public и static; возвращать тип, для которого определяется метод; число передаваемых аргументов зависит от типа перегружаемого оператора.

з) Оператор foreach (обработка всех элементов классов-коллекций, аналог Visual Basic). Цикл foreach служит для циклического обращения к элементам коллекции, представляющей собой группу объектов. В С# определено несколько видов коллекций, каждая из которых является массивом. Цикл foreach позволяет проходить по каждому элементу коллекции (объект, представляющий список других объектов). Формально для того, чтобы нечто можно было рассматривать как коллекцию, это нечто должно поддерживать интерфейс Enumerable. При работе с циклом foreach имеется целый ряд ограничений: невозможно использовать без коллекций; элементы коллекции доступны только по чтению, то есть их можно распечатывать, суммировать и так далее, но их нельзя изменять в цикле foreach; нельзя пройти только часть коллекции.

и) Механизмы boxing и unboxing для преобразования типов. Boxing (упаковка) - особенность, которая позволяет сделать типы по значению похожими на типы по ссылке. Распаковка (unboxing) — позволяет конвертировать ссылочные типы в типы значений. При распаковке следует соблюдать осторожность, чтобы принимающая переменная имела в себе достаточно места для сохранения всех байт распаковываемого значения.

к) Атрибуты (средство оперирования метаданными в COM-модели). атрибуты представляют собой типы классов, которые расширяют абстрактный базовый класс System.Attribute. В поставляемых в .NET пространствах имен доступно множество предопределенных атрибутов, которые полезно применять в своих приложениях. Более того, можно также создавать собственные атрибуты и тем самым дополнительно уточнять поведение своих типов, создавая для атрибута новый тип, унаследованный от Attribute.