Разработка обучающего программного обеспечения с web-интерфейсом

Изучение технологии для разработки web-интерфейсов. Выбор необходимых средств разработки. Физическая модель базы данных. Разработка web-интерфейса, необходимых модулей и структуры их взаимодействия. Описание интерфейса пользователя и серверной части.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 07.08.2018
Размер файла 1,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Введение

На данный момент в мире происходит стремительное развитие web-интерфейсов. В связи с этим повышается уровень требований к современным web-интерфейсам и их функциям. В любом случае web-интерфейс достаточно широкое понятие и применимо к различным областям компьютерных технологий. Все накопленные знания необходимо хранить и получать доступ к ним с помощью сети интернет, а также, иметь возможность поделится им с людьми. Благодаря такому развитию компьютерные технологии все больше становятся незаменимым инструментом и неотъемлемой частью жизни современного человека. В связи с этим к web-интерфейсам выдвигаются требования, такие как понятный интерфейс, надежность, доступность, адаптивность, хороший дизайн, свободный доступ к любой информации, понимание целостности и структуры.

С появлением и развитием компьютерных технологий, благодаря которым теперь есть возможность свободного выхода в сеть интернет, появилась необходимость разрабатывать web-интерфейсы, удовлетворяющие требованиям пользователей. Инструментов для разработки их становится все больше, и они активно развиваются.

Многие передовые компании, такие как Microsoft, Google, Apple создают собственные инструменты для разработки. С помощью таких инструментов разрабатывается большое количество web-интерфейсов, которые позволяют решать многие задачи. Такие задачи могут включать в себя работу с электронной почтой, поиск информации в интернете, обучению языкам программирования, работа с документами, онлайн покупки, работа с облачными хранилищами, доступ к социальным сетям и т.д. Не мало важным является так же процесс получения знаний и образования, а с использованием web-интерфейсов это будет сделать гораздо проще.

Все вышесказанное в свою очередь определило актуальность темы «Разработка обучающего программного обеспечения с web-интерфейсом».

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

В данной работе необходимо проанализировать предметную область и определиться с функциями для программного обеспечения по данной предметной области, которые необходимо реализовать. После этого необходимо выбрать инструменты разработки, затем следует приступить к проектированию и разработке web-интерфейса.

Объектом исследования выступает обучающее программное обеспечение.

Предметом исследования является разработка web-интерфейсов для обучающего приложения на различных популярных фреймворках, доступных рядовым разработчикам.

Для достижения цели необходимо выполнить следующий задачи:

1. Изучить технологии для разработки web-интерфейсов;

2. Выбрать необходимые средства разработки;

3. Разработать web-интерфейс;

4. Разработать необходимые модули и структуру их взаимодействия.

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

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

В рамках работы была изучена литература таких автором как Мэтис, Э., Лутц, М. и Прохоренок, Н., а так же техническая документация по языку программирования Python, web-разработка на flask, системе управления базами данных Sqlite, разработке и дизайну web-сайтов, HTML5, CSS3, AJAX созданию web-страниц с асинхронным Javascript и XML, а так же JQuery.

В заключение представлены основные выводы по проделанной работе и результаты.

Приложения содержат презентационный материал (Приложение А), исходный код программы (Приложение Б), блок-схемы (Приложение В).

1. Теоретическая часть

1.1 Онлайн обучение

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

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

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

Онлайн курсы состоят из определенного количества модулей и человек сам выбирает, когда их открывать и изучать. На протяжении каждого, урока после каждого модуля, проверяются знания, которые человек усвоил. Метод тестирования знаний зависит от типа и особенностей курса. Также следует учесть, что в отличии от классических методов, люди не зависимы от других. Все опирается только в их собственные возможности и человеческий фактор не играет в их обучении никакой роли. Не забываем о том, что люди всегда ограниченны своими собственными возможностями, к примеру понимание и усваивание информации, скорость восприятия новых данных. Онлайн курсы позволяют в большей степени решить данные проблемы в полной мере.

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

· во-первых, мгновенная передача информации с помощью электронной почты;

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

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

1.2 Преимущества традиционного и онлайн обучения

Преимущества традиционного обучения:

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

· структура. Традиционные программы предлагают закономерность с точки зрения времени и ожиданий от работы. Имеется возможность оценивать свой собственный прогресс;

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

Преимуществам онлайн обучения:

· выбор. можно выбирать предмет (сферу) и решать, с какими ресурсами и платформами проходить обучение. Возможно, это даст шанс сменить профессию;

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

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

· высокая мотивация к обучению. Как ни странно, это именно так. Люди, которые выбирают онлайн-обучение, заинтересованы в своих успехах и более ответственно относятся к занятиям;

· управление своим временем. Найти время для онлайн-занятия просто, даже если человек живет насыщенной жизнью и в его ежедневнике почти нет свободного места. Как правило, большинство ресурсов предлагают ученику возможность самостоятельно выбрать удобные для занятий даты и время. Кроме того, занятие может быть записано и впоследствии использовано в качестве мультимедийного конспекта;

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

