LoveRead.info » Книги » Разная литература » Интернет-журнал "Домашняя лаборатория", 2007 №9 - Журнал «Домашняя лаборатория»

Интернет-журнал "Домашняя лаборатория", 2007 №9 - Журнал «Домашняя лаборатория»

Книгу Интернет-журнал "Домашняя лаборатория", 2007 №9 - Журнал «Домашняя лаборатория» читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

301 0 18:01, 17-10-2023

Книга Интернет-журнал "Домашняя лаборатория", 2007 №9 - Журнал «Домашняя лаборатория» читать онлайн бесплатно без регистрации

Большой и увлекательный, научно-прикладной, образовательный, некоммерческий интернет-журнал, созданный группой энтузиастов. Журнал содержит материалы, найденные в Интернет или написанные для Интернет. Основная тематика статей — то, что можно сделать самому, от садовых поделок до сверхпроводников, но есть и просто полезные материалы.

    1 ... 373 374 375 376 377 378 379 380 381 ... 415
    Перейти на страницу:
    class="p1">    public void H2 (object s, EventArgs e)

        {

              Console.WriteLine("Событие Ev2");

        }

        public void H3 (object s, EventArgs e)

        {

              Console.WriteLine("Событие Ev3");

        }

        public void H4 (object s, EventArgs e)

        {

              Console.WriteLine("Событие Ev4");

        }

    }//class ReceiverEvs

    Тестирующая процедура состоит из нескольких строчек, в которых создаются нужные объекты и запускается метод Simulate, зажигающий события:

    public void TestManyEvents()

    {

        ManyEvents me = new ManyEvents ();

        ReceiverEvs revs = new ReceiverEvs(me);

        me.SimulateEvs();

    }

    Все работает предусмотренным образом.

    Проект "Город и его службы"

    Завершить лекцию о событиях хочется содержательным учебным проектом, в котором моделируется жизнь города, происходящие в нем события и реакция на них городских служб. Наша главная цель в данном проекте — еще раз показать, как возникающее событие, в данном случае — пожар в одном из домов города, обрабатывается по-разному городскими службами — пожарными, милицией, скорой помощью. Конечно, все упрощено, в реальном городе событиями являются не только пожары и преступления, но и более приятные ситуации: день города, открытие фестивалей и выставок, строительство новых театров и институтов.

    Начнем с описания класса, задающего наш город. Этот класс уже появлялся и в этой, и в предыдущей лекции, здесь его описание будет расширено. Начнем со свойств класса:

    public class NewTown

    {

        //свойства

        private int build, BuildingNumber; //дом и число домов в городе

        private int day, days; //Текущий день года

        //городские службы

        private Police policeman;

        private Ambulance ambulanceman;

        private FireDetect fireman;

        //события в городе

        public event FireEventHandler Fire;

        //моделирование случайных событий

        private Random rnd = new Random();

        //вероятность пожара в доме в текущий день: р= m/n

        private int m = 3, n= 10000;

    В нашем городе есть дома; есть время, текущее день за днем; городские службы; событие "пожар", которое, к сожалению, может случайно с заданной вероятностью возникать каждый день в каждом доме. Рассмотрим конструктор объектов нашего класса:

    //конструктор класса

    public NewTown(int TownSize, int Days)

    {

        BuildingNumber = rnd.Next(TownSize);

        days = Days;

        policeman = new Police (this);

        ambulanceman= new Ambulance (this);

        fireman= new FireDetect (this);

        policeman.On ();

        ambulanceman.On ();

        fireman.On ();

    }

    При создании объектов этого класса задается размер города — число его домов и период времени, в течение которого будет моделироваться жизнь города. При создании объекта создаются его службы — объекты соответствующих классов Police, Ambulance, FireDetect, которым передается ссылка на сам объект "город". При создании служб вызываются методы On, подключающие обработчики события Fire каждой из этих служб к событию.

    В соответствии с ранее описанной технологией определим метод OnFire, включающий событие:

    protected virtual void OnFire(FireEventArgs e)

    {

       if(Fire!= null)

          Fire(this, e);

    }

    Где и когда будет включаться событие Fire? Напишем метод, моделирующий жизнь города, где для каждого дома каждый день будет проверяться, а не возник ли пожар, и, если это случится, то будет включено событие Fire;

    public void LifeOurTown ()

    {

        for(day = 1; day<=days; day++)

            for(build =1; build <= BuildingNumber; build++)

            {

                if(rnd.Next(n) <=m) //загорелся дом

                {

                   //аргументы события

                FireEventArgs е = new FireEventArgs(build, day, true);

                   OnFire(e);

                   if(e.Permit)

                         Console.WriteLine("Пожар потушен!" +

                             " Ситуация нормализована.");

                    else Console.WriteLine("Пожар продолжается." +

                        " Требуются дополнительные средства!");

                  }

             }

    }

    Рассмотрим теперь классы Receiver, обрабатывающие событие Fire. Их у нас три, по одному на каждую городскую службу. Все три класса устроены по одному образцу. Напомню, каждый такой разумно устроенный класс, кроме обработчика события, имеет конструктор, инициализирующий ссылку на объект, создающий события, методы подключения и отсоединения обработчика от события. В такой ситуации целесообразно построить вначале абстрактный класс Receiver, в котором будет предусмотрен обработчик события, но не задана его реализация, а затем для каждой службы построить класс-потомок. Начнем с описания родительского класса:

    public abstract class Receiver

    {

        private NewTown town;

        public Receiver(NewTown town)

            {this.town = town;}

        public void On()

        {

            town.Fire += new FireEventHandler(It_is_Fire);

        }

        public void Off()

        {

            town.Fire — = new FireEventHandler(It_is_Fire);

            town = null;

        }

        public abstract void It_is_Fire(object sender,

            FireEventArgs e);

    }//class Receiver

    Для классов потомков абстрактный метод It_is_Fire будет определен. Вот их описания:

    public class Police: Receiver

        {

            public Police (NewTown town): base(town){}

            public override void It_is_Fire(object sender,

                FireEventArgs e)

            {

                Console.WriteLine("Пожар в доме {0}. День {1}-й. "

                     + " Милиция ищет виновных!", е. Build,е. Day);

                е. Permit &= true;

             }

        }// class Police

        public class FireDetect: Receiver

        {

             public FireDetect (NewTown town): base(town){}

             public override void It_is_Fire(object sender, FireEventArgs e)

             {

                 Console.WriteLine("Пожар в доме {0}. День {1}-й."+

                     " Пожарные тушат пожар!", е. Build,е. Day);

                 Random rnd = new Random(e.Build);

                 if(rnd.Next(10) >5)

                      e. Permit &= false;

                 else e.Permit &=true;

              }

         }// class FireDetect public class Ambulance: Receiver

         {

              public Ambulance(NewTown town): base(town){}

              public override void It_is_Fire(object sender,

                  FireEventArgs e)

              {

                   Console.WriteLine("Пожар в доме {0}. День {1}-й."+

                      " Скорая спасает пострадавших!", е. Build,е. Day);

              е. Permit &= true;

         }

    }// class Ambulance

    Для каждого потомка задан конструктор, вызывающий базовый метод родителя. Каждый потомок по-своему определяет обработчика события Fire. Обратите внимание

    1 ... 373 374 375 376 377 378 379 380 381 ... 415
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


    Уважаемые читатели, слушатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

    • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
    • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
    • 3. Просьба отказаться от нецензурной лексики.
    • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

    Надеемся на Ваше понимание и благоразумие. С уважением, администратор LoveRead.info.


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Валентина Валентина04 июль 13:25 Большое спасибо за интересную тему.  Сюжет заманчиввй,интересный. Жду продолжения ... Лекарь Фамильяров. Том 7 - Александр Лиманский
    2. Наталья По Наталья По01 июль 10:12 Ужасный перевод:(... Аркадия - Эрин Дум
    3. Вика Вика29 июнь 21:56 Какая хрень с первых строк.  У ребенка в 14 месяце не может быть черепно мозговой травмы при падании с дивана ... Вернуть семью любой ценой - Чарли Ви
    Все комметарии
    Новинки бесплатной онлайн библиотеки