Файл: История возникновения и развития языка программирования Си (С++) и Java (Структура данных и синтаксис языка программирования C++).pdf
Добавлен: 30.06.2023
Просмотров: 47
Скачиваний: 3
СОДЕРЖАНИЕ
Глава 1. История и характеристика Java
1.1. Понятие и история создания языка программирования Java
1.2. Особенности и преимущества языка программирования Java
Глава 2. История и развитие языка программирования C++
2.1.История и краткая характеристика языка программирования C++
2.2.Структура данных и синтаксис языка программирования C++
Глава 3. Пример использования языков программирования Java и C++
Доступность. Для С++ существует огромное количество учебной литературы, переведённой на всевозможные языки. Язык имеет высокий порог вхождения, но среди всех языков такого рода обладает наиболее широкими возможностями.
Недостатки языка С++[20]:
− Плохо продуманный синтаксис сужает спектр применимости языка (что, с учётом претензий на «универсальность», делает его крайне неудобным в некоторых задачах).
− Унаследованные от Си низкоуровневые свойства существенно тормозят и затрудняют прикладную разработку.
− Язык не содержит многих важных возможностей.
− Язык содержит опасные возможности, существенно снижающие качество программ сразу по всем показателям.
− Производительность труда программистов на языке оказывается неоправданно низка, а продукт труда – низкокачественным.
В книге «Дизайн и эволюция C++» Бьёрн Страуструп описывает принципы, которых он придерживался при проектировании C++ (приводятся в сокращении):
- Получить универсальный язык со статическими типами данных, эффективностью и переносимостью языка C.
- Непосредственно и всесторонне поддерживать множество стилей программирования.
- Дать программисту свободу выбора, даже если это даст ему возможность выбирать неправильно.
- Максимально сохранить совместимость с C, тем самым делая возможным лёгкий переход от программирования на C.
- Избежать разночтений между C и C++: любая конструкция, допустимая в обоих языках, должна в каждом из них обозначать одно и то же и приводить к одному и тому же поведению программы.
- Избегать особенностей, которые зависят от платформы или не являются универсальными.
- «Не платить за то, что не используется» — никакое языковое средство не должно приводить к снижению производительности программ, не использующих его.
- Не требовать слишком усложнённой среды программирования.
C – это очень мощный язык программирования. Благодаря своей силе, C просто идеален, когда вам нужно получить полный контроль над создаваемой программой. Именно поэтому, большинство современных популярных операционных систем, таких как Windows, OSX и Linux, написаны именно на языке C. Почти все компьютеризированные устройства, полностью или частично, используют в своей работе язык C. От микроволновок, пультов дистанционного управления и калькуляторов до баз данных и управляющих механизмов Шаттлов — язык C настолько универсален, что используется почти повсеместно[21].
Если говорить коротко, то С++ это все тот же C, но только с большим набором опций. В то время, как оба эти языка рассматриваются, как языки программирования общего назначения, C в большей степени используется при разработке софта «более понятного для машины», такого как операционные системы, тогда как C++ применяется для более высокоуровневых приложений, таких как бухгалтерские программы и движки видео игр[22].
C++ широко используется для разработки программного обеспечения, являясь одним из самых популярных языков программирования. Область его применения включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений (игр). Существует множество реализаций языка C++, как бесплатных, так и коммерческих и для различных платформ[23].
Для больших проектов наподобие разработки веб-браузера, создания драйвера видеокарты или написания алгоритма для финансовых торгов, языкC++ является самым лучшим вариантом. Этот язык обладает таким качеством, как объектно-ориентированное программирование, что в C поддерживается с огромным трудом. Благодаря этому, для некоторых задач C++ является более подходящим нежели C, так как поможет решить одну и ту же задачу за меньшее количеств времени[24].
Движки большинства популярных сегодня компьютерных игр, таких как Call of Duty, Halo и FIFA написаны на языке С++. Также, большие анимационные студии наподобие Pixar, Disney и DreamWorks используют C++ в той или иной степени в своем анимационном софте. Благодаря своей надежности и скорости, язык C++ применяется также при разработке частных высокочастотных торговых алгоритмов, позволяющих фирмам с Wall Street продавать тысячи акций за доли секунды.
2.2.Структура данных и синтаксис языка программирования C++
Особенность работы со стандартными типами данных в С/С++, связанная с различными размерами и точностью этих типов, приводит к зависимости реализации программного кода от транслятора. При смене платформы можно получить различное поведение программы. Из составных типов данных необходимо отметить отсутствие структур (struct) и перечислений (enum)[25].
Подобная ситуация и с массивами: в языках С# и Java это объекты класса Array. В C, C++ и C# есть как настоящие многомерные массивы, так и массивы массивов. Реализация пользовательского типа данных класс, который является основой парадигмы объектно-ориентированного программирования, может быть выполнена двумя способами: как структура (в С) с определенными ограничениями в применении и как класс (в С++, C# и Java). Использование параметризованных типов данных, как основы обобщенного программирования, реализовано в виде шаблонов (template) в С++, интегрировано в виртуальную среду выполнения C# и поддерживается в виде «контейнеров типа Т» (generics) в Java.
Работа с данными в программе, начиная с языка программирования С++, реализовано с использованием механизма пространства имен (namespace). Синтаксической основой для всех рассматриваемых языков программирования является С. Неизменным синтаксическим правилам подчиняются: реализация основных алгоритмических конструкций: альтернативное и многозначное ветвление, итерационные и арифметические циклы; правила объявления, определения и вызова функций, объявления и использования переменных; однозначные обозначения большинства операций и поддержка соответствующих приоритетов в их работе. Различий также много, рассмотрим наиболее существенные из них. Для всех языков программирования семейства С точкой входа в программу является функция main(). В С/С++ функция main() не имеет прототипа и, следовательно, можно использовать различные ее формы: void main(); int main(); int main(int argc, char *argv[], char* envp[]). В силу того, что C# и Java полностью объектно-ориентированные языки, один из классов в программном должен быть открытым классом и содержать метод main, с которого начнется выполнение программы.
Традиционными указателями для С/С++ являются неуправляемые указатели, которым можно присвоить любой адрес памяти, даже если она находится за пределами исполнительной среды. В С# среда исполнения Common Language Runtime (CLR) позволяет работать с неуправляемыми данными, но при этом соблюдается определенная дисциплина в их использовании: например, соответствующий модуль должен быть помечен как небезопасный (unsafe).
Еще одной традицией при работе с памятью для С/С++ является ручной способ управления, который поддерживает явное выделение и освобождение памяти в куче. В этом случае возможна «утечка памяти», когда память занята данными, ссылки на которые удалены или больше не используются. В С# и Java для разрешения таких ситуаций используется система сборки мусора (Garbage Collector). Сборщик мусора освобождает память от лишних объектов автоматически по ходу выполнения программы, является частью исполнительной среды С# и виртуальной машины Java.
В результате очередной сборки мусора оставшиеся объекты перемещаются в один непрерывный блок памяти, что решает проблему сильной фрагментации кучи. Но возможность вручную отслеживать использование объекта и выполнять операции по освобождению занятых объектом ресурсов может выполняться c помощью интерфейсов IDisposable в С# и Closeable в Java.
Глава 3. Пример использования языков программирования Java и C++
Отправка электронной почты с помощью Java:
Для отправки электронной почты необходимо установить соединение с сокетом по порту 25, который обычно используется для протокола SMTP(Simple Mail Transport Protocol - простой протокол передачи почты). Протокол SMTP описывает формат электронных сообщений. Вы можете подключаться к любому серверу, на котором выполняется служба SMTP. Однако сервер должен быть готов к приему запроса на соединение.
Ранее серверы с демонами sendmail могли принимать любые электронные сообщения, но в настоящее время из-за большого объема спама в большинстве серверов встроена проверка и допуск почтовых сообщений только от разрешенных пользователей или IP-адресов.
Сразу после соединения с сервером следует послать заголовок сообщения в формате SMTP, который достаточно просто создать, а затем и текст сообщения так, как показано ниже:
Создайте сокет на компьютере:
В выходном потоке передайте следующую информацию:
В спецификации протокола SMTP(документ RFC 821) требуется, чтобы строки заканчивались символами /r и /n.
Приведем пример с надписью «HelloWorld» на языке Java, С++ и на С.
Java.
С
С++
Для того, чтобы наглядно продемонстрировать использование С и С++ на практике нами была выбрана задача, в которой требовалось ввести со стандартного ввода или из файла ряд целых чисел, а затем вывести только нечетные из них, причем в обратном порядке следования. Это одна из простейших задач, которая существенным образом требует для своего решения работы с массивами, циклами, ветвлением и вводом/выводом, а также позволяет продемонстрировать вызовы подпрограмм.
Строка 3. В C/C++ выполнение программы всегда начинается с функции main.
Строки 7 и 11. В заголовке цикла через точку с запятой указываются начальная установка, условие продолжения и правило пересчета параметра цикла. Операции ++ и -/- - известнейшие из сокращений языка С, означающие инкремент и декремент переменной, то есть увеличение и уменьшение ее значения на единицу.
Строка 8. Функция scanf вводит по формату, заданному первым параметром, значения переменных, адреса которых заданы остальными параметрами. Здесь адрес, куда вводится значение, вычисляется с помощью адресной арифметики, к адресу расположения массива М прибавляется смещение на N элементов. Тот же эффект можно получить, записав &M[N].
Строка 12. Операция % вычисляет остаток от деления. Условие оператора if считается выполненным, если численное значение выражения отлично от нуля.
Строка 13. Функция printf - печать по формату действует аналогично scanf, но вместо адресов ей передаются значения, подлежащие выводу.
Строки 3-13. Объявляется темплетный класс Аrray с параметром Т. Он представляет собой массив переменного размера объектов типа Т. Конечно, в нашей задаче нет никакой необходимости использовать темплетный класс. Однако нам хотелось продемонстрировать, как на C++ создается полиморфная структура данных, способная работать с любым типом элементов.
Строка 5. Конструктор класса. В нем инициализируется представление объекта. Например, в поле М заносится адрес блока памяти, заказанного операцией new T[Size].
Строка 8. Пример перегрузки операции []. Функция operator [] будет вызываться, когда квадратные скобки будут появляться справа от объекта класса Array .
Строка 9. Эта функция основная в реализации. Она добавляет элементы в массив, расширяя его при необходимости. Поскольку она сложнее остальных, ее определение вынесено из описания класса. Функции, описанные в теле класса, реализуются в C++ не вызовом, а inline-подстановкой. Это ускоряет работу программы, хотя увеличивает ее размер.
Строки 15-24. Определение функции Аrrау::Add(T) (между прочим, это ее полное имя).
Строка 27. Создаем объект типа Array. Темплет Аггау параметризируется типом int.
Сделаем выводы: В разработке мобильных приложений и на рынке web-приложений большим спросом пользуется Java, а для С/С++ базовая область - это системное программирование, что подразумевает широкую сферу применения (беспроводные интерфейсы, браузеры, интерпретаторы языка JavaScript, виртуальные машины Java, реализации языка C#, программы для мобильных телефонов, фотокамер и др.).