Fecha y hora actual: Viernes 20 Sep 2019 20:18
Índice del Foro

Foros de programación informática, diseño gráfico y Web

En esta comunidad intentaremos dar soporte de programación a todos los niveles, desde principiantes a profesionales de la informática, desarrollo de programas, programación web y mucho más.

Lección 73: Actualizando Nomina Personas - Clases Internas

Responder al Tema Ir a página Anterior12

Índice del Foro > Programación en general > Lección 73: Actualizando Nomina Personas - Clases Internas

Autor Mensaje
jonga



Registrado: 27 Mar 2014
Mensajes: 8

Mensaje Publicado: Sábado 12 Abr 2014 12:58

Título del mensaje: Lección 73: Actualizando Nomina Personas - Clases Internas

Responder citando

Hasta aquí había entendido todo muy bien, pero este código ListaPersonas, la recursión y demás me cuesta entenderlo. Normal, si tenemos en cuenta que me salté el curso de Modula 2. Seguiré hacia el siguiente tema, y luego volveré a repasar y volver a repasar hasta entender, quizás tendría que repasarme los temas de Modula 2 que tratan con lo mismo. No tengo tiempo para realizar el curso entero de Modula 2, y es una lastima porque tendría estos conceptos mucho más claros.

Respecto a listas vacias he visto googleando que existe un método isEmpty() que imagino facilitaría las cosas, pero entiendo que no es el momento y lo explicarás más adelante.

Saludos y solo puedo volver a decirte: gracias por este excelente curso!

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Kyshuo Ayame
Moderador Global


Registrado: 07 Ene 2011
Mensajes: 1044

Mensaje Publicado: Sábado 12 Abr 2014 20:32

Título del mensaje: Lección 73: Actualizando Nomina Personas - Clases Internas

Responder citando

La operación isEmpty indica si es vacía la lista. En nuestro caso, como nosotros mismos programamos el funcionamiento de una lista tenemos que programar la operación isEmpty o esVacia (como quieras llamarla). Las listas que trae Java ya tienen todo hecho, yo aquí enseño a crear una implementación propia para las listas.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
jlrods
Usuario Inquieto


Registrado: 03 May 2014
Mensajes: 60

Mensaje Publicado: Martes 18 Ago 2015 15:35

Título del mensaje: Lección 73: Actualizando Nomina Personas - Clases Internas

Responder citando

Hola Kysuo,

Ya trabajando con Java. Estoy realizando el ejercio que propones en este apartado, tratando de implemetar las operaciones para la clase ListaPersonas con la primera representacion que propones, es decir, sin utilizar una clase interna para los nodos de la lista.

La verdad este enfoque es mas confuso que el que desglosaste en la leccion y realmente al principio no entendia el objetivo de este ejercicio, pero ya lo comprendo mucho mejor.

En efecto el no poder utilizar la referencia this me ha hecho la vida dificil pero he conseguido otras formas de proprner la implementacion de las operaciones. Sin embargo, tengo problemas para agregar un nodo al inicio de la lista... Como bien dices en la leccion no podemos proponer algo como this = algo (del tipo ListaPersonas en este caso) y asumo que tampoco se puede al contrario: algo = this.

Asi que, cuando el nuevo nodo debe colocarse al inicio de la lista existente, cuando quiero cambiar la referencia del primer nodo (this) y asignarsela al nuevo nodo (aux) para que este quede como el inicio de la lista, estoy completamente trabado por el probelma descrito antes.

Se me habia ocurrido proponer un procedimiento estatico que recibiera dos referencias a objetos del tipo ListaPersonas (L1 y L2, serian los parametros del procedimiento) y que en este caso simplemente se hacian alias ambas referencias (L2 = L1). Mi duda es: cuando haga el llamado a esta operacion desde el procedimiento agregar(), es posible pasar como argumento del procedimieto a la referencia this?

quedaria algo asi:

Código:

Esta es el procedimiento estatico que hace el cambio de referencia:
public static void copyReference(ListaPersonas L1, ListaPersonas L2) {
  L2 = L1;
}

Y desde el procedimiento agregar() se haria el llamado a este procidimiento asi:

ListaPersonas.copyReference(aux,this);


Muy probablemente no se pueda... Pero no se me ocurre que otra cosa hacer para modificar la referencia del nodo inicial de la lista.

Gracias como siempre!

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Kyshuo Ayame
Moderador Global


Registrado: 07 Ene 2011
Mensajes: 1044

Mensaje Publicado: Martes 18 Ago 2015 16:14

Título del mensaje: Lección 73: Actualizando Nomina Personas - Clases Internas

Responder citando

Estimado jlords, tuve que repasar toda la lección para recordar cuál fue mi maldad al proponer ese ejercicio. Bien, primero que nada te aclaro lo siguiente:

jlords escribió:
Como bien dices en la leccion no podemos proponer algo como this = algo (del tipo ListaPersonas en este caso) y asumo que tampoco se puede al contrario: algo = this.


Asumir algo en programación no hace más que estancarte. Ante una duda tienes dos opciones: haces una prueba tu mismo o lo buscas en internet (o un libro).

En Java no puedes hacer this=algo pero sí puedes hacer algo=this.

El problema principal radica en cómo definas tú el modelo para una lista vacía, lo cual definirá luego cómo insertas al inicio.

Una forma para definir una lista vacía puede ser que ambos punteros (persona y siguiente sean null). En esa situación no hay lista, está vacía. En este modelo, entonces si persona no es NULL pero siguiente sí lo es tenemos una lista con un único nodo. Debes tener presente que el caso inverso no debería darse, es decir que siguiente no sea NULL pero persona sí; eso definiría un nodo vacío pero que tiene un siguiente.

De este modo la operación de iniciar la lista ante una primera inserción es fácil. Insertar al final también lo es. Entre medio ya se complica un poco y pues al inicio, cuando ya hay nodos, puede ser algo difícil.

Te dejo con esta info y espero tus comentarios.

Saludos.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Alfonso Lara
Usuario Iniciado


Registrado: 07 May 2019
Mensajes: 13

Mensaje Publicado: Lunes 20 May 2019 05:08

Título del mensaje: Lección 73: Actualizando Nomina Personas - Clases Internas

Responder citando

He terminado por fin ( cuánto sudor ) el ejercicio de implementar TAD ListaPersonas sin clase interna. Ha resultado fascinante y muy provechoso para mi.

Para realizarlo primero ideé una lista encadenada de números enteros que definí así:
Código:
public class ListaInt {
   
    int numero;
    ListaInt siguiente;

Esto me ayudó muchísimo, porque recordé mucho el comportamiento de las listas encadenadas. De trabajar esa lista pasé a hacer otra pero esta vez con Personas con la representación que propone el ejercicio. Todo resultó de maravilla ya que dividí todo lo que pude las operaciones, por ejemplo, declaré privadas a la clase ListaPersonas las siguientes operaciones:
Código:

private void InsertarAlInicio ( Persona p)
private void InsertarEnMedio ( Persona p)
private void InsertarAlFinal ( Persona p)

Y luego sí hice pública la siguiente operación que se apoya en las anteriores, facilitando la lectura de su propio método:
Código:

public void Insertar ( Persona p)

Esta operación recibe un objeto Persona y lo agrega a una lista ordenada de acuerdo al documento sin importar si dicha lista es vacía o contiene elementos.
Excelente ejercicio, sigo con la lección el apartado de clase interna.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Alfonso Lara
Usuario Iniciado


Registrado: 07 May 2019
Mensajes: 13

Mensaje Publicado: Martes 21 May 2019 01:44

Título del mensaje: Lección 73: Actualizando Nomina Personas - Clases Internas

Responder citando

Profesor Kyshuo, tengo una duda que me ha surgido. Quisiera importar a un nuevo proyecto la clase Persona, la cual está guardada originalmente en un proyecto distinto llamado DatosPersonas, el IDE creó una "carpeta" llamada <default package> que guarda esta clase requerida. El nuevo proyecto que requiere de la clase Personas se llama ListaPersonas_2. ¿Qué debo hacer para realizar esa importación? La salida fácil es hacer una copia manual del código fuente de Personas en el nuevo proyecto, pero quisiera importarla sin hacer copia manual. Gracias por su atención, muy amable profesor.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Kyshuo Ayame
Moderador Global


Registrado: 07 Ene 2011
Mensajes: 1044

Mensaje Publicado: Jueves 23 May 2019 14:21

Título del mensaje: Lección 73: Actualizando Nomina Personas - Clases Internas

Responder citando

Simplemente copia el archivo de la clase a la carpeta de tu nuevo proyecto. NetBeans la detectará automáticamente y aparecerá en la lista.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Responder al Tema Ir a página Anterior12
Mostrar mensajes anteriores:   
Ir a:  
Todas las horas están en GMT + 2 Horas

Temas relacionados

Tema Autor Foros Respuestas Publicado
El foro no contiene ningún mensaje nuevo

clases y punteros

laephy C, C#, Visual C++ 0 Jueves 28 Feb 2019 12:05 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Dudas al instanciar clases heredadas

MMCA Java 0 Viernes 26 Ene 2018 21:34 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Clases

angeljonh C, C#, Visual C++ 2 Miércoles 30 Ago 2017 06:20 Ver último mensaje
El tema está bloqueado: no pueden editarse ni agregar mensajes.

Busco personas para un proyecto de Facebook

Andres Gonzales Bolsa de trabajo 0 Domingo 19 Mar 2017 22:35 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Uso de clases (no managed beans) en Spring

sapales Java Web 0 Lunes 13 Abr 2015 14:55 Ver último mensaje
Panel de Control
No puede crear mensajes, No puede responder temas, No puede editar sus mensajes, No puede borrar sus mensajes, No puede votar en encuestas,