Las Clases Anidadas o Clases Helper son clases dentro de otras clases que agrupamos por su lógica y/o características en común.
Podemos encontrar clases estáticas anidadas, clases internas que son locales a un método o clases internas anónimas. Las clases anidadas pueden llamar a cualquier tipo de elemento o método de nuestras clases.
Las Clases Estáticas no necesitan ser instanciadas para poder ser llamadas y ejecutadas, aunque debes recordar que solo permiten llamar a los métodos estáticos de sus clases padre.
El problema del vídeo es que uno se pierde cuando Ann empieza con colecciones (ArrayList) y no se entiende porque lo utiliza sin explicación previa.
Una colección es una especie de arrays de tamaño dinámico, lo que almacena realmente es un conjunto de objetos (Clases Wrapper, ver tema anterior) y utiliza el paquete java.util. Hay varios tipos de colecciones, pero aquí en el video se usa únicamente la colección de tipo list, y a su vez, un list tiene 3 tipos de constructores, pero únicamente se utiliza el constructor ArrayList.
EL ArrayList también utiliza índices. Este se instancia así:
Y se le agregan datos de la siguiente manera:
Recuerda que almacenan objetos (Clases Wrapper), es por esto que pueden ser de varios tipos de variables.
En el video Ann utiliza menor que/mayor que "<>" para especificarle al ArrayList que tipo de dato quiere que se agregue en este, Ann agrega la clase static AvaiableAppointment dentro de los símbolos para que el ArrayList solo acepte los tipos de datos que se encuentran dentro de la clase (ósea date, time).
Este tiene un encapsulamiento por default porque se utiliza al nivel de la clase.
Seguido esto, crea el método addAvaiableAddpointment para que este agregue los datos en la colección:
Entonces cada vez que agregue una nueva cita va a estar declarando un nuevo objeto con estos tipos de datos (date y time).
Por ultimo crea otro ArrayList de tipo público para que este devuelva lo que tiene almacenado, un get:
"Ann agrega la clase static AvaiableAppointment dentro de los símbolos para que el ArrayList solo acepte los tipos de datos que se encuentran dentro de la clase (ósea date, time)."
Un pequeño error que puede confundir, en realidad la ArrayList solo aceptará datos del tipo AvaiableAppointment (si esta clase dentro incluye datos del tipo date y time).
Cuando imprime las fechas es porque usa los métodos get que están dentro de la clase anidada AvaiableAppointment.
Si alguien más se da de cara con los ArrayList como me paso a mí, aquí les dejo un pequeño resumen.
Básicamente:
La clase ArrayList permite almacenar datos en memoria de forma similar a los Arrays con la ventaja de que el numero de elementos que almacena, es dinámico, es decir, que no es necesario declarar su tamaño.
<code>// Declaración de un ArrayList de "String". Puede ser de cualquier otro Elemento u Objeto (float, Boolean, Object, ...)ArrayList<String> nombreArrayList =newArrayList<String>();
Operaciones disponibles:
<code>// add// Añade el elemento al ArrayListnombreArrayList.add("Elemento");//size// Devuelve el numero de elementos del ArrayListnombreArrayList.size();//get// Devuelve el elemento que esta en la posición '2' del ArrayListnombreArrayList.get(2);//set//Permite sustituir un elemento por otro dentro de un ArrayList.nombre
nombreArrayList.set(index , element)//index, posición que ocupa el elemento a sustituir.//element, nuevo elemento a insertar en el ArrayList.//remove// Borra el elemento de la posición '5' del ArrayList nombreArrayList.remove(5);
Obviamente hay mas comandos pero, estos son los más comunes.
Espero que esto le sirva a alguien.
Me parece una clase mala, y es algo con lo que suelo encontrarme en los cursos, contenido del cual no se explica porque, aun tomando los cursos anteriores recomendados, no se si les da pereza hacerlo mejor o tomarse el tiempo de revisar el contenido que publican, la mayoría de vídeos están bien pero no entiendo porque de repente les da por crear este tipo de contenido, pienso que se nota mucho la diferencia de lo bien que estaban las clases anteriores a esta en concreto
Tienes que entender que a medida que se van aprendiendo nuevos temas ya no se pueden detener a explicar todo a detalle, porque se supone que tú no solo estás viendo los vídeos, sino que practicas y te retas a consolidar lo visto en las clases con investigación en internet, además de llevar a cabo proyectos retadores, por lo que no deberías solo decir que fue una "clase mala". A mí también me pasaba que no entendía ciertas cosas al principio, pero el proceso doloroso de investigar y practicar va dando sus frutos y te prepara para aprender nuevos conceptos un poco más rápido. Ánimo, no te desanimes, sigue mi consejo :)
Hinder, te doy total razon respecto a no quedarse solo con el contenido de la clase y profundizar por cuenta propia, de otra forma no aprenderas realmente. Pero si concuerdo tambien con Jose en que esta clase fue menos detallada respecto al ArrayList, al menos habria que colocar en la seccion de "archivos y enlaces" algun recurso que lo explique. Y si, podria googlear y me aparecen mil recursos y explicaciones, pero si me venden la idea de que platzi es el lugar donde aprendere mas rapido entonces espero que me den la facilidad para no tener que salir de la plataforma a indagar lo que les falto explicar.
PD: Anahi es excelente profesora. Solo falto ese detallito en esta clase
Hasta acá, el curso iba súper bien. Pero este video deja demasiadas dudas, agregar el tema de los array solo se presta para confusiones. Ademas, el código se volvió un tanto desordenado, Falta el diagrama de clases.
Tener en cuenta algo muy importante que menciona Annahí.
Las razón de las clases anidadas es porque obedecen a una lógica de negocio.
Cuando empieces a detectar que necesita un atributo cuya estructura de datos empieza a tener muchos datos. Entonces se debe pensar si es necesario que sea una clase anidada o pueda ser una clase independiente.
Tuve que ver la clase 2 veces con un lapso de tiempo de 24 horas para poder entender el concepto y buscar que son colecciones. Después miro y resulta que es un tema que dan mas adelante.
No entendi muy bien esta clase, vengo siguiendo en orden los cursos previos para llegar hasta aqui, pero cuando empezaste a mencionar los Arrays pero como "colecciones" me perdi.
Puntualmente no entendi como funciona ese arreglo, fue muy sesgado ese punto.
No se si es a lo que te refieres, me parece que en el curso básico explican los arrays, donde tienes n "celdas" contiguas en la memoria, suponiendo AvailableAppointments[10], puedes agregar 10 elementos de 0 a 9, en este caso puedes verlo en lugar de un array como un ArrayList, donde por debajo funciona igual, tienes un array pero básicamente es dinámico, si te fijas no estableces una cantidad de celdas.
Para agregar un elemento en un arrray seria algo así:
availableAppointments[lastElement++] = newAppointment.
Lo que en un ArrayList es el método Add:
availableAppointments.add(newAppointment);
Yo lo entiendo del siguiente modo tenemos la clase doctor, el doctor es el único capaz de crear citas por lo tanto la clase citas la crearemos dentro de la clase doctor, si por ejemplo los pacientes pudieran también crear citas ya no tendría sentido crear la clase anidada dentro del doctor si no que creariamos una clase aparte llamada citas la cual la instanciaríamos dentro de la clase doctor y de la clase paciente, por que los 2 serian capaces de crear citas.
En las funciones siempre se indica el tipo de dato que retornara
en este caso nuestro método retorna un ArrayList pero de tipo
availableAppoitment es por ello que debe indicarse
entre < tipo de dato > el tipo de dato que es.