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

Концептуальное моделирование – это построение семантической модели предметной области, то есть информационной модели наиболее высокого уровня абстракции. Данная модель строится без учета СУБД или модель данных. Понятия «концептуальная модели», «сематической модели» и «инфологической модели» являются одним и тем же. Также в этом контексте могут использоваться понятия «модели предметной области» и «модели базы данных», потому что они является образом БД или предметно области для этой реальности [41].

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

Обычно концептуальная модель описывает:

· физическое состояние объектов и связи между ними;

· описание целостности данных и манипуляциями с ними.

Перечень действий абитуриента при подаче документов ВУЗ:

1. Регистрация персональных данных, а АИС «Приёмная».

2. Если абитуриент поступает по Результатам ЕГЭ, то ему нет необходимости проходить внутренние испытания.

3. Иначе прохождение внутренних испытаний по 3 профильным предметом

4. Обработка результатов внутренних испытаний с помощью ПО «TestsAcad»

5. Прохождение конкурса;

6. В случае удачного прохождения предыдущего этапа зачисление на выбранное направление подготовки.

7. На рисунке 2 представлена функциональная диаграмма работы Приёмной комиссии.

Рисунок 2 – Функциональная диаграмма работы Приёмной комиссии

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

Чаще всего программное обеспечение хранится как исполняемый модуль (независимый исполняемый файл или совокупность файлов). Программное обеспечение в основном хранится на жёстком диске или на сервере локальной сети и при необходимости подгружается в опиративную памть (ОЗУ) компьютера.

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

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

Написание исходников программ на определённых языках программирования облегчает процес взаимодейстия человека и ЭВМ. Для более удобного восприятия написаного кода и взаимозаменяемости разработчиков используются коментариии, которые допустимы в большинстве языков программирования. Для исполнения на компьютере код программы конвертируется (компилируется) в машинный [42].

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

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

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

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

В процессе выбора языка программирования необходимо учитывать множество аспектов. К слову, если для разработки динамической Web-страницы лучшим вариантом будет Java Server Pages (JSP), но некоторым может импонировать PHP или же аналогичный язык сценариев. Не существует какого-то одного конкретного языка программирования, который идеально подходил бы для любой задачи. Можно опираться на такие факторы производительности, а также безопасности корпоративных приложений, в сравнении с таким как количество строк кода. В процессе выбора любого IDE или языка программирования необходимо идти на какие – либо компромиссы.

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

Еще выбирая IDE необходимо учитывать и способность написания кроссплатформенных приложений

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

· гибкость языка;

· целевая платформа;

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

· поддержка и сообщество;

· производительность.

Важнейшим фактором считается платформа, в которой программа будет функционировать. Приведем для примера C и Java™. В условиях, когда программа разработана на C и должна функционировать на машинах с Linux® и Windows, будут необходимы два разных исполняемых файла и компиляторы для платформ. При условии разработки на Java сконструированного байт-кода будет вполне достаточно для функционирования программы на любом компьютере с установленной в ней, виртуальной Java-машины [23].

Аналогичный аргумент можно применить и для Web-сайтов. В принципе они должны выглядеть и функционировать одинаково на любых браузерах. Применение тегов HTML5 и CSS3 без учета совместимости с браузерами приведет к неоднозначному поведению и отображению сайта в разных браузерах.

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

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

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

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

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

В качестве примера возьмем два варианта Web-приложения, разработанных на Python и на Java. Основываясь на данном тестировании можно прийти к выводу, что в однородной среде приложение, разработанное на Java, должно функционировать быстрее, чем приложение, разработанное на Python. Но, если в качестве оболочки мы возьмем одноядерную x86 Ubuntu Intel Q6600, то это оправдано, т.к. ограничена вычислительная мощность. Если взять Web-приложение, функционирующее в облачной среде на Google App Engin, то в данном приложении может применять неограниченную процессорную мощность, и обе программы вернут результаты практически за одно и то же время. Теперь главным аспектом выбора будет удобство обслуживания и количество строк кода.

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

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

Язык Perl дает хороший пример значения сообщества. Архив Comprehensive Perl Archive Network (CPAN) поддерживается стараниями сообщества. Основная задача CPAN – помощь программистам в поиске программ и модулей, не включенных в стандартный дистрибутив. Структура данной оболочки децентрализована; авторы обслуживают и корректируют свои собственные модули. Обычном делом является формирование ответвлений и конкурирующих модулей для одной и той же цели или задачи.

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

