Файл: История возникновения и развития языка программирования Си (С++) и Java(История и характеристика Java ).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 04.04.2023

Просмотров: 148

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

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

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

Популярность Java объясняется просто – это банальное нежелание многих разработчиков переучиваться и изучать новые семантически правильные языки. Весь свой успех Java снискал только в самом своем начале, успешно заменив в корпоративной разработке C++ и только улучшив, корректно дополнив его[12].

Рассмотрим пример реализации элемента пользовательского интерфейса “Slider”. Перед нами стояла задача разместить на странице произвольное количество slider`ов и контролировать их состояние (получать или задавать определенные значения). Также нужна была возможность изменять внешний вид элементов ползунка (самой шкалы и рукояти). Отличительной важностью обладало соблюдение кроссбраузерности.

Для удобства и лучшей совместимости выбран браузер Internet Explorer, т.к. именно данный браузер зачастую устанавливается по умолчанию. И лишь после проверки, плагин можно конвертировать в иные популярные у пользователей браузеры, что позволит уменьшить количество случаев невозможности отображения скрипта. Так как реализуемый на html ползунок не отвечает заданным требованиям, была использована среда JavaScript для создания slider. Перед реализацией скрипта, подготавливаем css классы ползунка;

.slider {

background-image: url(gifka.gif);

background-repeat: repeat-x;

}

.knob {

position: relative;


background-image: url(gifka2.gif);

}

Данным кодом определяется фон и позиция кнопок. Вертикаль и горизонталь предполагается выполнить в одном стиле. Располагаться кнопка на slider`е будет относительно исходного места. Также определяем блочные элементы для размещения slider`ов:

<div id="sl"></div>

<div id="sl2"></div>

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

function slider(elemId, sliderWidth, range1, range2, step) {

var knobWidth = 17; // ширина и высота бегунка

var knobHeight = 21; // меняется в зависимости от изображений

var sliderHeight = 21; // высота slider'а

var offsX,tmp; // вспомагательные переменные

var d = document;

var isIE = d.all || window.opera; // определяем модель DOM

var point = (sliderWidth-knobWidth-3)/(range2-range1); // point - количество пикселей на единицу значения

var slider = d.createElement('DIV'); // создаем slider

slider.id = elemId + '_slider';

slider.className = 'slider';

d.getElementById(elemId).appendChild(slider);

var knob = d.createElement('DIV'); // создаем ползунок

knob.id = elemId + '_knob';

knob.className = 'knob';

slider.appendChild(knob); // добавляем его в документ

knob.style.left = 0; // бегунок в нулевое значение

knob.style.width = knobWidth+'px';

knob.style.height = knobHeight+'px';

slider.style.width = sliderWidth+'px';

slider.style.height = sliderHeight+'px';

var sliderOffset = slider.offsetLeft; // sliderOffset - абсолютное смещение slider'а

tmp = slider.offsetParent; // от левого края в пикселях (в IE не работает)

while(tmp.tagName != 'BODY') {

sliderOffset += tmp.offsetLeft; // тут его и находим

tmp = tmp.offsetParent; } if(isIE) // в зависимости от модели DOM { // назначаем слушателей событий

knob.onmousedown = startCoord;

slider.onclick = sliderClick;

knob.onmouseup = endCoord;

slider.onmouseup = endCoord;

}

else {

knob.addEventListener("mousedown", startCoord, true);

slider.addEventListener("click", sliderClick, true);

knob.addEventListener("mouseup", endCoord, true);

slider.addEventListener("mouseup", endCoord, true);

}

// функции установки/получения значения

function setValue(x) // установка по пикселям

{

if(x < 0) knob.style.left = 0;

else if(x > sliderWidth-knobWidth-3) knob.style.left = (sliderWidth-3-knobWidth)+'px';

else {

if(step == 0) knob.style.left = x+'px';

else knob.style.left = Math.round(x/(step*point))*step*point+'px';

}

d.getElementById('info').value = getValue(); / это вывод значения примера

}

function setValue2(x) // установка по значению

{ if(x < range1 || x > range2) alert('Value is not included into a slider range!');

else setValue((x-range1)*point);

d.getElementById('info').value = getValue();

}

function getValue()

{return Math.round(parseInt(knob.style.left)/point)+range1;} //

слушатели событий

function sliderClick(e) {

var x;

if(isIE) {

if(event.srcElement != slider) return; //IE onclick bug

x = event.offsetX - Math.round(knobWidth/2);

}

else x = e.pageX-sliderOffset-knobWidth/2;

setValue(x);

}

function startCoord(e) {

if(isIE) {

offsX = event.clientX - parseInt(knob.style.left);


slider.onmousemove = mov;

}

else {

slider.addEventListener("mousemove", mov, true);

}

}

function mov(e) {

var x;

if(isIE) x = event.clientX-offsX;

else x = e.pageX-sliderOffset-knobWidth/2;

setValue(x);

}

function endCoord() {

if(isIE) slider.onmousemove = null;

else slider.removeEventListener("mousemove", mov, true); } // объявляем функции

setValue2 и getValue как методы класса

this.setValue = setValue2;

this.getValue = getValue; } // конец класса

var mysl1 = new slider('sl', 300, 0, 200, 20);

var mysl2 = new slider('sl2', 400, 100, 200, 0);

Параметры данного класса:

  • elemId – ID элемент, внутри которого размещен ползунок.
  • sliderWidth – длина ползунка, измеряемая в пикселях.
  • max- максимальное значение элемента, соответствующее крайнему правому положению ползунка.
  • min – Минимальное значение элемента, соответствующее крайнему левому положению ползунка.
  • range1, range2 – нижняя и верхняя границы значений ползунка.
  • step- шаг изменения значения ползунка. (0 – единичный шаг)

Получаем следующий результат относительно slider`:

