• Jueves 14 de Noviembre de 2024, 18:43

Autor Tema:  Practica (principio De Orientacion A Objetos)  (Leído 3136 veces)

Bestialazo

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Practica (principio De Orientacion A Objetos)
« en: Martes 16 de Octubre de 2007, 23:23 »
0
Bueno, pues tengo que entregar una practica mañana y la verdad es que esta casi hecha pero me fallan un par de cosas, a ver si me entendeis bien y me podeis ayudar.

La practica trata de crear un "programa" en el que creemos circulos que despues sean mostrados en pantalla, bastante sencillito vamos.

entonces para ello debia crear una clase punto, y una clase circulo, aqui definidas

clase punto
Código: Text
  1.  
  2. /**
  3.  * La clase Punto modela a un punto en el plano
  4.  * @author
  5.  * @version 1.0
  6.  */
  7. public class Punto {
  8.   /* Definimos los atributos del punto */
  9.   /** Coordenada X del punto. atributo de tipo int, que representa números enteros */
  10.   private int x;
  11.   /** Coordenada Y del punto */
  12.   private int y;
  13.  
  14.   /* definición de métodos del punto */
  15.   /** Construye un punto a partir de sus coordenadas
  16.    * @param coordX es la coordenada x del nuevo punto
  17.    * @param coordY es la coordenada y del nuevo punto
  18.    */
  19.   public Punto(int coordX, int coordY) {
  20.     x= coordX;
  21.     y= coordY;
  22.   }
  23.  
  24.   /** Imprime por pantalla la situación del punto */
  25.   public void mostrarSituacion() {
  26.     System.out.println("("+x+","+y+")");
  27.   }
  28. }
  29.  
  30.  
Clase circulo
Código: Text
  1.  
  2. /**
  3.  * Modela un circulo a partir de su centro y su radio
  4.  * @author
  5.  * @version 1.0
  6.  */
  7.  class Circulo {
  8.    /* Definición de atributos del círculo */
  9.   /** Centro */
  10.   private Punto centro;
  11.   /** Radio */
  12.   private int radio;
  13.   /** Color */
  14.   private int color;
  15.  
  16.  
  17.  
  18.  
  19.  
  20.   /* Definición de métodos del círculo */
  21.   /** Construye un círculo a partir de su centro y su radio
  22.    * @param cnt es el centro del triángulo
  23.    * @param rad es el radio del círculo
  24.    */
  25.   public Circulo(Punto cnt, int rad, int clr) {
  26.     centro = cnt;
  27.     radio = rad;
  28.     color = clr;
  29.   }
  30.   public Circulo(Punto cnt, int rad) {
  31.     centro = cnt;
  32.     radio = rad;
  33.     color = 0;
  34.   }
  35.  
  36.   public  Circulo crearCirculo(Punto cnt) {
  37.      centro = cnt;
  38.     return this;
  39.  
  40.   }
  41.   public void setColor (int clr) {
  42.     color = clr;
  43.   }
  44.   public void setCentro (Punto cnt) {
  45.     centro = cnt;
  46.   }
  47.   public void setRadio (int rad) {
  48.     radio = rad;
  49.   }
  50.  
  51.   /** dibuja el círculo en pantalla */
  52.   public void mostrarSituacion () {
  53.     System.out.println("Este círculo se define por:");
  54.     System.out.println("Un centro:");
  55.     centro.mostrarSituacion();
  56.     System.out.println("un radio:"+radio+"");
  57.     System.out.println("y un color:"+color+"");
  58.    
  59.   }
  60.   public void mostrarCentro () {
  61.     centro.mostrarSituacion();
  62.   }
  63.   public void mostrarRadio () {
  64.     System.out.println(radio);
  65.   }
  66.   public void mostrarColor () {
  67.     System.out.println(color);
  68.   }
  69.  
  70.    
  71. }
  72.  
  73.  
  74.  
Programa con el que hago las pruebas para el objeto circulo
Código: Text
  1.  
  2. /**
  3.  * Programa que ilustra el manejo de objetos Circulo
  4.  * @author
  5.  * @version 1.0
  6.  */
  7. class PruebaCirculo {
  8.   public static void main(String args[]) {
  9.     /* creamos un punto que sera el centro del circulo */
  10.     Punto cnt = new Punto (1,1);
  11.    
  12.  
  13.     /* ...y le damos un valor al radio */
  14.     int rad = 3;
  15.     /* ...creamos el circulo */
  16.     Circulo c1 = new Circulo(cnt, rad, 2);
  17.     Circulo c2 = new Circulo(cnt, rad);
  18.     Circulo c3 = new Circulo(new Punto (-1,-1),2);
  19.     Circulo c4 = c3.crearCirculo(new Punto (3,1));
  20.     /*y dibujamos el circulo */
  21.  
  22.   c3.mostrarSituacion();
  23.   c3.setCentro(3,3);
  24.  
  25.  
  26.   }
  27. }
  28.  
  29.  


