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

Основы теории языков программирования

Содержание:

ВВЕДЕНИЕ

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

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

Языки программирования тех годов, как и компьютеры, были созданы для специфичных таких задач: научные вычисления, экономические и математические расчеты и т.д. Поскольку ЕОМ были дорогостоящими и однозадачными, то и, так называемое, «машинное время» было дорогим – поэтому скорость выполнения инструкций программы стояла на первом месте.

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

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

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

Исходя из цели работы необходимо решить такие основные задачи:

– рассмотреть историю возникновения алгоритмических языков программирования;

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

Объектом исследования является инструментальное ПО персонального компьютера.

Предмет исследования – современные языки программирования.

В связи с развитием вычислительной техники возникали различные методики создания программ: структурный, объектно-ориентированный, функциональный подходы. Развитием теоретических и практических основ языков программирования занимались отечественные и зарубежные программисты: Королюк В.С., П.Голдинг, Б.Стауструп, С.Прата и многие другие.

  1. Развитие языков программирования и их классификация

Основы теории языков программирования

Языком программирования называется система обозначений, которая служит для точного описания алгоритмов или инструкций программ для ЭВМ. Стоит отметить, что языки программирования – это искусственные языки. Они отличаются от естественных языков ограниченным числом служебных слов и строгими правилами записи операторов (команд). При их применении по назначению не допускается свободное толкование выражений (что характерно для естественных языков).

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

Основные требования, которые предъявляются к языкам программирования, следующие:

– единство - использование одинаковых символов для обозначения родственных или одинаковых понятий в различных частях алгоритма. Количество данных символов должно быть минимальным;

– наглядность – это использование в языке программирования уже существующих символов, которые хорошо известны и понятны как пользователям ЭВМ, так и программистам;

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

– гибкость - возможность удобного и несложного описания распространенных методов математических вычислений с помощью набора изобразительных средств конкретного языка программирования;

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

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

Со времени создания первых ЭВМ человечество придумало более 2,5 тысяч языков программирования. Их число пополняется каждый год новыми, зачастую специализированными, языками. Некоторыми из них умеет пользоваться лишь небольшое число разработчиков, другие – известны миллионам людей. Профессиональные разработчики иногда применяют более десятка различных языков программирования в своей работе.

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

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

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

Рассмотрим краткую поэтапную историю языков программирования.

  1. Машинный язык (начало 50-х годов XX ст.). Программы на машинном языке являлись очень длинными последовательностями двоечных цифр и машинно-зависимыми (для каждой ЭВМ нужно было составлять свою программу, которая подходила бы под ее архитектуру).
  2. Ассемблер (середина 50-ых годов XX ст.). Вместо написание программ на бинарном коде программисты могли пользоваться операторами языка Ассемблер (ADD, MOV, SUB и прочими), которые похожи на аббревиатуры английских слов. Программы на этом языке также являются машинно-зависимыми. В тот период для преобразования написанного кода в машинный использовался компилятор – специальная программа для перевода инструкций Ассемблера в машинный код.
  3. Языки типа Fortran.

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

Примерами таких языков являются:

– FORTRAN – для технических и научных расчетов;

– COBOL – для коммерческих приложений;

– BASIC – универсальный язык для начинающих.

  1. Алгоритмические языки программирования.

С конца 70-ых г. XX ст. начали создаваться такие языки программирования, что позволяли перейти программисту к структурному программированию (применение операторов выбора, ветвления, цикла и отказ от использования операторов перехода (например, goto). К таким языкам относятся:

– Pascal;

–Си.

  1. Языки объектно-ориентированного направления.

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

– С++ – усовершенствование алгоритмического языка Си;

– Object Pascal – создан на основе Pascal.

– Visual Basic – для создания приложений с оконным интерфейсом для ОС Windows.

  1. Языки программирования, использующиеся в компьютерных сетях.

В начале 90-х годов XX ст. в связи с быстрым развитием Интернета созданы языки программирования, обеспечивающие кроссплатформенную совместимость. На подключенных компьютерах к Интернету с различными ОС могли запускаться одни и те же программные продукты. Исходная программа компилировалась в промежуточный код, который обрабатывался на компьютере встроенной виртуальной машиной. К таким языкам относяться:

– Java - объектно-ориентированный язык, разработан для создания сетевого ПО;

– JavaScript – язык сценариев для Web-страниц.

  1. Языки программирования платформы .NET.

IDE Visual Studio .Net разработана корпорацией Microsoft и позволяет создавать графические приложения на разных объектно-ориентированных языках программирования:

– Visual Basic .Net;

– C# и J;

– Visual J#.

1.2. Классификации языков программирования

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

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

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

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

К объектно-ориентированным языкам программирования относятся языки, в которых функции и переменные группируются в специальные конструкции – классы. Благодаря этому программисты достигают более высокого уровня структуризации программ. Экземпляры, порождённые от созданных классов, вызывают методы (процедуры или функции), которые меняют некоторые свойства (переменные) объектов. С формальной стороны объектно-ориентированный метод написания программ основан на процедурной модели.

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

Машинно-ориентированные языки – языки, изобразительные средства и наборы операторов которых существенно зависят от архитектуры ЭВМ (структуры памяти, внутреннего языка и т.д.). Такие языки программирования позволяют использовать все особенности и возможности машинно-зависимых языков:

  • возможность использования определенных аппаратных ресурсов;
  • высокое качество программ (скорость выполнения и компактность);
  • предсказуемость заказов памяти и объектного кода;
  • трудоемкость составления программ;
  • для составления эффективно работающих программ необходимо знать перечень команд и особенности архитектуры данной ЭВМ;
  • низкая скорость программирования;
  • невозможность использования программ на ЭВМ других типов.

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

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

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

Например, к проблемным языкам относятся следующие:

– Алгол, Фортран – языки для решения математических задач;

– Слэнг, Simula – для моделирования процессов;

– Снобол, Лисп – для работы с использованием списочных структур.

Универсальные языки создаются для широкого круга заданий: научных, коммерческих, моделирования и т.д. Самый первый универсальный язык разработан фирмой IBM – Алгол-68. Он позволяет выполнять работу с разрядами, символами, числами с плавающей и фиксированной запятой, имеет систему операторов управления форматам. Язык учитывает возможности прерывания, имеет соответствующие для этого операторы. Так же предусмотрена возможность параллельного программирования.

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

Работы по созданию велись в двух основных направлениях:

– создавались управляющие языки для оперативного воздействия на выполнение задач;

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

Язык Бэйсик является одним из примеров диалоговых языков.

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

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

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

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

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

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

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

2. Характеристика современных языков программирования

2.1. Язык программирования С++

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

С++ – это язык программирования общего назначения, наиболее часто применяется в системном программировании, понимаемом в широком смысле слова. Кроме того, в С++ успешно используется для написания приложений, далеко выходящих за рамки системного программирования. Реализации С++ присутствует на всех машинах, начиная с самых скромных - до самых больших супер-ПК.

Бьерн Страуструп является разработчиком языка С++ и создателем его первого транслятора. Он является сотрудником научно-исследовательского вычислительного центра AT&T в Нью-Джерси (США). Страуструп получил звание магистра вычислительной техники и математики в университете г.Аарус (Дания), а докторское звание в Кэмбриджском университете. Он специализируется в секторе операционных систем, распределенных систем, программирования и моделирования и также является автором полного руководства по С++.

Безусловно язык С++ многим обязан языку программирования Си[8], который сохраняется в виде его подмножества. Сохранены также и все свойственные Си средства низкого уровня, которые предназначены для решения насущных задач системного программирования. [7]

Название С++, было придумано Р. Маскитти летом 1982 г. Это название показывает эволюционный характер преобразования языка Си. А обозначение ++ относится к инкрементной операции наращивания.

Знатоки семантики языка Си находят, что С++ несколько хуже, чем ++С.

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

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

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

Фирма AT&T внесла основной вклад в данную работу. Больше ста представителей изучали и комментировали все аспекты языка, которые стали современной версией руководства и материалами по стандартизации С++.

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

В языке программирования С++ нет некоторых типов данных и операций высокого уровня. Для примера, не существует типа «матрица» с операцией обращения, или же типа «строка» с операцией конкатенации.

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

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

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

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

Язык С++ проектировался для объектно-ориентированного программирования и поддержки абстракции данных в добавление к традиционному стилю Си.

2.2. Язык программирования Java

Java — язык программирования, разработанный компанией Sun Microsystems. Приложения Java обычно компилируются в специальный байт-код, поэтому они могут работать на любой виртуальной Java-машине (JVM) независимо от компьютерной архитектуры. Дата официального выпуска — 23 мая 1995 года.

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

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

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

Изначально этот язык назывался Oak («дуб») и разрабатывался Джеймсом Гослингом для программирования бытовых электронных устройств. Впоследствии он был переименован в Java и стал использоваться для написания клиентских приложений и серверного программного обеспечения. Назван в честь марки кофе Java, любимого некоторыми программистами, поэтому на официальной эмблеме языка изображена чашка с дымящимся кофе. Существует и другая версия происхождения названия Java, а именно, Java это сленговое обозначение кофе (по имени одноименного острова, где производится популярный кофе) с аллюзией на кофе-машину, как пример бытового устройства, для программирования которых изначально язык создавался.

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

Программы на Java транслируются в байт-код, выполняемый виртуальной машиной Java (JVM) – программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор.

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

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

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

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

Эти идеи нашли также выражение в спецификации общеязыковой инфраструктуры CLI, заложенной в основу платформы .NET компанией Microsoft.[1]

Основные возможности

  • автоматическое управление памятью;
  • унифицированный доступ к базам данных:
  • богатый набор средств фильтрации ввода/вывода;
  • набор стандартных коллекций, таких как массив, список и т. п.;
  • расширенные возможности обработки исключительных ситуаций;
  • наличие классов, позволяющих выполнять HTTP-запросы и обрабатывать ответы;
  • на уровне концепции объектов, обладающих способностью к хранению в базе данных — на основе Java Data Objects и Java Persistence API;
  • параллельное выполнение программ.

2.3. Язык программирования C#

Последнее время С и С++ являются одними из наиболее используемыми языками для разработки коммерческих и бизнес приложений. Эти языки устраивают многих разработчиков, но в действительности не обеспечивают должной продуктивности разработки. К примеру, процесс написания приложения на С++ зачастую занимает значительно больше времени, чем разработка эквивалентного приложения, скажем, на Visual Basic. Сейчас существуют языки, увеличивающие продуктивность разработки за счет потери в гибкости, которая так привычна и необходима программистам на С/С++.

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

Учитывая все подобные пожелания, Microsoft разработала новый язык - C#. В него входит много полезных особенностей – простота, объектная ориентированность, типовая защищенность, "сборка мусора", поддержка совместимости версий и многое другое. Данные возможности позволяют быстро и легко разрабатывать приложения, особенно COM+ приложения и web-сервисы.

При создании C#, его авторы учитывали достижения многих других языков программирования: C++, C, Java, Visual Basic и т.д. В результате получился действительно простой, удобный и современный язык, по мощности не уступающий С++, но существенно повышающий продуктивность разработок.

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

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

Чтобы помочь разработчикам бороться с этой проблемой C# включает в себя поддержку совместимости версий (vesioning). В частности, в отличии от C++ и Java, если метод класса был изменен, это должно быть специально оговорено. Это позволяет обойти ошибки в коде и обеспечить гибкую совместимость версий.

В C# была унифицирована система типов, теперь есть возможность рассматривать каждый тип как объект. Несмотря на то, используете вы класс, структуру, массив или встроенный тип, вы можете обращаться к нему как к объекту. Объекты собраны в пространства имен (namespaces), которые позволяют программно обращаться к чему-либо.

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

В C# выражение using позволяет не писать каждый раз название пространства имен, когда используется класс из него. Например, пространство имен System содержит несколько классов, в том числе и Console. Можно писать либо название пространства имен перед каждым обращением к классу, либо использовать команду using. [2]

Важной и отличительной от С++ особенностью C# является его простота. К примеру, всегда ли вы помните, когда пишите на С++, где нужно использовать "->", где "::", а где "."? Даже если нет, то компилятор всегда внесет коррективы в случае ошибки. Это говорит лишь о том, что в действительности можно обойтись только одним оператором, а компилятор сам будет распознавать его значение.

Так в C#, оператор"->" используется очень ограничено (в unsafe блоках), оператор "::" вообще не существует. [12]

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

В C#, также как и в Visual Basic после каждого выражения case в блоке switch подразумевается break. И более не будет происходить странных вещей если программист забыл поставить break. Однако, если действительно нужно чтобы после одного выражения case программа перешла к следующему, то можно переписать свою программу с использованием, например, оператора goto.

Хотелось бы подчеркнуть современное удобство C#. После начала работы в C#, сразу станет ясно, что довольно большое значение в нем имеют пространства имен.

Так в C#, помимо просто выражения using, предоставляется еще одна очень удобная возможность – использование дополнительного имени (alias) пространства имен или класса. [9]

Современность C# проявляется и в новых шагах к облегчению процесса отладки программы.

Традиционным средством для отладки программ на стадии разработки в C++ является маркировка обширных частей кода директивами #ifdef и т.д.

В C#, используя атрибуты, ориентированные на условные слова, программист может куда быстрее написать отлаживаемый код.

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

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

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

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

Но вместе с тем он является во многом новаторским - атрибуты, делегаты и события, прекрасно вписанные в общую идеологию языка, прочно заняли место в сердцах .NET - разработчиков. Их введение позволило применять принципиально новые приемы программирования. [14]

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

Рассмотрим основные особенности языка программирования С#:

  • Полный и хорошо определенный набор основных типов.
  • Полная поддержка классов и объектно-ориентированного программирования, включая наследование интерфейсов и реализаций, виртуальных функций и перегрузки операторов.
  • Встроенная поддержка автоматической генерации XML-документации.
  • Возможность отметки классов и методов атрибутами, определяемыми пользователем. Это может быть полезно при документировании и способно воздействовать на процесс компиляции (например, можно пометить методы, которые должны компилироваться только в отладочном режиме).
  • Автоматическое освобождение динамически распределенной памяти.
  • Полный доступ к библиотеке базовых классов .NET, а также легкий доступ к Windows API (если это действительно необходимо).
  • Поддержка свойств и событий в стиле VB.
  • Простое изменение ключей компиляции. Позволяет получать исполняемые файлы или библиотеки компонентов .NET, которые могут быть вызваны другим кодом так же, как элементы управления ActiveX (компоненты СОМ).
  • Указатели и прямой доступ к памяти, если они необходимы. Однако язык разработан таким образом, что практически во всех случаях можно обойтись и без этого.
  • Возможность использования С# для написания динамических web-страниц ASP.NET.

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

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

3. Создание графического приложение на языке программирования высокого уровня

3.1. Интегрированная среда разработки C++ Builder

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

Для быстрого и удобного создания программ с графическим интерфейсом используют специальные среды визуального программирования. Почти каждый современный язык программирования имеет по крайней мере одну такую среду: Object Pascal - Borland Delphi, Basic - Visual Basic, C++ - Borland C ++ Builder, Microsoft Visual C.

Визуальное программирование еще называют Rapid Application Development (RAD), "быстрая разработка приложений". Технология RAD существенно ускоряет создание программ с графическим интерфейсом. Инструментальная система Builder, подобно другим системам визуального программирования (Visual C, Visual Basic, Delphi и т.д.), в первую очередь является посредником между интерфейсом прикладного программирования Windows (API - Application Program Interface) и программистом, позволяя даже начинающим разработчикам быстро создавать программные продукты, которые будут иметь графический интерфейс пользователя (GUI - Graphic User Interface). [17]

C++ Builder – это технология визуального программирования, в которой максимально автоматизировано ее трудоемкую часть – создание графических программ с диалоговыми окнами.

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

В С++ Builder используется более 100 компонент. Все компоненты собраны в библиотеке визуальных компонентов VCL - Visual Class Library. С++ Builder предназначен для написания программ на языке программирования C++ и сочетает VCL и среду программирования (IDE - Integrated Development Environment), написанную для Delphi с компилятором C++.

Цикл создания программных проектов в C++ Builder является аналогичным Delphi, но с существенными улучшениями. Большинство компонентов, разработанных в Delphi, можно использовать и в C++ Builder без модификации, но, к сожалению, обратное утверждение не справедливо. С++ Builder позволяет методом drag-and-drop довольно просто разрабатывать интерфейсные программы, что приводит к повышению эффективности и простоты программирования, поскольку программисту не надо каждый раз создавать те элементы собственных программ, которые могут быть реализованы с помощью уже существующих объектов.

Основным объектом визуального программирования является компонент. Компонентами в C ++ Builder являются объекты или классы объектов. Их непосредственно видно на экране (за исключением группы невидимых компонентов), их можно передвигать мышью, они могут реагировать на щелчки клавиш клавиатуры, мыши. [14]

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

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

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

В качестве примера объекта рассмотрим компонент Button, который по сути является кнопкой и имеет ряд свойств: имя, размеры (ширина и высота), расположение на форме, определение границ, надпись на кнопке, шрифт, стиль, размер и цвет надписи, видимость (кнопка может существовать, но быть невидимой) и др. [16]

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

Программирование в С++ Builder состоит из двух этапов:

– конструирования визуального интерфейса с помощью компонентов;

– написания программного кода, выполнение команд которого обеспечит решения.

Окно среды C ++ Builder состоит из следующих элементов (рис. 1): [18]

– окно формы;

– окно кода программы;

– главное меню;

– кнопки инструментальных панелей;

– палитра компонентов;

– окно инспектора объектов.

Рисунок 1 – Интерфейс среды разработки C++ Builder

Окно формы занимает большое место и является прямоугольным серым "контейнером" (рис. 1), на который при проектировании формы размещают компоненты (кнопки, надписи, панели, окна редакторов и т.д.). Форма сама является компонентом с названием Form. Без дополнительных указаний заголовок компонента (свойство Caption) совпадает с его названием (свойство Name), к которой добавляется порядковый номер, начиная с 1 (например Button1, Button2). но заголовок можно изменить с помощью свойства Caption. Размеры формы можно изменять или с помощью окна Object Inspector, или просто перетащив мышкой линии границы формы.

Для размещенных на форме компонентов можно вызвать контекстную справку, для чего следует выделить нужный компонент и нажать клавишу <F1>. Если щелкнуть на самой форме и нажать клавишу <F1>, откроется справка по классу формы TForm. [19]

После запуска C++ Builder редактор кода содержит минимальный набор инструкций, обеспечивает нормальное функционирование пустой формы в качестве Windows окна. При создании проекта программист вносит в него нужный программный код.

3.2. Создания графической программы в среде C++ Buider

Рассмотрим методику создания графической программы на примере создания программного продукта для обслуживания клиентов автозаправочной станции. [20]

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

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

Кнопка «Очистить» предназначена для очистки полей для ввода данных.

Кнопка «Выход» предназначена для выхода из программы.

Написания каждой графической программы состоит из некоторых этапов.

Первый шаг – проектирование интерфейса программного продукта.[13]

Для этого необходимо запустить среду программирования C++ Builder, создать проект оконного приложения, на форме поместить такие компоненты (таблица 1):

Таблица 1 – Компоненты, которые используются в программе «Oil»

№ п/п

Название компонента

Предназначение

1

Form1

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

2

Edit1, Edit2, Edit3, Edit4

Поля для ввода количества покупаемого топлива

3

Edit5, Edit6, Edit7, Edit8

Поля для ввода количества покупаемого масла

4

RadioGroup1

Компонент для группировки компонентов, связанных с покупкой топлива

5

GroupBox1

Компонент для группировки компонентов, связанных с покупкой масла

6

Label1

Надпись-заголовок формы

7

CheckBox1, CheckBox2,

CheckBox3,

CheckBox4

Флажки для выбора масла

8

StaticText1

Вывод промежуточных и конечных результатов

9

BitBtn1

Кнопка «Очистить»

10

BitBtn2

Кнопка «Заказать»

11

BitBtn3

Кнопка «Выход»

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

Таблица 2 – Свойства компонентов

№ п/п

Название компонента

Свойство компонента

Значение свойства

1

Form1

Caption

Oil

2

Edit1, Edit2, Edit3, Edit4, Edit5, Edit6, Edit7, Edit8

Text

0

3

Label1

Caption

Заправка Oil

4

GroupBox1

Caption

Масло

5

RadioGroup1

Caption

Топливо

6

CheckBox1

Caption

MotorOil

7

CheckBox2

Caption

Q8

8

CheckBox3

Caption

LukOil

9

CheckBox4

Caption

Torpl

10

StaticText1

Caption

Сумма покупки 0 руб.

11

RadioGroup1

Items

А-76,

А-92,

А-95,

Дизтопливо

12

BitBtn1

Caption

Очистить

13

BitBtn2

Caption

Заказать

14

BitBtn3

Caption

Выход

После выполненных действий и настройки компонентов с помощью Object Inspector, интерфейс примет следующий вид (рис. 2):

Рисунок 2 – Интерфейс программы «Oil»

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

Ввод данных в поля для указания количества топлива (на примере компонента Edit1):

if (RadioGroup1->ItemIndex==0)

{

Edit2->Enabled=false;

Edit3->Enabled=false;

Edit4->Enabled=false;

sum=StrToFloat(Edit1->Text)*50.75;

StaticText1->Caption="Сумма покупки "+FloatToStr(sum)+" руб.";

RadioGroup1->Enabled=false;

}

Нажатие на кнопку BitBtn2.

StaticText1->Caption="Сумма покупки "+FloatToStr(sum+c4+c1+c2+c3)+" руб.";

MessageDlg("Заказ принят!", mtInformation, TMsgDlgButtons()<<mbYes,0);

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

Запустим программу на выполнение и введем следующие параметры (рис.3):

Рисунок 3 – Ввод данных в программу

После нажатия на кнопку «Заказать», получим следующий результат (рис.4):

Рисунок 4 – Вывод данных

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

При нажатии на кнопку Выход графическое приложение будет закрыто.

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

ЗАКЛЮЧЕНИЕ

Наиболее распространенным языком программирования в течение нескольких последних десятилетий, вне всякого сомнения, является язык С ++, на основе которого "выросли" многие современные языки программирования и программные среды.

Этому способствовали такие его свойства, как лаконичность, мощность, гибкость, мобильность, возможность доступа ко всем функциональным средствам системы. Программировать на С ++ можно как для Windows, так и для Unix, причем для каждой из операционных систем существует значительное количество средств разработки: от компиляторов до мощных интерактивных сред, как, например, Borland С ++ Builder, Microsoft Visual C ++ или Visual Studio .NET.

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

– рассмотрено историю возникновения алгоритмических языков программирования;

  • описано основы классификации языков программирования;
  • раскрыто теоретические понятия языков программирования высокого уровня;
  • рассмотрено интегрированную среду разработки программных продуктов C++ Builder;
  • создано оконное приложение для демонстрации методов разработки графических программ.

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

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

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

  1. Аммерааль Л. STL для программистов на С++: Пер. с англ. — М.: ДМК, 2011. — 240 с.
  2. Бочков С. О., Субботин Д. М. Язык программирования Си для персонального компьютера. — М.: Радио и связь, 2011. — 384 с.
  3. Бобровский С. Самоучитель програмирования на языке C++ в среде Borland C++ Builder М.: ИНФРА-М, 2011.–251 c.
  4. Бруно Бабэ. Просто и ясно о Borland C++: Пер. с англ. - Москва: БИНОМ, 2014. – 400с.
  5. Джосьютис Н. М. C++. Стандартная библиотека. Для профессионалов: Пер. с англ. — СПб.: Питер, 2014. — 730 с.
  6. Керниган Б. В., Ритчи Д. М. Язык программирования Си: Пер. с англ. — 3-е изд. — СПб.: Невский Диалект, 2011. — 352 с.
  7. Липпман С. Б. Основы программирования на C++: Пер. с англ. — М.: Вильямс, 2012. — 256 с.
  8. Липпман С. Б., Лажойе Ж. Язык программирования С++. Вводный курс: Пер. с англ. — 3-е изд. — М.: ДМК, 2011. — 1104 с.
  9. Лишнер Р. STL. Карманный справочник: Пер. с англ. — СПб.: Питер, 2015. — 187 с.
  10. Мейерс С. Эффективное использование STL: Пер. с англ. — СПб.: Питер, 2013. — 224 с.
  11. Оллисон Ч. Философия С++. Практическое программирование. С.Петербург 2014. – 608 с.:ил.
  12. Послед Б.С. Borland C++ Builder 6. Разработка приложений баз. М.: 2013г. -360 г.
  13. Стенли Б. Липпман. C++ для начинающих: Пер. с англ. 2тт. - Москва: Унитех; Рязань: Гэлион, 2012. – 345с.
  14. Страуструп Б. Язык программирования C++: Пер. с англ. — 3-е спец. изд. — М.: Бином, 2013. — 1104 с.
  15. Страуструп Б. Дизайн и эволюция языка C++. Объектно- ориентированный язык программирования: Пер. с англ. — М.: ДМК пресс, Питер, 2013. — 448 с.
  16. Холингворт Д. Учебник по программированию в среде С++ Builder 5. – Наука.–М.: 2011. –865 с.
  17. Юпашников A.M. Программирование в среде C++ Builder. — М.: МИФИ, 2014. – 360 c.
  18. Эккель Б. Философия C++. Введение в стандартный C++: Пер. с англ. — 2-е изд. — СПб.: Питер, 2014. — 572 с.
  19. Эккель Б., Эллисон Ч. Философия C++. Практическое программирование: Пер. с англ. — СПб.: Питер, 2014. — 608 с. с. 1 (из 2)
  20. STL — стандартная библиотека шаблонов C++: Пер. с англ. / П. Плаугер, А. Степанов, М. Ли, Д. Массер. — СПб.: БХВ-Петербург, 2014. — 656 с.

Приложение А

Листинг программы

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

float sum,c1,c2,c3,c4;

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn2Click(TObject *Sender)

{

Close();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)

{

Edit1->Text=0;

Edit2->Text=0;

Edit3->Text=0;

Edit4->Text=0;

Edit5->Text=0;

Edit6->Text=0;

Edit7->Text=0;

Edit8->Text=0;

Edit1->Enabled=true;

Edit2->Enabled=true;

Edit3->Enabled=true;

Edit4->Enabled=true;

RadioGroup1->Enabled=true;

RadioGroup1->ItemIndex=-1;

CheckBox1->Checked=false;

CheckBox2->Checked=false;

CheckBox3->Checked=false;

CheckBox4->Checked=false;

StaticText1->Caption="Сумма покупки "+FloatToStr(0)+" руб.";

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Edit1Change(TObject *Sender)

{

if (RadioGroup1->ItemIndex==0)

{

Edit2->Enabled=false;

Edit3->Enabled=false;

Edit4->Enabled=false;

sum=StrToFloat(Edit1->Text)*50.75;

StaticText1->Caption="Сумма покупки "+FloatToStr(sum)+" руб.";

RadioGroup1->Enabled=false;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Edit2Change(TObject *Sender)

{

if (RadioGroup1->ItemIndex==1)

{

sum=StrToFloat(Edit2->Text)*70.3;

StaticText1->Caption="Сумма покупки "+FloatToStr(sum)+" руб.";

RadioGroup1->Enabled=false;

Edit1->Enabled=false;

Edit3->Enabled=false;

Edit4->Enabled=false;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Edit3Change(TObject *Sender)

{

if (RadioGroup1->ItemIndex==2)

{

sum=StrToFloat(Edit3->Text)*82.75;

StaticText1->Caption="Сумма покупки "+FloatToStr(sum)+" руб.";

RadioGroup1->Enabled=false;

Edit1->Enabled=false;

Edit2->Enabled=false;

Edit4->Enabled=false;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Edit4Change(TObject *Sender)

{

if (RadioGroup1->ItemIndex==3)

{

sum=StrToFloat(Edit4->Text)*100;

StaticText1->Caption="Сумма покупки "+FloatToStr(sum)+" руб.";

RadioGroup1->Enabled=false;

Edit1->Enabled=false;

Edit2->Enabled=false;

Edit3->Enabled=false;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Edit5Change(TObject *Sender)

{

if (CheckBox1->Checked==true)

{

c1=StrToFloat(Edit5->Text)*140.5;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Edit6Change(TObject *Sender)

{

if (CheckBox2->Checked==true)

{

c2=StrToFloat(Edit6->Text)*160.5;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Edit7Change(TObject *Sender)

{

if (CheckBox3->Checked==true)

{

c3=StrToFloat(Edit7->Text)*120;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Edit8Change(TObject *Sender)

{

if (CheckBox4->Checked==true)

{

c4=StrToFloat(Edit8->Text)*160.5;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn3Click(TObject *Sender)

{

StaticText1->Caption="Сумма покупки "+FloatToStr(sum+c4+c1+c2+c3)+" руб.";

MessageDlg("Заказ принят!", mtInformation, TMsgDlgButtons()<<mbYes,0);

}

//---------------------------------------------------------------------------