Conceptos Basicos de POO

13,019 views

Published on

Published in: Travel, Entertainment & Humor
2 Comments
2 Likes
Statistics
Notes
  • Muchas gracias por compartir la informacion :D
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Gracias por el aporte. Realmente la explicación permite comprender al entorno de los objetos desde lo mas básico. Es muy didáctico. ellanque
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
13,019
On SlideShare
0
From Embeds
0
Number of Embeds
1,954
Actions
Shares
0
Downloads
269
Comments
2
Likes
2
Embeds 0
No embeds

No notes for slide

Conceptos Basicos de POO

  1. 1. IAGP Programación Orientada a Objetos Desarrollo de software orientado a objetos Definición Mé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!!
  2. 2. IAGP 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.
  3. 3. IAGP 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 .
  4. 4. IAGP 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.
  5. 5. IAGP 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.
  6. 6. IAGP 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
  7. 7. IAGP Programación Orientada a Objetos
  8. 8. IAGP Programación Orientada a Objetos <ul><li>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. </li></ul><ul><ul><li>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. </li></ul></ul><ul><ul><li>En otro nivel más profundo, es más natural porque refleja técnicas propias de la naturaleza para manejar complejidad. </li></ul></ul><ul><li>Es interesante fijarse en la estructura de organismos vivos para establecer un marco para entender la naturaleza adaptativa de los objetos. </li></ul>
  9. 9. IAGP Programación Orientada a Objetos Programa OO Clase Objeto Los objetos se comunican mediante mensajes Colección estructurada de clases Implementación de un TAD Una instancia de una clase
  10. 10. IAGP 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 &quot;paquetes orgánicos&quot;, 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.
  11. 11. IAGP 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.
  12. 12. IAGP 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.
  13. 13. IAGP 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.
  14. 14. IAGP 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.
  15. 15. IAGP Programación Orientada a Objetos <ul><li>¡ 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 ! </li></ul><ul><li>Anatomía de los componentes de un mensaje </li></ul><ul><li>Un mensaje consiste de tres partes: </li></ul><ul><ul><li>Un objeto receptor </li></ul></ul><ul><ul><li>Un método que el receptor sabe ejecutar </li></ul></ul><ul><ul><li>Un conjunto de parámetros que el método requiere para realizar su función </li></ul></ul>
  16. 16. IAGP 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.
  17. 17. IAGP 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.
  18. 18. IAGP Programación Orientada a Objetos
  19. 19. IAGP Programación Orientada a Objetos <ul><li>Modularidad </li></ul><ul><ul><li>Extensibilidad + Reutilización  necesidad de </li></ul></ul><ul><ul><li>arquitecturas flexibles hechas con componentes autónomos </li></ul></ul><ul><ul><li>Programa modular: formado por un conjunto de módulos </li></ul></ul><ul><ul><li>Módulo: unidad básica de descomposición de un sistema software </li></ul></ul><ul><ul><li>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. </li></ul></ul>2.3 Modularidad
  20. 20. IAGP Programación Orientada a Objetos <ul><li>Modularidad: 5 criterios </li></ul><ul><li>Cinco criterios, cinco reglas, cinco principios. </li></ul><ul><li>Requisitos que debe satisfacer un método de construcción de software para merecer el nombre de modular: </li></ul><ul><ul><li>Permitir una descomposición modular </li></ul></ul><ul><ul><li>Permitir una composición modular </li></ul></ul><ul><ul><li>Producir módulos fáciles de comprender </li></ul></ul><ul><ul><li>Favorecer la continuidad del software </li></ul></ul><ul><ul><li>Protección modular </li></ul></ul>
  21. 21. IAGP Programación Orientada a Objetos <ul><li>Descomposición modular </li></ul><ul><li>Un 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. </li></ul><ul><li>Importante que las dependencias sean mínimas y que se conozcan. </li></ul><ul><ul><li>Ejemplo: Diseño Descendente </li></ul></ul><ul><ul><li>Contra-ejemplo: Módulos de Inicialización </li></ul></ul>
  22. 22. IAGP Programación Orientada a Objetos <ul><li>Composición modular </li></ul><ul><li>Un 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. </li></ul><ul><ul><li>Relacionada con el objetivo de reutilización </li></ul></ul><ul><ul><li>Independiente de la descomposición modular </li></ul></ul><ul><ul><ul><li>Ejemplos : Librerías de rutinas, Filtros de Unix </li></ul></ul></ul><ul><ul><ul><li>Contra-ejemplo : Preprocesadores de lenguajes </li></ul></ul></ul>
  23. 23. IAGP Programación Orientada a Objetos <ul><li>Comprensión Modular </li></ul><ul><li>Se 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). </li></ul><ul><ul><li>Relacionado con el mantenimiento </li></ul></ul><ul><ul><li>Contra-ejemplo : Dependencias secuenciales </li></ul></ul>
  24. 24. IAGP Programación Orientada a Objetos <ul><li>Continuidad Modular </li></ul><ul><li>Un 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. </li></ul><ul><ul><li>Relacionado con la extensibilidad </li></ul></ul><ul><ul><li>Ejemplos : </li></ul></ul><ul><ul><li>Constantes simbólicas y Principio de Acceso Uniforme </li></ul></ul><ul><ul><li>Contra- ejemplos : </li></ul></ul><ul><ul><li>Diseño de programas basado en la representación física de los datos y el uso de vectores estáticos </li></ul></ul>
  25. 25. IAGP Programación Orientada a Objetos <ul><li>Protección Modular </li></ul><ul><li>Un 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. </li></ul><ul><ul><li>Relacionado con la robustez </li></ul></ul><ul><ul><li>Ejemplo: Módulos de entrada de datos comprueben su validez. </li></ul></ul><ul><ul><li>Contra-ejemplo: Excepciones no disciplinadas. </li></ul></ul>
  26. 26. IAGP Programación Orientada a Objetos <ul><li>Modularidad: 5 reglas </li></ul><ul><li>De los criterios anteriores se derivan cinco reglas que se deben seguir para asegurar la modularidad </li></ul><ul><ul><li>Correspondencia directa </li></ul></ul><ul><ul><li>Pocas conexiones entre módulos </li></ul></ul><ul><ul><li>Intercambio de información intermodular mínimo </li></ul></ul><ul><ul><li>Conexiones explícitas </li></ul></ul><ul><ul><li>Ocultamiento de Información </li></ul></ul><ul><li>Las cuatro últimas se refieren a la comunicación entre módulos: uso o compartición de datos </li></ul>
  27. 27. IAGP Programación Orientada a Objetos <ul><li>2.4 Otras consideraciones </li></ul><ul><li>Impacto de la POO </li></ul><ul><ul><li>Desarrollo más rápido. </li></ul></ul><ul><ul><li>Mantenimiento barato </li></ul></ul><ul><ul><li>Proceso de modelado más simple </li></ul></ul><ul><ul><li>Diseños más claros y manejables </li></ul></ul><ul><ul><li>Incremento productividad de programadores </li></ul></ul><ul><ul><li>Inconveniente: Curva de aprendizaje </li></ul></ul><ul><ul><ul><li>Diseño con objetos  diseño procedural </li></ul></ul></ul><ul><ul><li>Librerías bien diseñadas y fáciles de usar </li></ul></ul>
  28. 28. IAGP Programación Orientada a Objetos <ul><li>Abstracción y modelado </li></ul><ul><ul><li>Modelado del problema: Proceso de abstracción </li></ul></ul><ul><ul><li>Lenguajes O.O.: Representa elementos del marco del problema a resolver </li></ul></ul><ul><ul><li>Código (solución): descripción del problema </li></ul></ul><ul><ul><li>Objetos: Tienen su estado y pueden realizar operaciones </li></ul></ul>
  29. 29. IAGP Programación Orientada a Objetos <ul><li>Características de la O.O. </li></ul><ul><ul><li>Todo es un objeto (alumno, factura, polígono) </li></ul></ul><ul><ul><li>Programa: Conjunto de objetos. Se envían mensajes para decirse qué deben hacer </li></ul></ul><ul><ul><li>Objetos pueden estar compuestos por otros </li></ul></ul><ul><ul><li>Cada objeto es de un tipo (instancia de clase) </li></ul></ul><ul><ul><li>Objetos de un mismo tipo pueden recibir los mismos mensajes </li></ul></ul>
  30. 30. IAGP Programación Orientada a Objetos <ul><li>Interface de un objeto </li></ul><ul><ul><li>Elementos del problema: Entidad (Objeto) </li></ul></ul><ul><ul><li>Objeto: Pertenece a una clase. </li></ul></ul><ul><ul><ul><li>Define sus características y comportamiento </li></ul></ul></ul><ul><ul><li>POO crea nuevos tipos e instancia los objetos necesarios de esos tipos </li></ul></ul><ul><ul><li>modelado: Mapeo 1 a 1 Problema  Solución </li></ul></ul><ul><ul><li>Tipo: Interface. Informa de las peticiones que se pueden hacer a objetos de ese tipo </li></ul></ul>
  31. 31. IAGP Programación Orientada a Objetos <ul><li>Encapsulación </li></ul><ul><ul><li>Programador: Dos puntos de vista </li></ul></ul><ul><ul><ul><li>Crear clases </li></ul></ul></ul><ul><ul><ul><li>Crear clientes de esas clases </li></ul></ul></ul><ul><ul><li>Sólo muestra lo necesario para quien programa clientes. Oculta el resto </li></ul></ul><ul><ul><li>Interface  ¿Qué solicitudes puedo hacer? </li></ul></ul><ul><ul><li>Implementación: Realización de las tareas de la interface </li></ul></ul><ul><ul><li>Envío de mensajes (ejecución de un método) </li></ul></ul>
  32. 32. IAGP Programación Orientada a Objetos <ul><li>Tipos Abstractos de Datos </li></ul><ul><ul><li>Conjunto de objetos que ofrecen una serie de operaciones </li></ul></ul><ul><ul><li>Abstracciones matemáticas: </li></ul></ul><ul><ul><ul><li>No se menciona cómo se implementan las operaciones </li></ul></ul></ul><ul><ul><li>Java permite la construcción de TAD's </li></ul></ul><ul><ul><li>Mecanismos para la ocultación de detalles de implementación </li></ul></ul>
  33. 33. IAGP Programación Orientada a Objetos <ul><ul><li>Si se modifica la implementación: </li></ul></ul><ul><ul><ul><li>El programa que usa el TAD no se modifica </li></ul></ul></ul><ul><ul><ul><li>Sólo cambian los métodos del TAD </li></ul></ul></ul><ul><ul><ul><li>Cambios transparentes al resto del programa </li></ul></ul></ul><ul><ul><li>Operaciones soportadas por el TAD: </li></ul></ul><ul><ul><ul><li>Decisión de diseño (Programador del TAD) </li></ul></ul></ul><ul><ul><li>Ejemplos: Listas, conjuntos, grafos, ... </li></ul></ul>
  34. 34. IAGP Programación Orientada a Objetos <ul><li>Control de acceso </li></ul><ul><li>Disponibilidad de métodos. Razones: </li></ul><ul><ul><li>El cliente no necesita ver lo que no le afecta (simplicidad) </li></ul></ul><ul><ul><li>Modificaciones en la implementación sin afectar a la interface  Cliente no afectado </li></ul></ul><ul><li>Niveles de acceso a miembros: </li></ul><ul><ul><li>public, private, protected : Quién puede hacer uso </li></ul></ul>
  35. 35. IAGP Programación Orientada a Objetos <ul><li>Reutilización </li></ul><ul><ul><li>Uso habitual: Instanciar un objeto de una clase </li></ul></ul><ul><ul><li>Composición: Relación &quot;tiene un&quot; ( has-a ) </li></ul></ul><ul><ul><ul><li>Clases que contienen objetos de otras clases ( member object ) </li></ul></ul></ul><ul><ul><ul><li>Objetos miembro: Privados si no son necesarios en la interface </li></ul></ul></ul><ul><ul><li>Herencia: Relación &quot;es un&quot; ( is-a ) </li></ul></ul><ul><ul><ul><li>Modificación (especialización) de una clase ya existente </li></ul></ul></ul>
  36. 36. IAGP Programación Orientada a Objetos <ul><li>Herencia </li></ul><ul><ul><li>Evita crear tipos (clases) nuevos por necesidad de similar funcionalidad </li></ul></ul><ul><ul><li>El nuevo tipo es un duplicado del otro con añadidos y/o modificaciones </li></ul></ul><ul><ul><li>Modificaciones en la clase original afectan a la clase hija </li></ul></ul><ul><ul><li>Herencia: ¿Es realmente necesaria? </li></ul></ul><ul><ul><ul><li>Composición mucho más habitual </li></ul></ul></ul>
  37. 37. IAGP Programación Orientada a Objetos <ul><li>Herencia: Subclases </li></ul><ul><ul><li>Nuevo tipo. Contiene todos los miembros del anterior </li></ul></ul><ul><ul><li>Los miembros privados son inaccesibles </li></ul></ul><ul><ul><li>Duplica el interface de la original. Es del mismo tipo que la clase base </li></ul></ul><ul><ul><li>Formas de modificar la nueva clase: </li></ul></ul><ul><ul><ul><li>Añadir nuevos métodos </li></ul></ul></ul><ul><ul><ul><li>Cambiar el comportamiento de un método ( override ) </li></ul></ul></ul>
  38. 38. IAGP Programación Orientada a Objetos <ul><li>Herencia: Polimorfismo </li></ul><ul><ul><li>Objetos de clases derivadas se pueden tratar como de la clase base </li></ul></ul><ul><ul><li>Permite código independiente del tipo. </li></ul></ul><ul><ul><ul><li>Fácil de escribir y entender </li></ul></ul></ul><ul><ul><li>Al añadir nuevos tipos: </li></ul></ul><ul><ul><ul><li>No hay que reescribir código </li></ul></ul></ul><ul><ul><ul><li>Programas extensibles </li></ul></ul></ul>
  39. 39. IAGP Programación Orientada a Objetos <ul><li>Ejemplos: </li></ul><ul><ul><li>Polimorfismo: </li></ul></ul><ul><ul><ul><li>Mensaje a un objeto de tipo desconocido. </li></ul></ul></ul><ul><ul><ul><li>Se ejecuta el método correcto </li></ul></ul></ul><ul><ul><ul><li>No hay que especificarlo (en C++ virtual) </li></ul></ul></ul><ul><ul><li>Upcasting (Conversión a superclase) </li></ul></ul><ul><ul><ul><li>Ej. Figuras geométricas </li></ul></ul></ul><ul><ul><li>Enlace dinámico. </li></ul></ul><ul><ul><ul><li>Ej. Trabajadores y nóminas </li></ul></ul></ul>
  40. 40. IAGP Programación Orientada a Objetos <ul><li>Clases abstractas </li></ul><ul><ul><li>Subclases diferentes con un interface único </li></ul></ul><ul><ul><li>Sólo se permiten objetos de subclases </li></ul></ul><ul><ul><li>Métodos abstractos (sin implementación) </li></ul></ul><ul><ul><ul><li>Sólo en clases abstractas </li></ul></ul></ul><ul><ul><li>Interfaces: </li></ul></ul><ul><ul><ul><li>Impiden implementar cualquier función </li></ul></ul></ul><ul><ul><ul><li>Sólo declaraciones </li></ul></ul></ul><ul><ul><ul><li>Herencia diferente a clases (herencia múltiple) </li></ul></ul></ul><ul><ul><ul><li>Las subclases &quot;implementan&quot; interfaces </li></ul></ul></ul>
  41. 41. IAGP Programación Orientada a Objetos <ul><li>Declaración de clases </li></ul><ul><li><acceso> class <nombre> </li></ul><ul><li>{ </li></ul><ul><li><miembros> // &quot;members&quot; </li></ul><ul><li>} </li></ul><ul><ul><li>Miembros: </li></ul></ul><ul><ul><ul><li>Atributos: </li></ul></ul></ul><ul><ul><ul><ul><li>Variables de instancia, globales a la clase. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Atributos de clase (información estática, compartida) </li></ul></ul></ul></ul><ul><ul><ul><li>Constructores. Código de inicialización </li></ul></ul></ul><ul><ul><ul><li>Métodos. Comportamiento. </li></ul></ul></ul>
  42. 42. IAGP Programación Orientada a Objetos <ul><li>Constructores </li></ul><ul><ul><li>Se garantiza la inicialización de cada objeto (sus atributos) con un constructor </li></ul></ul><ul><ul><li>Java invoca al constructor al crear el objeto </li></ul></ul><ul><ul><li>La instanciación ( new ) reserva el lugar de almacenamiento e invoca al constructor </li></ul></ul><ul><ul><li>Nombre del constructor = nombre de la clase </li></ul></ul><ul><ul><li>Se encargan de todas las operaciones de inicialización necesarias. </li></ul></ul>
  43. 43. IAGP Programación Orientada a Objetos <ul><ul><li>Constructor: No tiene valor de retorno </li></ul></ul><ul><ul><li>Una clase puede tener múltiples constructores </li></ul></ul><ul><ul><ul><li>Sobrecarga de constructores </li></ul></ul></ul><ul><li>public class Coordenada </li></ul><ul><li>{ </li></ul><ul><li>double x, y; </li></ul><ul><li>public Coordenada(){ </li></ul><ul><li>x = 0.0; y = 0.0; </li></ul><ul><li>} </li></ul><ul><li>public Coordenada (double v1, double v2){ </li></ul><ul><li>x = v1; y = v2; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  44. 44. IAGP Programación Orientada a Objetos <ul><ul><li>Constructor &quot;por defecto&quot;. Sin parámetros. </li></ul></ul><ul><ul><li>Clase sin constructor: El compilador crea un constructor &quot;por defecto&quot;. </li></ul></ul><ul><ul><li>Si hay constructores con argumentos, no se crea el &quot;constructor por defecto&quot;. Ejemplo. </li></ul></ul><ul><ul><ul><li>Error si se invoca el constr. sin parámetros </li></ul></ul></ul><ul><ul><li>Constructores que invocan a otros constructores: </li></ul></ul><ul><ul><ul><li>llamada a this(...) . Ejemplo. </li></ul></ul></ul>
  45. 45. IAGP Programación Orientada a Objetos <ul><ul><li>La referencia this </li></ul></ul><ul><ul><li>Referencia al objeto actual. </li></ul></ul><ul><ul><li>Permite invocar métodos del objeto actual. </li></ul></ul><ul><ul><ul><li>No es necesario this para hacer eso </li></ul></ul></ul><ul><ul><li>Permite referenciar atributos del objeto actual </li></ul></ul><ul><ul><ul><li>Necesario si estan ocultos por parámetros / variables de ámbito más local. Ejemplo. </li></ul></ul></ul><ul><ul><li>Permite devolver una ref. al objeto actual </li></ul></ul><ul><ul><li>Permite invocaciones entre constructores </li></ul></ul>
  46. 46. IAGP Programación Orientada a Objetos <ul><ul><li>La llamada a super </li></ul></ul><ul><ul><li>Referencia a la superclase de la que desciende la clase actual </li></ul></ul><ul><ul><li>Reutilización de código por medio de herencia </li></ul></ul><ul><ul><ul><li>super invoca al comportamiento anterior. </li></ul></ul></ul><ul><ul><ul><li>Además se puede añadir comportamiento adicional </li></ul></ul></ul><ul><ul><li>Implícita en constructores como 1ª instrucción </li></ul></ul><ul><ul><li>en métodos: super.nombre_metodo() </li></ul></ul>
  47. 47. IAGP Programación Orientada a Objetos <ul><ul><li>Miembros de tipo static </li></ul></ul><ul><ul><li>Miembros (métodos o atributos) implementados a nivel de clase </li></ul></ul><ul><ul><li>Desde métodos static la referencia this no tiene sentido </li></ul></ul><ul><ul><li>No se puede acceder a miembros no estáticos desde métodos estáticos </li></ul></ul><ul><ul><li>static : Semántica de &quot;ámbito global&quot; </li></ul></ul><ul><ul><li>Permite desarrollo de código sin usar POO </li></ul></ul>
  48. 48. IAGP Programación Orientada a Objetos <ul><li>2.5 Lenguaje Smalltalk </li></ul><ul><ul><li>Surge en los años 1970, en el Centro de Investigación de Xerox en Palo Alto (PARC) en EE.UU. </li></ul></ul><ul><ul><li>Creado por Alan Kay, Adele Goldberg y Daniel Ingalls </li></ul></ul><ul><ul><li>Influenciado por Simula y Lisp </li></ul></ul><ul><ul><li>“ El objetivo del proyecto de Smalltalk es proporcionar soporte informatizado para el espíritu creativo ” </li></ul></ul><ul><ul><li>“ 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 ” </li></ul></ul>
  49. 49. IAGP Programación Orientada a Objetos <ul><ul><li>“ El sistema debería construirse con el mínimo nº de partes fijas y todas las partes deberían encontrarse en un marco uniforme.” </li></ul></ul><ul><ul><li>“ Un lenguaje para ordenadores debería: </li></ul></ul><ul><ul><ul><li>soportar el concepto de Objeto y proporcionar un medio uniforme para identificarlos. </li></ul></ul></ul><ul><ul><ul><li>proporcionar un medio de clasificar los objetos y de crear nuevas clases con la misma base que las del núcleo. </li></ul></ul></ul><ul><ul><ul><li>ser Independiente de la representación ( polimorfismo ) </li></ul></ul></ul><ul><ul><ul><li>factorizar comportamiento común ( herencia )” </li></ul></ul></ul><ul><ul><li>“ 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 .” </li></ul></ul>
  50. 50. IAGP Programación Orientada a Objetos <ul><li>Para que un lenguaje de desarrollo llegue a ser ampliamente aceptado deber ser estandarizado . </li></ul><ul><li>A finales de 1993 se creó el Comité para la estandarización de Smalltalk X3J20. </li></ul><ul><li>El primer borrador aparece a finales de 1995 </li></ul><ul><ul><li>50% sintaxis/semántica y 50% Librerías de clases </li></ul></ul><ul><ul><li>Fácil debido a la simplicidad del lenguaje </li></ul></ul><ul><ul><li>Código de aplicaciones muy portable </li></ul></ul><ul><li>En 1995 se forma el STIC (SmallTalk Industry Council) </li></ul><ul><li>“ una voz unificada para la comunidad Smalltalk” </li></ul>
  51. 51. IAGP Programación Orientada a Objetos <ul><li>Los objetivos del STIC son: </li></ul><ul><ul><li>Lograr que Smalltalk sea el LOO elegido para el desarrollo de aplicaciones en la empresa </li></ul></ul><ul><ul><li>Responder a las necesidades de la industria Smalltalk </li></ul></ul><ul><ul><li>Favorecer la aparición de estándares </li></ul></ul><ul><ul><li>Crear un “punto de encuentro” para la comunidad Smalltalk </li></ul></ul><ul><ul><li>http://www.stic.org </li></ul></ul><ul><li>Apuntes sobre Smalltalk: </li></ul><ul><li>http://www.um.es/informatica/alumnos/apuntes/tercero/poo/smalltalk.ppt </li></ul>
  52. 52. IAGP Programación Orientada a Objetos <ul><li>2.6 Ejemplo </li></ul><ul><li>Polígonos y Rectángulos </li></ul><ul><li>Tenemos la clase Poligono y necesitamos representar rectángulos. </li></ul>¿Debemos crear la clase Rectangulo partiendo de cero? Podemos aprovechar la existencia de similitudes y particularidades entre ambas clases
  53. 53. IAGP Programación Orientada a Objetos <ul><li>Un rectángulo tiene muchas de las características de un polígono (rotar, trasladar, vértices,..) </li></ul><ul><li>Pero tiene características especiales ( diagonal ) y propiedades especiales ( 4 lados, ángulos rectos ) </li></ul><ul><li>Algunas características de polígono pueden implementarse más eficientemente </li></ul>class Rectangulo inherit Poligono feature ...Características específicas para rectángulos end

×