Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Описание работ по месту практики, технологии, оборудование

 

В состав работ по месту практики было включено выполнение заданий на программирование модулей навигационного блока, созданного ранее IT-отделом предприятия. Данное задание включало в себя перевод кода выше упомянутого навигационного блока с языка программирования C# на C++ под Linux.

Руководством IT-отдела было выдано техническое задание студентам, а также все необходимые ресурсы для его выполнения (в данном случае, исходный код программы на C# и литература по библиотеке Qt). Техническое задание и исходный код программ представлены ниже, в приложении А.

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

C# (произносится си шарп) — объектно-ориентированный язык про-граммирования. Разработан в 1998—2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как язык разработки приложений для платформы Microsoft.NET Framework и впоследствии был стандартизирован как ECMA-334 и ISO/IEC 23270.

C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML.

 

Переняв многое от своих предшественников — языков C++, Delphi, Модула, Smalltalk и в особенности Java — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем, например, C# в отличие от C++ не поддерживает множественное наследование классов (между тем допускается множественное наследование интерфейсов).

В техническом задании указан пункт о написании алгоритма метода Read() класса NavReader. Данный пункт был выполнен первым. Готовый результат представлен ниже.

 

 

 

 

Следующим этапом после разбора алгоритма работы программы необходимо было разобраться с используемой библиотекой Qt, для этого использовался официальный сайт проекта qt-project.org, официальная документация из Qt Assistant, а также выданная литература (Шлее М. Профессиональное программирование на С++ с использованием Qt4.5).

Qt (произносится «къют») — кросс-платформенный инструментарий разработки ПО на языке программирования C++. Есть также «привязки» ко многим другим языкам программирования: Python — PyQt, PySide; Ruby — QtRuby; Java — Qt Jambi; PHP —PHP-Qt и другие.

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

Существуют версии библиотеки для Microsoft Windows, систем класса UNIX с графической подсистемой X11, Android, iOS, Mac OS X, Microsoft Windows CE, QNX, встраиваемых Linux-систем и платформы S60. В данный момент рассматривается возможность внедрения поддержки Qt в Windows Phone. Также идёт портирование на Haiku и Tizen.

До недавнего времени библиотека Qt также распространялась ещё в одной версии: Qt/Embedded. Теперь эта платформа переименована в Qtopia Core и распространяется как отдельный продукт. Qtopia Core обеспечивает базовую функциональность для всей линейки платформ, предназначенных для разработки приложений для встраиваемых и мобильных устройств (КПК,смартфонов и т. п.).

 

 

Начиная с версии 4.5 Qt распространяется по 3 лицензиям (независимо от лицензии, исходный код Qt один и тот же):

- Qt Commercial — для разработки ПО с собственнической лицензией, допускающая модификацию самой Qt без раскрытия изменений;

- GNU GPL — для разработки ПО с открытыми исходниками, распространяемыми на условиях GNU GPL;

- GNU LGPL — для разработки ПО с собственнической лицензией, но без внесения изменений в Qt.

До версии 4.0.0 под свободной лицензией распространялись лишь Qt/Mac, Qt/X11, Qt/Embedded, но, начиная с 4.0.0 (выпущенной в конце июня 2005), Qt Software «освободили» и Qt/Windows. Следует отметить, что существовали сторонние свободные версии Qt/Windows < 4.0.0, сделанные на основе Qt/X11.

Со времени своего появления в 1996 году библиотека Qt легла в основу тысяч успешных проектов во всём мире. Кроме того, Qt является фундаментом популярной рабочей среды KDE, входящей в состав многих дистрибутивов Linux.

Отличительная особенность Qt от других библиотек — использование Meta Object Compiler (MOC) — предварительной системы обработки исходного кода (в общем-то, Qt — это библиотека не для чистого C++, а для его особого наречия, с которого и «переводит» MOC для последующей компиляции любым стандартным C++ компилятором). MOC позволяет во много раз увеличить мощь библиотек, вводя такие понятия, как слоты и сигналы. Кроме того, это позволяет сделать код более лаконичным. Утилита MOC ищет в заголовочных файлах на C++ описания классов, содержащие макрос Q_OBJECT, и создаёт дополнительный исходный файл на C++, содержащий метаобъектный код.

Qt позволяет создавать собственные плагины и размещать их непосредственно в панели визуального редактора.

 

 

Qt комплектуется визуальной средой разработки графического интерфейса «Qt Designer», позволяющей создавать диалоги и формы в режиме WYSIWYG. В поставке Qt есть «Qt Linguist» — графическая утилита, позволяющая упростить локализацию и перевод программы на многие языки; и «Qt Assistant» — справочная система Qt, упрощающая работу с документацией по библиотеке, а также позволяющая создавать кросс-платформенную справку для разрабатываемого на основе Qt ПО. Начиная с версии 4.5.0 в комплект Qt включена среда разработки «Qt Creator», которая включает в себя редактор кода, справку, графические средства «Qt Designer» и возможность отладки приложений. «Qt Creator» может использовать GCC или Microsoft VC++ в качестве компилятора и GDB в качестве отладчика. Для Windows версий библиотека комплектуется компилятором, заголовочными и объектными файлами MinGW.

Следуя техническому заданию, был переписан класс NMEA. В данном классе использовались следующие библиотеки Qt:

- QDateTime (в состав которой входят классы QDate, QTime, QDateTime);

- QStringList (классы QString и QStringList).

 

Далее был переписан класс NavReader, который использовал следующие библиотеки Qt:

- QSerialPort (Работа с последовательными портами);

- QThread (Работа с потоками);

- QTimer (таймер);

- QString (класс строк);

- QObject;

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

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

Механизм сигналов и слотов типобезопасен. Сигнатура сигнала должна совпадать с сигнатурой слота-получателя. (Фактически слот может иметь более короткую сигнатуру чем сигнал который он получает, так как он может игнорировать дополнительные аргументы). Так как сигнатуры сравнимы, компилятор может помочь нам обнаружить несовпадение типов. Сигналы и слоты слабо связаны. Класс, который вырабатывает сигнал не знает и не заботится о том, какие слоты его получат. Механизм сигналов и слотов Qt гарантирует, что если мы подключим сигнал к слоту, слот будет вызван с параметрами сигнала в нужное время. Сигналы и слоты могут принимать любое число аргументов любого типа. Они полностью типобезопасны.

Все классы, наследуемые от QObject или его дочерних классов (например, QWidget) могут содержать сигналы и слоты. Сигналы вырабатываются объектами когда они изменяют свое состояние так, что это может заинтересовать другие объекты. При этом он на знает и не заботится о том что у его сигнала может не быть получателя.

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

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

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

 

В результате выполненных работ были освоены основные особенности реализации программных решений предприятия. Изучены базовые принципы C# и C++, а также кросс - платформенного инструментария Qt. Были переписаны программные интерфейсы для предоставления доступа к информации полученной с навигационного устройства по протоколу NMEA.

Аспекты, которые не были выполнены за время производственной практики:

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

 

ЗАКЛЮЧЕНИЕ

 

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

Основными задачами производственной практики являются:

1. Получение практического опыта работы;

2. Улучшение качества профессиональной подготовки;

3. Воспитания специалиста во взаимоотношениях с коллективом;

4. Закрепление полученных знаний по общим и специальным дисциплинам.

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

1. Охрана труда и техника безопасности;

2. Структура и основные направления деятельности предприятия;

3. Основы программирования с использованием Qt на C++;

4.Базовые принципы решения реальных задач в области программного обеспечения;

5.Работа с последовательными портами посредством Qt;

6. Работа с потоками в С++;

7. Механизм сигналов и слотов в Qt;

 

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

 

1. Трудовой кодекс российской федерации:федер. закон от 30 дек. 2001 г. № 197-ФЗ. М.: ОТиСС, 2002. 142 с.

2. Типовая инструкция ТОИ Р-45-084-01 Министерства РФ по связи и информатизации: утвержденная приказом №162 от 02.07.2001 г.М.: ОТиСС, 2002. 5 с.

3. Assistant Qt. URL: http://doc.crossplatform.ru/qt/

4. Шилд Г. С. С++ Базовый курс, 3-е издание.:Пер. с англ. – М.: Издательский дом «Вильямс», 2010. – 624с.:ил. – Парал. Тит. Англ.

5. Шлее М. Qt4.5. Профессиональное программирование на С++. СПб.: - БХВ-Петербург, 2010 – 896с.

 

Приложение А

А.1. Техническое задание

Модуль “Navigator”

Получает информацию с навигационного устройства (протокол NMEA) и предоставляет к ней доступ через программный интерфейс.

 

1. Переписать класс NMEA.

 

Ожидаемый результат: проект Qt, в котором реализован класс NMEA и

процедура его тестирования.

 

2. Класс NavReader. Работа с Com-портом. Методы:

 

- Public static SerialPort InitCom(string port);

- Private void SetComPort(string port);

- Private void CheckNavigatorConnection(object sender, EventArgs e);

- Private bool ConnectToNavigator();

- Private bool OpenComPort(SerialPort Com);

- Private bool TestRead();

 

Ожидаемый результат: проект Qt, в котором реализован класс NavReader (все свойства и перечисленные методы) и процедура тестирования реализованных методов.

 

3. Класс NavReader. Чтение навигационной информации.

 

Оформить алгоритм метода Read класса NavReader (в MS Visio).

Оформлять по ГОСТам.

Переписать метод private void Read().

Ожидаемый результат: проект Qt, в котором реализован класс NavReader (все свойства и метод Read) и процедура тестирования метода Read реализованных методов.

 

4. Класс NavReader. Работа с потоками. Методы:

- Конструктор;

- Public byte NaviSourse;

- Public void LoadDefaultPosition();

- Public static int TestNaviPort(string port);

- Public void StartRead();

- Public void StopRead();

 

Ожидаемый результат: проект Qt, в котором реализован класс

NavReader (Все свойства и перечисленные методы) и процедура тестирования реализованных методов.

<== предыдущая лекция | следующая лекция ==>
 | 


Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных