08. Miscellaneous (java) презентация в формате PowerPoint - скачать бесплатно

Скачать презентацию на тему: "08. Miscellaneous (java)" с количеством слайдов в размере 86 страниц. У нас вы найдете презентацию на любую тему и для каждого класса школьной программы. Мы уверены, что наши слайды помогут найти вам свою аудиторию. Весь материал предоставлен бесплатно, в знак благодарности мы просим Вас поделиться ссылками в социальных сетях и по возможности добавьте наш сайт MirPpt.ru в закладки.

Нажмите для просмотра
08. Miscellaneous (java)

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

2: Вспоминаем. Структура проекта на 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

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

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

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

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

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

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

10: Apache Ant. Отрывки

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

12: Apache Maven. Project Object Model. pom. xml (Wikipedia example)

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

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

15: Apache Maven. Архетипы Позволяют создавать проект с нужной структурой и заголовками конфигурационных файлов Пример вызова плагина для создания проекта по архетипу: mvn archetype:create -DgroupIdcom. mycompany. app -DartifactIdmy-webapp -DarchetypeArtifactIdmaven-archetype-webapp

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

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

18: Хардкод!

19: Хардкод (Hardcode). Случай с числами

20: Хардкод. Еще хуже

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

22: Более частый случай – строковый хардкод

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

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

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

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

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

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

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

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

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

32: «В новом цвете»

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

34: мета

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

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

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

38:

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

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

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

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

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

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

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

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

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

48: вспомним ооп

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

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

51: In English, please Class: name package name List of attributes List of methods …

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

53: Wait, what? class Class String name; String packageName; List attributes; List methods; …

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

55: Класс 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");

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

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

59: Параметризация Class 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 – и все будет ОК.

61:

62: Это тоже классы! Method Field Constructor Annotation Type Package

63: Получить все методы

64: Получить все методы 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-сущности.

68: Получить все поля

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

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

71: Сигнатура в терминах рефлексии Имя и набор типов параметров String и массив объектов класса Class Class cs String. class; Method m cs. getMethod( "indexOf", new ClassString. class, int. class ); ! Java varargs

72: 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)

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

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

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

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

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

79:

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

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

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

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

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

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

86: Прочитать http://www. quizful. net/post/java-reflection-api (rus) http://tutorials. jenkov. com/java-reflection/methods. html (eng)

Скачать презентацию


MirPpt.ru