domingo, septiembre 02, 2018

Crear codigo POO

En este nueva entrada vamos a crear una aplicacion y a aplicar todo lo que hemos aprendido de POO.

Iniciamos vS2017, y creamos una nueva solución que llamaremos PooII, el tipo de proyecto a crear es una aplicacion de escritorio para Windows.

En la ventana de configuración de la solución escribiremos lo siguiente:

Seleccionamos la solución de Windows de escritorio, el proyecto de Windows forms en la parte central de la pantalla, colocamos como nombre USJ.PooII y ubicamos una ruta en nuestro disco duro del PC para los archivos. Luego  de esto presionamos el botón OK.

VS2017 se toma unos minutos en construir la solución y los archivos de base, mientras nos muestra la siguiente pantalla.


Al terminar nos muestra lo siguiente:

Ahora vamos a iniciar a crear las clases, damos clic derecho en el nombre del proyecto, nos muestra un menú contextual,  elegimos, Add (adicionar), Class (clase), esto nos muestra una ventana para colocar el nombre de la clase, pues ya ha seleccionado el tipo de objeto a adicionar, en nuestro caso una nueva clase.



Damos clic al botón Add y se creara la clase y nos llevara a la ventana de editor de código.

Creamos la clase Persona, de tipo abstract, para que solo pueda ser utilizada heredándola por otras clases. El código de esta clase s el siguiente:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace USJ.PooII
{
    public abstract class Persona
    {
        public string Nombre { get; set; }

        public DateTime FechaNacimiento { get; set; }
        public string TipoIdentificacion { get; set; }
        public int Identificacion { get; set; }
    }
}



Ahora vamos a crear una clase que herede de esta para aprovechar sus propiedades y adicionar otras.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace USJ.PooII
{
    public class Cliente : Persona
    {
        public string Direccion { get; set; }
        public string Empresa { get; set; }
    }
}

Aqui podemos observar la herencia a través de clases de solo propiedades.

Ahora vamos a crear una clase que tenga métodos que utilicen las clases de tipo de datos o entidades, asi tambien se conocen.

using System;
namespace USJ.PooII
{
    public abstract class PersonaAccion
    {
        public abstract int CalcularEdad(DateTime fechaNacicmineto);
        public string InfoCliente(Cliente cliente)
        {
            string resultado = string.Empty;
            resultado = cliente.Nombre + " " + cliente.TipoIdentificacion +
                " " + cliente.Identificacion;
            return resultado;
        }
    }
}

Esta clase tiene un método abstract, y como se observa no tiene código, esto quiere decir que ese método hay que implementarlo en la clase que herede a esta, el siguiente método si esta implementado y lo podremos ejecutar o llamar.

Ahora crearemos una clase que llamaremos ClienteNegocio esta nueva clase heredara de PersonaAccion, y en esta escribiremos el código del método CalcularEdad, l código de esta clase es el siguiente:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace USJ.PooII
{
    public class ClienteNegocio : PersonaAccion
    {
        public override int CalcularEdad(DateTime fechaNacicmineto)
        {
            return DateTime.Now.Year - fechaNacicmineto.Year;
        }
    }
}

Observamos que utilizamos override para el método CalcularEdad, esto quiere decir que estamos sobre escribiendo ese método en esta clase.

Ahora vamos a regresar a la pantalla inicial llamada Form1, aqui en For1[Design], vamos a arrastrar un botón de la parte izquierda o sea, del toolbox.


Al arrástralo y soltarlo veremos lo siguiente:

El botón lo agrandamos con el mouse en las puntas del rectángulo, para cambiar el texto, ubicamos la ventana de propiedades en la derecha y ubicamos la propiedad o atributo Text, y cambiamos el texto por Saludar.

Ahora damos doble clic sobre el botón Saludar, esto nos abrirá la ventana de código y creara la plantilla del evento Click del botón, que es el evento por defecto del botón.

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Hola, buen dia! ", "Mensaje de Bienvenida");
            // Inicamos un cliente
            Cliente cliente1 = new Cliente();
            cliente1.Nombre = "Juana Guzman";
            cliente1.TipoIdentificacion = "CC";
            cliente1.Identificacion = 898979;
            cliente1.FechaNacimiento = new DateTime(1969, 10, 3);
            cliente1.Direccion = "barrio centro";
            cliente1.Empresa = "Universidad San Jose";
            MessageBox.Show("El cliente " + cliente1.Nombre
                + " con " + cliente1.TipoIdentificacion +
                " numero " + cliente1.Identificacion +
                " trabaja en la empresa " + cliente1.Empresa +
                "  "
                , "Los datos del Cliente");
        }


Aqui, creamos un objeto cliente1 del tipo Cliente, y le asociamos los diferentes valores a cada propiedad, luego utilizando la clase MessageBox mostramos un mensaje emergente con los datos del objeto.

Al ejecutar se muestra lo siguiente en la pantalla:

Al dar clic en el botón aceptar



Ahora vamos a crear un nuevo botón en la pantalla 

Vamos a crear una nueva clase que llamaremos ClienteNacional, esta clase el código es el siguiente:

using System;
namespace USJ.PooII
{
    public class ClienteNacional : Persona
    {
        public string[] Direcciones { get; set; } = new String[4];

        public string[] Ciudades { get; set; } = new string[4];
        public string Visualizacion()
        {
            return "Sr(a) " + Nombre + " nacido en " + Ciudades[0] + " en la fecha " +
                FechaNacimiento.ToShortDateString() + " con " +
                (DateTime.Now.Year - FechaNacimiento.Year) +
                " años.";
        }

        public string Visualizacion(string idioma)
        {
            string resultado = string.Empty;

            switch (idioma)
            {
                case "es":
                    resultado = "Sr(a) " + Nombre + " nacido en " + Ciudades[0] + " en la fecha " +
                            FechaNacimiento.ToShortDateString() + " con " +
                            (DateTime.Now.Year - FechaNacimiento.Year) +
                            " años.";
                    break;

                case "en":
                    resultado = "Mr(s) " + Nombre + " born in " + Ciudades[0] + " on date " +
                            FechaNacimiento.ToShortDateString() + " with " +
                            (DateTime.Now.Year - FechaNacimiento.Year) +
                            " years old.";
                    break;

                default:
                    break;
            }

            return resultado;
        }
    }
}



Aqui vamos a definir una propiedad con el tipo Array, para Direcciones y para Ciudades, tambien crearemos dos métodos para esta clase que llamaremos Visualización, en estos métodos utilizaremos lo que se conoce como Sobrecarga de métodos, que es crear diferentes métodos con el mismo nombre con diferentes tipos de parámetros y con diferente numero de parámetros. El código de cada método ejecutara tareas similares o diferentes dependiendo de los parámetros.

El primer método no tiene parámetros, el segundo tiene un parámetro que al ser enviado dependiendo del valor muestra el mensaje en español o en ingles.

Ahora vamos al código del segundo botón, y le adicionamos lo siguiente:

        private void button2_Click(object sender, EventArgs e)
        {
            ClienteNacional clienteNal = new ClienteNacional()
            {
                Nombre = "Ferreteria la Luz",
                TipoIdentificacion = "CC",
                Identificacion = 130120140,
                Direcciones = new string[] { "Barrio Centro", "Mexico", "Villa Paul", "Samarkanda" },
                Ciudades = new string[] { "Bogota", "Funza", "Cartagena", "Barranquilla" }
            };

            MessageBox.Show("Cliente: " + clienteNal.Nombre +
                " Ident: " + clienteNal.Identificacion +
                " Barrios: " + clienteNal.Direcciones[0] + ", "
                + clienteNal.Direcciones[1] + ", "
                + clienteNal.Direcciones[2] + ", "
                + clienteNal.Direcciones[3] + ", "
                + " Con presencia en las ciudades de " +
                clienteNal.Ciudades[0] + ", " +
                clienteNal.Ciudades[1] + ", " +
                clienteNal.Ciudades[2] + ", " +
                clienteNal.Ciudades[3] + " "
                , "Los datos de un Cliente Nacional");

            MessageBox.Show(
                clienteNal.Visualizacion()
                );

            MessageBox.Show(
                clienteNal.Visualizacion("en")
                );

        }

Al ejecutar y dar clic en el segundo botón, nos muestra lo siguiente:


Aqui podemos observar cada una de las ventanas emergentes que lanzaos desde el código con los datos del objeto que creamos por código.


Hasta la próxima!  bendiciones!!