Esempio n. 1
0
        public TaskPage7()
        {
            Car car = new Car("Обычный автомобиль", 120, 4, "Бензин", 90);
            CarWithElectronic carWithElectronic = new CarWithElectronic("Авто напичканное электроникой", 150, 2, "Дизель", 70);
            Bicycle           bicycle           = new Bicycle("Велосипед", 40, 2);

            ConsoleTool.WriteLineConsoleGreenMessage("Ниже представлены экземпляры объектов разных типов, но все они объединены одним базовым типом Transport через наследование.");
            ConsoleTool.WriteLineConsoleGreenMessage("Car и Bicycle унаследованы от Transport. CarWithElectronic унаследован от Car.");
            ConsoleTool.WriteLineConsoleGreenMessage("Вывожу о них данные я через foreach. И тут мне помогает полиморфизм, потому что я добавил все эти три экземпляра разных объектов в одну коллекцию под их общим типом.");

            transports = new List <Transport>()
            {
                car, carWithElectronic, bicycle
            };
            Console.WriteLine();
            foreach (Transport transport in transports)
            {
                Console.WriteLine(transport.ToString());
            }

            ConsoleTool.WriteLineConsoleGreenMessage("В качестве примера инкапсуляции можно рассмотреть метод StartEngine объекта CarWithElectronic, который сначало проверяет работают ли все системы должным образом, а только потом запускает базовый метод запуска мотора от класса Car.");
            ConsoleTool.WriteLineConsoleGreenMessage("Метод класса Car StartEngine сначало проверит, есть ли в баке авто топливо для запуска. Есть есть - мотор будет запущен. Если нет, выводится текст исключения. Это также пример инкапсуляции.");

            try
            {
                carWithElectronic.StartEngine();
            }
            catch (TransportException ex)
            {
                Console.WriteLine(ex.Message);
            }
            try
            {
                carWithElectronic.ForcedStartEngine();
            }
            catch (TransportException ex)
            {
                Console.WriteLine(ex.Message);
            }

            ConsoleTool.WriteLineConsoleGreenMessage("Давайте заправим этого зверя. Могли бы это сделать через метод. Но тут я хочу продемонстрировать инкапсуляцию на примере свойства. Перед присвоением здесь мы сначало сравним новое значение с максимальным, чтобы не переполнить топливный бак. И выставим то, что будет больше. Дальше попробуем снова запустить мотор.");

            try
            {
                carWithElectronic.AvailFuel = 100;
            }
            catch (TransportException ex)
            {
                Console.WriteLine(ex.Message);
            }
            try
            {
                carWithElectronic.ForcedStartEngine();
            }
            catch (TransportException ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
Esempio n. 2
0
        public TaskPage15()
        {
            Car car = new Car("Обычный автомобиль", 120, 4, "Бензин", 90);
            CarWithElectronic carWithElectronic = new CarWithElectronic("Авто напичканное электроникой", 150, 2, "Дизель", 70);
            Bicycle           bicycle           = new Bicycle("Велосипед", 40, 2);

            transports = new List <Transport>()
            {
                car, carWithElectronic, bicycle
            };

            ConsoleTool.WriteLineConsoleGreenMessage("Опробуем поверхностное клонирование объекта с использованием небезизвестного интерфейса.");
            var clonedBicycle = (Bicycle)bicycle.Clone();

            transports.Add(clonedBicycle);
            ConsoleTool.WriteLineConsoleGreenMessage("Выведем текущую инфомрацию по оригинальному и клонированному объектам. Она должна быть одинаковой: ");
            Console.WriteLine(bicycle.ToString());
            Console.WriteLine(clonedBicycle.ToString());

            ConsoleTool.WriteLineConsoleGreenMessage("А теперь изменим все три свойства для оригинального объекта. Эти изменения не должны затронуть клонированный. Затем повторим вывод: ");
            bicycle.Name              = "Переименованный велосипед";
            bicycle.MaxSpeed          = 10;
            bicycle.PassengerCapacity = 1;
            Console.WriteLine(bicycle.ToString());
            Console.WriteLine(clonedBicycle.ToString());

            ConsoleTool.WriteLineConsoleGreenMessage("Рассмотрим пример использования глубокого клонирования. Он используется, когда класс имеет в своей структер поле с сылочным типом данных. Добавим нового водителя к нашему велосипеду.");
            bicycle.TransportDriver = new Driver("Алексей");

            ConsoleTool.WriteLineConsoleGreenMessage("Клонируем наш велосипед еще раз.");
            var moreClonedBicycle = (Bicycle)bicycle.Clone();

            transports.Add(moreClonedBicycle);
            Console.WriteLine(moreClonedBicycle.ToString());

            ConsoleTool.WriteLineConsoleGreenMessage("Теперь переименуем водителя первого велосипеда и выведем все три имеющиеся у нас велосипеды новым способом: ");
            bicycle.TransportDriver.Name = "Александр";
            foreach (Transport transport in transports)
            {
                if (transport is Bicycle)
                {
                    Console.WriteLine(transport.ToString());
                }
            }
        }