Презентация Generics. Классы-оболочки онлайн

На нашем сайте вы можете скачать и просмотреть онлайн доклад-презентацию на тему Generics. Классы-оболочки абсолютно бесплатно. Урок-презентация на эту тему содержит всего 51 слайд. Все материалы созданы в программе PowerPoint и имеют формат ppt или же pptx. Материалы и темы для презентаций взяты из открытых источников и загружены их авторами, за качество и достоверность информации в них администрация сайта не отвечает, все права принадлежат их создателям. Если вы нашли то, что искали, отблагодарите авторов - поделитесь ссылкой в социальных сетях, а наш сайт добавьте в закладки.
Презентации » Устройства и комплектующие » Generics. Классы-оболочки



Оцените!
Оцените презентацию от 1 до 5 баллов!
  • Тип файла:
    ppt / pptx (powerpoint)
  • Всего слайдов:
    51 слайд
  • Для класса:
    1,2,3,4,5,6,7,8,9,10,11
  • Размер файла:
    846.00 kB
  • Просмотров:
    54
  • Скачиваний:
    0
  • Автор:
    неизвестен



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

№1 слайд
Generics
Содержание слайда: Generics

№2 слайд
Классы-оболочки В языке Java
Содержание слайда: Классы-оболочки В языке Java существуют классы-оболочки, которые являются объектным представлением восьми примитивных типов. Все классы-оболочки являются immutable. Автоупаковка и распаковка позволяют легко конвертировать примитивные типы в их соответствующие классы-оболочки и наоборот.

№3 слайд
Пример упаковки и распаковки
Содержание слайда: Пример упаковки и распаковки int a = 5; Integer b = a; // автоупаковка Integer c = new Integer(a); // упаковка int d = b; // распаковка int e = (int)c; // необязательно System.out.println(c); // 5

№4 слайд
Примитивные типы и обёртки
Содержание слайда: Примитивные типы и обёртки

№5 слайд
Зачем нужны оболочки
Содержание слайда: Зачем нужны оболочки Разработчиками языка Java было принято решение отделить примитивные типы и классы-оболочки, указав при этом следующее: Используйте классы-обёртки, когда работаете со стандартными коллекциями Используйте примитивные типы для того, чтобы ваши программы были максимально просты Ещё одним важным моментом является то, что примитивные типы не могут быть null, а классы-оболочки — могут. Также классы-оболочки могут быть использованы для достижения полиморфизма.

№6 слайд
Практика Создайте объект типа
Содержание слайда: Практика Создайте объект типа Double, и изучите список методов, предоставляемых этим классом. Создайте объект на основе целого числа, вещественного числа, строки. Попытайтесь изменить состояние объекта.

№7 слайд
Обобщения generics Нередко,
Содержание слайда: Обобщения (generics) Нередко, создаваемые разработчиками алгоритмы и коллекции могут быть успешно использованы для разных типов данных без какого-либо изменения. Например, не зависят от типа данных алгоритмы поиска и сортировки, а класс List пригодился бы как для хранения целых чисел, так и для хранения объектов типа Student. Чтобы не создавать однообразные реализации для каждого типа данных, в языке Java начиная с версии SE5.0 были введены обобщения, или обобщённые типы, которые позволяют создавать более безопасный и при этом универсальный код.

№8 слайд
Безопасность int x String s
Содержание слайда: Безопасность int x = 44; String s = "hello"; ArrayList array = new ArrayList(); array.add(x); // упаковка (boxing) array.add(s); // упаковки нет! int y = (int) array.get(0); // unboxing int z = (int) array.get(1); // упс!!!

№9 слайд
Упаковка и распаковка В
Содержание слайда: Упаковка и распаковка В примере используется стандартный класс ArrayList из пакета java.util, который представляет коллекцию объектов. Чтобы поместить объект в коллекцию, применяется метод add. И хотя в коллекцию добавляются число и строка, по существу ArrayList содержит коллекцию значений типа Object. Таким образом, в вызове array.add(x); значение переменной x вначале "упаковывается" в объект типа Integer и апкастится до типа Object, а потом при получении элементов из коллекции - наоборот, "распаковывается" в нужный тип.

