Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programa desarrollado
ndice
Unidad 3. Caractersticas de POO y Excepciones ...................................................................... 3 Presentacin de la unidad........................................................................................................... 3 Propsito ........................................................................................................................................ 3 Competencia especfica .............................................................................................................. 3 Consideraciones especficas de la unidad ............................................................................... 3 3.1. Herencia ................................................................................................................................. 3 3.1.1. Subclases y superclases .................................................................................................. 4 3.1.2. Jerarqua de la herencia ................................................................................................... 6 3.1.3. Clases y mtodos abstractos .......................................................................................... 6 3.2. Polimorfismo .......................................................................................................................... 7 3.2.1. Clases y mtodos finales ................................................................................................. 8 3.2.2. Interfaces ............................................................................................................................ 8 3.2.3. Sobrecarga de mtodos ................................................................................................... 9 3.2.4. Sobrecarga de operadores .............................................................................................. 9 Actividad 1. Herencia y polimorfismo ...................................................................................... 10 Actividad 2. Cuadro sinptico ................................................................................................... 10 3.3. Excepciones ........................................................................................................................ 11 3.1.1. Sentencia Try-catch ........................................................................................................ 11 3.1.2. Tipos de errores............................................................................................................... 12 3.1.3. Jerarqua de las excepciones ........................................................................................ 12 Actividad 3. Manejo de excepciones ....................................................................................... 13 Autoevaluacin ........................................................................................................................... 14 Evidencia de aprendizaje. Implementacin de clases abstractas ...................................... 14 Para saber ms........................................................................................................................... 16 Fuentes de consulta ................................................................................................................... 16
Propsito
En esta unidad logrars: 1. Reconocer el concepto y uso de la herencia. 2. Reconocer el concepto y uso del polimorfismo. 3. Identificar el uso de las excepciones. 4. Identificar la sintaxis que JAVA ofrece para la implementacin de estos temas.
Competencia especfica
Desarrollar programas modulares para para solucionar problemas diversos, aplicando la herencia, el polimorfismo y el manejo de excepciones mediante la sintaxis que JAVA ofrece para su implementacin.
3.1. Herencia
En la definicin del lenguaje Java se pens en una de sus caractersticas ms sobresalientes: la herencia. La herencia es una propiedad del lenguaje que nos permite definir objetos en base a otros ya existentes y as poder aadirles nuevas caractersticas (extenderlos). La nueva clase es llamada subclase o clase extendida y la clase que hereda sus mtodos y atributos se llama superclase.
Figura 3.1. Ejemplo de herencia En un ejemplo ms sobre la herencia de la superclase hacia la subclase debe imaginarse que se cuenta con la clase circulo que es perfecta para hacer algunas operaciones y abstracciones matemticas y por supuesto nos servir para ms de un propsito y ms de una aplicacin donde se utilice un crculo y las operaciones bsicas inherentes a l. Para algunas otras aplicaciones tal vez se precise manipular la clase crculo (con sus mtodos y atributos bsicos) de otra manera y se necesite imprimirlo a pantalla. Para no modificar 4 Ciencias Exactas, Ingenieras y Tecnologa | Ingeniera en Desarrollo de Software 4
por completo la clase crculo, que ya es usada por cientos de aplicativos ms y resultaran seriamente perjudicados, se crear una subclase de la clase padre circulo, se llamar Dibujacirculo que tendr la misma funcionalidad que su clase padre, ms un mtodo aadido: imprimeCirculo. Una manera de hacerlo es como sigue:
La solucin descrita funciona, sin embargo no es una solucin ptima y siendo un poco ms exigentes carece de elegancia. El problema que se presenta en esta solucin es el doble trabajo que involucra escribir los mtodos presentados y que no tienen injerencia en el dibujado del crculo. Otra manera de poder resolver el problema es heredando (extendiendo) desde la clase crculo a la subclase Dibujacirculo, como ya se haba explicado. Se presenta a continuacin:
Debers notar que se obvia la declaracin de dos clases: Color y DrawWindow, se toma slo como ejemplo ilustrativo. La palabra reservada extends le indica al compilador de Java que Dibujacirculo es una subclase de circulo, lo que significa que sta heredar por
completo sus mtodos y atributos con los modificadores de acceso que se le indicaron en la clase padre.
Por lo descrito, muchas ocasiones se desea representar conceptos abstractos en forma de una clase que pueda ser manejada por Java, pero por la misma definicin de su abstraccin no se pueden instanciar a partir de ellas un nuevo objeto. Consideremos por ejemplo, la comida en el mundo real. Se puede tener una instancia (un ejemplar) de comida? No, aunque s se pueden tener instancias de manzanas, chocolates o cualquier otro alimento. La comida representa el concepto abstracto de cosas que se pueden comer y no tiene sentido que tenga instancias ya que no es un objeto concreto, slo una abstraccin de un concepto ms amplio. Otro ejemplo puede ser la clase abstracta FiguraTresDimensiones; de ella se pueden definir clases concretas, tales como Esfera, Cilindro, Cono. Bajo la definicin anterior no se puede comprender la utilidad de tener una clase abstracta de manera pronta, sin embargo su utilidad se ve definida cuando sirven para heredar a otras subclases caractersticas generales del concepto abstracto que representan, pero de ellas no se puede instanciar objetos con el operador new. Las clases a partir de las cuales se pueden crear instancias se denominan clases concretas (Niemeyer & Peck, 1997). Una clase abstracta es una clase que contiene los nombres de los comportamientos sin las implementaciones que ejecutan esos comportamientos. Los objetos no se pueden instanciar de una clase abstracta. Cuando se hace la definicin (declaracin) de una clase abstracta deber ser antecedida por el modificador abstract. Este tipo de clases puede contener mtodos abstractos, que como se podr imaginar son slo la declaracin de los mismos, pero sin la implementacin de las instrucciones que se esperara para cumplir el propsito para los cuales fueron escritos. La implementacin de dichos mtodos se hace en las subclases. Para que un mtodo pueda declararse como abstracto debe cumplir con dos condiciones bsicas: 1. No ser mtodo privado. 2. No ser mtodo esttico.
3.2. Polimorfismo
Esta capacidad, el polimorfismo, permite hacer diferentes implementaciones de los mismos mtodos abstractos. Es decir, se pueden realizar diferentes implementaciones de un mismo mtodo, para poder adaptarlo a las necesidades propias de cada clase.
3.2.2. Interfaces
Cuando se define o se pretende utilizar en Java una interface, en realidad se est describiendo un comportamiento. De manera ms general las interfases lucen un tanto parecidas a una clase abstracta, slo las diferencian el mtodo de declaracin: 1. En una clase abstracta se utiliza la palabra reservada abstract. 2. En una interface se utiliza la palabra reservada interface. Tratando de entender la definicin general de interfase, se dir que es un sistema que hace de puente para unir entidades no relacionadas entre s. Cuando se sigue el proceso 8 Ciencias Exactas, Ingenieras y Tecnologa | Ingeniera en Desarrollo de Software 8
normal de compilacin, el compilador pone cada interface identificada en un archivo de bytecode por separado como si fuera una clase normal, adems como en las clases abstractas, slo tiene la definicin de mtodos pero no la implementacin de ellos. En esencia una interfase podra identificarse como lo mismo que una clase abstracta. El gran diferenciador entre ellas y lo que justifica la existencia de las interfaces es porque pueden emular el comportamiento de la herencia mltiple, que no lo soportan las clases abstractas. Una interfase se puede considerar una clase abstracta de hecho, y en ella se toma en cuenta lo siguiente (Flanagan, 1997): 1. 2. 3. Todos los miembros son pblicos. Todos los mtodos son abstractos. Todos los campos son static y final.
Una interfase consta de dos elementos bsicos: 1. 2. La declaracin que es donde se colocan los diversos atributos acerca de la interface como el nombre o si se extiende de otra interfase, y El cuerpo que contiene la declaracin de los mtodos y las constantes que conforman la propia interfase.
La sobrecarga de los operadores permite redefinir las funciones que se le asignan por definicin a un operador, por ejemplo el operador + (ms) y el operador . (punto), se pueden utilizar para realizar otras funciones que las regulares. Como ejemplo prctico y conocido, el operador + en el mundo Java sirve para dos cosas, al estar sobrecargado: 1. 2. Para realizar la operacin de suma, cuando se acompaa de datos numricos. Para realizar la operacin de unin, cuando uno de sus operando es una dato de tipo String.
El compilador decide qu uso se le dar en base a los operando de los cuales est acompaado.
1. En un archivo de texto, realiza el cuadro sinptico de herencia y polimorfismo, as como su aplicacin en JAVA. Usa tu imaginacin, puedes agregar imgenes y colores tantos como sea necesario.
2. Guarda la actividad con el nombre POO_U3_A2_XXYZ. Sustituye las XX por las dos primeras letras del primer nombre, la Y por la inicial del apellido paterno y la Z por la inicial del apellido materno. 10 Ciencias Exactas, Ingenieras y Tecnologa | Ingeniera en Desarrollo de Software 10
3.3. Excepciones
Cuando un programa Java viola las restricciones semnticas del lenguaje (se produce un error), la mquina virtual Java comunica este hecho al programa mediante una excepcin. Por tanto la manera ms simple de decirlo es que una excepcin es un error que ha ocurrido en un programa en ejecucin. Muchas clases de errores pueden provocar una excepcin, desde un desbordamiento de memoria o un disco duro estropeado, un intento de dividir por cero o intentar acceder a un arreglo fuera de sus lmites. Cuando esto ocurre, la mquina virtual Java crea un objeto de la clase exception, se notifica el hecho al sistema de ejecucin y se dice que se ha lanzado una excepcin.
Como se dijo anteriormente en el cdigo podemos ver que el bloque de sentencias que pudiera tener un error se coloca dentro del try{}, y en el catch(){} se coloca el tipo de error y su nombre dado, que por lo general siempre es e, entonces una vez que atrapa e error lo imprime a pantalla para que el usuario conozca el error, todo esto sin provocar un cierre inesperado del cdigo.
realiz la llamada al mtodo donde se produjo la excepcin y as sucesivamente hasta llegar al ltimo de ellos. En caso de que ninguno de los mtodos de la pila sea capaz de tratar la excepcin, la mquina virtual Java muestra un mensaje de error y el programa termina. Por ejemplo si tengo un metodo1 que dentro hace una llamada al metodo2, y el metodo2 manda llamar al metodo3, y el metodo3 llama al metodo4, lo que pasa si ocurre un error en el metodo1, es que se busca un manejo de excepciones en el metodo1, pero si no se encuentra se va al metodo2 para ver si en este mtodo si se realiza el manejo de la excepcin, pero si ah tampoco se hizo nada, se va al metodo3 en bsqueda del manejo de la excepcin, por ltimo si tampoco en el metodo3 se hizo nada, se va al metodo4 a buscar el manejo de la excepcin, a esto se refiere el texto de arriba sobre , a ir buscando en las llamadas hasta encontrar donde se pueda manejar la excepcin, pero si en ninguno de los mtodos se realiz, entonces inevitablemente la excepcin har que el sistema falle.
1. Elabora un ensayo donde plasmes tu percepcin sobre el uso y utilidad que brindan las excepciones para un programador. No olvides incluir las fuentes que consultes. 2. Enva el archivo a travs de la seccin Base de datos.
Autoevaluacin
Para reforzar los conocimientos relacionados con los temas que se abordaron en esta primera unidad del curso, es necesario que resuelvas la autoevaluacin de la unidad. Recuerda que es muy importante leer cuidadosamente los planteamientos indicados y elegir la opcin adecuada para cada uno. Ingresa al aula para realizar la actividad.
Autorreflexiones
Adems de enviar tu trabajo de la Evidencia de aprendizaje, es importante que ingreses al foro Preguntas de Autorreflexin y consultes las preguntas que tu Facilitador(a) presente, a partir de ellas, debes elaborar tu Autorreflexin en un archivo de texto llamado POO_U3_ATR_XXYZ. Posteriormente enva tu archivo mediante la herramienta Autorreflexiones.
Para saber ms
Consulta la pgina oficial del lenguaje JAVA, donde podrs encontrar manuales de referencia sobre el manejo de la herencia, el polimorfismo y las excepciones. Java: http://www.java.com/es/
Fuentes de consulta
Flanagan, D. (1997) Java in a NutShell, The Java Reference Library, versin 1.2. Mxico: O'Reilly & Associates. Joyanes, L. & Fernndez, M. (2001) Java 2: manual de programacin. Mxico: McGrawHill. Niemeyer, P. & Peck, J. (1997) Exploring Java, The Java Reference Library, versin 1.2. Mxico: O'Reilly & Associates.