Разработка интерактивного учебного комплекса по Java на основе web-технологий

Сущность интерактивных учебных комплексов, определение портрета пользователя. Программирование интерфейса, разработка структуры комплекса. Внедрение системы и разработка руководства пользователя. Вид комплекса для неавторизированного пользователя.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 04.07.2018
Размер файла 4,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Рисунок 16 - Вопросы по собеседованию для темы исключения

Для раздела собеседований необходимо, чтобы правильный ответ на вопрос не отображался сразу, тем самым давая обучающемуся возможность подумать над правильным ответом. С этой целью используется не стандартный тег HTML, а один из тегов Joomla - spoiler, скрывающий информацию. Пример включения тега spoiler в код, приведён ниже и в приложении 2:

{spoiler title= Answer3} Здесь размещается текст в тегах HTML правильного ответа на вопрос 3.{/spoiler}

Вид свёрнутого и развёрнутого тега спойлер представлены на рисунках 17 и 18.

Рисунок 17 - Спойлер в свёрнутом виде

Рисунок 18 - Спойлер в развёрнутом виде

2.4 Разработка базы данных

Для реализации работы комплекса необходимо сохранять данные о прохождении курса пользователем, т.е. о результатах тестов, на основании которых формируется информация для статистики. Для этого раздела так же потребовались изменения в существующей базе данных, добавление таблиц для более удобного вывода информации. В связи с этим, были внесены изменения в БД, с которой взаимодействует CMS. Существующие таблицы, необходимые для взаимодействия с новыми, а так же новые таблицы приведены в схеме на рисунке ниже:

Рисунок 19 - Схема Базы данных

В данной схеме содержится 6 таблиц, две из них - предоставляется CMS, ещё две - плагином для тестирования, оставшиеся две разработаны самостоятельно. Следует отметить, что в таблицах, которые созданы средствами системы управления содержимым или расширениями к ней, приведена лишь часть полей, наиболее важная для рассматриваемой схемы.

Таблица jos_users - содержит информацию о пользователе. Включает в себя следующие основные поля:

· id - уникальный идентификатор пользователя.

· name - имя пользователя на сайте.

· username - логин пользователя для авторизации.

· email - почта пользователя для регистрации.

· password - пароль пользователя.

Таблица jos_content - содержит информацию о просмотренных материалах курса, т.е. лекциях. Основные поля:

· id - уникальный идентификатор материала.

· title - наименование лекции.

· introtest - содержание лекции

· state - статус лекции

Таблица jos_jr_thb_test - содержит информацию конкретном тесте. Основные поля таблицы:

· id - уникальный идентификатор теста.

· test_category - категория теста. Тесты по лекциям объединены в категорию "Тесты по лекциям", остальные - "Общие".

· test_name - наименование теста. Отображается на форме каждого конкретного теста.

· test_time - время прохождения теста, указывается в минутах.

Таблица jos_jr_thb_result - содержит информацию о конкретной попытке прохождения выбранного теста. Основные поля:

· id - уникальный идентификатор результата

· result_user - уникальный идентификатор пользователя, который проходил тест.

· result_test - уникальный идентификатор теста, который проходил обучающийся.

· result_point - баллы, которые пользователь должен набрать для успешного прохождения теста.

· result_points - баллы, которые набрал обучающийся в данной попытке.

· result_time- время прохождения теста пользователем, указывается в секундах.

· result_question - вопросы теста. Указывается в формате : всего вопросов - правильных ответов на вопросы.

· result_answer - ответы теста. Указывается в формате вопрос - список ответов, номер ответа для каждого выбранного, 0 -если вариант не выбран.

Данная таблица имеет взаимосвязь много к одному с таблицами jos_jr_thb_test и jos_users. Это обозначает, что каждый тест может быть повторно пройден множество раз пользователем.

Вышерассмотренные таблицы не являлись разработанными самостоятельно. Для раздела статистики были разработаны следующие таблицы:

Таблица jos_statistic_for_test- содержит информацию об успехе прохождения каждого отдельного теста конкретным пользователем. Основные поля:

· id - уникальный идентификатор статистики теста.

· test_id- уникальный идентификатор теста, который проходил обучающийся.

· user_id - уникальный идентификатор пользователя.

· count_success- количество успешных попыток прохождения теста.

· count_failed - количество неуспешных попыток прохождения теста.

· success_rate - процент успеха прохождения теста. Вычисляемое поле. Считается как count_success/ count_success+ count_ failed.

Данная таблица имеет взаимосвязь один к одному с таблицей jos_jr_thb_result. Что обозначает, что для каждого конкретного теста есть только одна конкретная статистика для обучающегося.

Таблица jos_lection_show - представляет собой таблицу связку просмотренных пользователем лекций. Основные поля таблицы:

· user_id- уникальный идентификатор обучающегося.

· lection_id- идентификатор лекции.

· count - количество просмотров лекции.

Данная таблица имеет взаимосвязь много к одному с таблицами jos_content и jos_users.

