Сериализация объектов
2 2 Факультет «Информатика и системы управления» Методические указания к лабораторной работе по курсу «Распределенные системы обработки информации» "Сериализация объектов" Москва 2004 г. Цель работы1. Познакомиться с сериализацией объектов и её практическим применением.2. Изучить метод клонирования объектов при помощи сериализации.3. Освоить классы ObjectInputStream и ObjectOutputStream пакета java.io.4. Научится обрабатывать действия мыши и клавиатуры.5. Изучить классы Menu, MenuBar, MenuItem, Dialog, FileDialog пакета java.awt.6. Научиться использовать таблицы.7. Применить полученные знания на практикеЗадание для домашней подготовкиОзнакомиться с теоретическим материалом, представленным в приложениях к данным методическим указаниям и примерами программ. Ознакомиться с текстом задания к лабораторной работе, предложить размещение компонентов и функциональность, удовлетворяющую требованиям задания к лабораторной работе, и написать программу.Задание к лабораторной работеСоздать оконное приложение, реализующее графический интерфейс доступа к массиву объектов классов Employee и Manager (см. приложение). Работа пользователя должна осуществляться при помощи меню, обязательно содержащего следующие элементы.- Меню «Файл» (Внутри - пункты меню «Новый каталог», «Сохранить данные», «Загрузить данные», «Передать данные»).- Меню «Добавить (Внутри - пункты меню «Новый работник», «Новый менеджер», «Клонировать сотрудника»).Добавление информации о новых сотрудниках должно происходить при помощи диалоговых окон.На главной форме должна присутствовать таблица с информацией о сотрудниках (Ф.И.О., оклад, дата поступления).Ниже описываются действия программы на выбор соответствующих пунктов меню.Меню «ФАЙЛ»«Новый каталог» - вся информация в таблице стирается. На экране показываются только заголовки таблицы.«Сохранить данные» - объект базы данных сериализуется в файл. Внутри объекта данных для этого должен быть предусмотрен соответствующий метод.«Загрузить данные» - объект базы данных десериализуется из файла. Внутри объекта данных для этого должен быть предусмотрен соответствующий метод.«Выход» - вызов системного метода System.exit(0).Меню «ДОБАВИТЬ»«Добавить работника» - показывается диалоговое окно, в котором пользователь может ввести данные для нового работника. Эти данные заносятся в объект базы данных, после чего обновляется информация в таблице.«Добавить менеджера» - аналогично предыдущему пункту, но с учётом особенностей класса Manager. Класс диалогового окна добавления менеджера может быть наследован от аналогичного класса окна Employee.«Клонировать сотрудника» - под этим необычным названием скрывается стандартное копирование записи базы данных, которое осуществляется методом клонирования сериализацией (см. приложение). Копия добавляется в конец таблицы. Выбор записи для копирования осуществляется выделением соответствующего поля в таблице.Рисунок 1: Вариант исполнения заданияСодержание отчетаОтчет должен содержать:Постановку задачи, решаемой отлаженной программой.Руководство пользователя отлаженной программы, содержащее описание интерфейсов всех функций программы.Листинг программы с необходимыми комментариями.Контрольные вопросы1. Что такое сериализация / десериализация?2. Какое диалоговое окно называется модальным?3. Почему не все объекты можно сериализовать?4. Как узнать, можно ли сериализовать объект класса, встроенного в Java?5. Почему возможность сериализации сохраняется при наследовании?6. Сколько полей содержит интерфейс Serializable?7. Что подразумевается под термином «клонирование объектов».8. Назовите «родственные связи» между классами Menu, MenuItem, MenuBar, MenuShortCut и MenuComponent.9. Назовите два способа, позволяющих добавить горизонтальную черту между пунктами меню.10. Как заставить приложение записывать на экране в текстовой области символы `*' вместо символов, вводимых с клавиатуры?11. Что такое «модель таблицы»?12. Где хранятся данные для таблицы?13. Какие данные могут содержать ячейки таблицы JTable?14. Как сделать возможным выбор нескольких элементов таблицы.ЛитератураОфициальные источники:1. Кен Арнольд, Джеймс Гослинг, Дэвид Холмс. Язык программирования Java™.2. Официальный сайт Java - http://java.sun.com/ (есть раздел на русском языке с учебником).3. Java™ 2 SDK, Standard Edition Documentation - http://java.sun.com/products/jdk/1.5/index.html.4. Джеймс Гослинг, Билл Джой, Гай Стил. Спецификация языка Java (The Java Language Specification - http://www.javasoft.com/docs/books/jls/). Перевод на русский язык - http://www.uni-vologda.ac.ru/java/jls/index.html5. Официальный сайт проекта Eclipse - http://www.eclipse.org/.Другое:1. Дмитрий Рамодин. Начинаем программировать на языке Java.2. Николай Смирнов. Java 2: Учебное пособие.3. Картузов А.В. Программирование на языке Java.4. Вязовик Н.А. Программирование на Java.5. Алексей Литвинюк. Введение в интегрированную среду разработки 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>. На экране в пунктах меню, которым назначены «горячие» клавиши, появляются подсказки вида Ctrl+N, Ctrl+O, как на рисунке 1. «Горячая» клавиша определяется объектом класса MenuShortcut и указывается в его конструкторе константой класса KeyEvent, например: MenuShortcut keyCreate = new MenuShortcut (KeyEvent.VK_N); После этого «горячей» будет комбинация клавиш <Ctrl>+<N>. Затем полученный объект указывается в конструкторе класса MenuItem: MenuItem create = new MenuItem («Создать», keyCreate); Нажатие <Ctrl>+<N> будет вызывать окно создания. Эти действия, разумеется, можно совместить, например, MenuItem open = new Menultern («Открыть…», new - MenuShortcut (KeyEvent.VK_O)); Можно добавить еще нажатие клавиши <Shift>. Действие пункта меню будет вызываться нажатием комбинации клавиш <Shift>+<Ctrl>+<X>, если воспользоваться вторым конструктором: 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); } }); saveAs.addActionListener (new ActionListener() { public void actionPerformed (ActionEvent e) { FileDialog fd = new FileDialog (new Frame(), «Сохранить», FileDialog.SAVE); fd.setVisible(true); } }); exit.addActionListener (new ActionListener() { public void actionPerformed (ActionEvent e) {System.exit(0);} }); MenuItem about = new MenuItem («О программе»); h.add(about); about.addActionListener ( // …обработчик ); addWindowListener (new WinClose()); setVisible(true); } // конец конструктора
Страницы: 1, 2
|