- •Основы программирования на языке 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 Контрольные вопросы
- •Многопоточность;
- •РекомендУемая литература
4.2.2Вопросы сокрытия реализации
Важнейшим соображением при объектно-ориентированном проектировании является “отделение изменяющейся составляющей от постоянной”.
При реализации библиотечных или утилитных классов возникает необходимость обеспечить с одной стороны постоянство пользовательских методов, которое гарантирует программисту-пользователю, что при дальнейшем усовершенствовании библиотеки эти методы останутся неизменными и с другой стороны свободу разработчику для дальнейших изменений и улучшений.
Для решения этой проблемы в Java имеются спецификаторы доступа. Уровни контроля доступа от “полного” до “минимального” определяются с помощью ключевых слов: публичный - public, защищенный - protected, дружественный - “friendly” (не имеет ключевого слова) и приватный - private. Однако, концепция библиотеки компонент и контроля доступа к ним это еще не все. Существует вопрос - как хранить вместе связанные компоненты в модуле библиотеки. В Java это реализуется с помощью ключевого слова package (пакет), и спецификаторы доступа действуют в зависимости от того, находится ли класс в том же пакете или нет.
Предложение package обязательно должно находиться в начале исходного текста. Когда вы говорите:
package mypackage;
в начале файла, например, MyTest.java, то указываете, что эта единица компиляции находится в части библиотеки с именем mypackage, и публичный класс MyTest будет иметь полное имя mypackage.MyTest. Если в исходном тексте не указано явно имя пакета, то этот файл принадлежит пакету “по умолчанию” для текущей директории.
Имена пакетов в Java записываются маленькими буквами.
При использовании ключевого слова import загружается целевая библиотека:
import java.util.* |
такое предложение загружает в программу пакет утилит, являющийся частью стандартной поставки Java.
Спецификаторы доступа:
public – доступ к интерфейсу, следующее за ним объявление члена доступно всем;
private – приватный доступ, никто не имеет права доступа к этому члену, за исключением его класса, при использовании внутри метода;
protected – защищенный доступ, все классы которые унаследовали базовый класс имеют доступ к защищенным членам;
“дружественный” – доступ по умолчанию, все классы в текущем пакете имеют доступ к дружественным членам, но классы за пределами пакета видят такие члены как приватные (private).
Для расширения доступа к приватным полям класса, используют специальные методы. Для доступа на чтение в классе описывают public setter method, а для организации доступа на запись – public getter method, так называемые set- и get- методы доступа к полям класса.
Учитывая все выше сказанное, класс узла дерева может иметь следующий вид:
1 /** 2 * LinkedNode.java 3 */ 4 package stu.jtap.labs.lab2; 5 6 /** 7 * Класс узла для организации дерева на основе списочной структуры 8 */ 9 public class LinkedNode { 10 /*Данные узла*/ 11 private Object data; 12 /* Ссылка на голову списка сыновей */ 13 private LinkedNode son; 14 /* Ссылка на брата */ 15 private LinkedNode brother; 16 17 /** 18 * Создает новый узел без данных 19 */ 20 public LinkedNode() { 21 } 22 23 /** 24 * Создает новый узел с данными 25 * @param data данные узла 26 */ 27 public LinkedNode(Object data) { 28 this.data = data; 29 } 30 31 /** 32 * Добавляет дочерний элемент 33 * 34 * @param data 35 * добавляемый элемент 36 * @return вновь созданный узел 37 */ 38 public LinkedNode addSon(Object data) { 39 return null; 40 } 41 /** 42 * Удаляет дочерний элемент с заданными данными 43 * @param data данные удаляемого элемента 44 * @return данные удаленного элемента или 45 * <code>null</code> в случае неудачи 46 */ 47 public Object delSon(Object data) { 48 return null; 49 } 50 51 /** 52 * Возвращает данные заданного узла 53 * @return данные 54 */ 55 public Object getData() { 56 return data; 57 } 58 59 /** 60 * Устанавливает данные заданного узла 61 * @param data данные 62 */ 63 public void setData(Object data) { 64 this.data = data; 65 } 66 /** 67 * Проверка статуса 68 * @return <code>true</code> в случае если элемент 69 * является <i>листом</i> 70 */ 71 public boolean isLeaf() { 72 return son == null; 73 } 74 /** 75 * Проверка статуса 76 * @return <code>true</code> в случае если элемент 77 * является <i>узлом</i> 78 */ 79 public boolean isNode() { 80 return !isLeaf(); 81 } 82 83 /** 84 * Возвращает указатель на список сыновей 85 * @return LinkedNode 86 */ 87 public LinkedNode getSon() { 88 return son; 89 } 90 91 /** 92 * Возвращает указатель на брата 93 * @return LinkedNode 94 */ 95 public LinkedNode getBrother() { 96 return brother; 97 } 98 99 /** 100 * Returns a string representation of the object. 101 * @return String 102 */ 103 public String toString() { 104 return "data: " + data; 105 } 106 107 } 108 |
