Documente Academic
Documente Profesional
Documente Cultură
Los objetos permiten representar los conceptos esenciales Motivos que han conducido al éxito la tecnología de
de una entidad ignorando sus propiedades accidentales objetos
Avances en arquitectura de computadores
Avances en lenguajes de programación (C++, Smalltalk,
Lo principal es la visión externa Ada, Java, ...).
Ingeniería del software (modularidad, encapsulado de la
Durante el desarrollo del sistema lo importante es “qué información, proceso de desarrollo incremental)
es” y “qué hace” un objeto antes de decidir “cómo” se Los límites de la capacidad de gestionar la complejidad de los
implementará sistemas simplemente con técnicas de descomposición
Comportamiento: operaciones que los clientes realizarán en algorítmica
el objeto, y operaciones que realizará sobre otros objetos
• Un cliente es un objeto que usa los recursos/servicios de otros
objetos (servidores) Más centrado en el diseño y aplicación de técnicas de
ingeniería de software
Hola Mundo
Valores o características de los objetos Los objetos se comunican e interaccionen entre sí por
Permiten definir el estado del objeto u otras cualidades medio de mensajes
Si un objeto desea que otro objeto ejecute un método le
envía un mensaje que puede tener información adicional
en forma de parámetros
Marca
Color
Componentes de un mensaje
Potencia Objeto destinatario del mensaje (miCoche)
Velocidad máxima Método que se debe ejecutar como respuesta (cambiar
Velocidad Carburante marcha)
Aceleración Parámetros necesarios del método (segunda)
Capacidad de
combustible constantes
variables
Un objeto puede realizar una serie de acciones Los objetos con estados similares y mismo
comportamiento se agrupan en clases
La definición de la clase especifica el comportamiento y los
atributos de los ejemplares (objetos) de la clase
Arrancar motor
Parar motor
Acelerar
Frenar
Girar a la derecha (grados)
Girar a la izquierda (grados)
Cambiar marcha (nueva marcha)
Objetos de la clase
método argumentos Coche
class Programa {
public static void main(String args[]) {
Ejercicio:
Coche c=new Coche(); // crea un objeto Coche
c.arrancar(); // utiliza el objeto
¿Cuál es la representación en memoria de un POO?
// ...
} // se elimina el objeto cuando nadie lo puede utilizar
// ¡ automáticamente !
}
Los objetos encapsulan (agrupan) sus operaciones y su Consiste en separar los aspectos externos del objeto (las
estado: partes a las que pueden acceder otros objetos) de los
el comportamiento del objeto está definido por los métodos detalles de implementación internos (ocultos a otros
el estado está definido por los datos o atributos del objeto objetos)
Los objetos agrupan su estado (los atributos o datos) y su
comportamiento (los métodos)
Ocultación de información
• Relación clara entre el código y los datos
Las partes necesarias para utilizar un objeto son visibles
(interfaz pública): métodos
Modularidad
El código de un objeto puede desarrollarse y mantenerse
Las demás partes son ocultas (privadas)
independientemente del código de los otros objetos
• El volante, el cuentakilómetros, los pedales y la palanca de
cambios representan una interfaz pública hacia los mecanismos Ocultación de información
de funcionamiento del automóvil Sólo son visibles las partes necesarias para utilizar un objeto
• Para conducir no es necesario conocer la mecánica del automóvil (interfaz pública): métodos y atributos
(su implementación)
Las demás partes son ocultas (privadas). No es necesario
saber como esta hecho para utilizarlo
Encapsulación Abstracción
Toda clase debe tener dos secciones: Capacidad de especificar las características comunes a un
Interfaz: parte visible conjunto de clases
Implementación: representación de la abstracción Definición parcial del estado y del comportamiento
Declaración del comportamiento (interfaz)
Ejemplo
• El volante, el cuentakilómetros, los pedales y la palanca de Clases abstractas
cambios representan una interfaz pública hacia los mecanismos Especificación de datos y comportamiento común a un
de funcionamiento del automóvil
conjunto de clases
• Para conducir no es necesario conocer la mecánica del automóvil
(su implementación) Forzar a que las subclases proporcionen un comportamiento
específico
Interfaces
Declaración de métodos a incorporar en las clases que
implementen la interfaz
Definición de constantes
La interfaz define un conjunto de métodos Permite definir una clase especializando otra ya existente
Una clase de objetos puede implementar una o varias Se extiende un tipo de datos, heredando las características
interfaces comunes y especificando las diferencias
Permite la reutilización de código
La interfaz Volante ofrece los métodos: Implementa la relación es un o es una clase de
• Girar a la izquierda Define una jerarquía de clases:
• Girar a la derecha
Automovil Superclase (o clase padre o base)
La interfaz PedalAcelerador ofrece los métodos: Es una especialización de
• Pisar acelerador
Subclase
• Levantar acelerador Coche Camion
(o clase hija o derivada)
Los métodos y atributos de la superclase son heredados Propiedad de una entidad de adquirir formas distintas
por las subclases, Polimorfismo inclusivo
• Un objeto de un tipo dado (tipo estático) puede ser sustituido por
otro del mismo tipo, pero de distinta clase
pero, en la especialización: • Las interfaces definen tipos
Se pueden añadir nuevos métodos y atributos • Las clases definen implementaciones
• La clase Taxi tiene taxímetro y las operaciones poner en marcha Polimorfismo paramétrico
taxímetro y para taxímetro • Un método puede actuar sobre diversos tipos
Se pueden redefinir los métodos • Ejemplo: el método insertar() de una lista ordenada funciona
• La clase Taxi redefine el método arrancar: si es recién subido un sobre cualquier clase que tenga implementado el método
nuevo cliente, poner en marcha taxímetro menor()
Se pueden ocultar métodos Sobrecarga de método
• La subclase CocheAutomático oculta el método cambiar marcha • un mismo nombre de método y varias implementaciones del
mismo (en la misma o distintas clases)
• Ejemplo: el método insertar() implementado en una lista, en una
lista ordenada, en un conjunto y en una tabla.
Todas las clases que implementan una interfaz pueden Agregar o componer varios objetos para obtener una
responder a un mismo conjunto de peticiones mayor funcionalidad
Los clientes no tienen que preocuparse de las clases Un objeto se puede construir a partir de otros objetos
específicas de los objetos que utilizan
La implementación del cliente está menos atada a la
evolución de dichas clases
Es posible incluso cambiar unas clases por otras (siempre
que implementen las operaciones de la interfaz)
Recomendación:
Programar con interfaces y no con implementaciones
Declarar variables del tipo de interfaces, no de clases
Utilizar patrones de creación que abstraigan el proceso de
creación de objetos concretos
Herencia: permite definir una clase a partir de otra La herencia no permite cambios en tiempo de ejecución
Reutilización de caja blanca: los aspectos internos de la La herencia rompe la encapsulación
superclase son visibles a las subclases La herencia impone al menos una parte de la representación
Soportada por el lenguaje de programación física a las subclases
Estática: se define en tiempo de compilación Cambios en la superclase pueden afectar a las subclases
Las implementaciones de superclase y subclases están
Composición: nueva funcionalidad mediante composición ligadas
de objetos Si hacen falta cambios para reutilizar una clase en nuevos
Reutilización de caja negra: no hay visibilidad de los aspectos dominios de aplicación habrá que cambiarla
internos de los objetos (objetos como cajas negras) Limita la flexibilidad y al final la reutilización
Requiere interfaces bien definidas Por ello es más práctico utilizar interfaces y clases
Dinámica: se define en tiempo de ejecución abstractas
Ya que proporcionan menos o ninguna implementación
Delegación de objetos como alternativa a la herencia Ejemplo de delegación de objetos como alternativa a la herencia
En la delegación un objeto que recibe una petición delega la
ejecución del método a otro objeto (el delegado)
• En el fondo esto es lo que hace una subclase respecto a la Rectangulo
superclase (al objeto this) ancho Rectangulo
Ejemplo: la clase Ventana, en vez de heredar de Rectangulo alto VentanaGUI rectangulo ancho
(aunque las ventanas son rectangulares) tiene una referencia alto
a un objeto asociado de esa clase y delega algunas area() area()
operaciones en ella area()
• Si hiciera falta cambiar la forma de la ventana en tiempo de
ejecución, por ejemplo a Circulo, bastaría con cambiar la return rectangulo.area() return ancho *
referencia del objeto correspondiente
VentanaGUI
alto
area()
Un conjunto de clases e interfaces se pueden agrupar en Dependiendo del sistema que pretendemos implementar
bibliotecas realizaremos unas u otras abstracciones del mundo real
Así pueden ser reutilizadas en programas distintos, El constructor de automóviles definirá como objetos las
mediante: partes del motor, las ruedas, el chásis, la transmisión, etc.
• Herencia de clases El conductor verá el volante, el panel de mandos, los
• Composición de objetos pedales, etc.
Bibliotecas estándar: El guardia civil considerará la velocidad y la matrícula
Están probadas, son robustas y eficientes
Suelen adaptarse bien a múltiples dominios La POO permite representar el problema en términos
específicos del dominio
Recomendación: Evitar reinventar la rueda Fáciles de comprender
Antes de implementar nada, ver si ya existe Verificables por el usuario que define los requisitos del
sistema
Persistencia Genericidad
Un objeto es persistente cuando su existencia no está Una clase genérica o parametrizada es una plantilla para
ligada a la de su creador otras clases
En algún proceso se crea el objeto Ejemplo: con Lista<item> se puede crear Lista<int>,
Se guarda su estado en algún repositorio (fichero, BD) Lista<persona>, Lista<Lista<persona>>
Otros procesos pueden recrearlo y volver a guardarlo La plantilla se puede parametrizar por otras clases, tipos y
operaciones
C++ y Ada ofrecen la posibilidad de definir tipos genéricos
Ada
C ++ Quick Basic Common LISP
Modula 2
Fortran 90
Ada 90 Object Pascal Ansi C ++
Visual Basic
Ada 95 Delphi
Object - Cobol
Java
C#
Juan Pavón Mestras Juan Pavón Mestras
Facultad de Informática UCM, 2004-05 49 Facultad de Informática UCM, 2004-05 50
Recolección No No Si Si
Delphi de basura
C ++ Excepciones Si Si Si No
Visual Objects
Eiffel Persistencia No No No No
Ada-95
Smalltalk
Peter Wegner, “Dimensions of Object-Based Language Java
Design,” Proceedings OOPSLA '87, ACM SIGPLAN
Juan Pavón Mestras Juan Pavón Mestras
Facultad de Informática UCM, 2004-05 51 Facultad de Informática UCM, 2004-05 52
Resumen de conceptos de POO Bibliografía
Un programa orientado a objetos es un conjunto de clases T. Budd, An introduction to Object-Oriented Programming (Third
que describen el comportamiento de los objetos del Edition). Pearson Education, 2001
sistema E. Gamma, R. Helm, R. Johnson, J. Vlissides, Design Paterns:
La computación se realiza por objetos que se comunican Elements of Reusable Object-Oriented Software. Addison-
entre sí, solicitando que otros objetos realicen Wesley, 1994
determinadas acciones B. Stroustrup, The C++ Programming Language (Third Edition).
Los objetos se comunican mediante mensajes Addison-Wesley, 1997
Cada objeto tiene su propio estado, que consta de otros Agustín Froufe. Java 2. Manual de usuario y tutorial. Ed. Ra-Ma
objetos
J. Sánchez, G. Huecas, B. Fernández y P. Moreno, Iniciación y
Cada objeto es un ejemplar de una clase (agrupación de referencia: Java 2. Osborne McGraw-Hill, 2001.
objetos)
Todos los objetos que son ejemplares de una misma clase B. Meyer, Object-Oriented Software Construction (Second
Edition). Prentice Hall, 1997
pueden realizar las mismas acciones
Las clases están organizadas en una jerarquía de herencia