RA06 - Python
|
|
Título del Test:
![]() RA06 - Python Descripción: Parte 2 |



| Comentarios |
|---|
NO HAY REGISTROS |
|
¿Según la explicación del tema, cuál es el objetivo principal de aplicar encapsulación en una clase como CuentaBancaria?. Permitir que cualquier código externo modifique libremente el saldo interno sin ninguna restricción explícita. Impedir estados inválidos, concentrar la validación y poder cambiar la implementación sin romper a los usuarios. Usar exclusivamente variables globales compartidas para todos los objetos y así simplificar la lógica del programa. Evitar por completo el uso de métodos y trabajar solo con atributos simples accesibles desde cualquier parte del código. En las convenciones de visibilidad de Python, ¿qué intenta comunicar un atributo cuyo nombre comienza con un solo guion bajo, como _interno en la clase Caja?. Que el atributo es estrictamente privado y Python impide cualquier acceso incluso desde métodos de la misma clase. Que el atributo está pensado para ser importado automáticamente al usar from modulo import * sin restricciones adicionales. Que el atributo forma parte de la parte interna del objeto y no debería usarse desde fuera de la clase. Que el atributo será renombrado automáticamente usando name mangling y quedará inaccesible desde cualquier código externo. En el ejemplo de Caja, ¿qué efecto práctico tiene definir un atributo con doble guion bajo inicial, como __secreto, respecto a los demás atributos de la clase?. Produce que el atributo solo exista en tiempo de compilación y desaparezca en cuanto se crea la primera instancia. Hace que el atributo se convierta en una constante global que puede usarse sin prefijo desde cualquier módulo del programa. Hace que Python renombre internamente el atributo usando name mangling, dificultando accesos accidentales desde fuera. Impide de forma absoluta cualquier acceso al atributo incluso escribiendo el nombre mangled completo en el código de usuario. En la clase Temperatura, ¿cuál es la ventaja principal de exponer celsius mediante una propiedad con @property y un setter en lugar de un atributo público simple?. Permitir que la lectura y escritura de celsius parezca acceso a un campo, pero pase por lógica de validación interna. Obligar al usuario a cambiar todas las llamadas existentes para usar métodos nuevos y así evitar confusiones con el nombre. Garantizar que el valor de celsius sea siempre un entero exacto y rechazar automáticamente cualquier número en coma flotante. Impedir que el atributo interno cambie nunca y forzar que la temperatura sea completamente inmutable durante toda la ejecuciónImpedir que el atributo interno cambie nunca y forzar que la temperatura sea completamente inmutable durante toda la ejecución. En el diseño de Rectangulo, ¿qué expresa el hecho de que la propiedad area solo tenga getter y no defina un setter asociado?. Que el atributo area se puede cambiar libremente, pero solo desde dentro de la clase, nunca desde código externo al módulo. Que el área se calcula a partir de otros atributos y es de solo lectura, por lo que no debe asignarse directamente desde fuera. Que el valor de area se guarda físicamente en memoria y debe reiniciarse manualmente cuando cambian ancho y alto. Que la clase Rectangulo no necesita validar nada y permite asignar cualquier valor a ancho y alto sin restricciones de signo. En la versión encapsulada de CuentaBancaria, donde _saldo es interno y las operaciones pasan por ingresar y retirar, ¿qué invariante se intenta proteger principalmente?. Que el número de cuenta asociado al titular cambie automáticamente en cada ingreso para aumentar la seguridad de los datos. Que la divisa utilizada en todos los movimientos sea la misma, independientemente del país desde el que se haga la operación. Que el saldo nunca se vuelva inconsistente, evitando ingresos negativos y retiradas que dejen la cuenta por debajo de cero. Que cada cuenta pueda compartir el mismo saldo con otras instancias, de forma que todas reflejen siempre la misma cantidad. En la clase Persona, donde se usa una propiedad nombre en lugar de get_nombre() y set_nombre(), ¿qué ventaja de estilo pythonic se persigue con este diseño?. Obligar al programador a escribir siempre paréntesis al leer el nombre para recordar que se trata de un método invocable. Evitar que el atributo pueda cambiarse nunca y forzar que el nombre quede fijado definitivamente desde el constructor inicial. Garantizar que el atributo pueda ser usado únicamente dentro de la propia clase y resulte invisible para cualquier código exterior. Mantener una sintaxis natural de acceso (p.nombre) mientras se aplica validación y limpieza del dato internamente al asignar. En el ejemplo de la clase Usuario que guarda un email y un _hash_pwd, ¿cómo se aplica la idea de encapsulación en el método __repr__ definido?. Mostrando en la representación únicamente el correo electrónico y ocultando la información sensible asociada a la contraseña cifrada. Imprimiendo todos los atributos internos sin filtros para que cualquier desarrollador pueda ver siempre la información completa del objeto. Incluyendo una representación abreviada del hash de la contraseña para que el usuario pueda recordarlo fácilmente si lo olvida. Generando un identificador numérico aleatorio que sobrescribe todos los atributos originales y destruye los datos almacenados en memoria. En el diseño con composición, donde Cliente contiene internamente un objeto Direccion y expone una propiedad codigo_postal, ¿qué beneficio de encapsulación se obtiene?. Permitir que cualquier código externo modifique directamente la calle, el código postal y todos los campos de Direccion sin restricciones. Exponer solo la información relevante como el código postal mientras se ocultan los detalles internos de cómo se almacena la dirección. Hacer que el objeto Cliente se comporte exactamente igual que Direccion, heredando automáticamente sus métodos y atributos internos. Impedir por completo que se pueda leer ningún dato de la dirección, obligando a trabajar exclusivamente con identificadores numéricos. En la clase PuntoLigero, donde se declara __slots__ = ("x", "y"), ¿qué efecto relacionado con la encapsulación y la eficiencia se consigue principalmente?. Permitir añadir atributos nuevos libremente en tiempo de ejecución para extender el objeto con cualquier campo adicional que haga falta. Evitar que la clase tenga métodos de instancia y obligar a que toda la lógica se implemente como funciones externas al objeto. Restringir los atributos permitidos y ahorrar memoria al crear muchas instancias, impidiendo que aparezcan campos inesperados como z. Forzar que todos los atributos se almacenen en un diccionario interno dinámico para poder inspeccionarlos con más facilidad. |