3. НАСТРОЙКА, ОТЛАДКА, ТЕСТИРОВАНИЕ

3.1 Настройка комплекса

Для развёртывания интерактивного учебного комплекса на базе веб - технологий необходимо удовлетворить следующие требования, которая предъявляет CMS Joomla с версии 3.x [4].

Рисунок 20 - Требования CSM Joomla

Установку и настройку интерактивного учебного комплекса можно произвести двумя путями:

1. На локальном компьютере.

2. На домене второго уровня.

При развёртывании на локальном компьютере, администратору необходимо установить всё необходимое программное обеспечение, приведённое в таблице. Наиболее удобным вариантам является установка локального веб - сервера, например OpenServer или Denver, который в себе уже содержит необходимые программы, до скачивания нужно проверить, удовлетворяет ли программа минимальным требованиям, это можно сделать на сайте или после установки соответствующего программного обеспечения. OpenServer поддерживает необходимые минимальные требования, сам же предъявляет следующие требования: операционная система не ниже Windows 7, память: 500 Мб RAM и 3 Гб HDD, а так же требуется наличие Microsoft Visual C++ минимум 2005 года [11].

После установки нужно поднять сервер, и создать базу данных, к которой будет подключаться пользователь. Для этого необходимо в адресной строке браузера ввести http://localhost:8080, после чего перейти в phpMyAdmin, и создать базу данных, с которой будет работать CMS Joomla и пользователя для работы с базой данных. Имя базы данных, логин и пароль для входа следует сообщить до портирования с целью настройки БД. Настройку можно производить вручную, как это делается будет описано далее. При создании таблицы в глобальных привилегиях важно выбрать "Отметить все".

Установка CMS. Необходимо с официального сайта Joomla скачать версию 3.8.6. - именно на базе этой версии функционирует комплекс. После загрузки всех файлов необходимо извлечь содержимое архива в папку OpenServer/localhost/www.

При следующем обращении к localhost в адресной строке браузера должна появится панель установки Joomla. Важная часть установки CMS - конфигурация базы данных. На localhost это выглядит так, как представлено на рисунке 21. Очень важно задать префикс таблиц как jos_. После установки необходимо проверить работоспособность сайта. Должен быть доступ в административную панель и на сам сайт.

Рисунок 21 - Конфигурация БД

Для развёртывания на домене второго уровня соблюдение минимальных требований к конфигурации и предоставление доступа к серверу/домену обеспечивается хостинг - провайдером. После покупки доменного имени необходимо войти в панель для настройки конфигурации. В большинстве случаев, это буде ISPManager. Для установки Joomla необходимо выбрать пункт каталог веб-скриптов и выбрать её нужной или имеющейся версии. В случае, если в списке веб-скриптов данная CMS не предлагается, необходимо обратиться к хостинг - провайдеру. Настроить базу данных необходимо точно так же, как и для случая развёртывания на локальном компьютере. Может возникнуть ситуация, что версия Joomla не удовлетворяет необходимой. В большинстве случаев, её версия ниже необходимой. В этой ситуации следует самостоятельно обновить Joomla до нужной версии с помощью панели администрирования выбрав раздел Обслуживание в меню слева. Данный вариант использовался при разработке ВКР.

Для дальнейшей установки комплекса в зависимости от выбранного варианта необходимо перейти в папку, куда была установлена Joomla. В случае покупки домена второго уровня, надо войти в ISPManager перейти в менеджер файлов, далее в каталог www/ваш доме 2 уровня, куда установлена joomla/. И туда извлечь архив с файлами ИУК, заменив существующие файлы. Тоже самое необходимо проделать для базы данных. Делается это следующим образом: необходимо зайти в раздел создания резервных копий базы данных панели управления и выбираем пункт «Загрузить резервную копию». Жмем на кнопку «Выберите файл», выбираем файл БД и загружаем его. После всего этого необходимо либо предварительно попросить отредактировать файл для базы данных, либо сделать это самостоятельно по следующей схеме:

Необходимо изменить конфигурационный файл Joomla Он располагается в корневой директории ИУК и называется configuration.php. Необходимо его скачать(можно извлечь из архива до распаковки) Изменить необходимо следующие 3 строки:

public $user = '';

public $password = '';

public $db = '';

В первой сточке указываем имя пользователя базы данных, во второй - пароль от базы данных, в третьей - ее имя. После редактирования необходимо сохранить файл и загрузить к остальным файлам в директорию www/ваш доме 2 уровня, куда установлена Joomla/. Этим действием завершается установка ИУК. Для проверки работоспособности так же необходимо зайти в административную панель или на сам сайт.

После этого необходимо осуществить настройку ИУК через Панель управления CMS Joomla в разделе общие настройки, которые представлен ниже:

Рисунок 22 - Настройки ИУК

Переход к данному разделу возможен из меню Система - Общие настройки.

