Файл: История возникновения и развития языка программирования Си (С++) и Java ( Теоретические основы языков программирования).pdf
Добавлен: 31.03.2023
Просмотров: 78
Скачиваний: 2
СОДЕРЖАНИЕ
Глава 1. Теоретические основы языков программирования
1.1. Содержание понятия и классификация языков программирования
1.2. История создания языков программирования
Глава 2. Обзор и сравнение языков Java и C++
2.1.История и краткая характеристика языков Java и C++
2.2. Пример использования языков программирования Java и C++
Стремясь изобрести небольшой, компактный и машинно-независимый код, разработчики возродили модель, использованную при реализации первых версий языка Pascal, заре эры персональных компьютеров. Никлаус Вирт, создатель языка Pascal, в свое время разработал машиннонезависимый язык, генерирующий промежуточный код для некоей гипотетической машины. Этот язык стал коммерческим продуктом под названием UCSD Pascal. Этот промежуточный код можно выполнять на любой машине, имеющей соответствующий интерпретатор. Инженеры, работавшие над проектом "Green", также использовали виртуальную машину, что решило их основную проблему[14].
Однако большинство сотрудников компании Sun имели опыт работы с операционной системой UNIX, поэтому в основу разрабатываемого ими языка был положен язык C++, а не Pascal. В частности, они сделали язык «объектно-», а не процедурно-ориентированным.
Как сказал Гослинг в своем интервью: "Язык — это всегда средство, а не цель". Сначала Гослинг решил назвать его "Oak" ("Дуб"). (Возможно потому, что он любил смотреть на дуб, растущий прямо под окнами его офиса в компании Sun.) Потом сотрудники компании Sun узнали, что слово «Oak» уже используется в качестве имени ранее созданного языка программирования, и изменили название Java[15].
В 1992 году в рамках проекта Green была выпущена первая продукция, названная "*7". Это было средство для чрезвычайно интеллектуального дистанционного управления. (Оно имело мощность рабочей станции SPARK, помещаясь в коробочке размером 6x4x4 дюйма.) К сожалению, ни одна из компаний— производителей электронной техники не заинтересовалась этим изобретением.
Затем группа стала заниматься разработкой устройства для кабельного телевидения, которое могло бы осуществлять новые виды услуг, например, включать видеосистему по требованию. И снова они не получили ни одного контракта. (Забавно, что одной из компаний, отказавшихся подписать с ними контракт, руководил Джим Кларк (Jim Clark) — основатель компании Netscape, впоследствии сделавшей очень много для успеха языка Java.)[16]
Весь 1993 год и половину 1994 года продолжались безрезультатные поиски покупателей продукции, разработанной в рамках проекта "Green" (под новым названием "First Person, Inc."). (Патрик Нотон, один из основателей группы, впоследствии в основном занимавшийся маркетингом, налетал в общей сложности более 300 тысяч миль, пытаясь продать разработанную технологию.) Проект "First Person, Inc." был прекращен в 1994 году[17].
Тем временем в рамках Интернет разрасталась сеть World Wide Web. Ключом к этой сети является браузер, превращающий гипертекст в изображение на экране. В 1994 году большинство людей пользовалось браузером Mosaic, некоммерческим Web-броузером, разработанным в суперкомпьютерном центре Университета штата Иллинойс (University of Illinois) в 1993 году. (Частично этот браузер был написан Марком Андреессеном (Mark Andreessen) за 6,85 доллара в час. В то время Марк заканчивал университет и браузер был его дипломной работой. Затем он стал одним из основателей и главным программистом компании Netscape, и к нему пришли слава и богатство.
Возможность беспрепятственно пользоваться апплетами – маленькими, практичными, и независимыми сетевыми приложениями внутри web-страниц. Настройка и распространение апплетов не сложнее чем у стандартного документа HTML. Приложения проходят мощную объектно-ориентированную обработку с простым и понятным синтаксисом внутри комфортной среды. Поэтому программисты в большом количестве занимаются созданием новых утилит и апплетов. Каждый программист получает классы в большом количестве и может ясно абстрагировать многие системные функции, включая в работу окна, сеть и функциональный ввод-вывод.
Главная их особенность – это обеспечение, несмотря на платформу, большого спектра модулей с системными интерфейсами. Стоит также отметить, что такая платформа обладает отличной безопасностью, потому подходит для любого сетевого окружения. У нее нейтральная архитектура, и это особо привлекательно для создания разных сетевых модулей. Итак, с использованием интерпретируемого и динамичного языка Java пользователь получает: Интерпретируемую среду, в которой с легкостью и быстротой создаются прототипы, не используя обычную сборку и перекомпиляцию. Среду, которую можно динамически расширить, ведь подгруздка классов проходит, когда это особо нужно и практически моментально. Отсутствие проблем с «хрупким базовым классом» ведь элементы встраиваются в память при загрузке, а не при компиляции[18].
Java является одним из самых популярных языков программирования. Как большой, так и малый бизнес переполнен софтом написанным на этом языке. Поэтому, если у вас есть идея по созданию инновационной программы для бизнеса, Java, вполне возможно, наиболее подходящий для этого язык. Тоже самое касается и разработки приложений под платформу Android, так как Java является основным языком по написанию программ среди разработчиков под операционную систему Google[19].
Большое количество популярных приложений на платформе Android, такие как Angry Birds, Temple Run и Candy Crush Saga, написаны на языке Java. Тоже самое, касается и большей части платного софта написанного для авиакомпаний, государственных и банковских учреждений[20].
Большое количество людей из сообщества программистов считают язык C, «дедушкой» всех современных языков программирования. Для такой точки зрения существует две причины. Во-первых, язык C был разработан в 70-х годах прошлого столетия, когда компьютеры могли занимать целые комнаты. Во-вторых, большое количество современных языков, таких как Java, C++ и Python, создавалось под влиянием языка C[21]. Однако, не смотря на свой почтенный возраст, языком C продолжают активно пользоваться, и пройдет еще немало времени, прежде чем этот язык начнет терять свою популярность.
Язык C применяет методику, которая позволяет снизить использование оперативной памяти настолько, насколько это возможно.
Большинство хороших программистов знают множество языков программирования. Если вы также не хотите останавливаться на одном языке, начать свое изучение с языка C – это хорошая идея. Как и со всеми стоящими вещами, поначалу изучение C будет даваться большинству с огромным трудом. Однако, это не должно служить сдерживающим фактором, так как после C, все остальные современные языки, такие как Objective C, C++, PHP и многие другие, будут даваться вам в изучении намного легче[22].
C – это очень мощный язык программирования. Благодаря своей силе, C просто идеален, когда вам нужно получить полный контроль над создаваемой программой. Именно поэтому, большинство современных популярных операционных систем, таких как Windows, OSX и Linux, написаны именно на языке C. Почти все компьютеризированные устройства, полностью или частично, используют в своей работе язык C. От микроволновок, пультов дистанционного управления и калькуляторов до баз данных и управляющих механизмов Шаттлов — язык C настолько универсален, что используется почти повсеместно[23].
Если говорить коротко, то С++ это все тот же C, но только с большим набором опций. В то время, как оба эти языка рассматриваются, как языки программирования общего назначения, C в большей степени используется при разработке софта «более понятного для машины», такого как операционные системы, тогда как C++ применяется для более высокоуровневых приложений, таких как бухгалтерские программы и движки видео игр.
C++ широко используется для разработки программного обеспечения, являясь одним из самых популярных языков программирования. Область его применения включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений (игр). Существует множество реализаций языка C++, как бесплатных, так и коммерческих и для различных платформ.
Для больших проектов наподобие разработки веб-браузера, создания драйвера видеокарты или написания алгоритма для финансовых торгов, язык C++ является самым лучшим вариантом. Этот язык обладает таким качеством, как объектно-ориентированное программирование, что в C поддерживается с огромным трудом. Благодаря этому, для некоторых задач C++ является более подходящим нежели C, так как поможет решить одну и ту же задачу за меньшее количеств времени[24].
Движки большинства популярных сегодня компьютерных игр, таких как Call of Duty, Halo и FIFA написаны на языке С++. Также, большие анимационные студии наподобие Pixar, Disney и DreamWorks используют C++ в той или иной степени в своем анимационном софте. Благодаря своей надежности и скорости, язык C++ применяется также при разработке частных высокочастотных торговых алгоритмов, позволяющих фирмам с Wall Street продавать тысячи акций за доли секунды.
2.2. Пример использования языков программирования Java и C++
В C++ возможность использования глобальных переменных позволяет создавать переменные, используемые в нескольких разных функциях с сохранением значения. Данное свойство позволяет объявлять и определять в рамках изучения алгоритмов сортировок такие переменные, как размер массива (n), размер пирамиды (heap_size) и другие.
В языке Java отсутствует возможность работы непосредственно с указателями. Это считается одним из сильнейших качеств языка C++. Это увеличивает сложность изучения, добавляет немало ошибок в случае больших кодов либо невнимательности. Однако, это позволяет свободно работать с памятью. Данный пункт отличает коды в рамках изучения структур данных: двусвязные списки, бинарные деревья поиска (BST – binary search tree), красно-чёрные деревья (RBT – red-black trees).
Рассмотрим в качестве примера красно-чёрные деревья. Одним из первых отличий в реализации RBT на языках программирования Java и C++ является описание структуры узла. Посредством языка C++ её можно описать способом, представленным в листинге 1.
Листинг 1.
Описание структуры узла на языке C++
struct Node {
int key;
node *left;
node *right;
node *parent;
char color; };
Описание посредством класса имеет аналогичный синтаксис.
В Java же всё обстоит немного иначе (листинг 2): структуры представляются в концепции классов. Узел в красно-чёрном дереве представляется с помощью класса Node, а знак указателя (*) отсутствует:
Листинг 2.
Описание структуры узла на языке Java
public class Node {
int key;
Node left;
Node right;
Node parent;
char color; }
В связи с этим в Java используется прямая адресация (листинг 4), в C++ – косвенная (листинг 3). В C++ возможна и прямая адресация, но в других случаях. Рассмотрим на примере инициализации полей узла. При создании класса красно-чёрного дерева в его конструктор добавляется описание инициализации узла nil – листа в дереве, особенностью которого является окрашивание в чёрный цвет.
Листинг 3.
Фрагмент описания класса на языке C++
class RedBlackTree {
private:
Node *nil;
Node *root; // корень дерева public:
RedBlackTree() {
nil = new Node;
nil->parent = nil;
nil->right = nil;
nil->left = nil;
nil->color = 'b';
root = nil; } …
Листинг 4.
Фрагмент описания класса на языке Java
public class RedBlackTree {
public static Node root; // корень дерева public Node nil = new Node();
public RedBlackTree() {
nil.parent = nil;
nil.right = nil;
nil.left = nil;
nil.color = 'b';
root = nil; } …
Так как используется динамическая память при написании структур данных, в языке C++ необходимо самостоятельно определить деструктор. В Java поддерживается автоматическое управление освобождением динамической памяти. Наличие заголовочных файлов также отличает оба языка. Посредством C++ возможно создание нескольких файлов, один или несколько из которых обычно заголовочные, с расширением .h (header file), и в них помещается описание структуры узла, класса дерева, подключаемых библиотек и многое другое. Из других файлов можно использовать эти данные после включения заголовочного файла. В Java отсутствуют заголовочные файлы.
Описание и видимость данных и методов класса помещаются в файле с расширением .class. Модификаторы доступа определяют доступ к переменным класса извне. В вышеприведённом коде в классе RedBlackTree создается корень дерева типа Node, а также узел nil, который далее в конструкторе инициализируется. В языке C++ используются указатели (листинг 3).
В языке Java корень дерева объявляется как статическое поле (static) для того, чтобы можно было получить к нему доступ за пределами класса RedBlackTree без создания экземпляра данного класса (листинг 4). В последующем это необходимо, например, для вызова функции print() (листинг 5), которая центрировано выводит все узлы в RBT, а также их цвет. Данная функция получает единственный аргумент – корень дерева (листинг 6).