Autor Tema: Ejercicio C# concatenar cadenas y comprobar igualdad de cadenas usando clases  (Leído 10805 veces)

Sixtoex

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 105
    • Ver Perfil
Planteamiento del Problema

Se requiere de un program que permita capturar e imprimir los datos de dos cuentas de correo electronico. Cada dato de la cuenta de correo (Id, dominio y password) dede digitarse por separado. Al imprimirse la cuenta los datos de ID y dominio deben aparecer unidos. Por ejemplo: zelaya.luis@gmail.com.

Debe validarse el password, solicitando que sea digitado dos veces y debe coincidir en ambas. Si este caso se da, no se establecen los datos de la cuenta de correo.



Bueno el programa en sí funciona correctamente, lo que no se es que esta correcto escribir todo así con tantos métodos para este ejercicio  ???

Código: [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace imprimirCorreo
{
    class datosCorreo
    {
        string idUsuarioPrincipal;
        string dominioPrincipal;
        string idUsuarioSecundario;
        string dominioSecundario;
        string passwordPrincipal;
        string passwordSecundario;
        string repetirPasswordPrincipal;
        string repetirPasswordSecundario;
        const string cuentaCorreo = "Cuenta de correo: Desconocido@Desconocido";
       public void correoPrincipal()
       {
       Console.WriteLine("Presione ENTER para ingresar datos de correo numero 1");
       Console.ReadLine();
       Console.Write("Id de Usuario: ");
       idUsuarioPrincipal= Console.ReadLine();
       Console.Write("Dominio: ");
       dominioPrincipal = Console.ReadLine();
       Console.Write("password: ");
       passwordPrincipal = Console.ReadLine();
       Console.WriteLine("Digite nuevamente el password: ");
       repetirPasswordPrincipal = Console.ReadLine();
       if (passwordPrincipal != repetirPasswordPrincipal)
       {
           Console.WriteLine("Las passwords no coinciden");
       }
       
       
       
       }

       public void imprimirCorreoPrimero()
       {
           if (repetirPasswordPrincipal == passwordPrincipal)
           {
               Console.WriteLine("Cuenta de correo: " + idUsuarioPrincipal + "@" + dominioPrincipal);
           }
           else
           {
               Console.WriteLine(cuentaCorreo);
           }
           
       }
       public void correoSecundario()
       {
           Console.WriteLine("Presione ENTER para ingresar datos de correo numero 2");
           Console.ReadLine();
           Console.Write("Id de Usuario: ");
           idUsuarioSecundario = Console.ReadLine();
           Console.Write("Dominio: ");
           dominioSecundario = Console.ReadLine();
           Console.Write("password: ");
           passwordSecundario = Console.ReadLine();
           Console.WriteLine("Digite nuevamente el password: ");
           repetirPasswordSecundario = Console.ReadLine();
           
           if (passwordSecundario != repetirPasswordSecundario)
           {
               Console.WriteLine("Las passwords no coinciden");
           }
         
       }
           public void imprimirCorreoSegundo()
       {
           if (repetirPasswordSecundario == passwordSecundario)
           {
               Console.WriteLine("Cuenta de correo: " + idUsuarioSecundario + "@" + dominioSecundario);
           }
           else
           {
               Console.WriteLine(cuentaCorreo);
           }
       
       }
       
         
       
    }
}

creando una nueva instancia y llamando métodos de la clase DatosCorreo

Código: [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace imprimirCorreo
{
    class Program
    {
        static void Main(string[] args)
        {
            datosCorreo imprimirCorreos = new datosCorreo();
            imprimirCorreos.correoPrincipal();
            imprimirCorreos.correoSecundario();
            Console.ReadLine();

            imprimirCorreos.imprimirCorreoPrimero();
            imprimirCorreos.imprimirCorreoSegundo();
         
        }
    }
}
« Última modificación: 02 de Noviembre 2014, 12:34 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Hola, el programa funciona bien pero no estás teniendo en cuenta cuál es la filosofía de la programación orientada a objetos.

En POO una clase define un tipo de objeto. Por ejemplo una clase entradaDeTeclado diríamos que define una entrada de teclado, la clase CorreoElectronico diríamos que define un correo electrónico, la clase CalculadorDePrecios diríamos que define un calculador de precios, etc.

Cada objeto tiene sus responsabilidades delimitadas. ¿Es lógico que un objeto datosCorreo incluya código que sirva para pedir, de forma genérica, una entrada de teclado? Más bien no, un objeto datosCorreo debe limitarse a almacenar la información de un correo y a tener métodos para gestionar y hacer cosas con dicha información. Pero entre sus responsabilidades no estará, normalmente, el pedir datos al usuario. Esta responsabilidad se debería delegar en otra clase, que podría denominarse EntradaTeclado ó GestorEntradasUsuario ó ... que sería un objeto cuyas responsabilidades, de forma lógica, incluirían el que pida una entrada de teclado.

En programación orientada a objetos tenemos objetos, cada uno con sus tareas... el programa se construye creando objetos y haciendo que interaccionen entre ellos.

Para comprender la programación orientada a objetos te recomendaría que siguieras este curso: http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188

En resumen, el problema que le veo a tu código es que aunque funcione no está bien diseñado y si no haces buenos diseños de programas el código no se podrá decir que es bueno, ni siquiera aunque funcione bien.

Salu2

Sixtoex

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 105
    • Ver Perfil
Exactamente, es donde quiero llegar, dices:

En resumen, el problema que le veo a tu código es que aunque funcione no está bien diseñado y si no haces buenos diseños de programas el código no se podrá decir que es bueno, ni siquiera aunque funcione bien.

Es decir no esta bien diseñado a que te refieres a lo que me has dicho que de datosCorreo esta mal definida la clase? o que el código que e echo es poco legible?  :-\

Saludos amigo y gracias

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Hola, a lo que me refiero no son a detalles del código, sino al diseño del código. Tú puedes tener algo que funcione y sin embargo no estar bien diseñado:


El diseño de funciones, clases, programas, etc. es un aspecto importante de la programación.

Cuando digo que tu clase datosCorreo no está bien diseñada me refiero a que hace cosas que no le corresponde hacer a esa clase.

Imagínate que eres policía. ¿Verías lógico que te pusieran a hacer un trabajo de fontanería? No, porque tú no eres fontanero. Si en una empresa el que tiene que hacer una cosa se dedica a hacer otras la empresa no funcionará bien. Si en un programa el diseño y el reparto de tareas no está bien eso traerá problemas (puede que no ahora, pero sí más adelante).

Este tipo de cosas (y muchas otras) son cuestiones de diseño y de comprensión de paradigmas (filosofía) de programación. No se aprenden de un día para otro, ni con un ejercicio. Aprender cuestiones de diseño requiere tiempo, practicar, ver ejemplos, una buena guía o crítica de lo que vas haciendo, etc.

Salu2

Sixtoex

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 105
    • Ver Perfil
Dices: Cuando digo que tu clase datosCorreo no está bien diseñada me refiero a que hace cosas que no le corresponde hacer a esa clase.

Es decir que si cambio el nombre de la clase a EntradaTeclado(seria mucho mas adecuado que DatosCorreo por el simple hecho del ejercicio que estoy haciendo, se clasifica y se entiende mejor con entradaTeclado), si quiero hacer otra cosa pues agrego una nueva clase que haga esa cosa con un nombre de tipo clase que este bien clasificado?

Ahora noto que las funciones que e creado están mal, es decir no veo sentido alguno:  correoPrincipal podría haberle puesto por ejemplo EntradaCorreoPrimario ??? ??? ???

Es decir cuando dices:  El diseño de funciones, clases, programas, etc. es un aspecto importante de la programación.

te refieres a saber NOMBRAR cada cosa con su nombre adecuado para no liarse, para clasificar mejor, para ORDENAR etc etc no?

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Sí, en parte es tal y como estás diciendo: el nombre de una clase define lo que hace esa clase, y cada clase tiene una responsabilidad. Si tienes que hacer otra cosa, debes crear una nueva clase.

Cuando digo que el diseño de funciones, clases, programas es un aspecto importante de la programación me refiero a muchas cosas: saber nombrar, saber definir atributos, saber definir métodos, saber cuál es el papel del método main, saber generar clases cohesivas y con bajo acoplamiento, y muchos más detalles, no se trata sólo de saber nombrar. Como te decía no es una cosa que se pueda aprender en un día, lleva un proceso de aprendizaje que requiere un tiempo.

Salu2

Sixtoex

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 105
    • Ver Perfil
Es decir la unica manera de mejorar en ese ASPECTO es practicando y haciendo ejercicios  no? no queda otra.

Por que el problema que tengo es ese, es decir yo se lo que es un constructor, metodos,encapsular,llamar una instancia de esa clase, etc etc.. solo me falta pues lo que estas explicando

Bueno amigo muchas gracias de veras, tema solucionado  :P
« Última modificación: 02 de Noviembre 2014, 15:06 por Sixtoex »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Además de practicar y hacer ejercicios necesitas estudiar y ver buenas explicaciones y ejemplos de los conceptos. Si no usas un buen material con buenas explicaciones no lograrás avanzar aunque hagas muchos ejercicios, porque hacer muchos ejercicios no te garantiza entender los conceptos de diseño. Salu2

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".