Обязательными для корректной работоспособности являются: Сайт выключен (offline) - в случае, если данная функция выбрана, комплекс не доступен другим пользователям, поэтому важно, чтобы выбранное значение было "Нет".

Данный раздел предоставляет широкие возможности настройки интерактивного учебного комплекса. Наиболее интересными, помимо общих настроек, являются так же настройки пользователя, перейти к которым можно с помощью меню слева с рисунка 20 выбрав раздел "Пользователи".

Рисунок 23 - Настройки пользователя

Обязательными настройками в этом разделе являются:

1. Разрешить регистрацию пользователей. В случае, если выбрано значение "Нет" обучающиеся не смогут проходить курс, т.к. он доступен только для зарегистрированных пользователей.

2. Активация нового пользователя. В случае, если выбрано значение "Нет", то после регистрации курс будет доступен пользователю сразу, однако, пользователь сможет ввести несуществующую почту и в случае возникновения проблем, с ним будет сложно связаться. Если выбрано значение "Администратором" - то администратор должен отдельно активировать каждого пользователя, что неудобно как для самого администратора, так и для пользователя, который не сможет мгновенно приступить к обучению. Оптимальный вариант - "Самостоятельно", тогда пользователю приходит письмо на электронную почту, с необходимостью подтверждения регистрации.

3. Так же важно, чтобы группа пользователей для Гостей оставалась Guest, чтобы не было доступа к лишним разделам с информацией.

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

Раздел тестирования тоже необходимо настроить. Окно представлено ниже:

Рисунок 24 - Настройки раздела тестирование

Обязательными настройками в этом разделе являются:

1. Срок хранения результатов пользователя - значение 0 обозначает хранение результатов всегда, изменять его нельзя т.к. иначе не гарантируется корректная работа раздела статистика

2. Срок хранения незавершённых тестов - аналогично с вышеприведённым разделом

3. Показать результат- необходим для понимания пользователем успешности прохождения того или иного теста курса.

3.2 Тестирование и отладка

3.2.1 Методы тестирования

Интерактивный учебный комплекс тестируется при помощи двух видов тестирования:

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

а) Корректность отображения всех страниц

б) Тестирование форм регистрации

в) Проверка работоспособности навигации

г) Проверка модулей прохождения тестов и статистики

2. Usability тестирование - проводится с целью оценки удобства продукта в использовании. Для этого метода были привлечены обучающиеся, удовлетворяющие профилю пользователя из раздела 1.6, которые и оценивали удобство использования.

3.2.2 Результаты тестирования

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

а) Корректность отображения всех страниц - проблем выявлено не было, все страницы отображались корректно

б) Тестирование форм регистрации - проблем с работоспособностью формы выявлено не было

в) Проверка работоспособности навигации - в навигации были перепутаны кнопки назад и вперёд, переводящие в следующую лекцию, вместо предыдущей и наоборот. Проблема была найдена и исправлена.

г) Проверка модулей прохождения тестов и статистики - были выявлены мелкие недочёты в компоненте статистики, которые были исправлены.

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

Таблица 2 - Замечания пользователей и предлагаемое решение

Замечание

Решение

Отправка пароля пользователя по почте. Это может быть небезопасно и считается плохой практики

Изменена настройка "Отсылать пароль",новое значение - "Нет" из раздела настроек пользователя с рисунка 15.

При наведении на разделы "Лекции", "Тесты", "Для собеседования" меню отображается лишь после выбора и наведения, а не сразу после наведения.

Была изменена настройка Меню из основных параметров "Показывать подпункты меню" новое значение - "Да"

Опечатка, орфографическая или пунктуационная ошибка в лекции №N в слове X.

Исправлены опечатки, орфографические ошибки или ошибки в пунктуации в соответствующих лекциях.

4. ВНЕДРЕНИЕ СИСТЕМЫ И РАЗРАБОТКА РУКОВОДСТВА ПОЛЬЗОВАТЕЛЯ

4.1 Разработка руководства пользователя

Руководство пользователя представлено в разделе сайта Помощь, который доступен для всех пользователей. Внешний вид раздела представлен на рисунке ниже:

Рисунок 25 - Руководство пользователя

В руководстве пользователя описываются все разделы сайта, подробнее рассматривается процесс регистрации, а так же работа с основными разделами комплекса: "Лекции", "Тесты", "Для собеседования". Руководство пользователя включает в себя множество иллюстраций, чтобы пользователю было легче сориентироваться при работе с ИУК, для процесса регистрации руководство рассматривает как успешные сценарии, так и неуспешные. Информации, приведённой в руководстве, достаточно для освоения основ работы с интерактивным учебным комплексом.

4.2 Внедрение

Для внедрения комплекс был сконфигурирован в соответствии с разделом настроек, в частности, была выключена настройка "Сайт выключен (offline)". После этих изменений комплекс стал полностью доступен для обучения, соответственно, успешно внедрен.

