Your SlideShare is downloading. ×
0
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Programacion orientadaalobjeto
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Programacion orientadaalobjeto

128

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
128
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
3
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 1 Sun Educación México Programacion Orientada al Objeto
  • 2. 2 Sun Educación México Herencia • Uno de los mecanismos fundamentales para la reutilización de código en la POO es la herencia. • Permite crear nuevas clases derivadas desde una ya existente. • La clase nueva (se conoce como subclase, clase derivada, clase hija) hereda todos los miembros de la otra clase (se conoce como superclase, clase base, clase padre). • La subclase puede agregar nuevos comportamientos y propiedades, y bajo ciertas circunstancias modificar el comportamiento heredado. • En Java, la herencia es usada para extender clases, por ejemplo agregar nuevas variables y métodos, y modificar los miembros heredados
  • 3. 3 Sun Educación México Herencia • Usando modificadores apropiados, la superclase puede poner ciertas restricciones sobre los miembros heredados que sean accedidos por las subclases. • La súper clase es especificada usando la cláusula extends en el encabezado de la subclase. • La definición de la subclase solo especifica miembros adicionales o modificados, todo el resto se hereda. • Si no se especifica la cláusula extends implícitamente la clase hereda de java.lang.Object.
  • 4. 4 Sun Educación México Herencia • Una clase en Java solo puede extender de una clase. > Esto se conoce como herencia simple o lineal. • La relación de herencia puede verse como una jerarquía de herencias. > Clases que se encuentren mas arriba en la jerarquía, son más generalizadas. > Clases que se encuentren mas abajo en la jerarquía, son más especializadas. • La herencia define una relación “Es Un” (conocida como relación superclase-subclase) entre una superclase y subclase. > Esto permite que una subclase use todo lo que un objeto de la superclase puede usar.
  • 5. 5 Sun Educación México Propiedades de la Herencia • La herencia es transitiva, si B extiende de A y C extiende de B, entonces C extiende de A. • Otro mecanismo fundamental de re-uso de código es la agregación. • Se define como una relación “Tiene Un” entre una instancia de una clase que la compone. • Solo son referencias a otros objetos.
  • 6. 6 Sun Educación México Conceptos de POO • Heredando desde la superclase > La clase String posee un método getClass() heredado desde su superclase Object, por lo tanto un objeto String puede invocarlo directamente, como objString.getClass(); • Extiendo la superclase > La subclase String define un método length(), el cual no pertenece a la superclase Object, con lo cual estamos extendiendo la clase Object. • Moldeo hacia arriba (UpCasting) > Una referencia a subclase puede ser asignada a una referencia a superclase. – Por que la subclase puede usar todo de superclase. – Esto se conoce como moldeo hacia arriba. Son asignadas hacia arriba en la jerarquía de herencia.
  • 7. 7 Sun Educación México Conceptos de POO • Sobreescritura de métodos > La sobreescritura de métodos se produce cuando redefinimos un método con igual firma y el mismo tipo de retorno. • Polimorfismo y enlace dinámico de métodos > La invocación de un método no necesariamente invoca al metodote definido en la clase. > La invocación depende del objeto actual denotado por la referencia que posee en tiempo de ejecución. – El método actual es determinado por la selección dinámica de métodos. • La capacidad de que una referencia a una superclase pueda contener objetos de la propia clase o de subclases en tiempo de ejecución, se conoce como polimorfismo.
  • 8. 8 Sun Educación México Moldeo hacia abajo (DownCasting) • Moldear el valor de una referencia de una superclase a una subclase se conoce como moldeo hacia abajo (downcasting) y requiere in moldeo explicito. • Ejemplo: > Object refObjeto = new Object(); > String refString = (String) refObjeto; • El moldeo asegura la correcta relación entre los tipos fuente y destino en tiempo de compilación. > Pero el moldeo puede ser inválido en tiempo de ejecución. En este caso se producirá la excepción ClassCastException. > Se puede utilizar el operador instanceof antes de realiza el moldeo, para asegurar que el moldeo se valido.
  • 9. 9 Sun Educación México Sobrescritura de métodos • Bajo ciertas circunstancias, una subclase puede sobrescribir métodos no estáticos heredados desde la superclase. • Cuando el método es invocado en un objeto de la subclase, esta nueva definición del método de la subclase es ejecutado. • Los siguientes aspectos acerca de la sobrescritura de métodos deben considerarse: > La nueva definición del método debe tener la misma firma (nombre del método y parámetros) y el mismo tipo de retorno. – Si la firma no es la misma, se considera un método nuevo e independiente.
  • 10. 10 Sun Educación México Reglas de Sobreescritura • La nueva definición del método, adicionalmente puede quitarle accesibilidad al método, pero no aumentarle. • La nueva definición del método en la subclase solo puede especificar todos o ningún, o un subconjunto de excepciones especificadas en la cláusula throws del método sobrescrito en la superclase. • Si los parámetros en el método sobrescrito son final puede no considerarse, ya que la firma del método solo considera tipos y orden.
  • 11. 11 Sun Educación México Reglas de Sobreescritura • Estos aspectos también aplican a las interfaces, donde una subinterface puede sobre escribir prototipos de métodos desde superinterfaces. • Cualquier método final, estático o privado no puede ser sobrescrito. > Final, por tratarse de una limitación implícita. > Privado, al no ser visible en la clase que hija, no es posible la sobre escritura. > Estático, en la practica la sobre escritura es posible (no hay error de compilación), pero “semánticamente” la sobre escritura no existe, ya que los métodos estáticos pertenecen al tipo (clase o interfaz), la invocación dinámica de métodos no tiene efecto. – La única restricción dice relación con la sobre escritura de un método “estático” a “no estático” o viceversa.
  • 12. 12 Sun Educación México Ocultamiento de variables • Una subclase no puede sobrescribir una variable miembro de la superclase, pero si puede ocultarla. > Definiendo una variable con el mismo nombre de la variable de la superclase. > En este caso no se puede acceder directamente utilizando el nombre de la subclase. –Para hacer esto se debe utilizar la palabra clave super, la cual permite acceder a los miembros de la superclase, incluidas las variables ocultas. > Si la variable oculta es estática se puede acceder utilizando el nombre de la clase.
  • 13. 13 Sun Educación México Consideraciones • Existe una distinción importante entre el acceso un método ó a una variable de instancia de un objeto. > Cuando se accede a un método se usa la referencia actual, en ese momento se determina la implementación del método debe ejecutarse. > Cuando se accede a una variable de instancia se utiliza tu tipo, en otras palabras la clase en la cual fue definida la referencia.
  • 14. 14 Sun Educación México Sobrescritura v/s Sobrecarga • No se debe confundir la sobrescritura con la sobrecarga • La sobrescritura requiere la misma firma y el mismo tipo de retorno para el método. > Además el método original es heredado desde la superclase. • La sobrecarga requiere diferentes firmas pero nombre del método debe ser el mismo. • Por lo tanto los parámetros deben ser distintos en tipo, orden ó número. > Como el tipo de retorno no es parte de la firma, cambiar esto no es suficiente para sobrecargar métodos. • La resolución de métodos sobrecargados se realiza considerando el parámetro y se elige el método mas especificado.
  • 15. 15 Sun Educación México Referencia objeto super • Así como this es pasado explícitamente como parámetro a cualquier método de instancia (Ver sección 4.3) que denota al objeto del método que fue llamado, la palabra clave super hace referencia a la subclase. • Provee una referencia en el objeto actual como si fuera una instancia de la superclase, la cual puede ser utilizada para acceder a miembros, como por ejemplo: > Métodos sobrescritos > Variables ocultas • Al igual que this, super no puede ser utilizada como una referencia ordinaria, por ejemplo no se puede asignar el valor de otras referencias.
  • 16. 16 Sun Educación México Invocando Constructores • Los constructores no pueden ser sobrescritos. • Pueden ser sobrecargados, pero solo en la misma clase. • Java especifica que cuando se usa una llamada con this(), debe ser la primera instrucción en un constructor y solo puede ser usado en la definición de un constructor. • Después de la llamada a this() cualquier instrucción puede ser utilizada. • Esta última restricción se debe a que Java maneja la invocación del constructor de la superclase cada vez que un objeto de la subclase es creado.
  • 17. 17 Sun Educación México super() • El constructor super() es usado en el constructor de una subclase, para invocar al constructor. • Esto permite a la subclase influir en la inicialización del estado heredado cuando el objeto de la subclase es creado. • super() tiene las mismas restricciones que this(), en cuanto a su uso, como el hecho de ser la primera instrucción. • Esto implica que no pueden existir llamadas a this() y super() simultáneamente. > Nota: El cuerpo de los constructores es ejecutado en orden inverso, primero se ejecutan los constructores de las superclases y después las subclases, esto se conoce como encadenamiento de constructores.
  • 18. 18 Sun Educación México Consideraciones de Inicialización • Implícitamente se inserta como primera instrucción de un constructor una llamada a super(), en caso que esta no sea especificada. • Subclases que no declaren ningún constructor fallara su compilación si en la superclase no existe constructor por defecto. • Esto se produce por que el constructor por defecto (cuando no se especifica uno) realiza una llamada implicadamente al constructor por defecto de la superclase.
  • 19. 19 Sun Educación México Interfaces • Extendiendo clases usamos una implementación lineal de herencia creando un nuevo tipo (clase). • Una referencia de superclase puede denotar polimórficamente objetos del propio tipo y subclases de acuerdo a la jerarquía de herencia. • Debido a que las relaciones son lineales, no se permite la herencia múltiple, o sea que una clase herede de mas de una clase. • Es por esto que java provee las interfaces las cuales no solo permiten crear nuevos tipos de datos y usarlos polimórficamente, por que permiten la múltiple herencia de interfaces.
  • 20. 20 Sun Educación México Definiendo Interfaces • Una interfaz define un contrato a través de la definición de prototipos de métodos, pero no su definición. > Su sintaxis es: – <encabezado de la interfaz>{ – <cuerpo de la interfaz> – } • El encabezado de la interfaz, el nombre de la interfaz es precedido de la palabra clave interface. • El cuerpo de la interfaz usualmente contiene una lista de prototipos de métodos. • Una interfaz es abstracta por definición y no puede ser instanciada, por lo tanto no debe declararse abstract. • Todos los métodos de una interfaz son abstractos.
  • 21. 21 Sun Educación México Implementando una Interfaz • Cualquier clase puede elegir implementar, completa o parcialmente, una o más interfaces. > En una lista separada por comas usando la palabra clave implements en el encabezado de la clase. • Las clases que implementen interfaces introducen una herencia múltiple de interfaces a su actual implementación lineal de herencia. • Los métodos de la interfaz tendrán accesibilidad pública cuando sean implementados en la clase. • Una clase puede hacer una implementación parcial de los métodos de una interfaz. > En este caso la clase debe ser declara abstracta. • Nota: Los métodos en una interfaz no pueden declararse estáticos, ya que las interfaces establecen un contrato entre objetos.
  • 22. 22 Sun Educación México Extendiendo una Interfaz • Es una interfaz puede extender de otras interfaces, usando la cláusula extends. > Distinto a una clase una interfaz puede extender de múltiples interfaces. • No tienen una herencia lineal. • Existen tres diferencias con respecto a la herencia entre clases e interfaces: > Implementación lineal de herencia entre clases: – Una clase extiende a otra clase. > Implementación múltiple de herencia entre interfaces: – Una interfaz puede extender de otras interfaces. • Herencia múltiple entre interfaces y clases: – Una clase implementa muchas interfaces.
  • 23. 23 Sun Educación México Super Tipos • Una interfaz define un nuevo tipo. > Las interfaces no pueden ser instanciadas, pero se pueden declarar variables en ella. • Una clase que implementa una interfaz, permite que objetos de esa clase o de una subclase, puedan ser asignados a una variable de tipo de la interfaz. • Son llamadas súper tipos las interfaces que una clase implemente o de las clases que extiendan directa o indirectamente, > Un Super Tipo es un tipo de dato referencia. • Las interfaces con su cuerpo vació son usadas como marcadores, que representan algún comportamiento. • Ejemplo: EventListener, Serializable.
  • 24. 24 Sun Educación México Constantes en una Interfaz • Una interfaz puede definir constantes. • Estas constantes son consideradas públicas, estáticas y finales, sin necesidad de indicar estos modificadores. • Una constante de una interfaz puede ser accedida por un cliente (clase o interfaz) a través del nombre completo de la interfaz, sin necesidad de que el cliente extienda o implemente la interfaz. • Extender de una interfaz con constantes es análogo a extender de una clase que contenga variables estáticas. • Estas constantes pueden ser ocultadas por las subinterfaces. • En el caso de la múltiple herencia, cualquier nombre en conflicto puede ser resuelto, a través del nombre completo de la interfaz.
  • 25. 25 Sun Educación México Asignando, Pasando y Moldeando Ref. • Los arreglos son objetos, y los tipos como boolean[], Object[] implícitamente heredan jerárquicamente. • Las variables de un arreglo de tipo de referencias pueden ser declarados, y los arreglos de tipos de referencias pueden ser instanciados. • Los arreglos heredan de Object implícitamente y es una diferencia cuando hablamos de tipos primitivos o de referencia. • Los valores primitivos, pueden ser asignados, moldeados y pasados como argumentos. Para valores de tipo primitivos y tipo referencia, ocurren conversiones durante: > Asignaciones > Paso de parámetros > Moldeo explicito.
  • 26. 26 Sun Educación México Reglas de Conversion • La regla para los tipos de datos primitivos es que, conversiones de ensanchamiento son permitidas, pero de estrechamiento requieren un moldeo explicito. • La regla para los tipos de datos de referencia es que las conversiones “hacia arriba” están permitidas (upcasting), pero “hacia abajo” (downcasting) requieren un moldeo explicito.
  • 27. 27 Sun Educación México Conversiones en la Asignación de Referencias • Asignaciones de referencias son generalmente permitidas “hacia arriba” en la jerarquía de herencia, con una conversión implícita del tipo de referencia “fuente” al tipo de referencia “destino”. • La resultante de esto es la creación de nuevo “alias” para el objeto referenciado por el tipo “fuente”. • La regla para la asignación de referencias es la siguiente: > Si “fuente” es de “tipo clase”: – El tipo “destino” es una superclase del tipo “fuente”. – El tipo “destino” es una interfaz implementada por el tipo “fuente”.
  • 28. 28 Sun Educación México Continuación... • Si “fuente” es de “tipo interfaz”: > Si “destino” es un objeto. > Si “destino” es una superinterfaz de la subinterfaz “fuente”. • Si “fuente” es de tipo arreglo: > Si “destino” es un objeto. > Si “destino” es un tipo de arreglo, donde el tipo de elementos de “fuente” puede ser convertido al tipo “destino”.
  • 29. 29 Sun Educación México Conversiones en Paso de Parámetros • Las reglas para la asignación de referencias también aplican a la conversión en el paso de parámetros. • El fundamento de esto es que los parámetros en Java son pasados por valor, por lo tanto requiere que el parámetro actual sea asignable (de tipo compatible) al parámetro formal. • Las reglas de conversión en el paso de parámetros son muy útiles a la hora de crear tipos de datos genéricos a través de los cuales se puedan manejar objetos de tipos arbitrarios.
  • 30. 30 Sun Educación México Moldeo de Referencias y instanceof • La expresión para moldear una <referencia> de <tipo fuente> a <tipo destino> tiene la siguiente sintaxis: > (<expresión de tipo>) <referencia> • El operador binario instanceof tiene la siguiente sintaxis: > <referencia> instanceof <tipo destino> • El operador instanceof devuelve un valor verdadero si el operando de la izquierda puede ser moldeado al operando de la derecha. > En tiempo de compilación revisa si la referencia de <referencia> puede denotar objetos de la clase (ó subclase) <tipo destino>. > En tiempo de ejecución revisa que la referencia actual sea de tipo compatible con <tipo destino>
  • 31. 31 Sun Educación México Conversión de Tipo Clase e Interface • Referencias de tipo interfaz pueden ser declaradas, y denotan objetos de clases que implementan dicha interfaz. > Considérese como un ejemplo de “upcasting” • Para convertir una referencia de tipo interfaz a un tipo de clase que implementa la interfaz es necesario un moldeo explicito. > Esto seria un “downcasting”. > Ejemplo: > public class Instanceof1 { – public static void main (String args[]) { • Motorizado iMotorizado = new Vehiculo(); //Downcasting – Vehiculo vehiculo = (Vehiculo) iMotorizado; // Upcasting – } > }
  • 32. 32 Sun Educación México • Al usar la referencia iMotorizado solo podemos invocar a los métodos declarados en la interfaz. • Ejemplo: > Motorizado iMotorizado = new Vehiculo(); // Downcasting > Vehiculo vehiculo = (Vehiculo) iMotorizado ; // Upcasting > iMotorizado.acelerar(); // Ok. > iMotorizado.activarAlarma(); // Error. • Al usar la referencia iMotorizado solo podemos invocar a los métodos declarados en la interfaz.
  • 33. 33 Sun Educación México Polimorfismo y Selección Dinámica de Métodos • El objeto al cual denota una referencia no puede ser determinado en tiempo de compilación. • El polimorfismo permite a una referencia denotar diferentes objetos según la jerarquía de herencia en diferentes tiempos durante la ejecución. • Como ejemplo podemos considerar a una superclase que puede denotar a objetos de alguna subclase. > También una interfaz puede denotar objetos de clases que implementen la interfaz
  • 34. 34 Sun Educación México Polimorfismo y Selección Dinámica de Métodos • Cuando un método es invocado a través de una referencia, la definición actual del método que es ejecutada se determina por: > La clase del método al cual corresponde la referencia en tiempo de ejecución. > La firma del método. > Esto se conoce como selección dinámica de métodos. • El polimorfismo y la selección dinámica de métodos es un poderoso paradigma de programación, el cual simplifica definiciones, incentiva el desacoplamiento de objetos y soporta el cambio de asociaciones entre objetos en tiempo de ejecución.
  • 35. 35 Sun Educación México Encapsulación • Las propiedades y comportamiento de un objeto se encuentran encapsulados dentro de el. • Los servicios que ofrece a los clientes comprenden un contrato. • Solo el contrato definido por el objeto es visible a los clientes. • La implementación de las propiedades y/o comportamiento no le compete a los clientes. • La encapsulación reduce la complejidad, ya que esta se encuentra oculta dentro del objeto.
  • 36. 36 Sun Educación México Agregación • La agregación dice relación con la inclusión de un objeto dentro de otro. • Es una decisión de diseño crucial usar herencia o agregación. • Una buena estrategia de diseño consiste en usar herencia solo si la relación es del tipo “es un” unívocamente mantenido a través de la vida del objeto, en otro caso es conveniente usar agregación. • Un papel o cargo (role) puede ser confundido con una relación “es un”. > Ejemplo: Dada la clase Empleado no es una buena idea de diseño modelar los cargos (Gerente, Ingeniero) como una relación “es un” a través de herencia si estos cambian dinámicamente. Un cambio en el cargo involucra la creación de un nuevo objeto cada vez que esto suceda.
  • 37. 37 Sun Educación México Cohesion • Es una medida que indica el grado en el que una clase se enfoca en sus responsabilidades. > Alta – Una clase diseñada para realizar un tarea especifica y precisa. Los metodos son faciles de comprender. > Baja – Una clase diseñada para realizar muchas tareas. Los metodos son dificiles de entender y mantener. • En terminos de diseño, es mejor una Alta cohesion.
  • 38. 38 Sun Educación México Acoplamiento • Es el grado de dependencia que tiene un modulo (una clase o un conjunto de clases) en otro modulo. > Bajo – Significa que un cambio en un modulo no implica un cambio en otro modulo. > Alto – Significa que un cambio en un modulo implica un cambio en la implementacion de otro modulo. > Abstracta – Se dice que un bueno diseño debe acoplar los modulos de manera abstracta. • En terminos de diseño, un bajo acoplamiento es ideal.

×