[ Foro de C# ]

Las clases y los objetos

06-Mar-2010 20:59
Jess S.
3 Respuestas

¡Hola!

Estoy tratando de realizar el ejercicio propuesto al final de 6.2, pero no sé cómo hincarle el diente. Lo que más me desconcierta es eso de guardar las clases en unos archivos *.cs. No sé cómo los usaría posteriormente. ¿Empezaría estas clases con 'using System'?.

También pensaba, por lo que había visto hasta ahora, que en un ejercicio, por ejemplo el Ejercicio4_6, a su clase debería llamarla igual 'public class Ejercicio4_6' y que lo debía guardar en un archivo 'Ejercicio4_6.cs". Parece que a la clase la puedo denominar como quiera y guardarla en el archivo que crea más conveniente. ¿Es esto así?.

Y por último, no entiendo lo que quiere decir la última parte del párrafo 'Esta clase deberá sólo la función Main, que creará dos objetos de tipo Persona, les asignará un nombre y les pedirá que saluden.'

Le agradecería un orientación algo más concreta para poder seguir.

Saludos.


08-Mar-2010 09:25
Jess S.

¡Hola!

Tras muchos tanteos, he conseguido realizar el ejercicio. Lo pongo como adjunto, para ver si es así como se debe resolver.

Me contesto a mi mismo.

Las clases las guardamos en *.cs, de momento, para copiar y pegar cuando las necesitemos. Luego, ya veremos. No hace falta poner 'using System' en las mismas.

Efectivamente las clases y los archivos los puedo denominar según me convenga.

El último párrafo convendría arreglarlo, pero aún no me atrevo a decir cómo.

Saludos.


09-Mar-2010 11:34
Nacho Cabanes (+31)

Te respondo yo también a ti mismo... ;-)

- Estoy tratando de realizar el ejercicio propuesto al final de 6.2, pero no sé cómo hincarle el diente. Lo que más me desconcierta es eso de guardar las clases en unos archivos *.cs. No sé cómo los usaría posteriormente.

Los puristas recomiendan que cada clase esté en su propio fichero fuente, de forma que se puedan localizar con rapidez (hablamos de programas grandes, en los que has hecho en el curso hasta ahora, no era necesario, porque eran muy simples).

Para compilar un programa formado por varios fuentes, basta con indicar los nombres de todos ellos. Por ejemplo, con Mono sería

mcs fuente1.cs fuente2.cs fuente3.cs


- ¿Empezaría estas clases con 'using System'?.

Sólo es necesario empezar así las que van a usar alguno de los servicios del sistema (cuando estás empezando, normalmente será por la consola).

La idea básica es: si en tu programa habría algún "System." (porque leas de consola, conviertas, uses funciones matemáticas, etc), podrías reemplazarlos por el "using System". Por eso, en este caso, uno de los fuentes lo necesitaría, pero el otro no (te incluyo una posible solución al final de la respuesta).


- Parece que a la clase la puedo denominar como quiera y guardarla en el archivo que crea más conveniente. ¿Es esto así?.

Así es. Algunas versiones de Pascal obligan a que el nombre del programa y el del fuente sean el mismo. Lo mismo ocurre hasta cierto punto en Java. Pero no es el caso de C#: puedes llamar al fichero de cualquier otra forma, aunque en proyectos grandes sí se considera vital que cada clase esté en un fichero y que el fichero se llame como la clase, pero no "porque no compile si no se hace así", sino para que sea fácil de mantener.


- Y por último, no entiendo lo que quiere decir la última parte del párrafo 'Esta clase deberá sólo la función Main, que creará dos objetos de tipo Persona, les asignará un nombre y les pedirá que saluden.'

Así es como eran todos los programas que hacíamos hasta llegar a este punto: sólo contenían el "Main". Y lo de crear los dos objetos, etc. ... esa es la novedad de este ejercicio...  ;-)

Te adjunto como yo lo haría. Yo usaría dos ficheros. El primero es casi idéntico al tuyo, sólo no voy a incluir el GetNombre, que aunque sería útil tenerlo en un caso normal, no se pide en este ejercicio:

 
// -----------------------------------------------------
// Clase Persona
// (en fichero Persona.cs)
// -----------------------------------------------------
using System;
 
public class Persona
{
 
  string nombre;     // Nombre de la Persona
 
    public void SetNombre(string nuevoNombre)
    {
      nombre = nuevoNombre;
    }
 
    public void Saludar() 
    {
      Console.WriteLine("¡Hola! Soy {0}", nombre);
    }
} // ---- Final de la clase Persona
 



La segunda clase, la que contiene el Main, sería así:

 
// -----------------------------------------------------
// Clase PruebaPersona
// (en fichero PruebaPersona.cs)
// -----------------------------------------------------
 
public class PruebaPersona
{
 
  public static void Main()
  {
     Persona p1 = new Persona();
     Persona p2 = new Persona();
 
     p1.SetNombre("Juan");
     p2.SetNombre("Pedro");
 
     p1.Saludar();
     p2 .Saludar();
  }
 
}
 


Espero que te ayude a entenderlo mejor. Ampliaré el enunciado para decir lo de cómo compilar varios fuentes... o mejor... antes del ejercicio, repetiré el fuente anterior, pero desglosado en dos.


10-Mar-2010 09:15
Jess S.

¡Hola!

Con esta explicación se me ha aclarado muchísimo el panorama.

De todos modos, en el párrafo 'Esta clase deberá sólo la función Main.......' habrá que modificarla poniendo 'Esta clase deberá contener sólo la función Main.......'. Era lo que yo no entendía.

Muchas gracias.










(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)