ЗАКЛЮЧЕНИЕ

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. GeekBrains[Электронный ресурс]: офиц. сайт - Режим доступа: https://geekbrains.ru/

2. JavaRush [Электронный ресурс]: офиц. сайт - Режим доступа: https://javarush.ru/

3. WordPress [Электронный ресурс]: офиц. сайт. - Режим доступа: https://ru.wordpress.org/

4. Joomlaportal [Электронный ресурс]: офиц. сайт. - Режим доступа: https://joomlaportal.ru/

5. Drupal [Электронный ресурс]: офиц. сайт. - Режим доступа: https://www.drupal.org/

6. Брюс Эккель Философия Java/ Брюс Эккель - Санкт - Петербург: Питер,2009 - 640 с.

7. Берт Бейтс Изучаем Java/Кэти Сиерра, Берт Бейтс - Санкт - Петербург : Эксмо, 2017 - 720 с.

8. Joshua B. Effective Java /B. Joshua. - Москва: КНОРУС, 2015 - 369 c.

9. Учебник программирования на Java [Электронный ресурс]: офиц. сайт. - Режим доступа: https://java9.ru/

10. Java- учебник [Электронный ресурс]: офиц. сайт. - Режим доступа: http://www.java-study.ru/java-uchebnik.html

11. OpenServer [Электронный ресурс]: офиц. сайт. - Режим доступа: https://ospanel.io/

ПРИЛОЖЕНИЕ 1

Структурная схема ИУК.

Верхнеуровневая структура:

Подробная структура разделов :Лекции, Тесты, Для Собеседования

ПРИЛОЖЕНИЕ 2

Пример вёртски страницы лекций комплекса.

<h2>О переменных</h2>

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

Переменная -- это именованная область памяти, куда может быть как записано, так и перезаписано и откуда может быть прочитано значение определенного типа. При создании переменной задаётся как её тип, так и значение, они не могут быть изменены далее по ходу программы.</p>

<p>

Так же важным является понятие имени или идентификатора переменной.Имя переменной - последовательность символов, которая может включать в себя заглавные и строчные латинских буквы, цифры, а также символов «$» и «_». Идентификатор переменной может начинаться с любого из вышеперечисленных символов, за исключением цифры.

</p>

<br>

<p>Вы задаётесь вопросом :" А как же объявить переменную?" Ниже приведён ответ на этот вопрос. ОБщая форма объявления:</p>

<br>

<p>тип данных переменная [ = значение], [переменная [= значение], ...] ;</p>

<p>Чтобы объявить более чем одну переменную указанного типа, можно использовать список с запятыми в качестве разделителей.</p>

<br>

<p>Ниже приведены примеры объявления переменной и инициализации в Java:</p>

<br>

<p>int m, n; // Объявление двух целых m и n/<p>

<p>int k = 10, c = 10; // Пример инициализации.</p>

<p>double pi = 3.14159; // Объявление и присвоение величины пи.</p>

<p>byte b = 22; // Инициализация переменной b типа byte.</p>

<p>char c = 'c'; // Переменной c типа char присваивается значение 'c'.</p>

<br>

<p>Язык Java чувствителен к регистру символов в идентификаторах, т.е. идентификаторы Mira, mira и mIRa -- в Java различны. Внутри одного блока не может существовать несколько элементов с одинаковыми идентификаторами</p>

<p>В Java используются как примитивные типы данных, так и ссылочные:</p>

<hr class="system-pagebreak" title="Примитивные типы" />

<h2>Примитивные типы:</h2>

<br>

<il>

<li>Целочисленные</li>

<li>Вещественные</li>

<li>Логические</li>

<li>Строковые</li>

<li>Примитивные</li>

</il>

<br>

<h3>Целочисленные данные - byte, short, int, long</h3>

<br>

<table border=1 align = "center" cellspacing=0 width=90%>

<tr><td><b>Тип данных</td><td><b>Объём памяти</td><td><b>Диапазон значений</td></tr>

<tr><td>byte</td><td>1 байт</td><td>-128...127 (-27... 27)</td></tr>

<tr><td>short</td><td>2 байта</td><td>-32 768...32 767 (-215... 215)</td></tr>

<tr><td>int</td><td>4 байта</td><td>-128...127 (-27... 27)</td></tr>

<tr><td>long</td><td>8 байт</td><td>-9 223 372 036 854 775 808 .. 9 223 372 036 854 775 807 (-263... 263)</td></tr>

</table>

</br>

<p>Пример применения целочисленных данных java - byte, short, int, long приведён под спойлером. Попробуйте написать сами, а затем лишь посмотрите. </p>

{spoiler title= Primer1}<p>public class Test</p>

<p>{</p>

<p> &nbsp; public static void main (String [] arg)</p>

<p>&nbsp; {</p>

<p> &nbsp;&nbsp; int integ = 47+ 1;</p>

<p> &nbsp;&nbsp; byte b = -128 + 127;</p>

<p> &nbsp;&nbsp; short srt = 2223 + 3;</p>

<p> &nbsp;&nbsp; long lng = 473+11436113;</p>

<p> &nbsp;&nbsp; System.out.println (integ);</p>

<p> &nbsp;&nbsp; System.out.println (b);</p>

<p> &nbsp;&nbsp; System.out.println (srt);</p>

<p> &nbsp;&nbsp; System.out.println (lng);</p>

<p> &nbsp; }</p>

<p>}</p>{/spoiler}

<h3>Вещественные типы данных - float, double</h3>

</br>

<table border=1 align = "center" cellspacing=0 width=90%>

<tr><td><b>Тип данных</td><td><b>Объём памяти</td><td><b>Диапазон значений</td></tr>

<tr><td>float</td><td>4 байта</td><td>~1,4*10-45...~3,4*1038</td></tr>

<tr><td>double</td><td>8 байт</td><td>-~4,9*10-324... ~1,8*10308</td></tr>

</table>

</br>

<p>Пример применения вещественных типов данных java - float, double приведён ниже под спойлером</p>

{spoiler title= Primer2}public class DoubleFloat

<p>{

<p> &nbsp; public static void main (String [] arg)</p>

<p> &nbsp; {</p>

<p> &nbsp;&nbsp; double d1 = 7.53; </p>

<p> &nbsp;&nbsp; double d2 = 1.78 + d1;</p>

<p> &nbsp;&nbsp; float pi = 3.14f;</p>

<p> &nbsp;&nbsp; // При использовании типа float необходимо использовать приведение типа,</p>

<p> &nbsp;&nbsp; // так как дробные числа - это литералы типа double</p>

<p> &nbsp;&nbsp; double con = d1 * pi;</p>

<p>&nbsp;&nbsp; System.out.println (con);</p>

<p> &nbsp; }</p>

<p>}</p>

{/spoiler}

<h3>Логический тип данных</h3>

<br>

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

<br>

<h3>Символьный тип данных - char</h3>

<br>

Для хранения символов в Java используется тип char размером 2 байта (16 бит). Диапазон значений варьируется от 0 до 65536.

</br>

<h3>Литералы java</h3>

</br>

<p>Литералы -- это константы, которые записаны по правилам языка Java. Приведём примеры литералов в соответствии с типом<p>

</br>

<h5>Целочисленные литералы</h5>

</br>

<table border=1 align = "center" cellspacing=0 >

<col width=10% valign="top">

<col width=90% valign="top">

<tr><td><b>Пример</td><td><b>Что значит</td></tr>

<tr><td>2</td><td>литерал типа int</td></tr>

<tr><td>010 </td><td>литерал типа int заданный в восьмеричной системе счисления, признак её использования - нуль в начале числа, в десятеричной системе это будет число 8 </td></tr>

<tr><td>0x10 </td><td> литерал типа int заданный в шестнадцатеричной системе счисления, признак её использования - 0x в начале числа, в десятеричной системе это будет число 16 </td></tr>

<tr><td>3L </td><td>литерал типа long, можно использовать строчную букву l</td></tr>

</table>

</br>

<h5>Вещественные литералы </h5>

</br>

<table border=1 align = "center" cellspacing=0 >

<col width=10% valign="top">

<col width=90% valign="top">

<tr><td><b>Пример</td><td><b>Что значит</td></tr>

<tr><td>8.3</td><td>литерал типа double</td></tr>

<tr><td>7e9</td><td>литерал типа double, записанный в научной нотации, число после e надо воспринимать как показатель степени десятки, на которую умножается число указанное до e, т.е. в данном случае записано число 7*10^9 = 7000000000. Степень числа может быть как положительной, так и отрицательной</td></tr>

<tr><td>5D </td><td>литерал типа double, можно использовать строчную букву d</td></tr>

<tr><td>9F</td><td>литерал типа float, можно использовать строчную букву f</td></tr>

<tr><td>4e-2f </td><td>литерал типа float, численно равен 0.04</td></tr>

</table>

</br>

<h5>Логические литералы </h5>

</br>

<p>Пример: true // литерал типа boolean </p>

</br>

<h5>Символьные и строковые литералы </h5>

</br>

<table border=1 align = "center" cellspacing=0 >

<col width=10% valign="top">

<col width=90% valign="top">

<tr><td><b>Пример</td><td><b>Что значит</td></tr>

<tr><td>'c' </td><td> литерал типа char -- печатный символ, задаётся в одинарных кавычках</td></tr>

<tr><td>'\n'</td><td>литерал типа char -- относится к специальным символам, которые не отображаются в виде какого-либо значка на экране, но при этом форматированием символа или его выводом, например, данный символ переносит следующий за ним текст на новую строку</td></tr>

<tr><td>'\u004D</td><td> литерал типа char заданный своим кодом в шестнадцатеричной системе счисления по кодовой таблице Unicode, данный код соответствует букве «M»</td></tr>