· безопасность. Только онлайн-формат занятий может гарантировать полную безопасность ребенку, оградит его от негативного физического или психологического воздействия. Если ребенок находится дома под присмотром родителей, никто не сможет его обидеть или ему навредить;

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

1.3 Недостатки традиционного и онлайн обучения

Недостатки традиционного образования:

· отсутствие гибкости. Структура традиционной программы не позволяет сделать гибкий график;

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

· стандартизация. Все заведения завязаны на определённый тип обучения, отвечающий нормам, определенным государством. Они же в свою очередь рассчитаны под определенный тип людей. То есть стандартно под выпускников школы или колледжа. Но что делать с теми, кто делал достаточно большой перерыв в учебе, к примеру армия, работа, возможно личная жизнь?;

· человеческий фактор. Учеба будет зависима от большого количества людей. Начиная с преподавателей и заканчивая учебным отделом.

Недостатки онлайн обучения:

· необходимость наличия технологий. Мы должны иметь доступ к компьютеру и сети интернет;

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

· наличие целеустремленность. Онлайн образование требует много целеустремленности и умения работать самостоятельно. Это может быть реальной трудностью для некоторых людей, так как онлайн образование не является лучшим выбором для всех. Также требуется поддержание определенной дисциплины и самоорганизации.

1.4 Краткая история языка программирования Python

Краткая история создания языка Python. В конце 1980-х годов Гвидо ван Россум задумал разработать язык программирования Python, а начал работать над этим проектом в конце 1989 года. Начал он его писать на досуге, немного позаимствовав наработки для языка ABC. Python проектировался как объектно-ориентированный язык.

Название языка программирования Python произошло вовсе не из-за определенного вида пресмыкающихся, в честь британского комедийного телешоу "Летающий цирк Монти Пайтона", но все равно такое название часто ассоциируют со змеей, а не с передачей, даже на сайте эмблема изображала змеиные головы.

Развитие языка происходит согласно чёткому регламенту создания, обсуждения, отбора и реализации документов Python Enhancement Proposal.

Первая основная версия Python 1.0 появилась в начале 1994 года. Основными его возможностями были средства функционального программирования:

· lambda;

· reduce();

· filter();

· map();

· свёртка списка.

В версии Python 1.4 входило множество новых функций, самые заметные из них:

· именованные параметры;

· поддержка комплексных чисел;

· форма сокрытия данных (при помощи name mangling);

Еще одна основная версия Python 2.0 была представлена в 2000 году. Добавились новые возможности:

· списковое включение (заимствованная из SETL и Haskell.);

· система сборки мусора;

· циклические ссылки.

Синтаксис в Python очень был похож на Haskell, только Haskell используют символы пунктуации, а в Python предпочел использовать - ключевые слова. В версии Python 2.2 его главным нововведением было объединение базовых классов и типов Python, что сделало Python полностью объектно-ориентированным языком. Так же были добавлены геренаторы и многое другое в плоть до версии Python 2.7, данная версия будет поддерживаться вплоть до 2020 года, версии Python 2.8 не будет.

После длительного тестирования и исправления недостатков архитектуры предыдущих приспешников был анонсирован выход новой версии данного продукта в конце 2008 года и назывался он Python 3.0 или Python 3000. В Python 3.0 также сохранилась совместимость (частичная) со старыми версиями. На данный момент поддерживаются две версии - это Python 2.x и Python 3.x. Версии по синтаксису многим друг от друга не отличаются, но лучше выбирать Python 3.x потому, что у этой версии более высокая производительность.

Влияние других языков. Python появился достаточно поздно в отличие от своих собратьев. Он создавался под влиянием множества языков программирования таких как:

· abc (высокоуровневые структуры данных);

· java (совместное использование finally и except, модули logging, unittest, threading, xml.sax, использование символа @ для декораторов);

· С, C++ (синтаксические конструкции);

· fortran (комплексная арифметика, срезы массивов);

· icon -- (генераторы);

· modula-3 (пакеты, модули, именованные аргументы функций, использование else совместно с try и except);

· smalltalk (объектно-ориентированное программирование);

· lisp (отдельные черты функционального программирования);

· miranda (списочные выражения).

1.5 Причины использовать Python

Язык Python невероятно эффективен [1]: программы делают больше, чем многие другие языки, в меньшем объеме кода. Синтаксис Python также позволяет писать «чистый» код, он будет легко читаться, у будет меньше проблем с отладкой и расширением программ по сравнению с другими языками. Python используется для разных целей: для создания игр, построения web-приложений, решений бизнес-задач и разработки внутренних инструментов для всевозможных интересных проектов. Python также широко применяется в научной области для теоретических исследований и решения прикладных задач. Основное его преимущество в том, что язык программирования Python «Каждому по плечу». Такой лозунг был выдвинут на недавней конференции по языку программирования Python.

