Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

История возникновения и развития языка программирования Си (С++) и Java»

Содержание:

Введение

Если спросить, с каким языком связано начало современной эпохи программирования, ответ прост – с языком Си. Этот язык был разработан
D. Ritchie в 70 – х годах прошлого века для компьютера PDP 11 от DEC
(Digital Equipment Corporation), в котором использовалась ОС UNIX.
В то время именно язык Си, несмотря на наличие определенных
языков программирования, определял направление всего будущего программирования.

C ++ был разработан в 80– х годах компанией Bell Laboratories и настоящее время считается одним из доминирующих языков программирования, который используется для разработки различных программных продуктов. По своей сути, C ++ является расширением языка C, его главным преимуществом от предшественника и от языков более высокого уровня является то, что C ++ поддерживает объектно – ориентированное программирование, перегруженные операции и возможность разработки полнофункциональных приложений windows

Как известно, современные приложения должны быть, прежде всего, безопасными, обладать высокой производительностью, быть функциональными в распределенной среде, нейтральными для архитектуры.

Эти факторы способствовали переосмыслению процесса создания и распространения приложений на разных компьютерах различной архитектуры. Требования к переносимости привели к необходимости отказаться от общепринятого метода создания и доставки двоичных файлов, которые содержат машинные коды и поэтому являются специфичными для платформы. В 1995 году компания Sun Microsystems приняла решение объявить о новом продукте Java, который отвечает всем вышеперечисленным требованиям.

Цель данной работы – изучить историю возникновения и развития языка программирования Си (С++) и Java.

В ходе поставленной цели будут решены следующие задачи:

Глава 1 Языки программирования Си и С++

1.1 Концепция языков программирования Си и C ++

Как вы знаете, наиболее распространенными языками программирования в мире являются Си и C++. Это основные языки, используемые при разработке не только системного, но и прикладного программного обеспечения. Если специалист по информационным технологиям владеет этими языками, у него всегда будет работа с большим доходом.

Рассмотрим особенности этого языка.

Эффективность. Это программа, которая написана на языке с небольшим размером и в то же время с высокой скоростью.

Краткий. Это означает, что запись алгоритма выразительна и лаконична.

Компактность. Язык содержит небольшое количество встроенных инструментов и ключевых слов.

Сила. Мощность приложения достигается за счет использования большого количества библиотек.

Портативность. Компиляторы предназначены для всех операционных систем и аппаратных платформ, поэтому программа может быть скомпилирована и запущена практически в любом месте.

Конечно, язык Си имеет свои недостатки. Это можно объяснить довольно слабым контролем преобразования типов и незащищенностью в процессе работы с адресами и динамической памятью, что позволяет легко допустить ошибку в программе, которую впоследствии будет трудно обнаружить. С другой стороны, эти недостатки позволили создать исполняемый код, эффективность которого приближается к эффективности ассемблерной программы. В 1981 году появился язык C++, который многие называют "C с классами". Автор языка-Bjarne Stroustrup[1] внес свой вклад в добавление привычных Си методов объектного языка-классов, которые служат для представления внутренней структуры объектов, механизма наследования и новых инструментов для работы с динамической памятью и вводом / выводом. Благодаря этим инструментам стало возможным не только писать объектно-ориентированные программы, но и создавать библиотеки шаблонов, классов - то есть расширять инструментарий пользователя и область применения самого языка. Си / C++ сочетает в себе перечисленные выше преимущества Си и новые возможности C++, предоставляя возможность “изнутри " изучить принципы программирования высокого уровня. Язык C++ содержит инструменты и методы как для высокоуровневого, так и для низкоуровневого программирования. К первым относятся классы, структуры, механизмы наследования и позднего связывания, шаблоны. Второй можно отнести к механизму указателя, работающему с символьными битами, работающему с механизмом прерывания. Из-за этого C++ очень привлекателен для решения широкого круга задач.


1.2 Краткая история развития языков С и С++

Язык Си был разработан D. Ritchie, сотрудником Bell Laboratories в 1972 году, для компьютера PDP 11 от DEC (Digital Equipment Corporation), в котором использовалась ОС UNIX. Большое влияние на Си оказал язык BCPL (Basic Combined Programming Language), который разработал Martin Richards в 1966 году.

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

В отличие от многих языков программирования (Ada, ALGOL-60 и др.), которые вступают в силу только после принятия соответствующих национальных и международных стандартов, Си не ставил перед собой задачу широкого распространения. До 1989 года язык стандартов не был обязательным, и в описании языка Си, авторы формально использовали книгу D.Ritchie и
Brian Kernighan, вышедшую в 1978 году в США. Роль этой книги, как источник неформального стандарта Си, используется и в наши дни.

Первый стандарт языка Си был принят официально в 1989 году Американским Национальным институтом стандартов (ANSI). Эта версия языка обозначается как Си89. В 1995 году стандарт Си89 был слегка изменен.

Язык C++, как следствие развитие языка Си появилась в 1979 году.
Его разработчиком был Bjarne Stroustrup[2], когда он начал работать в Bell Laboratories. Разработка и совершенствование языка C++ потребовали значительных ресурсов и усилий от его создателя в 80-90-е гг, в результате чего в 1998 году был принят стандарт ANSI / ISO для C++. В целом, C ++ — это объектно-ориентированная, улучшенная версия Си. C++ построена на версии Си89, которая содержит все изменения 1995 года, и эта версия Си89 теперь называется C-подмножеством языка C++. Хотя C++ был определен как набор объектно-ориентированных расширений, он может развиваться как автономный язык программирования. Сегодня его новые инструменты почти вдвое увеличили размер оригинального языка. Нет необходимости доказывать, что C++ является одним из самых мощных компьютерных языков, разработанных до сих пор.