<tr><td>"Енот"</td><td>// литерал класса String -- строка символов, задаётся в двойных кавычках, может содержать любые литералы типа char. Строка может быть пустой, а так же состоять из всего одного символа</td></tr>

</table>

</br>

<hr class="system-pagebreak" title="Ссылочные типы" />

<h2>Ссылочные типы:</h2>

<p>Ссылочные типы - это все остальные типы данных, существующих в Java, за исключением примитивным. К ссылочным типам данных относятся:строки, классы, перечисления и интерфейсы, например, объявленные в стандартной библиотеке Java, а также массивы.</p>

<p>В данном разделе будут подробно рассмотрены строки, перечисления,массивы</p>

<h3>Строки</h3>

<p>Строки -- представляют собой последовательность символов. Строки в Java широко используются и являются объектами.</p>

<p>Платформа Java предоставляет класс строк (class String) для создания и работы со строками.</p>

<p>Наиболее простой способ создать строку:</p>

<p>String hello = "Hello world";</p>

<p>После каждого раза, когда компилятор встречает строковый литерал в коде, он создает строковый объект (String) c инициализируемым значением.</p>

<p>Для создания строк можно использовать как ключевое слово new, так и конструктор. Класс строк имеет одиннадцать конструкторов, которые позволяют обеспечить начальное значение строки, используя различные источники, таких как массив символов.</p>

<p>Пример кода:</p>

<p>public class Test {</p>

<p>&nbsp; public static void main(String args[]){</p>

<p>&nbsp;&nbsp; char[] helloArray = { 'П', 'р', 'и', 'в', 'е', 'т', '.'};</p>

<p>&nbsp;&nbsp; String helloString = new String(helloArray); </p>

<p>&nbsp;&nbsp; System.out.println(helloString);</p>

<p>&nbsp; }</p>

<p>}</p>

</br>

<p>Какой результат выведет программа? Правильный ответ написан под серой плашкой.</p>

{spoiler title= Result}Привет.{/spoiler}

<p>Примечание: Класс строк является неизменяемым, так что как только он будет создан, строковый объект не может быть изменен. Если есть необходимость сделать много изменений в строке символов, следует использовать классы строки буфера (String Buffer) и построитель строки (String Builder Classes).</p>

</br>

<p>Длина строки</p>

<p>Методы, используемые для получения информации об объекте, известны как методы доступа. Один из методов доступа, который можно использовать со строками является метод length(), он возвращает количество символов, содержащихся в строковом объекте.</p>

</br>

<p>Объединение строк в Java</p>

<p>Класс строк включает метод для объединения двух строк:

string1.concat(string2);</p>

<p>Возвращает новую строку string1, с добавленной строкой string2 в конце. Вы также можете использовать метод concat() со строковыми литералами:</p>

</br>

<p>"Меня зовут ".concat("Настя");</p>

<p>Чаще строки объединяют оператором +:</p>

</br>

<p>"Чёрный," + " кот" + "!"

Что приводит к: Чёрный кот!</p>

<p>Правило конкатенации. Соединение строк + осуществляется быстрее всего, если строки заданы литералами, константами. В случае,если же строки инициализируются во время выполнения программы использование + не рекомендуется</p>

</br>

<p>Создание формата строк</p>

<p>Класс строк в Java обладает методом format(), который возвращает строковый объект, а не потоковый объект (PrintStream).Использование строкового статического метода format() позволяет создавать строку нужного формата, который можно использовать повторно, в отличие от одноразовых операторов print. Пример:</p>

<p>String fs;</p>

<p>fs = String.format("Значение переменной float = " +

"%f, пока значение integer " +

"переменная = %d, и string " +

"= %s", floatVar, intVar, stringVar);</p>

<p>System.out.println(fs);</p>

<h3>Перечисления</h3>

<p>Программируя мы часто сталкиваемся с необходимостью ограничить множество допустимых значений для некоторого типа данных. Например, году - 12 месяцев. Для решения подобных задач во многих языках программирования со статической типизацией предусмотрен специальный тип данных - перечисление (enum). В Java перечисление появилось не сразу, а лишь с версии 1.5. До этого момента программисты использовали другие методы для реализации перечислений.</p>

<p>В простейшей форме перечисление - это список именованных констант. Но в Java перечисления имеют более сложный функционал, чем в других языках программирования. Они могут иметь конструкторы, методы и переменные экземпляра.</p>

<p>Перечисления создаются с использованием ключевого слова enum. Создадим перечисление животных:

<p>enum Animals{</p>

<p> &nbsp; CAT, DOG, TIGER, RABBIT</p>

<p>}</p>

<p>Обратите внимание, что значение enum-ов рекомендуется писать заглавными буквами, т.к. они статические.</p>

<p>Идентификаторы в фигурных скобках называются константами перечисления. Каждый из них явно объявлен как открытый статический финальный член класса Animal. Объявив перечисление, вы можете создавать переменные этого типа. Но делать это нужно без оператора new, а в упрощенном виде. Объявим переменную animal перечислимого типа Animal. Например:</p>

