Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introducción A La Orientación A Objetos: Fernando Bellas Permuy
Introducción A La Orientación A Objetos: Fernando Bellas Permuy
Programacin funcional.
Lisp, Cammel.
Programacin lgica.
Prolog.
Los objetos poseen una funcionalidad (operaciones que son capaces de hacer o mensajes a los que son capaces de reaccionar).
Ej.: Dibujar, CambiarTamanho , Mover, Eliminar, etc.
Cuadrado
Circulo
Linea
Descomposicin funcional Mdulos construidos alrededor de las operaciones. Datos globales o distribuidos entre mdulos. Entrada/Proceso/Salida. Organigramas de flujo de datos.
Orientacin a objetos Mdulos construidos alrededor de las clases. Clases dbilmente acopladas, y sin datos globales Encapsulacin/mensajes. Diagramas jerrquicos de clases.
Desde el punto de vista de la programacin una clase es un tipo (ejs.: Rectangulo, Lista, Cola, NumeroComplejo, etc.).
Concepto de clase (y 2)
Nombre
Rectangulo void Dibujar () void Ocultar () void Mover (float nuevaCoordX, float nuevaCoordY) void CambiarDeTamanho (float nuevoAncho, float nuevoAlto) float Area () float DameCoordX () float DameCoordY () float DameAncho () float DameAlto ()
Prototipo (signature)
Interfaz
Atributos
Concepto de objeto
Objeto (instancia): cada uno de los ejemplares de una clase. Desde el punto de vista de la programacin, un objeto es una variable.
X
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 combinacin de algunos atributos.
Ejs.: DameCoordX, DameCoordY, DameAncho , DameAlto, Area , 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.
Envo 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();
Encapsulacin
Los clientes de una clase slo conocen la interfaz de la misma, es decir, conocen los prototipos de las operaciones pero no cmo estn implementadas. Por tanto, si la implementacin de una clase vara, y la interfaz contina siendo la misma, no es necesario cambiar el cdigo de los clientes.
NumeroComplejo NumeroComplejo Sumar (NumeroComplejo c) NumeroComplejo Restar (NumeroComplejo c) NumeroComplejo Multiplicar (NumeroComplejo c) NumeroComplejo Dividir (NumeroComplejo c) float DameModulo () float DameArgumento () float DameParteReal () float DameParteImaginaria () float modulo, argumento NumeroComplejo NumeroComplejo Sumar (NumeroComplejo c) NumeroComplejo Restar (NumeroComplejo c) NumeroComplejo Multiplicar (NumeroComplejo c) NumeroComplejo Dividir (NumeroComplejo c) float DameModulo () float DameArgumento () float DameParteReal () float DameParteImaginaria () float parteReal, parteImaginaria
Visibilidad
Los atributos y operaciones pueden tener los siguientes tipos de acceso (visibilidad):
Pblico Se pueden acceder desde cualquier clase. Privado Slo se pueden acceder desde operaciones de la clase. Protegido Slo se pueden acceder desde operaciones de la clase o de clases derivadas.
Norma general:
El estado debe ser privado. Las operaciones que definen la funcionalidad deben ser pblicas. Las operaciones que ayudan a implementar parte de la funcionalidad deben ser privadas (si no se utilizan desde clases derivadas) o protegidas (si se utilizan desde clases derivadas).
Esp
n Ge
er
iz al
ci
n
Animal Sentir () Vegetal
Mamifero
Ave Volar ()
En un lenguaje orientado a objetos siempre se pueden hacer asignaciones del estilo supertipo = subtipo entre instancias.
unAnimal = unAve, pero NO unAve = unAnimal.
Presentar ASCII
Clase concreta
Una clase que no es abstracta, es decir, que no define operaciones abstractas y define las operaciones abstractas que hereda.
Figura
Dibujar () Area () Mover () Ocultar ()
Enlace dinmico: La llamada a figura.Dibujar se resuelve en tiempo de ejecucin. Enlace esttico: La llamada a grafico.Dibujar se resuelve en tiempo de compilacin. Consejo: Programar haciendo uso de una interfaz, y no de una implementacin concreta.
Herencia de interfaz: La clase hija hereda el interfaz (pero no la implementacin de las operaciones).
Ej.: el ejemplo de la jerarqua de figuras.
Algunos lenguajes tienen palabras clave para distinguir entre herencia de interfaz y clase (ej.: Java), mientras que otros no (ej.: C++). Herencia de clase: combina la herencia de implementacin y de interfaz.
Ej.: siguiente transparencia ...
Texto
Cargar () Grabar () Presentar ()
Presentar ASCII
Procesar PostScript
Procesar HTML
Aplicacion
AnhadirDoc () AbrirDoc () CrearDoc () PuedoAbrirDoc () ApuntoDeAbrirDoc ()
if (! PuedoAbrirDoc(nombre)) { return; } Documento* doc = CrearDoc(); if (doc) { docs->AnhadirDoc(doc); ApuntoDeAbrirDoc(doc); doc->Abrir(); doc->Leer(); }
VehiculoTerrestre DesplazarsePorTierra ()
VehiculoAcuatico DesplazarsePorAgua ()
VehiculoAnfibio
VehiculoAnfibio
- Los lenguajes ofrecen mecanismos para deshacer la ambigedad (en C++ => unVehiculoAnfibio.VehiculoTerrestre::Desplazarse()).
Figura
Dibujar () Area () Mover () Ocultar ()
Relacin de composicin/agregacin (y 2)
El cdigo de los mtodos del agregado (Grafico) delega parte de su implementacin en mtodos de sus partes (Figura). El agregado puede tener la responsabilidad de liberar la memoria de sus partes (ejemplo anterior) o no (siguiente ejemplo).
Figura
Area ()
Ventana
forma.Area()
return ancho*alto;
return PI * radio 2;
Composicin
Recursos
Libros
E. Gamma, R. Helm, R. Johnson, J. Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, Addisson-Wesley, 1994.