Впрочем, одной из самых важных причин для использования Python - это сообщество Python, состоящее из невероятно разных и благожелательных людей. Сообщество играет исключительно важную роль в программировании, потому что программирование не является сугубо индивидуальным делом. Многим из нас, даже самым опытным программистам, приходится обращаться за советом к коллегам, которые уже решали похожие задачи. Существование дружного, доброжелательного сообщества помогает решать задачи, и сообщество Python готово прийти на помощь людям, у которых Python является первым языком программирования.

Философия Python. Долгое время язык программирования Perl был краеугольным камнем интернет-программирования. Первое время функционирование сайтов было основано на сценариях Perl. Раньше их сообщество руководствовалось девизом: «Это можно сделать несколькими способами». Разработчикам некоторое время нравился такой подход, потому что гибкость языка, позволяла решать многие задачи разными способами, но со временем стало ясно, что чрезмерная гибкость усложняет сопровождение крупных проектов. Было слишком трудно и долго разбираться в коде и пытаться понять, что же думал другой разработчик при решении им поставленной задачи. Опытные программисты Python рекомендуют избегать лишних сложностей и применять простые решения там, где это возможно.

Философия сообщества Python выражена в очерке Тима Питерса «The Zen of Python». Чтобы просмотреть этот краткий набор принципов написания хорошего программного кода на Python, достаточно ввести команду import this в интерпретаторе. Концепция философии:

· красивое лучше, чем уродливое. Программисты Python считают, что код должен быть красивым. В программировании люди занимаются решением задач. Программисты всегда ценили хорошо спроектированные, эффективные и даже красивые решения;

· простое лучше, чем сложное. Если есть выбор между простым и сложным решением и оба работают, лучше использовать простое решение. Программный код будет проще в сопровождении, а у разработчика, который разработал этот код будет меньше проблем с обновлением этого кода в будущем;

· сложное лучше, чем запутанное. Реальность создает свои сложности. Иногда простое решение задачи невозможно. В таком случае нужно использовать самое простое решение, которое работает;

· удобочитаемость имеет значение. Даже если программный код сложен, он должен нормально читаться. Работая над проектом, требующим написания сложного кода, нужно стараться писать содержательные комментарии для этого программного кода;

· должен существовать один -- и желательно только один -- очевидный способ сделать это. Если предложить двум программистам Python решить одну и ту же задачу, они должны выработать похожие решения. Это не значит, что в программировании нет места для творчества. Наоборот! Но большая часть работы программиста заключается в применении небольших, стандартных решений для простых ситуаций в контексте большого, более творческого проекта. Внутренняя организация программ должна выглядеть логично с точки зрения других программистов Python;

· сейчас лучше, чем никогда. Вы можете потратить весь остаток жизни на изучение всех тонкостей Python и программирования в целом, но тогда вы никогда не закончите ни один проект.

Портируемость. Язык Python портирован и может работать без изменений на всех основных операционных системах. Есть масса возможностей по созданию переносимых графических интерфейсов, программ доступа к БД, web-приложений и многих других типов программ. Портируемость программного кода Python из операционной системы Linux в Windows обычно заключается в простом копировании файлов программ с одной машины на другую. Более того, существует специальная версия Python для виртуальной машины Java -- Jython, что позволяет интерпретатору Python работать на всех системах, где поддерживается Java.

Библиотеки поддержки [2]. Стандартная библиотека Python представляет собой набор модулей, включаемых в каждую установленную копию Python. Эта библиотека предоставляет много возможностей, востребованных в прикладных программах, например, имеются средства для работы с сетевыми протоколами и форматами интернета, поиск текста по шаблону, модули для написания HTTP-серверов и клиентов, модули для работы с XML. Чтобы использовать любую функцию или класс из стандартной библиотеки, достаточно включить простую команду import в начало файла. Так же Python благодаря большому сообществу позволяет воспользоваться разработками созданные сторонними разработчиками. К сторонним разработкам можно назвать инструменты для создания web-интерфейсов, программирование математических вычислений, разработку игровых программ и многое другое.

Высокая скорость разработки. В модели выполнения Python отсутствуют различия между средой разработки и средой выполнения. То есть системы, которые совершают компиляцию и приступают к выполнению исходного текста, - это суть одна и та же система. Python компилятор всегда присутствует во время выполнения и является частью механизма, выполняющего программы.

Это значительно увеличивает скорость разработки. Python во много раз повышает производительность труда разработчика. Объем программного кода на языке Python обычно составляет треть или даже пятую часть эквивалентного программного кода на языке C++ или Java. Это означает меньшее количество времени на отладку и меньший объем трудозатрат на сопровождение. Не нужно всякий раз выполнять компиляцию кода и связывание программ, прежде чем их запускать. Это также придает языку некоторый динамизм - вполне возможно, а нередко и удобно, когда программы на языке Python создаются и выполняются другими программами Python во время выполнения. Например, встроенные инструкции eval и exec принимают и выполняют строки, содержащие программный код на языке Python. Благодаря такой возможности Python может использоваться для настройки продуктов - программный код Python может изменяться «на лету», а пользователи могут изменять части системы, написанные на языке Python, без необходимости перекомпилировать систему целиком.

Python работает на этапе времени выполнения - здесь полностью отсутствует этап предварительной компиляции кода, все, что необходимо, производится во время выполнения программы. Сюда относятся даже такие операции, как создание классов, функций и связывание модулей. Эти события в более статичных языках происходят перед выполнением, но в программах на языке Python происходят во время выполнения. В результате процесс программирования приобретает больший динамизм.

Интеграция компонентов. Механизмам интеграции Python хорошо взаимодействует с другими частями приложения. Интеграция позволяет использовать Python для расширения функциональных возможностей и настройки программных продуктов. На данный момент программный код на языке Python имеет возможность интегрироваться с программными компонентами на языке Java, вызывать функции из библиотек на языке C/C++, сам вызываться из программ, написанных на языке C/C++, взаимодействовать с такими платформами, как COM и .NET, и производить обмен данными через последовательный порт или по сети с помощью таких протоколов, как SOAP, XML-RPC и CORBA. Существует две основных стратегии интеграции Python:

· с программным кодом;

· написанным на другом языке программирования.

Первая: сторонние функции могут быть упакованы в модуль языка Python и импортированы с помощью инструкции import. Такие модули называют модулями расширений, потому что они расширяют возможности интерпретатора дополнительными функциями, написанными не на языке Python.

Другая форма интеграции Python-C/C++ - это встраивание, когда из программ на языке C осуществляется доступ к интерпретатору и к программам на языке Python, как к библиотекам. Этот подход иногда используется, когда по тем или иным причинам возникает необходимость встроить интерпретатор Python в существующий программный комплекс на языке C, обычно как некоторый механизм для работы со сценариями.

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

Прикладное применения. Язык программирования Python применяется известными компаниями для создания продуктов, приносящих настоящую прибыль. Например:

· яндекс.Диск. Около 13% разработчиков в Яндексе пишут программный код на Python;

· компания Google с самого основания активно использовали Python. Широко применяется в поисковой системе. Google разработал целую облачную платформу Google App Engine, чтобы разработчики могли запускать код на Python в облаке Google;

· файловый хостинг компании DropBox. Сервис разработан на языке Python;

· YouTube реализована на языке Python;

· Los Alamos, Fermilab, JPL используют Python для научных вычислений;

· популярная программа BitTorrent для обмена файлами в пиринговых сетях написана на языке Python;

· NSA использует Python для шифрования и анализа разведданных;

· компании Intel, Cisco, Qualcomm и IBM, используют Python для тестирования аппаратного обеспечения;

· компании JPMorgan Chase, Getco и Citadel применяют Python для прогнозирования финансового рынка;

· NASA - используют язык программирования Python для научных вычислений;

· iRobot использует Python в разработке коммерческих роботизированных устройств;

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

В реализации почтового сервера IronProt используется более 1 миллиона строк программного кода на языке Python.

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

Функциональные возможности [3]. Python можно назвать гибридом. Его инструментальные средства укладываются в два диапазона между:

· традиционными языками сценариев;

· языками разработки программных систем.

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

· динамическая типизация. Python сам следит за типами объектов, используемых в программе, благодаря чему не требуется писать длинные и сложные объявления в программном коде;

· автоматическое управление памятью. Python автоматически распределяет память под объекты и освобождает ее ("сборка мусора"), когда объекты становятся ненужными;

· модульное программирование. Для создания крупных систем Python предоставляет такие возможности, как модули, классы и исключения. Они позволяют разбить систему на составляющие, применять ООП для создания программного кода многократного пользования и элегантно обрабатывать возникающие события и ошибки;

· встроенные типы объектов. Python предоставляет наиболее типичные структуры данных, такие как списки, словари и строки, в виде особенностей, присущих самому языку программирования. Эти типы отличаются высокой гибкостью и удобством;

· встроенные инструменты. Для работы со всеми этими типами объектов в составе Python имеются мощные и стандартные средства, включая такие операции, как конкатенация, получение срезов, сортировка, отображение и многое другое;

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

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

Преимущество Python перед другими языками высокого уровня:

· имеет более широкие возможности, чем Tcl. Язык Python поддерживает "программирование в целом", что делает его применимым для разработки крупных систем;

· имеет более четкий синтаксис и более простую архитектуру, чем Perl, что делает программный код более удобочитаемым, простым в сопровождении;

· проще и удобнее, чем Java. Python - это язык сценариев, а Java унаследовала сложный синтаксис от таких языков программирования, как C++;

· проще и удобнее, чем C++, но нередко он не может конкурировать с C++, поскольку, будучи языком сценариев, Python предназначен для решения другого круга задач;

· более мощный и более переносимый, чем Visual Basic. Открытая природа Python также означает, что нет какой-то отдельной компании, которая его контролирует;

· более удобочитаемый и более универсальный, чем PHP. Иногда Python используется для создания web-сайтов, но он способен решать гораздо более широкий круг задач, от управления роботами до создания анимационных фильмов;

· более зрелый и имеет более ясный синтаксис, чем Ruby. В отличие от Ruby и Java, объектно-ориентированный стиль программирования является необязательным в Python - он не вынуждает использовать ООП в проектах, где этот стиль неприменим;

· обладает динамическими особенностями таких языков, как SmallTalk и Lisp, но имеет более простой и традиционный синтаксис, доступный как для разработчиков, так и для конечных пользователей настраиваемых систем.

Компиляция в байт-код. Когда мы запускаем программу, практически незаметно Python сначала компилирует ваш исходный текст в формат, известный под названием байт-код. Компиляция - это просто этап перевода программы, а байт код - это низкоуровневое, платформонезависимое представление исходного текста программы. Python транслирует каждую исходную инструкцию в группы инструкций байт кода, разбивая ее на отдельные составляющие. Такая трансляция в байт код производится для повышения скорости - байт код выполняется намного быстрее, чем исходные инструкции в текстовом файле. Интерпретатор Python на персональном компьютере обладает правом записи, он будет сохранять байт код рабочей программы в виде файла с расширением .pyc.

Когда мы будем запускать программу, Python загрузит файл .pyc и минует этап компиляции - при условии, что исходный текст программы не изменялся с момента последней компиляции. Чтобы определить, необходимо ли выполнять перекомпиляцию, Python автоматически сравнит время последнего изменения файла с исходным текстом и файла с байт кодом. Если исходный текст сохранялся на диск после компиляции, при следующем его запуске интерпретатор автоматически выполнит повторную компиляцию программы. Если Python окажется не в состоянии записать файл с байт кодом на диск, программа от этого не пострадает, просто байт код будет сгенерирован в памяти и уничтожен по завершении программы. Однако, поскольку файлы .pyc повышают скорость запуска программы, может потребоваться иметь возможность сохранять их, особенно для больших программ. Кроме того, файлы с байт кодом - это еще один из способов распространения программ на языке Python. Интерпретатор запустит файл .pyc, даже если нет оригинальных файлов с исходными текстами.

Виртуальная машина Python (PVM). Как только программа будет скомпилирована в байт-код (или байт-код будет загружен из существующих файлов .pyc), он передается механизму под названием виртуальная машина Python (PVM). PVM - это механизм времени выполнения, она всегда присутствует в составе системы Python и это программный компонент, который выполняет сценарии. Как только программа будет скомпилирована в байт код, он передается универсальному механизму под названием виртуальная машина Python. Аббревиатура PVM выглядит более внушительно, чем то, что за ней стоит на самом деле, - это не отдельная программа, которую требуется устанавливать. Фактически, PVM - это просто большой цикл, который выполняет перебор инструкций в байт коде, одну за одной, и выполняет соответствующие им операции. PVM - это механизм времени выполнения, она всегда присутствует в составе системы Python, и это тот самый программный компонент, который выполняет сценарии. Формально - это последняя составляющая того, что называют «интерпретатором Python». Компиляция в байт код производится автоматически, а PVM - это всего лишь часть системы Python, которую установили на персональный компьютер.

Производительность. Разработчики, имеющие опыт работы с компилирующими языками программирования, такими как Java, C и C++, могут заметить несколько отличий в модели выполнения Python. Первое, что бросается в глаза, - это отсутствие этапа сборки, или вызова утилиты «make»: программный код может запускаться сразу же, как только будет написан. Второе отличие: байт код не является двоичным машинным кодом. Байт код - это внутреннее представление программ на языке Python. По этой причине программный код на языке Python не может выполняться так же быстро, как программный код на языке Java, C или C++. Обход инструкций выполняет виртуальная машина, а не микропроцессор, и чтобы выполнить байт код, необходима дополнительная интерпретация, инструкции которого требуют на выполнение больше времени, чем машинные инструкции микропроцессора. С другой стороны, в отличие от классических интерпретаторов, здесь присутствует дополнительный этап компиляции - интерпретатору не требуется всякий раз снова и снова анализировать инструкции исходного текста. В результате Python способен обеспечить скорость выполнения где-то между традиционными компилирующими и традиционными интерпретирующими языками программирования.

Альтернативные реализации Python. Существует шесть основных альтернативных реализаций языка Python - CPython, Jython и IronPython, а также несколько второстепенных реализаций, таких как Stackless Python. В двух словах: CPython - это стандартная реализация, а все остальные создавались для специфических целей и задач. Все они реализуют один и тот же язык Python, но выполняют программы немного по-разному.

CPython. Оригинальная и стандартная реализация языка Python обычно называется CPython, особенно когда необходимо подчеркнуть ее отличие от двух других альтернатив. Это название происходит из того факта, что реализация написана на переносимом языке ANSI C. Это тот самый Python, который мы загружаем, получаем в составе дистрибутива ActivePython и который присутствует в большинстве систем Linux и Mac OS X.

