На чем написан язык java

Урок 2. Обзор Java: введение, преимущества и история создания языка программирования

Прежде, чем перейти к обучению, начнём с введения в java-программирование, разберёмся кратко, что это за такой язык программирования. Немного истории языка java. Язык Java разработан компанией Sun Microsystems, создателем которого был Джеймс Гослинг, и выпущен в 1995 году в качестве основных компонентов компании Sun Microsystems — Java платформ (Java 1.0 [J2SE]).

По состоянию на 2017 год последней версией Java Standard Edition является 8 (J2SE). С развитием Java, и её широкой популярностью, несколько конфигураций были построены для различных типов платформ. Например: J2EE — приложения для предприятий, J2ME — для мобильных приложений.

Sun Microsystems переименовала прежнюю версию J2 и ввела новые: Java SE, Java EE и Java ME. Введение в программирование Java различных версий подтверждало знаменитый слоган компании «Напиши один раз, запускай везде».

Содержание

История создания языка Java

Но официальной датой создания языка Java считается 23 мая 1995 года, после выпуска компанией Sun первой реализации Java 1.0. Она гарантировала «Напиши один раз, запускай везде», обеспечивая недорогой стоимостью на популярных платформах.

13 ноября 2006 года, Sun выпустила большую часть как свободное и открытое программное обеспечение в соответствии с условиями GNU General Public License (GPL).

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

Преимущества языка Java: краткий обзор

Объектно-ориентированный: в джава все является объектом. Дополнение может быть легко расширено, так как он основан на объектной модели.

Платформонезависимый: в отличие от многих других языков, включая C и C++, Java, когда был создан, он не компилировался в платформе конкретной машины, а в независимом от платформы байт-коде. Этот байт код распространяется через интернет и интерпретируется в Java Virtual Machine (JVM), на которой он в настоящее время работает.

Простой: процессы изучения и введение в язык программирования Java остаются простыми. Если Вы понимаете основные концепции объектно-ориентированного программирования, то он будет прост для Вас в освоении.

Безопасным: методы проверки подлинности основаны на шифровании с открытым ключом.

Архитектурно-нейтральным: компилятор генерирует архитектурно-нейтральные объекты формата файла, что делает скомпилированный код исполняемым на многих процессорах, с наличием системе Java Runtime.

Портативный: архитектурно-нейтральный и не имеющий зависимости от реализации аспектов спецификаций — все это делает Java портативным. Компилятор в Java написан на ANSI C с чистой переносимостью, который является подмножеством POSIX.

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

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

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

Высокопроизводительный: введение Just-In-Time компилятора, позволило получить высокую производительность.

Распространенный: предназначен для распределенной среды интернета.

Динамический: программирование на Java считается более динамичным, чем на C или C++, так как он предназначен для адаптации к меняющимся условиям. Программы могут выполнять обширное количество во время обработки информации, которая может быть использована для проверки и разрешения доступа к объектам на время выполнения.

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

Инструменты, которые понадобятся

Для выполнения примеров, рассмотренных в этом учебнике, Вам нужен компьютер Pentium 200 МГц с минимальной оперативной памятью 64 Мб (рекомендуется оперативная память 128 Мб).

Вам также понадобится следующее программное обеспечение:

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

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

Источник

Язык программирования Java

Язык программирования Java

Java

Java Standard Edition 6 (1.6.14)

Java — объектно-ориентированный язык программирования, разрабатываемый компанией Sun Microsystems и официально выпущенный 23 мая 1995 года. В отношении произношения в русском языке, как и в ряде других, образовались две различные нормы — заимствованная англоязычная /ˈdʒɑːvə/ [1] и традиционно-национальная «Ява», соответствующая традиционому произношению названия острова Ява.

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

Изначально язык программирования назывался Oak (русск. Дуб ) и разрабатывался Джеймсом Гослингом для бытовой электроники, но впоследствии был переименован в Java и стал использоваться для написания клиентских приложений и серверного программного обеспечения. Назван в честь марки кофе Java, любимого программистами, поэтому на официальной эмблеме языка Java изображена чашка с дымящимся кофе.

Содержание

Основные особенности языка

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

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

