Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

КЛЮЧЕВЫЕ АСПЕКТЫ ВЫСОКОУРОВНЕВЫХ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

Содержание:

ВВЕДЕНИЕ

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

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

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

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

Задачи исследования:

  1. Анализ ключевых аспектов высокоуровневых языков программирования, концепций и парадигм.
  2. Анализ популярных на практике языков программирования высокого уровня.
  3. Обзор преимуществ и особенностей языков программирования Python, С++, Java и C#.
  4. Описание особенностей реализации графического приложения с помощью языка Python.
  5. Описание разрабатываемого проекта приложения и его интерфейсной составляющей.

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

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

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

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

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

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

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

В рамках данной работы было рассмотрено 20 литературных источников по языкам программирования, наиболее полезными из которых стали труды С. Синицина и Г. Россума.

ГЛАВА 1. КЛЮЧЕВЫЕ АСПЕКТЫ ВЫСОКОУРОВНЕВЫХ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

1.1. Используемые концепции, понятия и определения

Языки программирования (ЯП) - формальные знаковые системы, предназначенные для записи компьютерных программ. Языки программирования определяют набор лексических,  синтаксических и  семантических правил, определяющих внешний вид программы и действия, которые выполнит исполнитель под её управлением.

Алфавит – фиксированный для конкретного ЯП набор используемых символов, на основе которых составляется программный код.

Синтаксис – система правил, которые регламентируют допустимые программные конструкции конкретного ЯП, состоящие из символов алфавита.

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

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

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

Большая часть ЯП опирается на ряд конструкций для манипулирования структурами данных и управления вычислительными процессами.

Высокоуровневые ЯП разработаны для оперативности и удобства использования для разработки приложений программистами [3].

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

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

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

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

В настоящее время в среде разработчиков принято утверждать, что языки высокоуровневого программирования, имеющие прямой доступ непосредственно к памяти и имеют различные вставки кода на ассемблере, являются ЯП с достаточно низким уровнем абстракции, что не всегда удобно [4].

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

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

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

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

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

Объектно-ориентированная парадигма

Большая часть современных ЯП высокого уровня поддерживает парадигму ООП [3].

  В области разработки программных систем наиболее развитой и широко используемой, на данный момент, является ООП. Эта парадигма включает следующие элементы (рис. 1) [5]:

  • анализ – это метод, исследующий требования клиента к системе в виде множества взаимодействующих абстракций;
  • проектирование – это методология, объединяющая объектно-ориентированную декомпозицию и определенную систему обозначений;
  • программирование (конструирование) – это процесс непосредственного кодирования (реализации) проекта системы, с использованием объектно-ориентированного ЯП.

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

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

На развитие парадигмы ООП существенное значение оказало концептуальные понятия события и компонента [13].

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

При этом, когда создается объект, принято считать что он является экземпляром класса, который его описывает.

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

Элементы ООП приведены на рисунке 1.

Рисунок 1 – Элементы ООП

Объектно-ориентированное программирование можно разделить на две главные части.

Первая отражает приемы и стратегии, используемые при проектировании и разработке программ (шаблоны проектирования, методы оптимизации объектного кода и др.) [15].

Вторая описывает существующие структуры программирования, которые доступны в конкретном ЯП на базе использования объектно-ориентированной методологии разработки. Данная часть содержит такие базовые операции [3]:

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

Агенто-ориентированная парадигма

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

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

Основу развитию АОП положила статья И. Шоэма «Агентно-ориентированное программирование», содержащей взгляд на организацию вычислений, которые связаны с взаимодействием в процессе вычислений ряда агентов.

Агент рассматривается как «прозрачный ящик» и происходит моделирование его внутренние переменных (мотивы, обязательства, убеждения, способности к принятию решений). Такие мотивы лежат в основе решений агента, а убеждения определяют возможные логические ограничения на них [13].

Общение агентов происходит с помощью протоколов коммуникации. АОП парадигма должна включать следующие основные компоненты:

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

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

АОП уточняет эти рамки, фиксируя внимание на активности модулей – агентов и изменения их возможных состояний через анализ обязательств, убеждений и намерений. Наличие у агента целеобразования обеспечивает новый уровень автономии.

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

Агент, в отличие от объекта, принимает на себя обязательства или, отказывается от выполнения заданной работы, например из-за занятости другой задачей [18].

Типы агентов в АОП приведены в таблице 1.

Таблица 1 – Типы агентов в АОП

Характеристики

Тип агента

Простой

(Cмыш-ленный (smart)

Интеллек­-

туальный

(intelligent)

Действитель­но (truly) интел-лектуаль­ный

Автономное выполнение

+

+

+

Взаимодействие с другими агентами и/или пользовате­лями

+

+

+

+

Слежение за окружением

+

+

+

+

Способность использовать абстракции

+

+

+

Способность использовать предметные знания

+

+

Возможность адаптивного

поведения для достижения целей

+

+

Обучение из окружения

+

+

Толерантность к ошибкам и/или неверным входным сигналам

+

Re3

al -time-исполнен не

+

Естественно-языковое

взаимодействие

+

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

Две базовые характеристики агента – целенаправленность и автономность отличать его от других объектов (подпрограмм, модулей и процедур).

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

Если он обладает знаниями о среде, собственных целях и вариантах их достижения, то агента называют когнитивным. В связи с этим может быть проведена граница между агентами [4].

Модель поведения агента в общем виде приведена на рисунке 2.

Рисунок 2 – Модель поведения агента в общем виде

Выводы по главе 1

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

ГЛАВА 2. АНАЛИЗ ПОПУЛЯРНЫХ НА ПРАКТИКЕ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ

2.1. Преимущества и особенности языка Python

Python это современный объектно-ориентированный язык с поддержкой динамической типизации, автоматического процесса управления памятью, высокоуровневых гибких структур данных (словари, кортежи, списки). Все объекты в Python подразделяются на атомарные и ссылочные. К первым относятся int, long, complex.

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

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

Python позволяет определять тип переменной на этапе исполнения программы. В связи с этим вместо присваивания переменной определенного значения более корректным является использование фразы «связывания определенного значения с конкретным именем». В языке поддерживаются такие встроенные типы данных как: бинарный, строковый, Unicode, целочисленный с произвольно заданной степень точности, число с плавающей запятой, и ряд других [7].

Из современных коллекций язык обладает поддержкой таких встроенных структур как: список, словарь, кортеж (модифицируемый список), множество и др. Следует отметить, что все значения, также как и в Ruby, являются объектами, причем это характерно и для функций, модулей, методов и классов.

Основной реализацией языка является интерпретатор CPython, который поддерживает значительное число актуальных операционных платформ. Данный инструмент распространяется под свободной лицензией, это обеспечивает его применение без ограничений в любых, даже пропиетарных, приложениях. Разработаны версии интерпретаторов для JVM, MSIL и ряда других.

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

Строки и кортежи, относящиеся к встроенным коллекциям, являются не изменяемыми, а словари и списки – переменными, их можно модифицировать динамически. Поэтому кортежи в данном языке работают существенно быстрее чем списки [10].

Преимущества языка следующие.

1. Интерпретируемость. Это позволяет существенно упростить и облегчить отладку программ, однако при этом теряется скорость выполнения приложения.

2. Динамическая типизация. Это повышает общую скорость разработки кода.

3. Гибкая поддержка модульности. Разработанный модуль может быть легко интегрирован в код произвольных приложений.

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

5. Автоматическая «сборка мусора», т.е. освобождение разработчика от необходимости слежения за утечками памяти.

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

7. Кроссплатформенность. Это позволяет запускать программное приложения, написанное на языке Python, на практически любой операционной системе, где установлен интерпретатор языка нужной версии и сборки [16].

2.2. Преимущества и особенности языка С++

С++ в настоящее время считается одним из наиболее сложных и функциональных языков, которые применяются при разработке программных приложений в сфере коммерции. В последние годы степень востребованности языка несколько изменилась, по причине того, что стал активно развиваться язык Java, поэтому некоторые программисты перешли с С++ на Jаvа [1]. Эти языки имеют много общего, поэтому зная один из них досконально для разработчика не составит большого друга оперативно перейти на другой язык.

Отличия C++ от C:

  • объектно-ориентированное программирование через классы. C++ предоставляет— абстракцию, инкапсуляцию, наследование и полиморфизм;
  • обобщенное программирование через шаблоны функций и классов;
  • стандартная библиотека C++ состоит из стандартной библиотеки C и библиотеки шаблонов, которая предоставляет широкий набор контейнеров и алгоритмов;
  • вспомогательные типы данных;
  • обработка исключений;
  • виртуальные функции;
  • пространства имён;
  • встраиваемые функции;
  • перегрузка операторов;
  • перегрузка имён функций;
  • ссылки и операторы управления памятью [2].

В языке фактически отсутствуют элементарные операций и типы данных. В частности нет типа матрица с логической операцией обращения или элемента «строка» с поддержкой операций конкатенации. В случае, когда программисту необходимо использовать такие типы данных он способен самостоятельно инициализировать их в коде. Создание проекта на С++ в Code Blocks приведено на рисунке 3.

Рисунок 3 – Создание проекта на С++ в Code Blocks

С++ - это язык программирования, который включает в себя свойства низко-уровневых и высокоуровневых языков. Данный язык программирования используется для разработки разнообразного программного обеспечения [12].

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

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

В процессе разработки языка первоочередной приоритет был поставлен на простоту и скорость работы. В связи с этим принципиальное значение было уделено вопросу совместимости с языком С, что явилось причиной использования большей части синтаксических конструкций [2].

C++ является своеобразным «предком» таких языков программирования, как C# и Java. Базой синтаксиса С++ является синтаксис языка С, программы написанные на этих языках поддерживаются и компилируются в своих компиляторах, хотя некоторые различия все таки есть.

Программа написанная на языке С++ состоит из функций. Каждый блок программы помещается в фигурные скобки {}. Функция main() – это главный блок приложения, написанного на языке С++. В круглых скобках записываются основные параметры.

Запись int main() сообщает о возвращении целочисленного значения. Если значение не возвращено, то это означает, что программа завершилась в аварийном режиме.

Для возвращения целочисленного значения перед завершением функции записывается строка return 0 [1]

В С++ существуют следующие типы данных [14]:

  • символьные;
  • целочисленные знаковые;
  • целочисленные без знаковые;
  • с плавающей точкой;
  • логический.

2.3. Преимущества и особенности языка С#

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

Преимущества языка: включает расширенную и гибкую поддержку событийно-ориентированного программирования, эффективно интегрируется с существующими продуктами от Microsoft. Главными недостатками языка является довольно сложный синтаксис и не высокая, в сравнении с С++, производительность.

Предлагаемые средства разработки ПО продукты позволяют оперативно и гибко разрабатывать различные типы приложений, в частности, согласно [8]:

  • консольные приложения;
  • приложения с графическим интерфейсом, на базе использования популярной среди разработчиков десктопных решений технологии Windows Forms;
  • веб-сайты, на базе использования ASP.net.

Особенностями данного языка являются:

    • язык создавался параллельно с технологией .Net, что позволило разработчикам интегрировать все необходимые механизмы обеспечение функциональных взаимосвязей фреймворка, в том числе FCL и CLR;
    • это полноценный объектно-ориентированным язык, причем даже примитивные типы данных языка представлены в качестве отдельных классов;
    • поддержка механизмов наследования, инкапсуляции и полиморфизма;
    • разработан на базе использования C и C ++, что позволило интегрировать наиболее функциональные возможности этих высокоуровневых языков программирования;
    • с помощью поддержки ряда фреймворков, выступающих в виде некой надстройки над операционной системой пользователя, разработчики C# могут использовать механизмы создания и работы с виртуальной машиной, аналогично существующим технологиям языка Java [17].

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

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

Данные решения реализуются для всех платформ, которые поддерживаются вендором средств разработки Microsoft. К таким платформам относятся операционные системе Windows 7, 8, 10, Windows Mobile, операционная система в Xbox, а также осуществляется интеграция Microsoft Silverlight и Azure [4].

Отличия в реализации синтаксиса C# и Visual Basic приведены на рисунке 4.

Рисунок 4 - Отличия в реализации синтаксиса C# и Visual Basic

2.4. Преимущества и особенности языка Java

Java - это популярный высокоуровневый язык программирования, который был выпущен известной ИТ компанией Sun Microsystems еще в 1995 году.

В настоящее время разработкой языка Java занимается корпорация Oracle. Синтаксис данного языка во многом похож на язык C++, на котором Java и был изначально разработан [20].

Разрабатываемые Java приложения компилируются в отдельный байт-код (формат .class), который при выполнении интерпретируется JVM (виртуальной машиной Java) для конкретной аппаратно-программной платформы или операционной системы.

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

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

Для обхода этого недостатка языка существуют механизмы интеграции отдельных модулей низкоуровневого управления, которые могут быть написаны на других языках (ассемблер, С++ и др.).

При создании Java изначально были сформулированы такие принципы:

  • синтаксис должен быть максимально простым, гибким, удобным и привычным пользователю-разработчику;
  • высокая производительность и безопасность процесса разработки и реализации исполняемых приложений;
  • кроссплатформенность по принципу “Once Write –Anywhere Use”;
  • поддержка масштабируемости и мультизадачности посредством возможности создания параллельных процессов и потоков [19].

Кроссплатформенность достигается путем компиляции изначального Java-кода (формат .java) в байт-код (.class), представляющего собой набор упрощенных команд. После этого разработанное приложение может быть выполнено на любой поддерживаемой платформе, т.е. на платформе, которая имеет установленную JVM, способную интерпретировать байткод в код, учитывающий специфику конкретной ОС и процессора. Архитектура Java окружения приведена на рисунке 5 [6].

Рисунок 5 – Архитектура Java окружения

Главным преимуществом использования байт-кода является портативность. Т.е. байт-код переносится на любую платформу и запускается без установки, достаточно просто наличие JVM. При этом, недостатком является необходимость выделения дополнительных вычислительных ресурсов на интерпретацию, т.е. мощности процессора и оперативной памяти задействуются в большем объеме. В связи с этим некоторые считают, что Java является достаточно медленным языком разработки.

В Java практически все структуры данных являются объектами. Исключением являются такие примитивные типы данных, как целочисленные (int), символы (char), логический тип данных (boolean) и др. Также, в Java все объекты являются производными от самого главного объекта (Object), который является их потомком, посредством которого обеспечивается их базовое поведение и все основные свойства.

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

Выводы по главе 2

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

ГЛАВА 3. ОПИСАНИЕ ОСОБЕННОСТЕЙ РЕАЛИЗАЦИИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ С ПОМОЩЬЮ ЯЗЫКА PYTHON

3.1. Описание разрабатываемого проекта приложения

В рамках данного раздела осуществляется разработка информационной системы координирования грузопотока в порту.

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

Рисунок 6 - Диаграмма классов программного обеспечения

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

Класс MainForm.py - выполняет построение интерфейса программного обеспечения. К элементам интерфейса относятся функциональные элементы (кнопки), графические элементы, текстовые элементы, окна ввода и вывода информации и прочее. Такой класс позволяет создавать графическое наполнение программного средства, и организовывать эргономичные элементы управления.

Класс InfoWidgetForm.py - класс отвечающий за вывод технической информации и справок. Позволяет добавить более удобной адаптации программного обеспечения при его использовании.

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

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

Класс PerebrosForm.py - класс который строит форму перегрузки, а также делает ее управляемой. Форма перегрузки построена из элементов списка, текстовых полей, а также информативных боксов для вывода информации о количестве груза.

Класс Form.py - позволяет выводить текстовую информацию в форму интерфейса.

Класс RegistrUser.py - строит окно регистрации и авторизации пользователя программного средства. Компонует элементы ввода и вывода информации.

Класс LoginUser.py - делает форму интерфейса активной, а также добавляет функциональное взаимодействие элементов.

Класс AddTovar.py - создает графическое окно добавления груза на склад. Для большего быстродействия программного средства, в классе разработан функцию управления графическими объектами.

Класс TehnikaWidgetForm.py - графическое окно технических средств порта.

Класс TehnikaWidgetCode.py - позволяет использовать систему управления графическим окном техники порта.

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

  1. Подача заявления в порт - позволяет сформировать бланк-заявление от судовладельца, на выполнение перевалочных операций с разрешением на вход в порт. Такая заявление состоит из представлений нормативных документов, которые присутствуют в судовладельца, а также документов на груз.
  2. Обработка заявления оператором - выполнение проверочных действий в отношении представленных документов. Такое решение не может быть автоматизировано, за счет сложности в выявлении подделки. Поэтому автоматизация этого процесса не является оптимальной. После подтверждения заказа от судовладельца, программная система позволяет выполнять следующие действия по перевалочных процессов.
  3. Определение оптимального терминала - к основанию относится способ принятия решения, который анализирует технические характеристики судна, личности груза, а также количество груза. Это позволяет создать оптимальное решение, относительно терминала, на котором будут выполняться перегрузочные операции.
  4. Проверка на возможность добавления в очередь - выполняет проверку даты и причала, на возможность перевалочных процессов. Такое решение автоматизирует большое количество организационных процессов, за счет построения многоуровневых проверок. Такая проверка включает в себя два конечных решения, при каждом из которых доступны различные возможные варианты.
  5. Бронирование даты - используется после положительной проверки на возможность добавления в очередь. Фиксирует дату и причал по определенному судном. Для всех судов, причал становится недоступным на определенное время.
  6. Подготовка необходимой техники - организует бронирование перевалочный техники, по типу груза. Во время такого бронирования, технические средства происходят недоступны другим причалам терминала, и сосредотачиваются на скоростное перевалки.
  7. Расчет стоимости перевалки - позволяет определить финальную стоимость всех перевалочных процессов, к которым необходимо отнести портовые сборы, швартовку, работу техники, складов, открытой площадки, персонала и тому подобное.
  8. Расчет конечного срока перевалки - осуществляется за счет анализа перевалки первых суток. Если результат является хорошим, программная система планирует конечный срок перегрузки, и позволяет всем другим судам бронировать дату, после указанного срока.
  9. Определение другой даты - вариант, который возникает после негативного прохождения проверки на возможность добавления в очередь. Программное средство анализирует все другие возможные даты и причалы, согласно специфики груза. После определения новой даты, она направляется заказчику перегрузки.
  10. Ожидание подтверждения от заказчика - программное средство перемещает в виртуальную очередь заказ на перегрузку в другую дату, и ожидает подтверждения таких действий от заказчика услуг.

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

3.2. Описание интерфейсной составляющей программного приложения

Программное обеспечение выполнено в традиционном стиле прикладного обеспечения. Традиционным является использование упрощенного и минималистичного интерфейса, который упрощает использование системы. Главная страница (рисунок 7), разработанная в стиле демонстрации названия программного обеспечения, и начала использования после регистрации и авторизации пользователя.

Рисунок 7 - Главная страница программного обеспечения по управлению грузооборотом порта

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

class Window (QtWidgets.QWidget):

def __init __ (self, parent = None):

QtWidgets.QWidget .__ init __ (self, parent)

self.ui = MainForm ()

self.ui.setupUi (self)

self.Data = None

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

Окно регистрации пользователя в программном обеспечении изображено на рисунке 8.

Рисунок 8 - Окно регистрации пользователя

Регистрация пользователей в программном обеспечении выполняется за счет проверки главного поля с должности пользователя (рисунок 9). В зависимости от выбранной должности пользователя, выполняется различный перечень возможностей для каждого пользователя.

Рисунок 9 - Окно выбора должности пользователя программного обеспечения

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

def RegistrCliked (self):

name = self.ui.RegistrFirstName.text ()

fio = self.ui.RegistrLastName.text ()

login = self.ui.RegistrLogin.text ()

password = self.ui.RegistrPassword_1.text ()

password_2 = self.ui.RegistrPassword_2.text ()

dolgnost = self.ui.RegistrDoljnostb.currentText ()

Функция проверяет возможность создания нового пользователя программного обеспечения, его возможностей и др. После авторизации пользователя, выполняется переход в главное окно перевалочных процессов. Главное окно состоит из перечня терминалов морского транспортного порта, и складов, расположенных в терминале (рисунок 10).

Рисунок 10 - Главное окно терминалов порта

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

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form (object):

def setupUi (self, Form):

Form.setObjectName ( "Form")

Form.setWindowModality (QtCore.Qt.NonModal)

Такой класс строит окно, а также позволяет построить систему управления элементами главного окна. Главной функцией программного обеспечения является придание груза на терминал порта (рисунок 11)

Рисунок 11 - Окно придания груза на терминал

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

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

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

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

Рисунок 12 - Окно видов груза для типа металло-проката

Рисунок 13 - Окно описания груза

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

 

Рисунок 14 - Окно создания перегрузочных операции

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

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

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

Рисунок 15 - Окно перегрузочных операций

Выводы по главе 3

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

ЗАКЛЮЧЕНИЕ

В рамках выполнения данной курсовой работы были решены следующие поставленные задачи:

  1. Проведен анализ ключевых аспектов высокоуровневых языков программирования, концепций и парадигм.
  2. Осуществлен анализ популярных на практике языков программирования высокого уровня.
  3. Выполнен обзор преимуществ и особенностей языков программирования Python, С++, Java и C#.
  4. Описаны особенности реализации графического приложения с помощью языка Python.
  5. Описан разрабатываемый проект приложения и его интерфейсной составляющей.

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

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

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

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

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

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

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

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

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

  1. Джосаттис Н.М. Стандартная библиотека C++. Справочное руководство. – М.: Вильямс, 2014. – 1136 c.
  2. Дьюхерст С. C++. Священные знания. – СПб.: Символ-Плюс, 2012. – 231
  3. Жилов Д.А. Теория информационных систем: опыт построения. – М.: Мир, 2013. –523 с.
  4. Иванова Г.С. Основы программирования Учебник для вузов. – М.: Изд-во МГТУ им. Н.Э. Баумана, 2012. – 303 с.
  5. Касаткин В. Информатика и алгоритмы. – М.: Просвещение, 2014. – 167 с.
  6. Лафоре Р. Структуры данных и алгоритмы в Java. Классика Computers Science. 2-е изд. – СПб.: Питер, 2013. — 704 с.
  7. Лутц М. Изучаем Python. – СПб.: Символ-Плюс Медиа, 2012. – 1280 с.
  8. Нейгел К. C# 5.0 и платформа .NET. – М.: Академия, 2014. – 1440 с.\
  9. Рихтер Д. Программирование на платформе Microsoft .NET Framework 4.0 на языке C#. – СПб.: Питер, 2012. – 720 с.
  10. Россум Г. Язык программирования Python. – СПб.: Символ-Плюс Медиа, 2012. – 454 с.
  11. Саммерфилд М. Программирование на Python 3. – СПб.: Символ-Плюс, 2012. – 608 с.
  12. Синицын С. Программирование на языке С++. – СПб.: Академия, 2012. – 311 с.
  13. Склярев О.М. Разработка программных продуктов на языках высокого уровня. – СПб.: Глоунас, 2014. – 541 с.
  14. Страуструп Б. Программирование. Принципы и практика использования C++. – М.: Вильямс, 2014. – 1248 с
  15. Соболь Б. В., Общая информатика: учебник. – М.: Феникс, 2013. – 263 с.
  16. Сузи Р.А. Язык программирования Python. – М.: Интуит, 2016. – 351 c.
  17. Федоров А. Г. Создание Windows-приложений на C#. – М.: ТОО «Компьютер Пресс», 2014. – 297 с.
  18. Хорев П.Б. Объектно-ориентированное программирование. – Москва: Академия, 2012. – 446 с.
  19. Шилдт Г. Java. Полное руководство, 9-е изд. – М.: ООО “И.Д. Вильямс”, 2014. – 1201 с.
  20. Эванс Б., Вербург М. Java. Новое поколение разработки. – СПб.: Питер, 2014. — 560 с.