Оцените презентацию от 1 до 5 баллов!
Тип файла:
ppt / pptx (powerpoint)
Всего слайдов:
20 слайдов
Для класса:
1,2,3,4,5,6,7,8,9,10,11
Размер файла:
369.50 kB
Просмотров:
71
Скачиваний:
0
Автор:
неизвестен
Слайды и текст к этой презентации:
№1 слайд![Мова програмування Java та](/documents_6/3f803e749c167e7872dc132e7689bcd3/img0.jpg)
Содержание слайда: Мова програмування Java та технології J2EE
Модуль “Мова програмування Java”
Лекція 4.
Узагальнене програмування на мові Java (Generics).
№2 слайд![Приклад без застосування](/documents_6/3f803e749c167e7872dc132e7689bcd3/img1.jpg)
Содержание слайда: Приклад без застосування узагальнень
Перевантаження коду змінними типу Object
public class Box {
private Object object;
public void add(Object object) { this.object = object; }
public Object get() { return object; }
}
Перевантаження коду приведенням типів
public static void main(String[] args) {
Box integerBox = new Box(); // домовимося передавати в
// Box значення Integer
integerBox.add("10"); // увага – це значення типу String
...
Integer someInteger = (Integer)integerBox.get();// помилка
//часу виконання
}
Якщо негаразд із типами - помилка часу виконання
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
№3 слайд![Узагальнення Generics Основн](/documents_6/3f803e749c167e7872dc132e7689bcd3/img2.jpg)
Содержание слайда: Узагальнення (Generics)
Основні класи задач, які потребують застосування узагальнень:
Розробка функцій-утиліт для колекцій (пошук, max, min, avg, sum тощо)
Розробка контейнерів для об’єктів різних типів (стек, колекція тощо)
Мотивація для generics:
Отримувати на етапі компіляції помилки приведення типів
Обійтись без приведення типів “вручну”
Отримати більш безпечний код, який краще пишеться та читається
№4 слайд![стор я появи узагальнень в](/documents_6/3f803e749c167e7872dc132e7689bcd3/img3.jpg)
Содержание слайда: Історія появи узагальнень в Java
Узагальнення побачили світ в J2SE 5 (2004р.)
Задача - розширити систему типів мови, що широко застосовується і до якої висуваються вимоги жорсткої зворотної сумісності
Роботу розпочато у 1999р.
Деякі деталі із проробки задачі:
Специфікація “JSR-014: Adding Generics to the Java Programming Language” розроблялася протягом 1999-2004
Розширення системи типів підстановочними типами (wildcards) здійснено у співпраці Sun та університету м.Орхус (Данія)
Цікаво – один із відомих уродженців м.Орхус – Бйорн Страуструп, автор мови C++
№5 слайд![Приклад застосування](/documents_6/3f803e749c167e7872dc132e7689bcd3/img4.jpg)
Содержание слайда: Приклад застосування узагальнень
Замість Object застосовуємо “типи-параметри”
public class Box<T> {
private T t;
public void add(T t) { this.t = t; }
public T get() { return t; }
}
Не потрібно приводити типи
public static void main(String[] args) {
Box<Integer> integerBox = new Box<Integer>();
integerBox.add("10"); // Помилка компіляції
Integer someInteger = integerBox.get(); // Не потрібне приведення
// типів
}
Негаразд із типами - помилка компіляції
№6 слайд![Реал зац я узагальнень в Java](/documents_6/3f803e749c167e7872dc132e7689bcd3/img5.jpg)
Содержание слайда: Реалізація узагальнень в Java
Це елементи мови
Це функціональність компілятора, яка дозволяє виявити певні помилки на стадії компіляції
Це не функціональність JVM
Type erasure - На стадії виконання (runtime) уся інформація про узагальнення стирається
Через вимоги жорсткої зворотної сумісності – старий байт-код повинен працювати на нових JVM
Узагальнення не потребують додаткових ресурсів часу виконання
№7 слайд![Елементи мови, як](/documents_6/3f803e749c167e7872dc132e7689bcd3/img6.jpg)
Содержание слайда: Елементи мови, які узагальнюються
Що може бути узагальнене
Класи
але не всі, див. нижче
Інтерфейси
Методи
Конструктори
Які типи можуть бути параметрами для узагальнення
Типи-посилання (класи, інтерфейси, масиви)
Які типи не можуть бути параметрами для узагальнення
Примітивні типи (але класи-оболонки можуть)
Які класи не можуть бути узагальнені
Enum
Чому?
Клас Throwable та його нащадки
Обмеження викликане тим, що механізм catch у JVM не працює з параметризованими класами
№8 слайд![Узагальнен типи Узагальнен](/documents_6/3f803e749c167e7872dc132e7689bcd3/img7.jpg)
Содержание слайда: Узагальнені типи
Узагальнені типи – узагальнені класи та узагальнені інтерфейси
public class Box<T> {
private T t;
public void add(T t) { this.t = t; }
public T get() { return t; }
}
Box – узагальнений клас, який вводить змінну типу T
Декілька змінних типу
class Suitecase<T,U> {…}
Успадкування для узагальнених класів/інтерфейсів
Suitecase<T,U> extends Box<T> {…}
№9 слайд![Узагальнен типи. Продовження](/documents_6/3f803e749c167e7872dc132e7689bcd3/img8.jpg)
Содержание слайда: Узагальнені типи. Продовження
Box<T> - узагальнений клас із змінною типу T
Box<Integer> - параметризований тип,
із параметром (аргументом) Integer
Приклади
Vector<String>
Seq<Seq<A>>
Collection<Integer>
Pair<String,String>
Iterator<int[]> - параметризація масивом
Виклик конструктора
Box<Integer> integerBox = new Box<Integer>();
№10 слайд![Узагальнен методи](/documents_6/3f803e749c167e7872dc132e7689bcd3/img9.jpg)
Содержание слайда: Узагальнені методи
Узагальнений метод
class Inspector {
public <T> void inspect(T t) {
System.out.println(t.getClass().getName());
}
}
Виклик методу
Inspector i = new Inspector();
String s = "Hello";
i.inspect(s); // короткий синтаксис
i.<String>inspect(s); // повний синтаксис
Узагальнення конструкторів відбувається аналогічно
№11 слайд![Обмеження для зм нних типу](/documents_6/3f803e749c167e7872dc132e7689bcd3/img10.jpg)
Содержание слайда: Обмеження для змінних типу
Подібного немає в C++
extends &
extends – означає, що параметр типу повинен успадковувати вказаний клас чи реалізовувати вказані інтерфейси
& - дозволяє вказати декілька типів, які мають бути успадковані або реалізовані (один клас, декілька інтерфейсів). “,” застосувати не можна, оскільки це роздільник між змінними типу
class Inspector {
public <T extends Number&Comparable> void inspect(T t) {…}
}
Inspector i = new Inspector();
String s = "Hello";
i.inspect(s); // помилка компіляції,
// оскільки s - це не Number & Comparable
№12 слайд![Whildcards п дстановочн типи](/documents_6/3f803e749c167e7872dc132e7689bcd3/img11.jpg)
Содержание слайда: Whildcards (підстановочні типи). Мотивація
public void boxTest(Box<Number> n) { ...}
boxTest(new Box<Integer>()); // compile error
boxTest(new Box<Double>()); // compile error
№13 слайд![Whildcards п дстановочн типи](/documents_6/3f803e749c167e7872dc132e7689bcd3/img12.jpg)
Содержание слайда: Whildcards (підстановочні типи). Мотивація
Опція 1
public void boxTest(Box<?> n) { ... }
boxTest(new Box<Integer>()); // ok
boxTest(new Box<Double>()); // ok
boxTest(new Box<String>()); // ok?
Опція 2
public void boxTest(Box<? extends Number> n) { ...}
boxTest(new Box<Integer>()); // ok
boxTest(new Box<Double>()); // ok
№14 слайд![Wildcards details](/documents_6/3f803e749c167e7872dc132e7689bcd3/img13.jpg)
Содержание слайда: Wildcards details
Застосування “?”
тільки для тих type arguments
в полях/локальних змінних/методах/конструкторах/декларації класів
№15 слайд![Bounded wildcards Bounded](/documents_6/3f803e749c167e7872dc132e7689bcd3/img14.jpg)
Содержание слайда: Bounded wildcards
Bounded wildcards
<? extends Тип> - будь-який тип-нащадок Тип
<? super Тип> - будь-який тип-пращур Тип
№16 слайд![Let s look to java source](/documents_6/3f803e749c167e7872dc132e7689bcd3/img15.jpg)
Содержание слайда: Let’s look to java source
№17 слайд![Deep dive to java source](/documents_6/3f803e749c167e7872dc132e7689bcd3/img16.jpg)
Содержание слайда: Deep dive to java source
№18 слайд![](/documents_6/3f803e749c167e7872dc132e7689bcd3/img17.jpg)
№19 слайд![Real case of java generic](/documents_6/3f803e749c167e7872dc132e7689bcd3/img18.jpg)
Содержание слайда: Real case of java generic constructor
№20 слайд![Л тература The Java Tutorial.](/documents_6/3f803e749c167e7872dc132e7689bcd3/img19.jpg)
Содержание слайда: Література
The Java Tutorial. http://download.oracle.com/javase/tutorial/java/TOC.html
James Gosling, Bill Joy, Guy Steele. The Java Language Specification. - Addison Wesley. - 3 edition. - 2005. - 688p. -http://java.sun.com/docs/books/jls/