Файл: История возникновения и развития языка программирования Си (С++) и Java (История возникновения языка программирования Java).pdf
Добавлен: 01.04.2023
Просмотров: 60
Скачиваний: 1
Под "ячейкой памяти" будет пониматься непрерывная область памяти (выделенная программа для хранения данных). На рисунках мы будем изображать ячейки данных. Если у вас есть имя, оно будет написано рядом с этим прямоугольником [27].
Мы привыкли работать с числами, записанными в так называемой десятичной системе счисления. В ней имеется 10 цифр (от 0 до 9), а в наличии имеются десятичные разряды. Каждый разряд слева имеет вес 10, по сравнению с предыдущим, чтобы получить значения числа. То есть, и т.п.
В программировании десятичной системы счисления пользоваться не всегда удобно, так как компьютерная информация организована в виде битов, более крупных порций. Человеку неудобно оперировать данными в виде длинных последовательных нулей и единиц. В настоящее время система программирования является шестнадцатеричной системой записи чисел. Это означает, что значения в битах определяются шифрованием и дешифрованием информации, и так далее. В этой системе используются только десятичные числа, но не только 10, а 16 цифр и вес разряда не 10, а 16. В качестве первых 10 цифр используются обычные десятичные цифры, а в качестве недостающих цифр - большие 9, используются заглавные латинские буквы A, B, C, D, В, F:
• 0 1 2 3 4 5 6 7 8 9 A B C D IN F
То есть A = 10, B = 11, C = 12, D = 13, In = 14, F = 15 [20].
В шестнадцатеричной записи числа от 0 до 9 пишутся одинаково, но числа больше 9 отличаются. Для чисел от 10 до 15 шестнадцатеричная система счисления использует буквы от A до F, после чего используется следующая шестнадцатеричная цифра. Десятичное число 16 в шестнадцатеричном виде записывается как 10. Чтобы не перепутать числа, записанные в разных системах счисления, напишите справа от них указатель, указывающий основание системы счисления [14].
Для десятичной системы счисления это 10, шестнадцатеричное 16. Для десятичной системы счисления обычно не указывается, не приводит ли это к путанице. Точно так же в технической литературе часто не указывается основание для чисел, написанных в шестнадцатеричной записи, если число написано не только «нормальными» числами от 0 до 9, но также и «буквенными» числами от A до F. Обычно используются заглавные буквы , но строчные буквы также могут быть использованы [3].
Зарезервированные слова языка Джавамикаэль Эферганджава. Это слова, зарезервированные для синтаксических конструкций языка, и их назначение не может быть переопределено внутри программы (Таблица 2).
Таблица 2.
Слова, зарезервированные для синтаксических конструкций языка
abstract |
Boolean |
break |
Byte |
case |
catch |
Char |
class |
Const |
continue |
default |
Do |
double |
Else |
enum |
extends |
False |
final |
Finally |
float |
for |
goto |
if |
implements |
import |
instanceof |
Int |
interface |
Long |
native |
new |
null |
package |
Private |
protected |
public |
return |
short |
Static |
super |
switch |
synchronized |
this |
Throw |
throws |
transient |
true |
try |
Void |
volatile |
while |
Их нельзя использовать в качестве идентификаторов (имен переменных, подпрограмм и т. Д.), Но их можно использовать в строковых выражениях.
В Java есть только 8 примитивных (скалярных, простых) типов: логический, байтный, char, short, int, long, float, double [13].
Длина и диапазоны типов примитивов определяются стандартом, а не реализацией, и показаны в таблице. Тип char был сделан двухбайтовым для простоты локализации (один из идеологических принципов Java): на момент формирования стандарта Unicode-16 уже существовал, но не Unicode-32. Поскольку не осталось однобайтового типа, был добавлен новый тип байта, и в Java, в отличие от других языков, он не является беззнаковым. Типы float и double могут иметь специальные значения, а не «число» (NaN).
Для типа double они обозначаются Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN; [16]
для типа float они одинаковы, но с префиксом Float вместо Double. Минимальные положительные значения, принятые типами float и double, также стандартизированы (Таблица 3).
Таблица 3.
Минимальные положительные значения, принятые типами float и double
Тип |
Длина (в байтах) |
Диапазон или набор значений |
boolean |
не определено |
true, false |
byte |
1 |
?128..127 |
char |
2 |
0..216?1, или 0..65535 |
short |
2 |
?215..215?1, или ?32768..32767 |
int |
4 |
?231..231?1, или ?2147483648..2147483647 |
long |
8 |
?263..263?1, или примерно ?9.2·1018..9.2·1018 |
float |
4 |
-(2-2?23)·2127..(2-2?23)·2127, или примерно ?3.4·1038..3.4·1038, а также , , NaN |
double |
8 |
-(2-2?52)·21023..(2-2?52)·21023, или примерно ?1.8·10308..1.8·10308, а также , , NaN |
Эта строгая стандартизация была необходима, чтобы сделать язык независимым от платформы, что является одним из идеологических требований для Java и одной из причин его успеха. Тем не менее, одна небольшая проблема с независимостью платформы все еще остается. Некоторые процессоры используют 10-байтовые регистры для промежуточного хранения результатов или повышения точности вычислений другими способами. Чтобы сделать Java максимально совместимым между различными системами, в ранних версиях были запрещены любые способы повышения точности вычислений. Однако это привело к снижению производительности. Оказалось, что ухудшение точности ради независимости платформы не нужно многим людям, особенно если вам приходится платить за это замедлением работы программ. После многочисленных протестов этот запрет был снят, но было добавлено ключевое слово strictfp, запрещающее повышение точности [20].
В Java применяются следующие правила:
- Если один операнд имеет тип double, другой также преобразуется в тип double.
- В противном случае, если один операнд имеет тип с плавающей точкой, другой также преобразуется в тип с плавающей точкой.
- В противном случае, если один операнд имеет тип long, другой также преобразуется в тип long.
- В противном случае оба операнда преобразуются в тип int. [24]
Этот метод неявного преобразования встроенных типов точно такой же, как преобразование типов в C ++.
Вывод по второй главе: язык программирования Java является полностью объектно-ориентированным языком, который многое наследует от C ++ с точки зрения синтаксиса. Конечно, преимущества Java не ограничиваются кроссплатформенной функциональностью. Язык Java синтаксически проще и логичнее, чем C ++. Java как платформа предоставляет программистам большое количество библиотек (пакетов), которые содержат большое количество описаний классов и интерфейсов на все случаи жизни. С их помощью вы можете создавать стопроцентные Java-приложения с возможностью доступа к базам данных, поддержкой отправки почтовых сообщений, с клиентской частью, для которой требуется веб-браузер, или, наоборот, с клиентской частью, которая имеет сложный интерфейс.
Java использует автоматический сборщик мусора для управления памятью в жизненном цикле объекта. Программист определяет, когда создаются объекты, и среда выполнения Java отвечает за восстановление памяти, как только объекты больше не используются. Если ссылки на объекты отсутствуют, сборщик мусора автоматически освобождает доступную память. Что-то похожее на утечку памяти, это может произойти, если код программиста содержит ссылку на объект, который больше не нужен. Как правило, когда объекты, которые больше не нужны, хранятся в контейнерах, которые все еще используются. Если методы вызваны для несуществующего объекта, генерируется исключение нулевого указателя.
Одна из идей, лежащих в основе модели автоматического управления памятью Java, заключается в том, что программисты могут нести бремя выполнения ручного управления памятью. В некоторых языках память для создания объектов неявно выделяется в стеке или явно выделяется и освобождается из кучи. В последнем случае программист отвечает за управление памятью. Если программа не освобождает объект, происходит утечка памяти. Если программа пытается получить доступ или освободить память, которая уже была освобождена, результат не определен, и его трудно предсказать, и программа может стать нестабильной или аварийно завершить работу. Это может быть частично исправлено с помощью умных указателей, но они добавляют накладные расходы и сложность. Обратите внимание, что сборка мусора не предотвращает утечки логической памяти, то есть те, где память все еще упоминается, но никогда не используется.
Сборка мусора может происходить в любое время. В идеале это произойдет, когда программа простаивает. Он гарантированно запускается, если в куче недостаточно свободной памяти для выделения нового объекта; это может вызвать остановку программы на мгновение. Явное управление памятью невозможно в Java.
Java не поддерживает арифметику указателей в стиле C / C ++, где адреса объектов могут обрабатываться арифметически (например, путем добавления или вычитания смещений). Это позволяет сборщику мусора перемещать указанные объекты и обеспечивает безопасность типов и безопасность.
Как и в C ++ и некоторых других объектно-ориентированных языках, переменные примитивных типов данных Java хранятся либо непосредственно в полях (для объектов), либо в стеке (для методов), а не в куче, что обычно верно для не примитивных типы данных (но см. раздел escape-анализ). Это было сознательное решение Java-разработчиков по соображениям производительности.
Java содержит несколько типов сборщиков мусора. По умолчанию HotSpot использует мусор параллельной очистки. Однако есть также несколько других сборщиков мусора, которые вы можете использовать для управления кучей. Для 90% Java-приложений достаточно параллельного сборщика мусора Mark-Sweep (CMS). Oracle стремится заменить CMS первым сборщиком мусора (G1).
Решение проблемы управления памятью не освобождает программиста от необходимости правильно обрабатывать другие типы ресурсов, такие как соединения с сетью или базой данных, файловые дескрипторы и т. Д., Особенно если есть исключения. Как это ни парадоксально, наличие сборщика мусора избавило от необходимости явного метода деструктора в классах, что затрудняет управление этими другими ресурсами.
Ява - очень элегантный и красивый язык. Однако вы не сможете избежать проблем при его использовании. Одна из основных проблем заключается в том, что при создании сложного приложения Java вам нужно будет использовать этот язык только для создания всех частей этого приложения. Java не предоставляет много инструментов для межъязыкового взаимодействия.
ЗАКЛЮЧЕНИЕ
Пользовательские запросы определяли развитие C ++. Он был основан на опыте широкого круга пользователей, которые работали в различных областях программирования. За 6 лет, которые отделили нас от первого издания описания C ++, количество пользователей увеличилось в сотни раз. За этот короткий период было извлечено много уроков, и достаточное количество методов программирования были рассмотрены в теории и применены на практике.
Вывод: благодаря языку C ++ произошел быстрый прорыв в развитии всего программирования. C ++ по-прежнему занимает доминирующее положение среди всех языков программирования в мире. Благодаря этому многие программисты разрабатывают огромное количество разных проектов. И в будущем этот язык программирования сохранит свои позиции, улучшаясь с каждым днем.
Язык Java является объектно-ориентированным и поставляется с довольно большой библиотекой классов. Благодаря библиотекам классов Java разработка приложений значительно упростилась, поскольку в распоряжении программиста имеются мощные инструменты для решения распространенных проблем. В результате программист может уделять больше внимания решению проблем приложения, а не таким проблемам, как организация динамических массивов, взаимодействие с ОС или реализация элементов пользовательского интерфейса.
В данной курсовой работе я рассмотрел наиболее распространенные языки программирования C и Java.
В ходе курса были выполнены все задачи:
1. Описана краткая история развития языков Си и Си ++;
3. Освящена краткая история языка программирования Java;
4. Рассмотрены основные понятия языка Java и Си и Си ++.
Цель курсовой работы достигнута.
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
1. Александреску А. Язык программирования D / А. Александреску. — М.: Символ, 2016. — 536 c.
2. Александреску А. Язык программирования D / А. Александреску. — СПб.: Символ-плюс, 2017. — 544 c.