<p>Animal animal = Animal.DOG;</p>

<p>Иногда необходимо получить список всех элементов enum-класса во время выполнения. Для этих целей в каждом enum-классе компилятор создает метод public static EnumClass[] values(). Пример использования:</p>

<p>System.out.println(Arrays.toString(Animals.values()));</p>

<p>Вы уже догадывайтесь, какой результат выведен эта программа.Если нет - ответ под спойлеорм ниже</p>

{spoiler title= Result2}[CAT, DOG, TIGER, RABBIT].{/spoiler}

<p>Довольно часто возникает задача получить элемент enum по его строковому представлению. Для этих целей в каждом enum-классе компилятор автоматически создает специальный статический метод: public static EnumClass valueOf(String name), который возвращает элемент перечисления EnumClass с названием, равным name. Пример использования:</p>

<p>String name = "CAT";</p>

<p> Animal animal = Animal.valueOf(name);</p>

<p>В результате выполнения кода переменная season будет равна Animal.CAT. Следует обратить внимание, что если элемент не будет найден, то будет выброшен IllegalArgumentException, а в случае, если name равен null -- NullPointerException. Подробнее исключения будут рассмотрены в лекции 13.</p>

<p>Также можно сравнивать порядковые значения констант одного и того же перечисления с помощью метода compareTo(). Или сравнить на эквивалентность через метод equals().</p>

<p>Метод ordinal() возвращает порядковый номер определенной константы (нумерация начинается с 0).Пример:</p>

<p>System.out.println(Animal.TIGER.ordinal()); // будет возвращено 2</p>

<p>Перечисления, как и обычные классы, могут определять конструкторы, поля и методы. Например:</p>

<img src="images/2018-05-30_12-03-38.png" alt=""/>

<p>Перечисление Color определяет приватное поле code для хранения кода цвета, а с помощью метода getCode оно возвращается. Через конструктор передается для него значение. Следует отметить, что конструктор по умолчанию приватный, то есть имеет модификатор private. Любой другой модификатор будет считаться ошибкой. Поэтому создать константы перечисления с помощью конструктора мы можем только внутри перечисления.</p>

<h3>Массивы</h3>

<p>Массивом называется именованное множество переменных одного типа. Каждая переменная в данном массиве называется элементом массива. Чтобы сослаться на определенный элемент в массиве нужно знать имя массива в соединении с целым значением, называемым индексом. Индекс указывает на позицию конкретного элемента относительно начала массива. Обратите внимание, что первый элемент будет иметь индекс 0, второй имеет индекс 1, третий - индекс 2 и так далее. Данное решение было навязано математиками, которым было удобно начинать отсчёт массивов с нуля.</p>

<p>Переменную массива можно объявить с помощью квадратных скобок:</p>

<p>int[] animals; // мы объявили переменную массива</p>

<p>Возможен альтернативный вариант:int animals[];</p>

<p>Чаще всего, программисты на Java предпочитают 1 вариант</p>

<p>Несмотря на то, что массив был объявлен,на самом деле его ещё не существует, так как не заполнен данными. Фактически значение массива равно null.</p>

<p>После объявления переменной массива, можно определить сам массив с помощью ключевого слова new с указанием типа и размера. Например, массив должен состоять из 5 целых чисел:</p>

<p>animals= new int[5];</p>

<p>Если массив создается таким образом, то всем элементам массива автоматически присваиваются значения по умолчанию. Например, для числовых значений начальное значение будет 0. Для массива типа boolean начальное значение будет равно false, для массива типа char - '\u0000', для массива типа класса (объекты) - null.</p>

<p>Последнее правило может запутать начинающего программиста, который забудет, что строка типа String является объектом. Если вы объявите массив из десяти символьных строк,то у вас появятся строки со значением null, а не пустые строки, как вы могли бы подумать.</p>

<p>Обращение к элементу массива происходит по имени массива, за которым следует значение индекса элемента, заключенного в квадратные скобки. Например, на первый элемент нашего массива cats можно ссылаться как на animals[0], на пятый элемент как animals[4].</p>

<p>В качестве индекса можно использовать числа или выражения, которые создают положительное значение типа int. Поэтому при вычислении выражения с типом long, следует преобразовать результат в int, иначе получите ошибку. С типами short и byte проблем не будет, так как они полностью укладываются в диапазон int.</p>

<p>Не всегда нужно иметь значения по умолчанию. вы можете инициализировать массив собственными значениями, когда он объявляется, и определить количество элементов. Вслед за объявлением переменной массива добавьте знак равенства, за которым следует список значений элементов, помещенный в фигурные скобки. В этом случае ключевое слово new не используется:</p>

<p>int[] cats = {2, 5, 7, 8, 3, 0}; // массив из 6 элементов</p>

<p>Массивы часто используют в циклах.</p>