Bien, si me he explicado bien os expongo los problemas:

1- el c3.setCentro(3,3) no me compila correctamente porque me pone lo siguiente:
setCentro(Punto) in Circulo cannot be applied to (int,int)
No lo entiendo, creo que esta todo perfectamente hecho y sin embargo, no me deja cambiar el valor del centro del circulo c3.

2- cuando c3 se muestra con "c3.mostrarSituacion();" en vez de adquirir el valor que se indica en el codigo (-1,-1) adquiere el valor 3,1 del circulo c4, obviamente parece que el metodo "crearCirculo" a afectado tambien a c3, pero no comprendo porque ni como evitarlo, se supone que solo deberia funcionar para c4.

Esos son mis dos fallos en la practica, por lo demas creo que funciona bastante bien y que para ser de las primeras no lo he hecho mal, pero quien sabe, seguramente tenga mas errores de los que pienso, de todas formas, gracias a todo aquel que quiera ayudarme.

therion87

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Re: Practica (principio De Orientacion A Objetos)
« Respuesta #1 en: Martes 16 de Octubre de 2007, 23:36 »
0
Ya entiendo...

Primero....mira tienes este metodo

Código: Text
  1. public  Circulo crearCirculo(Punto cnt) {
  2.      centro = cnt;
  3.     return this;
  4.  
  5. }
  6.  

y lo estás llamando de esta manera

Código: Text
  1. Circulo c4 = c3.crearCirculo(new Punto (3,1));
  2.  

Y ademas

Código: Text
  1. public void setCentro (Punto cnt) {
  2.     centro = cnt;
  3. }
  4.  

al llamarlo de esta manera

Código: Text
  1. c3.setCentro(3,3);
  2.  

Estas creando el error, por que tu método esta declarado para recibir como parámetro un objeto de tipo Punto y tu estas llamandolo con dos parametros entero

Haber checale, cambia los nombres y me dices que paso...

Saludos :-D

Bestialazo

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Practica (principio De Orientacion A Objetos)
« Respuesta #2 en: Miércoles 17 de Octubre de 2007, 00:31 »
0
Gracias por la respuesta primero xD

a ver, a cual de los dos metodos te refieres? yo creo que esta bien porque mi metodo se declara para recibir objetos de tipo punto, pero previamente mis objetos de tipo punto estan definidos en la clase punto que se compone de dos enteros (x,y) por lo tanto el (3,3) entraria dentro de la estructura de punto. Creo que te refieres con esto al segundo metodo, no se a que te refieres muy bien, si pudieras ser mas explicito..., pero por lo que te he puesto ahi arriba creo que al poner setCentro(3,3) deberia reconocermelo no? total, igualmente se trata de un punto solo que definido por dos enteros...

therion87

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Re: Practica (principio De Orientacion A Objetos)
« Respuesta #3 en: Miércoles 17 de Octubre de 2007, 17:55 »
0
:lol:  :lol:  :lol:  Ok.. Me explico mejor, es que ayer no tenia mucho tiempo...

Código: Text
  1. public  Circulo crearCirculo(Punto cnt) {
  2.     centro = cnt;
  3.    return this;
  4.  
  5. }
  6.  

En esta parte, te decia que tienes el nombre de tu método mal, copiaste lo de tu constructor, pero olvidaste quitarle 'Circulo', si no es así, entonces aquí...

Código: Text
  1. Circulo c4 = c3.crearCirculo(new Punto (3,1));
  2.  

tu llamada al método deberia ser algo asi como

Código: Text
  1. c3. Circulo crearCirculo(Punto cnt)
  2.  
:blink:  :blink:  Yo te recomiendo que lo quites lo de Circulo..

Ahora, cuando en la declaración de un método, le pones que va a recibir un parámetro de un tipo, al momento de llamarlo no puedes cambiarlo, pues te marca el error que tenias. En tu caso, el metodo setCentro(Punto x) recibe un objeto de tipo punto, y tu no lo puedes llamar metiendolo dos enteros, puesto que recibe un tipo 'Punto', aunque este esté creado apartir de enteros... No se si me explico.. si tienes un metodo que recibe arboles, no puedes llamarlo con un objeto que sea de tipo semilla, aunque un arbol pueda salir de una semilla... Es muy burdo el ejemplo pero creo que explica mi punto....

Para llamar tu metodo con lo que tienes seria así...

Código: Text
  1.  
  2. c3.setCentro(new Punto(3, 3));
  3.  
  4.  
De esta manera no deberia de marcarte error, pues esta recibiendo un tipo Punto, con los valores que tu quieres...

Espero que no te haya confundido y me hayas entendido..

PD. Perdón por la tardanza....
Saludos :D

Bestialazo

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Practica (principio De Orientacion A Objetos)
« Respuesta #4 en: Miércoles 17 de Octubre de 2007, 19:45 »
0
Ok, el punto 2 perfectamente entendido muchas gracias xD


Respecto al tema del metodo CrearCirculo... si quito la palabra Circulo me dice que ese metodo requiere un tipo a devolver o algo asi:"Circulo.java:46: invalid method declaration; return type required"; y la verdad es que tiene sentido... y si no lo quito no puedo mandar un mensaje al circulo con "c3.Circulo crearCirculo"... asi que no me funciona, solo me compila bien como lo tenia puesto antes.

Muchas gracias repito ;)

therion87

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Re: Practica (principio De Orientacion A Objetos)
« Respuesta #5 en: Miércoles 17 de Octubre de 2007, 19:56 »
0
:losiento:  :losiento:  :wacko:  :wacko:  :wacko:


jajaja es cierto, no se por que estaba pensando que era un constructor, hasta te lo escribi XD

Bueno al menos ya quedo resuelto, me dices si compila y hace lo que necesitabas ..

Saludos :D

Bestialazo

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Practica (principio De Orientacion A Objetos)
« Respuesta #6 en: Miércoles 17 de Octubre de 2007, 20:31 »
0
compilar compila perfectamente, pero sigue sucediendo el problema al acer c3.crearCirculo... lo de que afecta a c3, quiero decir que si yo ago c4=c3.crearCirculo(new Punto (1,1)) ese punto se le otorga tambien al circulo c3, cuando se supone que solo deberia afectar a c4... xD*

*se supone que lo que hace ese metodo es crear un circulo (c4) que tenga las mismas propiedades que c3 pero cuyo centro sea distinto


en fin, de todas formas, lo dejare asi si no logro arreglar ese problema, tampoco croe que pase nada.

therion87

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Re: Practica (principio De Orientacion A Objetos)
« Respuesta #7 en: Miércoles 17 de Octubre de 2007, 23:23 »
0
Haber... ya analizando cuidadosamente el codigo :P veo que quieres crear un objeto de tipo circulo de esta manera

Código: Text
  1. Circulo c4 = c3.crearCirculo(new Punto (3,1));
  2.  

Pero que no afecte a c3.... Eso no se puede de esta manera, por que estas sobreescribiendo el objeto c3 con nuevos puntos y ese lo estas igualando al c4

Si quieres crear un nuevo circulo, no veo por que no hacerlo de la misma manera que los 3 anteriores....

Saludos :D

Bestialazo

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Practica (principio De Orientacion A Objetos)
« Respuesta #8 en: Jueves 18 de Octubre de 2007, 00:35 »
0
Porque en la practica me pedian crear un circulo c4 a partir de ese circulo c3, solo que sin variar su radio, es decir que el circulo c4 tnga el mismo radio q el de c3 pero el centro sea distinto xD

Bueno igualmente, ya la he entregado... pero me gustaria saber si con ese metodo ( que me decian que tenia q definir esa practica,es decir, me decian "debe haber un metodo crearCirculo (punto tal...) " ) podria hacer lo que yo digo sin que se sobreescriba en c3, o simplemente es que no han contado con eso los que han programado la practica xD.

Muchas gracis, de todas formas por la paciencia y por la ayuda, probablemente me pasoe por aqui mas veces ;).

therion87

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Re: Practica (principio De Orientacion A Objetos)
« Respuesta #9 en: Jueves 18 de Octubre de 2007, 20:00 »
0
Pues mira ... lo que se necesitaria para hacer eso es, primero tener un método accesor, y un constructor de circulo por default, osea que ponga valores a un circulo si tu no se los pones
Código: Text
  1. //Método Accesor
  2. public int getRadio(){
  3.       return radio;
  4. }
  5.  
//Este es para que puedas obtener el valor del radio de cualquier circulo..

Código: Text
  1.  
  2. //Constructor por Default
  3. public Circulo(){
  4.    centro = new Punto(0,0);
  5.     radio = 0;
  6.     color = 0;
  7. }
  8.  
//Este te va a servir para crear un nuevo circulo pero que este "vacio"..

Ya que los tienes creas tu nuevo circulo C4

Código: Text
  1. Circulo c4 = new Circulo();
  2.  
// Lo creas vacio
Código: Text
  1. c4.setRadio(c3.getRadio());
  2.  
//Estas introduciendole el mismo valor de c3 al c4, para eso es el getRadio

y despues le asignas un nuevo centro

Código: Text
  1. c4.setCentro(new Punto(3,3));
  2.  

Y listo ... espero que me entiendas ... si no dime..

No te preocupes, si quieres mi correo para hablar por messenger mandame un MP

Saludos :D

Bestialazo

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Practica (principio De Orientacion A Objetos)
« Respuesta #10 en: Viernes 19 de Octubre de 2007, 16:12 »
0
okis, muchas gracias por todo de verdad ;)