№10 слайд
Устройство ArrayList
Содержание слайда: Устройство ArrayList ArrayList устроен как массив ссылок типа Object, что позволяет добавлять в коллекцию переменные любого типа. Такая гибкость в некоторых случаях удобна, однако чаще всего в коллекции хранятся переменные одного и того же типа. Можно легко допустить ошибку приведения при извлечении данных из коллекции, т.е. поместить в коллекцию переменную одного типа, а при извлечении выполнить приведение к другому типу…

№11 слайд
Проблемы Упаковка и
Содержание слайда: Проблемы Упаковка и распаковка (boxing и unboxing) ведут к снижению производительности, поскольку система должна выполнить необходимые преобразования. Существует и другая проблема, связанная с упаковкой-распаковкой, - проблема безопасности типов. Например, во время выполнения последней строки возникает ошибка.

№12 слайд
Хранение ссылок Следует
Содержание слайда: Хранение ссылок Следует отметить, что если хранить в коллекции объекты ссылочных (не примитивных) типов, то снижения производительности происходить не будет, так как выполняется не упаковка-распаковка, а лишь формальное преобразование пользовательского типа в Object или наоборот.

№13 слайд
Решение Обе проблемы смогут
Содержание слайда: Решение Обе проблемы смогут решить обобщённые типы. Они позволяют указать конкретный тип данных, который будет использоваться для коллекции или алгоритма (поддерживаются обобщённые классы, интерфейсы и методы). Например, в Java также существует обобщённая версия класса ArrayList:

№14 слайд
Обобщённая версия int x
Содержание слайда: Обобщённая версия int x = 44; String s = "hello"; ArrayList<Integer> ar = new ArrayList<>(); ar.add(x); // упаковка не нужна ar.add(s); // ошибка компиляции! int y = ar.get(0); // распаковка не нужна

№15 слайд
Комментарии к примеру Так как
Содержание слайда: Комментарии к примеру Так как теперь используется обобщённая версия класса ArrayList, то нужно будет задать определённый тип данных, для которого этот класс будет применяться. Далее добавляется число и строка в коллекцию. Но если число будет добавлено в коллекцию без проблем, так как коллекция типизирована типом int, то на строке ar.add(s); возникнет ошибка времени компиляции, и придётся удалить эту строку. Таким образом, при применении обобщённого варианта класса снижается как количество потенциальных ошибок, так и время на выполнение программы.

№16 слайд
Пример generic-класса Point
Содержание слайда: Пример generic-класса (Point) https://git.io/vokjC

№17 слайд
Два параметра типа https
Содержание слайда: Два параметра типа https://git.io/vot6i

№18 слайд
Raw types сырые типы Forest f
Содержание слайда: Raw types (сырые типы) Forest f = new Forest(); f.setInhabitant1(new Fairy()); f.setInhabitant2(new Elf()); f.setInhabitant2(new Fairy()); Fairy fairy = (Fairy) f.getInhabitant1(); Elf elf = (Elf) f.getInhabitant2(); // упс! Forest<Fairy, Elf> f2 = f; Forest f3 = new Forest<Fairy, Elf>();

№19 слайд
Определение Сырой тип это имя
Содержание слайда: Определение Сырой тип  — это имя обобщённого класса или интерфейса без аргументов типа. Можно часто увидеть использование сырых типов в старом коде, поскольку многие классы (например, коллекции), до Java 5 были необобщёнными. При использовании сырых типов получается то же самое поведение, которое было до введения обобщений в Java.

№20 слайд
Пример с котиками https
Содержание слайда: Пример с котиками https://git.io/voIfe

№21 слайд
Ограниченный тип В некоторых
Содержание слайда: Ограниченный тип В некоторых случаях имеет смысл ограничить  типы, которые можно использовать в качестве аргументов в параметризованных типах. Например, в Термос можно будет наливать только ГорячиеНапитки. Подобное ограничение можно сделать с помощью ограниченного параметра типа (bounded type parameters). Чтобы объявить ограниченный параметр типа, нужно после имени параметра указать ключевое слово extends, а затем указать верхнюю границу (upper bound). В этом контексте extends означает как extends, так и implements.

№22 слайд
Ограничение параметра типа
Содержание слайда: Ограничение параметра типа https://git.io/votrb class AverageCalculator<T extends Number & Comparable & Serializable> {

№23 слайд
Соглашение об именовании
Содержание слайда: Соглашение об именовании Переменные типа именуются одной буквой в верхнем регистре. Это позволяет легко отличить переменную типа от класса или интерфейса. Наиболее часто используемые имена для параметров типа: E — элемент (Element, широко используется в Java Collections Framework) K — Ключ N — Число T — Тип V — Значение S, U, V и т. п. — 2-й, 3-й, 4-й типы

№24 слайд
Generic method https git.io
Содержание слайда: Generic method https://git.io/votdx

№25 слайд
Generic constructor https
Содержание слайда: Generic constructor https://git.io/votFV Конструкторы могут быть обобщёнными как в обобщённых, так и в необобщённых классах. 

№26 слайд
Generic interface Iterable lt
Содержание слайда: Generic interface Iterable<T> Comparable<T> https://git.io/votbd

№27 слайд
Обобщения и наследование
Содержание слайда: Обобщения и наследование Можно присвоить объекту одного типа объект другого типа, если эти типы совместимы. Например, можно присвоить объект типа Integer переменной типа Object, так как Object является одним из супертипов Integer: Object someObject = new Object(); Integer someInteger = new Integer(10); someObject = someInteger;   // OK

№28 слайд
Обобщения и наследование В
Содержание слайда: Обобщения и наследование В объектно-ориентированной терминологии это называется связью «является» (“is a”). Так как Integer является Object -ом, то такое присвоение разрешено. Но Integer  также является и Number-ом, поэтому следующий код тоже корректен: public void someMethod(Number n) { /* ... */ } someMethod(new Integer(10));   // OK someMethod(new Double(10.1));   // OK

№29 слайд
Обобщения и наследование Это
Содержание слайда: Обобщения и наследование Это также верно для обобщений. Можно осуществить вызов обобщённого типа, передав Number в качестве аргумента типа, и любой дальнейший вызов будет разрешён, если аргумент совместим с Number: Box<Number> box = new Box<Number>(); box.add(new Integer(10));   // OK box.add(new Double(10.1));  // OK

№30 слайд
Обобщения и наследование void
Содержание слайда: Обобщения и наследование void boxTest(Box<Number> n) { /* ... */ } Можно ли будет передать в этот метод объект типа Box<Integer> или Box<Double>? Нет, так как Box<Integer> и Box<Double> не являются потомками Box<Number>!

№31 слайд
Важно запомнить! Для двух
Содержание слайда: Важно запомнить! Для двух типов A и B (например, Number и Integer), MyClass<A>  не имеет никакой связи или родства с MyClass<B> , независимо от того, как A и B связаны между собой. Общий родитель MyClass<A> и MyClass<B>  — это Object.

№32 слайд
Неизвестный тип wildcard В
Содержание слайда: Неизвестный тип (wildcard) В обобщённом коде иногда встречается знак вопроса (?), называемый подстановочным символом, и означает это «неизвестный тип». Подстановочный символ может использоваться в разных ситуациях: как параметр типа, поля, локальной переменной, иногда в качестве возвращаемого типа. 

№33 слайд
Unbounded wildcard https
Содержание слайда: Unbounded wildcard https://git.io/vothz Если просто использовать подстановочный символ <?>, то получится подстановочный символ без ограничений. Например, List<?> означает список неизвестного (т.е., почти любого) типа.

№34 слайд
Зачем нужен wildcard
Содержание слайда: Зачем нужен wildcard

