Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Mitsu

#221
Pues parece que ya se volvió al tema clásico (Al menos a mí me aparece el clásico).
#222
Java / Re: duda basica seguramente en java
24 Octubre 2013, 03:27 AM
Trata de comprender 2 cosas.

Crear un objeto es muy diferente a INSTANCIAR.

Cuando tu creas un objeto y no lo instancias, ese objeto tiene el valor Null, por que no apunta a nada.  Ese objeto tienes que instanciarlo para que pueda usar sus métodos. Un objeto no es más que una referencia de una clase en particular.

Así, si hacemos lo del ejemplo anterior:

Código (=java) [Seleccionar]

Libreria[] libro = new Libreria[10];


Estamos creando solamente diez referencias de la clase Librería. Si ahora tratáramos de hacer esto:

Código (=java) [Seleccionar]

libro[0].registrarLibro("Lo que el viento se llevo");


Te dará un hermoso NullPointerException. ¿Por qué? Sencillamente porque NO HEMOS INSTANCIADOS LAS REFERENCIAS U OBJETOS, como quieras llamarle. Todo objeto en Java necesita ser instanciado, de lo contrario, el objeto será prácticamente inexistente e inútil.


Saludos.
#223
Frameworks:  Spring e Hibernate.
IDE              :  Netbeans.
Server         :  A tu gusto.
Database    :  Oracle, SQLServer.
#224
Les dejo un manual en español de WPF. Dice básico pero lo veo bastante bueno.

Manual WPF
#225
Todo vale la pena mientras exista una buena demanda para lo que estudias y/o haces. Este siglo podría decirse que es el del auge de la tecnología, y cualquier ámbito que tenga que ver con ello, es una buena idea.

Respecto a los cursos, estudia lo más que puedas; certifícate a más no poder que eso te ayudará en gran manera en tu vida laboral.


Un abrazo y suerte con tus proyectos.
#226
Java / Re: duda basica seguramente en java
23 Octubre 2013, 01:51 AM
Un array puedes declararlo de tipos de datos y de objetos. Por lo que cuando haces:

Código (=java) [Seleccionar]

Libreria[] libro = new Libreria[10];


Lo que estás haciendo es crear un array tipo Libreria con 10 objetos Libreria dentro.

Si bien esos elementos están creados, no están instanciados. Por lo que son de tipo Librería, tienen que instanciarse para poder usarse.

Código (=java) [Seleccionar]

Libreria[0] = new Libreria(); // El primer objeto ya está instanciado. Los demás aun no.


Ahora, como hemos instanciado el primer objeto del arreglo tipo Libreria, podemos acceder a sus metodos y variables (en caso tuviera).

Código (=java) [Seleccionar]

libro[0].registrarLibro("Lo que el viento se llevo"); // llama a un metodo de la clase Librera llamado registraLibro.


Si quieres llamar a un método ni bien instancias el objeto, puedes hacer lo siguiente:

Código (=java) [Seleccionar]

libro[0] = new Libreria().registrarLibro("Lo que el viento se llevo");




Saludos.
#227
Me autorespondo. En C# no existe el patrón MVC, se usa MVVM y DataBinding. C# me parece un lenguaje muy moderno y completo, voy a seguir estudándolo.


Saludos weys.
#228
Buen día.

Este es mi primer programita en C#, y la verdad no entiendo muchas cosas. Espero me puedan echar un cable  :xD Por cierto, uso Visual Studio Express 2013, que está muy bonita xD

