Курсовые - Разработка приложения управления организацией

Обоснование выбора технологий

Для написания курсового проекта использовался язык программирования JavaScript, используя принципы объектно-ориентированного программирования.

         Для создания сервера использовался RAGE Multiplayer. Серверная часть этого мультиплеера использует Node.js. Клиентская часть на чистом JS. Связь между серверной и клиентской частью обеспечивает API, предоставляемое мультиплеером. Приложение написано в CEF. CEF позволяет делать обертку над нативными функциями в пространстве объектов виртуальной машины JavaScript. Ресурсоемкие операции по обработке больших массивов данных можно переложить на более строгие и быстрые языки программирования. CEF позволяет обрабатывать события навигации, скачивания файлов и так далее.

         Серверная часть написана на Node.js. Node.js - среда выполнения JavaScript, основанная на JavaScript движке V8 из Chrome.

Почему Node.js?

  • Node.js использует управляемую событиями, неблокирующую модель ввода-вывода, которая делает ее легкой и эффективной
  • Пакетная экосистема Node.js, npm, является самой большой экосистемой библиотек с открытым исходным кодом в мире
  • V8 может работать автономно или может быть встроен в любое приложение C++. Благодаря этому, вы можете написать свой собственный код на C++, и сделать его доступным для JavaScript

Клиентская часть написана в виде SPA (Single page application) на React. React - JavaScript-библиотека с открытым исходным кодом для разработки пользовательских интерфейсов. Эта библиотека стала одной из самых любимых и востребованных технологий, а также самой трендовой технологией на StackOverflow.

Почему React?

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

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

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

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

Терминология ООП

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

Класс - определяет характеристики объекта. Класс является описанием шаблона свойств и методов объекта.

Объект - экземпляр класса.

Свойство - характеристика объекта, например, цвет.

Метод - возможности объекта, такие как ходьба. Это подпрограммы или функции, связанные с классом.

Конструктор - метод, вызываемый в момент создания экземпляра объекта. Он, как правило, имеет то же имя, что и класс, содержащий его.

Абстракция - совокупность комплексных наследований, методов и свойств объекта должны адекватно отражать модель реальности.

Принципы объектно-ориентированного программирования:

  • Наследование. Возможность выделять общие свойства и методы классов в один класс верхнего уровня (родительский). Классы, имеющие общего родителя, различаются между собой за счет включения в них различных дополнительных свойств и методов.
  • Инкапсуляция. Свойства и методы класса делятся на доступные из вне (опубликованные) и недоступные (защищенные). Защищенные атрибуты нельзя изменить, находясь вне класса. Опубликованные же атрибуты также называют интерфейсом объекта, т. к. с их помощью с объектом можно взаимодействовать. По идеи, инкапсуляция призвана обеспечить надежность программы, т.к. изменить существенные для существования объекта атрибуты становится невозможно.
  • Полиморфизм. Полиморфизм подразумевает замещение атрибутов, описанных ранее в других классах: имя атрибута остается прежним, а реализация уже другой. Полиморфизм позволяет специализировать (адаптировать) классы, оставляя при этом единый интерфейс взаимодействия.

Преимущества ООП:

  • Возможность лёгкой модификации (при грамотном анализе и проектировании)
  • Возможность отката при наличии версий
  • Более легкая расширяемость
  • «Более естественная» декомпозиция программного обеспечения, которая существенно облегчает его разработку.
  • Сокращение количества межмодульных вызовов и уменьшение объемов информации, передаваемой между модулями.
  • Увеличивается показатель повторного использования кода.

 

Отличия ООП в JavaScript.

Объект в JavaScript — это просто коллекция пар ключ-значение (и иногда немного внутренней магии). Однако, в JavaScript нет концепции класса. К примеру, объект с свойствами {name: Linda, age: 21} не является экземпляром какого-либо класса или класса Object. И Object, и Linda являются экземплярами самих себя. Они определяются непосредственно собственным поведением. Тут нет слоя метаданных (т.е. классов), которые говорили бы этим объектам как нужно себя вести.

Модель прототипного ОО приносит несколько новых динамичных и экспрессивных путей решения старых проблем. В ней также представлены мощные модели расширения и повторного использования кода (а это и интересует людей, которые говорят об объектно-ориентированном программировании). Однако, эта модель даёт меньше гарантий. Например, нельзя полагаться, что объект x всегда будет иметь один и тот же набор свойств.

В отличие от Java и С#, в JavaScript нет ключевого слова private. Однако в JavaScript есть определенная договоренность по использованию «приватных» значений — добавление нижнего подчеркивания перед словом. Однако в ES6 нам доступен вызов объекта WeakMap, который позволяет создавать приватные свойства.

Getter-ы и setter-ы обычно используются в классических объектно-ориентированных языках для обеспечения инкапсуляции. Они не особо нужны в JavaScript, но, у нас динамический язык. C любой точки зрения, они позволяет обеспечить proxy для запросов на чтение и запись свойств.

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

 

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

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться