Lto tema1

736 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
736
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Lto tema1

  1. 1. Índice Introducción a la Programación Orientada a Objetos Introd. a la POO El lenguaje Java Estruct. Biblioteca Excepciones Colecciones Evolución de los lenguajes de programación Entrada y salida Análisis de los sistemas complejos GUIs Calidad del software. Conceptos fundamentales de la P.O.O. Laboratorio de Tecnología de Objetos I-1
  2. 2. Complejidad -> Caos -> AbstracciónUn médico, un ingeniero civil y una informática estaban discutiendoacerca de cuál era la profesión más antigua del mundo.El médico señaló: “Bueno, en la Biblia se dice que Dios creó a Eva deuna costilla que le quitó a Adán. Evidentemente, esto requirió cirugía, ypor eso bien puedo afirmar que la mía es la profesión más antigua delmundo”.El ingeniero interrumpió y dijo: “Pero incluso antes, en el Génesis, sedice que Dios creó el orden de los cielos y la tierra a partir del caos. Estafue la primera y desde luego la más espectacular aplicación de laingeniería civil. Por tanto, querido doctor, está usted equivocado: la míaes la más antigua profesión del mundo”.La informática se reclinó en su silla, sonrió, y dijo tranquilamente: “Perobueno, ¿quién pensáis que creó el caos?”. “Análisis y diseño orientado a objetos” Grady Booch Laboratorio de Tecnología de Objetos I-2
  3. 3. Evolución de los lenguajes deAB programación A BS ST Lenguajes Id = Dir Mem. TR Cód.Inst.Simb. RA Máquina / Manip.Total de AC MacrosC Ensamblador Datos CI CÓ Id. Simb. Subrutinas FORTRAN IN Tipos Ó FuncionesO Oper. restring. NPE Registros DR Anidamiento PASCAL Tipos definidos EA SubprogramasC Gest. Din. Mem DIO Encapsulam. Tipo AN MODULA-2 T Octult. Inform. Abstracto deA ADA OL Espec - Impl Datos S Métodos Lenguajes Objetos Mensajes Orientados a Objetos Laboratorio de Tecnología de Objetos I-3
  4. 4. Evolución de los lenguajes deAB programación A BST SR Lenguajes Id = Dir Mem. TA Cód.Inst.Simb. R Máquina / Manip.Total deC Macros AC Ensamblador Datos CI CÓ Id. Simb.N Subrutinas FORTRAN I Tipos Ó Funciones NO Oper. restring.PE Registros DR Anidamiento PASCAL E Tipos definidosA SubprogramasC Gest. Din. Mem DI AO Encapsulam. Tipo TN MODULA-2 Octult. Inform. Abstracto de OA ADA SL Espec - Impl Datos Métodos Lenguajes Mensajes Orientados a Objetos Objetos COMPONENTES IDLs ASPECTOS Componentes Invocación remota Laboratorio de Tecnología de Objetos I-4
  5. 5. Análisis de los sistemas complejos• Organismos vivos: • Organizaciones: individuo multinacional sistemas compañías órganos divisiones tejidos delegaciones células oficinas locales Laboratorio de Tecnología de Objetos I-5
  6. 6. Análisis de sistemas reales• Los sistemas complejos suelen tener una naturaleza jerárquica:se pueden descomponer en partes que, a su vez, se descomponenen otras partes, etc. Cada parte se corresponde con un nivel deabstracción.• El funcionamiento de un sistema, a cada nivel, se deriva de laactividad colaboradora de sus partes en el nivel inferior.• Los sistemas jerárquicos normalmente están compuestos de unaspocas clases diferentes de subsistemas en distintas combinacionesy disposiciones.• La interacción entre subsistemas distintos suele ser pequeña encomparación con la interacción dentro de cada subsistema.Los sistemas jerárquicos se pueden analizar atendiendo a distintosenfoques: • la jerarquía estructural (es parte de ) y • la jerarquía de tipos (es un). Laboratorio de Tecnología de Objetos I-6
  7. 7. Diseño de sistemas de software• Cuando se diseña un sistema complejo de sw es esencial darleuna estructura jerárquica descomponiéndolo en partes.• Esta organización puede hacerse desde distintos puntos de vista:p.e. atendiendo al flujo de datos o a la interacción entre objetos.• La descomposición algorítmica entiende cada sistema como unproceso global y tiende a descomponerlo en subprocesos queintercambian datos, fijando de forma rígida la estructura decontrol (programas con estructura de árbol).• La descomposición en objetos entiende cada sistema como unconjunto de agentes autónomos que colaboran para llevar a caboun comportamiento de nivel superior (programas con estructurade grafo). Laboratorio de Tecnología de Objetos I-7
  8. 8. Diseño orientado a objetos• El diseño orientado a objetos surge de la idea de traspasar a lossistemas de software la organización y el funcionamiento de lossistemas reales complejos (físicos, biológicos, sociales, ...).• La organización de los sistemas de software en objetos refleja elanálisis de • la jerarquía estructural (en la disposición de los objetos) y • la jerarquía de tipos (en la organización de las clases de objetos) de los sistemas reales complejos.• Esta organización es más fácil de mantener, es más versátil yadaptable a nuevas necesidades del mismo sistema y ademáspermite la reutilización de las clases de objetos por otros sistemas. Laboratorio de Tecnología de Objetos I-8
  9. 9. Calidad del Software• El propósito último de la Ingeniería del Software es encontrar modos de construir software de calidad.• La calidad de un sistema de software depende de un conjunto de factores: factores externos y factores internos.• Los factores externos son aquellos perceptibles por los usuarios y clientes.• Los factores internos son los perceptibles por los diseñadores e implementadores.• Los factores externos son los más importantes, pero sólo se pueden alcanzar si se atiende a los factores internos. Laboratorio de Tecnología de Objetos I-9
  10. 10. Factores externos• Corrección – Capacidad para realizar las tareas tal y como se definen en las especificaciones.• Eficiencia – Capacidad de requerir la menor cantidad posible de recursos (tiempo de procesador, espacio de memoria, ancho de banda, ...)• Robustez – Capacidad para reaccionar apropiadamente ante condiciones excepcionales.• Extensibilidad – Facilidad de adaptación a los cambios en la especificación.• Reutilización – Capacidad de aplicación en la construcción de sistemas muy diferentes.• Compatibilidad – Facilidad para interactuar con otros sistemas. Laboratorio de Tecnología de Objetos I-10
  11. 11. Factores internos• Los objetivos de extensibilidad, reutilización, e incluso los referentes a la fiabilidad (corrección y robustez) requieren arquitecturas flexibles para los sistemas de software.• Las arquitecturas flexibles se consiguen con componentes autónomos: módulos.• La modularidad, fijada mediante una serie de criterios, es uno de los factores internos más importantes . Laboratorio de Tecnología de Objetos I-11
  12. 12. Criterios de modularidad: condicionesDescomposición modular - si facilita la tarea de descomponer el problema en subproblemas menos complejos, interconectados mediante una estructura sencilla, y suficientemente independientes para permitir que el trabajo futuro pueda proseguir por separado en cada uno de ellos.Composición modular - si favorece la producción de elementos de software que se puedan combinar libremente para producir nuevos sistemas, en entornos diferentes de aquél en que fueron desarrollados.Comprensión - si ayuda a producir módulos fáciles de entender sin tener que reconocer los demás, o teniendo que examinar sólo unos pocos.Continuidad - si un pequeño cambio en la especificación de un problema provoca sólo cambios en un número muy reducido de módulos.Protección - si produce arquitecturas en las cuales el efecto de una situación anormal producida dentro de un módulo durante la ejecución queda confinado a dicho módulo o se propaga sólo a unos pocos vecinos. Laboratorio de Tecnología de Objetos I-12
  13. 13. Principios para asegurar la modularidadUnidad modular lingüística – Los módulos deben corresponderse con unidades sintácticas del lenguaje utilizado.Interfaces explícitas – Las interfaces deben ser públicas y claras.Ocultación de información – El diseñador de cada módulo debe poder seleccionar un subconjunto de propiedades del módulo como información oficial sobre dicho módulo para ponerla a disposición de los autores de módulos clientes.Pocas interfaces – Cada módulo debe comunicarse con el menor número posible de módulos.Interfaces pequeñas – Los módulos que se comunican deben intercambiar la menor información posible. Laboratorio de Tecnología de Objetos I-13
  14. 14. Factores, criterios y principios de calidad del Software FACTORES CRITERIOS Interfaces Explícitas P COMPATIBILIDAD DESCOMPOSICIÓN DESCOMPOSICIÓN R COMPATIBILIDAD Unidad I Modular CORRECCIÓN Descomposición COMPOSICIÓN COMPOSICIÓN Lingüíst N CORRECCIÓN y C Refinamientos Ocultación Informac. IROBUSTEZ COMPRENSIÓN COMPRENSIÓN ROBUSTEZ P Pocas Modularidad interfaces IREUTILIZACIÓN CONTINUIDAD CONTINUIDAD O REUTILIZACIÓN Interfaces pequeñas SEXTENSIBILIDAD EXTENSIBILIDAD PROTECCIÓN PROTECCIÓN Laboratorio de Tecnología de Objetos I-14
  15. 15. Conceptos básicos de la P.O.O. Clases y Objetos. Métodos y Mensajes. Herencia. Polimorfismo y Vinculación Dinámica. Clases abstractas. Clases genéricas. Laboratorio de Tecnología de Objetos I-15
  16. 16. Programación Orientada a los ObjetosSe basa en considerar un sistema de software como un universo de objetos quecolaboran en una tarea común intercambiando mensajes y en considerar, a suvez, cada objeto como otro universo de objetos, etc.Los programas se organizan como colecciones cooperativas de objetos, donde lacomputación se realiza mediante el envío de mensajes.Cada objeto es una abstracción dinámica de dato, instancia de una clase, quetiene: un comportamiento (dado por las operaciones que puede realizar: sus métodos), un estado (el valor almacenado en su estructura interna), y una identidad (invariante durante toda su existencia).Cada clase describe la implementación de un tipo abstracto de datos; fija elcomportamiento y el estado de sus instancias, y es miembro de una jerarquíaconstruida mediante una relación de herencia.La herencia es un orden parcial entre clases donde la precedencia representageneralización y la sucesión especialización. Se implementa mediante unmecanismo que facilita la construcción de clases por especialización heredandoatributos (estado y métodos) de las clases predecesoras en la jerarquía. Laboratorio de Tecnología de Objetos I-16
  17. 17. Clases y Objetos• CLASE = MÓDULO + TIPO Criterio de Modularización. Estado + Comportamiento. Entidad estática (en general).• OBJETO = Instancia de una CLASE Cada objeto tiene su propio estado. Cada objeto tiene un comportamiento que es común a todos los objetos de su clase. Entidad dinámica. Objeto vs. Clase Valor vs.Tipo Laboratorio de Tecnología de Objetos I-17
  18. 18. VEHÍCULO ANIMAL PUNTO (1, 3) (5, 2.5)FIGURA (2, 2) (2, 1) Laboratorio de Tecnología de Objetos I-18
  19. 19. Métodos y Mensajes• Métodos: definen el comportamiento de una clase y pueden o no comportar una respuesta Punto Estado x, y: double trasladar(a, b) Comportamiento distancia(pto)• Mensajes: se construyen asociando un método a un objeto (su destinatario)• Paso de mensajes Invocación de métodos obj.mens(args) mens(obj, args) (Punto) pto pto.trasladar(1, -1) x=12 y=32 Laboratorio de Tecnología de Objetos I-19
  20. 20. Sobre el paso de mensajes• Los mensajes que se envían a un determinado objeto deben “corresponderse” con los métodos que hay definidos en su clase.• Esta correspondencia se debe reflejar en la signatura del método: nombre, argumentos y sus tipos.• En los lenguajes orientados a objetos con comprobación de tipos, la emisión de un mensaje a un objeto que no tiene definido el método correspondiente se detecta en tiempo de compilación.• Si el lenguaje no realiza comprobación de tipos, los errores en tiempo de ejecución pueden ser inesperados. Laboratorio de Tecnología de Objetos I-20
  21. 21. Java Definición de clase en Java VARIABLES DE ESTADO class Punto { private double x, y; CONSTRUCTORES public Punto() { x = y = 0; } public Punto(double a, double b) { x = a; y = b; } public double abscisa() {return x;}“Punto.java” public double ordenada() {return y;} public void abscisa(double a){ x = a; } MÉTODOS public void ordenada(double b){ y = b; } public void trasladar(double a, double b) { x += a; y += b; } public double distancia(Punto pto) { return Math.sqrt(Math.pow(x - pto.x, 2) + Math.pow(y - pto.y, 2)); } } Laboratorio de Tecnología de Objetos I-21
  22. 22. C++ Definición de clase en C++ VARIABLES DE ESTADO (DATOS MIEMBRO) class Punto{ double x, y; public: CONSTRUCTORES Punto(){x = y = 0);}“Punto.hpp” Punto(double a, double b): x(a),y(b) {} double abscisa() {return x;} double ordenada() {return y;} void abscisa(double a){ x = a; } void ordenada(double b){ y = b; } void trasladar(double a, double b); double distancia(Punto&); }; MÉTODOS (FUNCIONES MIEMBRO) Laboratorio de Tecnología de Objetos I-22
  23. 23. C++ #include “Punto.hpp” #include <math.h> void Punto::trasladar(double a, double b) { x += a; y += b;“Punto.cpp” }; double Punto::distancia(Punto& pto){ return sqrt(pow(x - pto.x, 2) + pow(y – pto.y, 2)); }; Laboratorio de Tecnología de Objetos I-23
  24. 24. class Punto ATRIBUTOS Eiffelcreation origen, nuevo;feature x, y: REAL; CONSTRUCTORES origen is do x := 0; y := 0 end; nuevo(a, b: REAL) is do x := a; y := b end; abscisa(a: REAL) is do x := a end; ordenada(b: REAL) is do y := b end; trasladar(a, b: REAL) is do x := x + a; y := y + b end; distancia(pto: Punto): REAL is do Result := sqrt(pow(x - pto.x, 2) + pow(y - pto.y, 2)) endend Punto; RUTINAS Laboratorio de Tecnología de Objetos I-24
  25. 25. SmalltalkObject subclass: #Punto instanceVariableNames: ‘ x y ’ classVariableNames: " poolDictionaries: " Métodos de claseorigen ^(self new) abscisa: 0; ordenada: 0x: unNum y: otroNum ^(self origen) tras: unNum ladar: otroNumabscisa ^xordenada ^yabscisa: unNum x := unNumordenada: unNum y := unNum Métodos de instanciatras: unNum ladar: otroNum x := x + unNum. y := y + otroNumdistancia: unPunto ^ ((x - unPunto abscisa) squared + (y - unPunto ordenada) squared) sqrt Laboratorio de Tecnología de Objetos I-25
  26. 26. Clases vs. tipos abstractos de datosUna clase en un LOO se puede ver como una posibleimplementación de un tipo abstracto de datos, donde: • Los constructores se corresponden con métodos de creación de instancias. • Las funciones selectoras se corresponden con variables de estado o con métodos que devuelven algún resultado. • Las funciones de transformación se corresponden con métodos que no devuelven valor (devuelven void, en C++ y Java, o son procedimientos, en Eiffel), en los que el argumento que representa el valor del tad que se transforma se omite. Laboratorio de Tecnología de Objetos I-26
  27. 27. El tad Pila en Maudefmod PILA [X :: TRIV] is sort Pila[X] PilaNv[X] . subsort PilaNv[X] < Pila[X] . op pilaVacía : -> Pila[X] [ctor] . op apilar : Elt.X Pila[X] -> PilaNv[X] [ctor] . op desapilar : PilaNv[X] -> Pila[X] . op cima : PilaNv[X] -> Elt.X . var N : Elt.X . var P : Pila[X] . eq desapilar(apilar(N, P)) = P . eq cima(apilar(N, P)) = N .endfm Laboratorio de Tecnología de Objetos I-27
  28. 28. Una clase Pila en Javaclass Pila<T>{ ... // Parte privada con los detalles de implementación ... public Pila() { … } public T cima() { … } public void apilar(T elem) { … } public void desapilar() { … } ...} Laboratorio de Tecnología de Objetos I-28
  29. 29. Herencia FiguraCerrada• Posibilidad de reutilizar código• Algo más que: incluir ficheros, o Polígono Elipse importar módulos• Distintos tipos de herencia: simple / múltiple Pentágono Cuadrilátero Círculo estricta / no estricta selectiva / no selectiva de implementación / de interfaz Rectángulo Rombo Laboratorio de Tecnología de Objetos I-29
  30. 30. HerenciaPadres / Ascendiente / Superclases • Una subclase hereda (dispone de) los atributos y métodos de la superclase, y Exception puede añadir otros nuevos. • La subclase puede modificar el comportamiento heredado (p. e., redefiniendo algún método heredado) . IOException • La herencia es transitiva. • Los objetos de una clase que hereda deHijos / Descendientes / otra pueden verse como objetos de esta Subclases última (polimorfismo de datos). Laboratorio de Tecnología de Objetos I-30
  31. 31. Javaclass Partícula extends Punto { protected double masa; final static double G = 6.67e-11; public Partícula(double m) { super(0,0); masa = m; } public Partícula(double a, double b, double m) { super(a,b); masa = m; } public void masa(double m) {masa = m; } public double masa() {return masa; } public double atracción(Partícula part) { double d = this.distancia(part); return G * masa * part.masa() / (d*d); }} Laboratorio de Tecnología de Objetos I-31
  32. 32. C++ class Particula: public Punto { protected double masa; const double G = 6.67e-11; public: Particula(double m): Punto()“Particula.hpp” { masa = m; }; Particula(double a, double b, double m): Punto(a, b) { masa = m; }; void masa(double); double masa(); double atraccion(Particula&); }; Laboratorio de Tecnología de Objetos I-32
  33. 33. C++ #include “Partic.hpp” void Particula::masa(double m) { masa = m; }“Particula.cpp” double Particula::masa() { return masa; } double Particula::atraccion(Particula& part){ double d = this -> distancia(part); return G *masa* part.masa() / (d*d); } Laboratorio de Tecnología de Objetos I-33
  34. 34. Eiffelclass Particulainherits Puntocreation nueva;feature masa: REAL; nueva(a, b, m: REAL) is do x := a; y := b; masa := m end; masa(m: REAL) is do masa := m end; atraccion(part: Particula): REAL is do d := Current.distancia(part); Result := G*masa*part.masa/(d*d) endend Particula; Laboratorio de Tecnología de Objetos I-34
  35. 35. SmalltalkPunto subclass: #Particula instanceVariableNames: ‘ masa ’ classVariableNames: " poolDictionaries: "x: abs y: ord masa: mas ^(self x: abs y: ord) masa: masmasa ^masamasa: unNum masa := unNumatraccion: unaPart ^ G * masa * (unaPart masa) / ((self distancia: unaPart) squared) Laboratorio de Tecnología de Objetos I-35
  36. 36. Herencia estricta y no estricta• Cuando no se admite la redefinición de un método en el contexto de la clase heredera, la herencia se denomina estricta.• En herencia no estricta las clases herederas pueden heredar un método o servicio y luego, redefinirlo modificando su implementación. Suma de distancias entre Polígono puntos consecutivos Cuadrado lado: float perímetro( ): double Resultado = 4 * lado perímetro( ): double • Todos los lenguajes comerciales permiten redefinición (herencia no estricta) por defecto. • Sin embargo, en Java se pueden declarar métodos y atributos como final, impidiendo que sus herederos los redefinan. Laboratorio de Tecnología de Objetos I-36
  37. 37. Herencia selectiva y no selectiva• Cuando existe alguna posibilidad de seleccionar sólo parte de las características heredadas, rechazando el resto hablamos de herencia selectiva.• Si, por el contrario, al heredar una clase no es posible descartar ninguno de sus elementos, se trata de herencia no selectiva.• En general, lo habitual es encontrar herencia no selectiva, aunque hay lenguajes, como Eiffel, en los que existen algunas variantes de este mecanismo. Laboratorio de Tecnología de Objetos I-37
  38. 38. Herencia simple y múltiple• Existen lenguajes con herencia múltiple, lo que permite que una clase reutilice la funcionalidad ofrecida por varias clases. Pensionista TrabajadorActivo MedioPensionista• Lenguajes con herencia múltiple: C++, Eiffel• Lenguajes con herencia simple: Java, Smalltalk Laboratorio de Tecnología de Objetos I-38
  39. 39. Herencia múltiple: ambigüedades• La herencia múltiple produce el problema de la herencia repetida. Pensionista TrabajadorActivo pensión salario calcularIRPF( ): short calcularIRPF( ): short elAbuelo: MedioPensionista calcularIRPF( )• Conflicto por ambigüedad (atributos o métodos) Laboratorio de Tecnología de Objetos I-39
  40. 40. Herencia múltiple: duplicación de atributos• Se produce en lenguajes, como C++, en los que la reserva de memoria al crear instancias se realiza sin tener en cuenta el grafo de herencia: Persona nombre:String elAbuelo: MedioPensionista ¡! Pensionista::nombre Pensionista TrabajadorActivo pensión: Float salario: Float TrabajadorActivo::nombre pensión salario MedioPensionista Laboratorio de Tecnología de Objetos I-40
  41. 41. Herencia simple: redefinición• La herencia simple puede permitir la redefinición de métodos y atributos.• En tales casos se produce una situación de ambigüedad a la hora de invocar un método o un atributo redefinido.• Estas situaciones se suelen resolver recorriendo el árbol de la herencia hacia arriba. Laboratorio de Tecnología de Objetos I-41
  42. 42. Resolución de ambigüedades• Las ambigüedades en herencia simple se producen por la redefinición cuando en el contexto de un objeto hay dos posibles definiciones para resolver un método y se resuelven aplicando la más próxima a la clase a la que pertenece el objeto (recorriendo el árbol de herencia hacia arriba).• El problema de las ambigüedades en los métodos producidas por la herencia múltiple surge por la necesidad de localizar la definición adecuada en un grafo, en lugar de en un árbol (como ocurre en herencia simple).• En el caso de la herencia múltiple, no se encuentran soluciones adecuadas a todas las situaciones basadas en recorridos del grafo Primero en profundidad (de izquierda a derecha, o de derecha a izquierda) Primero en amplitud (de izquierda a derecha, o de derecha a izquierda) Laboratorio de Tecnología de Objetos I-42
  43. 43. Soluciones a la herencia repetida• C++: Duplicación de atributos: herencia virtual Ambigüedades: operador de ámbito• Eiffel: Ambigüedades: renombramiento de métodos y/o atributos• Smalltalk: No hay herencia múltiple• Java: Herencia de interfaces Laboratorio de Tecnología de Objetos I-43
  44. 44. Polimorfismo (sobre los datos)• Un lenguaje tiene capacidad polimórfica sobre los datos cuando una variable declarada de un tipo (o clase) –tipo estático– determinado puede hacer referencia en tiempo de ejecución a valores (objetos) de tipo (clase) distinto –tipo dinámico –.• La capacidad polimórfica en los lenguajes orientados a objetos sólo se aplica a las referencias a objetos y, normalmente, está restringida por la relación de herencia: el tipo dinámico debe ser descendiente del tipo estático. En Java, Eiffel y Smalltalk, cualquier variable es una referencia a un objeto. En C++ se distingue entre objetos y punteros a objetos. El polimorfismo sólo se puede aplicar a estos últimos. En Smalltalk, como no hay declaración de tipos, se puede pensar en un polimorfismo total. Laboratorio de Tecnología de Objetos I-44
  45. 45. Polimorfismo (sobre los datos)• Una variable puede referirse a objetos de clases distintas de la que se ha declarado. Esto afecta a: Las asignaciones explícitas entre variables Los receptores de mensajes Los parámetros de mensajes Los resultados de mensajes.• La restricción dada por la herencia permite construir estructuras con elementos de naturaleza distinta, pero con un comportamiento común: Laboratorio de Tecnología de Objetos I-45
  46. 46. JavaPunto pto = new Punto();Partícula part = new Partícula(2);pto = part; // Asignación correctapart = pto; // Asignación incorrectapart = (Partícula)pto; // Peligroso part pto (Partícula) x=0 (Partícula) (Punto) m = ?? y=0 x=0 x=0 m=2 y=0 y=0 Laboratorio de Tecnología de Objetos I-46
  47. 47. C++Punto *ppto = new Punto();Particula *ppart = new Partícula(2);ppto = ppart; // Asignación correctappart = ppto; // Asignación incorrectappart = (Partícula*)ppto; // Más peligroso que en Java ppart ppto (Particula) (Particula) x=0 (Punto) m = ?? y=0 x=0 x=0 m=2 y=0 y=0 Laboratorio de Tecnología de Objetos I-47
  48. 48. Vinculación dinámica• La vinculación dinámica resulta el complemento indispensable del polimorfismo sobre los datos, y consiste en que: la invocación del método que ha de resolver un mensaje se retrasa al tiempo de ejecución, y se hace depender del tipo dinámico del objeto receptor. Polígono :Polígono perímetro{^...} obj : Polígono Cuadrado :Cuadrado perím etro? perímetro{^4*lado}• En general, todos los lenguajes orientados a objetos establecen por defecto un mecanismo de vinculación dinámica para resolver los mensajes. No obstante, algunos de ellos (C++) necesitan etiquetar de forma explícita las funciones que han de resolverse dinámicamente: funciones virtual. Laboratorio de Tecnología de Objetos I-48
  49. 49. Javaclass PuntoAcotado extends Punto { private Punto esquinaI, esquinaD; public PuntoAcotado(){…} public PuntoAcotado(Punto eI, Punto eD){…} public double ancho(){…} public double alto(){…} public void trasladar(double a, double b){ double excesoX, excesoY; excesoX = (abscisa()+a-esquinaI.abscisa()) %ancho(); excesoY = (ordenada()+b-esquinaI.ordenada()) %alto(); abscisa(excesoX + (excesoX>0 ? esquinaI.abscisa() : esquinaD.abscisa())); ordenada(excesoY + (excesoY>0 ? esquinaI.ordenada() : esquinaD.ordenada())); }} Laboratorio de Tecnología de Objetos I-49
  50. 50. Java PuntoAcotado pacVI class Punto { x==01 xN private double x, y; y==01 yC public Punto(){…} ptoU …L public void trasladar(double a, double b) traAC {x += a; y += b; } slaI public double distancia(Punto p){…}Ó }; darN (3,D Punto eI = new Punto(0,0);I 3) Punto eD = new Punto(2,2);NÁ Punto pto;M PuntoAcotado pac = new PuntoAcotado(eI,eD);I pto = pac;CA pto.trasladar(3,3); Laboratorio de Tecnología de Objetos I-50
  51. 51. C++class PuntoAcotado: public Punto { Punto esquinaI,esquinaD; public: PuntoAcotado(Punto eI, Punto eD); double ancho(); double alto(); void trasladar(double a, double b);};void PuntoAcotado::trasladar(double a, double b) { double excesoX, excesoY; excesoX = (abscisa()+a-esquinaI.abscisa()) % ancho(); excesoY = (ordenada()+b-esquinaI.ordenada()) % alto(); if (excesoX > 0) incX = esquinaI.abscisa(); else incX = esquinaD.abscisa(); if (excesoY > 0) incY = esquinaI.ordenada(); else incY = esquinaD.ordenada(); abscisa(excesoX + incX); ordenada(excesoY + incY);} Laboratorio de Tecnología de Objetos I-51
  52. 52. C++ class Punto { PuntoAcotado ppacV double x, y; x= 0 3I public: y= 0 3N Punto();C Punto(double a, double b); pptoU ~Punto();L … traA void trasladar(double a, double b);C double distancia(Punto& pp); slaI };Ó darN Punto *eI = new Punto(0,0); (3,E Punto *eD = new Punto(2,2);S 3)TÁ Punto *ppto;T PuntoAcotado *ppart = new PuntoAcotado(eI,eD);I ppto = ppac;CA ppto->trasladar(3,3); Laboratorio de Tecnología de Objetos I-52
  53. 53. C++ class Punto { PuntoAcotado ppacV float x, y; x= 0 1I public: y= 0 1N Punto();C Punto(double a, double b); pptoU ~Punto();L … traA virtual void trasladar(double a, double b);C double distancia(Punto& pp); slaI };Ó darN Punto *eI = new Punto(0,0); (3,D Punto *eD = new Punto(2,2);I 3)NÁ Punto *ppto;M PuntoAcotado *ppart = new PuntoAcotado(eI,eD);I ppto = ppac;CA ppto->trasladar(3,3); Laboratorio de Tecnología de Objetos I-53
  54. 54. Composición/agregación• Además de la relación de herencia, existe otra relación básica entre clases, denominada “composición”.• Mientras que la herencia establece una relación de tipo “es-un”, la composición responde a una relación de tipo “está compuesto de”.• Así, por ejemplo, una partícula es un punto (con masa), mientras que un segmento está compuesto por dos puntos (origen y extremo) Partícula Punto origen Segmento masa: double x, y: double atracción(part) trasladar(a, b) extremo trasladar(a, b) distancia(pto) longitud() Laboratorio de Tecnología de Objetos I-54
  55. 55. class Segmento { private Punto origen, extremo; public Segmento(double x1, double y1, double x2, double y2) { origen = new Punto(x1, y1); extremo = new Punto(x2, y2); } ... // Otros métodos public double longitud() { return origen.distancia(extremo); }} Laboratorio de Tecnología de Objetos I-55
  56. 56. Ejemplo de análisis O.O.Vuelta ciclista por etapas: Laboratorio de Tecnología de Objetos I-56
  57. 57. Clases abstractas• Clases con funciones sin implementar funciones abstractas en Java funciones virtuales puras en C++ rutinas “deferred” en Eiffel métodos “implementedBySubclass” en Smalltalk• No es posible crear instancias (objetos)• Se puede declarar variables (que se referirán, en tiempo de ejecución, a objetos de clases descendientes) punteros a objetos en C++ Laboratorio de Tecnología de Objetos I-57
  58. 58. Java CLASE ABSTRACTAabstract class Polígono { private Punto[] vértices; public void trasladar(double a, double b){ for (int i = 0; i < vértices.length; i++) vértices[i].trasladar(a, b); } public double perímetro() { double per = 0; for (int i = 1; i < vértices.length; i++) per = per + vértices[i-1].distancia(vértices[i]); return per + vértices[0].distancia(vértices[vértices.length]); } abstract public double área();}; MÉTODO ABSTRACTO Polígono pol = new Polígono(); Laboratorio de Tecnología de Objetos I-58
  59. 59. Abstracción/concreción• Las clases abstractas definen un protocolo común a una jerarquía de clases.• Se concretan mediante la herencia.• Obligan a sus subclases a implementar los métodos abstractos (de lo contrario, las subclases siguen siendo abstractas).En Java, también se pueden definir interfaces• Sin estado y con todos los métodos sin implementar.• Se concretan mediante implementación.• Una clase puede implementar varias interfaces. Laboratorio de Tecnología de Objetos I-59
  60. 60. Clases genéricas• Las clases genéricas responden a patrones comunes de comportamiento.• Permiten definir las operaciones de una clase de forma independiente del tipo de datos que manipula.• Clases y/o Tipos como parámetros (con o sin restricciones).• Instanciación directa. Pila TipoBásico <Polígono> Pila cima: TipoBásico apilar(TipoBásico): void desapilar(): void Pila esVacía: boolean <int> Laboratorio de Tecnología de Objetos I-60
  61. 61. Formas de genericidad• Genericidad basada en el polimorfismo debido a la herencia. El programador debe controlar los tipos de las componentes . El control se retrasa al tiempo de ejecución.• Genericidad basada en el uso de parámetros (clases, tipos básicos, valores, etc.) El control del tipo de las componentes se realiza en tiempo de compilación.• Los lenguajes orientados a objetos permiten la definición de clases genéricas mediante variaciones de estos mecanismos: Eiffel (clases parametrizadas) C++ (templates que simulan clases parametrizadas) Java (basada en la jerarquía de clases y en las interfaces, y a partir de JDK 1.5 se permiten clases parametrizadas con clases o interfaces). Smalltalk (no tiene sentido al no ser un lenguaje con tipos) Laboratorio de Tecnología de Objetos I-61
  62. 62. Persistencia• Durante la ejecución de un programa o.o. los objetos se van creando y destruyendo.• La persistencia se refiere a la capacidad de ciertos objetos que perduran mas allá de la vida de la aplicación que los crea.• Permite que un mismo objeto sea utilizado por diferentes aplicaciones manteniendo su identidad y relaciones.• Es muy útil en aplicaciones de: Base de datos Movilidad Etc. Laboratorio de Tecnología de Objetos I-62

×