Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Objetos
Análisis
Diseño
Implementación
Pruebas
Mantenimiento
Distintas formas de construcción de sistemas
software
• Programación estructurada.
– C, Pascal, Modula.
• Programación funcional.
– Lisp, Cammel.
• Programación lógica.
– Prolog.
– Extensibilidad
• Posibilidad de ampliar la funcionalidad de la aplicación de manera
sencilla.
– Reusabilidad
• Posibilidad de reutilizar parte del código para el desarrollo de una
aplicación similar.
Concepto de clase (1)
• Una clase describe un conjunto de ejemplares con propiedades y
comportamientos similares.
Nombre Rectangulo
void Dibujar ()
void Ocultar () Prototipo
void Mover (float nuevaCoordX, float nuevaCoordY) (signature)
void CambiarDeTamanho (float nuevoAncho, float nuevoAlto)
Interfaz float Area ()
float DameCoordX ()
float DameCoordY ()
float DameAncho ()
float DameAlto ()
return alto*ancho;
Concepto de objeto
• Objeto (instancia): cada uno de los ejemplares de una clase.
Y
Tipos de operaciones
• Constructor: crea una instancia de la clase.
• Destructor: destruye una instancia.
• Selector: selecciona una parte del estado o devuelve una propiedad
resultante de la combinación de algunos atributos.
– Ejs.: DameCoordX, DameCoordY, DameAncho , DameAlto, Area , etc.
• Modificador: modifica una parte del estado según algún criterio.
– Ejs.: Mover , CambiarDeTamanho, etc.
• Copiador: copia un objeto en otro.
• Iterador: permite recorrer una estructura de datos (ej.: para recorrer
una lista).
• Visualizador: muestra todo el estado del objeto de una forma
elaborada.
– Ej.: Dibujar.
Envío de mensajes
• Un objeto de una clase responde a cualquiera de los mensajes
definidos en la clase.
– float coordX = unRectangulo.DameCoordX();
– unRectangulo.Mover(0, 20);
– unRectangulo.Dibujar();
Encapsulación
• Los clientes de una clase sólo conocen la interfaz de la misma, es decir,
conocen los prototipos de las operaciones pero no cómo están
implementadas.
• Por tanto, si la implementación de una clase varía, y la interfaz continúa
siendo la misma, no es necesario cambiar el código de los clientes.
NumeroComplejo NumeroComplejo
Ser
Nacer ()
Morir ()
Esp
i ón
ac
eci
Animal Vegetal
iz
al
aliz
e r
en Sentir ()
aci
G
ón
Mamifero Ave
Volar ()
Relación de herencia (3)
• Concepto de tipo: un tipo denota una interfaz particular.
– Ej.: Ser , Animal , Vegetal, etc.
• Un tipo es un subtipo de otro si su interfaz contiene la interfaz de su
supertipo.
– Ej.: Animal es un subtipo de Ser y un supertipo de Ave y Mamifero.
• Diferencia entre los conceptos de clase e interfaz.
– El concepto de clase hace referencia a los atributos y a las operaciones,
junto con su implementación.
– El concepto de interfaz hace referencia sólo a los prototipos de las
operaciones visibles.
• En un lenguaje orientado a objetos siempre se pueden hacer
asignaciones del estilo supertipo = subtipo entre instancias.
– unAnimal = unAve, pero NO unAve = unAnimal.
Relación de herencia (4)
• La clase hija puede extender o redefinir (override) el comportamiento
de la clase padre.
– Extensión: Se añaden operaciones y/o atributos (ej.: Volar en el caso de
Ave).
– Redefinición: Se cambia la implementación de alguna operación heredada
(o se le da una implementación si no la tenía).
Relación de herencia (5)
Texto
Cargar ()
Grabar ()
Presentar () Presentar ASCII
PostScript HTML
• Clase concreta
– Una clase que no es abstracta, es decir, que no define operaciones
abstractas y define las operaciones abstractas que hereda.
Relación de herencia (7)
• Un ejemplo de clase abstracta (Figura) ...
Grafico Figura
grafico->Insertar(unCuadrado);
grafico->Insertar(unCirculo);
grafico->Insertar(unTriangulo);
grafico->Dibujar();
Relación de herencia (9)
void Grafico::Dibujar ()
{
IteradorFiguras i;
i = ObtenerIteradorFiguras();
while (! i.Fin()) {
Figura* figura = i.Elemento();
figura->Dibujar();
i.Siguiente();
}
}
ColeccionTextos Texto
forall t in Textos
t.Presentar()
Documento Aplicacion
• Herencia múltiple
– una clase hija hereda de dos o más padres.
– No está disponible en todos los lenguajes (disponible en C++; en Java sólo
para la herencia de interfaz).
VehiculoTerrestre VehiculoAcuatico
DesplazarsePorTierra () DesplazarsePorAgua ()
VehiculoAnfibio
Relación de herencia (y 16)
VehiculoTerrestre VehiculoAcuatico
Desplazarse () Desplazarse ()
VehiculoAnfibio
Grafico Figura
forall f in Figuras
f.Dibujar ();
Figura forma
Area () Area ()
Ventaja Desventaja
• Consejos :
• Favorecer la composición frente a la herencia de clase.
• Evitar excesivas relaciones entre clases (las clases deben estar
débilmente acopladas).
• Evitar jerarquías de clases excesivamente complejas.