Часто к недостаткам концепции виртуальной машины относят то, что исполнение байт-кода виртуальной машиной может снижать производительность программ и алгоритмов, реализованных на языке Java. Данное утверждение было справедливо для первых версий виртуальной машины Java, однако в последнее время оно практически потеряло актуальность. Этому способствовал ряд усовершенствований: применение технологии native-кода в стандартных библиотеках, а также аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология ARM).

История версий

Java 1.0

Разработка Java началась в 1990 году, первая официальная версия — Java 1.0, — была выпущена только в 1995 году.

Java 2.0

К 1998 году была разработана обновлённая спецификация JDK 1.2, вышедшая под наименованием Java 2. Собственно языковых изменений в данной версии не появилось. Платформа получила следующие дополнения:

Java 5

Спецификация Java 5 была выпущена в сентябре 2004 года. В данной версии разработчики внесли в язык целый ряд принципиальных дополнений:

Классификация платформ Java

Внутри Java существуют три основных семейства технологий:

Самыми популярными считаются серверные технологии семейства J2EE.

Последним релизом является версия 1.6, в которой было произведено улучшение системы безопасности, улучшение поддержки скриптового языка Mozilla Rhino (англ.), улучшена интеграция с рабочим столом, добавлены некоторые новые возможности в создании графических интерфейсов.

Java и Microsoft

Применения платформы Java

Источник

Национальная библиотека им. Н. Э. Баумана
Bauman National Library

Персональные инструменты

Содержание

История

Джеймс Гослинг, Майк Шеридан и Патрик Нейтон положили начало проекта по разработке языка Java в 1991 году. Java задумывался как язык программирования для интерактивного телевидения, но оказался слишком прогрессивным для индустрии кабельного цифрового телевидения того времени. Изначально язык носил название Oak(«Дуб»), в честь дерева, росшего под окном офиса Джеймса Гослинга. Позже проект сменил название на Green и окончательно был переименован в Java, в честь одноименного кофе. Джеймс Гослинг сделал синтаксис Java в стиле C/C++, так как такой синтаксис был хорошо знаком системным и прикладным программистам.

В 1997 году компания Sun Microsystems обратилась к комитету по стандартизации ISO/IEC JTC 1 и позже к Ecma International с целью создания официального стандарта Java, но вскоре отказалась от этой идеи. Java продолжила подчиняется стандарту де-факто, который контролируется посредством Java Community Process. В то же время Sun Microsystems предоставила свободный доступ к большинству своих реализаций Java, но при этом они имели статус проприетарного програмного обеспечения. Sun получала доход от Java за счет продажи лицензий для специализированных продуктов, таких как Java Enterprise Systems.

13 ноября 2006 года, Sun опубликовала большую часть кода своей JVM в качестве свободного программного обеспечения с открытым исходным кодом (FOSS – англ. Free and Open-Source Software), в соответствии с условиями GNU General Public License. 8 мая 2007 года почти весь код виртуальных машин Java компании Sun Microsystems распространялся как FOSS, исключение составляла только небольшая часть кода, на которую у компании не было авторских прав.

Вице-президент компании Sun Рич Грин заявил, что Sun выполняет роль «евангелиста» по отношению к Java. Корпорация Oracle после поглощения Sun Microsystems описала свою роль как «распорядитель технологии Java с неослабевающим обязательством содействовать сообществу соучастия и открытости». [3] Но практически сразу после этого заявления Oracle подает иск против Google за использование Java в Android SDK. Программное обеспечение написанное на Java работает везде, начиная от ноутбуков и игровых консолей и заканчивая дата-центрами и суперкомпьютерами. 2 апреля 2010 года Джеймс Гослинг ушел из Oracle.

Принципы

Пять основных принципов, в соответствии с которыми создавался язык Java:

Версии

Основные версии Java и даты их выпуска:

Практика

Платформа Java

Один из принципов в соответствии с которыми создавалась Java — это мобильность, что означает, что программы, написанные для платформы Java, должны везде работать одинаково, то есть результат их выполнения не должен зависеть от аппаратного обеспечения и операционной системы. Это достигается посредством трансляции исходного кода в промежуточного представление, называемое байт-кодом, а не в машинный код, зависимый от архитектуры. Инструкции байт-кода аналогичны командам машинного языка, но они предназначены для выполнения виртуальной машиной, реализация которой написана для конкретной архитектуры. Конечные пользователи для запуска автономных Java-приложений или Java-апплетов в web-браузере, как правило используют минимальную реализацию JVM — Java Runtime Environment (JRE), которая устанавливается на их собственной машине.Стандартные библиотеки предоставляют общий способ доступа к хост-специфичным функциям, таким как работа с графикой, потоками выполнения и сетью. Использование универсального байт-кода сильно упрощает портирование. Тем не менее из-за накладных расходов, связанных с интерпретацией байт-кода в машинные инструкции, интерпретируемые программы почти всегда работают медленнее, чем исполняемые файлы на машинном языке. Несмотря на это, JIT-компиляторы, транслирующие байт-код в машинный код во время выполнения, были введены на ранней стадии разработки. Сам по себе язык Java является платформонезависимым, его адаптацией для конкретной платформы, на которой он будет выполняться, занимается виртуальная машина Java (JVM), написанная для этой платформы. JVM транслирует байт-код Java в машинный язык платформы.

Реализации

Стоит также отметить другую реализацию Java SE-платформы — OpenJDK, которая распространяется под лицензией GNU GPL. Создание проекта OpenJDK началось, когда компания Sun выпустила исходный код Java под GPL-лицензией. Начиная с версии Java SE 7, OpenJDK официально является эталонной реализацией Java.

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

Производительность

Программы написанные на Java имеют репутацию более медленных и более затратных по памяти, чем аналогичные программы на С++. Тем не менее скорость выполнения Java-программ значительно возросла с внедрением JIT-компиляции в версии Java 1.1 в 1997/1998 году, с добавлением новых языковых возможностей, позволяющих более эффективно анализировать код (например добавление внутренних классов, класса StringBuilder, условных утверждений (asssertions) и т.п.) и с оптимизацией JVM (например более эффективная виртуальная машина — HotSpot — стала основной с выходом Java 1.3).

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

Автоматическое управление памятью

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

Одна из идей, лежащих в основе модели автоматического управления памятью Java, заключается в том, что программисты могут быть избавлены от сложностей, которые могут возникать при ручном управлении памятью. В некоторых языках память для создания объектов неявно выделяется в стеке, либо явно выделяется и освобождается в куче. В последнем случае ответственность за управление памятью ложиться на программиста. Если программист не удаляет объект, возникает утечка памяти. Если программа пытается получить доступ или освободить участок памяти, который уже был освобожден, то результат такого поведения не определён, то есть трудно предсказать продолжит ли программа нестабильно работать и/или аварийно завершится. Эта проблема может быть частично решена путем использования умных указателей (англ. smart pointer), но такой подход сопряжен с увеличением сложности и накладных расходов. Не стоит забывать, что сбор мусора не мешает появлению «логических» утечек памяти, то есть ситуаций, когда остаются более не используемые ссылки/указатели.

Сбор мусора может произойти в любой момент. В идеале, это произойдёт, когда программа находится в режиме ожидания. Сбор мусора гарантированно срабатывает, когда при попытке выделить из кучи память для нового объекта, оказывается, что свободной памяти не хватает; это может привести к зависанию программы на время работы сборщика мусора. В Java нет возможности явного управления памятью.

Java не поддерживает арифметические операции с указателями в стиле С или С++, где адреса объектов могут быть заменены беззнаковыми числами (обычно типа long int). Это позволяет сборщику мусора перемещать объекты, на которые ссылаются ссылки и обеспечивать типобезопасность и безопасность в целом.

Так же как в C ++ и некоторых других объектно-ориентированные языках, значения переменных примитивных типов в Java хранятся непосредственно как часть объекта (в случае полей объекта) или в стеке (в случае локальных переменных), так же в стеке обычно хранятся локальные объекты метода (см. Escape-Analysis). Это осознанное решение разработчиков Java, принятое с целью повышения производительности.

В Java есть несколько типов сборщиков мусора. По умолчанию, виртуальная машина HotSpot использует сборщик мусора PS Scavenge. Тем не менее есть и другие, которые могут быть использованы для управления кучей. Для 90% приложений на Java достаточно сборщика мусора Concurrent Mark-Sweep. Oracle стремится заменить его на Garbage-first (G1).

Синтаксис

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

Примеры

Программа «Hello World!»

Традиционная программа «Hello World!», написанная на Java, может быть представлена в следующем виде:

Эффект от такого альтернативного объявления семантически идентичен (параметр args всё так же остается массивом объектов типа String ), но зато теперь есть альтернативный синтаксис создания и передачи массива в качестве параметра.

Строка «Hello World!» автоматически преобразуется в объект струнного компилятором.

Специальные классы

Апплеты

Оператор import дает компилятору Java указание импортировать классы javax.swing.JApplet и java.awt.Graphics при компиляции. Это позволяет ссылаться на эти классы в исходном коде с помощью простого имени класса (т.е. JApplet) вместо полного имени (т.е. javax.swing.JApplet).

Сервлеты

Метод объекта-ответа setContentType(String) вызывается для того чтобы установить MIME-тип «text/html» для возвращаемых данных. Метод getWriter() возвращает объект PrintWriter, который используется, для записи данных, которые передаются клиенту. Метод println(String) вызывается, чтобы написать «Hello, world!» в ответ на запрос, а затем вызывается метод сlose() объекта PrintWriter, что приводит к возврату всех данных, записанных в поток ответа, клиенту.

JavaServer Pages

Шаблоны в Java (generics)

В 2004 году шаблоны были добавлены в язык Java как часть J2SE 5.0. До их введения каждое объявление переменной должно было содержать тип этой переменной. Это являлось проблемой для контейнерных классов, так как не было простого способ создать контейнер, который принимает только объекты определенных типов. Либо контейнер принимал объекты всех классов, являющихся потомками некоторого базового класса (обычно класса Object) или интерфейса, либо для каждого класса нужно было создавать свой класс-контейнер. Шаблоны же позволяю проводить проверку типов во время компиляции, без необходимости создавать множество контейнерных классов, каждый из которых содержит практически один и тот же код. В дополнение к возможности писать код более эффективно, некоторые исключения времени выполнения преобразовались в ошибки времени компиляции, что известно как типобезопасность.

Критика

Источник

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

Язык для смарт устройств

На чем написан язык java. Смотреть фото На чем написан язык java. Смотреть картинку На чем написан язык java. Картинка про На чем написан язык java. Фото На чем написан язык javaЯзык Java имеет интересную и непростую историю создания и развития с начала 1990-х годов. Первоначально Java язык вовсе не предусматривался в качестве языка программирования для прикладного программного обеспечения.

Язык разрабатывался для программирования бытовых устройств. Создание языка Java тесно связано с именем James Arthur Gosling (Джеймс Артур Гослинг), которого часто называют «Доктор Ява», канадского ученого, известного как основателя и ведущего дизайнера языка Java.

Команда для разработки нового языка

Платформа и язык Java начинались как внутренний проект в Sun Microsystems в декабре 1990 года, предоставляя альтернативу языкам программирования C и C++. Инженер Patrick Naughton (Патрик Нотон, американский разработчик программного обеспечения) организовал команду, в которую входили Джеймс Гослинг (James Gosling), Майк Шеридан (Mike Sheridaп), Крис Уарт (Chris Warth) и Эд Франк (Ed Frank).

Команда начала работу над Green Project предусматривающим разработку операционной системы для электронных бытовых устройств. В разработке и развитии нового языка приняли участие немало других специалистов: Билл Джой (Bill Joy), Артур ван Хофф (Arthur van Hoff), Джонатан Пэйн (Jonathan Payne), Франк Йеллин (Frank Yellin) и Тим Линдхольм (Тlm Lindholm) которые внесли основной вклад в развитие исходного прототипа Java.

Поиск базы для нового языка

Первоначально команда рассматривала возможность использования модифицированного языка C++, но отклонила его по причинам требовательности к объемам памяти и высокой сложности. Отсутствие в С++ сборки мусора означало, что программистам приходилось вручную управлять системной памятью, сложной и подверженной ошибкам задачей. Тем более что они разрабатывали встроенную систему с ограниченными ресурсами. Наконец, они хотели получить платформу, которую будет легко портировать на любые типы устройств. Но все же синтаксис Java во многом заимствован из C и C ++, а объектно-ориентированные функции смоделированы на основе языков С++, Smalltalk and Objective-C.