El programita es sencillo, solo registrará los datos de un trabajador en una tabla. Tengo las siguientes clases:

  • Clase Trabajador (pojo). Este será el prototipo del trabajador, todos se crearán a partir de esta pojo.
  • Clase MainWindow (Formulario)
  • Clase Controller (Controlador del programa)
  • Clase RegistrarTrabajador (Modelo del programa)
  • Clase Conexion (Complemento del Modelo).

    La idea es sencilla, estoy utilizando el patrón MVC, para conectar el Controlador con la vista y con el modelo. Ahora, el problema que tengo es el siguiente:

    En Java, basta con pasarse la referencia  del Controlador, al componente que efectuará el evento. bastaría con hacer:

    Código (=java) [Seleccionar]

    public void setControlador(Controller controlador)
    {
       btnRegistrar.addActionListener(controlador);
       btnNuevo.addActionListener(controlador);
       btnSalir.addActionListener(controlador);
     }

    Luego, en la clase Controller:

    Código (=java) [Seleccionar]


    public class Controller implements ActionListener {

    private Formulario vista;
    private Modelo modelo;

     public Controller (Formulario vista, Modelo modelo)
      {
         this.vista = vista;
         this.modelo = modelo;
      }

    @Override
     actionPerformed(ActionEvent e)
      {
         // eventos
      }

    }



    ¿Cómo puedo lograr lo mismo en C#?


    Clases Trabajador (Pojo), Controller (Controlador), RegistrarTrabajador (Modelo), Formulario :

    Código (=csharp) [Seleccionar]

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

    namespace RegistroDeUsuarios.pojo
    {
       public class Trabajador
       {
           private string primerNombre;
           private string segundoNombre;
           private string primerApellido;
           private string segundoApellido;
           private string rangoTrabajador;
           private string fechaNacimiento;

           // setters

           public void setPrimerNombre(string primerNombre)
           {
               this.primerNombre = primerNombre;
           }
           public void setSegundoNombre(string segundoNombre)
           {
               this.segundoNombre = segundoNombre;
           }
           public void setPrimerApellido(string primerApellido)
           {
               this.primerApellido = primerApellido;
           }
           public void setSegundoApellido(string segundoApellido)
           {
               this.segundoApellido = segundoApellido;
           }
           public void setRangoTrabajador(string rangoTrabajador)
           {
               this.rangoTrabajador = rangoTrabajador;
           }
           public void setFechaNacimiento(string fechaNacimiento)
           {
               this.fechaNacimiento = fechaNacimiento;
           }

           // getters

           public string getPrimerNombre()
           {
               return this.primerNombre;
           }
           public string getSegundoNombre()
           {
               return this.segundoNombre;
           }
           public string getPrimerApellido()
           {
               return this.primerApellido;
           }
           public string getSegundoApellido()
           {
               return this.segundoApellido;
           }
           public string getRangoTrabajador()
           {
               return this.rangoTrabajador;
           }
           public string getFechaNacimiento()
           {
               return this.fechaNacimiento;
           }

       }
    }


    Clase Controller
    Código (=csharp) [Seleccionar]

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using RegistroDeUsuarios.pojo;


    namespace RegistroDeUsuarios
    {
       
      public class Controller
       {
           private MainWindow vista;
           private RegistrarTrabajador modelo;
         

          public Controller()
           {

           }
           public Controller(MainWindow vista, RegistrarTrabajador modelo)
           {
               this.vista = vista;
               this.modelo = modelo;
               
           }
           

          public void btnRegistrar_Click(Object sender, RoutedEventArgs e)
          {
              Trabajador trabajador = new Trabajador();
              trabajador.setPrimerNombre(vista.txtPrimerNombre.Text);
              trabajador.setSegundoNombre(vista.txtSegundoNombre.Text);
              trabajador.setPrimerApellido(vista.txtPrimerApellido.Text);
              trabajador.setSegundoApellido(vista.txtSegundoApellido.Text);
              trabajador.setRangoTrabajador(vista.cboRangoTrabajador.SelectedItem.ToString());
              trabajador.setFechaNacimiento(vista.txtFechaNacimiento.Text);
              modelo.registrarTrabajador(trabajador);
          }
          public void btnNuevo_Click(Object sender, RoutedEventArgs e)
          {
              vista.clean();
          }
          public void btnSalir_Click(Object sender, RoutedEventArgs e)
          {
              //Application.Current.Shutdown();
          }
       }
    }



    Clase RegistrarTrabajador:
    Código (=csharp) [Seleccionar]

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using MySql.Data.MySqlClient;
    using RegistroDeUsuarios.pojo;

    namespace RegistroDeUsuarios
    {
       public class RegistrarTrabajador
       {
           public static MySqlConnection conexion = new MySqlConnection();
           public static MySqlCommand comando = new MySqlCommand();
           public static string CadenaDeConexion;

           public void registrarTrabajador(Trabajador trabajador)
           {
               // Aquí se llevara a cabo la conexion
               CadenaDeConexion = "Server=localhost;"
                                   + "Port=3307;"
                                   + "Database=mysql_ifxperu;"
                                   + "Uid=root;"
                                   + "Password=";

               try
               {
                   conexion.ConnectionString = CadenaDeConexion;
               }
               catch (Exception ex)
               {
                   Console.WriteLine(ex.Message);
               }

               try
               {
                   // Abrimos la conexión
                   conexion.Open();
                   // Definimos nuestro Query
                   string query = "insert into empleados VALUES('"+trabajador.getPrimerNombre()+"','"+trabajador.getSegundoNombre()+"','"+trabajador.getSegundoApellido()+"','"+
                       trabajador.getSegundoApellido()+"','"+trabajador.getRangoTrabajador()+"','"+trabajador.getFechaNacimiento()+"')";
                   // Establecemos cuál será la conexión
                   comando.Connection = conexion;
                   // Determinamos el comando [ nuestro query]
                   comando.CommandText = query; //Se le asigna la consulta
                   // Asignamos al objeto MySqlReader la ejecución del comando
                   // En otras palabras, el resultado de la consulta [query]
                   // Se guardará en el MySqlReader
                   comando.ExecuteNonQuery();
                   MessageBox.Show("Alta del empleado satisfactoria.");
               }
               catch (Exception ex)
               {
                   Console.WriteLine(ex.Message);
               }
               finally {
                   conexion.Close();
               }
           }
       }
    }



    Clase Formulario
    Código (=csharp) [Seleccionar]

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;

    namespace RegistroDeUsuarios
    {
       
       public partial class MainWindow : Window
       {
           public MainWindow()
           {
               InitializeComponent();
               cboRangoTrabajador.Items.Add("Administrador");
               cboRangoTrabajador.Items.Add("Vendedor");
               cboRangoTrabajador.Items.Add("Contador");
               cboRangoTrabajador.Items.Add("Tecnico Mantenimiento");
               cboRangoTrabajador.Items.Add("Programador");
               cboRangoTrabajador.Items.Add("Analista");
               cboRangoTrabajador.SelectedIndex = 0;
           }

           public void setControlador(Controller controlador)
           {
               controlador.btnRegistrar_Click(controlador,new RoutedEventArgs());
               controlador.btnNuevo_Click(controlador,new RoutedEventArgs());
               controlador.btnSalir_Click(controlador,new RoutedEventArgs());
           }

           public void clean()
           {
               txtPrimerNombre.Clear();
               txtSegundoNombre.Clear();
               txtPrimerApellido.Clear();
               txtSegundoApellido.Clear();
               txtFechaNacimiento.Clear();
               cboRangoTrabajador.SelectedItem = "Administrador";
               txtPrimerNombre.Focus();
           }
         

       }
    }



    *** UPDATE ***

    He creado una clase principal, que sustituye al Main que genera WPF.

    Código (=csharp) [Seleccionar]

    using System.Windows.Media.Imaging;
    using System.Windows.Media.Media3D;
    using System.Windows.Media.TextFormatting;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using System.Windows.Shell;

    namespace RegistroDeUsuarios
    {
       class Principal
       {
           // <summary>
           /// Application Entry Point.
           /// </summary>
           [System.STAThreadAttribute()]
           [System.Diagnostics.DebuggerNonUserCodeAttribute()]
           public static void Main()
           {
               
               MainWindow vista = new MainWindow();
               RegistrarTrabajador modelo = new RegistrarTrabajador();
               Controller control = new Controller(vista, modelo);
               vista.setControlador(control);
               MessageBox.Show("Hola");
               RegistroDeUsuarios.App app = new RegistroDeUsuarios.App();
               app.InitializeComponent();
               app.Run();
           }

       }
    }



    Otra duda, quiero colocar un método en el Formulario, para arrancar la aplicación a demanda. Esto porque en el Main crearé los objetos MainWindow y RegistrarTrabajador, para pasárselos al Controller, para que se asocie a las 2 clases, y el objeto Controller pasárselo por medio de setControlador(Controller controlador) al Formulario. ¿Cómo haría?



    Muchas gracias!
#229
Java / Re: Sobre patrón de diseño abstract
20 Octubre 2013, 16:08 PM
El mejor material está en Inglés, las documentaciones oficiales están en inglés, etc. Así que toca aprender inglés  ;)

Como te comentó Yoya, es muy importante que nuestras clases no dependan de ninguna otra, ya que en un proyecto mediano - grande, esto sería un dolor de cabeza si tenemos que hacer una modificación, tendríamos que hacerla en todas las clases que depende de ella.

Para esto apareció Spring, que es un contenedor en el cual se gestiona el ciclo de vida de los objetos, eliminando así cualquier tipo de dependencias entre objetos - clases.

Además ofrece otras funcionalidades innovadoras, como la programación orientada a aspectos, que la estoy estudiando ahora  :D
#230
Java / Re: Suma de columnas de matriz mxn
19 Octubre 2013, 23:05 PM
No hay por qué confundirse.

Sea conjunto una matriz de 3 x 3:

Código (=java) [Seleccionar]

Integer[][] conjunto = new Integer[3][3];


Supongamos que queremos saber cuantas filas tiene dicha matriz:

Código (=java) [Seleccionar]

int cantidad_filas = conjunto.length;


Ahora, queremos saber cuántas columnas tiene la fila 2:

Código (=java) [Seleccionar]

int cantidad_columnas = conjunto[1].length; // pongo 1 porque la primera fila es 0



Generalmente arrays sean unidimensionales o bidimensionales, no se usan a la hora de desarrollar. Se usan Colecciones.

Dirán por qué, bueno, una de las grandes razones es que cuando usamos arreglos, debemos saber de antemano cuantos elementos tendrá dicho arreglo, pero supongamos que vamos a recuperar datos, pero no sabemos con exactitud cuántos valores va a devolver. Entonces, en estos casos se usa una colección.

Esta puede ser una Lista, un ArrayList, LinkedList, Map, HashMap, etc. Una colección no tiene un tamaño límite, está prácticamente limitado por la memoria del ordenador, lo cual es una ventaja. Además en una ArrayList - por ejemplo -, podemos guardar distintos tipos de datos, podemos guardar TODO. Si ven el método add de ArrayList, verán que recibe un Object, y como saben, todo en Java hereda de Object.

También podemos asegurarnos que una colección sea de un tipo especificado, utilizando Generics, pero ese es otro tema.