🗊Презентация Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1)

Нажмите для полного просмотра!
Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №1Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №2Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №3Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №4Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №5Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №6Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №7Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №8Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №9Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №10Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №11Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №12Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №13Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №14Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №15Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №16Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №17Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №18Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №19Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №20Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №21Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №22Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №23Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №24Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №25Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №26Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №27Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №28Программирование на Java. Параметризированные типы. Обобщения, Generics. (Лекция 6.1), слайд №29

Содержание

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

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


Слайд 1





 Мультимедийный курс 

Программирование на Java


Лекция 6.1

Параметризированные типы
(Обобщения, Generics)
Описание слайда:
Мультимедийный курс Программирование на Java Лекция 6.1 Параметризированные типы (Обобщения, Generics)

Слайд 2





Параметризированные типы
Параметризированные (generic) типы - классы, интерфейсы и методы, в которых тип обрабатываемых данных задается как параметр (параметр типа) .
Параметризированные типы, позволяют использовать более гибкую и в то же время достаточно строгую
типизацию,  обеспечивая  безопасность типов
Описание слайда:
Параметризированные типы Параметризированные (generic) типы - классы, интерфейсы и методы, в которых тип обрабатываемых данных задается как параметр (параметр типа) . Параметризированные типы, позволяют использовать более гибкую и в то же время достаточно строгую типизацию, обеспечивая безопасность типов

Слайд 3





Параметризированные типы
Применение параметризированного класса:
Gen<Integer>   iob = new  Gen<Integer>(88) ;
Описание слайда:
Параметризированные типы Применение параметризированного класса: Gen<Integer> iob = new Gen<Integer>(88) ;

Слайд 4





Параметризированные типы
Аргумент типа,  задаваемый при объявлении параметризированного типа – может быть только классом, а не примитивным типом !!!
Разные аргументы:
Описание слайда:
Параметризированные типы Аргумент типа, задаваемый при объявлении параметризированного типа – может быть только классом, а не примитивным типом !!! Разные аргументы:

Слайд 5





Параметризированные типы
Пример1: Параметризированный класс 
				         с одним параметром типа:
Описание слайда:
Параметризированные типы Пример1: Параметризированный класс с одним параметром типа:

Слайд 6





Параметризированные типы
Пример1: Параметризированный класс 
				         с одним параметром типа:
Описание слайда:
Параметризированные типы Пример1: Параметризированный класс с одним параметром типа:

Слайд 7





Параметризированные типы
Пример1: Параметризированный класс 
				         с одним параметром типа:
Описание слайда:
Параметризированные типы Пример1: Параметризированный класс с одним параметром типа:

Слайд 8





Параметризированные типы
Пример1: Параметризированный класс 
				         с одним параметром типа:
Описание слайда:
Параметризированные типы Пример1: Параметризированный класс с одним параметром типа:

Слайд 9





Параметризированные типы
Параметризированный класс 
				с несколькими параметрами типа:
Описание слайда:
Параметризированные типы Параметризированный класс с несколькими параметрами типа:

Слайд 10





Параметризированные типы
Ограничения на типы, передаваемые параметру типа:
В качестве верхней границы задается суперкласс, от которого должны быть унаследованы все аргументы типа:
Gen <Т  extends  superclass> 
Gen <Т  extends  Number> 
Аргументы параметра типа в этом случае:   
только  тип Number  или  его подклассы 
	   Integer, Float
Описание слайда:
Параметризированные типы Ограничения на типы, передаваемые параметру типа: В качестве верхней границы задается суперкласс, от которого должны быть унаследованы все аргументы типа: Gen <Т extends superclass> Gen <Т extends Number> Аргументы параметра типа в этом случае: только тип Number или его подклассы Integer, Float

Слайд 11





Параметризированные типы
Применение метасимвольных аргументов 
необходимо в случае, если параметр типа невозможно определить
 
Метасимвол:   ?
Описание слайда:
Параметризированные типы Применение метасимвольных аргументов необходимо в случае, если параметр типа невозможно определить Метасимвол: ?

Слайд 12





Параметризированные типы
Пример
class  Stats<T> {
   Т[]  nums; 
    Stats(T[] о) {
    nums  = о;
    }
// Вычисляет среднее арифметич. элементов массива
    double average() {
        double sum = 0.0;
        for (int i=0;  i < nums.length; i++)
           sum += nums[i].doubleValue(); //  метод кл. Number – приводит к
 					//  типу  Double
           return sum / nums.length;
    }
}
Описание слайда:
Параметризированные типы Пример class Stats<T> { Т[] nums; Stats(T[] о) { nums = о; } // Вычисляет среднее арифметич. элементов массива double average() { double sum = 0.0; for (int i=0; i < nums.length; i++) sum += nums[i].doubleValue(); // метод кл. Number – приводит к // типу Double return sum / nums.length; } }

Слайд 13





Параметризированные типы
Пример (продолжение)
boolean sameAvg(Stats<?> ob)  {         // любой объект типа Stats, 
	// если Т, то ожидается тип передаваемый вызывающим объектом
  if  (average() == ob.average())
     return true;
  else
     return false;
       }
. . . 
Integer inums[] = { 1, 2, 3, 4, 5 };
Double dnums[] = { 1.1, 2.2, 3.3, 4.4, 5.5 };
Stats<Integer> iob = new Stats<Integer>(inums);
Stats<Double>  dob = new Stats<Double>(dnums);
System.out.print("Средние арифметические iob и dob ");
    if (iob. sameAvg (dob) ) // вызывающий об. и параметр  –
				        // объекты одного класса
       System.out.println("совпадают.");
    else
       System, out.println("отличаются.");
. . .
Описание слайда:
Параметризированные типы Пример (продолжение) boolean sameAvg(Stats<?> ob) { // любой объект типа Stats, // если Т, то ожидается тип передаваемый вызывающим объектом if (average() == ob.average()) return true; else return false; } . . . Integer inums[] = { 1, 2, 3, 4, 5 }; Double dnums[] = { 1.1, 2.2, 3.3, 4.4, 5.5 }; Stats<Integer> iob = new Stats<Integer>(inums); Stats<Double> dob = new Stats<Double>(dnums); System.out.print("Средние арифметические iob и dob "); if (iob. sameAvg (dob) ) // вызывающий об. и параметр – // объекты одного класса System.out.println("совпадают."); else System, out.println("отличаются."); . . .

Слайд 14





Параметризированные типы
Ограничение метасимвольных аргументов
Задание верхней  границы:
<? extends  superclass>
superclass - имя класса, который служит верхней границей 
Задание нижней  границы:
<? super subclass> 
Допустимые аргументы -  суперклассы класса subclass. subclass   не является допустимым типом аргумента
Описание слайда:
Параметризированные типы Ограничение метасимвольных аргументов Задание верхней границы: <? extends superclass> superclass - имя класса, который служит верхней границей Задание нижней границы: <? super subclass> Допустимые аргументы - суперклассы класса subclass. subclass не является допустимым типом аргумента

Слайд 15





Параметризированные типы
Пример
static void showXYZ(Coords<? extends ThreeD>  c) {
    System.out.println("X Y Z Coordinates:");
    for(int i=0; i < c.coords.length; i++)
      System.out.println(c.coords [i].x + " " +
                         с.coords[i].у + " " +
                         с.coords[i].z);
    System.out.println();
  }
Описание слайда:
Параметризированные типы Пример static void showXYZ(Coords<? extends ThreeD> c) { System.out.println("X Y Z Coordinates:"); for(int i=0; i < c.coords.length; i++) System.out.println(c.coords [i].x + " " + с.coords[i].у + " " + с.coords[i].z); System.out.println(); }

Слайд 16





Параметризированные типы
Параметризированные методы
могут иметь один или несколько  собственных параметров типа
могут создаваться и внутри непараметризированного класса
могут быть  как статическими, так и  нестатическими
  Синтаксис записи
     <список_парам._типа>  возвр._знач.
					       					                 имя_метода(список_парам.) { ...} 
Пример: 
      static <Т, V extends Т> boolean isIn(T х, V[]  у)  {
Описание слайда:
Параметризированные типы Параметризированные методы могут иметь один или несколько собственных параметров типа могут создаваться и внутри непараметризированного класса могут быть как статическими, так и нестатическими Синтаксис записи <список_парам._типа> возвр._знач. имя_метода(список_парам.) { ...} Пример: static <Т, V extends Т> boolean isIn(T х, V[] у) {

Слайд 17





Параметризированные типы
Пример: 
// Параметризированный метод 
     static <Т, V extends Т> boolean isIn(T х, V[]  у)  { 
		for(int i=0; i < y.length; i++) 
              if(x.equals(y[i])) return true; 
         return false; 
       } 
// Вызов метода 
     public static void main(String args[]) {  
         Integer nums[] = { 1, 2, 3, 4, 5 }; 
         if(isIn(2, nums)) 
            System.out.println("2 содержится в массиве");
     }
Описание слайда:
Параметризированные типы Пример: // Параметризированный метод static <Т, V extends Т> boolean isIn(T х, V[] у) { for(int i=0; i < y.length; i++) if(x.equals(y[i])) return true; return false; } // Вызов метода public static void main(String args[]) { Integer nums[] = { 1, 2, 3, 4, 5 }; if(isIn(2, nums)) System.out.println("2 содержится в массиве"); }

Слайд 18





Параметризированные типы
Пример: 
class GenCons { 
  private double val;  
  <T extends Number> GenCons(T arg) {  // Параметризированный только метод 
    val = arg.doubleValue(); 
  } 
 
  void showval() { 
    System.out.println("val: " + val); 
  } 
} 
 
class GenConsDemo { 
  public static void main(String args[]) {  
    GenCons test = new GenCons(100); 
    GenCons test2 = new GenCons(123.5F);  
    test.showval(); 
    test2.showval(); 
  } 
}
Описание слайда:
Параметризированные типы Пример: class GenCons { private double val; <T extends Number> GenCons(T arg) { // Параметризированный только метод val = arg.doubleValue(); } void showval() { System.out.println("val: " + val); } } class GenConsDemo { public static void main(String args[]) { GenCons test = new GenCons(100); GenCons test2 = new GenCons(123.5F); test.showval(); test2.showval(); } }

Слайд 19





Параметризированные типы
Настраиваемые интерфейсы 
задаются так же, как настраиваемые классы 
interface  MinMax<T  extends  Comparable<T>> { 
 класс, реализующий интерфейс

Class  MyClass<T  extends Comparable<T>>  
					 implements   MinMax<T> {
Описание слайда:
Параметризированные типы Настраиваемые интерфейсы задаются так же, как настраиваемые классы interface MinMax<T extends Comparable<T>> { класс, реализующий интерфейс Class MyClass<T extends Comparable<T>> implements MinMax<T> {

Слайд 20





Параметризированные типы
Иерархии параметризированных классов
параметризированный класс может  быть суперклассом  или быть подклассом
аргументы типа, необходимые суперклассу, должны передаваться всем подклассам !!!
Описание слайда:
Параметризированные типы Иерархии параметризированных классов параметризированный класс может быть суперклассом или быть подклассом аргументы типа, необходимые суперклассу, должны передаваться всем подклассам !!!

Слайд 21





Параметризированные типы
Иерархии настраиваемых классов (продолжение)
в подклассе всегда определяются параметры типа, требующиеся для его настраиваемого суперкласса
подкласс может иметь собственные параметры типа
Описание слайда:
Параметризированные типы Иерархии настраиваемых классов (продолжение) в подклассе всегда определяются параметры типа, требующиеся для его настраиваемого суперкласса подкласс может иметь собственные параметры типа

Слайд 22





Параметризированные типы
Применение настраиваемых типов в коллекциях
все классы и интерфейсы, связанные с классами АrrayList,  LinkedList  и TreeSet  - параметризированные:
ArrayList<String> list = new ArrayList<String>(); 
преимущества:
гарантируется сохранение в коллекции ссылок на объекты только нужного  типа
исключается необходимость явного приведения  типа ссылки, при извлечении  из  коллекции
Описание слайда:
Параметризированные типы Применение настраиваемых типов в коллекциях все классы и интерфейсы, связанные с классами АrrayList, LinkedList и TreeSet - параметризированные: ArrayList<String> list = new ArrayList<String>(); преимущества: гарантируется сохранение в коллекции ссылок на объекты только нужного типа исключается необходимость явного приведения типа ссылки, при извлечении из коллекции

Слайд 23





Параметризированные типы
Сравнение типов настраиваемой иерахии:
операция 
		объект   instanceof  тип 
возвращает true, если  объект  имеет заданный тип  или м.б. преобразован к нему
		if (iOb instanceof Gen2<?>)
      	   System.out.println("iOb  совместим с Gen2"); 
Приведение типов: преобразование одного  экземпляра параметризированного класса в другой 
		(Gen<Integer>)  iob2
        если они взаимно совместимы
Описание слайда:
Параметризированные типы Сравнение типов настраиваемой иерахии: операция объект instanceof тип возвращает true, если объект имеет заданный тип или м.б. преобразован к нему if (iOb instanceof Gen2<?>) System.out.println("iOb совместим с Gen2"); Приведение типов: преобразование одного экземпляра параметризированного класса в другой (Gen<Integer>) iob2 если они взаимно совместимы

Слайд 24





Параметризированные типы
Реализация в Java обобщенных типов
При компиляции:
информация о обобщенных типах удаляется 
     (эффект стирания)
параметры типа заменяются ограничивающими их типами (если заданы) либо Object 
все параметризованные классы используют один класс:
 Gen<Integer> iOb  = new Gen<Integer>(99);
    Gen<Float>  fOb =  new Gen<Float>(102.2F);
    Systern.out.println(iOb.getclass () .getName()) ;
    System, out.println(fOb.getClass (). getName());  
Результат:
Gen
Gen
Описание слайда:
Параметризированные типы Реализация в Java обобщенных типов При компиляции: информация о обобщенных типах удаляется (эффект стирания) параметры типа заменяются ограничивающими их типами (если заданы) либо Object все параметризованные классы используют один класс: Gen<Integer> iOb = new Gen<Integer>(99); Gen<Float> fOb = new Gen<Float>(102.2F); Systern.out.println(iOb.getclass () .getName()) ; System, out.println(fOb.getClass (). getName()); Результат: Gen Gen

Слайд 25





Параметризированные типы
Поэтому нельзя: запрашивать тип в процессе выполнения программы

public class MyList<E> {
  public E[] toArray() {
    return new E[5]; // compile error
  }
  public boolean canAdd(Object o) {
    return (o instanceof E); // compile error –}
  public E convertToE(Object o) {
    return (E) o; // compile warning, unchecked cast
  }
}
Описание слайда:
Параметризированные типы Поэтому нельзя: запрашивать тип в процессе выполнения программы public class MyList<E> { public E[] toArray() { return new E[5]; // compile error } public boolean canAdd(Object o) { return (o instanceof E); // compile error –} public E convertToE(Object o) { return (E) o; // compile warning, unchecked cast } }

Слайд 26





Параметризированные типы
Raw Type
Можно создать объект настраиваемого (генефицированного) класса без указания типов аргументов
Классы Pre-J2SE 5.0 продолжают функционировать под J2SE 5.0 JVM как raw тип
    // ??????
   List<String> ls = new LinkedList<String>();
   // Raw type
  List lraw = new LinkedList();
Описание слайда:
Параметризированные типы Raw Type Можно создать объект настраиваемого (генефицированного) класса без указания типов аргументов Классы Pre-J2SE 5.0 продолжают функционировать под J2SE 5.0 JVM как raw тип // ?????? List<String> ls = new LinkedList<String>(); // Raw type List lraw = new LinkedList();

Слайд 27





Параметризированные типы
Ограничения

T t = new T();       // конструктор ?
Статические члены класса не могут использовать параметры типа
static T t;             //??????
Описание слайда:
Параметризированные типы Ограничения T t = new T(); // конструктор ? Статические члены класса не могут использовать параметры типа static T t; //??????

Слайд 28





Параметризированные типы
Ограничения (продолжение)
Создание экземпляров универсальных типов 
class Test<T> {
   T values;             //ok
   Test(T[] n) {
       values = new T[10];     // базовый тип - параметр типа 
			
       values = n;       //ok
    }
}
Массивы
Test<Integer> iTest[] = new Test<Integer>[10]      		// нельзя объявлять с аргументами типа	
Test<?> iTest[] = new Test<?>[10]             //ok
Описание слайда:
Параметризированные типы Ограничения (продолжение) Создание экземпляров универсальных типов class Test<T> { T values; //ok Test(T[] n) { values = new T[10]; // базовый тип - параметр типа values = n; //ok } } Массивы Test<Integer> iTest[] = new Test<Integer>[10] // нельзя объявлять с аргументами типа Test<?> iTest[] = new Test<?>[10] //ok

Слайд 29





Параметризированные типы
Ограничения (продолжение)
Исключения
Невозможно 
сгенерировать или перехватить исключение, описываемое универсальным объектом
создать параметризированный класс, расширяющий класс Throwable
 использовать параметр типа в выражении catch
Допустимо использовать параметр типа в выражении  throws
Описание слайда:
Параметризированные типы Ограничения (продолжение) Исключения Невозможно сгенерировать или перехватить исключение, описываемое универсальным объектом создать параметризированный класс, расширяющий класс Throwable использовать параметр типа в выражении catch Допустимо использовать параметр типа в выражении throws



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