Hola, bienvenidos a este nuevo video. Ahora, veremos la codificación de los métodos "get". Estos métodos regresan el valor de cada uno de los atributos, por ejemplo, el del atributo "activas" es así. Tenemos que regresar el valor o estado del atributo "activas", en lugar de regresar "0", así que sustituimos el "0" con "activas". Hacemos lo mismo con "getANHO", sustituimos a "0" con el identificador del atributo "ANHO". Ahora, con "getNOMBRE", sustituimos "null" por el identificador del atributo nombre. Ahora, es el turno de "getPermitidas". Por último, en esta categoría de métodos nos queda "getTIPO_DISCO", sustituimos nuevamente el "0" por el nombre del atributo, "TIPO_DISCO". Compilamos y vemos que no hay errores de compilación. Ahora, veremos la codificación de los métodos "set", los cuales actualizan o mutan el valor de cada uno de los atributos. Como los únicos atributos que pueden cambiar son, "activas" y "permitidas", sólo tenemos dichos métodos. Para "setActivas" no teníamos código porque no regresa ningún valor. Asignamos al atributo "activas" el valor del parámetro "newActivas", pero, ya que tenemos el método que verifica que el valor está en rangos, mejor asignamos el valor verificado y que sea menor que el número que tiene en "permitidas". Similarmente para el método "setPermitidas", asignamos al atributo "permitidas" el valor del parámetro, que se llama "permisos", pero verificando que el valor que asignemos sea correcto. Compilamos y todo sigue bien. Ahora, veremos los métodos de implementación, los cuales te dan servicios del objeto, pero que no son constructores "get" ni "set". Empiezas con el método "copiaDisco", que es el primero alfabéticamente. Su documentación dice que debe regresar un disco nuevo con los mismos valores que el disco que lo invoca, excepto por "activas" que debe empezar en "0". Cómo tienes que construir un disco nuevo, vas a regresar directamente el resultado de un constructor de disco. Invocas al constructor de la clase disco que recibe cuatro argumentos, le pasas como argumentos los cuatro valores de los atributos del disco actual: "TIPO_DISCO", "NOMBRE", "ANHO" y "permitidas". Recuerda que "Java" pasa sus argumentos por valor, obtiene los valores antes de entrar al constructor, por lo que usa los del disco con el que se invocó el método. Como "Disco" implementa a "ServiciosDisco", el compilador no protesta. Codificas ahora el método "muestraDisco" que recibe un "String", tienes que regresar una cadena donde aparezca cada uno de los atributos en su propio renglón, con su descripción. Empiezas con declarar una cadena para ir acumulando ahí lo que vamos a escribir, inicializandola con el encabezado, pero, verificando con tu método "checaCadena" que no te haya pasado el usuario una referencia nula, que es una variable tipo de "String" no inicializada. Le agregamos a esta inicialización dos cambios de línea para la impresión, para subrayar el encabezado y separarlo de los campos. A continuación, le agregamos la etiqueta para el "TIPO_DISCO", pero, como los números uno, dos o tres, no le dicen nada al usuario, usaremos nuevamente una expresión condicional. Agregamos ahora el título para el nombre, dependiendo del tipo de disco y a continuación el valor de "NOMBRE". Para "permitidas" y "activas" es sencillo escribir su título y su valor. Regresas la cadena que armaste y con esto terminas el método "muestraDisco". Seguimos con la codificación del método "terminaTransmision". Como su documentación dice, este método debe regresar "true" si había transmisiones que terminar y "false" si no las había. Antes de salir, tienes que decrementar en uno a las "Transmisiones activas". Lo primero es verificar si este objeto con el que se invocó tiene "Transmisiones activas", asignando esto a una variable local booleana. Después, si "hayActivas" es verdadero, restas uno usando la autoasignación con resta. Como el operador de expresión condicional tiene mayor precedencia que cualquiera de las asignaciones, elige "1" o "0" para restar. Por último, regresas el valor de "hayActivas" y terminas la codificación de este método. Seguimos con la codificación del método "toString", la documentación dice que se construye una cadena en la que cada campo debe ocupar un número de lugares fijo. Estos números de lugares los puedes declarar como constantes simbólicas de la clase. Decláralas en la clase con nombres mnemónicos que digan de qué se trata. Para que cada valor ocupen los lugares que requieres, deberás formatearlo, debes meter espacios a la derecha para cadenas y espacios o ceros a la izquierda para números. Necesitas dos funciones auxiliares de la clase que hagan esto, y que son "editaNum" y "editaCad" con los siguientes encabezados. Primero veremos la codificación de formato para números, necesitas una cadena de espacios para usarlos para rellenar, y la declaras como constante simbólica de la clase, junto con las que ya declaraste. Harás primero "editaNum", los nombres de los parámetros son mnemónicos. Tomas la cadena de espacios y la concatenas por la izquierda con el valor, asignándola a una variable. Tomas la subcadena de los últimos lugares usando las funciones "length" y "substring", de la clase "String". El método "substring" de un parámetro entero de la clase "String" toma la subcadena que empieza en el entero e incluye hasta el final de la cadena. El método "length", de esta misma clase, regresa el tamaño de la cadena. Regresas la cadena construida. Posteriormente, vemos la codificación de formato para cadenas. La función "editaCad" es casi idéntica a "editaNum", en este caso, los espacios se pegan por la derecha. Se toman los primeros lugares con el método "substring" que recibe dos enteros, "desde" y "hasta", y da la subcadena que empieza en la posición "desde" y termina en la posición anterior a "hasta". Toma la cadena original que empieza en la posición "cero" y los espacios agregados para tener lugares en el resultado. Regresas la cadena construida. Ya tienes todo lo que necesitas para codificar rápidamente el método "toString". Tienes ya declaradas las constantes simbólicas de clase que requieres. Primero, llamamos a "editaNum" con el "TIPO_DISCO" y su número de espacios. Le pegamos "editaCad" del "NOMBRE" de disco. "EditaNum", con el "ANHO", las transmisiones "permitidas". Y al final, las transmisiones "activas". Por último, regresamos esa cadena como valor de la función. Compilamos. Nos marcará un error ya que al tratar de comparar "TIPO_DISCO", que es de tipo "short", con la cadena "CD", se debió comparar con la constante simbólica "CD", por lo que debemos eliminar las comillas. Compilamos y fue exitosa la compilación. Te veo en el siguiente video, no te lo puedes perder.