0% encontró este documento útil (0 votos)
13 vistas10 páginas

Control de Calidad Pensa

Cargado por

Jordi Raymundo
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
13 vistas10 páginas

Control de Calidad Pensa

Cargado por

Jordi Raymundo
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Universidad Rafael Landívar - Campus San

Alberto Hurtado, S.J. de Quetzaltenango


Curso: Pensamiento Computacional
Docente: Ing. Manuel Rojas
Actividad 41: Auditoría de Calidad - Mejorando una Solución
Integrantes:
Nombre: Michael Paolo Santizo Nowell
Carné: 1623225
Nombre: Juan Pedro Colomo Gonzales
Carné: 1653625
Nombre: Jordi Raymundo Racancoj
Carné: 1648324

1. Análisis del código original


Revisamos un sistema funcional que representa un entorno académico con estudiantes,
profesores, cursos y una universidad. Aunque el sistema ejecuta tareas básicas,
presenta algunos errores de diseño y la lógica que afectan su calidad y
profesionalismo.

2. Clasificación de errores detectados


# Error detectado Tipo de error Explicación
1 Atributos públicos Diseño Rompe el principio
en todas las clases de
encapsulamiento
de POO.
2 Falta de validación Lógico Permite duplicados
en inscripción a y sobrecupo.
cursos
3 Relación uno a uno Diseño Limita la
entre profesor y funcionalidad del
curso sistema.
4 Repetición de Calidad Dificulta el
código en métodos mantenimiento del
de impresión sistema.
5 Variables con Legibilidad Complican la
nombres poco lectura del código.
descriptivos (`c`,
`e`, `p`)
6 Clases con Diseño No siguen el
responsabilidades principio de
mezcladas responsabilidad
única.
3. Justificación de mejoras
Estas mejoras aumentan la calidad del sistema porque:
- Protegen los datos (encapsulamiento).
- Aseguran el comportamiento correcto (validaciones lógicas).
- Hacen el sistema escalable (múltiples cursos/profesores).
- Facilitan el mantenimiento y la lectura (legibilidad y modularidad).

4. Conclusión
Las mejoras propuestas ayudan a que el código básico se transforme en una solución
más profesional y alineada con los principios de la programación orientada a objetos.

5. Códigos
CODIGO CON ERRORES

class Estudiante:

def __init__(self, nombre, edad, carnet):

# Atributos públicos violan el principio de encapsulamiento.

self.nombre = nombre

self.edad = edad

self.carnet = carnet

self.cursos = []

def agregar_curso(self, curso):

# No valida si el curso ya está en la lista puede duplicarse.

self.cursos.append(curso)

def mostrar_info(self):

# Código repetido similar a mostrar_detalles en Curso.

print("Nombre:", self.nombre)

print("Edad:", self.edad)
print("Carnet:", self.carnet)

print("Cursos inscritos:")

for c in self.cursos:

print(c.nombre)

class Profesor:

def __init__(self, nombre, especialidad):

# Atributos públicos otra vez.

self.nombre = nombre

self.especialidad = especialidad

def asignar_curso(self, curso):

# Límite artificial: un profesor solo puede tener un curso.

self.curso = curso # solo un curso

class Curso:

def __init__(self, nombre, codigo, cupo):

# Atributos públicos, otra vez sin encapsulamiento.

self.nombre = nombre

self.codigo = codigo

self.cupo = cupo

self.estudiantes = []

self.profesor = None

def agregar_estudiante(self, estudiante):

# No valida cupo máximo.


# No valida si el estudiante ya está inscrito.

self.estudiantes.append(estudiante)

def asignar_profesor(self, profesor):

self.profesor = profesor

def mostrar_detalles(self):

print("Curso:", self.nombre)

print("Código:", self.codigo)

print("Cupo:", self.cupo)

print("Estudiantes:")

for e in self.estudiantes:

# Variable poco descriptiva ("e").

print(e.nombre)

if self.profesor:

print("Profesor:", self.profesor.nombre)

else:

print("Sin profesor asignado")

