Файл: Современные языки программирования (Краткая история языков программирования).pdf
Добавлен: 30.03.2023
Просмотров: 127
Скачиваний: 2
СОДЕРЖАНИЕ
Глава 1. Языки программирования
1.1 Краткая история языков программирования
1.3 Популярные языки программирования
1.4 Описание и сравнительные особенности наиболее популярных языков
Глава 2. Особенности языка программирования на примере JavaScript
2.1 Сравнительные особенности языка JavaScript
2.2 Пример кода на JavaScript №1
C# - объектно-ориентированный язык программирования. Мультипарадигмальный: поддерживает обобщенную, объектно-ориентированную, процедурную, функциональную парадигмы. Разработан в 2002 году. Относится к семье языков Си, разрабатывался как близкий по синтаксису к языкам C++ и Java, но несколько упрощенный в некоторых аспектах и более приспособленный к использованию с программной платформой Miscrosoft. [6, c.67][48] Язык имеет статическую типизацию, поддерживает полиморфизм, содержит абстрактные методы, подобные абстрактным методам языка С++, но использующие другой синтаксис. [2, c. 496-497][49]
Приведем в качестве примера синтаксиса ту же программу-приветствие:
using System;
namespace HelloWorld
{
class Hello
{
static void Main()
{
Console.WriteLine("Hello World!");
}
}
}
Следует отметить, что указанный год разработки для каждого из рассмотренных языков относится к первой выпущенной версии, при этом обозначенные особенности изложены для актуальных на сегодняшний день версий (прежде всего, мультипарадигмальность). Анализ истории развития языков программирования и сравнительных классификаций показывает, что среди десятков актуальных на сегодняшний день языков можно выделить ряд взаимосвязей, обусловленных их предшественниками. Ни один из языков не является абсолютно уникальным лексически, синтаксически и семантически, языки исторически связанны между собой, и наиболее популярные из них обладают свойством мультипарадигмальности, даже при условии, что изначально разрабатывались строго в одной парадигме. Языки Java, JavaScript, Паскаль и C# , созданные в период с 1991 по 2000 год и увидевшие с даты создания несколько своих версий, являются примерами такой мультипарадигмальности, расширяемой в новых выпусках. Они универсальны в сферах своего применения, уверенно занимают верхние строчки рейтингов и несомненно имеют перспективы и в будущем программирования.
Глава 2. Особенности языка программирования на примере JavaScript
2.1 Сравнительные особенности языка JavaScript
Как уже было изложено в рамках предыдущей главы, язык JavaScript мультипарадигмален: он объединяет в себе объектно-ориентированное (прототипное), обобщенное, функциональное, императивное, аспектно-ориентированное и событийно-ориентированное программирование.
Структурно JavaScript можно представить в виде объединения трех четко различимых друг от друга частей:
- ядро (ECMAScript)
- объектная модель браузера (BOM)
- объектная модель документа (DOM)
Если рассматривать JavaScript в отличных от браузера окружениях, то объектная модель браузера и объектная модель документа могут не поддерживаться.
Имена переменных и функций в JavaScript должны начинаться с буквы, $ или символа подчеркивания. Они могут даже содержать эмодзи или иероглифы! Идентификаторы зависимы от регистра: example и Example – это разные переменные.
Нельзя использовать в качестве имен зарезервированные слова языка: break, do, instanceof, typeof, case, else, new, var, catch, finally, return, void, continue, for, switch, while, debugger, function, this, with, default, if, throw, delete, in, try, class, enum, extends, super, const, export, import, implements, let, private, public, interface, package, protected, static, yield.
Выражения – это структурные единицы кода, которые можно вычислить и преобразовать в значение.
Логические значения true и false используются в сравнениях, условиях и циклах. Все остальные типы данных могут быть приведены к логическому значению.
Функция – это самостоятельный блок кода JavaScript, который можно повторно использовать в программе. Особенность функций в том, что их можно вызывать, передавать им аргументы и получать некоторое новое значение.
2.2 Пример кода на JavaScript №1
Рассмотрим программу, предлагающую сыграть в примитивный аналог игры AngryBirds (Рисунок 4). Пользователю предлагается ввести цифру, угадав запрограммированное значение нужного угла выстрела.
Рисунок 4. Выполнение кода программы примера №1
Программы, написанные на языке JavaScript, встраиваются непосредственно в html документы посредством парного тега <script>. [2, c.85][50]
Программа начинает работу с вывода сообщения для пользователя через alert. Отображение диалогового окна является побочным эффектом. Далее выполняется prompt, дающий пользователю возможность ввести число. Следующая строка кода задействует так называемое условное выполнение. [5, 47][51]. Функция isNaN проверяет, является ли введенное значение числом. В случаях, если результат этой проверки положительный, запускаются варианты, перечисленные в нескольких парах if/else. Программа может запустить альтернативные ветки в зависимости от значения, введенного пользователем. К выигрышу приводит значение в диапазоне от 65 до 75 включительно.
Код:
<meta charset="utf-8">
<script>
alert("Попади птицей по свинье!");
var angle=parseInt(prompt("У тебя есть только одна птица. Перед тобой - две свиньи: одна повыше, другая пониже. Введи угол, под которым ты будешь стрелять:"));
if (isNaN(angle)){
alert("Ты проиграл! В следующий раз вводи число");
}
else if (angle==0) {
alert("Ты проиграл! Угол, равный нулю? Серьезно?");
} else if (angle<0 || angle>=180) {
alert("Ты проиграл! Такой угол невозможен");
} else if (angle>90 && angle<180) {
alert("Какая неудача! Ты выстрелил в противоположную сторону! Свиньи все еще впереди - и они торжествуют.");
} else if (angle==90) {
alert("Тысяча чертей! Ты выстрелил птицей прямо вверх, и она упала обратно прямо на тебя");
} else if (angle<90 && angle>75){
alert("Проклятые свиньи! Птица пролетела слишком высоко");
} else if (angle<=75 && angle>=65){
alert("Победа! Твоя птица поразила верхнюю свинью и падая, сбила вторую свинью тоже");
} else if (angle<65 && angle>45) {
alert("Проклятые свиньи! Птица пролетела ровно между ними, не задев ни одну");
} else if (angle==45) {
alert ("Прямо в свинью! К сожалению, та свинья, что повыше, все еще хрюкает");
} else {
alert("Тысяча чертей! Птица пролетела слишком низко, и проклятые свиньи издевательски хрюкают над тобой");
}
alert("Конец игры")
</script>
В данном случае, для удобства тестирования кода на веб-ресурсе https://js.do используется опция языка встроить код непосредственно в веб страницу, используя HTML теги <script>, но вместо указания файла в атрибуте src, код помещается между тегами. В ином случае начальный тег бы выглядел так:
<!-- Код записан в .js файле и включен через атрибут src тега script. -->
<script src="C:\Users\Raenel\Desktop\Курсовая пример 1 свиньи.js">
</script>
В приведенном примере множественно используется блок else if – для он служит для проверки нескольких вариантов условий. Выигрыш соответствует условию ввода пользователем значения в диапазоне от 65 до 75 включительно.
Рассмотрим более сложный пример.
2.3 Пример кода на JavaScript №2
Игра в Black Jack (Рисунок 5). Игроку предлагается набрать карты, значение которых в сумме будет больше, чем у дилера, но не более 21.
Рисунок 5. Выполнение кода программы примера №2
В данной программе используется метод Math.random(), который возвращает псевдослучайное число из диапазона 0 включительно до 1 не включая 1; метод масштабируется.
Рассмотрим код.
<meta charset="utf-8">
<script>
function getRandomInt(min,max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function getCard(cards) {
var i = getRandomInt(0, cards.length - 1);
var card = cards[i];
cards.splice(i,1);
return card;
}
function getSum(hand) {
var sum = 0;
//Сначала напишем инструкцию по подсчету всех карт, кроме туза
for (i = 0; i < hand.length; i++) {
var card = hand[i];
if (card != 'A'){
if (card == 'J' || card == 'Q' || card == 'K'){
sum = sum + 10;
}
else {
sum = sum + parseInt(card);
}
}
}
//Теперь подсчет туза: его значение равно либо 1, либо 11
for (i = 0; i < hand.length; i++){
var card = hand[i];
if (card == 'A') {
if (sum > 10) {
sum = sum + 1;
} else {
sum = sum + 11;
}
}
}
return sum;
}
function getStatus() {
return 'Дилер: ' + dealer.join(' ') + ' (' + getSum(dealer) + '), Игрок: ' + player.join(' ') + ' (' + getSum(player) + ')\n\n';
}
var cards = [
'6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A', ];
var dealer = [getCard(cards)];
var player = [getCard(cards)];
var playing = true;
var sumPlayer = 0;
var loseMessage = 'Сожалею, в этот раз Вы проиграли.';
var winMessage = 'Поздравляю, Вы выиграли!';
do {
if (playing) {
player.push(getCard(cards));
sumPlayer = getSum(player);
if (sumPlayer > 21) {
alert(getStatus() + 'У вас перебор! ' + loseMessage);
break;
} else if (sumPlayer == 21) {
alert(getStatus() + 'У вас Black Jack! ' + winMessage);
break;
}
}
playing = confirm(getStatus() + 'Вы хотите взять еще карту?');
} while(playing);
// подсчет карт у дилера
if(sumPlayer < 21) {
while (getSum(dealer) < 17) {
dealer.push(getCard(cards));
}
var sumDealer = getSum(dealer);
if (sumDealer == 21) {
alert(getStatus() + 'У дилера Black Jack! ' + loseMessage );
} else if (sumDealer > 21) {
alert('У дилера перебор! ' + winMessage);
} else if (sumDealer == sumPlayer) {
alert('Ничья!');
} else if (sumPlayer > sumDealer) {
alert(getStatus() + winMessage);
} else {
alert(getStatus() + loseMessage);
}
}
</script>
Аналогично предыдущему примеру, в программе используются условные операторы. Из-за распространенности шаблона циклов while, в которых создается сначала привязка-счетчик для контроля за выполнением цикла, в JavaScript и аналогичных языках есть более короткая форма цикла – for. [5, c. 52][52] Все инструкции, связанные с состоянием цикла, сгруппированы после слова for. Для Си-подобных языков, оператор цикла for задает не определенное количество повторений, в отличие от языков Pascal, Ada. [2, c.134][53]
Также используется оператор цикла while, позволяющий игроку продолжать. Генератор использует объявленные варианты значений карт и возвращает одно новое значение для каждого шага игры. Прерывание цикла осуществляет расположенные внутри инструкции break: если подсчет возвращает сумму, превышающую 21 (игрок при этом получает сообщение о переборе, означающее проигрыш) и если подсчет возвращает сумму 21 (игрок получает сообщение Black Jack, означающее выигрыш). Без оператора break или при ошибке в написании кода, при которой условие завершения записано в for, но его значение всегда является истинным, то программа застрянет в бесконечном цикле. [5, c. 53][54]
Рассмотренные примеры позволяют сделать выводы об основных особенностях лексики, синтаксиса и семантики языка программирования JavaScript, а также подтверждают классификацию данного языка программирования как обладающего низким порогом вхождения.
ЗАКЛЮЧЕНИЕ
В настоящей работе было проведено исследование современных языков программирования в контексте их общих и отличительных черт. В процессе ознакомления с историей возникновения и развития языков программирования был сделан вывод о том, что многие языки переживают выход нескольких версий и существенную переработку, не теряя своей популярности. В определенный период исторического развития (80-е годы 20 века) на смену появления новых парадигм пришла тенденция консолидации и приобретения языками, переживающими развитие и выпуски обновленных версий, некоторых черт, заимствованных у конкурентов. Постепенное развитие данном направлении привело к тому, что четыре наиболее популярных языка, лидирующие в рассмотренных рейтингах, являются мультипарадигмальными. Также следует отметить выявленную общую тенденцию на повышение уровня языков, приобретения новыми версиями и диалектами возможности работать с другими, ранее не поддерживавшимися, парадигмами языка, стремлением разработчиков языков создавать упрощенные версии синтаксиса и семантики, общим запросом на языки более низкого порога вхождения. При исследовании вопроса об измерении популярности языков было установлено, что языки программирования, расположенные в верхних 5 или 10 строчках индексов популярности, остаются лидерами рейтингов на протяжении многих лет, лишь периодически меняясь друг с другом местами. Анализ истории развития языков программирования и сравнительных классификаций показывает, что среди десятков актуальных на сегодняшний день языков можно выделить ряд взаимосвязей, обусловленных их предшественниками. Иными словами, ни один из языков не является абсолютно уникальным лексически, синтаксически и семантически, языки исторически связанны между собой. Несмотря на обилие языков программирования, разработанных с середины прошлого века и используемых на сегодняшний день, основной вектор развития прошел от языка Алгол через Паскаль, Си и так называемые Си-подобные языки (прежде всего С# и Java). Языки Java, JavaScript, Python и C#, созданные в период с 1991 по 2000 год и увидевшие с даты создания несколько своих версий, являются примерами возрастающей с новыми версиями универсальности. Они уверенно занимают верхние строчки рейтингов и несомненно имеют перспективы и в будущем программирования.