Esempio n. 1
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(new Step(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120));
            recipe.AddStep(new Step(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60));

            /* Como podemos ver la siguiente operaciones llevadas a cabo son polimorficas , ya que
             * no se pregunta por el tipo,o por ejemplo la destination, para ejecutar un diferente tipo de codigo,
             * asi cumpliendo con el patron Polymorphism.
             *
             * Tambien se cumple el principio Lsp ya que al cambiar de clase entre subtipos sigue pudiendose hacer la operacion
             * de la manera esperada. Nuestro programa va a poder imprimir las recetas a partir de la instancia IPrinter
             * pero funcionaria igual si usaramos los tipos defiinidos por ConsolePrinter o Filer Printer
             */

            IPrinter printer = new ConsolePrinter();

            printer.PrintRecipe(recipe);
            printer = new FilePrinter();
            printer.PrintRecipe(recipe);
        }
Esempio n. 2
0
        public static void Main(string[] args)
        {
            EquipmentCatalog equipmentCatalog = new EquipmentCatalog();
            ProductCatalog   productCatalog   = new ProductCatalog();

            productCatalog.AddProductToCatalog("Café", 100);
            productCatalog.AddProductToCatalog("Leche", 200);
            productCatalog.AddProductToCatalog("Café con leche", 300);

            equipmentCatalog.AddEquipmentToCatalog("Cafetera", 1000);
            equipmentCatalog.AddEquipmentToCatalog("Hervidor", 2000);

            Recipe recipe = new Recipe();

            recipe.FinalProduct = productCatalog.GetProduct("Café con leche");
            recipe.AddStep(recipe.CreateStep(productCatalog.GetProduct("Café"), 100, equipmentCatalog.GetEquipment("Cafetera"), 120));
            recipe.AddStep(recipe.CreateStep(productCatalog.GetProduct("Leche"), 200, equipmentCatalog.GetEquipment("Hervidor"), 60));

            IPrinter printer;

            printer = new ConsolePrinter();
            printer.PrintRecipe(recipe);
            printer = new FilePrinter();
            printer.PrintRecipe(recipe);
        }
Esempio n. 3
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");

            /*
             *  Ya no se crean acá las instancias de la clase Step, sino que se crean dentro de Recipe por patrón Creator.
             *  Por más que la clase Program tiene todos los datos que serán provistos al constructor de Step, la creación
             *  se pasa a Recipe porque ante estos casos el patrón dice que hay que preferir la clase que contenga instancias de Step.
             */
            recipe.AddStep(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120);
            recipe.AddStep(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60);


            /*
             *  La creación de las Printers acá es correcta según el patrón Creator, ya que la clase Program es la única
             *  que usa de forma cercana estas clases
             */
            IPrinter printer;

            printer = new ConsolePrinter();
            printer.PrintRecipe(recipe);
            printer = new FilePrinter();
            printer.PrintRecipe(recipe);
        }
Esempio n. 4
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            try
            {
                recipe.AddStep(new Step(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120));
                recipe.AddStep(new Step(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60));
                recipe.PrintRecipe();
            }
            catch (NullValueException exception)
            {
                Console.WriteLine(exception.Message);
            }
            catch (LessThanZeroException exception)
            {
                Console.WriteLine(exception.Message);
            }
            catch (EmptyStepsListException exception)
            {
                Console.WriteLine(exception.Message);
            }
            catch (StepsPrintException exception)
            {
                Console.WriteLine(exception.Message);
            }
        }
Esempio n. 5
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(new Step(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120));
            recipe.AddStep(new Step(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60));
            ConsolePrinter.PrintRecipe(recipe);
        }
Esempio n. 6
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(new Step(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120));
            recipe.AddStep(new Step(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60));
            recipe.PrintRecipe();
            Console.WriteLine($"El precio final es: {recipe.GetProductionCost()}");
        }
