🗊Презентация 08. Miscellaneous (java)

Нажмите для полного просмотра!
08. Miscellaneous (java), слайд №108. Miscellaneous (java), слайд №208. Miscellaneous (java), слайд №308. Miscellaneous (java), слайд №408. Miscellaneous (java), слайд №508. Miscellaneous (java), слайд №608. Miscellaneous (java), слайд №708. Miscellaneous (java), слайд №808. Miscellaneous (java), слайд №908. Miscellaneous (java), слайд №1008. Miscellaneous (java), слайд №1108. Miscellaneous (java), слайд №1208. Miscellaneous (java), слайд №1308. Miscellaneous (java), слайд №1408. Miscellaneous (java), слайд №1508. Miscellaneous (java), слайд №1608. Miscellaneous (java), слайд №1708. Miscellaneous (java), слайд №1808. Miscellaneous (java), слайд №1908. Miscellaneous (java), слайд №2008. Miscellaneous (java), слайд №2108. Miscellaneous (java), слайд №2208. Miscellaneous (java), слайд №2308. Miscellaneous (java), слайд №2408. Miscellaneous (java), слайд №2508. Miscellaneous (java), слайд №2608. Miscellaneous (java), слайд №2708. Miscellaneous (java), слайд №2808. Miscellaneous (java), слайд №2908. Miscellaneous (java), слайд №3008. Miscellaneous (java), слайд №3108. Miscellaneous (java), слайд №3208. Miscellaneous (java), слайд №3308. Miscellaneous (java), слайд №3408. Miscellaneous (java), слайд №3508. Miscellaneous (java), слайд №3608. Miscellaneous (java), слайд №3708. Miscellaneous (java), слайд №3808. Miscellaneous (java), слайд №3908. Miscellaneous (java), слайд №4008. Miscellaneous (java), слайд №4108. Miscellaneous (java), слайд №4208. Miscellaneous (java), слайд №4308. Miscellaneous (java), слайд №4408. Miscellaneous (java), слайд №4508. Miscellaneous (java), слайд №4608. Miscellaneous (java), слайд №4708. Miscellaneous (java), слайд №4808. Miscellaneous (java), слайд №4908. Miscellaneous (java), слайд №5008. Miscellaneous (java), слайд №5108. Miscellaneous (java), слайд №5208. Miscellaneous (java), слайд №5308. Miscellaneous (java), слайд №5408. Miscellaneous (java), слайд №5508. Miscellaneous (java), слайд №5608. Miscellaneous (java), слайд №5708. Miscellaneous (java), слайд №5808. Miscellaneous (java), слайд №5908. Miscellaneous (java), слайд №6008. Miscellaneous (java), слайд №6108. Miscellaneous (java), слайд №6208. Miscellaneous (java), слайд №6308. Miscellaneous (java), слайд №6408. Miscellaneous (java), слайд №6508. Miscellaneous (java), слайд №6608. Miscellaneous (java), слайд №6708. Miscellaneous (java), слайд №6808. Miscellaneous (java), слайд №6908. Miscellaneous (java), слайд №7008. Miscellaneous (java), слайд №7108. Miscellaneous (java), слайд №7208. Miscellaneous (java), слайд №7308. Miscellaneous (java), слайд №7408. Miscellaneous (java), слайд №7508. Miscellaneous (java), слайд №7608. Miscellaneous (java), слайд №7708. Miscellaneous (java), слайд №7808. Miscellaneous (java), слайд №7908. Miscellaneous (java), слайд №8008. Miscellaneous (java), слайд №8108. Miscellaneous (java), слайд №8208. Miscellaneous (java), слайд №8308. Miscellaneous (java), слайд №8408. Miscellaneous (java), слайд №8508. Miscellaneous (java), слайд №86

Содержание

Вы можете ознакомиться и скачать презентацию на тему 08. Miscellaneous (java). Доклад-сообщение содержит 86 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

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


Слайд 1





08.
Miscellaneous
Информатика, ИТИС, 2 курс
М.М.Абрамский
2016
Описание слайда:
08. Miscellaneous Информатика, ИТИС, 2 курс М.М.Абрамский 2016

Слайд 2





Вспоминаем. Структура проекта на Servlets (как должно быть)
MyHelloProject
    css
        style.css
    WEB-INF
        classes
			…иерархия пакетов…
			HelloServlet.class
        web.xml

Кто формирует эту структуру, чтобы все заработало?
Описание слайда:
Вспоминаем. Структура проекта на Servlets (как должно быть) MyHelloProject css style.css WEB-INF classes …иерархия пакетов… HelloServlet.class web.xml Кто формирует эту структуру, чтобы все заработало?

Слайд 3





Сравните с исходниками
MyHelloProject
    src
 		…иерархия пакетов…
		HelloServlet.java
    web
        css
            style.css
        WEB-INF
            web.xml
Описание слайда:
Сравните с исходниками MyHelloProject src …иерархия пакетов… HelloServlet.java web css style.css WEB-INF web.xml

Слайд 4





Можно вручную
Вручную компилируем все java-файлы,
В папке webapps сервера Tomcat создаем описанную структуру, копируя туда .class-файлы,
???
Profit!!!
Какие минусы такого подхода?
Описание слайда:
Можно вручную Вручную компилируем все java-файлы, В папке webapps сервера Tomcat создаем описанную структуру, копируя туда .class-файлы, ??? Profit!!! Какие минусы такого подхода?

Слайд 5





Можно вручную
Вручную компилируем все java-файлы,
В папке webapps сервера Tomcat создаем описанную структуру, копируя туда .class-файлы,
???
Profit!!!
Какие минусы такого подхода?
Описание слайда:
Можно вручную Вручную компилируем все java-файлы, В папке webapps сервера Tomcat создаем описанную структуру, копируя туда .class-файлы, ??? Profit!!! Какие минусы такого подхода?

Слайд 6





Автоматизация сборки
Автоматизация описанных процессов (компиляция, тестирование, развертывание и т.п.) ускоряет работу, избавляет от человеческого фактора, и т.д.
Сборщики:
Ant
Maven
Gradle
! …
Описание слайда:
Автоматизация сборки Автоматизация описанных процессов (компиляция, тестирование, развертывание и т.п.) ускоряет работу, избавляет от человеческого фактора, и т.д. Сборщики: Ant Maven Gradle ! …

Слайд 7





Сборка. 
Избирательная терминология

Artifact – конкретная библиотека / созданный экземпляр проекта.
WAR-файл – упакованное веб-приложение, готовое к деплою (по аналогии с jar),
Деплой (deploy) – развертывание свежей версии рабочих файлов приложения на сервере.
Зависимость (dependency) – использование сторонней библиотеки определенной версии в Java-приложении
Описание слайда:
Сборка. Избирательная терминология Artifact – конкретная библиотека / созданный экземпляр проекта. WAR-файл – упакованное веб-приложение, готовое к деплою (по аналогии с jar), Деплой (deploy) – развертывание свежей версии рабочих файлов приложения на сервере. Зависимость (dependency) – использование сторонней библиотеки определенной версии в Java-приложении

Слайд 8





Apache Ant
“Another Neat Tool”,
Аналог make,
!google make
Императивный подход,
? Что это такое?
Скрипт пишется на XML.
Описание слайда:
Apache Ant “Another Neat Tool”, Аналог make, !google make Императивный подход, ? Что это такое? Скрипт пишется на XML.

Слайд 9





Apache Ant
Targets – цели (какой именно процесс сборки выполняется),
Примеры:
build – компиляция и создание jar/war,
clean – удаление временных файлов,
deploy – развертывание,
и т.п.
Tasks – задания, выполняемые в рамках целей
Примеры:
javac – компиляция java-файлов,
copy – копирование файлов,
exec – выполнение внешней команды,
и т.п.
Описание слайда:
Apache Ant Targets – цели (какой именно процесс сборки выполняется), Примеры: build – компиляция и создание jar/war, clean – удаление временных файлов, deploy – развертывание, и т.п. Tasks – задания, выполняемые в рамках целей Примеры: javac – компиляция java-файлов, copy – копирование файлов, exec – выполнение внешней команды, и т.п.

Слайд 10





Apache Ant. Отрывки
Описание слайда:
Apache Ant. Отрывки

Слайд 11





Apache Maven
Maven - “Собиратель знания” (идиш),
Декларативный подход,
? Что это такое?
Сборка на основе описания структуры проекта на языке XML.
Описание слайда:
Apache Maven Maven - “Собиратель знания” (идиш), Декларативный подход, ? Что это такое? Сборка на основе описания структуры проекта на языке XML.

Слайд 12





Apache Maven. Project Object Model. 
pom.xml (Wikipedia example)
Описание слайда:
Apache Maven. Project Object Model. pom.xml (Wikipedia example)

Слайд 13





Apache Maven. Плагины
Непосредственно выполняют необходимые задачи
mvn имя_плагина:имя_цели
mvn compiler:compile
mvn archetype:generate
Описание слайда:
Apache Maven. Плагины Непосредственно выполняют необходимые задачи mvn имя_плагина:имя_цели mvn compiler:compile mvn archetype:generate

Слайд 14





Apache Maven. Жизненный цикл
Создание по образцу (archetype),
Компиляция (compile),
Тестирование (test), 
Упаковка (package), 
Локальное развертывание (install),
Удаленное развертывание (deploy).
Описание слайда:
Apache Maven. Жизненный цикл Создание по образцу (archetype), Компиляция (compile), Тестирование (test), Упаковка (package), Локальное развертывание (install), Удаленное развертывание (deploy).

Слайд 15





Apache Maven. Архетипы
Позволяют создавать проект с нужной структурой и заголовками конфигурационных файлов

Пример вызова плагина для создания проекта по архетипу:
mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp
Описание слайда:
Apache Maven. Архетипы Позволяют создавать проект с нужной структурой и заголовками конфигурационных файлов Пример вызова плагина для создания проекта по архетипу: mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp

Слайд 16





Примерный pom.xml для нашего приложения
Описание слайда:
Примерный pom.xml для нашего приложения

Слайд 17





Maven-структура нашего приложения
src
	main
		java
			…иерархия пакетов…
			HelloServlet.java
		…
		webapp
			WEB-INF
				web.xml
	…
	pom.xml
“mvn package” создаст war-файл, с которым можно делать deploy или explode.
Описание слайда:
Maven-структура нашего приложения src main java …иерархия пакетов… HelloServlet.java … webapp WEB-INF web.xml … pom.xml “mvn package” создаст war-файл, с которым можно делать deploy или explode.

Слайд 18





Хардкод!
Описание слайда:
Хардкод!

Слайд 19





Хардкод (Hardcode).
Случай с числами
Описание слайда:
Хардкод (Hardcode). Случай с числами

Слайд 20





Хардкод. Еще хуже
Описание слайда:
Хардкод. Еще хуже

Слайд 21





Константы как частный 
способ решения проблемы
Описание слайда:
Константы как частный способ решения проблемы

Слайд 22





Более частый случай – строковый хардкод
Описание слайда:
Более частый случай – строковый хардкод

Слайд 23





Одно из решений – 
строковые константы
Проблемы:
название и значение дублируют друг друга,
где хранить, чтобы обращаться?
как быть с Summer и SUMMER?
…
Описание слайда:
Одно из решений – строковые константы Проблемы: название и значение дублируют друг друга, где хранить, чтобы обращаться? как быть с Summer и SUMMER? …

Слайд 24





Другое решение
Проблемы:
Откуда знать весь диапазон значений и как его перебрать?
Если x == 0, то Season.WINTER == x, но действительно ли корректно считать левую переменную x хранящей значение «Зима»
Описание слайда:
Другое решение Проблемы: Откуда знать весь диапазон значений и как его перебрать? Если x == 0, то Season.WINTER == x, но действительно ли корректно считать левую переменную x хранящей значение «Зима»

Слайд 25





Итак
Нужен тип данных:
Чтобы у переменных этого типа явно было видно значение,
Чтобы можно было легко перебрать все его значения,
Чтобы не хардкодить,
Он есть! И это…
Описание слайда:
Итак Нужен тип данных: Чтобы у переменных этого типа явно было видно значение, Чтобы можно было легко перебрать все его значения, Чтобы не хардкодить, Он есть! И это…

Слайд 26





Перечисления (Enumerations)
Объявление:
Использование:
Season s = Season.SPRING;
Описание слайда:
Перечисления (Enumerations) Объявление: Использование: Season s = Season.SPRING;

Слайд 27





Решаем проблемы.
Перебираем с помощью values()
values() возвращает массив из всех значений перечисления
Описание слайда:
Решаем проблемы. Перебираем с помощью values() values() возвращает массив из всех значений перечисления

Слайд 28





Решаем проблемы. Сравнивать можно только с другими значениями перечисления
Описание слайда:
Решаем проблемы. Сравнивать можно только с другими значениями перечисления

Слайд 29





Решаем проблемы. Ввод
Значение можно восстановить по строке 
Надо вводить строку с точностью до регистра!
Описание слайда:
Решаем проблемы. Ввод Значение можно восстановить по строке Надо вводить строку с точностью до регистра!

Слайд 30





Все гораздо интереснее
Вы думаете, эти WINTER, SUMMER – просто константы?
А вот и нет! Это объекты!
Описание слайда:
Все гораздо интереснее Вы думаете, эти WINTER, SUMMER – просто константы? А вот и нет! Это объекты!

Слайд 31





Другой enum. Цвет
У каждого цвета есть значения RGB. 
Наша потребность:
Чтобы каждый цвет знал свои значения,
Чтобы каждый цвет мог возвращать строку-представление RGB
Для этого изменим enum.
Описание слайда:
Другой enum. Цвет У каждого цвета есть значения RGB. Наша потребность: Чтобы каждый цвет знал свои значения, Чтобы каждый цвет мог возвращать строку-представление RGB Для этого изменим enum.

Слайд 32





«В новом цвете»
Описание слайда:
«В новом цвете»

Слайд 33





«В новом цвете». Использование
Описание слайда:
«В новом цвете». Использование

Слайд 34





мета
Описание слайда:
мета

Слайд 35





Слово «Мета»
Греческое слово
μετά
«между, через, после, за, следующее»
В: Что такое метаданные?
Описание слайда:
Слово «Мета» Греческое слово μετά «между, через, после, за, следующее» В: Что такое метаданные?

Слайд 36





Слово «Мета»
Греческое слово
μετά
«между, через, после, за, следующее»
В: Что такое метаданные?
О: Данные о данных.
Описание слайда:
Слово «Мета» Греческое слово μετά «между, через, после, за, следующее» В: Что такое метаданные? О: Данные о данных.

Слайд 37





Метаданные в программах
Не влияют на непосредственную работу программы,
Но могут быть выявлены другими программами на этапе компилирования или разработки, которые при этом скорректируют свою работу.
Описание слайда:
Метаданные в программах Не влияют на непосредственную работу программы, Но могут быть выявлены другими программами на этапе компилирования или разработки, которые при этом скорректируют свою работу.

Слайд 38


08. Miscellaneous (java), слайд №38
Описание слайда:

Слайд 39





С MyThread все было бы в порядке, если бы применили..
Компилятор бы просто не скомпилировал эту программу, т.к. метод, над которым написано @Override, не является переопределением.
Увидев ошибку компилятора, мы бы исправили сигнатуру
Описание слайда:
С MyThread все было бы в порядке, если бы применили.. Компилятор бы просто не скомпилировал эту программу, т.к. метод, над которым написано @Override, не является переопределением. Увидев ошибку компилятора, мы бы исправили сигнатуру

Слайд 40





Заметка про Override
Нужда для программиста, а не для программы
Запрещает компилирование, но при этом никак не влияет на выполнение метода (при правильном случае что она есть, что ее нет)
Override – аннотация.
А аннотации – это и есть метаданные.
Описание слайда:
Заметка про Override Нужда для программиста, а не для программы Запрещает компилирование, но при этом никак не влияет на выполнение метода (при правильном случае что она есть, что ее нет) Override – аннотация. А аннотации – это и есть метаданные.

Слайд 41





Про аннотации
Не влияют напрямую на работу кода, но могут быть обнаружены другими средствами
Могут быть аннотированы класс, метод, параметр, атрибут и т.д.
Другие примеры аннотаций?
@Deprecated
@SuppressWarnings
Описание слайда:
Про аннотации Не влияют напрямую на работу кода, но могут быть обнаружены другими средствами Могут быть аннотированы класс, метод, параметр, атрибут и т.д. Другие примеры аннотаций? @Deprecated @SuppressWarnings

Слайд 42





Создание собственных аннотаций
Самая простая
Использование:
Описание слайда:
Создание собственных аннотаций Самая простая Использование:

Слайд 43





Методы-члены аннотации
Объявляются как методы:
Но используются как поля:
Описание слайда:
Методы-члены аннотации Объявляются как методы: Но используются как поля:

Слайд 44





Значения по умолчанию
Внимание на year:
Теперь можно делать и так,
И так:
Описание слайда:
Значения по умолчанию Внимание на year: Теперь можно делать и так, И так:

Слайд 45





Аннотации, аннотирующие аннотации (лежат в java.lang.annotation)
@Retention – политика удержания аннотации (по-деревенски: до какого этапа компилирования или выполнения аннотация видна)
Значения лежат в перечислении RetentionPolicy:
SOURCE – отбрасываются при компиляции
CLASS – сохраняются в байт-коде, но недоступны во время работы
RUNTIME – сохраняются в байт-коде и доступны во время выполнения		
? Какой Retention у Override?
Описание слайда:
Аннотации, аннотирующие аннотации (лежат в java.lang.annotation) @Retention – политика удержания аннотации (по-деревенски: до какого этапа компилирования или выполнения аннотация видна) Значения лежат в перечислении RetentionPolicy: SOURCE – отбрасываются при компиляции CLASS – сохраняются в байт-коде, но недоступны во время работы RUNTIME – сохраняются в байт-коде и доступны во время выполнения ? Какой Retention у Override?

Слайд 46





Аннотации, аннотирующие аннотации (лежат в java.lang.annotation)
@Target – к чему может быть применена аннотация? Значения – из перечисления ElementType (из того же пакета):
FIELD – поле
METHOD – метод
TYPE – класс, интерфейс, перечисление
…
Может применяться к нескольким:
@Target({ElementType.TYPE, ElementType.METHOD})
Описание слайда:
Аннотации, аннотирующие аннотации (лежат в java.lang.annotation) @Target – к чему может быть применена аннотация? Значения – из перечисления ElementType (из того же пакета): FIELD – поле METHOD – метод TYPE – класс, интерфейс, перечисление … Может применяться к нескольким: @Target({ElementType.TYPE, ElementType.METHOD})

Слайд 47





Аннотации, аннотирующие аннотации
Чтобы наш Author был доступен во время работы и применялся к объявлениям класса, интерфейса:
Описание слайда:
Аннотации, аннотирующие аннотации Чтобы наш Author был доступен во время работы и применялся к объявлениям класса, интерфейса:

Слайд 48





вспомним ооп
Описание слайда:
вспомним ооп

Слайд 49





Вспомним ООП. 
Что есть у каждого класса
Название класса
Название пакета
Атрибуты
Методы
?…
Описание слайда:
Вспомним ООП. Что есть у каждого класса Название класса Название пакета Атрибуты Методы ?…

Слайд 50





Еще раз
Класс:
	Имя
	Имя пакета
	Набор атрибутов
	Набор методов
	…
Описание слайда:
Еще раз Класс: Имя Имя пакета Набор атрибутов Набор методов …

Слайд 51





In English, please
Class:
	name
	package name
	List of attributes
	List of methods
	…
Описание слайда:
In English, please Class: name package name List of attributes List of methods …

Слайд 52





Со шрифтом “Courier New” 
выглядит «по-программистски»
Class:
	name
	packageName
	List attributes
	List methods
	…
Описание слайда:
Со шрифтом “Courier New” выглядит «по-программистски» Class: name packageName List attributes List methods …

Слайд 53





Wait, what?

class Class {
	String name;
	String packageName;
	List<Attribute> attributes;
	List<Method> methods;
	…
}
Описание слайда:
Wait, what? class Class { String name; String packageName; List<Attribute> attributes; List<Method> methods; … }

Слайд 54





Получается, Класс (Class) – тоже сущность (а сущность – это класс);
Получается, Класс (Class) – тоже сущность (а сущность – это класс);
А все конкретные реализованные классы (String, User, ComplexNumber – ДА ВСЕ) – экземпляры класса Class.
Значит, все инструменты ООП мы можем применить к самим классам как к сущностям. 
Это и называется рефлексией!
Описание слайда:
Получается, Класс (Class) – тоже сущность (а сущность – это класс); Получается, Класс (Class) – тоже сущность (а сущность – это класс); А все конкретные реализованные классы (String, User, ComplexNumber – ДА ВСЕ) – экземпляры класса Class. Значит, все инструменты ООП мы можем применить к самим классам как к сущностям. Это и называется рефлексией!

Слайд 55





Класс Class
Служебный класс, экземпляры которого хранят конкретную информацию о конкретном классе.
Объект класса Class для String, объект класса Class для Thread и т.п.
Уже реализован в Java (Reflection API)
Описание слайда:
Класс Class Служебный класс, экземпляры которого хранят конкретную информацию о конкретном классе. Объект класса Class для String, объект класса Class для Thread и т.п. Уже реализован в Java (Reflection API)

Слайд 56





Как узнать свой класс?
Объекту
(пусть obj – экземпляр класса MyClass):
Class c = obj.getClass();
Классу 
(пусть это MyClass):
Class c = MyClass.class;
Названию класса 
(пусть полное имя класса: org.kpfu.UseClass):
Class c = Class.forName("org.kpfu.UseClass");
Описание слайда:
Как узнать свой класс? Объекту (пусть obj – экземпляр класса MyClass): Class c = obj.getClass(); Классу (пусть это MyClass): Class c = MyClass.class; Названию класса (пусть полное имя класса: org.kpfu.UseClass): Class c = Class.forName("org.kpfu.UseClass");

Слайд 57





О-па!
Экземпляры класса, представимого объектом класса Class, можно создавать с помощью getInstance
String type = scanner.next();
Class c = Class.forName(type);
Object o = c.newInstance();
Описание слайда:
О-па! Экземпляры класса, представимого объектом класса Class, можно создавать с помощью getInstance String type = scanner.next(); Class c = Class.forName(type); Object o = c.newInstance();

Слайд 58





Параметризация
Вообще говоря, Class параметризован
Не Class, а Class<T>
Но если знать тип заранее, весь кайф от зависимости типа данных от входа пропадает.
Описание слайда:
Параметризация Вообще говоря, Class параметризован Не Class, а Class<T> Но если знать тип заранее, весь кайф от зависимости типа данных от входа пропадает.

Слайд 59





Параметризация
Class<String> c = Class.forName(интересно_какой_же_сюда_мы_можем_вставить_класс_неужели_String_вот_это_неожиданность);
String s = c.newInstance(); 
бред, чего сразу String не использовал?
Описание слайда:
Параметризация Class<String> c = Class.forName(интересно_какой_же_сюда_мы_можем_вставить_класс_неужели_String_вот_это_неожиданность); String s = c.newInstance(); бред, чего сразу String не использовал?

Слайд 60





Параметризация
А вот так – больше возможностей:
String type = scanner.next();
Class c = Class.forName(type);
Object o = c.newInstance();
//тип неизвестен заранее
Да, экземпляры c будут Object, но мы можем в принципе вызвать instanceof – и все будет ОК.
Описание слайда:
Параметризация А вот так – больше возможностей: String type = scanner.next(); Class c = Class.forName(type); Object o = c.newInstance(); //тип неизвестен заранее Да, экземпляры c будут Object, но мы можем в принципе вызвать instanceof – и все будет ОК.

Слайд 61


08. Miscellaneous (java), слайд №61
Описание слайда:

Слайд 62





Это тоже классы!
Method
Field
Constructor
Annotation
Type
Package
Описание слайда:
Это тоже классы! Method Field Constructor Annotation Type Package

Слайд 63





Получить все методы
Описание слайда:
Получить все методы

Слайд 64





Получить все методы
add
class Vector2D
[class Vector2D]
setY
void
[double]
setX
void
[double]
getX
double
[]
getY
double
[]
Описание слайда:
Получить все методы add class Vector2D [class Vector2D] setY void [double] setX void [double] getX double [] getY double []

Слайд 65





Получить все поля
Описание слайда:
Получить все поля

Слайд 66





Получить все поля
Описание слайда:
Получить все поля

Слайд 67





Declared
Рефлексия учитывает инкапсуляцию, хотя может и игнорировать ее
getDeclaredMethod(), getDeclaredMethods(), getDeclaredFields() и др. методы с Declared в названии возвращают все соответствующие сущности, вне зависимости от модификатора,
Аналогичными методами без Declared будут возвращаться только public-сущности.
Описание слайда:
Declared Рефлексия учитывает инкапсуляцию, хотя может и игнорировать ее getDeclaredMethod(), getDeclaredMethods(), getDeclaredFields() и др. методы с Declared в названии возвращают все соответствующие сущности, вне зависимости от модификатора, Аналогичными методами без Declared будут возвращаться только public-сущности.

Слайд 68





Получить все поля
Описание слайда:
Получить все поля

Слайд 69





Да, кстати, проверка Аннотаций
Описание слайда:
Да, кстати, проверка Аннотаций

Слайд 70





Самый экшн
у Класса:
getMethod(…) – возврат метода по сигнатуре;
getConstructor(…) – возврат конструктора по сигнатуре;
у Метода:
invoke() – вызов метода
Описание слайда:
Самый экшн у Класса: getMethod(…) – возврат метода по сигнатуре; getConstructor(…) – возврат конструктора по сигнатуре; у Метода: invoke() – вызов метода

Слайд 71





Сигнатура в терминах рефлексии
“Имя и набор типов параметров”
String и массив объектов класса Class
Class cs = String.class;
Method m = cs.getMethod(
	"indexOf", 
	new Class[]{String.class, int.class}
);
! Java varargs
Описание слайда:
Сигнатура в терминах рефлексии “Имя и набор типов параметров” String и массив объектов класса Class Class cs = String.class; Method m = cs.getMethod( "indexOf", new Class[]{String.class, int.class} ); ! Java varargs

Слайд 72





Reflection in action!
Описание слайда:
Reflection in action!

Слайд 73






Работает, если я подам на вход:
Vector2D  Vector2D  add 
	т.к. в Vector2D есть add(Vector2D)
java.util.HashSet  int  add 
	т.к. в HashSet есть add(Object)
java.lang.Thread  java.lang.String  setName 
	т.к. в java.lang.Thread есть setName(String)
Описание слайда:
Работает, если я подам на вход: Vector2D Vector2D add т.к. в Vector2D есть add(Vector2D) java.util.HashSet int add т.к. в HashSet есть add(Object) java.lang.Thread java.lang.String setName т.к. в java.lang.Thread есть setName(String)

Слайд 74





IMPORTANT!
	
	Я могу управлять работой программ гибко, на разных классах, не переписывая их и не компилируя каждый раз заново!”


Это легло в основу многих 
java-фреймворков, 
в частности Spring, Hibernate и др.
Описание слайда:
IMPORTANT! Я могу управлять работой программ гибко, на разных классах, не переписывая их и не компилируя каждый раз заново!” Это легло в основу многих java-фреймворков, в частности Spring, Hibernate и др.

Слайд 75





Рефлексия в других языках
В Java обычный класс и объект класса Class, соответствующий обычному классу – разные сущности
В Python, например, это одно и то же:
class Pet:
	pass
Объявил одновременно и класс Pet, и экземпляр класса Class, соответствующий Pet. 
Могу внутри него писать методы для Pet как обычного класса, 
Могу для Pet как для объекта класса Class (class methods)
Описание слайда:
Рефлексия в других языках В Java обычный класс и объект класса Class, соответствующий обычному классу – разные сущности В Python, например, это одно и то же: class Pet: pass Объявил одновременно и класс Pet, и экземпляр класса Class, соответствующий Pet. Могу внутри него писать методы для Pet как обычного класса, Могу для Pet как для объекта класса Class (class methods)

Слайд 76





существование программной инженерии 
(из лекций для 1 курса)
Описание слайда:
существование программной инженерии (из лекций для 1 курса)

Слайд 77





Машина Тьюринга (МТ)
Алан Тьюринг, 1936
Абстрактная модель вычислительного устройства – вычисление любой функции
Описание слайда:
Машина Тьюринга (МТ) Алан Тьюринг, 1936 Абстрактная модель вычислительного устройства – вычисление любой функции

Слайд 78





Устройство МТ
Алфавит
Состояния (память)
Лента (бесконечная)
Считывающая головка
Программа
Описание слайда:
Устройство МТ Алфавит Состояния (память) Лента (бесконечная) Считывающая головка Программа

Слайд 79


08. Miscellaneous (java), слайд №79
Описание слайда:

Слайд 80





Тезис Чёрча-Тьюринга
Любой интуитивно-вычислимый алгоритм может быть реализован на машине Тьюринга.
Другие формальные модели, удовлетворяющие этому тезису, называются Тьюринг-полными.
Написание программ для машины Тьюринга – программирование.
Описание слайда:
Тезис Чёрча-Тьюринга Любой интуитивно-вычислимый алгоритм может быть реализован на машине Тьюринга. Другие формальные модели, удовлетворяющие этому тезису, называются Тьюринг-полными. Написание программ для машины Тьюринга – программирование.

Слайд 81





Программа МТ - данные
Можно выписать в текст и занумеровать – превратить в цифровую информацию (код машины Тьюринга)
Выписываем поклеточно, # - разделитель информации о клетках:
0, 1, s1, -> # 0, s2, 1, stop # …
Текст можно закодировать.
Этот код можно подать на вход другой машине Тьюринга
Описание слайда:
Программа МТ - данные Можно выписать в текст и занумеровать – превратить в цифровую информацию (код машины Тьюринга) Выписываем поклеточно, # - разделитель информации о клетках: 0, 1, s1, -> # 0, s2, 1, stop # … Текст можно закодировать. Этот код можно подать на вход другой машине Тьюринга

Слайд 82





Универсальная машина Тьюринга
Машина Тьюринга, моделирующая работу других МТ
На вход подают код другой МТ и входные данные, универсальная МТ выдает ответ, как если бы работала эта другая МТ
! Универсальная функция – аналог
Теорема о существовании универсальной машине Тьюринга: универсальная машина Тьюринга существует!
И это то, без чего не было бы сегодняшнего цифрового мира.
Описание слайда:
Универсальная машина Тьюринга Машина Тьюринга, моделирующая работу других МТ На вход подают код другой МТ и входные данные, универсальная МТ выдает ответ, как если бы работала эта другая МТ ! Универсальная функция – аналог Теорема о существовании универсальной машине Тьюринга: универсальная машина Тьюринга существует! И это то, без чего не было бы сегодняшнего цифрового мира.

Слайд 83





Объяснение
МТ – модель вычислительного устройства, решающего конкретную задачу (вычисляющую конкретную функцию)
Но если взять универсальную МТ – и ей на вход подавать код программы других машин Тьюринга – мы сможем выполнять на одном устройстве все возможные алгоритмы.
главное – уметь писать программы!
Ничего не напоминает? Одно устройство, много алгоритмов, код программы…
Описание слайда:
Объяснение МТ – модель вычислительного устройства, решающего конкретную задачу (вычисляющую конкретную функцию) Но если взять универсальную МТ – и ей на вход подавать код программы других машин Тьюринга – мы сможем выполнять на одном устройстве все возможные алгоритмы. главное – уметь писать программы! Ничего не напоминает? Одно устройство, много алгоритмов, код программы…

Слайд 84





Ура!
Теорема о существовании универсальной машины Тьюринга – обоснование наличия программирования как деятельности!
Нам не нужно строить кучу разных устройств для каждого алгоритма!
У нас будет один (computer), на котором мы будем выполнять программы, записанные на определенном языке (код программы)
Язык, на котором пишут программы – язык программирования!
Описание слайда:
Ура! Теорема о существовании универсальной машины Тьюринга – обоснование наличия программирования как деятельности! Нам не нужно строить кучу разных устройств для каждого алгоритма! У нас будет один (computer), на котором мы будем выполнять программы, записанные на определенном языке (код программы) Язык, на котором пишут программы – язык программирования!

Слайд 85





Связь универсальности, Тьюринг-полноты и рефлексии
Рефлексия в языке – признак его тьюринг-полноты
«На языке можно написать его компилятор»
«Язык позволяет создавать свои конструкции своими же средствами»
! Аналог теоремы об универсальной МТ – теорема об универсальной функции (для любителей серьезной алгоритмической математики)
Описание слайда:
Связь универсальности, Тьюринг-полноты и рефлексии Рефлексия в языке – признак его тьюринг-полноты «На языке можно написать его компилятор» «Язык позволяет создавать свои конструкции своими же средствами» ! Аналог теоремы об универсальной МТ – теорема об универсальной функции (для любителей серьезной алгоритмической математики)

Слайд 86





Прочитать
http://www.quizful.net/post/java-reflection-api (rus)
http://tutorials.jenkov.com/java-reflection/methods.html (eng)
Описание слайда:
Прочитать http://www.quizful.net/post/java-reflection-api (rus) http://tutorials.jenkov.com/java-reflection/methods.html (eng)



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