<p>Массив содержит специальное поле <b> length </b>, которое можно прочитать (но не изменить). Оно позволяет получить количество элементов в массиве. Данное свойство удобно тем, что вы не ошибётесь с размером массива.</p>

<p>Стандартная библиотека Java содержит статический метод System.arraycopy(), который копирует элементы массива</p>

<p>В аргументах arraycopy() передается исходный массив, начальная позиция копирования в исходном массиве, приёмный массив, начальная позиция копирования в приёмном массиве и количество копируемых элементов. Любое нарушение границ массива приведет к исключению.</p>

<p>Класс java.util.Arrays предназначен для работы с массивами. Он содержит удобные методы для работы с целыми массивами:</p>

<il>

<li>copyOf() ? предназначен для копирования массива</li>

<li>copyOfRange() ? копирует часть массива</li>

<li>toString() ? позволяет получить все элементы в виде одной строки</li>

<li>sort() -- сортирует массив методом quick sort</li>

<li>binarySearch() ? ищет элемент методом бинарного поиска</li>

<li>fill() ? заполняет массив переданным значением (удобно использовать, если нам необходимо значение по умолчанию для массива)</li>

<li>equals() ? проверяет на идентичность массивы</li>

<li>deepEquals() ? проверяет на идентичность массивы массивов</li>

<li>asList() ? возвращает массив как коллекцию (Рассматриваются в лекции 12)</li>

</il>

</br>

<p>Сортировка (упорядочение по значениям) массива a производится методами Arrays.sort(a) и Arrays.sort(a, index1, index2). Первый метод упорядочивает в порядке возрастания весь массив, второй -- часть элементов (от индекса index1 до индекса index2). Имеются и более сложные методы сортировки. Элементы массива должны быть сравниваемы (поддерживать операцию сравнения).</p>

<p>Простой пример</p>

<img src="images/chrome_2018-05-30_12-28-44.png" alt=""/>

<p>У метода sort() есть перегруженные версии, где можно указать диапазон массива, в пределах которого следует произвести сортировку.</p>

</br>

<p>Метод Arrays.copyOf(оригинальный_массив, новая_длина) -- возвращает массив-копию новой длины. Если новая длина меньше оригинальной, то массив усекается до этой длины, а если больше, то дополняется нулями. Пример:</p>

<img src="images/chrome_2018-05-30_12-30-54.png" alt=""/>

<p>Метод Arrays.copyOfRange(оригинальный_массив, начальный_индекс, конечный_индекс) -- также возвращает массив-копию новой длины, при этом копируется часть оригинального массива от начального индекса до конечного -1.</p>

<p>Метод Arrays.toString(массив) возвращает строковое представление массива со строковым представлением элементов, заключенных в квадратные скобки. В примерах выше мы уже вызывали данный метод.</p>

<p>Метод deepToString() удобен для вывода многомерных массивов. </p>

</br>

<p>Метод Arrays.fill() позволяет быстро заполнить массив одинаковыми значениями. У метода есть восемнадцать перегруженных версий для разных типов и объектов.Метод fill() просто дублирует одно заданное значение в каждом элементе массива (в случае объектов копирует одну ссылку в каждый элемент):</p>

<img src="images/chrome_2018-05-30_12-34-14.png" alt=""/>

<p>Как вы думайте,какой результат выведет программа? Правильный ответ под спойлером ниже:</p>

{spoiler title= Result3} Значения выводятся по очереди:

<img src="images/chrome_2018-05-30_12-35-35.png" alt=""/>{/spoiler}

</br>

<p>Класс Arrays содержит метод equals() для проверки на равенство целых массивов. Чтобы два массива считались равными, они должны содержать одинаковое количество элементов, и каждый элемент должен быть эквивалентен соответствующему элементу другого массива.</p>

<p>До этого,все рассмотренные примеры были для одномерных массивов (Одномерный массив - это именованная последовательность, состоящая из пронумерованных элементов одного типа.). Однако массивы бывают так же двумерными и многомерными. (Многомерный массив -- это массив, элементы которого сами являются массивами. Например, первый элемент трехмерного массива является двумерным массивом.) </p>

<p>Рассмотрим пример двумерного массива:</p>

<p>String[][] arr = new String[2][2];

<p>arr[0][0] = "1";</p>

<p>arr[0][1] = "Васька";</p>

</br>

<p>arr[1][0] = "2";</p>

<p>arr[1][1] = "Рыжик";</p>

<p>Первое число в скобках обозначают ряд (строку), а второе число - столбец. Принято считать, что в массиве new int[M][N] первый размер означает количество строк, а второй - количество столбцов.</p>

<p>Здесь рассмотрены не все методы для работы с массивами. В лекции 4 "Ветвления и циклы" так же будут рассмотрены некоторые методы для работы с массивами.</p>

<p>Поздравляем! Вы изучили весь материал из данной лекции. Для проверки знаний пройдите тест, перейдя по ссылке:

<a href="index.php?Itemid=164">Тест по Лекции 2.</a></p>

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.