МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ВЛАДИВОСТОКСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЭКОНОМИКИ И СЕРВИСА ИНСТИТУТ ИНФОРМАТИКИ, ИННОВАЦИЙ И БИЗНЕС СИСТЕМ КАФЕДРА ИНФОРМАЦИОННЫХ СИСТЕМ И ПРИКЛАДНОЙ ИНФОРМАТИКИ Технология Java Рабочая программа учебной дисциплины 230400.62 ИНФОРМАЦИОННЫЕ СИСТЕМЫ И ТЕХНОЛОГИИ Владивосток Издательство ВГУЭС 2014 ББК **.** Рабочая программа учебной дисциплины «Технология Java» составлена в соответствии с требованиями ООП: 230400.62 Информационные системы и технологии на базе ФГОС ВПО. Составитель: Семенов С.М., доцент кафедры Информационных систем и прикладной информатики Утверждена на заседании кафедры ИСПИ от 22.04.2014 г., протокол № 10 Рекомендована к изданию учебно-методической комиссией Института ___________________________ ВГУЭС от __.__.2014 г., протокол № __ © Издательство ВГУЭС 2014 ВВЕДЕНИЕ Java изначально появилась на свет как язык для создания небольших приложений для Интернета (апплетов), но со временем развилась как универсальная платформа для создания программного обеспечения, которое работает буквально везде – от мобильных устройств и смарт-карт до мощных серверов. Данный курс начинается с изложения истории появления и развития Java. Такие знания позволят лучше понять особенности платформы и спектр существующих продуктов и технологий. Также создание Java является интересным примером истории одного из самых популярных и успешных проектов в компьютерном мире. Затем излагаются основные концепции ООП, необходимые для освоения объектноориентированного языка программирования Java. Ключевые понятия и конструкции языка описываются доступным языком, но, тем не менее, на достаточно глубоком уровне. Детально рассмотрены особенности лексики, системы типов данных, объектной модели. Уделяется особое внимание модификаторам доступа, соглашениям по именованию, преобразованию типов, работе с массивами, обработке ошибок (исключительных ситуаций). Курс завершается рассмотрением базовых библиотек Java, предоставляющих всю необходимую функциональность для создания самых разных приложений – коллекции объектов, работа с файлами, сетью, создание GUI приложений, построение многопоточной архитектуры и многое другое. Описание сетевой библиотеки предваряется изложением основ сетевых протоколов и технологий. 1. ОРГАНИЗАЦИОННО-МЕТОДИЧЕСКИЕ УКАЗАНИЯ 1.1 Цели освоения учебной дисциплины Дать представление и понимание основных свойств, средств и утилит платформы Java, научить студентов разрабатывать приложения для широкого спектра задач, дать основы для дальнейшего изучения Java-технологий. Основные задачи изучения дисциплины: приобретение студентами знаний о сущности процедурного и объектноориентированного подхода в программировании; ознакомление с технологиями создания новых типов данных в языке java; приобретение практических навыков по использованию средств разработки приложений для Интернета (апплетов). 1.2 Место учебной дисциплины в структуре ООП (связь с другими дисциплинами) Дисциплина «Технология java» относится к дисциплинам по выбору. Данная дисциплина базируется на компетенциях, полученных при изучении дисциплины «Информатика и программирование». 1.3 Компетенции обучающегося, формируемые в результате освоения учебной дисциплины Таблица 1. Формируемые компетенции ООП Коды компетенций ПК-2 ПК-11 230400.62, Информационные системы и технологии. Информационные системы и технологии ПК-18 ПК-28 ПК-34 Знания, Умения, Владение программированием в средах Владения: современных информационных систем использовать информационные технологии для решения различных Умения: прикладных задач в профессиональной деятельности использовать информационные технологии для решения различных Умения: прикладных задач в профессиональной деятельности языками процедурного и объектноВладения: ориентированного программирования адаптировать возможности языков Умения: программирования к современным условиям; 1.4 Основные виды занятий и особенности их проведения Объем и сроки изучения дисциплины: Для студентов четвертого курса направления «Информационные системы и технологии» курс читается в весеннем семестре в объеме 108 учебных часов. На самостоятельное изучение дисциплины студентам выделяется 36 часов. Итоговая аттестация по курсу — зачет. 1.5 Виды контроля и отчетности по дисциплине Контроль успеваемости студентов осуществляется в соответствии с рейтинговой системой оценки знаний студентов. Текущий контроль предполагает: - проверку уровня самостоятельной подготовки студента при выполнении индивидуального задания; - опросы и дискуссии по основным моментам изучаемой темы. Промежуточный контроль предусматривает: - проведение контрольных работ по блокам изученного материала; - тестирование остаточных знаний (предварительные аттестации). Итоговый контроль знаний магистрантов осуществляется при проведении экзамена в форме компьютерного тестирования. 2. СТРУКТУРА И СОДЕРЖАНИЕ УЧЕБНОЙ ДИСЦИПЛИНЫ 2.1 Темы лекций Тема 1. История Создания Первая лекция начинается с рассказа о событиях, происходивших задолго до официального объявления Java. Хотя эта технология на сегодняшний день разительно отличается от того, как задумывали ее создатели, однако многие особенности берут свое начало от решений, принятых в то время. Будут освещены все основные этапы создания, появления и развития Java. Также в лекции излагаются необходимые базовые знания для разработчиков – основные свойства платформы Java, и почему она является платформой, а не просто языком программирования. Что входит в пакет разработчика, где найти нужную информацию, какие дополнительные продукты предоставляет Sun, чем различаются Java и Java Script – ответы на эти и другие общие вопросы находятся в первой лекции. Тема 2. Основы объектно-ориентированного программирования В этой лекции излагается основная концепция объектно-ориентированного подхода (ООП) к проектированию программного обеспечения. Поскольку в Java почти все типы (за исключением восьми простейших) являются объектными, владение ООП становится необходимым условием для успешного применения языка. Лекция имеет вводный, обзорный характер. Для более детального изучения предлагается список дополнительной литературы и Internet-ресурсов. Тема 3. Лексика языка Лекция посвящена описанию лексики языка Java. Лексика описывает, из чего состоит текст программы, каким образом он записывается и на какие простейшие слова (лексемы) компилятор разбивает программу при анализе. Лексемы (или tokens в английском варианте) – это основные "кирпичики", из которых строится любая программа на языке Java. Эта тема раскрывает многие детали внутреннего устройства языка, и невозможно написать ни одной строчки кода, не затронув ее. Именно поэтому курс начинается с основ лексического анализа. Тема 4. Типы данных Типы данных определяют основные возможности любого языка. Кроме того, Java является строго типизированным языком, а потому четкое понимание модели типов данных очень помогает в написании качественных программ. Лекция начинается с введения понятия переменной, на примере которой иллюстрируются особенности применения типов в Java. Описывается разделение всех типов на простейшие и ссылочные, операции над значениями различных типов, а также особый класс Class, который играет роль метакласса в Java. Тема 5. Имена. Пакеты В этой лекции рассматриваются две темы – система именования элементов языка в Java и пакеты (packages), которые являются аналогами библиотек из других языков. Почти все конструкции в Java имеют имя для обращения к ним из других частей программы. По ходу изложения вводятся важные понятия, в частности – область видимости имени. При перекрытии таких областей возникает конфликт имен. Для того, чтобы минимизировать риск возникновения подобных ситуаций, описываются соглашения по именованию, предложенные компанией Sun. Пакеты осуществляют физическую и логическую группировку классов и становятся необходимыми при создании больших систем. Вводится важное понятие модуля компиляции и описывается его структура. Тема 6. Объявление классов Центральная тема лекции – объявление классов, поскольку любое Java-приложение является набором классов. Первый рассматриваемый вопрос – система разграничения доступа в Java. Описывается, зачем вообще нужно управление доступом в ОО-языке программирования и как оно осуществляется в Java. Затем подробно рассматривается структура объявления заголовка класса и его тела, которое состоит из элементов (полей и методов), конструкторов и инициализаторов. Дополнительно описывается сигнатура метода main, с которого начинается работа Java-приложения, правила передачи параметров различных типов в методы, перегруженные методы. Тема 7. Преобразование типов Эта лекция посвящена вопросам преобразования типов. Поскольку Java – язык строго типизированный, компилятор и виртуальная машина всегда следят за работой с типами, гарантируя надежность выполнения программы. Однако во многих случаях то или иное преобразование необходимо осуществить для реализации логики программы. С другой стороны, некоторые безопасные переходы между типами Java позволяет осуществлять неявным для разработчика образом, что может привести к неверному пониманию работы программы. В лекции рассматриваются все виды преобразований, а затем все ситуации в программе, где они могут применяться. В заключение приводится начало классификации типов переменных и типов значений, которые они могут хранить. Этот вопрос будет подробнее рассматриваться в следующих лекциях. Тема 8. Объектная модель в java Эта лекция является некоторым отступлением от рассмотрения технических особенностей Java и посвящена в основном изучению ключевых свойств объектной модели Java, таких как статические элементы, абстрактные методы и классы, интерфейсы, являющиеся альтернативой множественного наследования. Без этих мощных конструкций язык Java был бы неспособен решать серьезные задачи. В заключение рассматриваются принципы работы полиморфизма для полей и методов, статических и динамических. Уточняется классификация типов переменных и типов значений, которые они могут хранить. Тема 9. Массивы Лекция посвящена описанию массивов в Java. Массивы издавна присутствуют в языках программирования, поскольку при выполнении многих задач приходится оперировать целым рядом однотипных значений. Массивы в Java – один из ссылочных типов, который, однако, имеет особенности при инициализации, создании и оперировании со своими значениями. Наибольшие различия проявляются при преобразовании таких типов. Также объясняется, почему многомерные массивы в Java можно (и зачастую более правильно) рассматривать как одномерные. Завершается классификация типов переменных и типов значений, которые они могут хранить. В заключение рассматривается механизм клонирования Java, позволяющий в любом классе описать возможность создания точных копий объектов, порожденных от него. Тема 10. Операторы и структура кода. Исключения После ознакомления с типами данных в Java, правилами объявления классов и интерфейсов, а также с массивами, из базовых свойств языка остается рассмотреть лишь управление ходом выполнения программы. В этой лекции вводятся важные понятия, связанные с данной темой, описываются метки, операторы условного перехода, циклы, операторы break и continue и другие. Следующая тема посвящена более концептуальным механизмам Java, а именно работе с ошибками или исключительными ситуациями. Рассматриваются причины возникновения сбоев, способы их обработки, объявление собственных типов исключительных ситуаций. Описывается разделение всех ошибок на проверяемые и непроверяемые компилятором, а также ошибки времени исполнения. Тема 11. Пакеты java.awt, java.swing Эта лекция начинает рассмотрение базовых библиотек Java, которые являются неотъемлемой частью языка и входят в его спецификацию, а именно описывается пакет java.awt, предоставляющий технологию AWT для создания графического (оконного) интерфейса пользователя – GUI. Ни одна современная программа, предназначенная для пользователя, не обходится без удобного, понятного, в идеале – красивого пользовательского интерфейса. С самой первой версии в Java существует специальная технология для создания GUI. Она называется AWT, Abstract Window Toolkit. Именно о ней пойдет речь в этой лекции. Пакет java.awt претерпел, пожалуй, больше всего изменений с развитием версий Java. Мы рассмотрим дерево компонентов, доступных программисту, специальную модель сообщений, позволяющую гибко обрабатывать пользовательские действия, и другие особенности AWT – работа с цветами, шрифтами, отрисовка графических примитивов, менеджеры компоновки и т.д. Хотя технология AWT включает в себя гораздо больше, чем можно изложить в рамках одной лекции, здесь собраны все необходимые сведения для создания полноценного оконного интерфейса. Рассматриваются особенности библиотеки SWING. Тема 12. Потоки выполнения, синхронизация В этой лекции завершается описание ключевых особенностей Java. Последняя тема раскрывает особенности создания многопоточных приложений - такая возможность присутствует в языке, начиная с самых первых версий. Первый вопрос - как на много- и, самое интересное, однопроцессорных машинах выполняется несколько потоков одновременно и для чего они нужны в программе. Затем описываются классы, необходимые для создания, запуска и управления потоками в Java. При одновременной работе с данными из нескольких мест возникает проблема синхронного доступа, блокировок и, как следствие, взаимных блокировок. Изучаются все механизмы, предусмотренные в языке для корректной организации такой логики работы. Тема 13. Пакет java.lang В этой лекции рассматривается основная библиотека Java – java.lang. В ней содержатся классы Object и Class, классы-обертки для примитивных типов, класс Math, классы для работы со строками String и StringBuffer, системные классы System, Runtime и другие. В этом же пакете находятся типы, уже рассматривавшиеся ранее,– для работы с исключительными ситуациями и потоками исполнения. Тема 14. Пакет java.util Эта лекция посвящена пакету java.util, в котором содержится множество вспомогательных классов и интерфейсов. Они настолько удобны, что практически любая программа использует эту библиотеку. Центральную часть в изложении занимает тема контейнеров, или коллекций, - классов, хранящих упорядоченные ссылки на ряд объектов. Они были существенно переработаны в ходе создания версии Java2. Также рассматриваются классы для работы с датой, для генерации случайных чисел, обеспечения поддержки многих национальных языков в приложении и др. Тема 15. Пакет java.io Эта лекция описывает реализованные в Java возможности передачи информации, что является важной функцией для большинства программных систем. Сюда входит работа с файлами, сетью, долговременное сохранение объектов, обмен данными между потоками исполнения и т.п. Все эти действия базируются на потоках байт (представлены классами InputStream и OutputStream) и потоках символов (Reader и Writer). В библиотеке java.io содержатся все эти классы и их многочисленные наследники, предоставляющие полезные возможности. Отдельно рассматривается механизм сериализации объектов и работа с файлами. Тема 16. Введение в сетевые протоколы Завершает курс лекция, в которой рассматриваются возможности построения сетевых приложений. Сначала дается краткое введение в сетевые протоколы, семиуровневую модель OSI, стек протоколов TCP/IP и описываются основные утилиты, предоставляемые операционной системой для мониторинга сети. Эти значения необходимы, поскольку библиотека java.net, по сути, является интерфейсом для работы с этими протоколами. Рассматриваются классы для соединений через высокоуровневые протоколы, протоколы TCP и UDP. 2.2 Перечень тем практических/лабораторных занятий Тема 1. бегущая строка (с настройками цвета, скорости и др.) Тема 2. часы (аналоговые, цифровые, с будильником и т.п.) Тема 3. игры (линии, тетрис, морской бой, слова, крестики-нолики, сапер, пасьянсы и др.) Тема 4. калькулятор Тема 5. анимационные заставки Тема 6. аудио-приложения Тема 7. визуальные элементы (кнопки, меню, выпадающие списки с изображениями) Тема 8. биоритмы Тема 9. трехмерные модели (с вращениями) Тема 10. связь с базами данных через JDBC (табличный редактор, выпадающие списки) В отчет должны входить исходный текст с комментариями (*.java), страница с данными об авторе, описанием программы и ссылкой на Java-приложение (*.html), само приложение (*.class). 3. ОБРАЗОВАТЕЛЬНЫЕ ТЕХНОЛОГИИ Программой дисциплины предусмотрено чтение лекций, проведение практических занятий. В течение изучения дисциплины студенты изучают на лекционных занятиях теоретический материал. На практических занятиях под руководством преподавателя, решают типовые задачи программирования, обсуждают возникающие вопросы и проблемы, разбирают и анализируют наиболее удачные практики программирования. Для студентов в качестве самостоятельной работы предполагается подготовка докладов и сообщений, выполнения домашних заданий, групповая работа над задачами по программированию. 4. МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ ПО ИЗУЧЕНИЮ КУРСА 4.1 Перечень и тематика самостоятельных работ студентов по дисциплине 1. Создайте новый класс Car (автомобиль) и включите в него следующие методы: public void start() public void stop() public int drive(int howlong) Метод drive() (едь) должен возвращать общее расстояние пройденное автомобилем за заданное время. Используйте следующую формулу для расчёта расстояния: distance = howlong*60; 2. Создайте ещё один класс CarOwner (хозяин автомобиля), который будет создавать экземпляр объекта Car и вызывать его методы. Результат каждого такого вызова должен быть напечатан с помощью System.out.println(). Сделайте подкласс класса Car, назовите его JamesBondCar (автомобиль Джемса Бонда) и переопределите в нем метод drive(). Используйте следующую формулу дла рассчёта расстояния: distance = howlong*180; Будьте изобретательны! Печатайте смешные сообщения. 3. Создайте новый класс и назовите его TemperatureConverter. Добавьте в него метод для преобразования температур, с такой сигнатурой: public String convertTemp (int temperature, char convertTo) Если аргумент convertTo равен F, то температура должна быть преобразована в Фаренгейты, если C, то в Цельсии. Когда вы будете вызывать этот метод, поместите значение аргумента типа char в одинарные кавычки. 4. Объявите метод convertGrades() класса ReportCard как статический и удалите строку инициализации класса из метода main(). 5.Модифицируйте класс Calculator.java [1] добавив в него кнопки +, ƒ, /, и *. Поместите эти кнопки на панель p2, и положите эту панель на Восточную область основной панели. 6. Прочитайте про класс JFormattedTextField в интернете и измените исходный код калькулятора так, чтобы этот класс использовался вместо JTextField. Целью является создание поля ввода с выравниванием по правому краю, как в настоящих калькуляторах. Модифицируйте класс Calculator.java так, чтобы все кнопки с цифрами хранились в массиве с десятью элементами, который должен быть объявлен вот так: Buttons[] numButtons= new Buttons[10]; Замените 10 строк кода, которые начинаются с button0=new JButton("0"); циклом, который создаёт кнопки и добавляет их в массив. 7. Изучите программу игры в крестики-нолики[1]. Измените класс CalculatorEngine, чтобы отображалось сообщение ”На ноль делить нельзя”, если пользователь нажмет на кнопку ”Разделить”, когда дисплей калькулятора будет пуст. 8. Напишите программу копирования файлов под названием FileCopy, объединив для этого фрагменты кода из раздела про байтовые потоки [1]. Откройте два потока (ввода и вывода) и вызовите методы read() и write() в одном и том же цикле. Используйте аргументы командной строки для передачи программе имён исходного и конечного файлов, например: java FileCopy c:\\temp\\scores.txt c:\\backup\\scores2.txt 8. Добавьте перегруженный конструктор по умолчанию (без аргументов) в класс Fish [1]. Этот конструктор должен устанавливать значение стартовой позиции равное 10 метрам. Класс FishMaster будет создавать экземпляр объекта Fish очень просто, вот так: Fish myFish = new Fish(); 4.2 Контрольные вопросы для самостоятельной оценки качества освоения учебной дисциплины 1. Что такое исключение? 2. Что такое класс Exception? 3. Что такое блок try/catch/finally? 4. Что такое утилита javadoc и с каким типом комментариев она работает? 5. В каком виде представляется документированная версия вашего кода? 6. Что такое тег @author? 7. Что такое тег {@link} ? 8. Что такое принцип многопоточности? 9. Что такое поток? 10. Что такое класс Thread? 11. Что такое интерфейс Runnablе? 12. Что такое метод или блок кода с ключевым словом synchronized? 13. Что такое обоюдная блокировка? 14. Как можно приостанавливать выполнение потока? 15. Какие существуют основные методы для работы с потоками? 16. Чем обеспечивается переносимость Java-программ? 17. Из каких ключевых элементов состоит технология Java? 18. Каковы основные "аппаратные" компоненты Виртуальной Машины Java? 19. Какие структуры памяти создает Виртуальна Машина Java? 20. В чем состоит специфика выделения/освобождения памяти в Java? Как она обеспечивается Виртуальной Машиной Java? 21. Какие принципиальные отличия многопоточности языка Java от многопоточности, например, языка C/C++? 22. Какие из средств синхронизации и взаимного исключения, описанных в главе 8 части I, могут быть реализованы в Java при помощи модификатора synchronized? 23. Какие методы синхронизации имеются в Java 1.0? какие - в Java 1.1 и далее? 24. Какие средства, обеспечивающие защиту ресурсов, заложены в сам язык Java? Какие средства обеспечиваются Виртуальной Машиной Java? 25. Что представляют собой апплеты Java с точки зрения защиты ресурсов? 26. В чем сходство JavaOS с другими рассмотренными нами ОС на базе микроядра? в чем отличия? 27. Каковы особенности технологий Java фирмы Sun для тонких клиентов? 4.3 Методические рекомендации по организации СРС Для студентов в качестве самостоятельной работы предполагается подготовка докладов и сообщений, выполнения домашних заданий, групповая работа над задачами по программированию. 4.4 Рекомендации по работе с литературой В процессе изучения дисциплины «Технология java», для того чтобы представлять основные понятия, сущность и сферу применения языка программирования java необходимо воспользоваться учебником Я. Файна «Программирование на java». Остальная рекомендуемая литература поможет студентам выполнять задания самостоятельной работы. 5. УЧЕБНО-МЕТОДИЧЕСКОЕ ДИСЦИПЛИНЫ 5.1 Основная литература И ИНФОРМАЦИОННОЕ ОБЕСПЕЧЕНИЕ 1. Файн Я. Программирование на java / Я. Файн. – 3-е изд. – США, 2011. 2. Сьерра К. Бейтс Б. Изучаем java. http://bookwebmaster.narod.ru/java.html. 2012 3. Шилдт Герберт Java. Полное руководство. 8-издание / Г.Шилдт. – 8-е изд. – http://bookwebmaster.narod.ru/java.html, 2012 4. Иванова Г.С. Объектно-ориентированное программирование: учебник для студ. вузов / Г.С. Иванова, Т.Н. Ничушкина, Е.К. Пугачев; под ред. Г.С. Ивановой. – 3-е изд., стереотип. – М.: Изд-во МГТУ им. Н.Э. Баумана, 2008. 5. Герман О.В., Герман Ю.О. Программирование на Java и C# для студента. http://bookwebmaster.narod.ru/java.html, 2005 5.2 Дополнительная литература 1. Ловейн П. Объектно-ориентированное программирование на PHP 5 / Питер Ловейн. – М.: НТ Пресс, 2007. 2. Пышкин Е.В. Теория и технология программирования. Основные концепции и механизмы объектно-ориентированного программирования: учеб. пособие для студ. вузов / Е.В. Пышкин. – СПб.: БХВ-Петербург, 2005. 5.3 Полнотекстовые базы данных – нет 5.4 Интернет-ресурсы 1. Программирование на языке java в Eclipse - www.eclipse.org 2. Структуры и алгоритмы компьютерной обработки данных https://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=8672&Login=&c1=enus&c2=0 6. МАТЕРИАЛЬНО-ТЕХНИЧЕСКОЕ ОБЕСПЕЧЕНИЕ ДИСЦИПЛИНЫ а) программное обеспечение: компилятор языков программирования Java Development Kit (JDK) (http://www.oracle.com/technetwork/java/javase/downloads/index.html), интегрированная среда разработки IDE (Integrated Development Environment) (www.eclipse.org). б) техническое и лабораторное обеспечение – компьютерный класс, аудитория с презентационным оборудованием. 7. СЛОВАРЬ ОСНОВНЫХ ТЕРМИНОВ Класс - тип данных, включающий в себя элементы-данные и элементы-функции (методы). Объект - переменная, созданная как представитель класса, то есть имеющая соответствующий классу тип. Инкапсуляция — способ ограничения доступа к данным объекта. Если данные объекта инкапсулированы, то доступ к ним имеют лишь функции – методы класса. Наследование - способ создания дочерних или производных классов на основе родительских или базовых классов. Базовый класс содержит элементы, общие для производных классов. При простом наследовании дочерний класс создается из единственного родительского путем добавления к нему новых методов и данных. При сложном наследовании у дочернего класса может быть два родителя и у него, таким образом, будут присутствовать методы и функции обоих родителей. Полиморфизм - способ использования функций, когда они выполняют различные действия, в зависимости от того, с какими типами данных они работают. Апплет – приложение для Интернета.