🗊Презентация Узагальнене програмування на мові Java (Generics). Лекція 4

Нажмите для полного просмотра!
Узагальнене програмування на мові Java (Generics). Лекція 4, слайд №1Узагальнене програмування на мові Java (Generics). Лекція 4, слайд №2Узагальнене програмування на мові Java (Generics). Лекція 4, слайд №3Узагальнене програмування на мові Java (Generics). Лекція 4, слайд №4Узагальнене програмування на мові Java (Generics). Лекція 4, слайд №5Узагальнене програмування на мові Java (Generics). Лекція 4, слайд №6Узагальнене програмування на мові Java (Generics). Лекція 4, слайд №7Узагальнене програмування на мові Java (Generics). Лекція 4, слайд №8Узагальнене програмування на мові Java (Generics). Лекція 4, слайд №9Узагальнене програмування на мові Java (Generics). Лекція 4, слайд №10Узагальнене програмування на мові Java (Generics). Лекція 4, слайд №11Узагальнене програмування на мові Java (Generics). Лекція 4, слайд №12Узагальнене програмування на мові Java (Generics). Лекція 4, слайд №13Узагальнене програмування на мові Java (Generics). Лекція 4, слайд №14Узагальнене програмування на мові Java (Generics). Лекція 4, слайд №15Узагальнене програмування на мові Java (Generics). Лекція 4, слайд №16Узагальнене програмування на мові Java (Generics). Лекція 4, слайд №17Узагальнене програмування на мові Java (Generics). Лекція 4, слайд №18Узагальнене програмування на мові Java (Generics). Лекція 4, слайд №19Узагальнене програмування на мові Java (Generics). Лекція 4, слайд №20

Вы можете ознакомиться и скачать презентацию на тему Узагальнене програмування на мові Java (Generics). Лекція 4. Доклад-сообщение содержит 20 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

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


Слайд 1





Мова програмування Java та технології J2EE
Модуль “Мова програмування Java”
Лекція 4. 
Узагальнене програмування на мові Java (Generics).
Описание слайда:
Мова програмування Java та технології J2EE Модуль “Мова програмування Java” Лекція 4. Узагальнене програмування на мові Java (Generics).

Слайд 2





Приклад без застосування узагальнень
Перевантаження коду змінними типу 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
Описание слайда:
Приклад без застосування узагальнень Перевантаження коду змінними типу 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)

Основні класи задач, які потребують застосування узагальнень:
Розробка функцій-утиліт для колекцій (пошук, max, min, avg, sum тощо)
Розробка контейнерів для об’єктів різних типів (стек, колекція тощо)
Мотивація для generics:
Отримувати на етапі компіляції помилки приведення типів
Обійтись без приведення типів “вручну”
Отримати більш безпечний код, який краще пишеться та читається
Описание слайда:
Узагальнення (Generics) Основні класи задач, які потребують застосування узагальнень: Розробка функцій-утиліт для колекцій (пошук, max, min, avg, sum тощо) Розробка контейнерів для об’єктів різних типів (стек, колекція тощо) Мотивація для generics: Отримувати на етапі компіляції помилки приведення типів Обійтись без приведення типів “вручну” Отримати більш безпечний код, який краще пишеться та читається

Слайд 4





Історія появи узагальнень в Java
Узагальнення побачили світ в J2SE 5 (2004р.)
Задача - розширити систему типів мови, що широко застосовується і до якої висуваються вимоги жорсткої зворотної сумісності
Роботу розпочато у 1999р.
Деякі деталі із проробки задачі:
Специфікація “JSR-014: Adding Generics to the Java Programming Language” розроблялася протягом 1999-2004
Розширення системи типів підстановочними типами (wildcards) здійснено у співпраці Sun та університету м.Орхус (Данія)
Цікаво – один із відомих уродженців м.Орхус – Бйорн Страуструп, автор мови C++
Описание слайда:
Історія появи узагальнень в Java Узагальнення побачили світ в J2SE 5 (2004р.) Задача - розширити систему типів мови, що широко застосовується і до якої висуваються вимоги жорсткої зворотної сумісності Роботу розпочато у 1999р. Деякі деталі із проробки задачі: Специфікація “JSR-014: Adding Generics to the Java Programming Language” розроблялася протягом 1999-2004 Розширення системи типів підстановочними типами (wildcards) здійснено у співпраці Sun та університету м.Орхус (Данія) Цікаво – один із відомих уродженців м.Орхус – Бйорн Страуструп, автор мови C++

Слайд 5





Приклад застосування узагальнень
Замість 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(); // Не потрібне приведення
                                            // типів
}
Негаразд із типами - помилка компіляції
Описание слайда:
Приклад застосування узагальнень Замість 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

Це елементи мови
Це функціональність компілятора, яка дозволяє виявити певні помилки на стадії компіляції
Це не функціональність JVM
Type erasure - На стадії виконання (runtime) уся інформація про узагальнення стирається
Через вимоги жорсткої зворотної сумісності – старий байт-код повинен працювати на нових JVM
Узагальнення не потребують додаткових ресурсів часу виконання
Описание слайда:
Реалізація узагальнень в Java Це елементи мови Це функціональність компілятора, яка дозволяє виявити певні помилки на стадії компіляції Це не функціональність JVM Type erasure - На стадії виконання (runtime) уся інформація про узагальнення стирається Через вимоги жорсткої зворотної сумісності – старий байт-код повинен працювати на нових JVM Узагальнення не потребують додаткових ресурсів часу виконання

Слайд 7





Елементи мови, які узагальнюються

Що може бути узагальнене
Класи
але не всі, див. нижче
Інтерфейси
Методи
Конструктори
Які типи можуть бути параметрами для узагальнення
Типи-посилання (класи, інтерфейси, масиви)
Які типи не можуть бути параметрами для узагальнення
Примітивні типи (але класи-оболонки можуть)
Які класи не можуть бути узагальнені
Enum
Чому?
Клас Throwable та його нащадки
Обмеження викликане тим, що механізм catch у JVM не працює з параметризованими класами
Описание слайда:
Елементи мови, які узагальнюються Що може бути узагальнене Класи але не всі, див. нижче Інтерфейси Методи Конструктори Які типи можуть бути параметрами для узагальнення Типи-посилання (класи, інтерфейси, масиви) Які типи не можуть бути параметрами для узагальнення Примітивні типи (але класи-оболонки можуть) Які класи не можуть бути узагальнені Enum Чому? Клас Throwable та його нащадки Обмеження викликане тим, що механізм catch у JVM не працює з параметризованими класами

Слайд 8





Узагальнені типи

Узагальнені типи – узагальнені класи та узагальнені інтерфейси

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> {…}
Описание слайда:
Узагальнені типи Узагальнені типи – узагальнені класи та узагальнені інтерфейси 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





Узагальнені типи. Продовження

Box<T> - узагальнений клас із змінною типу T
Box<Integer> - параметризований тип, 
				із параметром (аргументом) Integer
Приклади
Vector<String>
Seq<Seq<A>>
Collection<Integer>
Pair<String,String>
Iterator<int[]> - параметризація масивом

Виклик конструктора 
Box<Integer> integerBox = new Box<Integer>();
Описание слайда:
Узагальнені типи. Продовження 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





Узагальнені методи

Узагальнений метод
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);    // повний синтаксис
Узагальнення конструкторів відбувається аналогічно
Описание слайда:
Узагальнені методи Узагальнений метод 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





Обмеження для змінних типу

Подібного немає в 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
Описание слайда:
Обмеження для змінних типу Подібного немає в 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 (підстановочні типи). Мотивація
public void boxTest(Box<Number> n) { ...}
boxTest(new Box<Integer>()); // compile error
boxTest(new Box<Double>());  // compile error
Описание слайда:
Whildcards (підстановочні типи). Мотивація public void boxTest(Box<Number> n) { ...} boxTest(new Box<Integer>()); // compile error boxTest(new Box<Double>()); // compile error

Слайд 13





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
Описание слайда:
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
Застосування “?”
тільки для тих type arguments
в полях/локальних змінних/методах/конструкторах/декларації класів
Описание слайда:
Wildcards details Застосування “?” тільки для тих type arguments в полях/локальних змінних/методах/конструкторах/декларації класів

Слайд 15





Bounded wildcards
Bounded wildcards
<? extends Тип> - будь-який тип-нащадок Тип
<? super Тип> - будь-який тип-пращур Тип
Описание слайда:
Bounded wildcards Bounded wildcards <? extends Тип> - будь-який тип-нащадок Тип <? super Тип> - будь-який тип-пращур Тип

Слайд 16





Let’s look to java source
Описание слайда:
Let’s look to java source

Слайд 17





Deep dive to java source
Описание слайда:
Deep dive to java source

Слайд 18


Узагальнене програмування на мові Java (Generics). Лекція 4, слайд №18
Описание слайда:

Слайд 19





Real case of java generic constructor
Описание слайда:
Real case of java generic constructor

Слайд 20





Література

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/
Описание слайда:
Література 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/



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