Применение средств языка Java для разработки игровых приложений в среде Eclipsе.
Оценка 4.6
Научно-исследовательская работа
docx
информатика
11 кл
16.11.2018
Данная работа посвящена одному из самых перспективных на сегодняшний день языков программирования – языку Java. Технологию по имени Java можно без преувеличения назвать революционной в индустрии разработки программного обеспечения. В чём же перспективность и революционность этой технологии? Современные приложения должны быть безопасны, высокопроизводительны, работать в распределенной среде, быть нейтральны к архитектуре.
Работа.docx
Введение
Данная работа посвящена одному из самых перспективных на сегодняшний
день языков программирования – языку Java. Технологию по имени Java можно
без преувеличения назвать революционной в индустрии разработки
программного обеспечения. В чём же перспективность и революционность этой
технологии?
Сегодня создание программного обеспечения представляет собой
чрезвычайно тяжелое занятие. Трудности связаны с разнообразием архитектур
машин, операционных систем, графических оболочек и т. д. Стремительный рост
технологий, связанных с сетью Internet, дополнительно усложняет эту задачу. К
сети Internet подключены компьютеры самых разных типов IBM PC, Macintosh,
рабочие станции Sun и другие. Даже в рамках IBMсовместимых компьютеров,
существует несколько платформ, например, MS Windows 9x/Me/XP/NT/2000,
OS/2, Solaris, различные разновидности операционной системы UNIX с
графической оболочкой XWindows и т. д. Все эти системы образуют единую
сеть, которая должна работать как одно целое, обеспечивая при этом высокий
уровень безопасности информации. Под влиянием указанных факторов резко
возрастает уровень требований, предъявляемый к программному обеспечению.
Современные
приложения
должны
быть
безопасны,
высокопроизводительны, работать в распределенной среде, быть нейтральны к
архитектуре. Все эти факторы привели к необходимости нового взгляда на сам
процесс создания и распределения приложений на множестве машин различной
архитектуры. Требования к переносимости заставили отказаться от
традиционного способа создания и доставки бинарных файлов, содержащих
машинные коды и, следовательно, привязанных к определенной платформе.
Созданная компанией Sun Microsystems система разработки Java удовлетворяет
всем этим требованиям. Java – объектноориентированный язык, удобный и
3 надёжный в эксплуатации благодаря таким своим достоинствам, как
многозадачность, поддержка протоколов Internet и многоплатформенность. Java
– это интерпретируемый язык, и каждая Javaпрограмма компилируется для
гипотетической машины, называемой Виртуальная Машина Java. Результатом
такой компиляции является байткод Java, который в свою очередь может
выполняться на любой операционной системе при условии наличия там системы
времени выполнения Java, которая интерпретирует байткод в реальный
машинный код конкретной системы.
Однако, такая универсальность данной технологии рождает недостаток –
требовательность к ресурсам компьютера. Так как Javaпрограммы не содержат
машинного кода и при их запуске включается в работу система времени
выполнения Java, их производительность заметно ниже, чем у обычных
программ, составленных, например, на языке программирования C++. Данный
недостаток становится с течением времени всё менее ощутим, в следствии роста
вычислительной мощности компьютерных систем.
Язык Java является объектноориентированным и поставляется с
достаточно объемной библиотекой классов. Библиотеки классов Java
значительно упрощают разработку приложений, предоставляя в распоряжение
пользователя мощные средства решения распространенных задач. Поэтому
можно больше внимания уделить решению прикладных задач, а не таких, как,
например, организация динамических массивов, взаимодействие с операционной
системой или реализация элементов пользовательского интерфейса [1].
Целью данной работы является ознакомление с описанием языка Java,
рассмотрение одной из лучших сред разработки программы Java Eclipse,
разработка игровых программ в данной среде, которые показывают все
вышеперечисленные достоинства этого языка.
4 Глава 1. Java
1.1 История создания.
Изначально язык назывался Oak («Дуб»), разрабатывался Джеймсом
Гослингом для программирования бытовых электронных устройств.
Впоследствии он был переименован в Java и стал использоваться для
написания клиентских приложений и серверного программного обеспечения.
Назван в честь марки кофе Java, которая, в свою очередь, получила
наименование одноимённого острова (Ява), поэтому на официальной эмблеме
языка изображена чашка с горячим кофе. Существует и другая версия
происхождения названия языка, связанная с аллюзией на кофемашину как
пример бытового устройства, для программирования которого изначально
язык создавался. В соответствии с этимологией в русскоязычной литературе с
конца двадцатого и до первых лет двадцать первого века название языка
нередко переводилось как Ява, а не транскрибировалось, как это стало
общепринятым позднее. [2]
1.2 Основные особенности языка
Программы на Java транслируются в байткод, выполняемый виртуальной
javaмашиной (JVM) — программой, обрабатывающей байтовый код и
передающей инструкции оборудованию как интерпретатор, но с тем отличием,
что байтовый код, в отличие от текста, обрабатывается значительно быстрее.
Достоинство подобного способа выполнения программ — в полной
независимости байткода от ОС и оборудования, что позволяет выполнять Java
приложения на любом устройстве, которое поддерживает виртуальную машину.
Приложения переносимы на многие платформы. Однажды написанное
приложение не придется модифицировать под другие платформы: оно будет
работать без какихлибо изменений на различных операционных системах и
5 аппаратных архитектурах. Java является объектноориентированным и
одновременно простым языком программирования.
Приложения надежны: Java контролирует обращения к памяти.
Приложения высокопроизводительны: несмотря на то, что язык Java
интерпретируемый, код Java программы оптимизируется до фазы исполнения.
Поддержка системы многопоточности позволяет создавать параллельно
исполняемые взаимодействующие легковесные процессы.
Приложения настраиваемы под изменяющееся окружение: возможна
динамическая загрузка программных модулей из любого места в сети.
Пользователи могут быть уверены в безопасности приложений, даже если в
них загружен программный код из любого места в Internet. Исполняющая система
Java имеет встроенную защиту от вирусов и попыток взлома.
1.3 Основные характеристики
Простота
Простота языка входит в ключевые характеристики Java: разработчик не
должен длительное время изучать язык, прежде чем он сможет на нем
программировать. Фундаментальные концепции языка Java быстро схватываются
и программисты с самого начала могут вести продуктивную работу.
Разработчиками Java было принято во внимание, что многие программисты
хорошо знакомы с языком С++, поэтому Java, насколько это возможно,
приближен к С++.
В Java не включены некоторые редко используемые, плохо понимаемые и
усложняющие работу возможности С++, которые приносят больше проблем, чем
преимуществ. Пришлось отказаться от перегрузки операторов (но перегрузка
методов в Java осталась), множественного наследования, автоматического
расширяющего приведения типов.
6 Добавилась автоматическая сборка мусора, упрощающая процесс
программирования, но несколько усложняющая систему в целом. В С и С++
управление памятью вызывало всегда массу проблем, теперь же об этом не
придется много заботиться.
Объектноориентированность
Язык Java с самого начала проектировался как объектноориентированный.
Задачам распределенных систем клиентсервер отвечает объектно
использование концепций инкапсуляции,
ориентированная парадигма:
наследования и полиморфизма. Java предоставляет ясную и действенную
объектноориентированную платформу разработки.
Программисты на Java могут использовать стандартные библиотеки
объектов, обеспечивающие работу с устройствами ввода/вывода, сетевые
функции, методы создания графических пользовательских интерфейсов.
Функциональность объектов этих библиотек может быть расширена.
Надежность
Платформа Java разработана для создания высоконадежного прикладного
программного обеспечения. Большое внимание уделено проверке программ на
этапе компиляции, за которой следует второй уровень динамическая проверка
(на этапе выполнения).
Модель управления памятью предельно проста: объекты создаются с
помощью оператора new. В Java, в отличие от С++, механизм указателей
исключает возможность прямой записи в память и порчи данных: при работе с
указателями операции строго типизированы, отсутствуют арифметические
операции над указателями. Работа с массивами находится под контролем
управляющей системы. Существует автоматическая сборка мусора.
7 Данная модель управления памятью исключает целый класс ошибок, так
часто возникающих у программистов на С и С++. Программы на Java можно
писать, будучи уверенным в том, что машина не "повиснет" изза ошибок при
работе с динамически выделенной памятью.
Безопасность
Java разработана для оперирования в распределенных средах, это означает,
что на первом плане должны стоять вопросы безопасности. Средства
безопасности, встроенные в язык, и система исполнения Java позволяют
создавать приложения, на которые невозможно "напасть" извне. В сетевых средах
приложения, написанные на Java, защищены от вторжения неавторизованного
кода, пытающегося внедрить вирус или разрушить файловую систему.
Независимость от архитектуры
Java разработан для поддержки приложений, внедряемых в гетерогенные
сетевые среды. В подобных средах приложения должны исполняться на
различных аппаратных архитектурах, под управлением различных операционных
систем и во взаимодействии с интерфейсами различных языков
программирования. Для обеспечения платформонезависимости программ
компилятор Java генерирует байткод архитектурнонейтральный
промежуточный формат программы, создаваемый для эффективной передачи
кода на различные аппаратные и программные платформы. При выполнении
программы байткод интерпретируется исполняющей машиной Java. Один и тот
же Javaбайткод будет исполняться на любой платформе.
Переносимость
Архитектурная независимость лишь составная часть переносимости. В
отличие от С или С++ в Java не существует понятия "зависимости от
8 реализации", когда речь идет о размерности базовых типов. Форматы типов
данных и операции над ними четко определены. Тем самым, программы остаются
неизменными на любой платформе не существует несовместимости типов
данных на аппаратных и программных архитектурах.
Архитектурная независимость и переносимость программного обеспечения
Java обеспечивается виртуальной машиной Java (Java Virtual Mashine JVM)
абстрактной машиной, для которой компилятор Java генерирует код.
Специальные реализации JVM для конкретных аппаратных и программных
платформ предоставляют уже конкретную виртуальную машину. JVM
базируется на стандарте интерфейса переносимых операционных систем
(POSIX).
Высокая производительность
Производительность всегда заслуживает особого внимания. Java достигает
высокой производительности благодаря специально оптимизированному байт
коду, легко переводимому в машинный код. Автоматическая сборка мусора
выполняется как фоновый поток с низким приоритетом, обеспечивая высокую
вероятность доступности требуемой памяти, что ведет к увеличению
производительности. Приложения, требующие больших вычислительных
ресурсов, могут быть спроектированы так, чтобы те части, которые требуют
интенсивных вычислений,
были написаны на языке ассемблера и
взаимодействовали с Java платформой. В основном, пользователи ощущают, что
приложения взаимодействуют быстро, несмотря на то, что они являются
интерпретируемыми.
Интерпретируемость
9 Javaинтерпретатор может выполнять Java байткод на любой машине, на
На
которой установлен интерпретатор и система выполнения.
интерпретирующей платформе фаза сборки программы является простой и
пошаговой, поэтому процесс разработки существенно ускоряется и упрощается,
отсутствуют традиционные трудные этапы компиляции, сборки, тестирования.
Многопоточность
Большинству современных сетевых приложений обычно необходимо
осуществлять несколько действий одновременно. В Java реализован механизм
поддержки легковесных процессовпотоков (нитей). Многопоточность Java
предоставляет средства создания приложений с множеством одновременно
активных потоков.
Для эффективной работы с потоками в Java реализован механизм
семафоров и средств синхронизации потоков: библиотека языка предоставляет
класс Thread, а система выполнения предоставляет средства диспетчеризации и
средства, реализующие семафоры. Важно, что работа параллельных потоков с
высокоуровневыми системными библиотеками Java не вызовет конфликтов:
функции, предоставляемые библиотеками, доступны любым выполняющимся
потокам.
Динамичность
По ряду соображений Java более динамичный язык, чем С++. Он был
разработан специально для подстройки под изменяющееся окружение. В то
время как компилятор Java на этапе компиляции и статических проверок не
допускает никаких отклонений, процесс сборки и выполнения сугубо
динамический. Классы связываются только тогда, когда в этом есть
необходимость. Новые программные модули могут подключаться из любых
10 источников, в том числе, поставляться по сети. В случае с браузером HotJava и
другими подобными приложениями интерактивный выполняемый код может
быть загружен откуда угодно, что позволяет производить прозрачные
модификации приложений. В результате возможно создание интерактивных
служб, безболезненно модифицируемых, обслуживающих большое количество
клиентов и обеспечивающих развитие электронного бизнеса через Internet.
1.4 Основные конструкции языка Java.
Своё обучение языку я начал с рассмотрения простейших программ. Так,
например, программа вывода текста:
Программа 1 . Простейшая программа.
1
2
public class Hello {
public static void main(String[] args) {
3
System.out.print("Добро пожаловать в мир Java!");
04
05 }
}
Данная программа выводит сообщение на консоль (или в командную
строку). Приводится описание класса с именем Hello в строке (01), в котором
имеется только один метод main()(02). При запуске программы управление
передается этому методу и сразу же происходит вывод сообщения на консоль.
На примере программы 2, я рассмотрел использование операторов
циклов For, While.
Программа 2 . Вычисление суммы и произведения последовательности
из 10 случайных чисел.
1
2
06
7
8
public class ForCycle {
public static void main(String[] args) {
3
4
5
int tmp = 0;
long tmp2 = 1;
System.out.print("Сумма\t\tПроизведение \n");
for(int i=0;i<10;i++){
tmp += (int)Math.round(Math.random()*10);
tmp2 = tmp2*tmp;
11 System.out.print(tmp+"\t\t"+tmp2+"\n");
9
10
}
}
11
12 }
Использование элементов организации ветвления в Java можно наблюдать
на примере программы 3.
Программа 3 . Вычисления числа Пи.
public class Pi {
static double pi;
static void leibnic(){
for(double i=1;i<100000000;i+=1){
if (i%2==0){
pi=1/(2*i1);
}else{
pi+=1/(2*i1);
}
}
pi*=4;
System.out.print("\nЧисло Пи, подсчитанное по методу
Лейбница равно: "+pi);
}
1
2
04
05
06
07
09
10
12
13
14
15
16
17
19
21
22
23
24
25
18
static void vallis(){
double pi1=1, pi2=1;
for(double i=2;i<100000000;i+=2)20
pi1*=i/(i+1);
pi2*=i/(i1);
}
pi=pi1*pi2*2;
System.out.print("\nЧисло Пи, подсчитанное по методу Валлиса
равно: "+pi);
}
26
27
28
public static void main(String[] args) {
leibnic();
vallis();
29
30 }
}
12 В данной программе описаны два метода нахождения числа Пи: метод
Лейбница (ряд Лейбница) и метод Валлиса (формула Валлиса).
В данной программе в строках 02 и 03 описываются static переменная
класса pi типа double. Расчеты методом Лейбница вызываются в строке 27
благодаря использованию имени метода leibnic(). Аналогично в строке 28
вызываем метод Валлиса vallis().
На примере других программ, которых в учебниках по обучению языку
программирования Java [3], большое количество, можно рассмотреть и
операторы циклов, и работу с массивами и многое другое.
Глава 2. Среда разработки приложений Eclipse.
Eclipse представляет собой интегрированную среду разработки (IDE,
Integrated Development Environment) с открытым исходным кодом.
Среда разработки Eclipse является мощным и универсальным
инструментом для создания и отладки программ на Java, а так же на многих
других языках. Использование интегрированной среды существенно упрощает
процесс разработки программ.
1.2 Системные требования
Eclipse разработана для широкого круга операционных систем, таких как
Linux, Microsoft Windows и Mac OS. Для ее запуска требуется JVM (Java Virtual
Machine) — виртуальная Javaмашина, а также JDK (Java Development Kit) —
набор для Javaразработки. Загрузить данные пакеты можно с официального
сайта разработчика Java — http://
java
. sun
. com.
В табл. 1 представлены минимальные и рекомендуемые системные
требования для работы Eclipse.
Требование
Версия Jаva
Минимальное
значение
1.4.0
Рекомендуемое
значение
1.6.0 и выше
Таблица 1
13 Оперативная память
Свободное
пространство на ЖД
Процессор
128 Мб
300 Мб
533 МГц
1 Гб и более
1 Гб и более
1,5 ГГц и более
1.3 Интерфейс пользователя
Рассмотрим подробнее назначение основных компонентов, составляющих
интерфейс пользователя. (см. Приложения, рис. 1)
Панель инструментов
Данная панель содержит кнопки быстрого доступа к наиболее часто
используемым функциям Eclipse. Кнопки по функциональному назначению
сгруппированы в группы. Первая группа — создание (проекта, пакета, класса,
интерфейса, перечисления и т.д), сохранение и печать относится к команде
File. Вторая группа — отладка, запуск и запуск с параметрами — относится к
команде Run. Третья группа — новый проект, новый пакет и новый Javaфайл
(класс, интерфейс, перечисление) — дублирует первую кнопку для
максимально быстрого доступа. Последняя, четвертая, группа содержит
кнопки, относящиеся к поиску и навигации.
Главное меню
Команд
а
меню
Fil
e
Назначение
Таблица 2
Содержит элементы управления проектами и файлами.
Позволяет создавать новые проекты, классы, интерфейсы и
пр., сохранять, закрывать, переносить, переименовывать,
экспортировать имеющиеся структуры проекта, а так же
импортировать внешние объекты, изменять местоположение
рабочего пространства и переключаться между раз личными
рабочими пространствами
14 Ed
it
Source
Refactor
Navigate
Search
Project
Ru
n
Window
Help
Содержит
элементы
текстовой
информацией: копирование, вырезание, вставка, удаление,
отмена последнего действия, возврат после отмены,
добавление закладок и заданий, а также поиск
управления
Содержит элементы управления исходным кодом, такие,
как:
управление импортом элементов,
управление
комментариями, генерацию методов и конструкторов классов
и т.д.
Рефакторинг элементов проекта. Помогает производить
модификации членов проекта (классов, методов и по лей),
такие, как перемещение, переименование и пр. без потери
связей и целостности приложения
Содержит элементы навигации по проекту
Основной инструмент поиска. Искать можно файлы,
проекты и текст в любом диапазоне от файла до рабочего
пространства
Инструмент управления проектами: открытие, закры
тие, компиляция, генерация javadoc и пр.
Управление запуском приложения, позволяет запустить
приложение, отладку, а также приложения по точкам
прерывания
Управление окнами и перспективами. Переключение
между компоновками. Вызов требуемых представлений.
Вызов справки, а также содержит вызов обновлений
и описание программы Eclipse
Окно браузера проекта предназначено для отображения структуры рабочего
пространства проекта и представляет собой иерархическую структуру
каталогов и файлов, входящих в проект.
Окна представлений.
Имеется 4 основных вкладки:
Problems — предназначена для отображения ошибок при компиляции, а также
во время написания программы;
Javadoc — отображение комментариев к выбранным объектам;
Declaration — отображение части кода, в котором происходит декларация
15 выбранного объекта;
Console — системная консоль, в которую происходит вывод данных
программы.
Перспективы (компоновки) .
Позволяют переключаться из одной компоновки в другую.
Редактор кода.
Предназначен для ввода и редактирования исходного текста программ Java.
Сообщения об ошибках
С помощью синтаксического контроля программы интерпретатором
Java выявляются конструкции (сочетание символов), недопустимые с точки
зрения правил их построения, принятых в Java. Поиск осуществляется в
автономном (фоновом) режиме, то есть в процессе написания кода
программы, без запуска приложения.
Проблемы сборки проекта отображаются в представлении Problems и
отмечаются (маркируются) в редакторе определенным образом с помощью
различных маркеров: графических значков, подчеркиваний, информации в
всплывающих информационных окнах и др.
В программах ошибки подразделяются на три основных типа:
синтаксические (компиляции), выполнения и логические. «Ошибочные» места
кода подчеркиваются волнистой красной линией.
Синтаксические ошибки обычно возникают изза неправильного набора
текста программы на клавиатуре: пропуск запятых, точек с запятой в конце
оператора, пропуск скобок в методе, классе, незакрытые кавычки и другие
неверно использованные синтаксические конструкции языка. Для поиска и
устранения таких ошибок в арсенале Eclipse используется широкий набор
программных средств: маркера, помощники в создании кода, дополнения и
т.п.
16 Ошибки выполнения возникают в тех случаях, когда синтаксически
правильная программа совершает какоелибо неверное действие в процессе
своего исполнения. Например, ситуация — попытка деления на ноль,
обработка отсутствующих данных, обращение к индексу массива, значение
которого выходит за допустимые границы и т.д. Эти ошибки можно
обнаружить только в процессе выполнения программы. Компилятор выдает
сообщение в ходе работы программы, если ошибка обработана или распознана
внутренними средствами.
Логические ошибки не приводят к прекращению выполнения программы
в Eclipse. Информацию о них можно получить только после выполнения
программы по неправильным результатам решения задачи. Логические
ошибки являются следствием неправильного алгоритма программы, и среда
разработки тут мало может помочь. Требуется вернуться на этап
проектирования алгоритма, проверить его правильность и только затем
приступить к исправлению.
Далее мы остановимся главным образом на устранении синтаксических
ошибок и рассмотрим на примерах возможные способы и средства их
устранения, предоставляемые Eclipse.
Если кликнуть мышью на строку с ошибкой, Eclipse откроет или сделает
активным окно кода файла класса и выделит в коде «проблемное» место:
метод, модификатор, тип, поле и т.д., которое вызывает ошибку компиляции.
Рис. 2. Создание ошибки
Волнистые линии могут появится под словом или символом, являющимся
17 причиной ошибки.
Рис. 3. Отображение ошибок
Если навести курсор на маркер в вертикальной линейке для отображения
описания ошибки (рис. 4), то появится подсказка с правильным написанием
команды (описание ошибки).
Рис. 4. Комментарий к ошибке
Если в представлении Problems, выбрать проблему из списка, то открыв
его в контекстном меню и выбрав «Go To» (рис. 5), файл откроется в редакторе
на проблемном месте.
18 Рис. 5. Быстрый переход к ошибке
Щелкнув на проблемное место, и выбрав Quick Fix из пункта Edit строки
меню, мы так же можем нажать клавиши Ctrl+1 или щелкнуть левой кнопкой
мыши на лампочке, отобразится диалог с возможными вариантами исправлений
(рис. 6).
Рис. 6. Возможности QuickFix
19 Заключение.
Таким образом Java это:
универсальный сетевой инструмент для создания сетевых
приложений
сетевые приложения исполняемые на любой платформе без
модификаций
приложения состоящие из applets загружаемых из любой точки сети
возможность создания миллионов персонализированных приложений.
Если описанные в работе характеристики рассматривать по отдельности,
то их можно найти во многих программных платформах. Радикальное новшество
заключается в способе, предлагаемом Java и системой выполнения, который
сочетает в себе все характеристики для предоставления гибкой и мощной
системы программирования.
Разработка приложений на Java приводит к получению программного
обеспечения, которое:
1. переносимо на разные архитектуры, операционные системы и
графические пользовательские интерфейсы
2. безопасно
3. высокопроизводительно.
Благодаря Java работа по разработке программного обеспечения
значительно упрощается, все старания направлены на достижение конечной цели:
вовремя получить передовой продукт, опирающийся на солидную основу Java.
Работа с Eclipse это обширная тема, и она, в основном, выходит за рамки
20 данной работы. Здесь же мы рассмотрели только самое необходимое для
знакомства с работой среды Eclipse и ее использованием для Javaразработки.
Eclipse это неограниченно настраиваемая среда.
«Писать Javaкод относительно не сложно. Писать хороший Javaкод это
мастерство. Стремитесь стать мастером». (Фаулер)
21
Применение средств языка Java для разработки игровых приложений в среде Eclipsе.
Применение средств языка Java для разработки игровых приложений в среде Eclipsе.
Применение средств языка Java для разработки игровых приложений в среде Eclipsе.
Применение средств языка Java для разработки игровых приложений в среде Eclipsе.
Применение средств языка Java для разработки игровых приложений в среде Eclipsе.
Применение средств языка Java для разработки игровых приложений в среде Eclipsе.
Применение средств языка Java для разработки игровых приложений в среде Eclipsе.
Применение средств языка Java для разработки игровых приложений в среде Eclipsе.
Применение средств языка Java для разработки игровых приложений в среде Eclipsе.
Применение средств языка Java для разработки игровых приложений в среде Eclipsе.
Применение средств языка Java для разработки игровых приложений в среде Eclipsе.
Применение средств языка Java для разработки игровых приложений в среде Eclipsе.
Применение средств языка Java для разработки игровых приложений в среде Eclipsе.
Применение средств языка Java для разработки игровых приложений в среде Eclipsе.
Применение средств языка Java для разработки игровых приложений в среде Eclipsе.
Применение средств языка Java для разработки игровых приложений в среде Eclipsе.
Применение средств языка Java для разработки игровых приложений в среде Eclipsе.
Применение средств языка Java для разработки игровых приложений в среде Eclipsе.
Применение средств языка Java для разработки игровых приложений в среде Eclipsе.
Материалы на данной страницы взяты из открытых истончиков либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.