Programación General > Java
Practica (principio De Orientacion A Objetos)
Bestialazo:
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 --- /** * La clase Punto modela a un punto en el plano * @author * @version 1.0 */public class Punto { /* Definimos los atributos del punto */ /** Coordenada X del punto. atributo de tipo int, que representa números enteros */ private int x; /** Coordenada Y del punto */ private int y; /* definición de métodos del punto */ /** Construye un punto a partir de sus coordenadas * @param coordX es la coordenada x del nuevo punto * @param coordY es la coordenada y del nuevo punto */ public Punto(int coordX, int coordY) { x= coordX; y= coordY; } /** Imprime por pantalla la situación del punto */ public void mostrarSituacion() { System.out.println("("+x+","+y+")"); }} Clase circulo
--- Código: Text --- /** * Modela un circulo a partir de su centro y su radio * @author * @version 1.0 */ class Circulo { /* Definición de atributos del círculo */ /** Centro */ private Punto centro; /** Radio */ private int radio; /** Color */ private int color; /* Definición de métodos del círculo */ /** Construye un círculo a partir de su centro y su radio * @param cnt es el centro del triángulo * @param rad es el radio del círculo */ public Circulo(Punto cnt, int rad, int clr) { centro = cnt; radio = rad; color = clr; } public Circulo(Punto cnt, int rad) { centro = cnt; radio = rad; color = 0; } public Circulo crearCirculo(Punto cnt) { centro = cnt; return this; } public void setColor (int clr) { color = clr; } public void setCentro (Punto cnt) { centro = cnt; } public void setRadio (int rad) { radio = rad; } /** dibuja el círculo en pantalla */ public void mostrarSituacion () { System.out.println("Este círculo se define por:"); System.out.println("Un centro:"); centro.mostrarSituacion(); System.out.println("un radio:"+radio+""); System.out.println("y un color:"+color+""); } public void mostrarCentro () { centro.mostrarSituacion(); } public void mostrarRadio () { System.out.println(radio); } public void mostrarColor () { System.out.println(color); } } Programa con el que hago las pruebas para el objeto circulo
--- Código: Text --- /** * Programa que ilustra el manejo de objetos Circulo * @author * @version 1.0 */class PruebaCirculo { public static void main(String args[]) { /* creamos un punto que sera el centro del circulo */ Punto cnt = new Punto (1,1); /* ...y le damos un valor al radio */ int rad = 3; /* ...creamos el circulo */ Circulo c1 = new Circulo(cnt, rad, 2); Circulo c2 = new Circulo(cnt, rad); Circulo c3 = new Circulo(new Punto (-1,-1),2); Circulo c4 = c3.crearCirculo(new Punto (3,1)); /*y dibujamos el circulo */ c3.mostrarSituacion(); c3.setCentro(3,3); }}
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:
Ya entiendo...
Primero....mira tienes este metodo
--- Código: Text ---public Circulo crearCirculo(Punto cnt) { centro = cnt; return this; }
y lo estás llamando de esta manera
--- Código: Text ---Circulo c4 = c3.crearCirculo(new Punto (3,1));
Y ademas
--- Código: Text ---public void setCentro (Punto cnt) { centro = cnt;}
al llamarlo de esta manera
--- Código: Text ---c3.setCentro(3,3);
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:
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:
:lol: :lol: :lol: Ok.. Me explico mejor, es que ayer no tenia mucho tiempo...
--- Código: Text ---public Circulo crearCirculo(Punto cnt) { centro = cnt; return this; }
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 ---Circulo c4 = c3.crearCirculo(new Punto (3,1));
tu llamada al método deberia ser algo asi como
--- Código: Text ---c3. Circulo crearCirculo(Punto cnt) :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 --- c3.setCentro(new Punto(3, 3)); 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:
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 ;)
Navegación
[#] Página Siguiente
Ir a la versión completa