Файл: Разработка Интернет-магазина (Обзор и Анализ предметной области).pdf
Добавлен: 16.02.2024
Просмотров: 108
Скачиваний: 0
Содержание:
Введение
Технология программирования представляет собой совокупность средств и методов, необходимых для разработки программного обеспечения. Решающее значение для специалиста в области информационных технологий и программирования имеет выбор парадигмы программирования, определяющей успешность реализации программного продукта, и соответствующего ей языка программирования. За последние 50 лет появились сотни языков, поддерживающих различные парадигмы, причем некоторые из них используют несколько парадигм (такие языки называют мультипарадигменными). Однако, несмотря на большое количество языков программирования, существует несколько действительно важных концепций программирования, и не так много языков, которые были бы актуальны на протяжении более десяти лет. Именно парадигмы программирования определяют общий способ проектирования прикладных программ. Парадигмой программирования называют используемый различными языками подход к программированию, то есть, проще говоря, набор идей и понятий, определяющих стиль написания программ. Среди основных парадигм программирования выделяют объектно-ориентированную, императивную, декларативную, структурную, функциональную и логическую. Большинство языков программирования, активно используемых в современной разработке прикладных программ, являются мультипарадигменными [5]. Таким образом, проектирование прикладных программ на современных языках программирования является актуальной задачей.
Одной из разновидностей прикладных программ являются информационно-справочные системы, которые позволяют эффективно хранить необходимую пользователю информацию и осуществлять быструю навигацию по накопленному в базе материалу. В рамках данной работы в качестве предметной области для информационно-справочной системы выбрана информация о товарах в хозяйственном магазине. Реализация функций добавления и удаления товаров в корзину, вывода содержимого корзины и ассортимента товаров на экран, а также быстрого доступа к формированию чеков (печати общей стоимости выбранных товаров) позволит создать простейшее программное средство для управления интернет-магазином, практическая значимость которого состоит в автоматизации учета действий покупателя.
Цель данной курсовой работы – реализация интерактивной информационно-справочной системы «Интернет-магазин» на языке программирования высокого уровня C#. Для достижения цели в курсовой работе были поставлены следующие задачи:
- провести системный анализ предметной области;
- спроектировать ключевые алгоритмы программы, выполнить их формализацию в виде блок-схем;
- выполнить реализацию приложения на выбранном языке, а также его тестирование и отладку.
Обзор и Анализ предметной области
Структурное программирование
Структурное программирование можно рассматривать как синтез таких идей, как модульность программы и нисходящее проектирование наряду с их конкретным представлением на уровне кодирования. Это способ организации программ, который облегчает их понимание, упрощает тестирование и делает более доступным изменение. Результаты показали, что использование структурного подхода вместе с другими улучшенными технологиями программирования может привести к увеличению производительности программиста и, соответственно, к снижению частоты появления ошибок в результирующем коде [10]. Методология структурного программирования пытается решить проблемы, связанные с безусловными переходами (то есть переходами в заданную точку программы без проверки выполнения любых условий), чтобы позволить программистам следовать логике программ [6].
Потенциальный рост сложности программы проистекает из того факта, что она содержит много переходов к другим участкам кода как в прямую, так и в обратную сторону. Кроме того, поскольку программа претерпевает изменения в течение периода разработки, по мере ее дальнейшей отладки на протяжении жизненного цикла и по мере изменения в последующих новых проектах, сложность программы растет большими темпами. В некоторых случаях добавляется новый код, потому что программист не может найти существующий код, который выполняет желаемую функцию, или не уверен, как работает существующий код, или боится править существующий код из-за боязни испортить другую желаемую функцию и/или итоговый результат после нескольких модификаций [12].
Концепции структурного программирования препятствуют использованию операторов «goto» и поощряют блочность и модульность программ, нисходящий подход и возможность многократного использования кода. Программы, написанные с использованием структурного подхода, более читабельны и более надежны. Кроме того, затраты и время на разработку программного обеспечения меньше, когда применяется структурное программирование, поскольку меньшие блоки программ могут быть написаны независимо (иногда разными, отдельными программистами или группами) и затем объединены для достижения желаемого конечного результата. Программы могут быть легко изменены и обновлены в соответствии с внешними обстоятельствами. В структурированных программах любая функция может выполняться с использованием одной или нескольких базовых алгоритмических конструкций: следование, цикл или ветвление, как показано на рисунке 1.
Рисунок 1 – Основные алгоритмические конструкции
Многие программы могут быть разбиты на ряд однозначно идентифицируемых подзадач. Хорошей практикой программирования является реализация каждой из этих подзадач в виде отдельного программного модуля. Идея модульного программирования состоит в том, чтобы разбить программу на более мелкие блоки, которые можно отладить и протестировать независимо друг от друга, и которые могут быть затем объединены для достижения общей цели [13]. Использование модульной структуры программирования повышает точность и читабельность программы, а также облегчает ее будущие изменения.
Одним из мотивов модульности программы в методы является подход «разделяй и властвуй», который делает разработку программ более управляемой за счет создания независимым программ из небольших простых частей. Другой мотив – повторное использование кода – использование существующих методов в качестве строительных блоков для создания новых программ. Создавать программы из готовых методов приходится чаще, чем создавать собственный код [8]. Третья причина – избежание повторения кода. Разделение программы на осмысленные методы облегчает отладку и сопровождение программы [7].
При разработке новой программы общая стратегия должна быть полностью спланирована до начала непосредственного написания кода. Это позволяет целиком сосредоточиться логике программы, не заботясь о синтаксических деталях отдельных инструкций. Как только общая программная стратегия четко определена, можно рассмотреть детали, связанные с отдельными программными операциями. Этот подход обычно называют «нисходящим» проектированием программы. В больших программах весь этот процесс может повторяться несколько раз с добавлением дополнительных деталей на каждом этапе [11].
В нисходящем проектировании сначала определяется основная программа, а затем указываются остальные модули или блоки кода. Основная идея нисходящего подхода заключается в том, что проектирование программы должно переходить от общего к частному, причем каждый программный блок постепенно совершенствуется. Как правило, главные модули управляют другими, определяя, что должна делать каждая подпрограмма. Также ожидается, что основным модулем станет интерфейс между всей программой и пользователями. Иерархические отношения, существующие между модулями программы, часто отображаются на структурной схеме, пример которой приведен на рисунке 2.
Рисунок 2 – Функциональная структура программы, спроектированной с использованием нисходящего подхода
Как следует из рисунка 2, основная программа находится на уровне цели 1. Эта основная программа делится на два модуля (подцели 11 и 1S) по мере роста требований. Это главное преимущество модульного программирования. Нисходящая методология проектирования часто использует процесс, называемый поэтапным усовершенствованием, или «разделяй и властвуй», посредством которого ситуация постепенно улучшается до достижения самого низкого уровня в структурной схеме. Этот процесс также очень часто применяется к спецификации процедур более низкого уровня. Нисходящий подход часто называют другими именами – структурированный подход, составной подход, программирование с поэтапным усовершенствованием и так далее. Хотя имена различаются, в целом образуется единый подход: сначала определяется основная функция, которая должна быть выполнена, затем определяются ее подфункции, затем подфункции этих функций и т.д. Нисходящее проектирование состоит из серии шагов, определяющих функции, необходимые для решения задачи, с точки зрения самой задачи [13].
Эта методика может быть полезной для программ, использующих независимые программные модули (то есть определяемые пользователем процедуры и функции). Восходящий подход предполагает детальную разработку этих программных модулей на ранних этапах общего процесса проектирования. Общая разработка программы основывается на известных характеристиках этих отдельных модулей [12]. Восходящий подход противоположен нисходящему – он включает в себя написание модульной программы от частного к общему. То есть модули строятся от своего «скелета» в сторону увеличения кода, пока не будет получено общее решение. Это не очень приемлемая методология в модульном программировании, но, тем не менее, это полезный метод проектирования, когда в задачу входит только модификация и обновление уже существующей программы для получения необходимого результата.
Таким образом, структурное программирование позволяет разделить алгоритм на небольшие блоки. Эта стратегия была очень популярной в начале 1980-х годов. Однако с ростом сложности задач структурное программирование приводило к снижению качества кода, вследствие чего разработчикам требовалось писать все больше функций, которые очень редко могли использоваться в других программах. Многие программисты увидели в объектно-ориентированном программировании потенциальное решение возникшей проблемы. С одной стороны, Smalltalk использовали почти все более-менее сложные системы. С другой – использование виртуальных машин повышало требования к ресурсам. Smalltalk был первым широко распространенным объектно-ориентированным языком программирования. Здесь понятие класса стало основообразующей идеей для всех остальных конструкций языка (то есть класс в Смолтоке является примитивом, посредством которого описаны более сложные конструкции).
В 1983-м году появились сразу два языка, на которые повлияли языки Си и Smalltalk, а также структурный подход. Это были Objective-C и C++, которые пытались избавиться от необходимости повторного использования кода [14, 16]. Оба языка активно задействовали новую, объектно-ориентированную парадигму [15], быстро ставшую популярной.
Объектно-ориентированное программирование
Выбор методологии для создания программы до появления языков четвертого поколения учитывал размеры программ, которые обычно были небольшими. В небольших программах наиболее распространенным оператором обычно является оператор присваивания. Однако в больших программах (более 10000 строк) наиболее распространенным оператором обычно является вызов процедуры подпрограммы. Обеспечение правильной передачи параметров в правильную подпрограмму становится серьезной проблемой. Концепция объектно-ориентированного проектирования заключалась в определении всех классов (и связанных с ними отношений и поведения), которые имеют отношение к решаемой проблеме.
Несмотря на то что структурирование программы и использование иерархической модели может помочь в проектировании некоторого программного обеспечения, для ряда больших программ объективно-ориентированный подход, как оказалось, является более гибким, поскольку разделяет программу на набор модулей, каждый из которых управляет своими собственными данными, алгоритмами или устройствами, но доступ к ним возможен только при первом указании именованного доступа к объекту класса модуля. Вместо того, чтобы полагаться на схему иерархии структурного программирования, объектно-ориентированному программированию необходим набор ссылок, чтобы проследить, какие модули или классы доступны из других мест [9].
Состояние объекта в объектно-ориентированном языке является в основном внутренним или локальным для самого объекта. То есть состояние объекта представлено локальными переменными, объявленными как часть объекта и недоступными вне самого объекта. Каждый объект включает в себя набор функций и процедур, с помощью которых можно получить доступ и изменить локальное состояние. Они называются методами, но похожи на обычные процедуры и функции, за исключением того, что они могут автоматически получать доступ к данным объекта (в отличие от «внешнего мира») и, следовательно, могут рассматриваться как содержащие неявный параметр, представляющий сам объект.