Язык С++, еще актуален так как широко используется для разработки программного обеспечения, являясь одним из самых популярных языков программирования. Область его применения включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений (игр). Существует множество реализаций языка C++, как бесплатных, так и коммерческих и для различных платформ. Например, на платформе x86 это GCC, Visual C++, Intel C++ Compiler, Embarcadero (Borland) C++ Builder и другие. C++ оказал огромное влияние на другие языки программирования, в первую очередь на Java и C#.
Поддерживает такие парадигмы программирования, как процедурное программирование, объектно-ориентированное программирование, обобщённое программирование, обеспечивает модульность, раздельную компиляцию, обработку исключений, абстракцию данных, объявление типов (классов) объектов, виртуальные функции. Стандартная библиотека включает, в том числе, общеупотребительные контейнеры и алгоритмы. C++ сочетает свойства как высокоуровневых, так и низкоуровневых языков. В сравнении с его предшественником — языком C, — внимание уделено поддержке объектно-ориентированного и обобщённого программирования.
C++ продолжает развиваться, чтобы отвечать современным требованиям. Одна из групп, разрабатывающих язык C++ и направляющих комитету по стандартизации C++ предложения по его улучшению — это Boost, которая занимается, в том числе, совершенствованием возможностей языка путём добавления в него
особенностей метапрограммирования.
Нововведениями C++ в сравнении с C являются:
· поддержка объектно-ориентированного программирования;
|
· поддержка обобщённого программирования через шаблоны;
· дополнительные типы данных;
· исключения;
· пространства имён;
· встраиваемые функции;
· перегрузка операторов;
· перегрузка имён функций;
· ссылки и операторы управления свободно распределяемой памятью;
· дополнения к стандартной библиотеке.
Новые возможности C++ включают объявления в виде выражений, преобразования типов в виде функций, операторы «new» и «delete», тип «bool», ссылки, расширенное понятие константности, подставляемые функции, аргументы по умолчанию, переопределения, пространства имён, классы (включая и все связанные с классами возможности, такие как наследование, функции-члены, виртуальные функции, абстрактные классы и конструкторы), переопределения операторов, шаблоны, оператор «::», обработку исключений, динамическую идентификацию и многое другое. Язык C++ также во многих случаях строже относится к проверке типов, чем C.
В C++ появились комментарии в виде двойной косой черты «//», которые были в предшественнике C — языке BCPL.
Некоторые особенности C++ позднее были перенесены в C, например, ключевые слова «const» и «inline», объявления в циклах «for» и комментарии в стиле C++ «//». В более поздних реализациях C также были представлены возможности, которых нет в C++, например макросы «va_arg» и улучшенная работа с массивами-параметрами.
Несмотря на то, что большая часть кода C будет справедлива и для C++, C++ не является надмножеством C и не включает его в себя. Существует и такой верный для C код, который неверен для C++. Это отличает его от Objective C, ещё одного усовершенствования C для ООП, как раз являющегося надмножеством C.
|
Существуют и другие различия. Например, C++ не разрешает вызывать функцию «main()» внутри программы, в то время как в C это действие правомерно. Кроме того, C++ более строг в некоторых вопросах; например, он не допускает неявное приведение типов между несвязанными типами указателей и не разрешает использовать функции, которые ещё не объявлены.
Более того, код, верный для обоих языков, может давать разные результаты в зависимости от того, компилятором какого языка он оттранслирован. Например, на большинстве платформ следующая программа печатает «С», если компилируется компилятором C, и «C++» — если компилятором C++. Так происходит из-за того, что символьные константы в C (например, 'a') имеют тип «int», а в C++ — тип «char», а размеры этих типов обычно различаются.
С одной стороны, С++ является потомком Симулы, которую Алан Кэй определил как «Алгол с классами», и потому будет актуальной оценка С++ в сравнении с другими языками из семейства потомков Алгола (Basic, Pascal, Java, C#, Visual Basic, Delphi, D, Oberon и пр.). С другой стороны, С++ претендует на мультипарадигменность и универсальную применимость (в отличие от Си, ориентированного на очень узкий круг задач), и используется в промышленности намного шире других потомков Алгола, и потому будет актуальной оценка С++ в сравнении со всем многообразием применяемых языков, включая и Си. Во избежание повторений, оценки обычно совмещаются.
С++ — язык, складывающийся эволюционно. В отличие от языков с формальным определением семантики, каждый элемент С++ заимствовался
|
из других языков отдельно и независимо от остальных элементов (ничто из предложенного С++ за всю историю его развития не было новшеством в Computer Science), что сделало язык чрезвычайно сложным, со множеством дублирующихся и взаимно противоречивых элементов, блоки которых основаны на разных формальных базах. В этом отношении С++ повторяет путь PL/1, но, в отличие от последнего, длительное повсеместное использование С++ обеспечил выбор языка Си в качестве отправной точки.
Критики С++ не противопоставляют ему какой-либо конкретный язык, а наоборот, утверждают, что для всякого случая применения С++ всегда существует альтернативный инструментарий, позволяющий решить ту же задачу более эффективно и качественно. В свою очередь, сторонники С++ считают некорректным сравнивать различные аспекты С++ с совершенно различными языками, так как общий набор средств и возможностей С++ существенно шире, чем в большинстве языков, с которыми проводится сравнение, и сама по себе широта возможностей, на их взгляд, является веским оправданием несовершенства каждой отдельно взятой возможности. Более того, по их мнению, высокая совместимость с Си является одной из принципиальных черт языка, и потому все недостатки С++ оправданы преимуществами, предоставляемыми этой совместимостью (см. раздел Философия C++). При этом сторонники C++ игнорируют подтверждённый исследованиями.
факт, что декомпозиция проекта на несколько разных языков, наиболее пригодных для своих мини-задач, (или просто использование одного наилучшим образом подходящего языка) сокращает на порядок общую трудоёмкость разработки при одновременном повышении на порядки основных показателей качества программирования. По этой причине критики не соглашаются рассматривать недостатки С++ по отдельности и тем более делать поправку на «универсальность», утверждая, что если задача требует одновременно высокоуровневых и низкоуровневых возможностей, то
использование Си совместно с языками, из которых заимствованы отсутствующие в Си возможности C++, будет более разумным, чем внедрение этих возможностей в сам Си и использование полученного языка резко возросшей степени внутренней сложности.
Таким образом, одно и то же свойство языка (совмещение большого числа элементов разных языков и отсутствие конкретной целевой ниши применения) рассматривается сторонниками как «главное достоинство», а критиками — как «главный недостаток».
Следует отметить, что рассмотрение элементов языка по отдельности означает отказ от рассмотрения языка как системы, а следовательно, и от ожидания синергизма,— что делает ограниченным (конечным) потенциал роста сложности абстракций, которые можно выразить посредством этого языка, и соответственно сужает спектр реализуемых на нём программных систем.
С++ заявляется как кроссплатформенный: стандарт языка накладывает минимальные требования на ЭВМ для запуска скомпилированных программ. На практике, для написания портируемого кода на С++ требуется огромное мастерство и опыт, и «небрежные» коды на С++ с высокой вероятностью могут оказаться непортируемыми. Тонкое владение С++ в принципе может сделать код на С++ столь же портируемым, что и код на Си (хотя, по мнению Линуса Торвальдса, С++ при этом фактически сократится до своего подмножества Си). Однако, критики С++ утверждают, что изучение и использование одновременно всех языков, противопоставляемых С++ (не вызывающих серьёзных проблем при портировании), в сумме требует примерно тех же интеллекта, усилий и временных затрат, что и изучение и использование одного только С++ на высококлассном уровне — в связи с чем становится актуальной также оценка порога вхождения и результативности (производительности и качества труда программистов).
Многие аспекты в спорах «за и против С++» обусловлены
расхождением в сущностном понимании процесса стандартизации. Б.Страуструп и его последователи считают, что «стандарт — это контракт между программистами, разрабатывающими программы на языке, и программистами, разрабатывающими компиляторы языка»[9]. Каждый новый стандарт С++ являлся декларацией того, что отныне должно быть реализовано во всех компиляторах — при том, что С++ имеет естественное определение семантики, то есть потенциально зависим от реализации (стандарт содержит множество пунктов, определённых как «implementation-defined»). Традиционно, успешная стандартизация в технике представляет собой формальный перевод стандарта из статуса де-факто в статус де-юре (подытоживание общепринятых, устоявшихся знаний для обеспечения надёжной внутриотраслевой совместимости). Все противопоставляемые С++ языки программирования, если проходили процедуру стандартизации (что не обязательно для портируемости), то лишь после многолетней апробации на практике; при этом все они изначально имеют формальное определение семантики, так что накапливающиеся к моменту стандартизации изменения от первой версии языка оказываются не принципиальны. Теоретически эти определения стандартизации тождественны. На практике определение Страуструпа согласуется с традиционным лишь при условии, что нет абсолютно никаких препятствий против немедленного и беспрекословного подчинения статуса де-факто декларированному де-юре — то есть если абсолютно все компиляторы реализуют поддержку нового стандарта сразу после его выхода и со 100 % соответствием ему, и что новый стандарт не отменяет никаких положений старого, кроме признанных убыточными или вредоносными. Так может происходить лишь в условиях полного отсутствия человеческого фактора(иначе говоря, при отсутствии программистов как таковых). На практике именно этим и обусловлено значительное отставание реальной кроссплатформенности С++ от заявленной разработчиками стандарта и противоречивость предлагаемых возможностей.
Сторонники С++ считают взгляд Страуструпа на стандартизацию более практико-ориентированным и принимают порождаемые им проблемы за должное.
C++ содержит средства разработки программ контролируемой эффективности для широкого спектра задач, от низкоуровневых утилит и драйверов до весьма сложных программных комплексов. В частности:
· Высокая совместимость с языком Си: код на Си может быть с минимальными переделками скомпилирован компилятором C++. Внешнеязыковой интерфейс является прозрачным, так что библиотеки на Си могут вызываться из C++ без дополнительных затрат, и более того — при определённых ограничениях код на С++ может экспортироваться внешне не отличимо от кода на Си (конструкция extern "C").
· Как следствие предыдущего пункта — вычислительная производительность. Язык спроектирован так, чтобы дать программисту максимальный контроль над всеми аспектами структуры и порядка исполнения программы. Один из базовых принципов С++ — «не платишь за то, что не используешь» — то есть ни одна из языковых возможностей, приводящая к дополнительным накладным расходам, не является обязательной для использования. Имеется возможность работы с памятью на низком уровне.
· Поддержка различных стилей программирования: традиционное императивное программирование (структурное, объектно-ориентированное),обобщённое программирование, функциональное программирование, порождающее метапрограммирование.
· Автоматический вызов деструкторов объектов в адекватном порядке (обратном вызову конструкторов) упрощает и повышает надёжность управления памятью и другими ресурсами (открытыми файлами, сетевыми соединениями, соединениями с базами данных и т. п.).
· Перегрузка операторов позволяет кратко и ёмко записывать
выражения над пользовательскими типами в естественной алгебраической форме.
· Имеется возможность управления константностью объектов (модификаторы «const», «mutable», «volatile»). Использование константных объектов повышает надёжность и служит подсказкой для оптимизации. Перегрузка функций-членов по признаку константности позволяет определять выбор метода в зависимости цели вызова (константный для чтения, неконстантный для изменения). Объявление «mutable» позволяет сохранять логическую константность при виде извне кода, использующего кэши и ленивые вычисления.
· Шаблоны C++ дают возможность построения обобщённых контейнеров и алгоритмов для разных типов данных. Попутно шаблоны дают возможность производить вычисления на этапе компиляции.
· Возможность расширения языка для поддержки парадигм, которые не поддерживаются компиляторами напрямую. Например, библиотека «Boost.Bind» позволяет связывать аргументы функций. Используя шаблоны и множественное наследование, можно имитировать классы-примеси и комбинаторную параметризацию библиотек. Такой подход применён в библиотеке «Loki», класс «SmartPtr» которой позволяет, управляя всего несколькими параметрами времени компиляции, сгенерировать около 300 видов «умных указателей» для управления ресурсами.
· Возможность встраивания предметно-ориентированных языков программирования в основной код. Такой подход использует, например библиотека «Boost.Spirit», позволяющая задавать EBNF-грамматику парсеров прямо в коде C++. «Boost.Spirit» реализует рекурсивно-нисходящий алгоритм, что накладывает соответствующие ограничения (такие как недопустимость левой рекурсии).
· Доступность. Для С++ существует огромное количество учебной литературы, переведённой на всевозможные языки. Язык имеет низкий порог вхождения, но среди всех языков такого рода обладает наиболее широкими возможностями.
Embarcadero среда быстрой разработки приложений (RAD) для Microsoft Windows фирмы Embarcadero Technologies. Так как я планирую разрабатывать свое приложение на операционной системе Windows 7, то считаю что эта среда для меня подходит.
RAD Studio XE8 - это удобная технология подключения и поддержка мобильных платформ для разработки распределённых взаимодействующих приложений для Windows, Android, iOS, OS X, гаджетов и IoT устройств, промежуточного ПО, облачных платформ и корпоративных сервисов. Поддерживая новые 64-разрядные и универсальные iOS приложения, RAD Studio XE8 заметно упрощает разработку: можно добавлять IoT функции, такие как информирование о приближении с помощью "маячков" (beacons), повышать производительность приложений и эффективность разработчиков, а также лучше понимать поведение пользователей. Менеджер пакетов GetIt упрощает доступ к библиотекам исходного кода, компонентам и другим элементам IDE.
"Пользователи пользующиеся RAD Studio разрабатывают и поддерживают миллионы критически важных Windows приложений в различных отраслях. Сегодня они стремятся расширять приложения в сторону мобильного функционала версий, облачных сервисов и IoT, улучшая впечатления пользователей. RAD Studio XE8 предлагает возможности, с помощью которых разработчики смогут всего этого достичь, " - говорит Майкл Свиндел (Michael Swindell), старший вице-президент компании Embarcadero по продуктам. - "Революционные возможности предлагает, в частности, iOT, но он всегда был довольно сложен и недоступен для большинства разработчиков. Выпустив XE8, Embarcadero будет в числе первых, кто поможет разработчикам без труда использовать IoT в 2015 году и в будущем".
Новые возможности XE:
· Поддержка 64-разрядных приложений iOS и универсальных приложений. Чтобы разработчики могли создавать новые приложения для Apple App Store, версия XE8 RAD Studio предлагает новые 64-разрядные компиляторы Object Pascal и C++ для iOS, включая компоновщики и другие инструменты для создания 64-разрядных iOS приложений. RAD Studio XE8 поддерживает универсальные приложения Apple, предлагая 32- и 64-разрядные двоичные коды в одном пакете, а также широкий спектр собственных элементов управления iOS для поддержки уникальных особенностей этой платформы.
· Функция предпросмотра на разных устройствах и форм-факторах. Как создавать взаимодействующие приложения ещё быстрее? В этом поможет функция предпросмотра на разных устройствах в RAD Studio XE8, позволяющая наглядно отобразить пользовательский интерфейс на всех основных форм-факторах. Так можно легко определить, где нужна дополнительная оптимизация. Просматривайте предварительный вид приложения динамически, для любого числа форм-факторов и ориентаций, включая десктопы, планшеты, смартфоны и смарт-часы.
· Информирование о приближении с помощью beacons.Благодаря новой поддержке beacons на уровне компонентов, реализованной в RAD Studio XE8, разработчики могут с лёгкостью добавлять информирование о приближении и местонахождении в готовые приложения для Windows и мобильных платформ.
· AppAnalytics. Сервис AppAnalytics помогает разработчикам отслеживать и анализировать модели поведения их пользователей, собирая анонимную статистику использования приложений, созданных с помощью RAD Studio XE8. AppAnalytics - сервис Embarcadero с оплатой за использование, поддерживающий приложения на VCL и FireMonkey - это означает, что разработчик может использовать этот сервис в приложениях на
Windows, OS X, Android и iOS.
· Менеджер пакетов GetIt. Это средство обеспечивает доступ к библиотекам и компонентам на VCL и FireMonkey, а также аналогичным элементам для различных устройств. С помощью менеджера пакетовGetIt можно с лёгкостью выбирать, загружать и обновлять библиотеки исходного кода, компоненты и другие элементы с серверов Embarcadero GetIt, устанавливая их одним кликом. Сюда входят все проекты TurboPack. Обновлённые Enterprise Mobility Services (EMS). EMS -готовое серверное решение служащее основой для взаимодействующих распределённых приложений с поддержкой сервера push-уведомлений для iOS и Android. Решение EMS, основанное на открытых стандартах и технологиях, предлагает простой в развертывании сервер промежуточного ПО, отвечающий за аутентификацию пользователей, управление специальными API REST и аналитику, включает встроенную и серверную защищённые базы данных, а также обеспечивает доступ к основным корпоративным базам данных: Oracle, SQL Server, Informix, DB2, PostgreSQL, MySQL и многим другим.
Среди других улучшений в RAD Studio XE8: технологии для значительного ускорения процесса разработки в виде встраиваемого модуля Castalia с рефакторингом Object Pascal, статистикой проектов, анализом кода и поддержкой удобных комбинаций клавиш для редактора кода. Новое средство переноса параметров конфигурации служит для переноса конфигурации из старых версий продукта в новую, а также между различными инсталляциями в рамках одной версии.
Windows 7 — пользовательская операционная система семейства Windows NT, следующая по времени выхода за Windows Vista и предшествующая Windows 8.
Эта система пользуется популярностью и проверенна временем, так как Операционная система поступила в продажу 22 октября 2009 года — меньше, чем через три года после выпуска предыдущей операционной
системы Windows Vista. Партнёрам и клиентам, обладающим лицензией Volume Licensing, доступ к RTM был предоставлен 24 июля 2009 года. В интернете оригинальные установочные образы финальной версии системы были доступны с 21 июля 2009 года. И по состоянию на 19 января 2012 года, было продано свыше 525 миллионов копий Windows 7.
ПРОЕКТНЫЙ РАЗДЕЛ
Проектный раздел содержит детальное описание проектируемых мероприятий, разработанных в соответствии с техническим заданием на проектирование с представлением рабочей документации.
Построение контекстных диаграмм бизнес-процессов (процесса разработки проекта) и их детализация в виде иерархии диаграмм в инструментальной среде AllFusion Process Modeler (BPwin)
a) функциональную модель систему на основе нотации и стандарта IDEF0 представленна на рисунке 1 и рисунке 2;
Рисунок 1 — Функциональную модель IDEF0
Рисунок 2 — Функциональную модель IDEF0
b) диаграмму потоков данных в системе DFD представленна на рисунке 3;
Рисунок 3 — Функциональную модель DFD
c) описание потока процессов, взаимодействия процессов и объектов на основе нотации и стандарта IDEF3 представленна на рисунке 4;
Рисунок 4 — Функциональную модель IDEF3
· проектирование структуры разрабатываемого приложения (структурная схема разделов приложения);
· проектирование архитектуры приложения
a)
диаграмма USE CASE представленна на рисунке 5;
Рисунок 5 — Диаграмма USE CASE
b) диаграмма (UML Static structure) представленна на рисунке 6;
Рисунок 6 — Диаграмма классов (UML Static structure)
c)
диаграмма взаимодействия (UML sequence) представленна на рисунке 7;
Рисунок 7 — Диаграмма взаимодействия (UML sequence)
d) диаграмма деятельности (UML activity) представленна на рисунке 8;
Рисунок 8 — Диаграмма деятельности (UML activity)
·
разработанная логическая структура базы данных представлена на рисунке 9.
Рисунок 9 — Использование базы данных
· проектирование графического пользовательского интерфейса;
Был выбран пользовательский интерфейс «Меню» - реализует множество сценариев работы, операции которые организованы в иерархические структуры.
· разработка форм входных и выходных данных;
Входные данные представляют действия пользователя и строки. Можно просмотреть на рисунках 10-16.
· разработка сценариев для тестирования входных и выходных данных (тестирование в нормальных условиях, тестирование в экстремальных условиях, тестирование в исключительных ситуациях)
· описание методов и приемов, позволяющих защитить информацию хранящуюся и обрабатываемую в приложении.
Для защиты информации необходимо усовершенствовать программу, а так же можно поставить пароль на базу данных. Если пользователь не опотный, то разделение на прав при создании пользователя, не даст ему возможности просмотреть данные.