Язык программирования Oak

Разработкой нового языка вплотную занимался Джеймс Гослинг и изначально назвал его Оak (в переводе с английского Дуб). Рядом с офисом разработчика действительно рос дуб. Наверное Джеймс, работая в офисе, поглядывал в окно и видя крепкий дуб, излучающий здоровье и долголетие, решил назвать новый язык в честь зеленого дерева. К лету 1992 года команда смогла продемонстрировать части новой платформы, включая операционную систему Green OS, язык Oak, библиотеки и аппаратное обеспечение.

Их первая попытка, продемонстрированная 3 сентября 1992 года, была сосредоточена на создании устройства PDA (Personal Digital Assistant, карманный компьютер) под названием Star7, которое имело графический интерфейс и смарт-агента под названием «Duke» для помощи пользователю. Карманный компьютер Star7 был принципиально новым устройством, которое намного опередило своё время, но из-за высокой стоимости не смогло произвести переворот в мире технологии и постепенно было забыто. Возможно, в настоящее время именно оно вернулось к нам в виде умных андроид устройств.

Происхождение названия Java

1994 году язык Oak был переименован в виду того, что название «Oak» уже использовалось как торговая марка компании Oak Technology (американская организация, поставщик электронных компонентов). Oak был переименован в Java, в честь марки кофе которое получило название одноименного острова Ява. Поэтому на официальной эмблеме изображена чашка с горячим кофе. Существует и другая версия происхождения названия языка, связанная с шутливым намеком на кофе-машину как пример бытового устройства, для программирования которых изначально язык и создавался. Наконец Java 1.0 была окончательно выпущена в 1996 году.

Предпосылки Java

До появления языка Java программистам, приходилось выбирать между языками, которые обеспечивали только узкий спектр характеристик. Первые языки программирования BASIC, COBOL и FORTRAN были разработаны без учета принципов структурирования. Структурированный язык Pascal не был предназначен для написания разнообразных программ. Язык С++ частично решал эти проблемы. Но трудность применения С и С++ состоит в том, что написанные на них программы должны компилироваться для конкретной платформы.

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

Концепции языка Java

Java и С++

Многие особенности Jаvа унаследованы от языков С и С++. Вместе с тем языку Java присущи значительные практические и концептуальные отличия. Хотя С++ оказал влияние на характеристики Jаvа, но всё же язык программирования Java не является усовершенствованной версией С++. Разумеется, у него немало сходств с языком С++, и в исходном коде программы на Java программист С++ будет чувствовать себя почти как дома.

Но есть и коренные отличия двух языков: программа на C++ компилируется только для конкретной среды выполнения, что делает C++ зависимым от платформы языком. В Java исходный код сначала преобразуется в байт-код во время компиляции. Этот байт-код затем интерпретируется интерпретатором и средой выполнения для создания выходных данных, которые делают Java независимым от платформы языком. Язык Jаvа предназначен не для замены С++, а для решения других задач, для которых язык С++ не годится.

Java и C#

Языки C# и Java появились в разное время. Язык Java был создан задолго до появления C#. Таким образом, если Java создавался, опираясь в большей степени на опыт языков Objective-C и C, С++, то для C# такой опорой уже являлись C++ и сам Java. И, несмотря на своё название, C# оказался ближе к Java, чем к C++.

С точки зрения разработчика языки Java и C# очень похожи. Оба языка являются строго типизированными, объектными. Оба языка опираются на сборку мусора. Оба языка сопровождаются богатыми коллекциями библиотек. Но есть в языках также свои особенности и различия. C# учёл многие недостатки Java, и исправил их в своей реализации. Но и Java не стоит на месте, развиваясь параллельно с C#.

Современный Java

В настоящее время язык и платформа Java активно развивается. 3 миллиарда устройств работают под управлением Java—дома, в автомобиле и офисе. 12 миллионов разработчиков Java по всему миру. Недавно было объявлено, что для Java будет использоваться шестимесячный цикл выпуска. Java сегодня успешна, потому что даже код, написанный 20 лет назад, совершенно точно работает.

Общий вывод получается таким: насчёт «самого популярного» языка можно спорить, но что Java «один из самых популярных» — безусловно.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Класс языка: