🗊Презентация Поняття про відображення (reflection, інтроспекція)

Нажмите для полного просмотра!
Поняття про відображення (reflection, інтроспекція), слайд №1Поняття про відображення (reflection, інтроспекція), слайд №2Поняття про відображення (reflection, інтроспекція), слайд №3Поняття про відображення (reflection, інтроспекція), слайд №4Поняття про відображення (reflection, інтроспекція), слайд №5Поняття про відображення (reflection, інтроспекція), слайд №6Поняття про відображення (reflection, інтроспекція), слайд №7Поняття про відображення (reflection, інтроспекція), слайд №8Поняття про відображення (reflection, інтроспекція), слайд №9Поняття про відображення (reflection, інтроспекція), слайд №10Поняття про відображення (reflection, інтроспекція), слайд №11Поняття про відображення (reflection, інтроспекція), слайд №12Поняття про відображення (reflection, інтроспекція), слайд №13Поняття про відображення (reflection, інтроспекція), слайд №14Поняття про відображення (reflection, інтроспекція), слайд №15

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

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


Слайд 1





 
Reflection
Описание слайда:
Reflection

Слайд 2





Поняття про відображення (reflection, інтроспекція)
Засоби, які дозволяють під час виконання програми отримувати інформацію про класи, їх поля і методи
Більш загально – для динамічної роботи з кодом. Наприклад – створити екземпляр класу, назва якого вводиться в рядку.
Базовий інструмент – клас Class.
Додаткові можливості – пакет java.lang.reflect.
Описание слайда:
Поняття про відображення (reflection, інтроспекція) Засоби, які дозволяють під час виконання програми отримувати інформацію про класи, їх поля і методи Більш загально – для динамічної роботи з кодом. Наприклад – створити екземпляр класу, назва якого вводиться в рядку. Базовий інструмент – клас Class. Додаткові можливості – пакет java.lang.reflect.

Слайд 3





Отримання інформації про клас – базові можливості
String s = "qwerty";
        Class kl = s.getClass();
        System.out.println (kl.getSimpleName() + " is a subclass of " +
                kl.getSuperclass().getSimpleName());
Описание слайда:
Отримання інформації про клас – базові можливості String s = "qwerty"; Class kl = s.getClass(); System.out.println (kl.getSimpleName() + " is a subclass of " + kl.getSuperclass().getSimpleName());

Слайд 4





Три способи отримання екземпляру класу Class
метод getClass() класу Object;
виклик статичного методу Class.forName(ім’я класу) – завантаження класу за іменем;
T.class, де Т-деякий тип.
Описание слайда:
Три способи отримання екземпляру класу Class метод getClass() класу Object; виклик статичного методу Class.forName(ім’я класу) – завантаження класу за іменем; T.class, де Т-деякий тип.

Слайд 5





Приклад: отримання методів класу
import java.io.*;
import java.lang.reflect.*;
public class reflection {
public static void main(String[] args) throws Exception {
BufferedReader br=new BufferedReader(new InputStreamReader
(System.in));
System.out.println("Enter class name");
String clName=br.readLine();
Class cl = Class.forName(clName);
 Method[] M  = cl.getMethods();
for (Method m:M) {System.out.println(m);} 
}
}
Описание слайда:
Приклад: отримання методів класу import java.io.*; import java.lang.reflect.*; public class reflection { public static void main(String[] args) throws Exception { BufferedReader br=new BufferedReader(new InputStreamReader (System.in)); System.out.println("Enter class name"); String clName=br.readLine(); Class cl = Class.forName(clName); Method[] M = cl.getMethods(); for (Method m:M) {System.out.println(m);} } }

Слайд 6





Різниця між getMethods та getDeclaredMethods
Перший повертає всі публічні методи з урахуванням успадкування, а другий – всі методи, визначені в цьому класі.
Задача: вивести список всіх методів, які визначені в класі, але лише публічних.
Описание слайда:
Різниця між getMethods та getDeclaredMethods Перший повертає всі публічні методи з урахуванням успадкування, а другий – всі методи, визначені в цьому класі. Задача: вивести список всіх методів, які визначені в класі, але лише публічних.

Слайд 7





Динамічне завантаження класу та створення екземпляру
public static void main(String[] args) throws Exception {
        Class c = Class.forName("dinload.A");
        A a = (A) c.newInstance();
        a.inform();
    }
}
class A {
    static {        System.out.println("A is initialized");    }
    A() {        System.out.println("Instance created");    }
    void inform() { System.out.println(“ You can create dinamic instance");    }
}
Описание слайда:
Динамічне завантаження класу та створення екземпляру public static void main(String[] args) throws Exception { Class c = Class.forName("dinload.A"); A a = (A) c.newInstance(); a.inform(); } } class A { static { System.out.println("A is initialized"); } A() { System.out.println("Instance created"); } void inform() { System.out.println(“ You can create dinamic instance"); } }

Слайд 8





Або:
Class <Kl> cl = Kl.class;
Kl ekz = cl.newInstance();
ekz.metod();
Описание слайда:
Або: Class <Kl> cl = Kl.class; Kl ekz = cl.newInstance(); ekz.metod();

Слайд 9





Як це зробити більш гнучко?
Треба уникнути зведень до класу, який за ідеєю прикладу має бути невідомим.
Крім того, і ім’я методу може бути невідомим на етапі компіляції.
Як це зробити?
Описание слайда:
Як це зробити більш гнучко? Треба уникнути зведень до класу, який за ідеєю прикладу має бути невідомим. Крім того, і ім’я методу може бути невідомим на етапі компіляції. Як це зробити?

Слайд 10





Злам приватності: клас
class Bastion {
private String msg = "You cannot change this string";
public String getMsg() {
        return msg;
    }
    private void metod() {
        System.out.println("This method is private!");
    }
}
Описание слайда:
Злам приватності: клас class Bastion { private String msg = "You cannot change this string"; public String getMsg() { return msg; } private void metod() { System.out.println("This method is private!"); } }

Слайд 11





Злам приватності: власне злам
Bastion b = new Bastion();
        System.out.println("Our field is: "+b.getMsg());
        //b.str="Ku-ku"; - це не компілюється
        Class bk = b.getClass();
        Field fld = bk.getDeclaredField("msg");
        fld.setAccessible(true);
        fld.set(b, "Das ist ku-ku");
        fld.setAccessible(false);
        System.out.println("The cracked field is: "+b.getMsg());
        //b.inform(); - це не компілюється
        Method m = bk.getDeclaredMethod("metod");
        m.setAccessible(true);
        m.invoke(b);
        m.setAccessible(false);
Описание слайда:
Злам приватності: власне злам Bastion b = new Bastion(); System.out.println("Our field is: "+b.getMsg()); //b.str="Ku-ku"; - це не компілюється Class bk = b.getClass(); Field fld = bk.getDeclaredField("msg"); fld.setAccessible(true); fld.set(b, "Das ist ku-ku"); fld.setAccessible(false); System.out.println("The cracked field is: "+b.getMsg()); //b.inform(); - це не компілюється Method m = bk.getDeclaredMethod("metod"); m.setAccessible(true); m.invoke(b); m.setAccessible(false);

Слайд 12





Вказівники на функцію: клас з функцією…
class Ext {
private int Pole;
    public Ext(int Pole) {
        this.Pole = Pole;
    }
public void metod() {
    System.out.println("The field of this object is "+Pole);
}
}
Описание слайда:
Вказівники на функцію: клас з функцією… class Ext { private int Pole; public Ext(int Pole) { this.Pole = Pole; } public void metod() { System.out.println("The field of this object is "+Pole); } }

Слайд 13





… і виклик функції
 Method m = Ext.class.getMethod("metod");
        Ext ext = new Ext(50);
        m.invoke(ext);
Описание слайда:
… і виклик функції Method m = Ext.class.getMethod("metod"); Ext ext = new Ext(50); m.invoke(ext);

Слайд 14





Ще один приклад: виведення таблиці значень функції
Method square = Ext.class.getMethod("square", double.class);
        Method sqrt = Math.class.getMethod("sqrt", double.class);
…
 for (double x=from; x<=to; x+=dx) {
            double y = (Double) f.invoke(null, x);
            System.out.printf("%10.4f | %10.4f%n",x,y);
  }
Описание слайда:
Ще один приклад: виведення таблиці значень функції Method square = Ext.class.getMethod("square", double.class); Method sqrt = Math.class.getMethod("sqrt", double.class); … for (double x=from; x<=to; x+=dx) { double y = (Double) f.invoke(null, x); System.out.printf("%10.4f | %10.4f%n",x,y); }

Слайд 15





Конструктивна приватність
Вправа: Написати консольне застосування, яке за допомогою Reflection (виклик newInstance) створює екземпляр класу, конструктор якого описаний як private.
Описание слайда:
Конструктивна приватність Вправа: Написати консольне застосування, яке за допомогою Reflection (виклик newInstance) створює екземпляр класу, конструктор якого описаний як private.



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