🗊Презентация Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9)

Нажмите для полного просмотра!
Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №1Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №2Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №3Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №4Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №5Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №6Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №7Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №8Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №9Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №10Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №11Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №12Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №13Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №14Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №15Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №16Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №17Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №18Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №19Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №20Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №21Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №22Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №23Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №24Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №25Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №26Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №27Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №28Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №29Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №30Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9), слайд №31

Содержание

Вы можете ознакомиться и скачать презентацию на тему Объектно-ориентированное программирование. Механизмы рефлексии. (Занятие 9). Доклад-сообщение содержит 31 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Механизмы рефлексии
Описание слайда:
Механизмы рефлексии

Слайд 2





План лекции
Рефлексия и её возможности
Участники механизма рефлексии
Получение и работа со ссылкой на описание класса
Вызов конструкторов и методов
Управление загрузкой классов
Аннотации
Описание слайда:
План лекции Рефлексия и её возможности Участники механизма рефлексии Получение и работа со ссылкой на описание класса Вызов конструкторов и методов Управление загрузкой классов Аннотации

Слайд 3





Понятие рефлексии
Рефлексия (от  лат. Reflexio
 – обращение назад) – 
обращение субъекта 
на себя самого, на свое 
знание или на свое 
собственное состояние
Рефлексия в Java – возможность программы анализировать саму себя, взаимодействуя с виртуальной машиной Java (JVM)
Описание слайда:
Понятие рефлексии Рефлексия (от лат. Reflexio – обращение назад) – обращение субъекта на себя самого, на свое знание или на свое собственное состояние Рефлексия в Java – возможность программы анализировать саму себя, взаимодействуя с виртуальной машиной Java (JVM)

Слайд 4





Возможности механизма рефлексии
Загрузка типов во время исполнения программы
Исследование структуры типов и их элементов
Создание экземпляров классов
Вызов методов
Загрузка классов из набора байтов
Описание слайда:
Возможности механизма рефлексии Загрузка типов во время исполнения программы Исследование структуры типов и их элементов Создание экземпляров классов Вызов методов Загрузка классов из набора байтов

Слайд 5





Участники механизма рефлексии
Класс java.lang.Class
Класс является метаклассом по отношению к другим типам
Экземпляры класса Class описывают классы и интерфейсы выполняемого приложения
Методы класса Class позволяют исследовать содержимое описываемого класса и его свойства
Класс java.lang.ClassLoader
Реализует механизмы загрузки
 классов
Описание слайда:
Участники механизма рефлексии Класс java.lang.Class Класс является метаклассом по отношению к другим типам Экземпляры класса Class описывают классы и интерфейсы выполняемого приложения Методы класса Class позволяют исследовать содержимое описываемого класса и его свойства Класс java.lang.ClassLoader Реализует механизмы загрузки классов

Слайд 6





Участники механизма рефлексии
Пакет java.lang.reflect
Содержит ряд дополнительных и вспомогательных классов
Field
	Описывает поле объекта
Method
	Описывает метод объекта
Constructor
	Описывает конструктор объекта
Modifier
	Инкапсулирует работу с модификаторами
Array
	Инкапсулирует работу с массивами
Описание слайда:
Участники механизма рефлексии Пакет java.lang.reflect Содержит ряд дополнительных и вспомогательных классов Field Описывает поле объекта Method Описывает метод объекта Constructor Описывает конструктор объекта Modifier Инкапсулирует работу с модификаторами Array Инкапсулирует работу с массивами

Слайд 7





Получение представления класса
Метод Class Object.getClass()
Возвращает ссылку на представление класса, экземпляром которого является объект
Псевдополе Object.class
Ссылка на представление указанного класса
Метод static Class Class.forName(...)
Возвращает ссылку на представление класса, полное имя которого указывается параметром типа String
Описание слайда:
Получение представления класса Метод Class Object.getClass() Возвращает ссылку на представление класса, экземпляром которого является объект Псевдополе Object.class Ссылка на представление указанного класса Метод static Class Class.forName(...) Возвращает ссылку на представление класса, полное имя которого указывается параметром типа String

Слайд 8





Получение представления класса
Метод Class[] Class.getClasses()
Возвращает ссылку на массив ссылок на объекты Class вложенных типов
Метод Class Class.getDeclaringClass()
Для вложенных типов возвращает ссылку на объект Class внешнего типа
Метод Class[] Class.getInterfaces()
Возвращает ссылки на описания интерфейсов, от которых наследует тип
Метод Class Class.getSuperclass()
Возвращает ссылку на описание родительского класса
Описание слайда:
Получение представления класса Метод Class[] Class.getClasses() Возвращает ссылку на массив ссылок на объекты Class вложенных типов Метод Class Class.getDeclaringClass() Для вложенных типов возвращает ссылку на объект Class внешнего типа Метод Class[] Class.getInterfaces() Возвращает ссылки на описания интерфейсов, от которых наследует тип Метод Class Class.getSuperclass() Возвращает ссылку на описание родительского класса

Слайд 9





Пример получения информации о классе
Описание слайда:
Пример получения информации о классе

Слайд 10





Возможности класса Class
Загрузка класса в JVM по его имени
static Class forName(String name)
Определение вида типа
boolean isInterface()
boolean isLocalClass()
Получение родительских типов
Class getSuperclass()
Class[] getInterfaces() 
Получение вложенных типов
Class[] getClasses()
Создание объекта
Object newInstance()
Описание слайда:
Возможности класса Class Загрузка класса в JVM по его имени static Class forName(String name) Определение вида типа boolean isInterface() boolean isLocalClass() Получение родительских типов Class getSuperclass() Class[] getInterfaces() Получение вложенных типов Class[] getClasses() Создание объекта Object newInstance()

Слайд 11





Возможности класса Class
Получение списка всех полей и конкретного поля по имени
Field[] getFields()
Field getField(...)
Получение списка всех методов и конкретного метода по имени и списку типов параметров 
Method[] getMethods()
Method[] getMethod(...)
Получение списка всех конструкторов и конкретного конструктора по списку типов параметров
Constructor[] getConstructors()
Constructor getConstructor(...)
Описание слайда:
Возможности класса Class Получение списка всех полей и конкретного поля по имени Field[] getFields() Field getField(...) Получение списка всех методов и конкретного метода по имени и списку типов параметров Method[] getMethods() Method[] getMethod(...) Получение списка всех конструкторов и конкретного конструктора по списку типов параметров Constructor[] getConstructors() Constructor getConstructor(...)

Слайд 12





Передача параметров 
в методы
Поскольку на момент написания программы типы и даже количество параметров неизвестно, используется другой подход:
Ссылки на все параметры в порядке их следования помещаются в массив типа Object
Если параметр имеет примитивный тип, то в массив помещается ссылка на экземпляр класса-оболочки соответствующего типа, содержащий необходимое значение
Возвращается всегда тип Object
Для ссылочного типа используется приведение типа или рефлексивное исследование
Для примитивных типов возвращается ссылка на экземпляр класса-оболочки, содержащий возвращенное значение
Описание слайда:
Передача параметров в методы Поскольку на момент написания программы типы и даже количество параметров неизвестно, используется другой подход: Ссылки на все параметры в порядке их следования помещаются в массив типа Object Если параметр имеет примитивный тип, то в массив помещается ссылка на экземпляр класса-оболочки соответствующего типа, содержащий необходимое значение Возвращается всегда тип Object Для ссылочного типа используется приведение типа или рефлексивное исследование Для примитивных типов возвращается ссылка на экземпляр класса-оболочки, содержащий возвращенное значение

Слайд 13





Создание экземпляров классов
Метод Object Class.newInstance()
Возвращает ссылку на новый экземпляр класса, используется конструктор по умолчанию
Метод
Object Constructor.newInstance(
   Object[] initArgs)
Возвращает ссылку на новый экземпляр класса, с использованием конструктора и указанными параметрами конструктора
Описание слайда:
Создание экземпляров классов Метод Object Class.newInstance() Возвращает ссылку на новый экземпляр класса, используется конструктор по умолчанию Метод Object Constructor.newInstance( Object[] initArgs) Возвращает ссылку на новый экземпляр класса, с использованием конструктора и указанными параметрами конструктора

Слайд 14





Вызов методов
Прямой вызов
Если на момент написания кода известен тип-предок загружаемого класса
Приведение типа и вызов метода
Вызов через экземпляр класса Method
Object Method.invoke(Object obj, Object[] args)
obj – ссылка объект, у которого должен быть вызван метод
принято передавать null, если метод статический
args – список параметров для вызова методов
Описание слайда:
Вызов методов Прямой вызов Если на момент написания кода известен тип-предок загружаемого класса Приведение типа и вызов метода Вызов через экземпляр класса Method Object Method.invoke(Object obj, Object[] args) obj – ссылка объект, у которого должен быть вызван метод принято передавать null, если метод статический args – список параметров для вызова методов

Слайд 15





Пример вызова
статического метода
Описание слайда:
Пример вызова статического метода

Слайд 16





Класс ClassLoader
Экземпляры класса отвечают
за загрузку классов 
в виртуальную машину
Это абстрактный класс, 
не имеющий ни одного 
абстрактного метода
Классы-наследники должны в каком-то смысле расширять возможности виртуальной машины по загрузке классов
Объекты загрузчиков образуют иерархию (родительский объект указывается как параметр защищённых конструкторов)
Описание слайда:
Класс ClassLoader Экземпляры класса отвечают за загрузку классов в виртуальную машину Это абстрактный класс, не имеющий ни одного абстрактного метода Классы-наследники должны в каком-то смысле расширять возможности виртуальной машины по загрузке классов Объекты загрузчиков образуют иерархию (родительский объект указывается как параметр защищённых конструкторов)

Слайд 17





Основные методы класса ClassLoader
public Class loadClass(String name)
Проверяет, не был ли класс загружен раньше
Вызывает аналогичный метод родительского объекта
Вызывает метод findClass(), чтобы найти класс
Не стоит переопределять этот метод
protected Class findClass(String name)
Ищет и загружает класс по имени специфическим для данного загрузчика способом
Этот метод и нужно переопределять
protected final Class defineClass(
String name, byte[] b, int off, int len)
Загружает класс из указанного набора байтов
Описание слайда:
Основные методы класса ClassLoader public Class loadClass(String name) Проверяет, не был ли класс загружен раньше Вызывает аналогичный метод родительского объекта Вызывает метод findClass(), чтобы найти класс Не стоит переопределять этот метод protected Class findClass(String name) Ищет и загружает класс по имени специфическим для данного загрузчика способом Этот метод и нужно переопределять protected final Class defineClass( String name, byte[] b, int off, int len) Загружает класс из указанного набора байтов

Слайд 18





Пример использования загрузчика классов
Описание слайда:
Пример использования загрузчика классов

Слайд 19





Пример использования загрузчика классов
Описание слайда:
Пример использования загрузчика классов

Слайд 20





Метаданные
В основе механизма метаданных лежат так называемые аннотации
Аннотация – это «интерфейс» специфического вида, позволяющий задавать описания классов и их элементов
Пример объявления аннотации:
Описание слайда:
Метаданные В основе механизма метаданных лежат так называемые аннотации Аннотация – это «интерфейс» специфического вида, позволяющий задавать описания классов и их элементов Пример объявления аннотации:

Слайд 21





Особенности аннотаций
Члены-методы имеют, скорее, смысл полей
Тела этих методов будут создаваться автоматически
Аннотациями можно снабжать классы, методы, поля, параметры, константы перечислимых типов и аннотации
Пример снабжения аннотацией:
Описание слайда:
Особенности аннотаций Члены-методы имеют, скорее, смысл полей Тела этих методов будут создаваться автоматически Аннотациями можно снабжать классы, методы, поля, параметры, константы перечислимых типов и аннотации Пример снабжения аннотацией:

Слайд 22





Особенности аннотаций
В любом случае аннотация предшествует объявлению
Все аннотации наследуют от интерфейса java.lang.annotation.Annotation
Во время выполнения программы информация об аннотациях извлекается средствами рефлексии
После получения ссылки на объект аннотации у него можно вызывать методы, возвращающие заданные при аннотировании значения
Описание слайда:
Особенности аннотаций В любом случае аннотация предшествует объявлению Все аннотации наследуют от интерфейса java.lang.annotation.Annotation Во время выполнения программы информация об аннотациях извлекается средствами рефлексии После получения ссылки на объект аннотации у него можно вызывать методы, возвращающие заданные при аннотировании значения

Слайд 23





Особенности аннотаций
Для методов допускаются значения по умолчанию
Описание слайда:
Особенности аннотаций Для методов допускаются значения по умолчанию

Слайд 24





Особенности аннотаций
Бывают одночленные аннотации
	Содержат один член и имеют сокращенную форму записи
Бывают аннотации-маркеры
	Предназначены только для пометки элементов
Описание слайда:
Особенности аннотаций Бывают одночленные аннотации Содержат один член и имеют сокращенную форму записи Бывают аннотации-маркеры Предназначены только для пометки элементов

Слайд 25





Правила сохранения аннотаций
Правила сохранения аннотаций определяют, в какой момент аннотации будут уничтожены
Правила задаются с помощью перечислимого типа java.lang.annotation.RetentionPolicy
Существует три правила:
SOURCE
аннотации отбрасываются на этапе компиляции
CLASS
сохраняются в байт-коде, но недоступны JVM во время выполнения программы
RUNTIME
доступны JVM во время выполнения программы
В зависимости от цели аннотации ей задается то или иное правило сохранения
Описание слайда:
Правила сохранения аннотаций Правила сохранения аннотаций определяют, в какой момент аннотации будут уничтожены Правила задаются с помощью перечислимого типа java.lang.annotation.RetentionPolicy Существует три правила: SOURCE аннотации отбрасываются на этапе компиляции CLASS сохраняются в байт-коде, но недоступны JVM во время выполнения программы RUNTIME доступны JVM во время выполнения программы В зависимости от цели аннотации ей задается то или иное правило сохранения

Слайд 26





Правила сохранения аннотаций
Задание правила сохранения производится с помощью аннотации java.lang.annotation.Retention
По умолчанию задается правило CLASS
Пример задания правила сохранения:
Описание слайда:
Правила сохранения аннотаций Задание правила сохранения производится с помощью аннотации java.lang.annotation.Retention По умолчанию задается правило CLASS Пример задания правила сохранения:

Слайд 27





Стандартные аннотации
(работа с аннотациями)
@Retention
Применяется к аннотациям, позволяет задать правило сохранения
@Documented
Применяется к аннотациям, указывает, что она должна быть документирована
@Target
Применяется к аннотациям, позволяет указать типы объектов, к которым данная аннотация может применяться
@Inherited
Применяется к аннотациям классов, указывает, что данная аннотация будет унаследована потомками класса
Описание слайда:
Стандартные аннотации (работа с аннотациями) @Retention Применяется к аннотациям, позволяет задать правило сохранения @Documented Применяется к аннотациям, указывает, что она должна быть документирована @Target Применяется к аннотациям, позволяет указать типы объектов, к которым данная аннотация может применяться @Inherited Применяется к аннотациям классов, указывает, что данная аннотация будет унаследована потомками класса

Слайд 28





Стандартные аннотации
(инструкции компилятора)
@Override
Применяется к методам, указывает, что метод должен переопределять метод родительского класса или реализовывать метод родительского интерфейса
@Deprecated
Указывает на то, что объявление является устаревшим или вышедшим из употребления
@SupressWarnings
Указывает на то, что указанные виды предупреждений компилятора не будут показываться
Описание слайда:
Стандартные аннотации (инструкции компилятора) @Override Применяется к методам, указывает, что метод должен переопределять метод родительского класса или реализовывать метод родительского интерфейса @Deprecated Указывает на то, что объявление является устаревшим или вышедшим из употребления @SupressWarnings Указывает на то, что указанные виды предупреждений компилятора не будут показываться

Слайд 29





Особенности аннотаций
Аннотация не может наследовать другую аннотацию
Методы аннотаций не должны иметь параметров
Возвращаемый тип методов:
примитивный тип
String 
Class
перечислимый тип
другой тип аннотации
массив элементов одного из вышеперечисленных типов
Аннотации не могут быть настраиваемыми
Методы не могут объявлять исключения
Описание слайда:
Особенности аннотаций Аннотация не может наследовать другую аннотацию Методы аннотаций не должны иметь параметров Возвращаемый тип методов: примитивный тип String Class перечислимый тип другой тип аннотации массив элементов одного из вышеперечисленных типов Аннотации не могут быть настраиваемыми Методы не могут объявлять исключения

Слайд 30





Спасибо за внимание!
Описание слайда:
Спасибо за внимание!

Слайд 31





Дополнительные источники
Арнолд, К. Язык программирования Java [Текст] / Кен Арнолд, Джеймс Гослинг, Дэвид Холмс. – М. : Издательский дом «Вильямс», 2001. – 624 с.
Вязовик, Н.А. Программирование на Java. Курс лекций [Текст] / Н.А. Вязовик. – М. : Интернет-университет информационных технологий, 2003. – 592 с.
Эккель, Б. Философия Java [Текст] / Брюс Эккель. – СПб. : Питер, 2011. – 640 с.
Шилдт, Г. Java 2, v5.0 (Tiger). Новые возможности [Текст] / Герберт Шилдт. – СПб. : БХВ-Петербург, 2005. – 206 с.
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.
Описание слайда:
Дополнительные источники Арнолд, К. Язык программирования Java [Текст] / Кен Арнолд, Джеймс Гослинг, Дэвид Холмс. – М. : Издательский дом «Вильямс», 2001. – 624 с. Вязовик, Н.А. Программирование на Java. Курс лекций [Текст] / Н.А. Вязовик. – М. : Интернет-университет информационных технологий, 2003. – 592 с. Эккель, Б. Философия Java [Текст] / Брюс Эккель. – СПб. : Питер, 2011. – 640 с. Шилдт, Г. Java 2, v5.0 (Tiger). Новые возможности [Текст] / Герберт Шилдт. – СПб. : БХВ-Петербург, 2005. – 206 с. 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.



Похожие презентации
Mypresentation.ru
Загрузить презентацию