public static void Main()
        {
            var largeAnimals = new ILargeAnimal[]
            {
                new Lion(new DateTime(2010, 4, 28)),
                new Lion(new DateTime(2012, 5, 11)),
                new Zebra(new DateTime(2008, 12, 1))
            };
            var smallAnimals = new ISmallAnimal[] {
                new Rabbit(new DateTime(2014, 1, 1)),
                new GuineaFowl(new DateTime(2015, 1, 2))
            };
            var animals = largeAnimals.Union <IAnimal>(smallAnimals).ToList();

            var largeAnimalKeeper = new Keeper <ILargeAnimal>(largeAnimals);
            var smallAnimalKeeper = new Keeper <ISmallAnimal>(smallAnimals);

            var keepers = new IKeeper[]
            {
                largeAnimalKeeper,
                smallAnimalKeeper
            };

            var babyRabbit = new Rabbit(DateTime.Today);

            smallAnimalKeeper.StartLookingAfter(babyRabbit);

            var feedingScheduler  = FeedingScheduler.Instance;
            var groomingScheduler = GroomingScheduler.Instance;

            var timer = new ZooTimer();

            new Thread(timer.Run).Start();

            timer.Tick += () => feedingScheduler.AssignFeedingJobs(keepers, animals);
            timer.Tick += () => groomingScheduler.AssignGroomingJobs(keepers, animals);
            timer.Tick += () => animals.ForEach(Console.WriteLine);
        }