Как связаны между собой языки C, C++, JavaScript и Java? Что между ними общего, и в чем они отличаются? В каких случаях следует, а в каких не следует их применять? Для того чтобы ответить на этот вопрос, следует сначала остановиться на особенностях программного обеспечения предыдущих поколений и на современных тенденциях в развитии программного обеспечения.
Первоначально программирование компьютеров шло в машинных кодах. Затем появились языки ASSEMBLER, которые заменили команды процессоров мнемоническими сокращениями, гораздо более удобными для человека, чем последовательности нулей и единиц. Их принято считать языками программирования низкого уровня (то есть близкими к аппаратному уровню), так как они ориентированы на особенности конкретных процессоров. Именно поэтому программы, написанные на языках ASSEMBLER, нельзя было переносить на компьютеры с другим типом процессора - процессоры имели несовместимые наборы команд. То есть они были непереносимы на уровне исходного кода (
Программы, написанные в машинных кодах, то есть в виде последовательности ноликов и единиц, соответствующих командам процессора и необходимым для них данным, нет необходимости как-то преобразовывать. Их можно скопировать в нужное место памяти компьютера и передать управление первой команде программы (задать точку
Программы, написанные на каком-либо языке программирования, сначала надо перевести из одной формы (текстовой) в другую (двоичную, то есть в машинные коды). Процесс такого перевода называется трансляцией (от английского translation – "перевод", "перемещение"). Не обязательно переводить программу из текстовой формы в двоичные коды, возможен процесс трансляции с одного языка программирования на другой. Или из кодов одного типа процессора в коды другого типа.
Имеется два основных вида трансляции – компиляция и интерпретация.
При компиляции первоначальный набор инструкций однократно переводится в исполняемую форму (машинные коды), и в последующем при работе программы используются только эти коды.
При интерпретации во время каждого вызова необходимых инструкций каждый раз сначала происходит перевод инструкций из одной формы (текстовой или двоичной) в другую – в исполняемые коды процессора используемого компьютера. И только потом эти коды исполняются. Естественно, что интерпретируемые коды исполняются медленнее, чем скомпилированные, так как перевод инструкций из одной формы в другую обычно занимает в несколько раз больше времени чем выполнение полученных инструкций. Но интерпретация обеспечивает большую гибкость по сравнению с компиляцией, и в ряде случаев без нее не обойтись.
В 1956 году появился язык FORTRAN – первый язык программирования высокого уровня (то есть не ориентированный на конкретную аппаратную реализацию компьютера). Он обеспечил переносимость программ на уровне исходных кодов, но довольно дорогой ценой. Во-первых, быстродействие программ, написанных на FORTRAN, было в несколько раз меньше, чем для ассемблерных. Во-вторых, эти программы занимали примерно в два раза больше места в памяти компьютера, чем ассемблерные. И, наконец, пришлось отказаться от поддержки особенностей периферийных устройств – общение с "внешним миром" пришлось ограничить простейшими возможностями, которые в программе одинаково реализовывались для ввода-вывода с помощью перфокарточного считывателя, клавиатуры, принтера, текстового дисплея и т.д. Тем не менее языки программирования высокого уровня постепенно вытеснили языки ASSEMBLER, поскольку обеспечивали не только переносимость программ, но и гораздо более высокую их надежность, а также несоизмеримо более высокую скорость разработки сложного программного обеспечения. FORTRAN до сих пор остается важнейшим языком программирования для высокопроизводительных численных научных расчетов.
Увеличение аппаратных возможностей компьютеров (количества памяти, быстродействия, появления дисковой памяти большого объема), а также появление разнообразных периферийных устройств, привело к необходимости пересмотра того, как должны работать программы. Массовый выпуск компьютеров потребовал унификации доступа из программ к различным устройствам. Возникла идея, что из программы можно обращаться к устройству без учета особенностей его аппаратной реализации. Это возможно, если обращение к устройству идет не напрямую, а через прилагающуюся программу – драйвер устройства (по-английски driver означает "водитель"). Появились операционные системы - наборы драйверов и программ, распределяющих ресурсы компьютера между разными программами. Соответственно, программное обеспечение стало разделяться на системное и прикладное. Системное программное обеспечение – непосредственно обращающееся к аппаратуре, прикладное – решающее какие-либо прикладные задачи и использующее аппаратные возможности компьютера не напрямую, а через вызовы программ операционной системы. Прикладные программы стали приложениями операционной системы, или, сокращенно, приложениями (applications). Этот термин означает, что программа может работать только под управлением операционной системы. Если на том же компьютере установить другой тип операционной системы, программа-приложение первой операционной системы не будет работать.
Требования к прикладным программам принципиально отличаются от требований к системным программам. От системного программного обеспечения требуется максимальное быстродействие и минимальное количество занимаемых ресурсов, а также возможность доступа к любым необходимым аппаратным ресурсам. От прикладного – максимальная функциональность в конкретной предметной области. При этом быстродействие и занимаемые ресурсы не имеют значения до тех пор, пока не влияют на функциональность. Например, нет совершенно никакой разницы, реагирует программа на нажатие клавиши на клавиатуре за одну десятую или за одну миллионную долю секунды. Правда, на первоначальном этапе создания прикладного программного обеспечения даже прикладные по назначению программы были системными по реализации, так как оказывались вынуждены напрямую обращаться к аппаратуре.
Язык C был создан в 1972 году в одной из исследовательских групп
Язык C произвел настоящую революцию в разработке программного обеспечения, получил широкое распространение и стал промышленным стандартом. Он до сих пор применяется для написания операционных систем и программирования
Большое влияние на развитие
В связи с ограниченностью ресурсов компьютеров и отсутствием в PASCAL средств
Развитие теории и практики программирования привело к становлению в 1967-1972 годах нового направления – объектного программирования, основанного на концепциях работы с классами и объектами. Оно обеспечило принципиально новые возможности по сравнению с процедурным. Были предприняты попытки расширения различных языков путем введения в них конструкций объектного программирования. В 1982 году Бьерном Страуструпом путем такого расширения языка C был создан язык, который он назвал "C с классами". В 1983 году после очередных усовершенствований им был создан первый компилятор языка C++. Два плюса означают "C с очень большим количеством добавлений". C++ является надмножеством над языком C – на нем можно писать программы как на "чистом C", без использования каких-либо конструкций объектного программирования. В связи с этим, а также дополнительными преимуществами объектного программирования,
он быстро приобрел популярность и стал промышленным стандартом, сначала "де факто", а потом и "де юре". Так что в настоящее время C++ является базовым языком
В 1995 году появились сразу два языка программирования, имеющие в настоящее время огромное значение –Java, разработанный в корпорации Sun, и JavaScript, разработанный в небольшой фирме Netscape Communication, получившей к тому времени известность благодаря разработке браузера Netscape Navigator.
Java создавался как универсальный язык, предназначенный для
Язык JavaScript создавался как узкоспециализированный прикладной язык программирования HTML-страниц, расширяющий возможности HTML, и в полной мере отвечает этим потребностям до сих пор. Следует подчеркнуть, что язык JavaScript не имеет никакого отношения к Java. Включение слова "Java" в название JavaScript являлось рекламным трюком фирмы Netscape Communication. Он также C-образен, но, в отличие от C, является интерпретируемым. Основное назначение JavaScript – программное управление элементами WWW-документов. Языки HTML и XML позволяют задавать статический, неизменный внешний вид документов, и с их помощью невозможно запрограммировать реакцию на действия пользователя. JavaScript позволяет ввести элементы программирования в поведение документа. Программы, написанные на JavaScript, встраиваются в документы в виде исходных кодов (сценариев) и имеют небольшой размер.
Для упрощения работы с динамически формируемыми документами JavaScript имеет свободную
Java, JavaScript и C++ являются объектно-ориентированными языками программирования, и все они имеют C-образный синтаксис операторов. Но как объектные модели, так и базовые конструкции этих языков (за исключением синтаксиса операторов), в этих языках принципиально различны. Ни один из них не является версией или упрощением другого – это совсем разные языки, предназначенные для разных целей. Итак, Java-универсальный язык
В 2000 году в корпорации Microsoft была разработана платформа .Net (читается "дотнет", DotNet– в переводе с английского "точка Net" ). Она стала альтернативой платформе Java и во многом повторяла ее идеи. Основное различие заключалось в том, что для этой платформы можно использовать произвольное количество языков программирования, а не один. Причем классы .Net оказываются совместимы как в целях наследования, так и по исполняемому коду независимо от языка, используемого для их создания. Важнейшим языком .Net стал Java-образный язык C# (читается "Си шарп"). Фактически, C# унаследовал от Java большинство особенностей - динамическую объектную модель, сборку "мусора", основные синтаксические конструкции. Хотя и является вполне самостоятельным языком программирования, имеющим много привлекательных черт. В частности, компонентные модели Java и C# принципиально отличаются.
Java стал первым универсальным C-образным языком
Первоначально слово "программа" означало последовательность инструкций процессора для решения какой-либо задачи. Эти инструкции являлись машинными кодами, и разницы между исходным и исполняемым кодом программы не было. Разница появилась, когда программы стали писать на языках программирования. При этом программой стали называть как текст, содержащийся в файле с исходным кодом, так и исполняемый файл.
Для устранения неоднозначности термина "программа", исполняемый код программы принято называть приложением ( application ). Термин "приложение" – сокращение от фразы "приложение операционной системы". Он означает, что исполняемый код программы может работать только под управлением соответствующей операционной системы. Работа под управлением операционной системы позволяет избежать зависимости программы от устройства конкретного варианта аппаратуры на компьютере, где она должна выполняться. Например, как автору программы, так и пользователю совершенно безразлично, как устроено устройство, с которого считывается информация – будет ли это жесткий диск с одной, двумя или шестнадцатью считывающими головками. Или это будет CD-привод, DVD-привод или еще какой-либо другой тип носителя. Но переносимость обычных приложений ограничивается одним типом операционных систем.
Например, приложение MS Windows® не будет работать под Linux, и наоборот. Программы, написанные на языке Java, выполняются под управлением специальной программы -виртуальной Java-машины, и поэтому обладают переносимостью на любую операционную систему, где имеется соответствующая Java-машина. Благодаря этому они являются не приложениями какой-либо операционной системы, а приложениями Java.
Программы, написанные на языке Java, представляют из себя наборы классов и сохраняются в текстовых файлах с расширением .java. (Про то, что такое классы, будет рассказано несколько позже). При компиляции текст программы переводится (транслируются) в двоичные файлы с расширением .class. Такие файлы содержат байт-код - инструкции для абстрактного Java-процессора в виде байтовых последовательностей команд этого процессора и данных к ним. Для того, чтобы байт-код был выполнен на каком-либо компьютере, он должен быть переведен в инструкции для соответствующего процессора. Именно этим и занимается Java-машина. Первоначально байт-код всегда интерпретировался: каждый раз, как встречалась какая-либо инструкция Java-процессора, она переводилась в последовательность инструкций процессора компьютера. Естественно, это значительно замедляло работу приложений Java.
В настоящее время используется более сложная схема, называемая
Сложные оптимизирующие
Благодаря компиляции программ Java в платформонезависимый байт-код обеспечивается переносимость этих программ не только на уровне исходного кода, но и на уровне скомпилированных приложений. Конечно, при этом на компьютере, где выполняется приложение, должна быть установлена программа виртуальной Java-машины (
Приложение операционной системы запускается с помощью средств операционной системы. Приложение Java, напротив, запускается с помощью виртуальной Java-машины, которая сама является приложением операционной системы. Таким образом, сначала стартует Java-машина. Она получает в качестве параметра имя файла с компилированным кодом класса. В этом классе ищется и запускается на выполнение подпрограмма с именем main.
Приложения Java обладают не только хорошей переносимостью, но и высокой скоростью работы. Однако даже при наличии
Виртуальная Java-машина не только исполняет байт-код (интерпретирует его, занимается
Между приложениями и апплетами Java имеется принципиальное различие: приложение запускается непосредственно с компьютера пользователя и имеет доступ ко всем ресурсам компьютера наравне с любыми другими программами. Апплет же загружается из WWW с постороннего сервера, причем из-за самой идеологии WWW сайт, с которого загружен апплет, в общем случае не может быть признан надежным. А сам апплет имеет возможность передавать данные на произвольный сервер в WWW. Поэтому для того, чтобы избежать риска утечки конфиденциальной информации с компьютера пользователя или совершения враждебных действий у апплетов убраны многие возможности, имеющиеся у приложений.
Сервлеты – это приложения Java , запускаемые со стороны сервера. Они имеют возможности доступа к файловой системе и другим ресурсам сервера через набор
Первоначально Java позиционировался Sun как язык, обеспечивающий развитые графические возможности WWW-документов благодаря включению в них апплетов. Однако в настоящее время основными областями использования Java является прикладное программирование на основе приложений, страниц
Виртуальную Java-машину часто называют исполняющей средой (
Существует два основных способа установки Java-машины на клиентский компьютер:
Комплект последних версий
При использовании апплетов требуется, чтобы в состав браузера входил специализированный комплект
Имеется возможность установки Java-машины от различных производителей, не обязательно устанавливать комплект
Комплекты
Версии Java 1.0 и 1.1 принято называть Java 1. Все версии Java начиная c 1.2 называют Java 2. Однако более надежно классифицировать по номеру
Комплекты разработки
При распространении какого-либо продукта, написанного на Java, возможна установка только программного обеспечения Java-машины (
Также возможна установка целиком
Аббревиатура
| Утилита | Назначение |
|---|---|
| Компилятор в режиме командной строки для программ, написанных на языке Java | |
| java | Утилита для запуска в режиме командной строки откомпилированных программ-приложений |
| Утилита для запуска на исполнение и отладку апплетов без браузера. При этом не гарантируется работоспособность отлаженного апплета в браузере. | |
| jdb | Отладчик программ, написанных на языке Java |
| Генератор документации по классам на основе комментариев, начинающихся с /** | |
| Создание и управление Java-архивами |
|
| javah | Генератор заголовочных файлов C/C++ для подключения к программам Java внешних библиотек C/C++ на основе интерфейса |
| javap | |
| extcheck | Утилита для обнаружения конфликтов между файлами архивов |
| native2ascii | Утилита для конвертации в режиме командной строки параметра, передаваемого в виде текста на национальном алфавите, в последовательность символов UNICODE. |
Кроме этого, имеются средства поддержки работы в WWW и корпоративных сетях (
Подчеркнем, что набор утилит
Алфавит языка Java состоит из букв, десятичных цифр и специальных символов. Буквами считаются латинские буквы (кодируются в стандарте ASCII), буквы национальных алфавитов (кодируются в стандарте Unicode, кодировка
Буквы и цифры можно использовать в качестве идентификаторов (т.е. имен) переменных, методов и других
Как буквы рассматривается только часть символов национальных алфавитов. Остальные символы национальных алфавитов - это специальные символы. Они используются в качестве операторов и разделителей языка Java и не могут входить в состав идентификаторов.
Латинские буквы ASCII
Дополнительные "буквы" ASCII
Национальные буквы на примере русского алфавита
Десятичные цифры
Целые числовые константы в исходном коде Java (так называемые литерные константы) могут быть десятичными или шестнадцатеричными. Они записываются либо символами ASCII, или символами Unicode следующим образом.
Десятичные константы записываются как обычно. Например, -137.
Шестнадцатеричная константа начинается с символов 0x или 0X (цифра 0, после которой следует латинская буква X), а затем идет само число в шестнадцатеричной нотации. Например, 0x10 соответствует $$10_{16}=16$$ ; 0x2F соответствует $$2F_{16}=47$$, и т.д. О шестнадцатеричной нотации рассказано чуть ниже.
Ранее иногда применялись восьмеричные числа, и в языках C/C++, а также старых версиях Java можно было их записывать в виде числа, начинающегося с цифры 0. То есть 010 означало $$10_8=8$$. В настоящее время в программировании восьмеричные числа практически никогда не применяются, а неадекватное использование ведущего нуля может приводить к
Целая константа в обычной записи имеет тип int. Если после константы добавить букву L (или l, что хуже видно в тексте, хотя в среде разработки выделяется цветом), она будет иметь тип long, обладающий более широким диапазоном значений, чем тип int.
Поясним теперь, что такое шестнадцатеричная нотация записи чисел и зачем она нужна.
Информация представляется в компьютере в двоичном виде – как последовательность бит. Бит – это минимальная порция информации, он может быть представлен в виде ячейки, в которой хранится или ноль, или единица. Но бит – слишком мелкая единица, поэтому в компьютерах информация хранится, кодируется и передается байтами - порциями по 8 бит.
В данном курсе под "ячейкой памяти" будет пониматься непрерывная область памяти (с последовательно идущими адресами), выделенная программой для хранения данных. На рисунках мы будем изображать ячейку прямоугольником, внутри которого находятся хранящиеся в ячейке данные. Если у ячейки имеется имя, оно будет писаться рядом с этим прямоугольником.
Мы привыкли работать с числами, записанными в так называемой десятичной системе
В программировании десятичной системой
То есть A=10, B=11, C=12, D=13, E=14, F=15.
Заметим, что в шестнадцатеричной системе
Рассмотрим примеры.
Более подробно вопросы представления чисел в компьютере будут рассмотрены в отдельном разделе.
Это слова, зарезервированные для синтаксических конструкций языка, причем их назначение нельзя переопределять внутри программы.
| boolean | break | byte | case | |
| catch | char | class | const | continue |
| default | do | double | else | |
| extends | false | final | finally | float |
| for | goto | if | implements | import |
| instanceof | int | interface | long | |
| new | null | package | private | protected |
| public | return | short | static | |
| switch | this | throw | throws | |
| true | try | void | ||
| while |
Их нельзя использовать в качестве идентификаторов (имен переменных, подпрограмм и т.п.), но можно использовать в строковых выражениях.
Иногда в тексте программы в строковых константах требуется использовать символы, которые обычным образом в текст программы ввести нельзя. Например, символы кавычек (их надо использовать внутри кавычек, что затруднительно), символ вопроса (зарезервирован для тернарного условного оператора), а также различные специальные символы. В этом случае используют управляющую последовательность – символ обратной косой черты, после которой следует один управляющий символ. В таблице приведены
| Символ | Что означает |
|---|---|
\b |
возврат на один символ назад |
\f |
перевод на новую страницу |
\n |
перевод на новую строку |
\r |
возврат к началу строки |
\t |
горизонтальная табуляция |
\v |
вертикальная табуляция |
\' |
кавычка |
\" |
двойные кавычки |
\\ |
обратная косая черта |
\? |
вопросительный знак |
\u |
начало |
"\u", после которой идет код символа в шестнадцатеричной кодировке для кодовых таблиц
Например:
\u0030 - \u0039 – цифры ISO-\u0024 – знак доллара $\u0041 - \u005a – буквы от A до Z\u0061 - \u007a – буквы от a до z
|
|
| Символ | Что означает |
|---|---|
++ |
Оператор x++ эквивалентно x=x+1 |
-- |
Оператор x-- эквивалентно x=x-1 |
|
Оператор "логическое И" ( AND ) |
|| |
Оператор " OR ) |
<< |
Оператор левого побитового сдвига |
>>> |
Оператор беззнакового правого побитового сдвига |
>> |
Оператор правого побитового сдвига с сохранением знака отрицательного числа |
== |
Равно |
!= |
не равно |
+= |
y+=x эквивалентно y=y+x |
-= |
y-=x эквивалентно y=y-x |
*= |
y*=x эквивалентно y=y*x |
/= |
y/=x эквивалентно y=y/x |
%= |
y%=x эквивалентно y=y%x |
|= |
y|=x эквивалентно y=y|x |
^= |
y^=x эквивалентно y=y^x |
>>= |
y>>=x эквивалентно y= y>>x |
>>>= |
y>>>=x эквивалентно y= y>>>x |
<<= |
y<<=x эквивалентно y= y<<x |
/* |
Начало многострочного комментария. |
/** |
Начало многострочного комментария, предназначенного для автоматического создания документации по классу. |
*/ |
Конец многострочного комментария (открываемого как /* или /** ). |
// |
Однострочный комментарий |
Идентификаторы - это имена переменных, подпрограмм-функций и других
Язык Java является регистро-чувствительным. Это значит, что идентификаторы чувствительны к тому, в каком регистре (верхнем или нижнем) набираются символы. Например, имена i1 и I1 соответствуют разным идентификаторам. Это правило привычно для тех, кто изучал языки C/C++, но может на первых порах вызвать сложности у тех, кто изучал язык PASCAL, который является регистро-нечувствительным.
Длина идентификатора в Java любая, по крайней мере, в пределах разумного. Так, даже при длине идентификатора во всю ширину экрана компилятор NetBeans правильно работает.
Переменная – это именованная ячейка памяти, содержимое которой может изменяться. Перед тем, как использовать какую-либо переменную, она должна быть задана в области программы, предшествующей месту, где эта переменная используется. При объявлении переменной сначала указывается тип переменной, а затем идентификатор задаваемой переменной. Указание типа позволяет компилятору задавать размер ячейки (объем памяти, выделяемой под переменную или значение данного типа), а также допустимые правила действий с переменными и значениями этого типа. В Java существует ряд предопределенных типов: int – целое число, float – вещественное число, boolean – логическое значение, Object – самый простой
Объявление переменных a1 и b1, имеющих некий тип MyType1, осуществляется так:
MyType1 a1,b1;
При этом MyType1 – имя типа этих переменных.
Другой пример – объявление переменной j типа int:
int j;
Типы бывают предопределенные и пользовательские. Например, int – предопределенный тип, а MyType1 – пользовательский. Для объявления переменной не требуется никакого зарезервированного слова, а имя типа пишется перед именами задаваемых переменных.
Объявление переменных может сопровождаться их инициализацией - присваиванием начальных значений. Приведем пример такого объявления целочисленных переменных i1 и i2:
int i1=5; int i2=-78;
либо
int i1=5,i2=-78;
Присваивания вида int i1=i2=5;, характерные для C/C++, запрещены.
Для начинающих программистов отметим, что символ "=" используется в Java и многих других языках в качестве символа присваивания, а не символа равенства, как это принято в математике. Он означает, что значение, стоящее с правой стороны от этого символа, копируется в переменную, стоящую в левой части. То есть, например, присваивание b=a означает, что в переменную (ячейку) с именем b надо скопировать значение из переменной (ячейки) с именем a. Поэтому неправильное с точки зрения математики выражение
x=x+1
в программировании вполне корректно. Оно означает, что надо взять значение, хранящееся в ячейке с именем x, прибавить к нему 1 (это будет происходить где-то вне ячейки x ), после чего получившийся результат записать в ячейку x, заменив им прежнее значение.
После объявления переменных они могут быть использованы в выражениях и присваиваниях:
переменная=значение; переменная=выражение; переменная1= переменная2;
и так далее. Например,
i1=i2+5*i1;
Примитивными типами называются такие, для которых данные содержатся в одной ячейке памяти, и эта ячейка не имеет подъячеек.
Ссылочными типами называются такие, для которых в ячейке памяти ( ссылочной переменной ) содержатся не сами данные, а только адреса этих данных, то есть ссылки на данные. При присваивании в ссылочную переменную заносится новый адрес, а не сами данные. Но непосредственного доступа к адресу, хранящемуся в ссылочных переменных, нет. Это сделано для обеспечения безопасности работы с данными – как с точки зрения устранения непреднамеренных ошибок, характерных для работы с данными по их адресам в языках C/C++/PASCAL, так и для устранения возможности намеренного взлома информации.
Если ссылочной переменной не присвоено ссылки, в ней хранится нулевой адрес, которому дано null. Ссылки можно присваивать друг другу, если они совместимы по типам, а также присваивать значение null. При этом из одной ссылочной переменной в другую копируется адрес. Ссылочные переменные можно сравнивать на равенство, в том числе на равенство null. При этом сравниваются не данные, а их адреса, хранящиеся в ссылочных переменных.
В Java все типы делятся на примитивные и ссылочные. К byte, short, int, long, char, типы данных в формате с плавающей точкой float, double, а также булевский (boolean и типы-перечисления, объявляемые с помощью зарезервированного слова (сокращение от
В Java действуют следующие соглашения о регистре букв в идентификаторах:
int, float, boolean и т.д.Object, Float, Boolean, Collection, Runnable. Но если имя составное, новую часть имени начинают с заглавной буквы. Например, JButton, JTextField, JFormattedTextField, MyType и т.д. Обратите внимание, что типы float и Float, boolean и Boolean различны – язык Java чувствителен к регистру букв!i, j, object1. Если имя составное, новую часть имени начинают с заглавной буквы: myVariable, jButton2, jTextField2.getText() и т.д.Double.MIN_VALUE, Double.MAX_VALUE , JOptionPane.INFORMATION_MESSAGE, MY_CHARS_COUNT и т.п.Переменная примитивного типа может быть отождествлена с ячейкой, в которой хранятся данные. У нее всегда есть имя. Присваивание переменной примитивного типа меняет значение данных. Для ссылочных переменных действия производятся с адресами ячеек, в которых хранятся данные, а не с самими данными.
Для чего нужны такие усложнения? Ведь человеку гораздо естественнее работать с ячейками памяти, в которых хранятся данные, а не адреса этих данных. Ответ заключается в том, что в программах часто требуются динамически создаваемые и уничтожаемые данные. Для них нельзя заранее создать необходимое число переменных, так как это число неизвестно на этапе написания программы и зависит от выбора пользователя. Такие данные приходится помещать в динамически создаваемые и уничтожаемые ячейки. А с этими ячейками удается работать только с помощью ссылочных переменных.
"\", после которого идет управляющий символ. -"\u", после которой следует четыре цифры номера символа в шестнадцатеричной нотации. Например, \u1234.null соответствует ссылочной переменной, которой не назначен адрес ячейки с данными.0x… вместо ведущего нуля пишут букву O.i1, i_1, 1i, i1, i1234567891011, IJKLMN?myObject, MyObject, myobject, Myobject, my object, my_object?Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.