Похожие презентации:
Компонентная модель в объектно-ориентированном программировании. Технология JavaBeans
Самарский государственный аэрокосмический университет имени академика С.П.
Королёва Самара 2014 © Составление, А.В.
Гаврилов, 2014 Объектно-ориентированное программирование Компонентная модель в объектно-ориентированном программировании Технология JavaBeans Занятие 7.1 А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы План лекции Компонентный подход JavaBeans Свойства компонентов Графические компоненты События и их обработка Персистентность Упаковка компонентов2 А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы3 Объектный подход vs Компонентный подход Объектный подход Программа пишется как объектная модель реальной или воображаемой системы, объекты и их отношения легко понятны Компонентный подход Программа собирается из заранее созданных компонентов, которые могут быть достаточно сложны для понимания А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы4 Понятие компонента Компонент – это элемент системы, представляющий определенную службу или сущность, допускающий взаимодействие с другими компонентами Особенности компонентов: Многоразовое использование Независимость от контекста Кооперация с другими компонентами Инкапсуляция Самостоятельность как единицы программы Компонент – объект, написанный в соответствии со спецификацией А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы5 Требования к разработке компонентов Полная документация Более строгое тестирование Надежная проверка достоверности входных данных Возврат полезных сообщений об ошибках Разработка с учетом непредусмотренного использования А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы6 Контейнеры и компоненты Контейнер предоставляет контекст, в котором компоненты могут существовать и действовать совместно Контейнер тоже может быть компонентом Это полностью рекурсивно! А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы7 Существующие компонентные модели JavaBeans Enterprise JavaBeans .Net Framework Components ActiveX COM DCOM CORBA VLC & CLX … А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы8 JavaBeans Компонентная модель для языка Java Компоненты называются Beans (бины) Компонент описывается как класс, удовлетворяющий определенным правилам Следует различать компонент как класс компонента и компоненты как его экземпляры, использующиеся в программе Для работы с компонентами используются специальные программные средства, позволяющие «визуально» настраивать компонент и его взаимодействие с другими компонентами (RAD- tools) А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы9 Интроспекция Средства работы с бинами подвергают бины интроспекции Интроспекция – механизм, основанный на рефлексии, позволяющий определить характеристики компонента, основываясь на информации, заключенной в именах элементов класса компонента и вспомогательных классах А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы10 Компоненты JavaBeans Компонент имеет свойства , которые представляют собой характеристики компонента и могут быть изменены в процессе сборки Компонент использует события для взаимодействия с другими компонентами Компоненты обладают свойством персистентности: могут сохранять свое состояние в долговременное хранилище и затем восстанавливать его Методы компонентов являются обычными методами Java и могут использоваться другими компонентами А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы11 Достоинства JavaBeans Компактность Переносимость Поддержка механизмов интроспекции Способность к работе в графической среде быстрой разработки приложений (RAD) А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы12 Требования к компоненту JavaBeans Способность к инстанцированию нового экземпляра (бин – не интерфейс, не абстрактный класс) Наличие конструктора по умолчанию (конструктора без параметров) Возможность сериализации Следование соглашениям об именах и способах проектирования Использование модели делегирования обработки событий А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы13 Удивительное рядом Нет общего супер-класса для бинов API пакета java.beans предоставляет только классы поддержки функционирования компонентов JavaBeans Нет никакого специализированного языка описания интерфейсов А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы14 Свойства Виды свойств по способу доступа Допускающие запись Допускающие чтение Виды свойств по сложности Простые Индексированные Связанные Контролируемые А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы15 Простые свойства Доступны пользователю как пара методов доступа (setter/getter) Любой из этих методов может отсутствовать, определяя таким образом доступность свойства для чтения/записи (read-only/write-only) Соглашения именования: Общий вид public ТипСвойства get ИмяСвойства() public void set ИмяСвойства( ТипСвойства значение) Логические свойства public boolean is ИмяСвойства() public void set ИмяСвойства (boolean значение) А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы16 Бин с простым свойством package beans;
public class MyBean implements java.io.Serializable { public MyBean() { } private String message;
public String getMessage() { return message;
} public void setMessage(String message) { this.message = message;
}} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы17 Работа с простыми свойствами А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы18 Индексированные свойства Определяют доступ к массиву свойств с возможностью доступа по номеру Соглашения именования: public ТипСвойства [] get ИмяСвойства() public void set ИмяСвойства( ТипСвойства [] значения) public ТипСвойства get ИмяСвойства (int индекс) public void set ИмяСвойства (int индекс, ТипСвойства значение) А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы19 Бин с индексированным свойством public class MyBean implements java.io.Serializable { private String[] lines = new String[5];
public String[] getLines() { return lines;
} public void setLines(String[] lines) { this.lines = lines;
} public String getLines(int index) { return lines[index];
} public void setLines(int index, String line) { this.lines[index] = line;
}} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы20 Работа с индексированными свойствами А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы21 Связанные свойства Поддерживают механизм оповещения об изменениях значений свойств Обработчики реализуют интерфейс PropertyChangeListener и принимают объекты PropertyChangeEvent, содержащие имя свойства и его старое и новое значения Используется вспомогательный класс PropertyChangeSupport А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы22 Бин со связанным свойством package beans;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
public class MyBean implements java.io.Serializable { private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
public void addPropertyChangeListener( PropertyChangeListener listener) { pcs.addPropertyChangeListener(listener);
} public void removePropertyChangeListener( PropertyChangeListener listener) { pcs.removePropertyChangeListener(listener);
} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы23 Бин со связанным свойством public void setMessage(String message) { String old = this.message;
this.message = message;
pcs.firePropertyChange("message", old, message);
} public void setLines(String[] lines) { String[] old = this.lines;
this.lines = lines;
pcs.firePropertyChange("lines", old, lines);
} public void setLines(int index, String line) { String old = this.lines[index];
this.lines[index] = line;
pcs.fireIndexedPropertyChange("lines", index, old, lines);
} ...
А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы24 Работа со связанными свойствами А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы25 Контролируемые свойства Похожи на связанные свойства, но перед присвоением нового значения оно должно быть проверено обработчиками Любой обработчик в праве запретить изменение, в этом случае значение свойства останется прежним Обработчики реализуют интерфейс VetoableChangeListener и принимают объекты PropertyChangeEvent , содержащие имя свойства и его старое и новое значения Используется вспомогательный класс VetoableChangeSupport А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы26 Бин с контролируемым свойством package beans;
import java.beans.PropertyVetoException;
import java.beans.VetoableChangeListener;
import java.beans.VetoableChangeSupport;...
public class MyBean implements java.io.Serializable { private final VetoableChangeSupport vcs = new VetoableChangeSupport(this);
public void addVetoableChangeListener( VetoableChangeListener listener) { vcs.addVetoableChangeListener(listener);
} public void removeVetoableChangeListener( VetoableChangeListener listener) { vcs.removeVetoableChangeListener( listener );
} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы27 Бин с контролируемым свойством ...
public void setMessage(String message) { String old = this.message;
try { vcs.fireVetoableChange("message", old, message);
this.message = message;
pcs.firePropertyChange("message", old, message);
} catch (PropertyVetoException e) { this.message = old;
} } ...} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы28 Графические компоненты Если компоненты содержит средства визуализации, то его суперкласом должен быть: java.awt.Component если создается компонент на базе AWT javax.swing.JComponent если создается компонент на базе Swing Хотя и компоненты AWT, и компоненты Swing являются компонентами JavaBeans, не рекомендуется смешивать их в одном контейнере А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы29 Графический бин package beans;
import java.beans.*;
import javax.swing.*;
import java.awt.*;
public class MyBean extends JComponent implements java.io.Serializable { protected void paintComponent(Graphics g) { g.setColor(getForeground());
int height = g.getFontMetrics().getHeight();
if (message != null) { g.drawString(message, 0, height);
} }...
А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы30 Графический бин ...
public void setMessage(String message) { String old = this.message;
try { vcs.fireVetoableChange("message", old, message);
this.message = message;
pcs.firePropertyChange("message", old, message);
repaint();
} catch (PropertyVetoException e) { this.message = old;
} } ...} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы31 Работа с графическим бином А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы Модель делегирования обработки событий Событие – объект, описывающий изменение состояния источника Источник – объект, генерирующий события Слушатель – объект, получающий уведомление о событии Источник генерирует событие и посылает его одному или нескольким слушателям Слушатель просто ждет поступления события Получив событие, слушатель обрабатывает его и затем возвращает управление32 А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы Модель делегирования обработки событий Слушатели должны зарегистрироваться у источника – события посылаются только зарегистрировавшимся слушателям Логика кода, обрабатывающего события, отделена от логики интерфейса, генерирующего события Это реализация паттерна проектирования Observer33 А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы34 Слушатели и источники Один источник может генерировать несколько типов событий Один слушатель может быть слушателем нескольких видов событий Один слушатель может получать события одного вида от нескольких источников Слушатель может быть источником для других слушателей и для самого себя Источник может быть слушателем других источников и самого себя А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы35 События JavaBeans Класс слушателя должен наследовать от базового типа слушателя для вида событий EventListenerType Чтобы слушатель события мог быть зарегистрирован, компонент должен предоставлять метод public void add EventListenerType( EventListenerType a) Чтобы слушатель события мог отказаться от регистрации, компонент должен предоставлять метод public void remove EventListenerType( EventListenerType a) Если компонент позволяет регистрировать одновременно ограниченное количество обработчиков события, то метод добавления слушателя должен объявлять исключение java.util.TooManyListenersException Работа с событиями также может вестись на уровне средства разработки А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы36 Работа с событиями А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы37 Работа с событиями А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы38 Работа с событиями А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы39 Работа с событиями А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы40 Результат работы приложения А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы41 Персистентнось Способность объекта существовать во времени, переживая породивший его процесс Для JavaBeans реализуется за счет сериализации Все классы компонентов должны быть подготовлены к сериализации Существуют механизмы сохранения состояния бинов в xml-формат А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы42 Упаковка в Jar Класс компонента, вспомогательные классы, файлы помещаются в jar- архив В файле манифеста при этом указывается дополнительная информация: Name: beans/MyBean.class Java-Bean: True А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы43 Добавление библиотек в палитру Самарский государственный аэрокосмический университет имени академика С.П.
Королёва Самара 2014 © Составление, А.В.
Гаврилов, 2014 Объектно-ориентированное программирование Вложенные типы Занятие 7.2 А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы План лекции Вложенные типы Вложенные классы Вложенные интерфейсы Внутренние классы Особенности внутренних классов Локальные классы Анонимные классы45 А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы46 Синтаксически корректный код class MyFirstClass { public static void main(String[] args) { // ...
} class MySecondClass { private int a, b;
public MySecondClass(int a, int b) { this.a = a;
this.b = b;
} //...
}} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы47 Вложенные типы Считаются частью внешнего типа, со всеми вытекающими правами Позволяют представить тип в виде логически связанных структурных групп и контекстов Простой и эффективный инструмент объединения семантики соотносимых объектов А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы48 Статические вложенные классы Nested class Простейшая форма вложенного класса Может использоваться любыми классами, обладающими соответствующими правами доступа Классы, вложенные в интерфейсы, статичны по определению class ClassA { int a = 10;
protected static class ClassB { int b = 15;
}} public class Test { public static void main(String[] args) { ClassA.ClassB t = new ClassA.ClassB();
System.out.println(t.b);
}} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы49 Вложенные интерфейсы Всегда статичны (модификатор static по умолчанию) Доступ определяется доступом внешнего класса или интерфейса и модификаторами доступа class ClassA { public interface InterfaceB { //...
} //...
public InterfaceB get() { //...
}} public class Test { public static void main(String[] args) { ClassA.InterfaceB t = (new ClassA()).get();
}} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы50 Нестатические вложенные классы Называются внутренними (inner) классами Тип находится в контексте объекта Объект внутреннего класса всегда ассоциируется с т.н.
внешним объектом Элементы внутреннего класса имеют доступ к полям и методам внешнего объекта Это позволяет создавать семейства сильно связанных объектов А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы51 Пример внутреннего класса class ClassA { private int a = 10;
protected class ClassB { private int b = 15;
public int getA() { return a;
} public int getB() { return b;
} } public ClassB get() { return new ClassB();
} public void setB(int b, ClassB obj) { obj.b = b;
}} public class Test { public static void main(String[] args) { ClassA objA = new ClassA();
ClassA.ClassB objB = objA.get();
objA.setB(20, objB);
System.out.println(objB.getA() + " " + objB.getB());
}} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы И ещё один пример52 import java.io.*;
interface Interface extends Serializable { int getA();} class ClassA implements Serializable { private class ClassB implements Interface { private int a;
public int getA() { return a;
} } private ClassB[] arr = new ClassB[10];
{ for(int i = 0;
i < 10;
i++) { arr[i] = new ClassB();
arr[i].a = i +65;
} } public Interface getB(int index) { return arr[index];
}} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы И его результат…53 public class Test { public static void main(String[] args) throws Exception { ClassA objA = new ClassA();
Interface objB = objA.getB(5);
ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream("test.bin"));
out.writeObject(objB);
out.close();
}} ¬н♣sr♪ ClassA$ClassB иeТнwјЛ ☻ ☻I☺aL♠ this$0t◘L ClassA;xpFsr♠ ClassA hќЯѓэЄрЈ ☻ ☺[♥arrt► [LClassA$ClassB ;xpur► [LClassA$ClassB ;єВ2 ♂ т| Ў ☻ xp sq ~Aq ~♣ sq ~Bq ~♣ sq ~Cq ~♣ sq ~Dq ~♣ sq ~Eq ~♣q ~☻ sq ~Gq ~♣ sq ~Hq ~♣ sq ~Iq ~♣ sq ~Jq ~♣ А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы54 Локальные классы Описываются в теле блока Экземпляры имеют доступ к полям и методам внешнего объекта Экземпляры имеют доступ к локальным переменным, снабженным модификатором final public class ClassA { public Iterator iterator() { class Iter implements Iterator { //...
} //...
return new Iter();} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы55 Анонимные классы Описываются непосредственно в выраженииnew и служат его частью Тип, указанный послеnew является базовым для объявляемого анонимного класса Могут расширять один класс или реализовывать один интерфейс Явно писать implements или extends нельзя Не могут иметь конструкторов А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы56 Пример анонимного класса import java.awt.*;
import javax.swing.*;
public class MyApplet extends JApplet { ...
public void init() { JButton btn = new JButton("?");
getContentPane().add(btn);
btn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ((JButton)e.getSource()).setText("!");
} });
}} Спасибо за внимание! А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы Дополнительные источники Хорстманн, К.
Java 2.
Библиотека профессионала.
Том 2.
Тонкости программирования [Текст] / Кей Хорстманн, Гари Корнелл.
– М.
: Издательский дом «Вильямс», 2010 г.
– 992 с.
Дейтел, Х.М.
Технологии программирования на Java 2.
Книга 1.
Графика, JavaBeans, интерфейс пользователя [Текст] / Х.М.
Дейтел, П.Дж.
Дейтел, С.И.
Сантари.
– М.
: Бином-пресс, 2003.
– 560 с.
JavaSE at a Glance [Электронный ресурс].
– Режим доступа: http://www.oracle.com/technetwork/java/javase/overview/index.html , дата доступа: 21.10.2011.
JavaSE APIs & Documentation [Электронный ресурс].
– Режим доступа: http://www.oracle.com/technetwork/java/javase/documentation/api-jsp-136079.html , дата доступа: 21.10.2011.
JavaSE Desktop technologies [Электронный ресурс].
– Режим доступа: http://www.oracle.com/technetwork/java/javase/tech/index-jsp-138795.html , дата доступа: 21.10.2011.
Trial: JavaBeans [Электронный ресурс].
– Режим доступа: http://download.oracle.com/javase/tutorial/javabeans/ , дата доступа: 21.10.2011.
Королёва Самара 2014 © Составление, А.В.
Гаврилов, 2014 Объектно-ориентированное программирование Компонентная модель в объектно-ориентированном программировании Технология JavaBeans Занятие 7.1 А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы План лекции Компонентный подход JavaBeans Свойства компонентов Графические компоненты События и их обработка Персистентность Упаковка компонентов2 А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы3 Объектный подход vs Компонентный подход Объектный подход Программа пишется как объектная модель реальной или воображаемой системы, объекты и их отношения легко понятны Компонентный подход Программа собирается из заранее созданных компонентов, которые могут быть достаточно сложны для понимания А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы4 Понятие компонента Компонент – это элемент системы, представляющий определенную службу или сущность, допускающий взаимодействие с другими компонентами Особенности компонентов: Многоразовое использование Независимость от контекста Кооперация с другими компонентами Инкапсуляция Самостоятельность как единицы программы Компонент – объект, написанный в соответствии со спецификацией А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы5 Требования к разработке компонентов Полная документация Более строгое тестирование Надежная проверка достоверности входных данных Возврат полезных сообщений об ошибках Разработка с учетом непредусмотренного использования А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы6 Контейнеры и компоненты Контейнер предоставляет контекст, в котором компоненты могут существовать и действовать совместно Контейнер тоже может быть компонентом Это полностью рекурсивно! А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы7 Существующие компонентные модели JavaBeans Enterprise JavaBeans .Net Framework Components ActiveX COM DCOM CORBA VLC & CLX … А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы8 JavaBeans Компонентная модель для языка Java Компоненты называются Beans (бины) Компонент описывается как класс, удовлетворяющий определенным правилам Следует различать компонент как класс компонента и компоненты как его экземпляры, использующиеся в программе Для работы с компонентами используются специальные программные средства, позволяющие «визуально» настраивать компонент и его взаимодействие с другими компонентами (RAD- tools) А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы9 Интроспекция Средства работы с бинами подвергают бины интроспекции Интроспекция – механизм, основанный на рефлексии, позволяющий определить характеристики компонента, основываясь на информации, заключенной в именах элементов класса компонента и вспомогательных классах А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы10 Компоненты JavaBeans Компонент имеет свойства , которые представляют собой характеристики компонента и могут быть изменены в процессе сборки Компонент использует события для взаимодействия с другими компонентами Компоненты обладают свойством персистентности: могут сохранять свое состояние в долговременное хранилище и затем восстанавливать его Методы компонентов являются обычными методами Java и могут использоваться другими компонентами А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы11 Достоинства JavaBeans Компактность Переносимость Поддержка механизмов интроспекции Способность к работе в графической среде быстрой разработки приложений (RAD) А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы12 Требования к компоненту JavaBeans Способность к инстанцированию нового экземпляра (бин – не интерфейс, не абстрактный класс) Наличие конструктора по умолчанию (конструктора без параметров) Возможность сериализации Следование соглашениям об именах и способах проектирования Использование модели делегирования обработки событий А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы13 Удивительное рядом Нет общего супер-класса для бинов API пакета java.beans предоставляет только классы поддержки функционирования компонентов JavaBeans Нет никакого специализированного языка описания интерфейсов А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы14 Свойства Виды свойств по способу доступа Допускающие запись Допускающие чтение Виды свойств по сложности Простые Индексированные Связанные Контролируемые А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы15 Простые свойства Доступны пользователю как пара методов доступа (setter/getter) Любой из этих методов может отсутствовать, определяя таким образом доступность свойства для чтения/записи (read-only/write-only) Соглашения именования: Общий вид public ТипСвойства get ИмяСвойства() public void set ИмяСвойства( ТипСвойства значение) Логические свойства public boolean is ИмяСвойства() public void set ИмяСвойства (boolean значение) А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы16 Бин с простым свойством package beans;
public class MyBean implements java.io.Serializable { public MyBean() { } private String message;
public String getMessage() { return message;
} public void setMessage(String message) { this.message = message;
}} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы17 Работа с простыми свойствами А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы18 Индексированные свойства Определяют доступ к массиву свойств с возможностью доступа по номеру Соглашения именования: public ТипСвойства [] get ИмяСвойства() public void set ИмяСвойства( ТипСвойства [] значения) public ТипСвойства get ИмяСвойства (int индекс) public void set ИмяСвойства (int индекс, ТипСвойства значение) А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы19 Бин с индексированным свойством public class MyBean implements java.io.Serializable { private String[] lines = new String[5];
public String[] getLines() { return lines;
} public void setLines(String[] lines) { this.lines = lines;
} public String getLines(int index) { return lines[index];
} public void setLines(int index, String line) { this.lines[index] = line;
}} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы20 Работа с индексированными свойствами А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы21 Связанные свойства Поддерживают механизм оповещения об изменениях значений свойств Обработчики реализуют интерфейс PropertyChangeListener и принимают объекты PropertyChangeEvent, содержащие имя свойства и его старое и новое значения Используется вспомогательный класс PropertyChangeSupport А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы22 Бин со связанным свойством package beans;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
public class MyBean implements java.io.Serializable { private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
public void addPropertyChangeListener( PropertyChangeListener listener) { pcs.addPropertyChangeListener(listener);
} public void removePropertyChangeListener( PropertyChangeListener listener) { pcs.removePropertyChangeListener(listener);
} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы23 Бин со связанным свойством public void setMessage(String message) { String old = this.message;
this.message = message;
pcs.firePropertyChange("message", old, message);
} public void setLines(String[] lines) { String[] old = this.lines;
this.lines = lines;
pcs.firePropertyChange("lines", old, lines);
} public void setLines(int index, String line) { String old = this.lines[index];
this.lines[index] = line;
pcs.fireIndexedPropertyChange("lines", index, old, lines);
} ...
А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы24 Работа со связанными свойствами А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы25 Контролируемые свойства Похожи на связанные свойства, но перед присвоением нового значения оно должно быть проверено обработчиками Любой обработчик в праве запретить изменение, в этом случае значение свойства останется прежним Обработчики реализуют интерфейс VetoableChangeListener и принимают объекты PropertyChangeEvent , содержащие имя свойства и его старое и новое значения Используется вспомогательный класс VetoableChangeSupport А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы26 Бин с контролируемым свойством package beans;
import java.beans.PropertyVetoException;
import java.beans.VetoableChangeListener;
import java.beans.VetoableChangeSupport;...
public class MyBean implements java.io.Serializable { private final VetoableChangeSupport vcs = new VetoableChangeSupport(this);
public void addVetoableChangeListener( VetoableChangeListener listener) { vcs.addVetoableChangeListener(listener);
} public void removeVetoableChangeListener( VetoableChangeListener listener) { vcs.removeVetoableChangeListener( listener );
} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы27 Бин с контролируемым свойством ...
public void setMessage(String message) { String old = this.message;
try { vcs.fireVetoableChange("message", old, message);
this.message = message;
pcs.firePropertyChange("message", old, message);
} catch (PropertyVetoException e) { this.message = old;
} } ...} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы28 Графические компоненты Если компоненты содержит средства визуализации, то его суперкласом должен быть: java.awt.Component если создается компонент на базе AWT javax.swing.JComponent если создается компонент на базе Swing Хотя и компоненты AWT, и компоненты Swing являются компонентами JavaBeans, не рекомендуется смешивать их в одном контейнере А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы29 Графический бин package beans;
import java.beans.*;
import javax.swing.*;
import java.awt.*;
public class MyBean extends JComponent implements java.io.Serializable { protected void paintComponent(Graphics g) { g.setColor(getForeground());
int height = g.getFontMetrics().getHeight();
if (message != null) { g.drawString(message, 0, height);
} }...
А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы30 Графический бин ...
public void setMessage(String message) { String old = this.message;
try { vcs.fireVetoableChange("message", old, message);
this.message = message;
pcs.firePropertyChange("message", old, message);
repaint();
} catch (PropertyVetoException e) { this.message = old;
} } ...} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы31 Работа с графическим бином А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы Модель делегирования обработки событий Событие – объект, описывающий изменение состояния источника Источник – объект, генерирующий события Слушатель – объект, получающий уведомление о событии Источник генерирует событие и посылает его одному или нескольким слушателям Слушатель просто ждет поступления события Получив событие, слушатель обрабатывает его и затем возвращает управление32 А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы Модель делегирования обработки событий Слушатели должны зарегистрироваться у источника – события посылаются только зарегистрировавшимся слушателям Логика кода, обрабатывающего события, отделена от логики интерфейса, генерирующего события Это реализация паттерна проектирования Observer33 А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы34 Слушатели и источники Один источник может генерировать несколько типов событий Один слушатель может быть слушателем нескольких видов событий Один слушатель может получать события одного вида от нескольких источников Слушатель может быть источником для других слушателей и для самого себя Источник может быть слушателем других источников и самого себя А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы35 События JavaBeans Класс слушателя должен наследовать от базового типа слушателя для вида событий EventListenerType Чтобы слушатель события мог быть зарегистрирован, компонент должен предоставлять метод public void add EventListenerType( EventListenerType a) Чтобы слушатель события мог отказаться от регистрации, компонент должен предоставлять метод public void remove EventListenerType( EventListenerType a) Если компонент позволяет регистрировать одновременно ограниченное количество обработчиков события, то метод добавления слушателя должен объявлять исключение java.util.TooManyListenersException Работа с событиями также может вестись на уровне средства разработки А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы36 Работа с событиями А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы37 Работа с событиями А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы38 Работа с событиями А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы39 Работа с событиями А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы40 Результат работы приложения А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы41 Персистентнось Способность объекта существовать во времени, переживая породивший его процесс Для JavaBeans реализуется за счет сериализации Все классы компонентов должны быть подготовлены к сериализации Существуют механизмы сохранения состояния бинов в xml-формат А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы42 Упаковка в Jar Класс компонента, вспомогательные классы, файлы помещаются в jar- архив В файле манифеста при этом указывается дополнительная информация: Name: beans/MyBean.class Java-Bean: True А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы43 Добавление библиотек в палитру Самарский государственный аэрокосмический университет имени академика С.П.
Королёва Самара 2014 © Составление, А.В.
Гаврилов, 2014 Объектно-ориентированное программирование Вложенные типы Занятие 7.2 А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы План лекции Вложенные типы Вложенные классы Вложенные интерфейсы Внутренние классы Особенности внутренних классов Локальные классы Анонимные классы45 А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы46 Синтаксически корректный код class MyFirstClass { public static void main(String[] args) { // ...
} class MySecondClass { private int a, b;
public MySecondClass(int a, int b) { this.a = a;
this.b = b;
} //...
}} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы47 Вложенные типы Считаются частью внешнего типа, со всеми вытекающими правами Позволяют представить тип в виде логически связанных структурных групп и контекстов Простой и эффективный инструмент объединения семантики соотносимых объектов А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы48 Статические вложенные классы Nested class Простейшая форма вложенного класса Может использоваться любыми классами, обладающими соответствующими правами доступа Классы, вложенные в интерфейсы, статичны по определению class ClassA { int a = 10;
protected static class ClassB { int b = 15;
}} public class Test { public static void main(String[] args) { ClassA.ClassB t = new ClassA.ClassB();
System.out.println(t.b);
}} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы49 Вложенные интерфейсы Всегда статичны (модификатор static по умолчанию) Доступ определяется доступом внешнего класса или интерфейса и модификаторами доступа class ClassA { public interface InterfaceB { //...
} //...
public InterfaceB get() { //...
}} public class Test { public static void main(String[] args) { ClassA.InterfaceB t = (new ClassA()).get();
}} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы50 Нестатические вложенные классы Называются внутренними (inner) классами Тип находится в контексте объекта Объект внутреннего класса всегда ассоциируется с т.н.
внешним объектом Элементы внутреннего класса имеют доступ к полям и методам внешнего объекта Это позволяет создавать семейства сильно связанных объектов А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы51 Пример внутреннего класса class ClassA { private int a = 10;
protected class ClassB { private int b = 15;
public int getA() { return a;
} public int getB() { return b;
} } public ClassB get() { return new ClassB();
} public void setB(int b, ClassB obj) { obj.b = b;
}} public class Test { public static void main(String[] args) { ClassA objA = new ClassA();
ClassA.ClassB objB = objA.get();
objA.setB(20, objB);
System.out.println(objB.getA() + " " + objB.getB());
}} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы И ещё один пример52 import java.io.*;
interface Interface extends Serializable { int getA();} class ClassA implements Serializable { private class ClassB implements Interface { private int a;
public int getA() { return a;
} } private ClassB[] arr = new ClassB[10];
{ for(int i = 0;
i < 10;
i++) { arr[i] = new ClassB();
arr[i].a = i +65;
} } public Interface getB(int index) { return arr[index];
}} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы И его результат…53 public class Test { public static void main(String[] args) throws Exception { ClassA objA = new ClassA();
Interface objB = objA.getB(5);
ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream("test.bin"));
out.writeObject(objB);
out.close();
}} ¬н♣sr♪ ClassA$ClassB иeТнwјЛ ☻ ☻I☺aL♠ this$0t◘L ClassA;xpFsr♠ ClassA hќЯѓэЄрЈ ☻ ☺[♥arrt► [LClassA$ClassB ;xpur► [LClassA$ClassB ;єВ2 ♂ т| Ў ☻ xp sq ~Aq ~♣ sq ~Bq ~♣ sq ~Cq ~♣ sq ~Dq ~♣ sq ~Eq ~♣q ~☻ sq ~Gq ~♣ sq ~Hq ~♣ sq ~Iq ~♣ sq ~Jq ~♣ А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы54 Локальные классы Описываются в теле блока Экземпляры имеют доступ к полям и методам внешнего объекта Экземпляры имеют доступ к локальным переменным, снабженным модификатором final public class ClassA { public Iterator iterator() { class Iter implements Iterator { //...
} //...
return new Iter();} А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы55 Анонимные классы Описываются непосредственно в выраженииnew и служат его частью Тип, указанный послеnew является базовым для объявляемого анонимного класса Могут расширять один класс или реализовывать один интерфейс Явно писать implements или extends нельзя Не могут иметь конструкторов А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы56 Пример анонимного класса import java.awt.*;
import javax.swing.*;
public class MyApplet extends JApplet { ...
public void init() { JButton btn = new JButton("?");
getContentPane().add(btn);
btn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ((JButton)e.getSource()).setText("!");
} });
}} Спасибо за внимание! А.В.
Гаврилов.
Объектно-ориентированное программирование Занятие 7.
Компонентная модель в ООП.
Технология JavaBeans.
Вложенные типы Дополнительные источники Хорстманн, К.
Java 2.
Библиотека профессионала.
Том 2.
Тонкости программирования [Текст] / Кей Хорстманн, Гари Корнелл.
– М.
: Издательский дом «Вильямс», 2010 г.
– 992 с.
Дейтел, Х.М.
Технологии программирования на Java 2.
Книга 1.
Графика, JavaBeans, интерфейс пользователя [Текст] / Х.М.
Дейтел, П.Дж.
Дейтел, С.И.
Сантари.
– М.
: Бином-пресс, 2003.
– 560 с.
JavaSE at a Glance [Электронный ресурс].
– Режим доступа: http://www.oracle.com/technetwork/java/javase/overview/index.html , дата доступа: 21.10.2011.
JavaSE APIs & Documentation [Электронный ресурс].
– Режим доступа: http://www.oracle.com/technetwork/java/javase/documentation/api-jsp-136079.html , дата доступа: 21.10.2011.
JavaSE Desktop technologies [Электронный ресурс].
– Режим доступа: http://www.oracle.com/technetwork/java/javase/tech/index-jsp-138795.html , дата доступа: 21.10.2011.
Trial: JavaBeans [Электронный ресурс].
– Режим доступа: http://download.oracle.com/javase/tutorial/javabeans/ , дата доступа: 21.10.2011.