conceptos basicos de poo
Post on 13-Jun-2015
12.723 Views
Preview:
TRANSCRIPT
IAGP 1
Programación Orientada a Objetos
Desarrollo de software orientado a objetos
DefiniciónMétodo de desarrollo de software que basa la arquitectura del sistema en módulos deducidos de los tipos de objetos que se manipulan, en lugar de basarse en la función o funciones a las que el sistema está destinado a asegurar.
No preguntes primero qué hace el sistema, pregunta ¡¡A QUIÉN LO HACE!!
IAGP 2
Programación Orientada a Objetos
2.1 Orígenes
El tiempo transcurrido entre el desarrollo convencional del software y el desarrollo orientado a objetos, no se solapa.
Hay más de 25 años, surgió con el lenguaje Simula, en Noruega, aunque comercialmente se ha difundido recientemente.
Simula es acrónimo de “simulación lenguaje” y fue creado para soportar simulaciones, por O. J. Dahl yKristen Nygaard.
Su propósito fue la simulación de sistemas físicos complejos con muchos cientos de componentes.
En Simula los módulos no se basan en procedimientos como en la programación convencional, sino en los objetos físicos que se modelan en la simulación.
IAGP 3
Programación Orientada a Objetos
Los objetos del mundo real pueden exhibir una variedad infinita de efectos sobre otros, creando, destruyendo, levantando, uniendo, comprando, doblándose, enviando, etc.
Esta gran variedad suscita un problema: ¿Cómo se pueden representar en software las diversas clases de interacciones ?
Los autores de Simula lograron una solución elegante a este problema: el mensaje. Los objetos interaccionan el uno con el otro con mensajes que piden que los objetos realicen sus métodos.
Un mensaje es simplemente el nombre de un objeto seguido por el nombre de un método que el objeto sabe ejecutar. Si un método requiere alguna información adicional para saber qué hacer, el mensaje incluye la información como parámetros.
IAGP 4
Programación Orientada a Objetos
El objeto que inicia un mensaje se llama el remitente de ese mensaje, y el objeto que recibe el mensaje se llama el receptor.
El hecho de que los métodos están asociados siempre a objetos específicos tiene un efecto secundario interesante que resulta ser ventajoso. Diversos objetos pueden responder al mismo mensaje genérico, pero cada objeto puede interpretar el mensaje de una manera distinta.
Por ejemplo, un objeto camión podría poner en ejecución su propia versión del mensaje mueve_A, al igual que una nave, un tren, un avión, una persona, o cualquier cosa que se mueva. En el mundo real la manera en que estos objetos determinan sus rutas, planean sus movimientos, y realizan estos desplazamientos se diferencia radicalmente, pero todos entenderían una petición común de ir a un destino especificado.
IAGP 5
Programación Orientada a Objetos
La capacidad de diversos objetos para responder al mismo mensaje de diversas maneras se llama polimorfismo, que en griego significa "muchas formas."
El término puede intimidar, y el polimorfismo a menudo se considera un concepto avanzado en tecnología de objetos. Pero la idea básica no podía ser más simple: cada objeto puede tener una respuesta única al mismo mensaje.
A veces, una simulación implica solamente un ejemplo de una clase particular de objeto. Sin embargo es mucho más común, necesitar más de un objeto de cada tipo. Esta posibilidad levanta otra preocupación: sería extremadamente ineficaz redefinir los mismos métodos en cada ocurrencia de ese objeto.
IAGP 6
Programación Orientada a Objetos
Aquí, otra vez, los autores de Simula aportaron una solución elegante: la clase.
Una clase es una plantilla de software que define los métodos y las variables que se incluirán en un tipo particular de objeto. Los métodos y las variables que hacen el objeto se definen solamente una vez, en la definición de la clase.
Los objetos que pertenecen a una clase se llaman generalmente instancias de la clase y contienen solamente sus propios valores particulares para las variables.
Un programa orientado a objetos (poo), se define de la forma:
Objetos + Mensajes = Programa
IAGP 7
Programación Orientada a Objetos
IAGP 8
Programación Orientada a Objetos
La programación orientada a objetos, se dice a menudo que es más natural que la programación tradicional, y es verdad en dos niveles.
• En un nivel, la POO es más natural porque permite que organicemos la información de la forma que nos es familiar, según lo ilustrado en las jerarquías de las clases.
• En otro nivel más profundo, es más natural porque refleja técnicas propias de la naturaleza para manejar complejidad.
Es interesante fijarse en la estructura de organismos vivos para establecer un marco para entender la naturaleza adaptativa de los objetos.
IAGP 9
Programación Orientada a Objetos
Programa OO
Clase
Objeto
Los objetos se comunican mediante mensajes
Colección estructuradade clases
Implementación de un TAD
Una instancia de una clase
IAGP 10
Programación Orientada a Objetos
2.2 Comparación con los seres vivos
El bloque de edificio básico a partir del cual se componen los seres vivos es la célula. Las células son "paquetes orgánicos", como objetos, combinan la información relacionada y comportamiento.
La mayoría de la información está contenida en moléculas de proteína, dentro del núcleo de la célula. El comportamiento, que puede extenderse desde conversión de energía al movimiento, es realizado por estructuras fuera del núcleo.
Las células están rodeadas por una membrana que permite solamente ciertas clases de intercambios químicos con otras. Esta membrana protege el funcionamiento interno de la célula contra la intrusión exterior, y también oculta la complejidad, presentando un interfaz relativamente simple al resto del organismo.
IAGP 11
Programación Orientada a Objetos
Todas las interacciones entre las células ocurren a través de los mensajes químicos, reconocidos por la membrana de la célula y pasados a su través al interior de la célula.
IAGP 12
Programación Orientada a Objetos
Los objetos que contienen a otros, se llaman objetos compuestos, son importantes porque pueden representar estructuras más sofisticadas que los objetos simples.
Un avión consiste en alas, motores, y otros componentes que son demasiado complejos para representarlos de forma simple.
Colecciones de objetos
Hay una clase especial de clases, a menudo llamada la colección de clases, que se puede encontrar en la biblioteca de clases en la mayoría de los lenguajes comerciales. Como el nombre sugiere, la función básica de una colección es recolectar juntos los objetos que se deben manejar como grupo.
IAGP 13
Programación Orientada a Objetos
En un avión, por ejemplo, no crearíamos una variable separada para cada objeto del asiento, agruparíamos todos los objetos del asiento en una colección y pondríamos una referencia a esa colección en un solo conjunto llamado variable.
IAGP 14
Programación Orientada a Objetos
Aunque los mecanismos reales de células y de objetos apenas podrían ser más diferentes, sus funciones son similares.
Las células y los objetos encapsulan datos y comportamientos asociados; ambos tienen interfaces que definen qué señales responderán a su ambiente; ambos utilizan la comunicación basada en mensajes para ocultar complejidad; ambos se pueden organizar en una jerarquía de tipos especializados; y ambos proporcionan los bloques de edificio fundamentales para construir una variedad infinita de sistemas complejos.
Esta semejanza, considerando la gran variedad de organismos vivos, demuestra claramente la flexibilidad de este acercamiento básico a a la construcción de sistemas complejos.
IAGP 15
Programación Orientada a Objetos
¡La naturaleza, después de todo, ha estado utilizando el acercamiento algunos miles de millones de años más que los diseñadores del software!
Anatomía de los componentes de un mensaje
Un mensaje consiste de tres partes:
• Un objeto receptor
• Un método que el receptor sabe ejecutar
• Un conjunto de parámetros que el método requiere para realizar su función
IAGP 16
Programación Orientada a Objetos
Respuestas a los mensajes
En la mayoría de los sistemas, los mensajes requieren una cierta clase de respuesta del receptor. Esta respuesta es generalmente llamada valor de retorno, puede ser datos simples, valores u objetos.
IAGP 17
Programación Orientada a Objetos
La potencia de los polimorfismos, simplificación de programas
Supónganos que estamos desarrollando un sistema que incluya instrumentos financieros tales como bonos y acciones.
El sistema debe permitir que realicemos una variedad de operaciones tales como añadir una nueva acción, seguir el funcionamiento de varias clases de instrumentos, y supervisión del valor actual de la cartera en su totalidad.
Nuestra primera clase es cartera, un objeto compuesto que contiene un objeto de la colección de objetos llamada instrumentos_financieros.
Nuestro primer método es agregar, que toma un objeto instrumento financiero como su parámetro.
IAGP 18
Programación Orientada a Objetos
IAGP 19
Programación Orientada a Objetos
Modularidad• Extensibilidad + Reutilización necesidad de
arquitecturas flexibles hechas con componentes autónomos
• Programa modular: formado por un conjunto de módulos
• Módulo: unidad básica de descomposición de un sistema software
• Un método de construcción de software es modular si ayuda a producir sistemas software a partir de elementos autónomos interconectados por una estructura simple y coherente.
2.3 Modularidad
IAGP 20
Programación Orientada a Objetos
Modularidad: 5 criteriosCinco criterios, cinco reglas, cinco principios.
Requisitos que debe satisfacer un método de construcción de software para merecer el nombre de modular:
• Permitir una descomposición modular
• Permitir una composición modular
• Producir módulos fáciles de comprender
• Favorecer la continuidad del software
• Protección modular
IAGP 21
Programación Orientada a Objetos
Descomposición modularUn método de construcción de software satisface la descomposición modular si permite la descomposición de un problema en un pequeño número de subproblemas menos complejos, conectados por una estructura simple, y que se pueden abordar por separado.
Importante que las dependencias sean mínimas y que se conozcan.
• Ejemplo: Diseño Descendente• Contra-ejemplo: Módulos de Inicialización
IAGP 22
Programación Orientada a Objetos
Composición modularUn método satisface la composición modular si favorece la producción de elementos software que pueden ser combinados para crear nuevos sistemas, posiblemente en un entorno diferente a aquel en el que se idearon.
• Relacionada con el objetivo de reutilización
• Independiente de la descomposición modular
• Ejemplos: Librerías de rutinas, Filtros de Unix
• Contra-ejemplo: Preprocesadores de lenguajes
IAGP 23
Programación Orientada a Objetos
Comprensión ModularSe satisface si facilita que quién lea un módulo pueda comprenderlo sin necesidad de acudir a otros módulos (en el peor de los casos a unos pocos módulos).
• Relacionado con el mantenimiento
• Contra-ejemplo: Dependencias secuenciales
IAGP 24
Programación Orientada a Objetos
Continuidad ModularUn método satisface la Continuidad Modular si se favorecen arquitecturas software en las que un cambio pequeño en la especificación origina un cambio en un solo módulo, o en un pequeño número de módulos.
• Relacionado con la extensibilidad
• Ejemplos:Constantes simbólicas y Principio de Acceso Uniforme
• Contra- ejemplos:Diseño de programas basado en la representación física de los datos y el uso de vectores estáticos
IAGP 25
Programación Orientada a Objetos
Protección ModularUn método satisface la Continuidad Modular si se originan arquitecturas en las que el efecto de una condición excepcional acaecida en tiempo de ejecución sólo afecta al módulo dónde se produce, o sólo se propaga a los módulos vecinos.
• Relacionado con la robustez
• Ejemplo: Módulos de entrada de datos comprueben su validez.
• Contra-ejemplo: Excepciones no disciplinadas.
IAGP 26
Programación Orientada a Objetos
Modularidad: 5 reglasDe los criterios anteriores se derivan cinco reglas que se deben seguir para asegurar la modularidad
• Correspondencia directa
• Pocas conexiones entre módulos
• Intercambio de información intermodular mínimo
• Conexiones explícitas
• Ocultamiento de Información
Las cuatro últimas se refieren a la comunicación entre módulos: uso o compartición de datos
IAGP 27
Programación Orientada a Objetos
2.4 Otras consideraciones
Impacto de la POO• Desarrollo más rápido.
• Mantenimiento barato
• Proceso de modelado más simple
• Diseños más claros y manejables
• Incremento productividad de programadores
• Inconveniente: Curva de aprendizaje–Diseño con objetos diseño procedural
• Librerías bien diseñadas y fáciles de usar
IAGP 28
Programación Orientada a Objetos
Abstracción y modelado• Modelado del problema: Proceso de abstracción
• Lenguajes O.O.: Representa elementos del marco del problema a resolver
• Código (solución): descripción del problema
• Objetos: Tienen su estado y pueden realizar operaciones
IAGP 29
Programación Orientada a Objetos
Características de la O.O.• Todo es un objeto (alumno, factura, polígono)
• Programa: Conjunto de objetos. Se envían mensajes para decirse qué deben hacer
• Objetos pueden estar compuestos por otros
• Cada objeto es de un tipo (instancia de clase)
• Objetos de un mismo tipo pueden recibir los mismos mensajes
IAGP 30
Programación Orientada a Objetos
Interface de un objeto• Elementos del problema: Entidad (Objeto)
• Objeto: Pertenece a una clase. – Define sus características y comportamiento
• POO crea nuevos tipos e instancia los objetos necesarios de esos tipos
• modelado: Mapeo 1 a 1 Problema Solución
• Tipo: Interface. Informa de las peticiones que se pueden hacer a objetos de ese tipo
IAGP 31
Programación Orientada a Objetos
Encapsulación• Programador: Dos puntos de vista
– Crear clases
– Crear clientes de esas clases
• Sólo muestra lo necesario para quien programa clientes. Oculta el resto
• Interface ¿Qué solicitudes puedo hacer?
• Implementación: Realización de las tareas de la interface
• Envío de mensajes (ejecución de un método)
IAGP 32
Programación Orientada a Objetos
Tipos Abstractos de Datos• Conjunto de objetos que ofrecen una serie de operaciones
• Abstracciones matemáticas:– No se menciona cómo se implementan las operaciones
• Java permite la construcción de TAD's
• Mecanismos para la ocultación de detalles de implementación
IAGP 33
Programación Orientada a Objetos
• Si se modifica la implementación:– El programa que usa el TAD no se modifica– Sólo cambian los métodos del TAD– Cambios transparentes al resto del programa
• Operaciones soportadas por el TAD:– Decisión de diseño (Programador del TAD)
• Ejemplos: Listas, conjuntos, grafos, ...
IAGP 34
Programación Orientada a Objetos
Control de acceso• Disponibilidad de métodos. Razones:
– El cliente no necesita ver lo que no le afecta (simplicidad)– Modificaciones en la implementación sin afectar a la interface Cliente no afectado
• Niveles de acceso a miembros:– public, private, protected: Quién puede hacer uso
IAGP 35
Programación Orientada a Objetos
Reutilización• Uso habitual: Instanciar un objeto de una clase
• Composición: Relación "tiene un" (has-a)–Clases que contienen objetos de otras clases (member object)–Objetos miembro: Privados si no son necesarios en la interface
• Herencia: Relación "es un" (is-a)–Modificación (especialización) de una clase ya existente
IAGP 36
Programación Orientada a Objetos
Herencia• Evita crear tipos (clases) nuevos por necesidad de similar funcionalidad
• El nuevo tipo es un duplicado del otro con añadidos y/o modificaciones
• Modificaciones en la clase original afectan a la clase hija
• Herencia: ¿Es realmente necesaria?– Composición mucho más habitual
IAGP 37
Programación Orientada a Objetos
Herencia: Subclases• Nuevo tipo. Contiene todos los miembros del anterior
• Los miembros privados son inaccesibles
• Duplica el interface de la original. Es del mismo tipo que la clase base
• Formas de modificar la nueva clase:– Añadir nuevos métodos– Cambiar el comportamiento de un método (override)
IAGP 38
Programación Orientada a Objetos
Herencia: Polimorfismo• Objetos de clases derivadas se pueden tratar como de la clase base
• Permite código independiente del tipo.– Fácil de escribir y entender
• Al añadir nuevos tipos:– No hay que reescribir código– Programas extensibles
IAGP 39
Programación Orientada a Objetos
Ejemplos:• Polimorfismo:
– Mensaje a un objeto de tipo desconocido.– Se ejecuta el método correcto– No hay que especificarlo (en C++ virtual)
• Upcasting (Conversión a superclase)– Ej. Figuras geométricas
• Enlace dinámico.– Ej. Trabajadores y nóminas
IAGP 40
Programación Orientada a Objetos
Clases abstractas• Subclases diferentes con un interface único
• Sólo se permiten objetos de subclases
• Métodos abstractos (sin implementación)– Sólo en clases abstractas
• Interfaces:– Impiden implementar cualquier función– Sólo declaraciones– Herencia diferente a clases (herencia múltiple)– Las subclases "implementan" interfaces
IAGP 41
Programación Orientada a Objetos
Declaración de clases<acceso> class <nombre>{ <miembros> // "members"}
Miembros:– Atributos:
• Variables de instancia, globales a la clase.
• Atributos de clase (información estática, compartida)
– Constructores. Código de inicialización– Métodos. Comportamiento.
IAGP 42
Programación Orientada a Objetos
Constructores• Se garantiza la inicialización de cada objeto (sus atributos) con un constructor
• Java invoca al constructor al crear el objeto
• La instanciación (new) reserva el lugar de almacenamiento e invoca al constructor
• Nombre del constructor = nombre de la clase
• Se encargan de todas las operaciones de inicialización necesarias.
IAGP 43
Programación Orientada a Objetos
• Constructor: No tiene valor de retorno
• Una clase puede tener múltiples constructores
–Sobrecarga de constructorespublic class Coordenada{ double x, y; public Coordenada(){ x = 0.0; y = 0.0; } public Coordenada (double v1, double v2){ x = v1; y = v2; }}
IAGP 44
Programación Orientada a Objetos
• Constructor "por defecto". Sin parámetros.
• Clase sin constructor: El compilador crea un constructor "por defecto".
• Si hay constructores con argumentos, no se crea el "constructor por defecto". Ejemplo.
– Error si se invoca el constr. sin parámetros
• Constructores que invocan a otros constructores:
– llamada a this(...). Ejemplo.
IAGP 45
Programación Orientada a Objetos
La referencia this• Referencia al objeto actual.
• Permite invocar métodos del objeto actual.– No es necesario this para hacer eso
• Permite referenciar atributos del objeto actual
– Necesario si estan ocultos por parámetros / variables de ámbito más local. Ejemplo.
• Permite devolver una ref. al objeto actual
• Permite invocaciones entre constructores
IAGP 46
Programación Orientada a Objetos
La llamada a super• Referencia a la superclase de la que desciende la clase actual
• Reutilización de código por medio de herencia
– super invoca al comportamiento anterior.– Además se puede añadir comportamiento adicional
• Implícita en constructores como 1ª instrucción
• en métodos: super.nombre_metodo()
IAGP 47
Programación Orientada a Objetos
Miembros de tipo static• Miembros (métodos o atributos) implementados a nivel de clase
• Desde métodos static la referencia this no tiene sentido
• No se puede acceder a miembros no estáticos desde métodos estáticos• static: Semántica de "ámbito global"
• Permite desarrollo de código sin usar POO
IAGP 48
Programación Orientada a Objetos
2.5 Lenguaje Smalltalk• Surge en los años 1970, en el Centro de Investigación de Xerox en Palo Alto (PARC) en EE.UU.
• Creado por Alan Kay, Adele Goldberg y Daniel Ingalls
• Influenciado por Simula y Lisp
•“El objetivo del proyecto de Smalltalk es proporcionar soporte informatizado para el espíritu creativo”
•“Lenguaje de descripción (lenguaje de programación) que sirva como una interface entre los modelos mentales y los modelos en el ordenador, y además un lenguaje de interacción (interfaz de usuario) que traslade los sistemas de comunicación humana a los ordenadores”
IAGP 49
Programación Orientada a Objetos
• “El sistema debería construirse con el mínimo nº de partes fijas y todas las partes deberían encontrarse en un marco uniforme.”
• “Un lenguaje para ordenadores debería:
– soportar el concepto de Objeto y proporcionar un medio uniforme para identificarlos.
– proporcionar un medio de clasificar los objetos y de crear nuevas clases con la misma base que las del núcleo.
– ser Independiente de la representación (polimorfismo)
– factorizar comportamiento común (herencia)”
• “La ejecución debería verse como una capacidad intrínseca de los objetos que pueden ser invocados de manera uniforme mediante el envío de mensajes.”
IAGP 50
Programación Orientada a Objetos
• Para que un lenguaje de desarrollo llegue a ser ampliamente aceptado deber ser estandarizado.
•A finales de 1993 se creó el Comité para la estandarización de Smalltalk X3J20.
• El primer borrador aparece a finales de 1995
– 50% sintaxis/semántica y 50% Librerías de clases
– Fácil debido a la simplicidad del lenguaje
– Código de aplicaciones muy portable
• En 1995 se forma el STIC (SmallTalk Industry Council)
“una voz unificada para la comunidad Smalltalk”
IAGP 51
Programación Orientada a Objetos
Los objetivos del STIC son:
• Lograr que Smalltalk sea el LOO elegido para el desarrollo de aplicaciones en la empresa
• Responder a las necesidades de la industria Smalltalk
• Favorecer la aparición de estándares
• Crear un “punto de encuentro” para la comunidad Smalltalk
http://www.stic.org
Apuntes sobre Smalltalk:http://www.um.es/informatica/alumnos/apuntes/tercero/poo/smalltalk.ppt
IAGP 52
Programación Orientada a Objetos
2.6 Ejemplo
Polígonos y Rectángulos• Tenemos la clase Poligono y necesitamos representar rectángulos.
¿Debemos crear la clase Rectangulo partiendo de cero?
Podemos aprovechar la existencia de similitudes y particularidades entre ambas clases
IAGP 53
Programación Orientada a Objetos
• Un rectángulo tiene muchas de las características de un polígono (rotar, trasladar, vértices,..)
• Pero tiene características especiales (diagonal) y propiedades especiales (4 lados, ángulos rectos)
• Algunas características de polígono pueden implementarse más eficientemente
class Rectangulo inherit
Poligono
feature
...Características específicas para rectángulos
end
top related