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

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

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

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

Добавлен: 30.03.2023

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

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

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

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 год и увидевшие с даты создания несколько своих версий, являются примерами возрастающей с новыми версиями универсальности. Они уверенно занимают верхние строчки рейтингов и несомненно имеют перспективы и в будущем программирования.