48927 (Сериализация объектов)
Описание файла
Документ из архива "Сериализация объектов", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "48927"
Текст из документа "48927"
Факультет «Информатика и системы управления»
Методические указания к лабораторной работе
по курсу «Распределенные системы обработки информации»
"Сериализация объектов"
Москва 2004 г.
Цель работы
-
Познакомиться с сериализацией объектов и её практическим применением.
-
Изучить метод клонирования объектов при помощи сериализации.
-
Освоить классы ObjectInputStream и ObjectOutputStream пакета java.io.
-
Научится обрабатывать действия мыши и клавиатуры.
-
Изучить классы Menu, MenuBar, MenuItem, Dialog, FileDialog пакета java.awt.
-
Научиться использовать таблицы.
-
Применить полученные знания на практике
Задание для домашней подготовки
Ознакомиться с теоретическим материалом, представленным в приложениях к данным методическим указаниям и примерами программ. Ознакомиться с текстом задания к лабораторной работе, предложить размещение компонентов и функциональность, удовлетворяющую требованиям задания к лабораторной работе, и написать программу.
Задание к лабораторной работе
Создать оконное приложение, реализующее графический интерфейс доступа к массиву объектов классов Employee и Manager (см. приложение). Работа пользователя должна осуществляться при помощи меню, обязательно содержащего следующие элементы.
– Меню «Файл» (Внутри – пункты меню «Новый каталог», «Сохранить данные», «Загрузить данные», «Передать данные»).
– Меню «Добавить (Внутри – пункты меню «Новый работник», «Новый менеджер», «Клонировать сотрудника»).
Добавление информации о новых сотрудниках должно происходить при помощи диалоговых окон.
На главной форме должна присутствовать таблица с информацией о сотрудниках (Ф.И.О., оклад, дата поступления).
Ниже описываются действия программы на выбор соответствующих пунктов меню.
Меню «ФАЙЛ»
«Новый каталог» – вся информация в таблице стирается. На экране показываются только заголовки таблицы.
«Сохранить данные» – объект базы данных сериализуется в файл. Внутри объекта данных для этого должен быть предусмотрен соответствующий метод.
«Загрузить данные» – объект базы данных десериализуется из файла. Внутри объекта данных для этого должен быть предусмотрен соответствующий метод.
«Выход» – вызов системного метода System.exit(0).
Меню «ДОБАВИТЬ»
«Добавить работника» – показывается диалоговое окно, в котором пользователь может ввести данные для нового работника. Эти данные заносятся в объект базы данных, после чего обновляется информация в таблице.
«Добавить менеджера» – аналогично предыдущему пункту, но с учётом особенностей класса Manager. Класс диалогового окна добавления менеджера может быть наследован от аналогичного класса окна Employee.
«Клонировать сотрудника» – под этим необычным названием скрывается стандартное копирование записи базы данных, которое осуществляется методом клонирования сериализацией (см. приложение). Копия добавляется в конец таблицы. Выбор записи для копирования осуществляется выделением соответствующего поля в таблице.
Рисунок 1: Вариант исполнения задания
Содержание отчета
Отчет должен содержать:
-
Постановку задачи, решаемой отлаженной программой.
-
Руководство пользователя отлаженной программы, содержащее описание интерфейсов всех функций программы.
-
Листинг программы с необходимыми комментариями.
Контрольные вопросы
-
Что такое сериализация / десериализация?
-
Какое диалоговое окно называется модальным?
-
Почему не все объекты можно сериализовать?
-
Как узнать, можно ли сериализовать объект класса, встроенного в Java?
-
Почему возможность сериализации сохраняется при наследовании?
-
Сколько полей содержит интерфейс Serializable?
-
Что подразумевается под термином «клонирование объектов».
-
Назовите «родственные связи» между классами Menu, MenuItem, MenuBar, MenuShortCut и MenuComponent.
-
Назовите два способа, позволяющих добавить горизонтальную черту между пунктами меню.
-
Как заставить приложение записывать на экране в текстовой области символы ‘*’ вместо символов, вводимых с клавиатуры?
-
Что такое «модель таблицы»?
-
Где хранятся данные для таблицы?
-
Какие данные могут содержать ячейки таблицы JTable?
-
Как сделать возможным выбор нескольких элементов таблицы.
Литература
Официальные источники:
-
Кен Арнольд, Джеймс Гослинг, Дэвид Холмс. Язык программирования Java™.
-
Официальный сайт Java – http://java.sun.com/ (есть раздел на русском языке с учебником).
-
Java™ 2 SDK, Standard Edition Documentation – http://java.sun.com/products/jdk/1.5/index.html.
-
Джеймс Гослинг, Билл Джой, Гай Стил. Спецификация языка Java (The Java Language Specification – http://www.javasoft.com/docs/books/jls/). Перевод на русский язык – http://www.uni-vologda.ac.ru/java/jls/index.html
-
Официальный сайт проекта Eclipse – http://www.eclipse.org/.
Другое:
-
Дмитрий Рамодин. Начинаем программировать на языке Java.
-
Николай Смирнов. Java 2: Учебное пособие.
-
Картузов А.В. Программирование на языке Java.
-
Вязовик Н.А. Программирование на Java.
-
Алексей Литвинюк. Введение в интегрированную среду разработки Eclipse – http://lib.juga.ru/article/articleview/174/1/69/.
Приложение 1. Создание меню
В контейнер типа Frame заложена возможность установки стандартной строки меню (menu bar), располагаемой ниже строки заголовка, как показано на рисунке 1. Эта строка – объект класса MenuBar.
Все, что нужно сделать для установки строки меню в контейнере Frame – это создать объект класса MenuBar и обратиться к методу setMenuBar():
Frame f = new Frame («Пример меню»);
MenuBar mb = new MenuBar();
f.setMenuBar(mb);
Если имя mb не понадобится, можно совместить два последних обращения к методам:
f.setMenuBar (new MenuBar());
Разумеется, строка меню еще пуста и пункты меню не созданы.
Каждый элемент строки меню – выпадающее меню (drop-down menu) – это объект класса Menu. Создать эти объекты и занести их в строку меню ничуть не сложнее, чем создать строку меню:
Menu mFile = new Menu («Файл»);
mb.add(mFile);
Menu mEdit = new Menu («Правка»);
mb.add(mEdit);
Menu mView = new Menu («Вид»);
mb.add(mView);
Menu mHelp = new Menu («Справка»);
mb.setHelpMenu(mHelp);
и т.д. Элементы располагаются слева направо в порядке обращений к методам add(), как показано на рисунке 1. Во многих графических системах принято меню Справка (Help) прижимать к правому краю строки меню. Это достигается обращением к методу setHelpMenu(), но фактическое положение меню Справка определяется графической оболочкой.
Рисунок 2. Система меню
Затем определяем каждое выпадающее меню, создавая его пункты. Каждый пункт меню – это объект класса MenuItem. Схема его создания и добавления к меню точно такая же, как и самого меню:
MenuItem create = new MenuItem («Создать»);
mFile.add(create);
MenuItem open = new MenuItem («Открыть…»);
mFile.add(open);
и т.д. Пункты меню будут расположены сверху вниз в порядке обращения к методам add().
Часто пункты меню объединяются в группы. Одна группа от другой отделяется горизонтальной чертой. На рисунке 1 черта проведена между командами Открыть и Отправить. Эта черта создается методом addSeparator() класса Menu или определяется как пункт меню с надписью специального вида – дефисом:
mFile.add (new MenuItem(» –»));
Интересно, что класс Menu расширяет класс MenuItem, а не наоборот. Это означает, что меню само является пунктом меню, и позволяет задавать меню в качестве пункта другого меню, тем самым организуя вложенные подменю:
Menu send = new Menu («Отправить»);
mFile.add(send);
Здесь меню send добавляется в меню mFile как один из его пунктов. Подменю send заполняется пунктами меню как обычное меню.
Часто команды меню создаются для выбора из них каких-то возможностей, подобно компонентам checkbox. Такие пункты можно выделить щелчком кнопки мыши или отменить выделение повторным щелчком. Эти команды – объекты класса CheckboxMenuItem:
CheckboxMenuItem disk = new CheckboxMenuItem («Диск A:», true);
send.add(disk);
send.add (new CheckboxMenuItem («Архив»));
и т.д.
Все, что получилось в результате перечисленных действий, показано на рисунке 1.
Многие графические оболочки, но не MS Windows, позволяют создавать отсоединяемые (tear-off) меню, которые можно перемещать по экрану. Это указывается в конструкторе
Menu (String label, boolean tearOff)
Если tearoff == true и графическая оболочка умеет создавать отсоединяемое меню, то оно будет создано. В противном случае этот аргумент просто игнорируется.
Наконец, надо назначить действия командам меню. Команды меню типа MenuItem порождают события типа ActionEvent, поэтому нужно присоединить к ним объект класса-слушателя как к обычным компонентам, записав что-то вроде
create.addActionListener (new SomeActionEventHandler())
open.addActionListener (new AnotherActionEventHandler())
Пункты типа CheckboxMenuItem порождают события типа ItemEvent, поэтому надо обращаться к объекту-слушателю этого события:
disk.addItemListener (new SomeItemEventHandler())
Очень часто действия, записанные в командах меню, вызываются не только щелчком кнопки мыши, но и «горячими» клавишами-акселераторами (shortcut), действующими чаще всего при нажатой клавише . На экране в пунктах меню, которым назначены «горячие» клавиши, появляются подсказки вида Ctrl+N, Ctrl+O, как на рисунке 1. «Горячая» клавиша определяется объектом класса MenuShortcut и указывается в его конструкторе константой класса KeyEvent, например:
MenuShortcut keyCreate = new MenuShortcut (KeyEvent.VK_N);
После этого «горячей» будет комбинация клавиш +. Затем полученный объект указывается в конструкторе класса MenuItem:
MenuItem create = new MenuItem («Создать», keyCreate);
Нажатие + будет вызывать окно создания. Эти действия, разумеется, можно совместить, например,
MenuItem open = new Menultern («Открыть…»,
new – MenuShortcut (KeyEvent.VK_O));
Можно добавить еще нажатие клавиши . Действие пункта меню будет вызываться нажатием комбинации клавиш ++, если воспользоваться вторым конструктором:
MenuShortcut (int key, boolean useShift)
С аргументом useShift == true.
Пример создания меню
import java.awt.*;
import java.awt.event.*;
public class MenuScribble extends Frame {
public MenuScribble (String s) {
super(s);
MenuBar mb = new MenuBar();
setMenuBar(mb);
Menu f = new Menu («Файл»);
Menu h = new Menu («Справка»);
mb.add(f);
mb.add(h);
MenuItem open = new MenuItem («Открыть…»,
new MenuShortcut (KeyEvent.VK_0));
MenuItem save = new MenuItem («Сохранить»,
new MenuShortcut (KeyEvent.VK_S));
MenuItem saveAs = new Menultera («Сохранить как…»);
MenuItem exit = new MenuItem («Выход»,
new MenuShortcut (KeyEvent.VK_Q));
f.add(open);
f.add(save);
f.add(saveAs);
f.addSeparator();
f.add(exit);
open.addActionListener (new ActionListener() {
public void actionPerformed (ActionEvent e) {
FileDialog fd = new FileDialog (new Frame(),
«Загрузить», FileDialog.LOAD);
fd.setVisible(true);
}