Язык программирования Java Дмитриев Андрей Владиславович andrei-dmitriev@yandex.ru Май 2007.

Презентация:



Advertisements
Похожие презентации
Язык программирования Java Дмитриев Андрей Владиславович Май 2007.
Advertisements

Язык программирования Java Дмитриев Андрей Владиславович 2007.
Программная инженерия Андрей Дмитриев ©
Язык программирования Java Дмитриев Андрей Владиславович 2007.
Язык программирования Java Дмитриев Андрей Владиславович 2007.
Язык программирования Java Дмитриев Андрей Владиславович Май 2007.
Программная инженерия Андрей Дмитриев ©
Программная иженерия Андрей Дмитриев ©
Программная инженерия Дмитриев Андрей Владиславович
Лекция 2.Основы объектной модели Java 1. Содержание 1.Основы ООП. 2.Понятия «класс» и «объект». 3.Поля и методы класса. Спецификаторы доступа: public,
1 Java 13. ЭЛЕМЕНТЫ КОМПОНОВКИ И УПРАВЛЕНИЯ. 2 Элементы управления Компоненты библиотеки Swing не привязаны к конкретной платформе. Классы компонент доступны.
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
Часть 1. Основы ООП Наследование и полиморфизм.
Software engineering Дмитриев Андрей Владиславович ©
1 Обработка событий Событие – объект специального класса, описывающий изменение состояния объекта источника. Классы для обработки событий находятся в пакете.
Программная иженерия Андрей Дмитриев ©
САОД кафедра ОСУ 1 Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач ВУ.
1 Java 6. ИНТЕРФЕЙСЫ И ВНУТРЕННИЕ КЛАССЫ. 2 Интерфейсы Не являются классами Ни один из объявленных методов не может быть реализован внутри интерфейса.
Введение в GUI. Возможности графических библиотек GUI-библиотеки Java (GUI – для standalone applications или applets) AWT – вызов native-компонентов =>
Java: графический интерфейс пользователя. Swing и AWT AWT – Abstract Window Toolkit, единственный инструментарий для визуального интерфейса до 1998 года;
Транксрипт:

Язык программирования Java Дмитриев Андрей Владиславович Май 2007

Декоратор Нужно создать несколько классов, расширяющих функциональность друг друга. Некоторые из классов могут реализовывать некие свойства, не присущие другим классам. Наследование позволяет сделать это только для одного нового свойства. Декоратор позволяет организовывать цепь расширяемой функциональности без наследования. Примером служит цепь потоков ввода вывода.

Декоратор (базовый класс) public class Decorator extends JComponent { public Decorator (JComponent c) { setLayout(new BorderLayout()); add("Center", c); }

Рамка кнопки public class CoolDecorator extends Decorator { //истина когда курсор поверх кнопки boolean mouse_over: JComponent thisComp; public CoolDecorator(JComponent c) { super(c); c.addMouseListener(…); //отслеживает мышь }

Рамка кнопки (cont.) public class CoolDecorator … //описываем специфичную отрисовку public void paint(Graphics g) { super.paint(g); if (!mouse_over) { //дорисовать рамку или удалить её }

Рамка кнопки (cont.) Container jp = getContentPane(); jp.add( new CoolDecorator(new JButton("Cbutton"))); jp.add( new CoolDecorator(new JButton("Dbutton"))); jp.add(Quit = new JButton("Quit"));

Диагональ public class SlashDecorator extends Decorator { public SlashDecorator(JComponent c) { super(c); } public void paint(Graphics g) { super.paint(g); g.setColor(Color.red); g.drawLine(0, 0, w1, h1); }

Диагональ (cont.) jpanel.add(new SlashDecorator( new CoolDecorator(new JButton("Dbutton"))));

Пример декоратора Пакет java.io содержит реализованный шаблон декоратор: FilterInputStream – добавляет фильтрацию к стандартному InputStream. BufferedInputStream - добавляет буферизацию. CheckedInputStream – поддерживает контрольную сумму. DataInputStream – читает примитивные данные. и т.д.

Vector & Stack java.util.Stack является наследником класса Vector и не перекрывает его методов для доступа к данным.

Выводы Шаблон Декоратор позволяет расширять функциональность любого класса при наследовании от него или от базового класса. Необходимая функциональность добавляется при создании объекта, а не при наследовании. Дерево наследования сокращается по сравнению со стандартным подходом расширения функциональности при наследовании.