Esempio n. 7
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(new Step(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120));
            recipe.AddStep(new Step(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60));
            ConsolePrinter.PrintTicket(recipe);

            /*
             * Café con leche
             * 100 de Café usando 'Cafetera' durante 120
             * 200 de Leche usando 'Hervidor' durante 60
             */
        }
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120);
            recipe.AddStep(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60);
            recipe.AddStep("Dejar enfriar", 60);

            IPrinter consolePrinter = new ConsolePrinter();
            IPrinter filePrinter    = new FilePrinter();

            consolePrinter.PrintRecipe(recipe);
            filePrinter.PrintRecipe(recipe);
        }
Esempio n. 9
0
        public static void Main(string[] args)
        {
            Recipe recipe = new Recipe();

            recipe.AddStep("Café", 2, 100, "Cafetera", 10, 1000);
            recipe.AddStep("Leche", 6, 20, "Microondas", 50, 200);

            Product finalProduct = new Product("Café con leche", 20);

            recipe.FinalProduct = finalProduct;

            IPrinter consolePrinter = new ConsolePrinter();
            IPrinter filePrinter    = new FilePrinter();

            filePrinter.PrintRecipe(recipe);
            consolePrinter.PrintRecipe(recipe);
        }
Esempio n. 10
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            Step step = new Step(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120);

            try
            {
                recipe.RemoveStep(step);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            try
            {
                recipe.AddStep(new Step(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120));
                recipe.AddStep(new Step(GetProduct("Leche"), -10, GetEquipment("Hervidor"), 60));
                recipe.PrintRecipe();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            try
            {
                recipe.AddStep(new Step(GetProduct("Leche"), 10, GetEquipment("Hervidor"), -10));
                recipe.PrintRecipe();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            try
            {
                recipe.AddStep(step);
            }
            catch (NullReferenceException e)
            {
                Console.WriteLine(e.Message);
            }
        }
Esempio n. 11
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(new Step(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120));
            recipe.AddStep(new Step(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60));

// Modifico creo una instancia de IPrinter y la llamo para que imprima en consola y en archivo con los metodos de las respectivas clases
            IPrinter printer = new PrintFile();

            printer = new PrintFile();
            printer.PrintRecipe(recipe);
            printer = new PrintConsole();
            printer.PrintRecipe(recipe);
        }
Esempio n. 12
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(new Step(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120));
            recipe.AddStep(new Step(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60));

            //Creo 2 objetos del tipo IPrinter uno de ellos es instancia de ConsolePrinter y el otro de FilePrinter

            IPrinter printer1 = new ConsolePrinter();
            IPrinter printer2 = new FilePrinter();

            printer1.PrintRecipe(recipe, printer1);
            printer2.PrintRecipe(recipe, printer2);
        }
Esempio n. 13
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(new Step(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120));
            recipe.AddStep(new Step(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60));

            // SE UTILIZA EL PATRON DE POLIMORFISMO

            IPrinter consolePrinter = new ConsolePrinter();
            IPrinter filePrinter    = new FilePrinter();

            consolePrinter.PrintRecipe(recipe);
            filePrinter.PrintRecipe(recipe);
        }
Esempio n. 14
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(new Step(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120));
            recipe.AddStep(new Step(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60));

            IPrinter    consolePrinter = new ConosolePrinter();
            FilePrinter filePrinter    = new FilePrinter();

            AllInOnePrinter printer = new AllInOnePrinter();

            printer.PrintRecipe(recipe, consolePrinter);
            printer.PrintRecipe(recipe, filePrinter);
        }
Esempio n. 15
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            //Utilizamos Creator para quitar la creación de la instancia Step, en Program,
            //porque es más adecuado que la cree Recipe (mediante el nuevo método AddStep)
            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120);
            recipe.AddStep(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60);

            IPrinter printer;

            printer = new ConsolePrinter();
            printer.PrintRecipe(recipe);
            printer = new FilePrinter();
            printer.PrintRecipe(recipe);
        }
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(new Step(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120));
            recipe.AddStep(new Step(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60));

            /// <summary>
            /// Cambios en el program para poder utilizar las nuevas implementaciones
            /// </summary>
            IPrinter printer;

            printer = new ConsolePrinter();
            printer.PrintRecipe(recipe);
            printer = new FilePrinter();
            printer.PrintRecipe(recipe);
        }
Esempio n. 17
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(new Step(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120));
            recipe.AddStep(new Step(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60));
            recipe.PrintRecipe();

            //RESULTADO

            /*
             * Receta de Café con leche:
             * 100 de 'Café' usando 'Cafetera' durante 120
             * 200 de 'Leche' usando 'Hervidor' durante 60
             * Total: 116
             */
        }
Esempio n. 18
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(new Step(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120));
            recipe.AddStep(new Step(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60));

            // Utilizo el principio de sustitucion de Liskov y
            // el patron Polimorfismo
            // el comportamiento de ambos tipos es el esperado
            // ConsolePrinter y FilePrinter por eso cumple el principio de sustitucion
            // Ademas es una solucion polimorfica
            IPrinter printer = new ConsolePrinter();

            printer.PrintRecipe(recipe);
            printer = new FilePrinter();
            printer.PrintRecipe(recipe);
        }
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(new Step(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120));
            recipe.AddStep(new Step(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60));

            // Se instancian dos objetos de tipo IPrinter con las dos distintas
            // clases creadas. Luego se las llama de la misma forma obteniendo
            // distintos resultados. Todos ellos, esperados sin interferir.
            // Se concluye que se definió exitosamente la operación polimórfica.

            IPrinter printer1 = new ConsolePrinter();
            IPrinter printer2 = new FilePrinter();

            printer1.PrintRecipe(recipe);
            printer2.PrintRecipe(recipe);
        }
        public static void Main(string[] args)
        {
            // Se crea una clase que será la encargada de instanciar Product y Equipment y guardar en lista.
            CatalogMaker catalog = new CatalogMaker();

            PopulateCatalogs(catalog);
            Recipe recipe = new Recipe();

            recipe.FinalProduct = catalog.GetProduct("Café con leche");

            //Ya no se instancian steps en Program.
            recipe.AddStep(catalog.GetProduct("Café"), 100, catalog.GetEquipment("Cafetera"), 120);
            recipe.AddStep(catalog.GetProduct("Leche"), 200, catalog.GetEquipment("Hervidor"), 60);

            IPrinter printer;

            printer = new ConsolePrinter();
            printer.PrintRecipe(recipe);
            printer = new FilePrinter();
            printer.PrintRecipe(recipe);
        }
Esempio n. 21
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120);
            recipe.AddStep(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60);
            recipe.AddStep("Dejar enfriar", 60);

            IPrinter printer;

            printer = new ConsolePrinter();
            printer.PrintRecipe(recipe);
            printer = new FilePrinter();
            printer.PrintRecipe(recipe);

            Console.WriteLine($"Cooked: {recipe.Cooked}");
            recipe.Cook();
            Thread.Sleep(500); // 0.5 segundos
            Console.WriteLine($"Cooked: {recipe.Cooked}");
        }
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(new Step(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120));
            recipe.AddStep(new Step(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60));

            //Se crea una variable del tipo IPrinter para luego asignarle
            // una instancia de ConsolePrinter y otra de FilePrinter.
            //La Operacion PrintTicket es Polimorfica.
            //Cada Clase del Tipo IPrinter tiene la responsabilidad de Imprimir de formas diferentes

            IPrinter printer;

            printer = new ConsolePrinter();
            printer.PrintTicket(recipe);

            printer = new FilePrinter();
            printer.PrintTicket(recipe);
        }
Esempio n. 23
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");

            /// <summary>
            /// Se saca la responsabilidad a Program de crear los objetos de tipo Step
            /// y se le asigna a la clase Recipe de acuerdo al patrón Creator,
            /// se detalla en la clase Recipe
            /// </summary>
            /// <returns></returns>
            recipe.AddStep(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120);
            recipe.AddStep(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60);

            IPrinter printer;

            printer = new ConsolePrinter();
            printer.PrintRecipe(recipe);
            printer = new FilePrinter();
            printer.PrintRecipe(recipe);
        }