№35 слайд
Зачем нужен wildcard
Содержание слайда: Зачем нужен wildcard

№36 слайд
Upper bounded wildcard Можно
Содержание слайда: Upper bounded wildcard Можно использовать подстановочный символ, ограниченный сверху, чтобы ослабить ограничения для переменной класса. Например, если хочется написать метод, который работает только с List<Integer>, List<Double> и List<Number>, этого можно достичь с помощью ограниченного сверху подстановочного символа.

№37 слайд
Пример на UBW https git.io
Содержание слайда: Пример на UBW https://git.io/voqe2

№38 слайд
Lower bounded wildcard
Содержание слайда: Lower bounded wildcard Ограниченный снизу подстановочный символ ограничивает неизвестный тип так, чтобы он был либо указанным типом, либо одним из его предков. Допустим, хочется написать метод, который добавляет объекты Mops в список. Чтобы максимизировать гибкость, в список можно будет добавлять ещё и Dog с Animal-ом  — всё, что может хранить экземпляры класса Mops.

№39 слайд
Почему обобщения не работают
Содержание слайда: Почему обобщения не работают с примитивными типами? http://stackoverflow.com/questions/2721546/why-dont-java-generics-support-primitive-types Generics in Java are an entirely compile-time construct - the compiler turns all generic uses into casts to the right type. This is to maintain backwards compatibility with previous JVM runtimes.

№40 слайд
Стирание типа Обобщения были
Содержание слайда: Стирание типа Обобщения были введены в язык программирования Java для обеспечения более жёсткого контроля типов во время компиляции и для поддержки обобщённого программирования. Для реализации обобщения компилятор: Заменяет все параметры типа в обобщённых типах их границами или Object-ами, если параметры типа не ограничены. Сгенерированный байт-код содержит только обычные классы, интерфейсы и методы! Вставляет приведение типов где необходимо, чтобы сохранить безопасность типа.

№41 слайд
Стирание типа
Содержание слайда: Стирание типа

№42 слайд
Стирание типа
Содержание слайда: Стирание типа

№43 слайд
Стирание типа
Содержание слайда: Стирание типа

№44 слайд
На тему стирания типов http
Содержание слайда: На тему стирания типов http://www.journaldev.com/1663/java-generics-example-method-class-interface#type-erasure http://www.angelikalanger.com/GenericsFAQ/FAQSections/TechnicalDetails.html#FAQ101

№45 слайд
Чего делать нельзя
Содержание слайда: Чего делать нельзя

№46 слайд
Чего делать нельзя
Содержание слайда: Чего делать нельзя

№47 слайд
Чего делать нельзя
Содержание слайда: Чего делать нельзя

№48 слайд
Чего делать нельзя
Содержание слайда: Чего делать нельзя

№49 слайд
Чего делать нельзя
Содержание слайда: Чего делать нельзя

№50 слайд
Что почитать про обобщения
Содержание слайда: Что почитать про обобщения https://urvanov.ru/2016/04/28/java-8-%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D1%8F/ http://rsdn.ru/article/java/genericsinjava.xml http://developer.alexanderklimov.ru/android/java/generic.php http://www.k-press.ru/cs/2008/3/generic/generic.asp http://www.quizful.net/post/java-generics-tutorial http://javarevisited.blogspot.com/2011/09/generics-java-example-tutorial.html https://uk.wikipedia.org/wiki/%D0%A3%D0%B7%D0%B0%D0%B3%D0%B0%D0%BB%D1%8C%D0%BD%D0%B5%D0%BD%D0%BD%D1%8F_%D0%B2_Java http://docs.oracle.com/javase/tutorial/extra/generics/morefun.html

№51 слайд
Практика Переделать
Содержание слайда: Практика Переделать классы-коллекции ArrayList, SLL, DLL, BinaryTree таким образом, чтобы они стали обобщёнными. Реализовать интерфейс Iterable<T> для ваших реализаций типов ArrayList<T> и BinaryTree<T>.

Скачать все slide презентации Generics. Классы-оболочки одним архивом: