Professional Documents
Culture Documents
cfontela@fi.uba.ar
Definimos
Encapsulamiento: cada objeto es responsable
de responder a los mensajes que recibe, sin
que quien le enva el mensaje tenga que
saber cmo lo hace
Polimorfismo: capacidad de respuesta que
tienen distintos objetos de responder de
maneras diferentes a un mismo mensaje
Hay consecuencias
2c2015
Polimorfismo y refactorizacin
Polimorfismo en general
Los lenguajes de comprobacin esttica:
vinculacin tarda e interfaces
Refactorizacin
TDD completo
2c2015
var celdaLibre = {
contiene : function (valor) {
return false;
}
}
var celdaOcupada = {
contiene : function (valor) {
return (this.numero == valor);
}
}
Slo en JavaScript? Y en lenguajes con clases?
2c2015
2c2015
2c2015
18
2c2015
Ejemplo
public interface Notificable {
/*public abstract*/ void notificarDeposito();
}
2c2015
Uso
public class OficialCuenta extends Empleado
implements Notificable {
...
}
Corolario
Si una clase declara implementar una interfaz y no
implementa (redefine) uno de sus mtodos es
abstracta
20
2c2015
21
2c2015
22
2c2015
23
2c2015
Visin de lenguaje
Una clase muy abstracta que se puede usar para
herencia mltiple
24
2c2015
27
2c2015
Refactorizaciones
Mejorar cdigo, hacindolo ms comprensible
Sin cambiar funcionalidad
28
2c2015
Refactoring
Mejorar el cdigo ya escrito
Cmo?
Modificar estructura interna
Sin modificar comportamiento observable
Ejemplos:
Eliminar cdigo duplicado
Introducir polimorfismo
29
2c2015
30
2c2015
Actitud constante
Consecuencia de revisiones de cdigo
Antes de modificar cdigo existente
Despus de incorporar funcionalidad
Antes de optimizar
Ojo: optimizar refactorizar
Durante depuraciones
31
2c2015
Riesgo alto
Mxima: Si funciona, no lo arregle
32
2c2015
33
2c2015
Test-Driven Development =
Test-First +
Automatizacin +
Refactorizacin
Para qu refactorizamos?
Por qu no hacemos varias refactorizaciones
seguidas?
Qu relacin hay entre TDD y refactorizacin?
38
2c2015
39
2c2015
Profundizacin
UML
Excepciones
Otros
Repaso pre-parcial
Parcial
40
2c2015