Исходя из всего вышеперечисленного для создания среды тестирования было принято решение использовать интегрированную среду разработки Lazarus.

Оболочка визуального программирования Lazarus работает под каждой системой семейства Windows не младше Windows 2000, а также на многих Unix подобных системах и позволяет разработчику использовать все блага графического интерфейса. Так как около 80% всех пользователей используют оболочки семейства Windows, было решено использовать версию Lazarus 1.2.6 win x86.

Большинство сред разработки приложений создают код-полуфабрикат, нагружающий, во время работы программы, процессор ПК дополнительной трансляцией что непосредственно сказывается на производительности. Lazarus же применяет настоящий компоновщик и компилятор и создает стопроцентный машинный код. Данная реализация исключает непроизводительные затраты, что делает программы, разработанные на Lazarus, максимально эффективными [9].

Для того, чтобы запустить программы, написанные на Lazarus, не нужны никакие интерпретаторы кода, дополнительные библиотеки и прочее. Хватит лишь одного сгенерированного исполняемого файла, а затем его запуска в необходимом месте. Для того чтобы установить программы на другой компьютер нет необходимости в создании каких-либо дистрибутивов, не нужна инсталляция, достаточно редактировать исполняемый файл программы [12, 29].

Оболочка визуального программирования Lazarus считается мощным средством для быстрой и качественной разработки. Библиотека визуальных компонентов позволит создать интерфейс пользователя за короткий промежуток времени. Объектно-ориентированный язык Object Pascal, основоположник Lazarus, считается дополнительным компонентом языков Borland Pascal и Turbo Pascal корпорации Borland и нашел в себе новое применение в программировании. Компонентный принцип, применяемый в Lazarus, позволит разрабатывать полноценные приложения, прописав минимальное объем строк кода. Lazarus - открытая оболочка, позволяющая добавлять свои компоненты в оболочку, корректировать уже имеющиеся стандартные компоненты с помощью предоставленных исходных текстов. Благодаря всему вышеперечисленному разработка программ в оболочке Lazarus становится приятным и лёгким [10, 38].

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

Lazarus – это прежде всего, результат развития языка программирования Object Pascal, который, получил свое начало от языка Pascal. Pascal является полностью процедурным языком. Lazarus - объектно-ориентированный язык с возможностью доступа к метаданным классов в компилируемом коде, также называемой интроспекцией. В связи с тем, что все классы наследуют параметры базового класса TObject, то каждый указатель на объект возможно преобразовать к нему, и применить метод ClassType и параметром TypeInfo, которые и гарантируют интроспекцию. Также одним из отличительных свойств Lazarus от С++ считается отсутствие способности расположения объектов в стеке (объекты, унаследованные из Турбо Паскаля, могут располагаться в стеке) – любой объект попадает в динамически выделенную область [7].

Lazarus оказывает огромное воздействие на разработку языка C++ для платформы .NET. Множество его элементов и концептуальных решений входят в состав С++ [39].

Отсюда следует, что выбранная платформа, соответствует поставленным критериям, в связи с чем выбор был остановлен на данной среде программирования [6].

Free Pascal (FPC) компилятор с открытым исходным кодом с двумя важными аспектами: полная совместимость с Delphi, а также доступность для большого объема платформ, включая Windows, Linux и Mac OS X. Совместимость FPC с Delphi, помимо поддержки того же языка Object Pascal, который применяется Delphi, но также включает библиотеки классы и конструкции, которые в свою очередь "понимает" Delphi, например, System, SysUtils, DateUtils, StrUtils, Variants, Classes, Math, Registry and IniFiles, которые поддерживают все платформы и включены в Free Pascal. Помимо этого, Free Pascal также имеет модули Windows, BaseUnix, ShellAPI, DynLibs и Unix для возможности доступа к специфичным для определенной ОС. Ядро обычно составляют около десятка модулей, упоминающееся как RTL (Free Pascal run-time library) [11].

Lazarus - это среда с открытым исходным кодом, которая написана на компиляторе FPC в которой имеется интегрированная среда разработки (IDE), которая активирует подсветку синтаксиса, визуальный проектировщик форм и редактор кода и библиотеку компонентов, которая имеет хорошую совместимость с библиотекой визуальных компонентов Delphi (VCL). VCL Lazarus (LCL) активирует эквиваленты для большинства контролов из VCL, к слову, формы, текстовые поля, кнопки и т.д., которые применяются для формирования приложений, имеющих графический интерфейс (GUI) [45].

