Académique Documents
Professionnel Documents
Culture Documents
Febrero 2011
Agenda
• Código Duplicado
• Métodos grandes
• Clases grandes
• Características de la “envidia”
Agenda
• Sentencias Switch
• Campos Temporales
• Encadenamientos de mensajes
Agenda
• Clases alternativas con diferentes
interfaces
hábitos de codificación
(bad smells),
conociendo así los
errores que
generalmente se
cometen al desarrollar
código.
Criterios de Evaluación
• 70% Examen práctico
Bad Smells
que el código sea más legible
y por ende más mantenible.
Badsmell
mal.
• La codificación deficiente
trae consigo una serie de
características que la
evidencian rápidamente.
• Los “malos olores” son visto
como signos de debilidad del
código.
Badsmell
• En general, para cada “mal
olor” existe una serie de
refactorings propuesto para
solucionarlos.
Malos Olores
BAD SMELL REFACTORING PROPUESTO
CODIGO DUPLICADO EXTRAER EL MÉTODO
SUBIR VARIABLES
SUSTITUIR EL ALGORITMO
Código Duplicado
métodos de la misma clase.
Código Duplicado
mismo con diferente
algoritmo.
Código Duplicado
da por muchas razones:
malos hábitos de
programación, presión del
tiempo de desarrollo, etc.
• La decisión de reestructurar
código depende de los
desarrolladores.
• Aunque no está enfocado
directamente con la
codificación, es el principal mal
Mal Diseño
olor en la implementación del
software.
Mal Diseño
algunos indicadores de
malos olores y poder
reestructurarlos antes de
codificarlos.
• Existirán indicadores que no
son muy visibles en el
modelado como los métodos
Mal Diseño
largos o el código duplicado.
Práctica 3
• Se codifican las pruebas
unitarias y hasta que no se
pasen al 100% el programa no
puede terminar.
Práctica 3
• Los malos olores también
Código Duplicado
pueden ser determinados a
través de herramientas
automatizadas, generalmente
conocidos como analizadores
de códigos.
Patrones de Diseño
principio no se tendría que
reestructurar el software?
Patrones de Diseño
evolución en abstracción y
reutilización del software.
Patrones de Diseño
permita que un momento
dado uno y solo un objeto
pueda estar en ejecución (no
se permiten dos o más
ejemplares).
• La utilización de patrones
puede resolver este
problema. Caso de ejemplo:
Singleton
• Problema: se admite
exactamente una instancia
de una clase. Los objetos
Singleton
Métodos grandes
• El número de líneas puede ser
variable pero se recomienda
que se pueda leer en una sola
pantalla.
Métodos grandes
• Extract Method es el
refactoring más popular para
malos olores como código
duplicado y métodos grandes
(casi el 99% de la solución es
este refactoring)
Extract Method
• El nuevo método que se ha
extraído contiene el código
seleccionado y el código
seleccionado del miembro
existente, se reemplaza por
una llamada al nuevo método.
Extract Method
Extract Method
Clases Grandes
Clases Grandes
• En la gran mayoría de las
ocasiones, una clase grande es
sinónimo de código duplicado o
que la clase está realizando más
acciones de las debidas.
Envidia
entidad se le denomina
envidia.
Envidia
• La solución generalmente
implica utilizar move method
cuando todo el método es
envidioso.
• Si una sola parte de un
método o clase es envidiosa
se debe utilizar extract
method.
Envidia
• Si se presenta envidia con
muchas entidades se deberá
escoger aquella que sea la
más fuerte para colocar en
ella el método.
• Actividad: del código de la
criba se deberá reestructurar
de la siguiente forma:
Actividad
obtenerCandidatosNoEliminados
();
• La “cirugía de escopeta” se da
cuando al modificar una clase
se tienen que modificar otras
clases en forma de cadena
Jerarquía de Herencias
• Para solucionar este mal olor
se debe utilizar refactroings
como Move Method o Move
fields para quitar las
referencias de la otra subclase
creada.
Jerarquía de Herencias
Reingeniería de Software
• La refactorización es parte
importante del proceso de
reingeniería.
• INGENIERÍA INVERSA
• Reestructuración de Códigos
• Reestructuración de Datos
• Ingeniería directa
Ingeniería Inversa
• Se aplica para obtener un modelo
detallado de análisis, ingeniería de
requerimientos, diseño y en algunos
casos implementación teniendo una
solución.
clases:
• Clases
Tec. de Ofuscacion
• Variables
Tec de Ofuscación
• Variables
Tec. de Ofuscación
• Sobre el flujo del programa
Tec. de Ofuscaciòn
• Sobre el flujo del programa
Tec. de Ofuscación
• Sobre el flujo del programa
Tec. Ofuscación
• Paralelización
• Paralelización
Tec. de Ofuscación
• Paralelización
Tec. de Ofuscación
• Ciclos
Tec. de Ofuscación
• Ciclos
Tec. de Ofuscación
Téc. De Ofuscación
• Lo más adecuado es realizar
la ofuscación sobre el código
objeto generado sin alterar
el original.
Encadenamiento de Mensajes
• Aparentemente se reduce el
manejo de objetos temporales
pero en realidad se está
realizando mucho
acoplamiento.
Cadenas de Mensajes
• Se pueden presentar el
problema de “middle man” al
tener muchos intermediarios.
• La solución es en muchos
casos aplicar Hide Delegate,
Extract and Move Method.
Cadena de Mensajes
Clases Alternativas con
Distintos Mensajes
• Se presenta cuando se
Clases Alternativas
• Generalmente se debe de
renombrar el método, y en
otros casos renombrarlo.
Librerías de Clases Incompletas
Librerías de Clases Incompletas
• Las bibliotecas de clases aunque
promueven el reuso de software, sino están
bien elaboradas ocasionan muchos
problemas.
• Se deberá documentar la
biblioteca con comentarios
JavaDoc.
Actividad
• Las operaciones a realizar son:
• Suma
• Resta
• Igualdad
• Multiplicación por un Escalar
• Producto punto
Suma
Resta
Producto Punto
Producto Vectorial
1. Infladores
• Lista de parámetros larga
1. Infladores
• Sentencias switch
• Campo temporal
• Clases alternas con distintas
interfaces
• Rechazo del legado: cuando
una clase se reusa a utilizar su
herencia.
2. Abusadores de POO
• Cambio divergente: cuando se
implementan en las clases
funcionalidades diferentes al
contexto de la clase
• Cirugía de escopeta
• Jerarquía de herencias
paralelas
3. Impedidores de cambio
• Clases holgazanas
• Clases de datos: cuando una
clase sólo almacena datos
pero no tiene métodos para
acceder a ellos
• Código duplicado
4. Los prescindibles
• Código muerto: código legado
que ya no se utiliza en la
versión actual del código.
• Generalización especulativa:
sucede cuando un código
intenta solucionar problemas
más allá de sus alcances
originales.
4. Los prescindibles
• Alertan sobre alto
acoplamiento de
componentes.
• Característica de la envidia
• Cadenas de mensajes
• Intermediarios
5. Los emparejadores
• Intimidad inapropiada: ocurre
cuando dos clases se conocen
demasiado y se usan con
demasiada confianza, el
problema se presenta cuando
esa relación en términos de
POO es inapropiada.
5. Los emparejadores
• Necesito de un software que
Hisoria de Usuario
• Interacción 2: funcionalidad
de captura de historia clínica
y expedición de recetas
• Interacción 3: funcionalidad
de consultar expedientes
clínicos.
• Programar la interacción que
les corresponda.
• Aspectos de diseño de
Lab 5
Conclusiones
consistentes.
Conclusiones
• 2.No uses el “else” dentro de una
condicional
Conclusiones
• 6.Mantén las entidades
pequeñas
Conclusiones
contener otras variables
de instancia
Actividad
• Librerías de Clases Incompletas
Actividad
Dudas