class Universidad:

def __init__(self, nombre):

# Atributos públicos sin encapsular.

self.nombre = nombre

self.estudiantes = []

self.profesores = []

self.cursos = []
def agregar_estudiante(self, estudiante):

# No valida duplicados.

self.estudiantes.append(estudiante)

def agregar_profesor(self, profesor):

self.profesores.append(profesor)

def agregar_curso(self, curso):

self.cursos.append(curso)

def mostrar_todo(self):

print("Universidad:", self.nombre)

print("Profesores:")

for p in self.profesores:

# Variable poco descriptiva ("p").

print(p.nombre)

print("Estudiantes:")

for e in self.estudiantes:

print(e.nombre)

print("Cursos:")

for c in self.cursos:

print(c.nombre)
CODIGO CORREGIDO

#Codigo Corregido

class Estudiante:

def __init__(self, nombre, edad, carnet):

self.__nombre = nombre

self.__edad = edad

self.__carnet = carnet

self.__cursos = []

def agregar_curso(self, curso):

if curso not in self.__cursos:

self.__cursos.append(curso)

def get_nombre(self):

return self.__nombre

def mostrar_info(self):

print(f"Nombre: {self.__nombre}")

print(f"Edad: {self.__edad}")

print(f"Carnet: {self.__carnet}")

print("Cursos inscritos:")

for curso in self.__cursos:

print(f" - {curso.get_nombre()}")

class Profesor:
def __init__(self, nombre, especialidad):

self.__nombre = nombre

self.__especialidad = especialidad

self.__cursos = []

def asignar_curso(self, curso):

if curso not in self.__cursos:

self.__cursos.append(curso)

def get_nombre(self):

return self.__nombre

def mostrar_cursos(self):

print(f"Profesor: {self.__nombre}")

print("Cursos asignados:")

for curso in self.__cursos:

print(f" - {curso.get_nombre()}")

class Curso:

def __init__(self, nombre, codigo, cupo):

self.__nombre = nombre

self.__codigo = codigo

self.__cupo = cupo

self.__estudiantes = []

self.__profesor = None
def agregar_estudiante(self, estudiante):

if estudiante not in self.__estudiantes:

if len(self.__estudiantes) < self.__cupo:

self.__estudiantes.append(estudiante)

estudiante.agregar_curso(self)

else:

print(f"No hay cupo disponible para el curso {self.__nombre}")

else:

print(f"{estudiante.get_nombre()} ya está inscrito en {self.__nombre}")

def asignar_profesor(self, profesor):

self.__profesor = profesor

profesor.asignar_curso(self)

def get_nombre(self):

return self.__nombre

def mostrar_detalles(self):

print(f"Curso: {self.__nombre}")

print(f"Código: {self.__codigo}")

print(f"Cupo disponible: {self.__cupo - len(self.__estudiantes)}")

print("Estudiantes inscritos:")

for estudiante in self.__estudiantes:

print(f" - {estudiante.get_nombre()}")

if self.__profesor:

print(f"Profesor: {self.__profesor.get_nombre()}")
else:

print("Sin profesor asignado")

class Universidad:

def __init__(self, nombre):

self.__nombre = nombre

self.__estudiantes = []

self.__profesores = []

self.__cursos = []

def agregar_estudiante(self, estudiante):

if estudiante not in self.__estudiantes:

self.__estudiantes.append(estudiante)

def agregar_profesor(self, profesor):

if profesor not in self.__profesores:

self.__profesores.append(profesor)

def agregar_curso(self, curso):

if curso not in self.__cursos:

self.__cursos.append(curso)

def mostrar_todo(self):

print(f"Universidad: {self.__nombre}")

print("\nProfesores:")

for profesor in self.__profesores:


print(f" - {profesor.get_nombre()}")

print("\nEstudiantes:")

for estudiante in self.__estudiantes:

print(f" - {estudiante.get_nombre()}")

print("\nCursos:")

for curso in self.__cursos:

print(f" - {curso.get_nombre()}")

También podría gustarte