И Lazarus, и Free Pascal сформированы на языке Pascal. Весь исходный код в доступе не только для FPC и Lazarus IDE, но также для всего списка модулей, входящих в состав Lazarus LCL и Free Pascal RTL.

Так же, как и Delphi, Lazarus и Free Pascal считаются многоцелевым инструментом в области программирования, то есть вы сможете разрабатывать программы различных видов, включая следующие:

В консольных приложениях отсутствует графический интерфейс (GUI). Обычно процесс их запуска происходит в консоли, информация читается и выводится на консоль. Windows Консоли соответствуют требованиям окон командной строки. В OS X и Linux консоли соответствуют окнам терминала. Консольные приложения это, небольшие утилиты, такие как программа FC (file compare - сравнение файлов) в Windows или команды cd и cp в Unix. Консольные приложения также могут быть мощными программами для тестирования, управления данными или моделирования, которым нет необходимости в причудливом GUI, так как процесс запуска осуществляется другими программами или командными файлами. Компилятор Free Pascal и прилагающийся набор утилит являются консольными приложениями, то есть их запуск осуществляется непосредственно в консоли, IDE Lazarus или из командных файлов [55].

Для разработки консольного приложения нужен только текстовый редактор и компилятор FreePascal. Нет необходимости применять Lazarus для разработки консольных приложений. Но если вам предпочтительно работать в интегрированной оболочке, то вам не составит труда разработка проекта для консольного приложения, также не затруднен процесс редактирования и компилирования кода в IDE Lazarus [28].

Динамически-подгружаемая библиотека обычно представляет собой совокупность скомпилированных параметров, которые вызвать другими программами. В режиме компиляции, библиотека не прилинковывается к программе, а вместо этого процесс загрузки проходит в реальном времени. В Windows, файл библиотеки имеет расширение .dll (DLL, или dynamic-link library). В Linux, файл библиотеки имеет расширение so (shared object library). В OS X, файл библиотеки имеет расширение. dylib (dynamic shared library). Динамически-подгружаемые библиотеки обычно применяются для формирования дополнений других программ, а также для формирования библиотек, которые можно вызвать программами, написанными на других языках, например, на C и C++, или для разбиения крупных проектов на кусочки, чтобы разработчики не наступали друг другу на пятки. Сама по себе Windows состоит из сотен библиотек DLL, как и другие крупные приложения, например, OpenOffice.org [25].

Для формирования библиотеки вам нужен только компилятор FreePascal и текстовый редактор, как и в случае консольных приложений, хотя вы также можете разработать проект библиотеки в Lazarus и формировать библиотеку в IDE Lazarus.

В Windows, библиотеки DLL имеют характеризуются как сложные и нестабильные элементы. Это относится к тому, каким способом они устанавливаются, нежели к применению DLL как таковых. В связи с тем, что обмен информацией с DLL обычно происходит за счет стандартных простых типов данных, то данное требование заставляет программистов больше внимания уделять тому, что они делают. Если все выполнено правильно, то в результате получаются хорошие и более стабильные программы [56].

Большинство программ, которые мы применяем в обиходе – это GUI-приложения, в числе которых текстовые процессоры, электронные таблицы, Web-браузеры и инструменты разработки. Delphi и Lazarus это прекрасные примеры полностью укомплектованных GUI-приложений. При создании GUI-приложения в Lazarus, вы не только пишете код на Pascal, но также создаете формы, содержащие визуальные элементы, такие как кнопки и списки (ListBox). Также, как и в Delphi, создание форм в Lazarus производится визуально. Свойства элементов могут редактироваться программно или при помощи IDE.

Так как для всех поддерживаемых платформ доступны LCL элементы, то GUI-приложения, разработанные на одной платформе, могут быть скомпилированы на другой платформе без редактирования файлов или формы с необходимым кодом формы.

На рисунке 3 изображена применяемая архитектура приложения, собранного в Lazarus:

Рисунок 3 – Архитектура приложения, созданного в Lazarus

На рисунке 4 показана архитектура библиотеки компонентов LCL.

Рисунок 4 – Архитектура библиотеки компонентов Lazarus (LCL)

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

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

На рисунке 5 изображен интерфейс IDE Lazarus.

Рисунок 5 – Оболочка разработки приложений Lazarus

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