Если в ползунке больше одной рукоятки, следует применять values, отвечающий за массив значений. Для этого следует указать (для получения и установления):

mysl1.setValue(80); // устанавливаемое значение должно попадать в диапазон slider'а mysl2.getValue();

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

Данный плагин получил огромное распространение, благодаря своей относительной простоте и большому функционалу. Плагин Slider позволяет превращать блочные элементы, такие как div`ы, в элементы управления, которые называются ползунками. Установить нужный диапазон значений, изменение громкости, ценовые рамки, все это чаще всего реализовывается с помощью Slider`a. Однако по прошествии времени Java не предложил ничего принципиально нового – из-за вполне понятных функциональных ограничений, накладываемых на него еще более старым, но все еще мощным предком. Единственное, что сейчас удерживает Java на плаву – пресловутая кроссплатформенность, главный довод любителей Java. Однако сейчас каждый разработчик использует различные инструменты для различных задач, и использовать один инструмент, как ранее – попросту не имеет смысла.


Глава 2. История и развитие языка программирования C++

2.1.История и краткая характеристика языка программирования C++

C++ один из самых популярных языков программирования, также является ООП. Главная особенность представляет набор предопределенных классов, типы данных которых могут быть созданы несколько раз. Классы: можно дополнительно разместить членов функции для реализации определенных функций. Несколько объектов определенного класса могут быть определены для реализации функций в классе. Объекты могут быть определены как экземпляры, созданных во время выполнения. Эти классы также могут быть унаследованы от других новых классов.

Создание языка программирования Си положило начало новой эпохе программирования. Язык был разработан Деннисом Ритчи для создания операционной системы UNIX[13].

Си возник в результате начавшейся в 60-е годы революции в структурном программировании. В то время большие программы представляли собой тяжело отслеживаемый, длинный набор вызовов, возвратов, безусловных переходов, так называемый «макаронный код». Структурное программирование Си, сменив такие языки, как Алгол и Фортран, облегчило жизнь программиста. Сейчас программист — высокооплачиваемая профессия, на сайте поиска работы HeadHunter — hh.ua ежедневно публикуются сотни интересных предложений как для начинающих программистов для работы системным администратором, так и для профи — для разработки программного обеспечения[14].

В Кембриджском университете в начале 60-х годов задались целью написать язык, на котором можно было бы писать другие языки. Впоследствии к ним подсоединился Лондонский университет. Этот язык, восходящий корнями к Алголу, назвали CPL (Combine Programming Language). Язык Си явился логическим итогом этой работы и впитал многие конструкции CPL. Компилятор Си, в соответствии с традицией, заложенной Николаусом Виртом, написан на самом Си[15].

Язык C++ возник вследствие необходимости появления полноценного языка, который позволял бы решать не только математические задачи, но и задачи системного программирования. Ассемблер, на котором пишется низкоуровневая часть кода операционных систем, не только громоздок, но и слишком сильно привязан к определенному типу процессора. С этой точки зрения, язык C++ представляет собой универсальный, обобщенный Ассемблер. Вот почему именно Си установил образец, которому мы следуем до сих пор, хотя во многих языках, предшествующих Си, тоже был достигнут значительный прогресс[16].


Другая причина того, что в 1980-е годы язык C++ превратился в самый распространенный и популярный среди языков структурного программирования, – это его емкий, но простой синтаксис. Язык C++ – это удачное сочетание эффективности, выразительности и изящества.

Когда в конце 70-х годов масштабы проектов расширились до пределов, с которыми методики структурного программирования уже не справлялись, появилось новое направление в программировании — ООП, объектно-ориентированное программирование. Стремление создать объектно-ориентированный вариант самого распространенного языка программирования привело к появлению C++.

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

Существует множество реализаций языка C++, как бесплатных, так и коммерческих и для различных платформ. Например, на платформе x86 это GCC, Visual C++, Intel C++ Compiler, Embarcadero (Borland) C++ Builder и другие. C++ оказал огромное влияние на другие языки программирования, в первую очередь на Java и C#. C++ содержит средства разработки программ контролируемой эффективности для широкого спектра задач, от низкоуровневых утилит и драйверов до весьма сложных программных комплексов[18].

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

Шаблоны C++ дают возможность построения обобщённых контейнеров и алгоритмов для разных типов данных. Попутно шаблоны дают возможность производить вычисления на этапе компиляции. Возможность встраивания предметно-ориентированных языков программирования в основной код.

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

Недостатки языка С++[19]:

− Плохо продуманный синтаксис сужает спектр применимости языка (что, с учётом претензий на «универсальность», делает его крайне неудобным в некоторых задачах).