- •Основы программирования на языке java в среде eclipse
- •Ответственный за выпуск: в.И. Павловський, зав. Кафедрою информационных и компьютерных систем, канд. Техн. Наук, доцент.
- •2.1 Задание на лабораторную работу 19
- •7.3 Порядок выполнения работы 103
- •7.4 Содержимое отчета 103
- •7.5 Контрольные вопросы 104
- •Введение
- •1Лабораторная работа №1 Изучение среды разработки Eclipse
- •1.1 Задание на лабораторную работу
- •1.2 Краткие теоретические сведения
- •1.2.1Создание проекта
- •1.2.2Создание нового класса Java
- •1.3 Порядок выполнения работы
- •1.4 Содержимое отчета
- •Краткие теоретические сведения.
- •1.5 Контрольные вопросы
- •2Лабораторная работа №2 Основы языка Java
- •2.1 Задание на лабораторную работу
- •2.2 Краткие теоретические сведения
- •2.2.1Создание объектов
- •2.2.2Примитивные типы
- •2.2.3Числа высокой точности
- •2.2.4Уничтожение объектов
- •2.2.5Видимость имен
- •2.2.6Использование других компонентов
- •2.2.7Ключевое слово static
- •2.2.8Массивы
- •2.2.9Обработка ошибок с помощью исключений
- •2.3 Порядок выполнения работы
- •2.4 Содержимое отчета
- •2.5 Контрольные вопросы и задания
- •3Лабораторная работа №3 Объектная модель языка Java
- •3.1 Задание на лабораторную работу
- •3.2 Краткие теоретические сведения
- •3.3 Порядок выполнения работы
- •Краткие теоретические сведения.
- •4.2 Краткие теоретические сведения
- •4.2.1Классы дерева и узла
- •4.2.2Вопросы сокрытия реализации
- •4.2.3Пользовательский интерфейс
- •4.3 Порядок выполнения работы
- •4.4 Содержимое отчета
- •Краткие теоретические сведения.
- •4.5 Контрольные вопросы
- •5Лабораторная работа №5 Изучение основ объектно-ориентированного программирования на языке Java. Часть 2
- •5.1 Задание на лабораторную работу
- •5.2 Краткие теоретические сведения
- •5.2.1Классы деревьев и интерфейсы
- •5.2.2Рекурсивный проход по деревьям разных классов
- •5.2.3Расширение ранее созданных классов специфическими операциями пользователей
- •5.2.4Вопросы оптимизации кода
- •5.3 Порядок выполнения работы
- •5.4 Содержимое отчета
- •Краткие теоретические сведения.
- •5.5 Контрольные вопросы
- •6Лабораторная работа №6 Изучение коллекций Java и системы ввода-вывода
- •6.1 Задание на лабораторную работу
- •6.2 Краткие теоретические сведения
- •6.2.1Представление и реализация дерева на основе коллекций
- •В описании узла дерева необходимо создать и инициализировать объект класса список или набор сыновей, например
- •Количество сыновей узла дерева определяется следующим образом:
- •Элементу набора с индексом I выполняется путем получения массива из набора
- •6.2.2Представление и реализация дерева на основе ассоциативных массивов (карт отображений)
- •В описании узла дерева необходимо создать и инициализировать объект ассоциативный массив сыновей, например
- •Количество сыновей узла дерева определяется следующим образом:
- •6.2.3Доступ к коллекции или ассоциативному массиву через итератор
- •6.2.4Использование обобщений Java 5
- •В описании узла дерева необходимо создать и инициализировать коллекцию настраиваемый список, например
- •6.2.5Сериализация и десериализация дерева в файл
- •6.2.6Ввод и вывод в потоки со сжатием данных
- •6.3 Порядок выполнения работы
- •Краткие теоретические сведения.
- •7.2 Краткие теоретические сведения
- •7.2.1Многопоточность
- •7.2.2Процессы, потоки и приоритеты
- •7.2.3Приоритеты потоков в приложениях Java
- •7.2.4Реализация многопоточности в Java
- •7.2.5Функциональность класса Thread
- •7.2.6Реализация интерфейса Runnable
- •7.2.7Синхронизация потоков
- •7.2.8Синхронизация методов
- •7.2.9Блокировка потока
- •7.2.10Синхронизация доступа к совместно используемым данным.
- •7.2.11Избыточная синхронизация
- •7.2.12Вызов метода wait
- •7.2.13Документирование уровней безопасности
- •7.2.14Работа с графикой Графика 2d
- •Пространства координат
- •Режим рисования
- •Создание цвета
- •Основные методы рисования
- •Рисование фигур средствами Java2d
- •Класс BasicStroke
- •Класс GeneralPath
- •Классы GradientPaint и TexturePaint
- •7.3 Порядок выполнения работы
- •7.4 Содержимое отчета
- •Краткие теоретические сведения;
- •7.5 Контрольные вопросы
- •Многопоточность;
- •РекомендУемая литература
2.3 Порядок выполнения работы
Ознакомиться с заданием на лабораторную работу.
Написать программу, которая осуществляет расчет значения функции, используя рекуррентную формулу, указанную в вариантах к лабораторной работе в таблице 2.2. Для расчета значений ряда предусмотреть возможность ввода значения x и точности вычисления. Процесс создания визуального интерфейса (рис. 2.1) описан в лабораторной работе №1.
Таблица 2.2 – Варианты заданий
Вариант* |
Функ-ция |
Ряд |
x0 |
Рекуррентная формула |
1,7 |
|
|
1 |
|
2,8 |
sin(x) |
|
x |
|
3,9 |
|
|
1 |
|
4,0 |
|
|
х |
|
5,6 |
|
|
х |
|
Рисунок 2. 1 - Визуальный интерфейс программы
для расчета значений ряда
Для расчета значений ряда следует создать класс со статическими методами для расчета значений i-того члена ряда и для расчета суммы ряда.
Составить отчет о выполнении лабораторной работы.
2.4 Содержимое отчета
Название и тема лабораторной работы.
Цель лабораторной работы.
Краткие теоретические сведения.
Ход выполнения работы.
Исходные тексты программ.
Выводы.
2.5 Контрольные вопросы и задания
Описание классов;
Примитивные типы;
Видимость имен;
Ключевое слово static;
Уничтожение объектов в Java;
Массивы в Java;
Обработка исключений в Java;
Написать программу, реализующую сортировку массива методом пузырька;
Написать программу, которая вычисляет факториал числа BigInteger любой длины;
Написать программу, которая возводит в степень число;
Написать программу, которая вычисляет число Фибоначчи;
Написать программу для поиска элемента в отсортированном массиве;
Написать программу возведения в квадрат каждого элемента массива.
3Лабораторная работа №3 Объектная модель языка Java
Цель работы: Изучение объектной модели Java. Классы. Интерфейсы. Наследование. Полиморфизм.
3.1 Задание на лабораторную работу
В ходе выполнения данной лабораторной работы необходимо ознакомиться с понятиями классы, полиморфизм, наследование и интерфейсы. Разработать диаграмму классов, согласно заданному варианту. Создать приложение, демонстрирующее работоспособность модели.
3.2 Краткие теоретические сведения
Элементарным строительным блоком в Java является класс. Класс–это конструкция, определяющая поля данных объектов данного класса и их поведение. Практически класс в Java сам по себе не является объектом. Это лишь шаблон, который определяет, из каких частей будет состоять объект, созданный с помощью этого класса, и как он будет себя вести.
В Java кроме обычных классов существуют и абстрактные классы. Абстрактный класс – это класс, который не может иметь экземпляров. Любой класс, который имеет хотя бы один абстрактный метод или поле должен быть описан как абстрактный. С помощью ключевого слова abstract можно указать что класс, метод или поле являются абстрактными. В качестве примера создадим абстрактный класс Shape, который будет характеризовать любую геометрическую фигуру.
public abstract class Shape implements IShape {
private Point startPoint;
private Color color;
public Shape(int x, int y) { this.startPoint = new Point(x, y); }
public Point getStartPoint() { return startPoint; }
public void setStartPoint(Point center) { this.startPoint = center; }
public Color getColor() { return color; }
public void setColor(Color color) { this.color = color; }
} |
В данном абстрактном классе описаны два поля – начальная точка на плоскости, которая определяет положение фигуры в пространстве и цвет. Также созданы методы для доступа к этим полям.
Как видно из описания, класс Shape реализует интерфейс IShape. Под реализацией подразумевается описание конкретных действий, которые должен выполнять метод, описанный в интерфейсе. Интерфейсы, которые реализует класс, указываются после ключевого слова implements. Интерфейс – это упрощенное описание класса, в его описании указывают только сигнатуру методов без указания конкретной реализации.
Интерфейс IShape выглядит так:
public interface IShape {
public void draw(Graphics canvas);
} |
Здесь описана сигнатура одного единственного метода, который принимает в качестве параметра объект класса Graphics (графический контекст любого компонента). При помощи технологии Java 2D можно производить рисование графических примитивов на контексте. Техника работы с Java 2D будет рассмотрена ниже.
Таким образом, описав абстрактный класс Shape, реализующий интерфейс IShape мы получили базовую конструкцию для создания класса любой геометрической фигуры.
Далее создадим три класса, описывающие различные геометрические фигуры – круг, треугольник и прямоугольник:
public class Circle extends Shape {
public Circle() { this(0, 0); }
public Circle(int x, int y) { super(x, y); }
@Override public void draw(Graphics canvas) { canvas.setColor(getColor()); canvas.fillOval(getStartPoint().x, getStartPoint().y, 50, 50); }
}
public class Triangle extends Shape {
public Triangle() { this(0, 0); }
public Triangle(int x, int y) { super(x, y); }
@Override public void draw(Graphics canvas) { canvas.setColor(getColor()); Polygon p = new Polygon(); p.addPoint(getStartPoint().x, getStartPoint().y); p.addPoint(getStartPoint().x + 40, getStartPoint().y); p.addPoint(getStartPoint().x, getStartPoint().y + 30); canvas.fillPolygon(p); }
}
public class Rectangle extends Shape {
public Rectangle() { this(0, 0); }
public Rectangle(int x, int y) { super(x, y); }
@Override public void draw(Graphics canvas) { canvas.setColor(getColor()); canvas.fillRect(getStartPoint().x, getStartPoint().y, 50, 50); }
} |
Все описанные классы имеют одного родителя – абстрактный класс Shape. Данный подход позволяет созданным классам унаследовать все свойства родительского класса, такие как цвет и начальная точка на плоскости, и указать конкретную реализацию метода draw.
Рассмотрим метод рисования фигуры подробнее. В качестве входного параметра он принимает графический контекст, на котором в последующем можно будет нарисовать ту или иную фигуру. Перед тем как начать отображать геометрическую фигуру на контексте, необходимо установить текущий цвет контекста (по умолчанию он черный). С помощью метода setColor(Color c) производятся эти действия. В нашем случае цветом будет служить тот цвет, который был задан фигуре при инициализации класса.
В наборе технологии Java 2D существует несколько подходов по рисованию графических примитивов.
Первый – это создание объекта класса Polygon и с помощью метода addPoint(int x, int y) заполнение его точками. Затем полигон передается в качестве входного параметра методу fillPolygon(Polygon p), который произведет его отрисовку и заливку текущим цветом контекста. Данный подход используется для отображения треугольника.
public class Triangle extends Shape { ... @Override public void draw(Graphics canvas) { ... Polygon p = new Polygon(); p.addPoint(getStartPoint().x, getStartPoint().y); p.addPoint(getStartPoint().x + 40, getStartPoint().y); p.addPoint(getStartPoint().x, getStartPoint().y + 30); canvas.fillPolygon(p); } } |
Второй – это отрисовка простых геометрических фигур (окружность, овал, прямоугольник…) при помощи стандартных методов графического контекста fillOval(int x, int y, int width, int height) и fillRect(int x, int y, int width, int height). Данный подход используется для отображения круга и прямоугольника.
public class Circle extends Shape { ... @Override public void draw(Graphics canvas) { ... canvas.fillOval(getStartPoint().x, getStartPoint().y, 50, 50); }
}
public class Rectangle extends Shape { ... @Override public void draw(Graphics canvas) { ... canvas.fillRect(getStartPoint().x, getStartPoint().y, 50, 50); }
} |
На данный момент у нас есть три класса, описывающие простейшие геометрические фигуры, с реализацией методов их отрисовки на графическом контексте любого компонента визуального интерфейса.
Диаграмма, описывающая иерархическую структуру классов, изображена на рисунке 3.1.
Рисунок 3.1 – Диаграмма классов тестового примера.
Для тестирования созданных классов создадим новый класс Main.
public class Main extends JComponent {
public static void main(String[] args) { JFrame frame = new JFrame(); frame.setSize(400, 400); frame.setTitle("Shape Example"); frame.getContentPane().add(new Main()); frame.setVisible(true); }
public void paint(Graphics g) { Shape shape = new Rectangle(10, 10); shape.setColor(Color.RED); shape.draw(g); shape = new Circle(100, 100); shape.setColor(Color.BLUE); shape.draw(g); shape = new Triangle(200,200); shape.setColor(Color.BLACK); shape.draw(g); } } |
Пример работы класса Main показан на рисунке 3.2.
Рисунок 3.2 – Пример работы тестового проекта.