Lazarus обеспечивает исчерпывающую библиотеку классов - визуальную компонентную библиотеку (VCL), библиотека Borland Component (CLX), и блок быстрой разработки (RAD) инструментальные средства, включая приложение и шаблоны форм, и мастера. Lazarus объектно-ориентированное программирование.

К нестандартным улучшениям, которые внесла фирма Borland – это окно свойств объектов (Properties), а также возможность перезагрузки процедур и функций.

Достоинствами языка программирования Lazarus являются простота, быстродействие и эффективность. В Lazarus встроен самый эффективный на сегодняшний день компилятор. Так же одним из достоинств Lazarus является простота изучения языка программирования Object Pascal. Встроенная библиотека VCL предоставляет возможность программирования на Windows API. В Lazarus используется компонентное программирование, которое позволяет изпользовать уже существующие компоненты, использовать компоненты, созданные другими программистами или создавать свои. К достоинствам так же отностосятся огромная и в то же время очень продуманная палитра компонент.

Недостатком Lazarus является не самой большой выбор встроенных процедур и функций, которых гораздо больше в языке C++, Так же в среде Lazarus необходимо осуществлять удаление из памяти объектов после их использования используя встроенныt методы destroy или free. В языке программирования C++ объекты уничтожаются при выходе из зоны видимости автоматически. Кроме того, в Lazarus при генерировании отладочной информации заметно возрастает размер исполняемых .exe файлов [24].

Компилятор, встроенный в IDE Lazarus транслирует код программы, написанной на языке Object Pascal в объектный код, выделяет ошибки в синтаксисе программы, показывает исключения в коде, так же имеется возможность производить отладку исходного текста в режиме реального времени, осуществляется линковка и создается исполняемый модуль. Lazaus конвертирует код программы непосредственно в машинный код.

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

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

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

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

Инспектор объектов – это отдельное окно, в котором во время проектироавния ПО можно устанавливать свойства объектов (Properties & Events).

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

Основа Object Pascal – это средство типа Run-Time Туре Information (RTTI), т.е. информация о типе данных во время исполнения программы и свойствах объектов (property) типов и классов, а также обработкой исключительных ситуаций (exception handling).

Делегирование событий – это создание какого-либо блока кода, которой обрабатывает действие определённого интерактивного объекта, например, кнопки, двойное нажатие на которую использует делегирование для создания метода (onclick).

Основные файлы проекта Lazarus – это PROJECT1.LPR, UNIT1. PAS, UNIT1.LFM - сведения о форме, PROJECT1.ICO – по умолчанию инконка проекта, PROJECT1.LPI – это текстовый файл в хранящи информацию о связях различных модулей пограммы. После сборки и компиляции проекта получается файл с расширением *.EXE (исполняемый файл, орый и будет использоваться для рабты программой).

Система выявления и редактирования ошибок программы создана для перехода к участку кода, содержащего ошибку, для этого нужно установить курсов в строку, где показана ошибка и выбрать из контексного меню команду Edit source [15].

Подсказки и предупреждения выводят сообщения при обнаружении неточностей в коде программы, которые в свою очередь не являются ошибками, компилятор показывает предупреждения (warnings) и подсказки (Hints).

Исключения (exceptions) или временные ошибки при выполнении приложения (run-timeerrors).

Вкладка настроек линкера (Options) позволяет осуществить настройки параметов, влияющийх на текущий проект, такие как, директивы компилятора проверки стека (stack checking) или диапазона (rangechecking).

Вкладка настроек Editor Options необходима для более тонкой настройки редактора исходного кода.

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

Пять основных окон IDE Lazarus:

· конструктор форм (Form Designer);

· окно редактора исходного кода (Editor Window);

· окно палитры компонент (Component Palette);

· окно справочник (On-line help);

· инспектор объектов (Object Inspector).

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

Особенностью IDE – это визуальное (скоростное) создание приложений из различных прототипов пограммы.

Линкование, сборку, компилцию, запуск программы преобразование исходного кода в машиннный выполняется специаьной программой – компилятором [16,17].

Компилятор последовательно выполнят задачи: проверяет исходный код программы на наличие ошибок и генерирует испоняемый файл расширения exe.

При возникновении исключительной сутуации во время отладки программы IDE Lazarus прерываает работу приложения, с выводом сообщения «stoped» в заголовке основного окна Lazarus, также на экран выводится диалогое окно в котором сообщается информация о классе и типе ошибки.

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

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

ПРИЛОЖЕНИЕ 4

Наши рекомендации