Necesito ayuda con curso de Java

He empezado un curso de java dado para unos voluntarios, el tema es que no explican nada.

No soy precisamente torpe en temas de informática, pero de java no he visto nada nunca y no se ni cómo meterle mano al tema. Al profesor no le puedo preguntar porque ya lo he hecho varias veces y ni siquiera responde, así que esto es como juan palomo.

Dicho esto voy a colgar el primer ejercicio que ha mandado a ver si me podéis explicar cómo se hace o cómo plantearlo.

NO quiero la solución, quiero entenderlo, porque mi problema está solo en éste módulo. El de programar está mejor explicado ya y ahí no tengo problema.

Definir los atributos y de las siguientes clases y las relaciones entre ellas:

Teléfono: representa un teléfono al que se puede llamar a través de un número y que puede llamar a
otro teléfono. Hay que tener en cuenta que un teléfono estará definido por una marca y modelo.

Teléfono móvil: es un teléfono que se contrata con un operador de telefonía móvil.
Móvil con cámara: realiza fotografías con una resolución determinada.

Móvil con radio: permite escuchar una sintonía determinada.

Radio portátil: también permite escuchar una sintonía determinada. No es un teléfono.


Con la definición anterior realizar los siguientes ejercicios:

1. La implementación del método llamar del Teléfono es imprimir por pantalla una cadena del tipo
“Llamando al NNNN” donde NNNN es el destino de la llamada. Indicar en qué clase se haría esta
implementación y el pseudocódigo de la misma.

2. La implementación del método llamara del Móvil es igual a la del Teléfono, pero indicando además
con qué operador se llama. Por ejemplo: “Llamando al NNNN con el operador Telefon”. Indicar en qué
clase se haría esta implementación y el pseudocódigo de la misma.

3. La implementación del método escuchar es imprimir por pantalla la sintonía que se está
escuchando. Indicar en qué clase se haría esta implementación y el pseudocódigo de la misma.

4. Mi móvil tiene cámara y radio y es del modelo 7712 de la marca MSE. Representar en la jerarquía y
cómo se crearía una instancia de la clase.


La estructura la tengo más o menos hecha (un árbol), pero ahora me han dicho que la haga con interfaces y eso no viene ni definido en la teoría.

¿Podéis echarme una mano? Tiene huevos que sepa programar en 6 lenguajes y ésta mierda se me resista. Reiros todo lo que queráis, tenéis mi permiso [+risas]
Me pillas saliendo del curro, después de 6 horas y media con Java, si lo llego a leer antes te digo algo. Si la próxima vez que entre no veo respuestas, te lo miro y te digo, pero yo me piro de aquí ya, que estoy hasta los webs.

Saludos.
Eruanion escribió:Me pillas saliendo del curro, después de 6 horas y media con Java, si lo llego a leer antes te digo algo. Si la próxima vez que entre no veo respuestas, te lo miro y te digo, pero yo me piro de aquí ya, que estoy hasta los webs.

Saludos.

Pues a ver si puedes hacerme el favor, porque sólo necesito una base desde donde "despegar", que programar no se me da mal siempre que enseñen bien, pero no es el caso.
A ver, quizás deberías especificar un poco más que es lo que se te hace raro. Si no sabes de programación orientada a objetos (que lo dudo, porque dices que sabes 6 lenguajes) lee su teoría con atención, en concreto los conceptos encapsulación, herencia y polimorfismo.

Por otra parte. Lo de que lo hagas con interfaces ¿es una sugerencia o una imposición para todas las clases? Una interfaz dicho a groso modo no es algo muy diferente a la herencia (y el aspecto es muy parecido a los headers típicos de clases de c++). En ella se especifican unos métodos, con sus variables de entrada y de salida, pero no se implementan. Por tanto, para usar una interfaz debe ser a través de una clase que implemente dichos métodos. (del mismo modo que si una clase hereda de otra, lo indicas con "extends" en la cabecera de la clase nueva, implementar una interfaz en una clase se indica con "implements" en la cabecera de dicha clase). Que haga falta usar interfaces en java y no se haga todo por herencias se debe a dos cosas, primero porque no se permite la herencia múltiple, y segundo porque el concepto de interfaz es más útil en fases intermedias del desarrollo de un proyecto. Por tanto, de momento no creo que te tengas que rayar mucho con el porqué de usar interfaces, piensa que es algo parecido a la herencia y punto.
A ver, intento explicarte por encima. Este ejercicio es peculiar en este sentido: tienes la clase teléfono, teléfono móvil, móvil con radio y radio a secas. Tienen cosas en común: la mayoría son teléfonos y hay dos que son radios.

No sé si te han explicado lo que es la herencia (public class cachorro extends perro), así que te daré una explicación rápida por si acaso: cuando una clase hereda de otra, se queda con la misma estructura: mismos atributos y mismos métodos. No obstante, se pueden agregar tanto atributos como métodos y se pueden reimplementar los métodos (es decir, volver a programar una función que ya estaba en la superclase) para que en la nueva clase sean diferentes. Una pista para bordar este ejercicio: échale un vistazo también a lo que es una clase abstracta ;)

La mayor peculiaridad de este ejercicio es que hay un móvil que es también radio. Es decir, hereda de móvil... ¡pero también de radio! Y Java no soporta lo que se conoce como herencia múltiple: sólo se puede heredar de una clase y nada más. Una manera de "parchear" eso es usar interfaces (aunque las interfaces, como verás cuando las estudies con más profundidad, tienen su propia razón de ser).

Y aquí viene lo que es una interfaz (en vez de extends se utiliza implements para llamarla y se declara con public interface nombre): es una especie de "contrato" que especifica qué metodos tiene que implementar la clase obligatoriamente. En la interfaz no se implementa código; sólo se define cuáles son los métodos que va a tener (con sus argumentos de entrada e indicando su tipo de retorno). Tampoco puede tener atributos. Es decir, si tú tienes una interfaz para la radio que tenga un método "sintonizar", por ejemplo, y "móvil con radio" implementa esa interfaz, te aseguras de que la clase "móvil con radio" va a tener un método que sea "sintonizar"... Si no lo tuviera, no te dejaría compilar, porque es obligatorio.

La clave de este ejercicio parece ser la simulación de herencia múltiple. Eso sí, me extraña un montón que os pongan a hacer cosas para las que evidentemente no estáis preparados si ni siquiera os han enseñado lo que es una interfaz...

Sé que es una explicación vaga y rápida, así que si no entiendes algo o te queda alguna duda dime ;)
Gracias por la ayuda, veré a ver qué puedo hacer, pero no es normal que ésto sea el ejercicio de introducción al curso y encima no expliquen nada.
Lo único que se me ocurre es que sea un curso de Java para gente acostumbrada a programar de forma orientada a objetos... Porque te mostraría la peculiaridad de que Java no soporta herencia múltiple y para que os busquéis un poco la vida para solucionarlo, pero claro, teniendo bastante claro cuáles son las "armas" con las que jugáis... ¿Seguro que no es así? Es que para un curso de nivel básico me parece una manera un poco fuerte de empezar.
Ryucho escribió:Lo único que se me ocurre es que sea un curso de Java para gente acostumbrada a programar de forma orientada a objetos... Porque te mostraría la peculiaridad de que Java no soporta herencia múltiple y para que os busquéis un poco la vida para solucionarlo, pero claro, teniendo bastante claro cuáles son las "armas" con las que jugáis... ¿Seguro que no es así? Es que para un curso de nivel básico me parece una manera un poco fuerte de empezar.

El título del curso es "curso de iniciación a j2se", así que... imagina. No pedían requisitos, es más, es para voluntarios de la cruz roja y demás, del departamento de voluntariado digital. Un poco intenso lo veo yo. Al profesor le están lloviendo palos en el foro del curso.
Pues por lo que veo se lo tiene merecido. A mí no se me ocurriría empezar así sin pedir requisitos ni de coña.
Yo he experimentado en mis propias carnes ese tipo de "enseñanza". No es rara. El caso más exagerado lo he vivido precisamente este semestre en Alemania con una asignatura de a trabajo por semana, cuyo profesor contestaba todas las dudas técnicas con 2 palabras mágicas "usa google". Mi cara cuando me mandaron pal día siguiente de la presentación, que implementara un servidor HTTP en java con varias pijerías era pa verla. Pero claro, estamos hablando de una asignatura de Máster xD.
Yo tengo apuntes en java de herencia y de interfaces, pero estan en catalan y esta redactado como el culo [+risas]
Si ya te va bien avisa y te lo busco.
Te dejo aquí un resumen de apuntes que hice para mi asignatura de java de la carrera a ver si te sirve de algo:

http://www.megaupload.com/?d=LMDLDHAT
Hombre, si sabes programar en otros 6 lenguajes imagino que dentro de estos 6 estará C++ o C#, por lo que java debería resultarte tiradísimo.
Como se que has dado informática te lo digo en términos más técnicos :) Hace mucho que no toco java, pero lo intentaré.

Los interfaces definen un contrato que una clase ha de seguir. Si has dado c++ es el equivalente a una clase abstracta pura.

Por tanto un interface solo tiene definiciones de métodos no puedes tener ninguna implementación ni definir miembros.


Para que una clase IMPLEMENTE un interface ha de
1) Heredar de dicho interface
2) Implementar los métodos definidos por dicho interface

En Java la herencia es simple, es decir, sólo puedes tener una clase base (en c++ puedes tener varios padres)
Sin embargo puedes implementar todos los interfaces que quieras.

La utilidad de los interfaces es definir operaciones comunes, ya que luego puedes considerar cualquier clase que implemente un interface como un tipo, y por tanto hacer castings, sobreescribir en clases derivadas y aprovechar el late binding, y todo lo que se aplica a una clase derivada de otra.

Pero si, para un curso de iniciación no es normal empezar así.
Estaba en PC y he visto el hilo de Java. Igual ahí más gente puede ayudarte:

hilo_hilo-oficial-ii-java_1305785
VozdeLosMuertos escribió:Estaba en PC y he visto el hilo de Java. Igual ahí más gente puede ayudarte:

hilo_hilo-oficial-ii-java_1305785

Nada, ni voy a hacer la práctica. En el foro del curso se ha liado parda y con razón. A ver cómo responden los del curso, porque que el 90% de los matriculados no tenga ni idea de cómo hacer la práctica demuestra problema del tutor, no de los alumnos.

Por cierto, a quien preguntaba, se programar en 6 lenguages, pero ninguno es orientado a objetos. Empecé con C++ pero lo dejé abandonado por circunstancias personales.
Johny27 escribió:Por cierto, a quien preguntaba, se programar en 6 lenguages, pero ninguno es orientado a objetos. Empecé con C++ pero lo dejé abandonado por circunstancias personales.

Oye, como curiosidad, ¿en que 6 lenguajes sabes programar que no sean orientados a objetos? porque me salen justos:
C, lisp, perl, basic, cobol, ada, pascal (mientras no sea delphi)... y la verdad es que no caigo en otros a no ser que meta bash scripting....

Lo que me lleva a otra pregunta... ¿no estabas estudiando ahora la carrera? :P
Hola,

no se si me ha escapado algo, pero ma parece que no pide nada gráfico, y que lo único que os pide es pseudocódigo.
Si he comprendido bien, vendría a ser algo como lo siguiente, aunque expresado en pseudocódigo, si necesitas ayuda con eso dímelo.

Definir una clase con atributos no debería llevaros demasiada complejidad, los atributos serian el nombre de la compañía telefónica, el modelo, la marca y el numero de telefono, asimismo un constructor para poder crera una instancia de él. Luego extendiendo la clase móvil, imagino que quiere que creeis una clase movilCamara, movilRadio y radioPortatil que extienden la clase móvil y tienen atributos propios.
Lo de las relaciones, imagino que quiere que metáis una clase como atributo de otra clase, para esto iría bien que tuvierais nociones de modelos relacionales.
Y finalmente para los métodos, para el número 1, al ser algo genérico, se crearía un método en la clase móvil que hace un print en pantalla del mensaje tomándo por parámetro el número de móvil.
Para el segundo, sería básicamente lo mismo, lo único que además imprimiriamos el atributo móvil.compania
El número 3 seria un metodo de la clase radioPortatil, que mostraria el atributo movil.cancionActual
Finalmente para instanciarlo sería algo como Movil movil = new Movil("MSE","7712","Timofonica","666090909");

Espero que te haya aclarado un poco las ideas.
Saludos
Es que si no has dado nada nada orientado a objetos, intentar ponerte sólo es complicado, yo el único lenguaje en el que se programar medio es java.

Los ejercicios no es más que crearte una arquitectura de interfaces-clases.

Así de manera rápida:

Interface: define un tipo, en ella se "describen" los metodos que va a tener un objeto (que es una instancia del tipo).

Clase: extienden a las interface, deben implementar todos los métodos descritros en la interface, además tener sus metodos constructores (si no lo pones coje uno por defecto), en la clase tienes que declarar los atributos de dicha implementacion a la interface dada(Tipo).

hay muchas más cosas que entender, herencia entre interfaces y clases, etc, etc. Pero más o menos esto es una idea.

Los ejercicios, no los he leido bien, pero no es más que crearte por ejemplo la Interface Telefono y poner unos metodos consultores a los atributos que tu quieras ponerle a ese tipo, despues en la clase defines los atributos e implementas los métodos.

No te puedo ahora mismo ayudar más voy con prisa, para cualquier cosa avisame, te puedo pasar algunos ejercicios resueltos de manera muy sencilla.

Un Saludo.

PD: Perdonar las faltas de ortografía, voy con prisa.
Johny27 escribió:
Eruanion escribió:Me pillas saliendo del curro, después de 6 horas y media con Java, si lo llego a leer antes te digo algo. Si la próxima vez que entre no veo respuestas, te lo miro y te digo, pero yo me piro de aquí ya, que estoy hasta los webs.

Saludos.

Pues a ver si puedes hacerme el favor, porque sólo necesito una base desde donde "despegar", que programar no se me da mal siempre que enseñen bien, pero no es el caso.

no es el caso en la gran mayoria de profesores de ciclos formativos informatica asi de claro, alguien deberia apretarle las tuercas a mas de un profesor
zheo escribió:
Johny27 escribió:Por cierto, a quien preguntaba, se programar en 6 lenguages, pero ninguno es orientado a objetos. Empecé con C++ pero lo dejé abandonado por circunstancias personales.

Oye, como curiosidad, ¿en que 6 lenguajes sabes programar que no sean orientados a objetos? porque me salen justos:
C, lisp, perl, basic, cobol, ada, pascal

C, cobol, basic, html (cuenta a medias, es un lenguaje :P), clips, ensamblador, SQL, bash (completo, pero también cuenta a medias), Fortran, y alguno que se me olvida.

Evidentemente no todos los domino en plan pro, pero todas las asignaturas basadas en ellos están aprobadas. Respecto a la carrera, "ahí", me voy sacando asignaturas, pero con motivación 0, me he dado cuenta de que la informática está bien para los cuando se es jovencito, pero no para trabajar de ello a largo plazo, y menos en este país.

Respecto al tema, ya he hecho la práctica con ayuda de un compañero de curso, pero no la hemos entregado por principios. Estamos en pie de guerra contra el tutor, que se está tocando los huevos a dos manos y ni siquiera responde a las dudas cuando se le pregunta.

Muchas gracias a todos.
cuando te toque las narices y empieces a comandar el equipo de flamers del curso, se va a cagar de miedo XD
Enanon escribió:cuando te toque las narices y empieces a comandar el equipo de flamers del curso, se va a cagar de miedo XD

Buenoooo llevo toda la tarde flameando. Lo último que le he puesto ha sido ésto:

Lo siento, pero ésto clama al cielo. Si el curso es para iniciados qué menos que tener la teoría para novatos, y por supuesto qué menos que tener un profesor pendiente del foro (no 24 horas al día, pero al menos en horario de oficina y más en día de entrega de prácticas) que cuando le pidas que te enseñe a hacer algo no te mande leer lo ya leido o directamente ni conteste.

Para esto no necesitamos profesor, con los pdf's bastan. Total, viene a ser lo mismo, ya que de todas formas tenemos que hacer nosotros su trabajo.


A mi me cascarán el curso, pero a ésta empresa no le conceden ninguna subvención por formación a voluntariado.
Hola.

Soy de córdoba, y recientemente he echado varios cursos de FPO de programación (soy programador, y estoy en paro...).

¿Me podías decir donde los has encontrado? ¿Y por privado, el nombre de ésta empresa?

Yo he oido también de algunas...que vaya tela...

Un saludo, y suerte...aunque al final pasará eso...que se quedarán sin subvención y el curso se irá a la mierda...
La empresa es Novasoft, y los he encontrado a través del departamento de voluntariado digital de la Cruz Roja.
Johny27 escribió:Evidentemente no todos los domino en plan pro, pero todas las asignaturas basadas en ellos están aprobadas. Respecto a la carrera, "ahí", me voy sacando asignaturas, pero con motivación 0, me he dado cuenta de que la informática está bien para los cuando se es jovencito, pero no para trabajar de ello a largo plazo, y menos en este país.


Aaaamigo... has topado con la profesión más incompatible con la forma de ser de Ejpain. La informática, más que ser un pro, requiere disciplina, actitud, paciencia, ideas muy claras, y organización en el trabajo. Eso es casi como hablar en chino en la patria del cortoplacismo, la chapuza, la improvisación, el "se entrega el martes como sea", y la vendida de motos y humo. La informática no puede funcionar bien en este país, es imposible. El informático es el enemigo número uno del jefe inútil y puesto a dedo.

Johny27 escribió:Respecto al tema, ya he hecho la práctica con ayuda de un compañero de curso, pero no la hemos entregado por principios. Estamos en pie de guerra contra el tutor, que se está tocando los huevos a dos manos y ni siquiera responde a las dudas cuando se le pregunta.


Johny, me tengo que quitar el sombrero. Espero muy sinceramente que seas firme con este asunto y no cedas. Relacionado con esto, la culpa de que muchas cárnicas estén como están, más que del jefe explotador, es del currito que no se planta y no exige trabajar en condiciones. ¿Que amenazan con el despido? Si sólo se rebelan unos pocos, pues normal. Pero si se plantasen más, muchos jefes descubrirían el significado de la palabra "miedo". ¡No tienen tanto poder como nos venden! Tienen el poder que tú les das, y muy poco más. Por eso más de un jefe inútil es tan déspota: sólo es una fachada para esconder su propia inutilidad.


Johny, si puedes, no te limites a plantarle cara al tío. Comunícaselo a sus superiores y a todo aquel que le pueda interesar. Para sobrevivir, un jefe inútil suele ponerse entre sus superiores y sus subordinados, filtrando completamente todo el flujo de información. Así controla quién sabe qué, y puede esconder su propia ineptitud. Pero en el momento en que se le hace el puente, y hablas con un superior directo, le destrozas su plan.

Que manda narices que esté un profesor así con la cantidad de buenos programadores que están en el paro. Viva la meritocracia inversa.
No te preocupes, mañana tengo planeado ir a hablar con la responsable del área para comunicarle cómo se está comportando la empresa a la que le han otorgado los cursos. La última vez que pasó algo parecido se montó la de dios, y por supuesto no voy a parar hasta conseguir lo que quiero. Total, el curso no me sirve así que no tengo nada que perder, y aunque lo tuviera, es cuestión de principios.
Gracias Edu.

Pregunta en ese hilo mejor (sino en pc/general claro)
29 respuestas