Jython. Интерпретатор Jython - это альтернативная реализация языка Python, основная цель которой - тесная интеграция с языком программирования Java. Реализация Jython состоит из Java классов, которые выполняют компиляцию программного кода на языке Python в байт код Java и затем передают полученный байт код виртуальной машине Java (Java Virtual Machine, JVM. Цель Jython состоит в том, чтобы позволить программам на языке Python управлять Java приложениями, точно так же, как CPython может управлять компонентами на языках C и C++. Эта реализация имеет бесшовную интеграцию с Java. Поскольку программный код на языке Python транслируется в байт код Java, во время выполнения он ведет себя точно так же, как настоящая программа на языке Java. Сценарии на языке Jython могут выступать в качестве апплетов и сервлетов, создавать графический интерфейс с использованием механизмов Java и т. д. Более того, Jython обеспечивает поддержку возможности импортировать и использовать Java классы в программном коде Python. Тем не менее, поскольку реализация Jython обеспечивает более низкую скорость выполнения и менее устойчива по сравнению с CPython, она представляет интерес скорее для разработчиков программ на языке Java, которым необходим язык сценариев в качестве интерфейса к Java коду.

IronPython. Третья реализация языка Python - это IronPython. Она предназначена для обеспечения интеграции программ Python с приложениями, созданными для работы в среде Microsoft .NET Framework операционной системы Windows, а также в Mono - открытом эквиваленте для Linux. Платформа .NET и среда выполнения языка C# предназначены для обеспечения взаимодействий между программными объектами - независимо от используемого языка программирования, в духе более ранней модели COM компании Microsoft. Реализация IronPython позволяет программам на языке Python играть роль как клиентских, так и серверных компонентов, доступных из других языков программирования .NET. Модель реализации IronPython очень напоминает Jython. Как и Jython, основной интерес IronPython представляет для разработчиков, которым необходима интеграция Python с компонентами .NET. Поскольку разработка ведется компанией Microsoft, от IronPython, помимо прочего, можно было бы еще ожидать существенной оптимизации производительности. К моменту написания этих строк реализация IronPython еще продолжала разрабатываться.

Python for .NET - ещё одна реализация Python для .NET. В отличие от IronPython эта реализация не компилирует Python код в MSIL, а только предоставляет интерпретатор, написанный на C#. Позволяет использовать .NET-сборки из Python кода.

2. Практическая Часть

2.1 Разработка требований

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

Требования разделяются по своему характеру на: функциональные и не функциональные.

К разрабатываемому сервису были предъявлены следующие функциональные требования:

· сервис должен обеспечивать регистрацию новых пользователей;

· сервис должен обеспечивать авторизацию раннее зарегистрированных пользователей;

· сервис должен обеспечивать сохранения прогресса обучения;

· сервис должен обеспечивать просмотр теоретического материала по выбранному языку программирования;

· возможность редактирования персональных данных пользователя такие как ФИО, пароль и т.д.;

· возможность прохождения пользователем тестов по изученному теоретическому материалу;

· сохранения результатов прохождения тестов в профиле пользователя;

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

К нефункциональным требованиям:

· доступность предоставленного теоретического материала;

· однозначное для понимания вопросы при тестировании;

· простой и понятный интерфейс;

· цветовая гамма, не мешающая при процессе изучения материала.

2.2 Выбор web фреймворк

В качестве основы для разработки web-сервиса был выбран web framework flask [4-5]. Web Framework представляет собой набор инструментов, которые позволяют разработчику писать приложения, не беспокоясь о низкоуровневых деталях, таких как протоколы, управление потоками и т.д. Flask - это web framework написанный на Python. Он разработан Армином Ронахером, который возглавляет международную группу Python энтузиастов под названием Pocco. Он основан на наборе инструментов Werkzeug и движке шаблонов Jinja2. Для взаимодействия с web сервером Flask использует протокол WSGI. WSGI - это спецификация универсального интерфейса между web-сервером и web-приложениями. Он включает в себя мощный отладчик, полнофункциональные объекты запросов и ответов, утилиты HTTP для обработки тегов, обработку файлов cookie, загрузку файлов, мощную систему маршрутизации URL-адресов и кучу дополнительных модулей.

Flask у себя внутри использует Werkzeug и по сути является удобной оболочкой над ним. Jinga2 - это один из самых популярных шаблонизаторов в Python экосистеме. Шаблонизаторы объединяют шаблон с определенным источником данных и на основе этого динамически создают web страницу. Flask часто называют микрофреймворком. Это связано с тем, что при разработке преследовалась цель сделать ядро приложения простым, но расширяемым. Именно поэтому flask не имеет встроенного слоя абстракции для взаимодействия с базами данных, средств для валидации данных и многого другого. Вместо этого Flask реализует протокол для подключения расширений, для того, чтобы расширять функциональность приложения через расширения. Также можно создавать свои собственные модули. Flask отлично подходит для всех видов проектов. Это особенно хорошо для прототипирования.

Различными способами можно скомпрометировать ваше безопасное web-приложение. Flask защищает от наиболее распространенных и известных способов взлома, такие как XSS (cross-site scripting).

2.3 Выбор системы управления базой данных

В качестве разработки базы данных была выбрана SQLite [6]. Проще говоря, SQLite представляет собой программный пакет для общего доступа, который обеспечивает систему управления реляционными базами данных или СУБД. Системы реляционных баз данных используются для хранения пользовательских записей в больших таблицах.

SQLite не использует парадигму клиент-сервер, то есть движок SQLite не является отдельно работающим процессом, с которым взаимодействует программа, а предоставляет библиотеку, с которой программа компонуется и движок становится составной частью программы. Это является большим достоинством потому, что экономит ресурсы персонального компьютера, на котором производится разработка и избавляет от трудоемкого процесса настройки.

2.4Среда разработки

В качестве инструмента для написания кода была выбрана среда разработки Pycharm.

JetBrains PyCharm - это Python IDE содержащая все необходимые для продуктивной разработки инструменты. Стоит заметить, что в IDE много инструментов для ведения профессиональной web-разработки, ведь одна из основных ниш использования Python, это web-разработка. Бета версия PyCharm была выпущена в июле 2010 года, версия 1.0 выпущена 3 месяцами позже и быстро набирала популярность. На рис.2.1 представлен скриншот рабочего окна JetBrains PyCharm.

Возможности PyCharm:

· функциональный редактор кода с подсветкой синтаксиса и ошибок;

· инструменты для web-разработки;

· большое количество инспекций кода;

· простая и мощная навигация в коде: отображение файловой структуры проекта, быстрый переход между файлами, классами, методами;

· разработка с использованием Google App Engine;

· поддержка IronPython, Jython, Cython, PyPy wxPython, PyQt, PyGTK;

· разработка с использованием Flask фреймворка и языков Mako и Jinja2;

· интегрированное Unit тестирование;

· присутствует редактор HTML,CSS, Javascript, Coffescript, SASS, LESS, HAML;

· встроенный полнофункциональный графический отладчик;

· поддержка систем контроля версий;

· интерактивные консоли для Python, Django, SSH, отладчика и баз данных;

· интеграция с баг/issue-треккерами.

Рис.2.1 - Скриншот рабочего окна JetBrains PyCharm

2.5 Система контроля версий

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

Всегда возникает такая ситуация, что необходимо внести изменения в проекте и при этом нужно сохранить прежнюю версию продукта, в таком случае требовалось создавать новую папку с дополнением в виде даты или необходимыми пометками, а за тем копировать рабочую версию проекта и уже с ним работать. Постепенно со временем количество папок с изменениями в проекте значительно возрастали, что создает трудности отката на предыдущие версии и отслеживании изменений. Эта ситуация значительно ухудшается, когда над проектом работает несколько человек. Для решения таких проблем используется система контроля версий, что позволяет комфортно работать с проектом как индивидуально, так в коллективе. Система контроля версий отслеживает изменения, предоставляет возможности для создания новых и слияние существующих ветвей проекта, а также производит контроль доступа пользователей к проекту, позволяет откатывать исправления и определять кто, когда и какие изменения вносил в проект. Системы контроля версий можно разделить на две группы:

· распределенные;

· централизованные.

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

Централизованная CVS представляют собой приложения типа клиент-сервер, когда репозиторий проекта существует в единственном экземпляре и хранится на сервере.

В качестве системы контроля версий выбран Bitbucket. Слоган сервиса - «Bitbucket -- это Git-решение для профессиональных команд.»

Возможности:

· дисковое пространство на один репозиторий 2Gb;

· неограниченное количество частных и общедоступных репозиториев;

· доступ к репозиториям по протоколам HTTP и SSH;

· возможность привязать учётную запись на сервисе к собственному домену;

· вики;

· система учёта ошибок;

· интеграция с Google Analytics, Twitter, Basecamp и тд;

· RSS-лента истории изменений;

· управление приватностью отдельно для каждого репозитория;

· для публичных репозиториев количество пользователей не ограничено (BitBucket бесплатен для проектов открытого программного обеспечения).

2.6 Web-сервер

Apache Web Server - это программное обеспечение с открытым исходным кодом, что означает, что он доступен для любого пользователя без каких-либо затрат. Его исходный код может быть изменен в соответствии с индивидуальными потребностями. Это дает Apache значительное преимущество перед почти всеми его конкурентами, не жертвуя никакими функциями.

Особенности. Apache - мощная программа web-сервера с функциями, которые сравниваются с ее дорогостоящими конкурентами. Программное обеспечение включает административную панель управления, настраиваемые сообщения об ошибках и схемы аутентификации. Модуль виртуального хостинга позволяет запускать несколько сайтов с одного и того же сервера. Помимо этих и других стандартных функций, включенных в установочный пакет, таких как служба имен доменов, протокол SMTP и протокол передачи файлов (FTP), существует множество сторонних надстроек, которые можно установить для настройки web-сервера. Яркое сообщество разработчиков Apache также производит частые обновления, поэтому всегда есть доступ к новейшим функциям и исправлениям безопасности.

Совместимость. Apache совместим с многочисленными аппаратными конфигурациями и операционными системами. Он работает в Linux, Windows NT, MacOS, Unix и многих других системах. Каждая установка может быть изменена в соответствии с техническими возможностями вашего оборудования. Apache включает поддержку языков программирования, таких как PHP, Perl и Python, среди многих других, а также SSL и TSL-шифрование для сайтов, требующих повышенной безопасности.

Техническая поддержка. Ресурсы технической поддержки Apache доступны на нескольких сайтах по всему миру. Это позволяет владельцам серверов получать доступ к справочным статьям и жить в случае необходимости. Это дает Apache большое преимущество перед программами, в которых только сайт компании является источником поддержки. Когда обнаружена новая ошибка, сообщество пользователей с открытым исходным кодом обычно создает исправление для исправления и публикует решение бесплатно на форумах и сайтах социальных сетей.

Функциональные возможности.

Существует множество модулей, добавляющих к Apache поддержку различных языков программирования и систем разработки:

· Python (mod python, mod wsgi);

· Ruby (apache-ruby);

· Perl (mod perl);

· ASP (apache-asp).

Кроме того, Apache поддерживает механизмы CGI и FastCGI, что позволяет исполнять программы на практически всех языках программирования, в том числе C, C++, Lua, sh, Java.

Apache имеет различные механизмы обеспечения безопасности и разграничения доступа к данным. Основными являются:

· ограничение доступа к определённым директориям или файлам;

· механизм авторизации пользователей для доступа к директории на основе HTTP-аутентификации и digest-аутентификации;

· ограничение доступа к определённым директориям или всему серверу, основанное на IP-адресах пользователей;

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

В некоторых MPM-модулях присутствует возможность запуска каждого процесса Apache используя различные uid и gid с соответствующими этим пользователям и группам пользователей.

Также, существует механизм suexec, используемый для запуска скриптов и CGI-приложений с правами и идентификационными данными пользователя. Для реализации шифрования данных, передающихся между клиентом и сервером используется механизм SSL, реализованный через библиотеку OpenSSL. Для удостоверения подлинности web-сервера используются сертификаты X.509. В результате проектирования был разработан web-сервис, взаимодействовать с которым пользователь может по схеме, представленной на рисунке 2.2.

Рис.2.2 - Схема взаимодействия

3. Разработка

3.1 Физическая модель базы данных

Физическая модель базы данных содержит все детали, необходимые конкретной СУБД для создания базы.

На рис.3.1 представлена ER-диаграмма базы данных разрабатываемого проекта.

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

Рис.3.1 - ER-диаграмма базы данных разрабатываемого проекта

Физическая модель БД определяет способ размещения данных в среде хранения и способы доступа к этим данным, которые поддерживаются на физическом уровне. Описание соответствия сущностей логической и физической моделей приведено в табл.3.1. Описание каждой таблицы приведено в табл.3.2 - 3.11.?Описание Sql-кода представлен в приложении Б.

Таблица 3.1 Соответствие сущностей логической и физической модели

Сущность

Таблица

Пользователи

Users

Роль пользователя

User_role

Роль

Role

Результат

Result

Профиль

Profiles

Курсы

Courses

Теория

Theory

Тесты

Tests

Вопросы

Questions

Ответы

Answer

Таблица 3.2 Таблица Users

Имя столбца

Тип

id

Integer

email

Text

password

Text

Таблица 3.3 Таблица Roles

Имя столбца

Тип

id

Integer

name

Text

Таблица 3.4 Таблица User_roles

Имя столбца

Тип

user_id

Integer

Role_id

Integer

Таблица 3.5 Таблица Courses

Имя столбца

Тип

id

Integer

name

Text

descript

Text

Таблица 3.6 Таблица Profiles

Имя столбца

Тип

id

Integer

user_id

Integer

name

Text

surname

Text

Таблица 3.7 Таблица Result

Имя столбца

Тип

id

Integer

user_id

Integer

Course_id

Text

execute

Text

result

Float

Таблица 3.8 Таблица Theory

Имя столбца

Тип

id

Integer

course_id

Integer

name

Text

content

Text

Таблица 3.9 Таблица Tests

Имя столбца

Тип

id

Integer

course_id

Integer

name

Text

descript

Text

Таблица 3.10 Таблица Questions

Имя столбца

Тип

id

Integer

Test_id

Integer

questions

Text

Таблица 3.11 Таблица Answer

Имя столбца

Тип

id

Integer

question_id

Integer

answer

Text

signification

Blob

3.2 Разработка web-интерфейса

В качестве средства для разработки web-интерфейса был выбран фреймворка Angular 2. Это новая улучшенная версия популярной JavaScript-инфраструктуры AngularJS. Этот фреймворк с открытым исходным кодом, который предназначен для разработки. Его цель -- расширение браузерных приложений на основе MVC-шаблона, а также упрощение тестирования и разработки. Angular 2 использует современные возможности web-платформы для доставки приложений с высокой производительностью, автономным функцией. Одной из особенностей Angular является то, что он использует в качестве языка программирования TypeScript. TypeScript является обратно совместимым с JavaScript и компилируется в последний.

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.