- •К лабораторной работе 2 по ооп
- •Часть 1. Делегаты и события в языке с# Делегаты
- •Задание
- •События
- •1. Событие и обработчик в одном классе (источник является и приёмником)
- •2. Событие и обработчик в разных классах (источник отделён от приёмника)
- •3. Событие с объектом данных
- •Задание
- •Часть 2. События в языке Java Делегирование одного обработчика
- •Делегирование многих обработчиков (Реализация события со многими слушателями)
- •Интерфейс и класс нашего события, суперкласс классов источников нашего события, классы источника и приёмника нашего события
- •Задание
- •Часть 3. Потоки в языке с# Поток
- •Потоковые объекты
- •Задание
- •Часть 4. Потоки в языке Java Поток
- •Потоковые объекты
- •Задание
Часть 2. События в языке Java Делегирование одного обработчика
interface IntEv // Интерфейс события
{
void Handler (int a, String b);
}
class Source // Класс источника
{
IntEv intEv; // Ссылка на обработчик
public Source (IntEv intEv)
{
this.intEv= intEv;
}
// Выполнить делегированную функцию Handler
public void Fire (int x, String s)
{
intEv.Handler (1, "one");
}
}
class Receiver implements IntEv // Класс приёмника
{
// Обработчик события
public void Handler (int a, String b)
{
System.out.println ("a= " + a + " b= "+ b);
}
}
public class TestEv
{
public static void main ()
{
Receiver r= new Receiver (); // Создать приёмник
Source s= new Source (r); // Создать источник
// и подписать обработчик
// Генерировать событие
s.Fire (5,"five");
}
}
Делегирование многих обработчиков (Реализация события со многими слушателями)
import java.util.*;
interface IntEv // Интерфейс события
{
void Handler (int a, String b); // Обработчик
}
class Source // Класс источника события
{
ArrayList aL; // Список ссылок на слушателей
public Source ()
{
aL= new ArrayList();
}
// Функция подписки слушателя
public void addListener (IntEv iE)
{
aL.add(iE);
}
// Функция генерирования события
public void Fire (int x, String s)
{
for(int i=0;i<aL.size(); i++)
{
IntEv iE=(IntEv) aL.get(i);
iE.Handler(x, s);
}
}
}
class Listener implements IntEv // Класс слушателя события
{
int n;
public Listener (int N) {n= N;}
// Обработчик события
public void Handler (int a, String b)
{
System.out.println ("n= " + n + " a= " + a + " b= "+ b);
}
}
public class TestEv
{
public static void main ()
{
Listener r1= new Listener (1); // Создать первый слушатель
Listener r2= new Listener (2); // Создать второй слушатель
Source s= new Source (); // Создать источник события
s.addListener(r1); // Подписать первый слушатель на событие
s.addListener(r2); // Подписать второй слушатель на событие
// Генерировать событие
s.Fire (5,"five");
}
}
Интерфейс и класс нашего события, суперкласс классов источников нашего события, классы источника и приёмника нашего события
import java.util.*;
class OurEvent // Класс (данных)нашего события
{
private int x;
private String s;
public OurEvent (int X, String S)
{x= X; s= S;}
public int getX() {return x;}
public String getS() {return s;}
}
interface OurListener // Интерфейс нашего события
{
void Handler (Object sender, OurEvent oE);
}
class OurSouceEvent // Суперкласс класса источника нашего события
{
ArrayList aL= new ArrayList ();// Создать список ссылок слушателей
// Добавить слушателя
public void addOurListener (OurListener oL)
{
aL.add (oL);// Добавить ссылку на слушателя нашего события
}
// Удалить слушателя
public void removeOurListener(OurListener oL)
{
aL.remove (oL);// Удалить ссылку на слушателя нашего события
}
// Сгенерировать событие
public void fireOurEvent (int a, String b)
{
OurEvent oE= new OurEvent (a, b);
for (int i= 0; i<aL.size(); i++)
{
OurListener oL= (OurListener) aL.get(i);
oL.Handler (this, oE);
}
}
}
class Source1 extends OurSouceEvent // Класс первого источника события
{
}
class Source2 extends OurSouceEvent // Класс второго источника события
{
// Переопределить функцию fireOurEvent
public void fireOurEvent (int a, String b)
{super.fireOurEvent (a+10,b+" plus ten");}
}
class Receiver implements OurListener // Класс приёмника события
{
// Обработчик события
public void Handler (Object sender, OurEvent oE)
{
System.out.print ("source= " + sender.GetType());
System.out.println (" a= " + oE.getX() + " b= "+ oE.getS());
}
}
public class TestEv
{
public static void main ()
{
Receiver r= new Receiver (); // Создать первый приёмник события
Source1 s1= new Source1 (); // Создать источник события
// и подписать обработчик на событие
s1.addOurListener (r);
// Генерировать событие
s1.fireOurEvent (5,"five");
/////
Source2 s2= new Source2 (); // Создать второй источник события
// и подписать обработчик на событие
s2.addOurListener (r);
// Генерировать событие
s2.fireOurEvent (5,"five");
}
}