Mostrar Mensajes

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


Mensajes - Mario R. Rancel

Páginas: 1 ... 11 12 13 14 15 [16] 17 18 19 20 21 ... 32
301
Hola Pedro veo el código correctamente resuelto

Como pequeñas mejoras: en lugar de definir pi podrías haber rescatado el valor usando la propia clase Math, que permite recuperar el valor de Pi (ver https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#PI)

Una pequeña mejora que veo posible sería simplificar los métodos equals.

En la clase Cuadrado quedaría con una pequeña simplificación:

Código: [Seleccionar]
    public boolean equals(Object obj){
        if (obj instanceof Cuadrado){
            return super.equals(obj);
        } else {
            return false;
        }
    }

Y en la clase Circulo quedaría con la misma pequeña simplificación:

Código: [Seleccionar]
    public boolean equals(Object obj){
        if (obj instanceof Circulo){
            return super.equals(obj);
        } else {
            return false;
        }
    }

Saludos

302
Sí, pero el aprendizaje tiene que ser gradual... un curso donde se pretendiera hacer las cosas perfectas y con los mejores diseños desde el primer momento no sería un buen curso  ;).

Saludos

303
Hola adrit

He revisado el ejercicio y paso a hacerte las observaciones que he considerado.

A. Un detalle importante que debemos manejar como programadores es la forma de nombrar las clases. En general los nombres de las clases deben estar en singular. Has usado nombres como ProductosFrescos. Esto no se considera adecuado porque no sigue la convención habitual. Cuando nos referimos a la creación de un objeto por ejemplo decimos "he creado un objeto ProductoFresco" y no "he creado un objeto ProductosFrescos". Esto te ocurre con todas las clases. Deberías tenerlo en cuenta.

B. Otro detalle es no contravenir con el diseño del código al mundo real. Según tu diseño un ProductoCongelado es un tipo de ProductoFresco. Esto no es correcto porque no se corresponde con  la realidad y ni siquiera se trata de una clase intermedia. El enunciado nos dice que hay 3 tipos de productos, por tanto lo adecuado es que de la clase Producto hereden las clases ProductoRefrigerado, ProductoFresco y ProductoCongelado.

El apartado b) del anunciado indica que se creen superclases intermedias que pueden o no corresponderse con el mundo real. Pero la idea es no ir en contra del modelo del mundo real, sino crear clases auxiliares que quizás no existan en el mundo real pero que puedan ayudar en la programación. Por ejemplo una clase intermedia ProductoRefrigeradoOCongelado serviría para agrupar características comunes de los productos congelados o refrigerados. Puedes ver un ejemplo de esto en https://www.aprenderaprogramar.com/foros/index.php?topic=2342

C. Has usado el método toString que no se explica en el curso hasta la entrega CU00694B. En general recomendamos seguir el curso paso a paso sin adelantarse ni introducir contenidos más avanzados que no hayan sido explicados. Aunque en este caso ya estás muy próximo a la terminación del curso y esto ya no es tan importante precisamente porque ya te quedan pocas entregas.

D. Otra cosa que se ve poco adecuada es usar String porcentajeNitrogeno. Dado que los porcentajes son valores numéricos, con los que se podrían hacer cálculos, no es adecuado declararlos como texto. Sería preferible usar tipos numéricos por ejemplo double. Lo mismo ocurre con salidadDelAgua

E. También poco adecuado el método main donde aparece

System.out.println(producto1.toString());
System.out.println(producto2.toString());
System.out.println(producto3.toString());

Ese tipo de código repetitivo en general hay que tratar de evitarlo. Para ello los elementos de un mismo tipo normalmente los agrupamos en un array o en una colección de objetos como ArrayList. De este modo usamos bucles para recorrerlos y tratarlos (por ejemplo para mostrar datos por pantalla).

Aquí puedes ver un ejemplo de tratamiento como colección: https://www.aprenderaprogramar.com/foros/index.php?topic=2935


Este ejercicio sería razonable repetirlo para corregir todos los detalles comentados y alguno más que pueda aparecer. Al corregir diseños no adecuados nos sirve de refuerzo para recordarlo cuando creemos códigos en el futuro.

Saludos.

304
Hola pedro, he revisado el código y está todo correcto y bien presentado por pantalla.

El método public void muestraDatosProducto() podríamos decir que es mejorable en varios sentidos, pero esto se estudiará en la entrega CU00694B donde se explica el método toString, que vendría a sustituir al método comentado, y cuyo uso implica un cambio de planteamiento: en lugar de incluir las instrucciones para mostrar de pantalla dentro del método hacemos que el método devuelva un String que será manejado posteriormente para mostrar los datos por pantalla desde otro lugar. Pero dado que se explica más adelante no te detengas en esto ahora, es preferible seguir avanzando conforme a la planificación del curso.

Saludos.

305
Hola Pedro has cumplido perfectamente con lo que pedía el ejercicio, mi enhorabuena.

Saludos

306
Hola barriway

Ejercicio perfecto.

Faltaría responder la pregunta, cuya respuesta puede ser:

En la clase Polideportivo hay una relación semejante a la herencia múltiple, pues implementa las dos interfaces Edificio e InstalacionDeportiva. La clase EdificioDeOficinas, por otro lado, sólo implementa la interface Edificio, por lo que su "herencia" es simple.

Saludos cordiales

307
Hola barriway

Ejercicio perfecto, además aplicando correctamente los conceptos relacionados con herencia vistos en las anteriores entregas del curso. Mis felicitaciones.

Saludos

308
Hola Carlos, en este link se encuentra una explicación: https://www.aprenderaprogramar.com/foros/index.php?topic=1233

Si después de leerlo te quedan dudas vuelve a consultar.

Saludos cordiales

309
Ahora completo y todo bien. Saludos.

310
Hola ronal.d87

El ejercicio está bien planteado, pero te falta el apartado e) que pide lo siguiente:

e) Usa iteradores para recorrer los elementos del ArrayList y recorrer el contenido de cada uno de los elementos y mostrar este contenido por pantalla. Por pantalla deberás obtener “sol”, “luna”, “saturno”, 8, 5, 2.

Aunque con tu código estás obteniendo por pantalla lo solicitado, no lo estás haciendo mediante el uso de iteradores.

Saludos

311
Hay varias formas posibles para plantear una solución a este ejercicio. En este hilo https://www.aprenderaprogramar.com/foros/index.php?topic=1220 puedes ver una discusión adicional sobre aspectos del mismo.

Saludos

312
Hola Luis

El principal problema con este ejercicio suele estar en el trabajo con objetos, por ejemplo usar objetos como parámetros de un método, pero en este caso lo has resuelto perfectamente. A seguir así.

Saludos

313
Hola plantinumbazz

El ejercicio está correcto

En lugar de hacer la conversión a float, si quieres limitar el número de decimales podrías usar un redondeo (ejemplo en www.aprenderaprogramar.com/foros/index.php?topic=991)

Sobre la duda que planteas, creo que se puede responder de la siguiente manera: hay que diferenciar el tipo de dato enumerado TipoDePiedra de una variable cuyo tipo sea el tipo enumerado como podría ser mipiedra.

El tipo enumerado existe desde que lo declaramos, y Java permite recuperar la información relacionada con un tipo enumerado sin necesidad de que exista una instancia de dicho tipo (esto es lo que hacemos en el fragmento

Código: [Seleccionar]
       for(TipoDePiedra tmp: TipoDePiedra.values()){
       System.out.println(tmp.toString()+ " el palet pesa " + (2.27f*(float)tmp.getPesoEspecifico() ) + " kg");
       }

Esto es una particularidad de Java. Podría ocurrir que esto no se permitiera, pero en este lenguaje sí se permite.

Espero haber ayudado a aclarar la duda.

Saludos

314
Hola!

El ejercicio se ve bien trabajado, mi enhorabuena.

Quiero hacerte algunas puntualizaciones que espero te sirvan para siempre ir mejorando:

Aunque la idea de usar los métodos mostrarProducto() y mostrarInformacion() no es del todo mala, hay una forma mejor para resolver lo que has tratado de plantear (mostrar toda la información sin repetir código).

En la clase Producto aparece:

Código: [Seleccionar]
    public void mostrarProducto(){
        System.out.println("Lote : "+lote);
        System.out.println("Fecha de caducidad : "+fechaCaducidad);
    }
   
    public void mostrarInformacion(){
        //Sobreescrito en cada una de las subclases
    }

En la clase ProductoRefrigerado aparece:

Código: [Seleccionar]
    public void mostrarInformacion(){
        System.out.println("--- Producto Refrigerado ---");
        mostrarProducto();
        System.out.println("Codigo del Organismo de Supervisión Alimentaria : "+codigoOrgSupAlim);

    }

Estás llamando al método mostrarProducto() de la superclase para evitar repetir código (buena idea). Sin embargo, tienes dos métodos con distinto nombre que vienen haciendo lo mismo (mala idea, creas una duplicidad que no es buena desde el punto de vista del diseño del código).

Podríamos resolverlo como se hace aquí: https://www.aprenderaprogramar.com/foros/index.php?topic=2306

Otra solución (preferible) sería usar una invocación a super para recuperar el código del método de la superclase y añadirlo a la subclase. Esto se explica en https://www.aprenderaprogramar.com/foros/index.php?topic=2440 y sería bueno que intentaras resolver el ejercicio de esta manera, pues es un buen ejemplo para entender cómo trabaja la herencia y cómo permite la reutilización de código.

Finalmente tendríamos la solución de usar el método toString(), esto se explica más adelante en el curso, no te preocupes por ella de momento.

Saludos

315
Gracias por responder, a veces no se sabe si se han leído o no los mensajes. Animo y a seguir adelante. Saludos

316
Hola duralai, algunos lenguajes consideran que las comillas simples y las comillas dobles son cosas distintas y no admiten que se cambien unas por otras.

En cambio otros lenguajes como PHP y JavaScript permiten usar indistintamente comillas simples y dobles, dando lugar al mismo resultado.

Así echo "hola"; sería lo mismo que echo('hola');

Lo que sí debe respetarse es la correspondencia entre apertura y cierre de comillas, que deben mantenerse equilibradas. Por ejemplo echo 'hola"; no sería correcto.

En el caso de arrays asociativos ocurre lo mismo, pueden usarse indistintamente un tipo de comillas u otro siempre que se mantenga la correspondencia adecuada.

Saludos

317
Hola, el resultado que obtienes puede estar relacionado con la configuración de php. Posiblemente con el valor establecido para error_reporting en el fichero php.ini.

En mi caso, he probado a ejecutarlo sobre un servidor y he obtenido los resultados que se indican en el texto del curso. No me han aparecido mensajes de error.

Los mensajes de error, warnings, notices, etc. que obtengas con php pueden estar condicionados por la versión de php y por la configuración de php.

Dado que los aspectos de configuración son complejos y no son el objetivo del curso, te recomendaría que si entiendes bien la explicación no te entretengas en tratar de evitar esos mensajes, sino que por el contrario continues avanzando con el curso.

También pienso que te puede resultar útil trabajar sobre un servidor remoto (puede ser un servidor gratuito, como se explica en el propio curso), dado que son condiciones de trabajo más realistas (y más próximas a lo que va a ser la progración web real que el trabajar en local).

Saludos

318
Hola calderas, este ejercicio es un poco laborioso y en líneas generales lo veo bien trabajado. Las relaciones de herencia, la sobreescritura del método toString, uso de invocaciones a super, etc. están bien planteadas.

Voy a comentar algunas cuestiones que espero te sean útiles:

- Los nombres de las clases tienen cierta importancia, deben ser descriptivos y seguir un patrón lógico. En el caso de Congelado veo que sigues un patrón: la superclase es Congelado y las subclases CongeladoAgua, CongeladoAire y CongeladoNitrogeno por su propio nombre nos describen que son subclases y en cierta medida el nombre nos da una explicación.

Sin embargo no ocurre lo mismo entre Productos y sus subclases. Por ejemplo hubiera visto mejor que Producto fuera superclase y ProdCongelado, ProdFresco, etc. sus subclases, al menos de esta forma hay cierta indicación de herencia en el propio nombre de las clases.

- La clase Refrigerado veo que has hecho que herede de Congelado pero esto no sería correcto desde el punto de vista conceptual. Incluso si te supone un ahorro de código, el diseño de clases no debe (en la medida de lo posible) contravenir el modelado conceptual del mundo real. En programación orientada a objetos se dice que la relación de herencia genera una especialización de modo que podemos decir que la subclase "es un" tipo especializado de la superclase. Por ejemplo un producto congelado por aire "es un" producto congelado. Sin embargo un producto refrigerado no "es un" producto congelado. Aunque el código esté bien, a nivel de diseño no es consistente y debería ser mejorado.

- El atributo nProductos en la clase EnvioDeProductos parece que no resulta necesario. Esta información parece que ya se mantiene por el uso de la clase ArrayList que te provee del método size() que te devuelve el número de elementos en la lista. Si este es el único fin, no tendría sentido crear un atributo adicional para hacer algo que ya nos facilita el propio api de java.

Hay algo interesante para quien tenga interés que es el atributo estático nEnvio, que permite contar el número de envíos que se han creado (número de objetos envío, contados cada vez que se invoca el constructor).

Saludos

320
Hola de nuevo, aunque ya indicado en otro hilo para facilitar la revisión de ejercicios es conveniente que introduzcas en el título la referencia de la entrega del curso, en este caso CU00719B

Todo correcto.

Como en el anterior ejercicio, recomendable introducir el charset para que los acentos se muestren correctamente en todos los navegadores
Código: [Seleccionar]
<head>
<title>Ejercicio</title>
<meta charset="utf-8">
</head>

Saludos

Páginas: 1 ... 11 12 13 14 15 [16] 17 18 19 20 21 ... 32

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".