В 1999 году появился второй стандарт ANSI / ISO для Си. Эта версия называется C99, которая также включает в себя несколько продвинутых инструментов. Некоторые из этих "новых" инструментов пришли из C++. Таким образом, отдельные элементы, представленные в C99, несовместимы с языком C++. Это означает, что C99 больше не считается чистым подмножеством C++. К счастью, причина многих "несовместимостей" кроется в специальных средствах. Направления, которые можно легко преодолеть. Язык C++ позволяет создавать программы, которые будут совместимы с этим языком.

Работы по разработке новых стандартов для Си и C++ шли следующие несколько лет и были завершены в конце 2011 года. В октябре 2011 года был введен новый стандарт C++[3], его обозначение C++11 или ISO / IEC 14882:2011.

И в декабре 2011 года. Они также приняли новый стандарт языка Си.
Эта версия условно называется C11 или ISO / IEC 9899: 2011. Некоторые из его функций уже получены компилятором GCC.

Сегодня существует очень большое количество подобных С++языков, а наиболее распространенными среди них являются Java от Sun Microsystems и C # от Microsoft.

1.3 Базовые понятия языка

Следующее определение можно применить как к языкам человека, так и к языкам программирования.

В алфавите языка C++ разрешены определенные наборы символов, которые, условно, можно разделить на группы символов[4]:

  • прописные и строчные латинские буквы (A, B,..., Z, a, b,..., z);
  • арабские цифры (0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
  • специальные знаки: " , { } | [ ] ( ) + - / % \ ; '. : ? < = > _ ! & * # ~ ^
  • пробельные символы — это символы пробела, табуляции, перехода на новую строку.

Идентификатор — это имя объекта программы. Имена дают переменным, функциям, классам и так далее. Имя может состоять из латинских букв, цифр и символов. Имя не может начинаться с цифр. Важно отметить, что латинские буквы, строчные и прописные, используемые в идентификаторах, считаются различными, это правило распространено во всех языках подобных Си: Си, C++, C#, Java, Perl и многих других. В таких языках, как Fortran, Pascal, Basic, нет разницы в названиях между прописными и строчными латинскими буквами.

Следующие имена нельзя использовать как идентификаторы:

  • 25A (начинается с числа);
  • Alfa (не допускается кириллица).

Общие рекомендации по использованию имен:

  • желательно, чтобы название объекта было осмысленным;
  • используйте имена, состоящие из прописных латинских букв в качестве постоянных имен, например: PG, GREAT;
  • не используйте имена, которые часто используются разработчиками компиляторов для собственных целей;
  • короткие однобуквенные или двухбуквенные имена допускаются только внутри небольших программных блоков, внутри коротких функций.

Длина имен в операционных системах может быть ограничена для некоторых внешних имен.

Ключевые слова — это слова, которые можно использовать в программе только по прямому назначению, то есть эти названия нельзя использовать для обозначения своих переменных[5].

В C++существует 63 ключевых слова. Все они представлены в таблице:

Таблица 1

Ключевые слова в языке С++

asm

do

if

return

typedef

auto

double

inline

short

typeid

bool

dynamic_cast

int

signed

typename

break

else

long

sizeof

union

case

enum

mutable

static

unsigned

catch

explicit

namespace

static_cast

using

char

export

new

struct

virtual

class

extern

operator

switch

void

const

false

private

template

volatile

const_cast

float

protected

this

wchar_t

continue

for

public

throw

while

default

friend

register

true

delete

goto

reinterpret_cast

try

Константы — это неизменные значения. В C++ существует пять типов констант: целочисленные, вещественные, символьные, строковые и логические.

  1. Целочисленная константа. Правила языка позволяют использовать три типа целочисленных констант: десятичную, шестнадцатеричную и восьмеричную. Основание определяется префикс базы данных в записи константы. Для десятичных констант префикс не требуется.

Десятичное целое число — это последовательность десятичных цифр, которая не начинается с нуля (если это не нулевое число), например:

200 45 0 2019

Восьмеричное целое число — это последовательность цифр, начинающихся с 0, и не содержащая десятичные цифры старше 7, например:

015 — это восьмеричное представление десятичного целого числа 13;

032 — это восьмеричное представление десятичного целого числа 26.

Шестнадцатеричное целое число — это последовательность шестнадцатеричных цифр (0, 1,…, 9, A, B, C, D, E, F) перед которым стоят символы 0x или 0X, например:

0x2D — это шестнадцатеричное представление десятичного целого числа 45;

0X7A — это шестнадцатеричное представление десятичного целого числа 122.

  1. Вещественные константы. Для представления вещественных (нецелевых) чисел используются константы, представленные в памяти компьютера в виде «с плавающей с точкой». Каждая вещественная константа состоит из следующих частей:
  • целочисленная часть (десятичная целочисленная константа);
  • дробная часть десятичной точки (десятичная целочисленная константа);
  • знак(признак) показателя "e" или "E";
  • показатель десятичной степени;
  • при записи констант с плавающей запятой целая или дробная часть может быть опущена (но не одновременно);
  • десятичная точка или символ экспоненты с показателем степени.

Примеры констант с плавающей точкой:

125. 3.14159265 1.0е-5 .314159Е25 0.0

  1. Символы или символические константы. Символьные константы используются для представления отдельных символов. Каждый символ представляет собой маркер, состоящий из изображения символа и ограничивающего апострофа. Например: "D"," d","2","#".

Внутри апострофа можно записать любой символ, отображаемый на экране или принтере в текстовом режиме. Однако компьютер также использует коды, которые не отображаются графически на экране дисплея, клавиатуре или принтере. Как пример, код перехода на новую строку или код возврата к началу текущей строки. Программа использует комбинации из нескольких символов с графическим представлением. Каждая такая комбинация начинается с символа " \ ". Такие наборы букв, начинающиеся с символа" \", называются управляющими последовательностями в литературе для языков Си и Си++. Ниже приведен их список:

'\n' — перевод строки;

'\t' — горизонтальная табуляция;

'\r' — возврат каретки (курсора) к началу строки;

'\\' — обратная косая черта \;

'\'' — апостроф (одиночная кавычка);

'\"' — кавычка (символ двойной кавычки);

'\0' — нулевой символ;

'\a' — сигнал-звонок;

'\b' — возврат на одну позицию (на один символ);

'\f' — перевод (прогон) страницы;

'\v' — вертикальная табуляция;

'\?' — знак вопроса.

Важно понимать, что перечисленные константы представлены двумя или более буквами, и они обозначают одну символьную константу, которая имеет отдельный двоичный код. Управляющие последовательности являются частным случаем escape- последовательностей, которые также включают маркеры вида '\ BBB ' или '\ chh ' или '\ Chh', где:

• "\BBB " - восьмеричное представление любой символьной константы. Здесь d-восьмеричная цифра (от 0 до 7). Например, "\ 023 "или" \ 123".

• '\ chh ' или '\ Chh ' — это шестнадцатеричное представление любой символьной константы. Здесь h-шестнадцатеричная цифра (от 0 до f). Например, "\ х0a", "\ Х1b" и т. д.

Символьная константа (символ) имеет целочисленный тип, то есть символы могут использоваться в качестве целочисленных операндов в выражениях.

  1. Строки, или строковые константы. Строки на самом деле не являются константами C++, но это отдельный тип их токенов. В литературе для них используется другое название: "строковые литералы". Строковая константа определяется как последовательность символов (см. символьные константы выше), заключенная в двойные кавычки (не в апострофы!): "Это линия."

Среди символов в строке могут быть escape-последовательности, то есть комбинации символов, соответствующие непредставимым символам, или символы, определенные их внутренними кодами. В этом случае, как и в представлениях отдельных символьных констант, их изображения начинаются с обратной косой черты'\':

"\N текст \ n будет размещен \ n на 3 строках"

Представление строковых констант в памяти компьютера следует следующим правилам. Все символы в строке помещаются в строку, и каждый символ (включая символ, представленный escape-последовательностью) занимает ровно 1 байт. Компилятор помещает символ '\ 0 ' в конец строковой константы.

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

"Строка из 18 байт."

Важно помнить, что при работе с символьной информацией длина символьной константы, такой как" A", составляет 1 байт, а длина строки " A " - 2 байта, поскольку строка заканчивается на нуле. характер. ('\ 0').

  1. Булевы константы. Есть только два значения: true-истина и false-ложь.

Комментарий — это последовательность любых символов (знаков), которая используется в тексте программы для его объяснения. Обычно во вступительном тексте комментируют вводный текст программы в целом (ее назначение, автора, дату создания и т.), а затем комментируют отдельные фрагменты текста программы, смысл которых неочевиден. Важно объяснить не только то, что делается, но и с какой целью это делается. Комментарии всегда важны: будь то создание программы для себя, или для других людей, которые будут с ней работать.

Комментарии игнорируются компилятором языка программирования, они имеют значение только для пользователя. В языке C++существует два типа комментариев: однострочные и многострочные.

Однострочный комментарий начинается с символа / /. Все, что написано после этих символов и до конца строки считается комментарием.
Например:
AND
IntegerSum(_Val1,Out2,_Sum) // Теперь увеличим полученное значение на сумму

THEN

AddPoint(_Name,Out2);

SetVarInteger(_Name,"AS_Total",_Sum);
В данном коде однострочным комментарием служит: // Теперь увеличим полученное значение на сумму

Многострочный комментарий начинается с символа /* (сначала косая черта, а после звездочка) и заканчивается символом */ (Сначала звездочка, а после косая черта). Текст такого комментария может занимать одну или несколько строк. Все, что находится между ними /*…*/, считается комментарием. Например:

/ * add group 1,0,"Common1"

add rootgroup "bcc6e4a3-d8b5-43ac-848e-fb456e78276b","StartEarly"

add namegroup "Light","",""

add group 4,0,"Common2"

add rootgroup "ebeab7a2-9ed4-4c84-9a68-2ac6d4614b6d","LeatherEarly"

add namegroup "LightHelmet2","","" * /

Весь код, заключенный между /* и */является многострочным комментарием.

Самый простой код, написанный на языке С++ представляет из себя следующий вид:

#include <iostream>

#include <cstdlib> // для system

using namespace std;

int main()

{

cout << "Hello, world!" << endl;

system("pause");

return 0;

}

Глава 2 Программирование Java

2.1 Понятие языка программирования Java

Java — это язык программирования, разработанный Sun Microsystems. Приложения Java обычно компилируются на любой виртуальной машине Java (JVM-java virtual machine) независимо от архитектуры этого компьютера. Официальная дата выпуска этого языка - 23 мая 1995 года. Сегодня технология Java предоставляет инструменты для преобразования статических веб-страниц в интерактивные динамические документы, а также возможность создания распределенных (неплатформенных) приложений.

«Группе было поручено создать распределенную систему, которая могла бы быть высококачественной, самой современной технологией[6]», - вспоминает James Gosling.

James Gosling, в возрасте 40 лет перешел в Sun Microsystems из IBM Research в 1984 году. Его первая проект - оконный интерфейс NeWS, который не имел коммерческого успеха, но был довольно интересен с технической точки зрения. Он также написал GOSMACS, первую реализацию текстового редактора EMACS для языка Cи.

Благодаря бизнес-деятельности в сфере бытовой электроники и техники, которая называлась Green Project, James Gosling и его коллеги поймут, насколько важны и ценны, для потребителя, показатели: надежности, соответствия стандартам, стоимости и простоты. Если пользователи рабочих станций проявляют свою заинтересованность к более высокой мощности и достаточно лояльны к высоким ценам, к необходимости более длительного обучению и различным ошибкам, то обычным потребителям нужны дешевые, простые в использовании и надежные устройства. Для успешной конкурентоспособности на рынке бытовой электроники, фирмы должны воспринимать в процессоры как обыкновенный товар с регулярным оборотом, что позволяет в любое время заменять их на другие, более дешевые и обеспечивать обратную совместимость, а так же соответствие стандартам, установленным для устройств широкого использования, будь это тостер или телевизор.

Мы видим, что сформировались две разные нормы произношения этого названия - заимствованная англоязычная Джава» и традиционно национальная «Ява», что соответствует принятому произношению названий островов Ява. Sun Microsystems, в свою очередь, придерживается первого варианта - англоязычного. Иногда они используют общее и жаргонное слово «жаба» (которая, кстати, присутсвует в виде изображения на календаре) Российской группы пользователей Java (JavaUsersGroup).

Java — это название не только самого языка, но и платформы для создания и запуска приложений на этом языке.

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

James Gosling не хотел связывать разработку с определенной платформой, поэтому он начал с расширения компилятора C++. В любом случае,пришло понимание, что C++ никогда не сможет удовлетворить все необходимые потребности. «В конце концов, язык — это средство, а не самоцель», - объясняет James Gosling. «Мы не собирались останавливаться на C++, а хотели разработать систему, которая позволила бы нам создать широкую распределенную гетерогенную сеть потребительских электронных устройств, способных взаимодействовать друг с другом[7]».

В конце 1992 года, Patrick Naughton, инженер проекта, сказал - «огромные усилия были приложены для улучшения Oak и других компонентов», команда Green project выпустила - карманное устройство, типа-PDA, под названием "*7", которое James Gosling назвал как «ручной пульт для дистанционного управления»

Patrick Naughton в свои 30 лет возглавлял проект Sun Microsystems по разработке OpenWindow, до вступления в команду Green.

Малый размер устройства "*7", выставлял в выгодном свете компактность и эффективность кода, который являлся ядром технологии. Этот продукт широко демонстрировался в Sun Microsystems, он мог произвести впечатление на таких важных людей, как Scott McNealy и William Nelson Joy, но что с ним случилось потом, осталось неизвестным.

James Gosling считал, что браузер "создает рынок" для всех инструментов, серверов и сред разработки. Именно Java играет центральную, доминирующую роль во всех этих инструментах, перед появлением Java страница WWW на самом деле была куском бумаги. С появлением Java для браузера открываются новые функции и возможности доставки контента, которые значительно расширяет возможности провайдеров содержания.

Гослинг считал, что технология Java предоставит людям возможность переосмыслить роль клиент-серверных вычислений. «В стандартной модели вы имеете определенные базы данных, пишете пакеты клиентского программного обеспечения, которое имеет возможность взаимодействовать с ними, и создаете какой-то интерфейс. В рамках этой модели трудно создавать распределенные системы и модернизировать их, особенно если их элементы имеют различное происхождение", - указывает James Gosling.

Если у нас есть такие инструменты, как Java и Web, мы можем получить изначально организованную систему", - подчеркивает James Gosling. "Если вы создаете клиентское приложение Java, запуск его — это просто вопрос перехода на соответствующую страницу. Установка примитивна-достаточно разместить необходимое программное обеспечение на веб-сервере. И не будет никаких проблем с портированием, из-за того, что есть только одна версия приложения." Многие фирмы, по словам Gosling-а, уже организуют базы данных в виде веб-страниц с использованием общего шлюзового интерфейса (CGI) - специфического стандарта для внешних программ на HTTP-сервере.

Программы Java переводятся в байт-код, который выполняется виртуальной машиной Java (JVM – java virtual machine) - программой, которая обрабатывает байт-код и затем передает инструкции аппаратному обеспечению в качестве интерпретатора.

Преимуществом данного способа выполнения программы является полная независимость байт-кода от операционной системы и аппаратного обеспечения, что позволяет запускать Java-приложения на любом устройстве, для которого имеется соответствующая виртуальная машина. Еще одним важным преимуществом технологии Java является полный контроль над выполнением программы виртуальной машиной.

Операции, выходящие за пределы установленных программой ограничений - будь то попытка доступа к несанкционированным данным или подключение к другому компьютеру-приводят к немедленному прерыванию работы.

Часто к недостаткам этой концепции виртуальной машины относится тот факт, что выполнение байт-кода виртуальной машиной может значительно снизить производительность программ и алгоритмов, реализованных на Java. В последнее время появилось большое количество улучшений, способных повысить скорость выполнения программ на Java:

  • использование технологии перевода байт-кода в машинный код непосредственно во время работы программы (Технология JIT) при сохранении версий классов в машинном коде;
  • широкое использование платформенно-ориентированного кода (native code) в стандартных библиотеках;
  • аппаратное обеспечение, обеспечивающее более быструю обработку байт-кода (например, технология Jazelle, которая поддерживается некоторыми процессорами ARM).

Согласно данным сайта debian.org для 7 различных задач время выполнения Java в среднем в 1,5-2 раза больше, чем в C / C++, а в некоторых случаях Java даже быстрее, в некоторых случаях в 7 раз медленнее. С другой стороны, для большинства из них потребление памяти Java-машины было в 10-30 раз больше, чем у программы на C / C++. Также заслуживает внимания исследование, проведенное компанией Google, согласно которому производительность и потребление памяти в тестовых случаях Java значительно снижаются по сравнению с аналогичными программами на C++.

Идеи, лежащие в основе концепции и различных реализаций среды виртуальной машины Java вдохновили многих энтузиастов расширить список языков, которые могут быть использованы для создания программ, работающих на виртуальной машине. Эти идеи выражены в спецификации CLI инфраструктуры общего языка, которая является основой платформы Microsoft.NET.

Ключевые характеристики:

  • автоматическое управление памятью;
  • расширенная обработка исключений;
  • богатый набор инструментов фильтрации ввода-вывода;
  • набор стандартных коллекций, таких как массив, список, стек и т. д.
  • наличие простых инструментов для создания сетевых приложений (в том числе с использованием протокола RMI);
  • наличие классов, позволяющих выполнять HTTP-запросы и обрабатывать ответы;
  • встроенные языковые средства для создания многопоточных приложений;
  • единый доступ к базам данных:
  • на уровне отдельных SQL запросов-на основе JDBC, SQLJ;
  • на уровне концепции объектов с возможностью хранения в базе данных-на основе Java Data Objects и Java Persistence API;
  • поддержка шаблонов (начиная с версии 1.5);
  • параллельное выполнение программ.

2.2 Краткая история возникновения языка программирования Java

Рождению языка Java предшествовала довольно интересная история. В 1990 году разработчик программного обеспечения Sun Microsystems, Patrick Naughton понял, что ему надоело поддерживать сотни различных программных интерфейсов, используемых компанией, и сообщил генеральному директору Sun Microsystems и другу Scott McNealy о своем намерении перейти в NeXT. McNealy, в свою очередь, попросил Naughton составить список его жалоб и предложить решения проблем.

Patrick Naughton, не ожидая, что кто-то обратит внимание на его письмо, тем не менее изложил свои претензии, беспощадно критикуя недостатки Sun Microsystems, в частности архитектуру, разрабатываемую в то время по умолчанию. К его удивлению, письмо оказалось более чем успешным: оно было разослано всем ведущим инженерам Sun Microsystems, которые быстро откликнулись и выразили горячую поддержку своему коллеге и одобрение его взглядов на ситуацию в Sun Microsystems. Обращение было встречено высшим руководством компании, а именно, основателем Sun Microsystems, и назначили главного исполнительного директора, которым стал Patrick Naughton.

В тот день, когда Patrick Naughton должен был покинуть компанию, было принято решение создать команду ведущих разработчиков, чтобы они могли делать что угодно, но не создавать что-то необычное.

Команда из шести человек под кодовым названием Green отправилась в добровольное изгнание, погрузившись в исследования бытовых устройств, таких как игровые автоматы Nintendo, устройства дистанционного управления. Зеленая команда пыталась найти способ связи между этими устройствами. Вскоре выяснилось, что такие электроприборы, как видеомагнитофоны, лазерные проигрыватели дисков, стереосистемы - все они были реализованы на разных процессорах. Это означало, что, если производитель хочет добавить дополнительные функции или функции к телевизору или видеомагнитофону, он будет сжат с помощью встроенного оборудования. Эта проблема, в сочетании с ограниченным объемом памяти микросхем этих устройств, выдвинула новый подход к программированию программного обеспечения, который должен был стать ведущим на рынке бытовой электроники.

Команда начала разработку нового объектно-ориентированного языка программирования под названием Oak, в честь дерева, которое росло под окном Gosling-а.

Sun Microsystems преобразовала команду Green в компанию FirstPerson. Новая компания имела интересную концепцию, но не смогла найти для нее подходящего применения. После серии неудач ситуация для компании неожиданно резко изменилась: была анонсирована Mosaic-так родилась всемирная паутина, с которой началось бурное развитие Интернета.

Patrick Naughton предложил использовать Oak при создании интернет-приложений. Так Дуб стал самостоятельным продуктом, вскоре был написан Oak компилятор и Oak браузер "WebRunner". В 1995 году Sun Microsystems решила анонсировать новый продукт, переименовав его в Java (единственное разумное объяснение названия-любовь программистов к кофе). Когда Java попала в руки интернета, возникла необходимость запускать Java-апплеты-небольшие программы, загружаемые через интернет. Webrunner был переименован в HotJava, и компания Netscape стала поддержать продукты Java.

2.3 Базовые понятия языка

Алфавит языка Java состоит из букв, десятичных цифр и специальных символов. Буквами считаются латинские буквы (кодируются в стандарте ASCII), буквы национальных алфавитов (кодируются в стандарте Unicode, кодировка UTF-16), а также соответствующие им символы, кодируемые управляющими последовательностями

Буквы и цифры можно использовать в качестве идентификаторов (т.е. имен) переменных, методов и других элементов языка программирования. Правда, при использовании в идентификаторах национальных алфавитов в ряде случаев могут возникнуть проблемы – эти символы будут показываться в виде вопросительных знаков.

Как буквы рассматривается только часть символов национальных алфавитов. Остальные символы национальных алфавитов — это специальные символы. Они используются в качестве операторов и разделителей языка Java и не могут входить в состав идентификаторов.

Латинские буквы ASCII

ABCD...XYZ - заглавные (прописные),

abcd...xyz – строчные

Дополнительные "буквы" ASCII

_ - знак подчеркивания,

$ - знак доллара.

Национальные буквы на примере русского алфавита

АБВГ…ЭЮЯ - заглавные (прописные),

абвг…эюя – строчные

Десятичные цифры: 0 1 2 3 4 5 6 7 8 9

Десятичные и шестнадцатеричные цифры и целые числа

Целые числовые константы[8] в исходном коде Java (так называемые литерные константы) могут быть десятичными или шестнадцатеричными. Они записываются либо символами ASCII, или символами Unicode следующим образом.

Десятичные константы записываются как обычно. Например, -137.

Шестнадцатеричная константа начинается с символов 0x или 0X (цифра 0, после которой следует латинская буква X), а затем идет само число в шестнадцатеричной нотации. Например, 0x10 соответствует 1016 = 16 ; 0x2F соответствует 2F16 = 47, и т.д. О шестнадцатеричной нотации рассказано чуть ниже.

Ранее иногда применялись восьмеричные числа, и в языках C/C++, а также старых версиях Java можно было их записывать в виде числа, начинающегося с цифры 0. То есть 010 означало 108 = 8. В настоящее время в программировании восьмеричные числа практически никогда не применяются, а неадекватное использование ведущего нуля может приводить к логическим ошибкам в программе.

Целая константа в обычной записи имеет тип int. Если после константы добавить букву L (или l, что хуже видно в тексте, хотя в среде разработки выделяется цветом), она будет иметь тип long, обладающий более широким диапазоном значений, чем тип int.

Поясним теперь, что такое шестнадцатеричная нотация записи чисел и зачем она нужна.

Информация представляется в компьютере в двоичном виде – как последовательность бит. Бит – это минимальная порция информации, он может быть представлен в виде ячейки, в которой хранится или ноль, или единица. Но бит – слишком мелкая единица, поэтому в компьютерах информация хранится, кодируется и передается байтами - порциями по 8 бит.

Под "ячейкой памяти" будет пониматься непрерывная область памяти (с последовательно идущими адресами), выделенная программой для хранения данных. На рисунках мы будем изображать ячейку прямоугольником, внутри которого находятся хранящиеся в ячейке данные. Если у ячейки имеется имя, оно будет писаться рядом с этим прямоугольником.

Мы привыкли работать с числами, записанными в так называемой десятичной системе счисления. В ней имеется 10 цифр (от 0 до 9), а в числе имеются десятичные разряды. Каждый разряд слева имеет вес 10 по сравнению с предыдущим, то есть для получения значения числа, соответствующего цифре в каком-то разряде, стоящую в нем цифру надо умножать на 10 в соответствующей степени. То есть 52 = 5 x 10 + 2,137 = 1 x 102 + 3 x 101 + 7, и т.п.

В программировании десятичной системой счисления пользоваться не всегда удобно, так как в компьютерах информация организована в виде бит, байт и более крупных порций. Человеку неудобно оперировать данными в виде длинных последовательностей нулей и единиц. В настоящее время в программировании стандартной является шестнадцатеричная система записи чисел. Например, с ее помощью естественным образом кодируется цвет, устанавливаются значения отдельных бит числа, осуществляется шифрование и дешифрование информации, и так далее. В этой системе счисления все очень похоже на десятичную, но только не 10, а 16 цифр, и вес разряда не 10, а 16. В качестве первых 10 цифр используются обычные десятичные цифры, а в качестве недостающих цифр, больших 9, используются заглавные латинские буквы A, B, C, D, E, F:

0 1 2 3 4 5 6 7 8 9 A B C D E F

То есть A=10, B=11, C=12, D=13, E=14, F=15.

Заметим, что в шестнадцатеричной системе счисления числа от 0 до 9 записываются одинаково, а превышающие 9 отличаются. Для чисел от 10 до 15 в шестнадцатеричной системе счисления используются буквы от A до F, после чего происходит использование следующего шестнадцатеричного разряда. Десятичное число 16 в шестнадцатеричной системе счисления записывается как 10. Для того, чтобы не путать числа, записанные в разных системах счисления, около них справа пишут индекс с указанием основания системы счисления. Для десятичной системы счисления это 10, для шестнадцатеричной 16. Для десятичной системы основание обычно не указывают, если это не приводит к путанице. Точно так же в технической литературе часто не указывают основание для чисел, записанных в шестнадцатеричной системе счисления, если в записи числа встречаются не только "обычные" цифры от 0 до 9, но и "буквенные" цифры от A до F. Обычно используют заглавные буквы, но можно применять и строчные.

Рассмотрим примеры.

0x10=1016=16

0x100=10016=16x16=256

0x1000=100016=(16)3=4096

0xF=F16=15

0x1F=1F16=1x16+15+31

0x2F=2F16=2x16+15+47

0xFF=FF16=15x16+15+255

Зарезервированные слова языка Java[9]

Это слова, зарезервированные для синтаксических конструкций языка, причем их назначение нельзя переопределять внутри программы. (см. табл.2)

Таблица 2

Слова, зарезервированные для синтаксических конструкций языка

Их нельзя использовать в качестве идентификаторов (имен переменных, подпрограмм и т.п.), но можно использовать в строковых выражениях.

В языке Java только 8 примитивных (скалярных, простых) типов: boolean, byte, char, short, int, long, float, double.

Длины и диапазоны значений примитивных типов определяются стандартом, а не реализацией и приведены в таблице. Тип char сделали двухбайтовым для удобства локализации (один из идеологических принципов Java): когда складывался стандарт, уже существовал Unicode-16, но не Unicode-32. Поскольку в результате не осталось однобайтового типа, добавили новый тип byte, причем в Java, в отличие от других языков, он не является беззнаковым. Типы float и double могут иметь специальные значения, и «не число» (NaN). Для типа double они обозначаются Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN; для типа float- так же, но с приставкой Float вместо Double. Минимальные положительные значения, принимаемые типами float и double, тоже стандартизованы.

Такая стандартизация языка была необходима для того, чтобы сделать языковую платформу независимой, что является одним из идеологических направлений в Java и одной из причин ее успеха. Однако одна небольшая проблема с независимостью платформы все еще остается. Некоторые процессоры используются для промежуточного хранения результатов. Чтобы сделать Java максимально совместимой между различными системами, более ранние версии запрещали любые методы повышения точности. Однако это приводит к снижению производительности. Выяснилось, что ухудшение точности ради платформенной независимости мало кому нужно, тем более, если за это приходится платить замедлением работы программ. После многочисленных протестов этот запрет отменили, но добавили ключевое слово strictfp, запрещающее повышение точности.

Преобразования при математических операциях[10]

В языке Java действуют следующие правила:

1. Если один операнд имеет тип double, другой тоже преобразуется к типу double.

2. Иначе, если один операнд имеет тип float, другой тоже преобразуется к типу float.

3. Иначе, если один операнд имеет тип long, другой тоже преобразуется к типу long.

4. Иначе оба операнда преобразуются к типу int.

Данный способ неявного преобразования встроенных типов полностью совпадает с преобразованием типов в C++.

Самый простой код, написанный на языке Java представляет из себя следующий вид:

/*многострочный комментарий
Объявление нового класса,
который содержит код программы*/

public class Program{ // начало объявления класса Program
// определение метода main

public static void main (String args[]){ // объявление нового метода
System.out.println("Hello Java!"); // вывод строки на консоль
} // конец объявления нового метода
} // конец объявления класса Program

Глава 3. Сравнение С++ и Java

Java и C ++ можно рассматривать как два языка-потомка Си, разработанных по разному соображению и пошедших по разным путям.

Синтаксис

C ++ поддерживает совместимость с Си, насколько это возможно. Java сохраняет внешне похожие Си и C++, но на самом деле сильно отличается от них.

Выполнение программы

Код Java компилируется в промежуточный код, который затем интерпретируется или компилируется, в то время как C ++ изначально ориентирован на компиляцию в машинный код внутреннего блока. Это явление вряд ли можно использовать при написании конкретных программ, таких как драйверы устройств или низкоуровневые утилиты. Механизм выполнения Java делает программы, даже скомпилированные (в байт-код), полностью переносимыми. Стандартная среда и среда выполнения позволяют Java-программам работать на любой аппаратной платформе и в любой операционной системе без каких-либо изменений, поэтому усилия по миграции программ минимальны. Цена переносимости - потеря эффективности, а работа среды исполнения приводит к дополнительным накладным расходам.

Управление ресурсами

C ++ допускает принцип «захвата ресурсов путем инициализации» (RAII), в котором ресурсы связаны с автоматическим освобождением при уничтожении объекта (например, std, vector и std, ifstream). Кроме того, когда программист использует следующие ресурсы (память под объекты, открытые файлы и т. д.), Он должен четко позаботиться об их своевременном освобождении. Java работает в среде сборки мусора, которая автоматически отслеживает прекращение использования объектов и освобождение занятой памяти, если это необходимо, в какой-то неопределенный момент времени. Ручное управление предпочтениями в системном программировании, где требуется полный контроль над ресурсами, RAII и сборкой мусора. Сборщик мусора Java требует системных ресурсов для обеспечения эффективного выполнения программ, лишает программы Java детерминизма выполнения и возможности отслеживать только память. Файлы, каналы, сокеты, объекты Java GUI всегда явно освобождаются.

Стандартизация окружающей среды

Java имеет несколько стандартов для ввода-вывода, графики, геометрии, диалоговых окон, базового доступа к данным и других типичных приложений. C++ гораздо свободнее в этом отношении, стандарты на графику, доступ к базе данных и т. д. являются недостатком, если программист хочет определить свой собственный стандарт.

Указатели

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

Парадигма программирования

В отличие от C ++, Java является чисто объектно-ориентированным языком, без возможности процедурного программирования. Для задания главной функции даже самой простой программы на Java необходимо поместить её в класс.

Динамическая информация о типах

В C++ RTTI(динамическая идентификация типа данных) позволяет сравнивать типы объектов друг с другом и литеральные значения. Java предоставляет дополнительную информацию о типах. Эта функция может быть реализована в C ++, имея полную информацию о типах времени компиляции CTTI.

Препроцессорная обработка

Задача препроцессора C++ - искать специальные команды, начинающиеся с символа#. Эти команды позволяют выполнять простой условный перевод и расширение макросов.

Java управляет своими задачами без помощи препроцессора, вместо стиля, принятого в Си, определения констант с директивой #define, он используетключевое слово final.

Заключение

Как и было сказано в первом издании книги «Язык программирования С++», автором которой был Bjarne Stroustrup. Язык программирования C++. Он руководствовался опытом широкого круга пользователей, работающих в различных областях программирования. За те, продуктивные, 6 лет, отделявшие нас от первого издания книги с описанием языка программирования C++, количество пользователей значительно увеличилось, примерно в тысячу раз. За этот короткий период было усвоено множество важных уроков, учтено в теории и реализовано на практике достаточное количество методов программирования.

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

Язык Java, как объектно-ориентированный язык программирования, поставляется с довольно большой библиотекой классов. Благодаря библиотекам классов Java, разработка приложений стала намного проще, т.к используя данные библиотеки программисту доступны достаточно мощные инструменты для решения типичных проблем и обширных задач. В результате чего программисту доступно значительно больше времени для полного сосредоточения на решении прикладных задач, вместо того чтобы тратить его на организацию динамических массивов, взаимодействии с ОС или реализации элементов пользовательского интерфейса.

Свойства языка Java:

  • объектно-ориентированный язык программирования, оснащенный богатой библиотекой классов и в то же время достаточно простой в освоении;
  • цикл разработки приложения сокращается за счет того, что система построена на базе интерпретатора;
  • приложение автоматически мигрирует между несколькими платформами и операционными системами;
  • благодаря встроенной системе «сбора мусора», программист избавлен от необходимости прямого управления памятью;
  • приложение легко поддерживается и модифицируется, так как модули могут быть загружены из сети;
  • приложение имеет встроенную систему безопасности, которая предотвращает несанкционированный доступ и проникновение вирусов.

Список использованной литературы

1. «Бьерн Страуструп. Язык программирования С++» , изд. Бином, М. –1136с.

2. Джесс либерти, «Освой самостоятельно C++ за 21 день», изд. Дом «Вильямс», Москва - Санкт-Петербург - Киев, 2001. – 834с.

3. Джон Родли Создание Java-апплетов.- TheCoriolis Group,Inc.,1996, Издательство НИПФ "ДиаСофт Лтд.",1996 – 654с.

4. Герберт Шилдт. C + + для начинающих. Пер. с англ. М: ЭКОМПаблишерз 2007. – 546с.

5. Герберт Шилдт. Полный справочник по C + + 4-е издание. Пер. с англ. М: издательский дом « Вильямс » 2010. – 543с.

6. Майкл Эферган Java: справочник.- QUE Corporation, 1997, Издательство "Питер Ком", 1998. – 687с.

  1. «Бьерн Страуструп. Язык программирования С++» , изд. Бином, М. – С.11.

  2. «Бьерн Страуструп. Язык программирования С++» , изд. Бином, М. – С.11-14.

  3. Джесс либерти, «Освой самостоятельно C++ за 21 день», изд. Дом «Вильямс», Москва - Санкт-Петербург - Киев, 2001. – С.14.

  4. Джесс либерти, «Освой самостоятельно C++ за 21 день», изд. Дом «Вильямс», Москва - Санкт-Петербург - Киев, 2001.- С.43.

  5. Герберт Шилдт. C + + для начинающих. Пер. с англ. М: ЭКОМПаблишерз 2007. – С.34-38.

  6. Джон Родли Создание Java-апплетов .- TheCoriolis Group,Inc.,1996, Издательство НИПФ "ДиаСофт Лтд.",1996 – С.32.

  7. Джон Родли Создание Java-апплетов .- TheCoriolis Group,Inc.,1996, Издательство НИПФ "ДиаСофт Лтд.",1996 – С.35-37.

  8. Майкл ЭферганJava: справочник .- QUE Corporation, 1997, Издательство "Питер Ком", 1998. – С.89.

  9. Майкл ЭферганJava: справочник .- QUE Corporation, 1997, Издательство "Питер Ком", 1998 – С.67.

  10. Майкл ЭферганJava: справочник .- QUE Corporation, 1997, Издательство "Питер Ком", 1998. – С.71-75.