Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Шаблоны (Generic)

Содержание

Что такое шаблоны?Обобщённое программирование — это такой подход к описанию данных и алгоритмов, который позволяет их использовать с различными типами данных без изменения их описания. Generics (дженерики) или — подмножество обобщённого программирования.
Шаблоны (Generic)Виталий Унгурян unguryan@itstep.org Что такое шаблоны?Обобщённое программирование — это такой подход к описанию данных и Обобщения (Generic)Обобщения - это параметризованные типы. С их помощью можно объявлять классы, Пример реализации без шаблонов class Box { private Object value; public Box(Object Пример с шаблонным типомclass Box { private E value; public Box(E value) Синтаксис После имени класса в угловых скобках Правила именования типовВ именах переменных типа принято использовать заглавные буквы. Обычно для ИспользованиеBox  box1 = new  Box(new Tea());Tea tea = box1.get();Box  box 2 = new  Box Алмазный синтаксисЧтобы упростить жизнь программистам в Java 7 был введён алмазный синтаксис Несовместимость generic-типовДля того чтобы сохранить целостности и независимости друг от друга, у Ограничения GenericНевозможно создать объект generic типа, поскольку компилятор не знает, какой конструктор вызвать.private Ограничения GenericНевозможно реализовывать одновременно два одинаковых интерфейса с разными типами.public class DecimalString implements Comparable, Comparable {} Ограничения GenericНевозможно объявить статическое поле generic типаpublic class MyClass {    private static T value; } Ограничения GenericНевозможно использовать instatceof для параметризованного типа.public static void setList(List list) { Ограничения GenericНевозможно создать массив параметризированного типаBox[] arrayOfLists = new Box[2]; Ограничения GenericНевозможно перегрузить метод, в котором типы параметров “стираются” до одного и Шаблоны аргументов (Wildcards )Wildcard Parameters (wildcards). Этот термин в разных источниках переводится Шаблоны аргументов (Wildcards )Шаблон аргументов указывается символом ? и представляет собой неизвестный WildcardsОдно из преимуществ wildcards состоит в том, что они дают возможность написать Wildcardspublic void rebox(Box box) {  box.put(box.get()); } Wildcardspublic void rebox(Box box) {  reboxHelper(box); } private void reboxHelper(Box box) {  box.put(box.get()); } WildcardsВспомогательный метод reboxHelper() является generic-методом. Generic-методы вводят дополнительные параметры типов (помещаемые в WildcardsОднако в случае reboxHelper() generic-метод не задействует параметр типа для определения ограничения Маски с ограничением extendsBox Маски с ограничением superBox Универсальные методы (Generic methods)По аналогии с универсальными классами (дженерик-классами), можно создавать универсальные Универсальные методы (Generic methods)Универсальные методы не надо путать с методами в generic-классе. Пример универсального методаclass Utilities {      public static  void fill(List list, T val)   {          for (int i = 0; i  Как это работает?Поддержка generic-ов реализована средствами компилятора. Виртуальная машина не предоставляет никакой Как это работает?Во время компиляции generic-параметры убираются, и, там, где это требуется,
Слайды презентации

Слайд 2 Что такое шаблоны?
Обобщённое программирование — это такой подход

Что такое шаблоны?Обобщённое программирование — это такой подход к описанию данных

к описанию данных и алгоритмов, который позволяет их использовать

с различными типами данных без изменения их описания. Generics (дженерики) или <<контейнеры типа T>> — подмножество обобщённого программирования.

Слайд 3 Обобщения (Generic)
Обобщения - это параметризованные типы. С их

Обобщения (Generic)Обобщения - это параметризованные типы. С их помощью можно объявлять

помощью можно объявлять классы, интерфейсы и методы, где тип

данных указан в виде параметра.

Обобщения - добавили в язык java безопасность типов.

Слайд 5 Пример реализации без шаблонов
class Box {
private

Пример реализации без шаблонов class Box { private Object value; public

Object value;
public Box(Object value) {
this.value =

value;
}
public Object get() {
return value;
}
}

Слайд 6 Пример с шаблонным типом
class Box {
private E

Пример с шаблонным типомclass Box { private E value; public Box(E

value;
public Box(E value) {
this.value = value;

}
public E get() {
return value;
}
}


Слайд 7 Синтаксис
После имени класса в угловых скобках "

Синтаксис После имени класса в угловых скобках

и ">" указано имя типа “E", которое может использоваться

внутри класса.

Фактически E – это тип, который должен быть определён позже (при создании объекта класса).


Слайд 8 Правила именования типов
В именах переменных типа принято использовать

Правила именования типовВ именах переменных типа принято использовать заглавные буквы. Обычно

заглавные буквы.
Обычно для коллекций используется буква E, буквами

K и V - типы ключей и значение (Key/Value), а буквой T (и при необходимости буквы S и U) - любой тип.

Слайд 9 Использование
Box  box1 = new  Box(new Tea());
Tea tea = box1.get();

Box  box

ИспользованиеBox  box1 = new  Box(new Tea());Tea tea = box1.get();Box  box 2 = new

2 = new  Box (new Coffee ());
Coffee tea =

box2.get();


Слайд 10 Алмазный синтаксис
Чтобы упростить жизнь программистам в Java 7

Алмазный синтаксисЧтобы упростить жизнь программистам в Java 7 был введён алмазный

был введён алмазный синтаксис (diamond syntax), в котором можно

опустить параметры типа.
Т.е. можно предоставить компилятору определение типов при создании объекта. Вид упрощённого объявления:
Pair pair = new Pair<>(6, " Apr"); 

Слайд 11 Несовместимость generic-типов
Для того чтобы сохранить целостности и независимости

Несовместимость generic-типовДля того чтобы сохранить целостности и независимости друг от друга,

друг от друга, у Generics существует так называемая "Несовместимость

generic-типов".

List li = new ArrayList();
List lo = li;
lo.add(“hello”);

Слайд 12 Ограничения Generic
Невозможно создать объект generic типа, поскольку компилятор не

Ограничения GenericНевозможно создать объект generic типа, поскольку компилятор не знает, какой конструктор

знает, какой конструктор вызвать.

private static T get(T value)

{    return new T();  
}

Слайд 13 Ограничения Generic
Невозможно реализовывать одновременно два одинаковых интерфейса с

Ограничения GenericНевозможно реализовывать одновременно два одинаковых интерфейса с разными типами.public class DecimalString implements Comparable, Comparable {}

разными типами.
public class DecimalString implements Comparable, Comparable {}


Слайд 14 Ограничения Generic
Невозможно объявить статическое поле generic типа
public class

Ограничения GenericНевозможно объявить статическое поле generic типаpublic class MyClass {    private static T value; }

MyClass {    private static T value; 
}


Слайд 15 Ограничения Generic
Невозможно использовать instatceof для параметризованного типа.

public static

Ограничения GenericНевозможно использовать instatceof для параметризованного типа.public static void setList(List list)

void setList(List list) {    if (list instanceof ArrayList)

{}   }

Слайд 16 Ограничения Generic
Невозможно создать массив параметризированного типа

Box[] arrayOfLists =

Ограничения GenericНевозможно создать массив параметризированного типаBox[] arrayOfLists = new Box[2];

new Box[2];


Слайд 17 Ограничения Generic
Невозможно перегрузить метод, в котором типы параметров

Ограничения GenericНевозможно перегрузить метод, в котором типы параметров “стираются” до одного

“стираются” до одного и того же типа.
public void print(Set

strSet) { } public void print(Set intSet) { }


Слайд 18 Шаблоны аргументов (Wildcards )
Wildcard Parameters (wildcards).
Этот термин

Шаблоны аргументов (Wildcards )Wildcard Parameters (wildcards). Этот термин в разных источниках

в разных источниках переводится по-разному: метасимвольные аргументы, подстановочные символы,

групповые символы, шаблоны, маски и т.д.

Слайд 19 Шаблоны аргументов (Wildcards )
Шаблон аргументов указывается символом ?

Шаблоны аргументов (Wildcards )Шаблон аргументов указывается символом ? и представляет собой

и представляет собой неизвестный тип.
Object obj = new Object();

Box box3 = new Box(obj );

Слайд 20 Wildcards
Одно из преимуществ wildcards состоит в том, что

WildcardsОдно из преимуществ wildcards состоит в том, что они дают возможность

они дают возможность написать код, который может оперировать различными

generic-типами без знания их точных границ. 



Слайд 21 Wildcards
public void rebox(Box box) {
box.put(box.get());
}

Wildcardspublic void rebox(Box box) { box.put(box.get()); }

Слайд 22 Wildcards
public void rebox(Box box) {
reboxHelper(box);
}

Wildcardspublic void rebox(Box box) { reboxHelper(box); } private void reboxHelper(Box box) { box.put(box.get()); }


private void reboxHelper(Box box) {
box.put(box.get());
}


Слайд 23 Wildcards
Вспомогательный метод reboxHelper() является generic-методом. Generic-методы вводят дополнительные

WildcardsВспомогательный метод reboxHelper() является generic-методом. Generic-методы вводят дополнительные параметры типов (помещаемые

параметры типов (помещаемые в угловые скобки перед типом возвращаемого

значения), которые обычно используются для формулирования ограничений типов между параметрами и/или возвращаемым значением метода.

Слайд 24 Wildcards
Однако в случае reboxHelper() generic-метод не задействует параметр

WildcardsОднако в случае reboxHelper() generic-метод не задействует параметр типа для определения

типа для определения ограничения типа, а позволяет компилятору –

через вывод типа – дать имя параметру типа переменной box. Приём с capture-хелпером основан на выводе типов (type inference) и преобразовании при фиксации (capture conversion). 


Слайд 25 Маски с ограничением extends
Box

Маски с ограничением extendsBox

new Box(new Coffee());

Box

Tea());


Слайд 26 Маски с ограничением super
Box

Маски с ограничением superBox

new Box(new Coffee());


Слайд 27 Универсальные методы (Generic methods)
По аналогии с универсальными классами

Универсальные методы (Generic methods)По аналогии с универсальными классами (дженерик-классами), можно создавать

(дженерик-классами), можно создавать универсальные методы (дженерик-методы), то есть методы,

которые принимают общие типы параметров.

Слайд 28 Универсальные методы (Generic methods)
Универсальные методы не надо путать

Универсальные методы (Generic methods)Универсальные методы не надо путать с методами в

с методами в generic-классе. Универсальные методы удобны, когда одна

и та же функциональность должна применяться к различным типам.

Слайд 29 Пример универсального метода
class Utilities {      public static  void fill(List list, T val)  {          for (int i = 0; i 

Пример универсального методаclass Utilities {      public static  void fill(List list, T val)  {          for (int i = 0; i 

Слайд 30 Как это работает?
Поддержка generic-ов реализована средствами компилятора. Виртуальная

Как это работает?Поддержка generic-ов реализована средствами компилятора. Виртуальная машина не предоставляет

машина не предоставляет никакой поддержки generic-ов, кроме возможности получения

информации о типах.

  • Имя файла: shablony-generic.pptx
  • Количество просмотров: 139
  • Количество скачиваний: 0