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

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



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

Язык программирования Java Дмитриев Андрей Владиславович 2007.
Язык программирования Java Дмитриев Андрей Владиславович Май 2007.
Программная инженерия Андрей Дмитриев ©
Язык программирования Java Дмитриев Андрей Владиславович 2007.
Программная инженерия Андрей Дмитриев ©
Язык программирования Java Дмитриев Андрей Владиславович Май 2007.
Программная иженерия Андрей Дмитриев ©
Программная инженерия Дмитриев Андрей Владиславович
Практическое использование Java Макаревич Л. Г.. Инсталляция Java Документация в docs Прописать PATH (каталог bin в JSDK) Прописать CLASSPATH (путь к.
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
Test 6 Вопрос 1. Как можно уничтожить объект в Java? a)присвоить null всем ссылкам на объект b)вызвать Runtime.getRuntime().gc() c)вызвать метод finalize()
Java. Part 2. Спецификаторы доступа public private protected не указан – доступ в пределах пакета Могут использоваться перед классами, методами, полями.
Обработка исключительных ситуаций Андрей Дмитриев 2008.
Практическое программирование на Java к.ф.-м.н. Козлов Дмитрий Дмитриевич Кафедра АСВК, Лаборатория Вычислительных комплексов.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук.
Интерфейсы Интерфейс представляет собой полностью абстрактный класс, все методы которого абстрактны. Методы интерфейса имеют модификаторы public и abstract,
Часть 1. Основы ООП Объекты и инкапсуляция..
EXtreme Programming XP Тема 3. XP Пусть есть некоторая информационная система для банков. В качестве основной валюты для расчетов используется доллар,
Классы в С#. Перечисления С# Перечисление задает конечное множество возможных значений, которые могут получать объекты класса перечисление. [атрибуты][модификаторы]
Транксрипт:

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

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

Посетитель Каждый из доступных классов реализует метод public void accept(Visitor v){ v.visit(this); }

Посетитель (cont.) public class Employee { private int vacDays; private String name; public void accept(Visitor v) { v.visit(this); } public Employee(String name, int vd) { vacDays = sd; this.name = name; }

Посетитель (cont.) public abstract class Visitor { public abstract void visit(Employee emp); public abstract void visit(Boss emp); }

Посетитель (cont.) public class VacationVisitor extends Visitor { protected int total_days; public VacationVisitor() { total_days = 0; } public void visit(Employee emp) { total_days += emp.getVacDays(); } public void visit(Boss boss) { total_days += boss.getVacDays(); }

Посетитель (cont.) VacationVisitor vac = new VacationVisitor(); for (int i = 0; i < employees.length; i++) { employees[i].accept(vac); } System.out.println(vac.getTotalDays());

Посетитель (cont.) public class Boss extends Employee { private int bonusDays; public Boss(String name, int vacdays) { super(name,vacdays); } public void accept(Visitor v) { v.visit(this); }

Посетитель (cont.) public class VacationVisitor extends Visitor { protected int total_days; public VacationVisitor() { total_days = 0; } public void visit(Employee emp) { total_days += emp.getVacDays(); } public void visit(Boss boss) { total_days += boss.getVacDays(); total_days += boss.getBonusDays(); }

Посетитель (cont.) public void visit (Employee emp) { total_days += emp.getVacDays(); // проверка сущности if(emp instanceof Manager) { total_days += ((Manager)emp).getBonusDays (); }

Посетитель (Выводы)

Правда ли что… Класс-заместитель может не иметь корректной ссылки на целевой класс? Класс-одиночка не может иметь публичного конструктора? Паттерн Посетитель делает обратные вызовы к классу-посетителю?