Lenguajes, Tecnologias y Paradigmas de la programacion - Programacion orientada a objetos.pdf.pdf

127
Lenguajes , Tecnologías y Paradigmas de Programación Tema 2 El Paradigma Orientado a Objetos

Transcript of Lenguajes, Tecnologias y Paradigmas de la programacion - Programacion orientada a objetos.pdf.pdf

Lenguajes , Tecnologías y Paradigmas de Programación

Tema 2El Paradigma Orientado a Objetos

2

● Comprender el paradigma Orientado a Objetos y sus conceptos: encapsulación, herencia y polimorfismo

● Aplicar los conceptos del paradigma orientado a objetos para un lenguaje orientado a objetos en particular principalmente Java, otros (C#, C++)

● Comparar los diferentes enfoques de implementaciones de diferentes lenguajes de programación orientado a objetos

Objectivos

3

● Pressman● Java programming language● C# programming language● C++ programming language

Bibliografia

4

● Introducción● Objectos● Clases● Constructores● Destructores● Packages● Mensajes● Encapsulación

● Agregación● Herencia● Interfaces● Polimorfismo● Excepciones● Tipos paramétricos

Contenidos

5

Vivimos en un mundo lleno de objetos...●En el mundo real cada cosa es un objeto: una silla, un perro, una casa, un coche, una persona...etc.●Nosotros creamos programas basándonos en este modelo de objetos de la vida real.●

Introducción

6

Cada objeto tiene tres características básicas:Identidad lo hace único y diferente

Estado (datos, atributos, propiedades, etc): que describen el objeto

Comportamiento (métodos, operaciones, servicios, funciones, etc): que permite la manipulación del objeto en una variedad de formas

Introducción

7

Ejemplo

● Identidad: dos sillas similares, pero los dos son diferentes (identidad A vs identidad B)

● Estado: coste, dimensiones, alto, ancho, localización, color, material, etc.

● Comportamiento: compra, venta, mover, etc. (operaciones que normalmente modifican el estado del objeto)

Introducción

Silla A Silla B

8

● Nosotros podemos pensar que un objeto es una capsula que contiene los atributos y las operaciones

Objetos

Objecto: silla

CosteDimensionesalturaLocalizaciónColor

ComprarVenderMover

Identidad del Objecto

Atributos del Objecto

Operaciones del Objecto

9

●Cada objeto pertenece a una clase mucho más grande de objetos.●La clase es como una plantilla que describe cada uno de los atributos/operaciones comunes al conjunto de objetos.●Cada objeto es una instancia de una clase en particular

Clases

Muebles

sillamesa

escritorio

sillón

maquinas

cochemovil

tv

radio

Clase

Objectos

10

● Los objetos heredan todos y cada uno de los atributos y las operaciones de la clase a la que pertenecen.

Clases

Objecto: mesa

CosteDimensionesMedidasLocalizaciónColor

ComprarVenderMover

Clase: muebles

CosteDimensionesMedidasLocalizaciónColor

ComprarVenderMover

Clase: muebles

CosteDimensionesMedidasLocalizaciónColor

ComprarVenderMover

Representaremos lasclases con sombra

Representaremos losobjetos sin sombra

Objecto: mesa

CosteDimensionesMedidasLocalizaciónColor

ComprarVenderMover

Objecto: silla

CosteDimensionesMedidasLocalizaciónColor

ComprarVenderMover

11

● Con la clase, podemos identificar los objetos del mundo real que mantienen propiedades similares y definirlos todos juntos en una estructura común

● La clase es el elemento principal de un programa orientado a objetos

● En tiempo de ejecución creamos instancias u objetos de la clase y los manipulamos de alguna manera

Clases

programaruntina

objectos

clases

12

Ejemplo (Java)

Clases

public class Point { int x; int y; void move(int newx, int newy) {

x = newx; y = newy; }}

...

public static void main(String[] args) {

Point pt = new Point(); pt.move(1,2);

}...

Definición de la clase

Creación de un Objecto

Java

13

Ejemplo (C#)

Clases

public class Point { int x; int y; void move(int newx, int newy) {

x = newx; y = newy; }}

...

public static void Main() {

Point pt = new Point(); pt.move(1,2);

}...

Definición de la clase

Creación Objecto

C#

14

Ejemplo (C++)

Clases

class Point { int x; int y; void move(int newx, int newy);}

void Point::move(int newx, int newy) { x = newx; y = newy;}

...

int main() {

Point pt1; pt1.move(1,2);

Point *pt2 = new Point(); pt2->move(1,2);

}...

Instancia Estática.El objeto es almacenado en el momento.Cuando la función termina el objeto ya no está disponible

Instancia Dinámica.El objeto se almacena en la pila, cuando la función terminaEl objeto sigue disponible.

Definición de la clase

C++

15

Ejemplo (C++)● Métodos en línea

Clases

class Point { int x; int y; void move(int newx, int newy) { ... }}

Definición de la clase

Método en líneaEl cuerpo del método es definido enla declaración de la clase.

C++

16

Para empezar a trabajar con objetos estos deben ser creados.

El proceso para crear un objeto tiene dos pasos:● Asignación de memoria: Se asigna la memoria

necesaria para los atributos del objeto.● Inicialización: Se inicializan los valores de los

atributos .● El constructor es una operación especial que es

invocada después de la asignación de objetos con el fin de iniciar sus atributos.

● El constructor es responsable de la asignación y la inicialización de todos los recursos de los objetos necesarios antes de sufrir alguna manipulación.

Constructores

17

Ejemplo (Java)● El constructor toma el mismo nombre que la clase.● No devuelve nada.

Constructores

public class Point { int x, int y; Point(int x, int y) {

this.x = x; this.y = y; } ...}

...

public static void main(String[] args) {

Point pt = new Point(10,10);

}...

Java

18

Ejemplo (Java)● El constructor puede estar sobrecargado (varios

constructores)● Constructores encadenados: un constructor puede

invocar otros constructores

Constructores

public class Point { int x, int y; Point() {

this(0,0); }

Point(int x, int y) {this.x = x; this.y = y;

} ...}

...

public static void main(String[] args) {

Point pt1 = new Point(); Point pt2 = new Point(10,10);

}...

Invoca otro constructor

Java

19

Ejemplo (Java)● Si un constructor no es especificado entonces el

compilador de Java proporciona “automáticamente” uno vacio.

Constructores

public class Point { int x, int y; ...}

...

public static void main(String[] args) {

Point pt = new Point();

}...

Java

20

Ejemplo (C++)● Muy parecido al Java, con sintaxis similar.

Constructores

class Point { int x, int y; Point(); Point(int,int);}Point::Point() { x = 0; y = 0;}Point::Point(int a, int b) { x = a; y = b;}

...

int main() {

Point pt1; Point pt2(10,10);

Point *pt3 = new Point(); Point *pt4 = new Point(10,10);

}...

Instancia Estática.El objeto se almacena en la pila.Cuando la función termina, el objeto ya no estádisponible

Instancia Dinámica.El objeto esta almacenado en la pila.Cuando la función termina el objetocontinua disponible

C++

21

Una vez que el objeto ya no se usa , este debe ser destruido y desasignado de la memoria.

El proceso de destruir un objeto tiene dos pasos:– Cancelación de asignación de objetos/atributos:

todos los recursos obtenidos durante el ciclo de vida del objeto se debe desasignar.

– La destrucción del objeto: el objeto en sí se destruye la memoria y no está disponible más.

● El destructor es un método especial que se invoca antes de que el objeto se destruya.

● El destructor es el responsable de cancelar la asignación de cualquier recurso obtenido durante el ciclo de vida del objeto.

Destructores

22

Ejemplo (Java)Java no soporta la gestión de memoria explícita

Nosotros podemos crear objetos (usando el operador new) pero no podemos destruirlos explícitamente

● Sólo podemos marcar un objeto como "destruido" por la pérdida de su referencia (ajustar el contenido de la variable a null)

El garbage collector(basurero) es un proceso especial de la máquina virtual Java que se ejecuta de vez en cuando y busca referencias perdidas .

El garbage collector invoca al método finalize() y destruye los objetos (desasignando la memoria)

Destructores Java

23

Ejemplo (Java)El método finalize() es un método especial que contiene

cada Objeto en Java.● Podemos especificar su comportamiento, por defecto (no

hace nada) y podemos definir el código que debe ejecutarse antes de que el objeto se destruya.

● Por lo tanto tenemos la oportunidad de cancelar la asignación de todos los recursos antes de que el objeto se destruya.

Destructores Java

24

Ejemplo (Java)

Destructores

public class Square { Point topL eft,bottomRight; Square() {

topL eft = new Point(0,0); bottomRight = new Point(10,10); }

public void finalize() { topLeft = null; bottomRight = null; } ...}

...

public static void main(String[] args){

Square square = new Square(); // usamos square

// marcamos el objeto como destruible square = null; // después de esta línea, el garbage // collector puede destruir el objeto }...

Java

25

Ejemplo (C++)

● Un objeto es destruido, ya sea por sus acabados de alcance, o porque se destruyen de forma explícita mediante la palabra clave delete.

● Cuando se destruye el objeto, se llama al destructor con el fin de liberar recursos previamente asignados.

● El destructor debe tener el mismo nombre de la clase, pero precedido de ~, y no devuelve ningún valor.

Destructores C++

26

Ejemplo (C++)

Destructores

class Rectangle { Point topL eft, bottomRight; Rectangle(); ~Rectangle();}Rectangle::Rectangle() { topLeft = new Point(0,0); bottomRight = new Point(10,10);}Rectangle::~Rectangle() { delete topLeft; delete bottomRight;}

...void anyFunction() {

// se crea el objeto // de alcance local Rectangle rect; ... // cuando la función termina// el objeto es destruido automáticamente dado su alacance}...

Estos objetos son destruidos usando delete porque han sido creados usando new

Este objeto se destruye automáticamente por su alcance

C++

27

package A

package B

Las Clases son organizadas en paquetes y subpaquetes que ayudan a agrupar todas las clases que ocupan funciones relacionadas.

Los paquetes generalmente toma la forma de un árbol.

Los paquetes suele modificar el nombre completo de la clase, convirtiéndose en el prefijo del nombre de la clase.

Packages

C C D D

package Apackage B

C

D

28

Ejemplo (Java)● Recibe el nombre de package

Packages

package geometry;

public class Point { int x, y; ...}

package geometry;

public class Square { Point topL eft,bottomRight; ...}

...public static void main(String[] args) {

geometry.Square square = new geometry.Square(); ...}

Nombre completo de la clase:geometry.Square

La clase pertenece al mismopackage

Java

29

Ejemplo (Java)● Los Packages son importados usando la clave import

Packages

package geometry;

public class Point { int x, y; ...}

package geometry;

public class Square { Point topL eft,bottomRight; ...}

import geometry.Square;import geometry.*;

public static void main(String[] args) {

Square square = new Square(); ...}

Si importamos podemos usarEl nombre corto square.

Java

30

Ejemplo (Java)● Sub-packages separado con puntos

Packages

package geometry;

public class Point { int x, y; ...}

package geometry.polygons;

public class Polygon {geometry.Point[] points; ...}

import geometry.polygons.Polygon;import geometry.*;

public static void main(String[] args) {

Polygon poly = new Polygon(); ...}

Si importamos podemos usarEl nombre corto polygon

La clase pertenece a un package diferente

Java

31

Ejemplo (C#)● Los paquetes son definidos usando la clave namespace

Packages

namespace geometry {

public class Point { int x, y; ... }}

public static void Main() {geometry.Point pt = new geometry.Point();...} using geometry;

using Polygon = geometry.polygons.Polygon;

public static void Main() { Point pt = new Point(); Polygon poly = new Polygon();}

namespace geometry { namespace polygons { public class Polygon { ... } }}

namespace geometry.polygons { public class Polygon { ... }}

Importando todas las clases

Creando un alias para la clases

C#

32

● Hasta ahora hemos visto que un objeto contiene el estado (atributos) y comportamiento (operaciones).

● Cada vez que el objeto recibe un estímulo, se inicia un cierto comportamiento (se ejecuta una operación).

● Los mensajes son los estímulos que inician el comportamiento de los objetos.

● Traducción: Cuando un objeto recibe un mensaje, se ejecuta esa operación.

Mensajes

Sender object

attributes:

operations:

Receiver object

attributes:

operations:

message

33

● Enviar/Recibir mensajes puede ser descrito así:[destino, operación, parámetros] [enviar, devolver]

● Se envía un mensaje al destino, y una operación se ejecuta en el receptor. Antes de enviar el resultado, otro mensaje/s de otro objeto/s pueden ser enviados.

Mensajes

obj1

attributos:

operaciones:

obj2

attributos:

operaciones:

op

obj3

attributos:

operaciones:

op

[obj2, op, {data}] [obj3, op, {data}]

[obj2, {return}][obj1, {return}]

34

Ejemplo (Java)● Las Operaciones son llamadas Métodos● Un método es invocado (un mensaje es enviado) para

ello se usa la siguiente sintaxis:

destino.operación (parámetros)

Mensajes

public static void main(String[] args) {

Point pt = new Point();

pt.move(10, 10);

...}

Mensaje[pt, move, {10, 10}]

Java

35

Los atributos que describen una clase suelen ser encerrado por una "pared" de las operaciones que son capaces de manipular los datos de alguna manera.

La única manera de alcanzar atributos es ir a través de uno de los métodos que forman la pared

Nosotros decimos que la clase encapsula los datos

Encapsulación

operaciones

atributos:

Clase nombre

atributos:

operaciones

Clase nombre

atributos:

operaciones

36

Para soportar la encapsulación, los lenguajes de programación orientados a objetos suelen proporcionar modificadores de accesibilidad: público, privado, protegido amigo,, etc

Los modificadores de acceso pueden afectar a cualquier miembro de la clase (ya sean atributos u operaciones)La regla de oro es que para ocultar los datos y publicar sólo las operaciones necesarias (se cumple el principio de ocultación de información: enseñar tan poca información como sea posible)

Encapsulación

37

Ejemplo (Java)● Soporta 4 modificadores de acceso:

● default (por defecto: package visible). El miembro es accesible por la misma clase y de cualquier clase dentro del mismo paquete.

● public: el miembro es accesible por todo el mundo● protected: el miembro es accesible por la misma

clase, las subclases y la clase de cualquier dentro del mismo paquete.

● private: el miembro es accesible sólo desde la misma clase.

Encapsulación Java

38

Ejemplo (Java)● Los atributos son marcados como privados.● Entonces ellos son accesibles a través de los métodos

consultor (getXX()) y modificador (setXX()).● Consultores y modificadores pueden filtrar / extender/

generar/ etc. Información, y finalmente aceptar o rechazar la operación.

Encapsulación Java

39

Ejemplo (Java)

Encapsulación

public class Point { private int x = 0; private int y = 0; public void move(int newx, int newy) {

x = newx; y = newy; } public void setX (int newx) { x = newx; } public int getX () { return x; } public void setY (int newy) { y = newy; } public int getY () { return y; }}

ConsultoresModificadores

Java

40

Ejemplo (C#)● Soporta 4 modificadores de accesibilidad

● internal (cuando no se usa modificador): conjunto visible. El miembro es accesible desde la misma clase.

● public: el miembro es accesible por todo el mundo● protected: el miembro es accesible por la misma

clase y alguna subclase● private: el miembro es accesible sólo por la misma

clase.

Encapsulación C#

41

Ejemplo (C#)● C# soporta el concepto de 'propiedad'.● Una propiedad es un atributo que se ha adjuntado un

consultor y/o un método de actualización.

Encapsulación

public class Point { private int x = 0,y = 0; public int PositionX { get { return x; } set { x = value; } } public int PositionY { get { return y; } set { y = value; } }}

PropiedadesGetters and SettersSon opcionales

...public static void Main() { Point pt = new Point(); pt.PositionX = 10; pt.PositionY = 10;}...

C#

42

Ejemplo (C++)● Soporta 4 modificadores de acceso

● public: el miembro es accesible por todo el mundo.

● protected: el miembro es accesible por la misma clase y subclases.

● private (por defecto): el miembro es accesible sólo por la misma clase.

● friend: un friend es una función externa o clase que tiene acceso a componentes internos (miembros privados y protegidos de otra clase).

Encapsulación C++

43

Ejemplo (C++)

Encapsulation

class Point { private: int x, y; public: int getX (); void setX (int); int getY (); void setY (int);

friend void myFriend(Point); friend class Square;}

int Point::getX () { return x; }void Point::setX (int newx) { x = newx; }int Point::getY () { return y; }void Point::setY (int newy) { y = newy; }

...void myFriend(Point pt) { pt.x = 10; pt.y = 10;}...

Friends puede acceder aMiembros privados

class Square {...}

void Square::fn(Point pt) { pt.x = 10; pt.y = 10;}...

C++

44

● Es también conocida como composición.● Un contenedor contiene uno o más componentes.● Esto significa que un objeto puede contener

atributos que son objetos en sí mismos.● Agregación fuerte: El ciclo de vida de los

componentes está ligado al ciclo de vida del contenedor (Ej: cuando el contenedor muere todos los componentes también mueren).

Agregación

Coche

ruedas Motor

Persona

Ojos Nariz

Fuerte

45

Ejemplo (Java)● Atributos son objectos

Agregación

public class Square {

Point topL eft,bottomRight; Square() {

topL eft = new Point(0,0); bottomRight = new Point(10,10); }

public void finalize() { topLeft = null; bottomRight = null; } ...}

Cuadrado

Punto Punto

Esquina superior izda

Esquina inferior derecha

Agregación Fuerte- Cuando el cuadro es creado,ambos puntos son creados- Cuando el cuadro es destruido,ambos puntos son destruidos

Java

46

● También conocida como generalización y o especialización.

● Es el mecanismo que permite el diseño de clases basadas en otras clases básicas heredando/extendiendo toda la información descrita es aquellas clases.

● La clase básica es llamada clase padre, superclase o clase general.

● La clase que hereda toda la información es llamada subclase, clase hija, clase derivada o clase especializada.

Herencia

47

●Es un mecanismo muy poderoso para la reutilización de código. Todo lo que se define en la superclase está disponible en la subclase.

Herencia

Shape

attributes:

operations:

Formaaributos:

operaciones:

Formaaributos:

operaciones:

Shape

attributes:

operations:

Círculoatributos:

operaciones:

Círculoatributos:

operaciones:

Shape

attributes:

operations:

Cuadradoatributos:

operaciones:

Cuadradoatributos:

operaciones:

Herenciaherencia

48

●Las subclases pueden redefinir (sobreescribir) la información definida en la superclase

Herencia

Shape

attributes:

operations:

Círculoatributos:

operaciones:- dibujar()- area()

Círculoatributos:

operaciones:- dibujar()- area()

Shape

attributes:

operations:

Cuadradoatributos:

operaciones:- dibujar()- area()

Cuadradoatributos:

operaciones:- dibujar()- area()

heredahereda

Shape

attributes:

operations:

Formaatributos:

operacioes:- dibujar()- area()

Formaatributos:

operacioes:- dibujar()- area()

49

● Las clases son organizadas según la Herencia en jerarquías

Herencia

50

Herencia Simple●Una subclase sólo puede heredar del padre.●Si una subclase necesita características de más de una clase deberá usar la agregación para usarlas.●La jerarquía son árboles estrictos.

Herencia

51

Herencia Múltiple● Una subclase puede heredar de más de una clase

padre.● La jerarquía ya no es necesariamente en forma de

árboles.

Herencia

52

Herencia MúltiplePosible problema: colisiones

Colisiones: cuando dos características que vienen de diferentes clases padre tienen el mismo nombre.

Solución:

(1)Evitar esta situación y generar error de compilación.

(2)Ocultar una característica en favor de la otra.

(3)cuando se utiliza la característica, requiere la especificación de cuál de las dos características heredadas hace referencia.

Algunos lenguajes prohíben la herencia múltiple para evitar confusiones.

Herencia

53

Ejemplo (Java)● Java implementa Herencia simple con clases – pero

Herencia múltiple con interfaces● Para esto usa la palabra clave 'extends'

Herencia

public class Shape { public Shape() { ... } public void draw() { ... } public float area() { ... } ...}

public class Circle extends Shape { public Circle() { ... } ...}

public class Square extends Shape { public Square() { ... } ...}

Java

54

Ejemplo (Java)●Cuando un objeto de una subclase es creado, los constructores de la clase padre son invocados primero.

Herencia

...

Square square = new Square();

...

public class Shape { public Shape() { ... } public void draw() { ... } public float area() { ... } ...}

public class Square extends Shape { public Square() { ... } ...}

1

Java

2

55

Ejemplo (Java)●Nosotros podemos usar 'super' para encadenar los constructores de la subclase y superclase (debe ser la primera instrucción del constructor)

Herencia

public class Shape { public Shape() { ... } public Shape(int a) { ... } public Shape(int a, int b) { ... } ...}

public class Square extends Shape { public Square() { super(0,0); // make something else } ...}

Java

56

Ejemplo (Java)● La subclase puede redefinir (overwrite) los métodos

definidos en la superclase.● Cuando redefinimos el prototipo del método debe ser el

mismo.● Si cambia el nombre entonces es otro método.● Si el número o el tipo de parámetros cambia

entonces es otro método con el mismo nombre. (overloading).

● Si cambia el valor que devuelve , entonces error.● El método original definido en la superclase puede ser

usado con 'super'

Herencia Java

57

Ejemplo (Java)

Herencia

public class Shape { protected Color color; protected double area;

public void setArea(double area) { this.area = area; } public double getArea() { return area; } public String toString() { return “Shape with area “ + area; } public boolean equals(Object x) { Figure fx = (Figure)x; return (color.equals(fx.color) && area == x.area); }}

Java

58

Ejemplo (Java)

Herencia

public class Circle extends Shape { protected double radio;

public void setRadio(double radio) { this.radio = radio; } public double getRadio() { return radio; }

/* Overwritten methods */ public String toString() { return super.toString() + “ and with radio “ + radio; } public boolean equals(Object x) { Circle cx = (Circle)x; return (super.equals(x) && radio == cx.radio); }}

Java

59

Ejemplo (Java)● En Java, la clase java.lang.Object es el padre de

cualquier otra clase● Si una clase no se extiende a otra clase , entonces por

defecto se extiende a Objeto

Herencia Java

60

Ejemplo (Java)● La clase java.lang.Object proporciona algunos métodos

interesantes.:● wait(), notify(), notifyAll(): procesos de sincronización● hashCode(): código único para objeto● toString(): String representación de un objeto● equals(): igualdad entre objetos

● Los dos últimos son redefinidos para más subclases.

Herencia Java

61

Ejemplo (C#)● Sólo soporta Herencia simple Herencia con clases – pero

Herencia múltiple con interfaces (como Java)● Para esto usa el símbolo ':'

Herencia

public class Shape { ... public void draw() { ... } public float area() { ... } ...}

public class Circle: Shape { ...}

public class Square: Shape { ...}

C#

62

Ejemplo (C#)Cuando un objeto de una subclase es creado, los constructores de la clase padre son invocados primero.

● Las clases derivada pueden comunicarse con las clases base usando la palabra clave 'base'

Herencia

public class Shape { public Shape() { ... } public Shape(int a) { ... } ...}

public class Square: Shape { public Square(): base(0) { ... } ...}

C#

63

Ejemplo (C#)● La subclase puede redefinir (overwrite) los métodos

definidos en la superclase.● Cuando redefinimos el prototipo del método debe usar el

mismo nombre.● Si el nombre cambia entonces es otro método.● Si el número o el tipo de parámetros cambia entonces

es otro método con el mismo nombre. (overloading).● Si cambia el valor que devuelve , entonces error.

El método original definido en la superclase puede ser usado con 'base'

Herencia C#

64

Ejemplo (C#)● Si el método en la supercalse está marcado como

“virtual' entonces el método redefinido debe estar marcado con 'override' (más adelante Polimorfismo)

● Si el método de la superclase no está como virtual' entonces el método redefinido debe estar marcado como 'new'

● El comportamiento del método redefinido es diferente como veremos en Polimorfismo.

Herencia C#

65

Ejemplo (C#)

Herencia

public class Shape {

public void draw() { ... }

public virtual float area() { ... }

}

public class Circle: Shape { public new void draw() { ... }

public override float area() { ... }

}

C#

66

Ejemplo (C++)● El símbolo ':' se usa con los especificadores de acceso

(public, private, protected) . El especificador de acceso es opcional, si no se especifica por defecto se asume privado (private)

● El especificador de acceso limita el nivel más accesible de lo miembros heredados de la clase base Ej Los miembros con un nivel más accesible son heredados con el mismo nivel.

Herencia C++

67

Ejemplo (C++)

Herencia

class Shape { public: void draw(); float area(); ...}void Shape::draw() { ... }float Shape::area() { ... }

class Circle: public Shape { ...}

class Square: public Shape { ...}

C++

68

Ejemplo (C++)● C++ soporta Herencia múltiple con clases

Herencia

class Shape { public: void draw(); float area(); ...}

class Whatever { public: void print(); ...}

class Child: public Shape, public Whatever { public: void otherTask(); ...}

C++

69

Ejemplo (C++)● Ambiguedades (colisiones) se resuelven usando el

calificador ClassName::o usando la palabra clave virtual (más sobre esto en Polimorfismo)

Herencia

class A { public: int i,j void g(int) { }}

class B { public: int j; void g() { } }

int main() { C obj; obj.i = 5; // obj.j = 10; obj.A::j = 10; // obj.g(); obj.B::g();}

class C: public A, public B { public: int i; }

Ambiguedad: atributo 'j' llega de dos fuentes.Usando A::j qualificador decide cual de ambos es usado

Ambigüedad: a pesar de tener diferentes argumentos el nombre `g`Tiene dos fuentes usando B::g se decidira cual se usa

C++

70

Clases Abstractas● Una clase abstracta es una clase que está parcialmente

definida y por lo tanto no se pueden crear instancias (no se pueden crear objetos de una clase abstracta).

● Una clase abstracta contiene métodos abstractos.● Un método abstracto es un método no implementado.● Una clase abstracta por lo general recoge un conjunto de

definiciones comunes que deben ser redefinidas por subclases siguientes.

● Las subclases deben implementarse (redefinirse) el método abstracto o ellas también seran abstractas.

Herencia Java

71

Clases Abstractas . Ejemplo (Java)● Usamos 'abstract'

● Una clase con métodos abstractos es necesariamente abstracta.

Herencia

public abstract class MyClass { ...}

public abstract class MyClass { ...

public abstract mthd(); ...}

Java

72

Clases Abstractas . Ejemplo (C++)● En C++, un método abstracto es llamado pure virtual

method● Una clase con un método virtual es abstracto.

Herencia

class Polygon { private: int width, height; public: void setWidth(int); void setHeight(int);

virtual int area() = 0;

}

C++

73

● Es un concepto que soporta encapsulación● Encapsulación permite ocultar algunos datos

(típicamente datos), y publica otros miembros (por lo general operaciones)

● Nosotros podemos separar la interface de su implementación

● Interface: es la parte estable y pública y que define las operaciones que un componente particular debe tener.

● Implementación: es la parte oculta y cambiante , se define la implementación de las operaciones así como los atributos particulares necesarios para la ejecución de tales operaciones.

Interfaces

74

● La interface llega a ser independiente de la implementación.

● Sólo las partes necesarias se publican el resto permanece oculto.

● A nosotros no nos centraremos en la implementación, solo en las operaciones que nosotros podemos usar con un objeto.

Interfaces

75

● La misma interface puede ser implementada de diferentes maneras.

Interfaces

interface

operations:

interface

operations:

implementation1

attributes:

operations:

implementation1

attributes:

operations:implementation2

attributes:

operations:

implementation2

attributes:

operations:implementation3

attributes:

operations:

implementation3

attributes:

operations:

76

● Herencia también se usa con interfaces● Entonces nosotros decimos que un padre/base/super

inteface es heredado/extendido por un hijo/derivado/subinterface

● Herencia jerarquía también se puede crear

● Simple Herencia vs múltiple Herencia● No hay problemas de colisión: ningún

comportamiento (implementación) está asociada con las operaciones (ellas están vacías)

Interfaces

77

Ejemplo (Java)● Una interface es una colección de métodos sin

implementación● Una interface define un comportamiento que puede ser

implementado por cualquier clase.● Está prohibido crear objetos a partir de las intefaces● La interface es una entidad completamente

independiente de cualquier implementación potencial.

Interfaces Java

78

Ejemplo (Java)● Nosotros usamos el identificador 'interface'

Interfaces

public interface Printer { void print(String texto);}

public interface Calculator { double add(double a, double b); double substract(double a, double b); double multiply(double a, double b); double divide(double a, double b);}

public interface Shape { void draw();}

Java

79

Ejemplo (Java)● En una interface, todos los métodos son públicos por

defecto (no hay necesidad de declararlos como public)● En una interface podemos definir constantes● Todas las constantes son públicas por defecto (no hay

necesidad de declararlas como public)

Interfaces Java

80

Ejemplo (Java)

Interfaces

public interface Calculator { double PI = 3,2426; double add(double a, double b); double substract(double a, double b); double multiply(double a, double b); double divide(double a, double b);}

Java

81

Ejemplo (Java)● Una clase puede implementar cualquier número de

interfaces.● Si una clase implementa una interface, debe

proporcionar implementaciones para lo métodos definidos en la interface.

● La interface es un contrato que debe ser cumplido por las clases que la implementan.

● Si conocemos la interface que un clase particular implementa es muy simple deducir su funcionamiento.

Interfaces Java

82

Ejemplo (Java)● Palabra clave 'implements'

Interfaces

public class CalculatorImpl implements Calculator { public double add(double a, double b) { return a+b; } public double substract(double a, double b) { return a-b; } public double multiply(double a, double b) { return a*b; } public double divide(double a, double b) { return a/b; }}

CalculatorImpl

attributes:

operations:

CalculatorImpl

attributes:

operations:

Calculator

operations:

Calculator

operations:

implements

Java

83

Ejemplo (Java)● Java soporta Herencia múltiple con interfaces (recordar

que sólo Herencia simple es soportada con clases).

Interfaces

public interface A { public void m1();}

public interface B { public void m1(); public void m2();}

public interface Cextends A, B { public void m3();}

public class MyClass implements C { public void m1() { ... } public void m2() { ... } public void m3() { ... }}

Java

84

Ejemplo (C++)● C++ no soporta nativamente el concepto de interface.● En su lugar soporta el concepto de 'clase abstracta'.● Si todos lo métodos de una clase abstracta son puro

virtual (abstracto), entonces la clase parecera una interface.

Interfaces

class Calculator { public: virtual double add(double,double) = 0; virtual double substract(double,double) = 0; virtual double multiply(double,double) = 0; virtual double divide(double,double) = 0;}

C++

85

Ejemplo (C++)

Interfaces

class CalculatorImpl: Calculator { public: double add(double,double); double substract(double,double); double multiply(double,double); double divide(double,double);}double CalculatorImpl::add(double a, double b) { return a+b;}double CalculatorImpl::substract(double a, double b) { return a-b;}double CalculatorImpl::multiply(double a, double b) { return a*b;}double CalculatorImpl::divide(double a, double b) { return a/b;}

C++

86

Polimorfismo significa “muchas formas”● Es una característica que permite valores de tipos de datos

diferentes (y que tiene diferentes comportamientos) a ser tratadas utilizando una interfaz uniforme

Se aplica a ambos operaciones y tipos de datos● Una operación puede ser polimórfica con respecto a uno

o varios argumentos. Ejemplo: el operador + puede ser aplicado a valores de diferentes tipos como enteros, reales...…

● Un tipo de datos puede ser polimórfico respecto a los tipos de elementos que contiene. Ejemplo: Una lista con los elementos que pertenecen a tipos arbitrarios..

Polimorfismo

87

Clases de Polimorfismo

Ad-Hoc o evidente Polimorfismo: trabaja con un número finito de tipos de datos diferentes y sin relación potencial●Sobrecarga●Coacción

Polimorfismo

88

Clases Polimorfismo

Universal o real Polimorfismo: trabaja con un número infinito de tipos de datos donde hay una estructura común.●Polimorfismo Inclusión (Herencia)●Polimorfismo Paramétrico (genéricos)

Polimorfismo

89

Sobrecarga (Overloading)● Una operación con el mismo nombre tiene una

variedad de definiciones● Ejemplo: el operador + denota diferentes funciones,

con diferentes implementaciones, dependiendo del tipo de argumentos (enteros, reales … etc)

Polimorfismo

90

Sobrecarga (Overloading). Ejemplo (Java)● Java soporta la sobrecarga de métodos, siempre que

tengan diferente número y tipo de argumentos.

Polimorfismo Java

public class Calculator { public double add(double a, double b){ ... } public int add(int a, int b){ ... } public float add(float a, float b){ ... }}

...int i = 10, j = 10;Calculator c = new Calculator();c.add(i, j);...

91

Sobrecarga. Ejemplo (Java) El lenguaje sobrecarga operadores matemáticos, el operador + está sobrecargado para concatenar cadenas.

Polimorfismo Java

...int i = 10, j = 10;int r = i + j;...

...String a = “hello”, b = “world”;String c = a + “, “ + b + “!”;...

92

Sobrecarga. Ejemplo (C#)● Los métodos soportan la sobrecarga como en Java● Los operadores soportan sobrecarga

Polimorfismo

public class Matrix { public static Matrix operator *(Matrix m1, Matrix m2) { ... } public static Matrix operator +(Matrix m1, Matrix m2) { ... } public static Matrix operator -(Matrix m1, Matrix m2) { ... }}

C#

...int i = 10; int j = 10;int r = i * j;...Matrix m1 = new Matrix(); Matrix m2 = new Matrix();Matrix m3 = m1 * m2;...

93

Coacción● Conversión (implícita o explicita) de un tipo de

argumento en otro.● Implícita : Normalmente usado en combinación con una

jerarquía de tipos.

Ejemplo: nosotros encontramos coacción en operadores aritméticos entre valores enteros y reales en muchos lenguajes.

● Algunos lenguajes permiten forzar la coacción explicita también llamada “cast”.

Polimorfismo

94

Coacción. Ejemplo (Java)● Coacción Implícita

Polimorfismo Java

int i = 10; double j = 10.0;double r = i + j; // variable i es implícitamente convertida a double

int error = i + j; // error; requiere coacción explicita

String a = “i have ”; int count = 10;String c = a + count + “ apples”; // la variable count es implicitamente convertida a String

String a = “hello, ”;Calculator calc = new Calculator();String c = a + calc; // el objeto Calculator es implicitamente convertido a String por la llamada

// de método String()

95

Coacción. Ejemplo (Java)● Explicita (cast)

● Si la conversión no es legal, entonces un java.lang. ClassCastException será lanzado en tiempo de ejecución.

Polimorfismo Java

int i = 10; double j = 10.0;int r = (int)(i + j); // el resultado (a double) es explícitamente convertido a int

Calculator calc = new Calculator();Integer i = (Integer)calc; // error, asignación ilegal , Calculator y Integer no son clases compatibles

96

Herencia (Polimorfismo inclusión)● La misma variable puede contener objetos de

diferentes tipos, siempre que estos objetos pertenezcan a una inclusión común.

● El resultado es la misma variable que se comporta de maneras diferentes ante los mismas operaciones (polimorfismo).

● Este concepto se aplica tanto a clases como a interfaces.

Polimorfismo

97

Herencia (Polimorfismo inclusión). Ejemplo (Java)● Polimorfismo con clases

Polimorfismo Java

Shape

Circle

<<extends>>

draw()

draw() draw()

Square

<<extends>>

Shape shp = new Shape();

Shape shp2 = new Circle();

shp2.draw(); /* bibujará un círculo (circle)*/shp2 = new Square();shp2.draw(); /* dibujará un cuadrado (square) */

shp del tipo Shape(estático)

shp referencia un objeto de tipo Shape(dinámico)

shp2 del tipo Shape(estático)

shp2 referencia un objecto de tipo Circle(dinámico)

La misma variable se comporta de manera diferente en el mismo método (Polimorfismo)

98

Herencia (Polimorfismo inclusión). Ejemplo (Java)● Polimorfismo con interfaces

Polimorfismo Java

<<interface>>Shape

CircleImpl

<<implements>>

draw()

draw() draw()

SquareImpl

<<implements>>

Shape shp = new CircleImpl();

shp.draw(); /* dibuja un círculo */shp = new SquareImpl();shp.draw(); /* dibuja un cuadrado */

shp del tipo Shape(estático)

shp referencia un objecto del tipo CircleImpl(dinámico)

La misma variable se comporta de diferentes maneras (Polimorfismo)

99

Herencia (Polimorfismo inclusión). Ejemplo (Java)● Una variable es polimórfica cuando su declaración de

tipo (tipo estático) no coincide con el tipo de objeto referenciado (tipo dinámico).

● El operador instanceof ayuda a determinar el tipo dinámico de la variable: if (shp instanceof Circle) {...}

● Para convertir una referencia del tipo base (Shape) a una referencia de tipo derivada (Circle) es requerida una conversión explícita (casting) : if (shp instanceof Circle) { Circle circ = (Circle)shp; }

Polimorfismo Java

100

Herencia (Polimorfismo inclusión). Ejemplo (C#)● En C#, podemos definir un método virtual usando la

clave 'virtual'● Un método virtual es un método Polimórfico● El se puede redefinir con nuevos valores en una

subclase usando la palabra reservada 'override'● Cuando el método no era virtual se debe usar la

palabra “new”

Polimorfismo C#

101

Herencia ( Polimorfismo inclusión). Ejemplo (C#)

Polimorfismo C#

class Animal { public Animal() { Console.WriteL ine(“Animal constructor”); } public void saluda() { Console.WriteL ine(“Animal dice Hola} public void habla() { Console.WriteL ine(“Animal habla”); } public virtual void canta() { Console.WriteL ine(“Animal canta”); }}

class Perro: Animal { public Perro() { Console.WriteL ine(“Perro constructor”); } public new habla() { Console.WriteL ine(“Perro habla”); } public override void canta() { Console.WriteL ine(“Perro canta”); }}

Animal a1 = new Animal();a1.habla();a1.canta();a1.saluda();

102

Herencia (Polimorfismo inclusión). Ejemplo (C#)

Polimorfismo C#

class Animal { public Animal() { Console.WriteL ine(“Animal constructor”); } public void saluda() { Console.WriteL ine(“Animal dice Hola} public void habla() { Console.WriteL ine(“Animal habla”); } public virtual void canta() { Console.WriteL ine(“Animal canta”); }}

class Perro: Animal { public Perro() { Console.WriteL ine(“Perro constructor”); } public new habla() { Console.WriteL ine(“Perro habla”); } public override void canta() { Console.WriteL ine(“Perro canta”); }}

Animal a1 = new Animal();a1.habla();a1.canta();a1.saluda();

La salida es:

Animal constructorAnimal hablaAnimal cantaAnimal dice Hola

103

Herencia (Polimorfismo inclusión). Ejemplo (C#)

Polimorfismo C#

Animal a2 = new Perro();a2.habla();a2.canta();a2.saluda();

class Animal { public Animal() { Console.WriteL ine(“Animal constructor”); } public void saluda() { Console.WriteL ine(“Animal dice Hola} public void habla() { Console.WriteL ine(“Animal habla”); } public virtual void canta() { Console.WriteL ine(“Animal canta”); }}

class Perro: Animal { public Perro() { Console.WriteL ine(“Perro constructor”); } public new habla() { Console.WriteL ine(“Perro habla”); } public override void canta() { Console.WriteL ine(“Perro canta”); }}

104

Herencia (Polimorfismo inclusión). Ejemplo (C#)

Polimorfismo C#

Animal a2 = new Perro();a2.habla();a2.canta();a2.saluda();

class Animal { public Animal() { Console.WriteL ine(“Animal constructor”); } public void saluda() { Console.WriteL ine(“Animal dice Hola} public void habla() { Console.WriteL ine(“Animal habla”); } public virtual void canta() { Console.WriteL ine(“Animal canta”); }}

class Perro: Animal { public Perro() { Console.WriteL ine(“Perro constructor”); } public new habla() { Console.WriteL ine(“Perro habla”); } public override void canta() { Console.WriteL ine(“Perro canta”); }}

La salida es:

Animal constructorPerro constructorAnimal hablaPerro cantaAnimal dice Hola

105

Herencia (Polimorfismo inclusión). Ejemplo (C#)

Polimorfismo C#

Perro d = new Perro();d.habla();d.canta();d.saluda();

class Animal { public Animal() { Console.WriteL ine(“Animal constructor”); } public void saluda() { Console.WriteL ine(“Animal dice Hola} public void habla() { Console.WriteL ine(“Animal habla”); } public virtual void canta() { Console.WriteL ine(“Animal canta”); }}

class Perro: Animal { public Perro() { Console.WriteL ine(“Perro constructor”); } public new habla() { Console.WriteL ine(“Perro habla”); } public override void canta() { Console.WriteL ine(“Perro canta”); }}

106

Herencia (Polimorfismo inclusión). Ejemplo (C#)

Polimorfismo C#

Perro d = new Perro();d.habla();d.canta();d.saluda();

class Animal { public Animal() { Console.WriteL ine(“Animal constructor”); } public void saluda() { Console.WriteL ine(“Animal dice Hola} public void habla() { Console.WriteL ine(“Animal habla”); } public virtual void canta() { Console.WriteL ine(“Animal canta”); }}

class Perro: Animal { public Perro() { Console.WriteL ine(“Perro constructor”); } public new habla() { Console.WriteL ine(“Perro habla”); } public override void canta() { Console.WriteL ine(“Perro canta”); }}

La salida es:

Animal constructorPerro constructorPerro hablaPerro cantaAnimal dice Hola

107

Genéricos (Polimorfismo Universal)● Soluciona el problema de la aplicación de algoritmos y

estructuras de datos genericas .● Genérico significa que soporta diferentes tipos de

datos.● La misma estructura puede trabajar con diferentes tipos

de datos de una forma homogénea.

Polimorfismo

108

Genéricos (Polimorfismo universal). Ejemplo (Java)● Antes del JDK 1.5, Java no soportaba genéricos● La Generacidad fue simulada aprovechando el

java.lang.Object● Como todas las clases se extienden, entonces una

variable de objeto puede contener una referencia a cualquier tipo de datos.

Object obj = new Integer(5);● Más tarde, necesitamos hacer multiples conversiones

explicitas (castings) para obtener el tipo de datos original

Integer n = (Integer)obj;

Polimorfismo Java

109

Genéricos (Polimorfismo universal). Ejemplo (Java)● Ejemplo Box almacene objetos de ningún tipo

● ¿y si usamos el siguiente programa? ¿dará un error de compliación o de ejecución?

Polimorfismo Java

public class Box { private Object data; public Object get() { return data; } public void set(Object x) { data = x; }}

public class BoxTest { public static void

main(String[] args) { Box b = new Box(); b.set(new Integer(46)); Integer n; n = (Integer)b.get(); }}

public static void main(String[] args) { Box b = new Box(); b.set(“Hello”); Integer n = (Integer)b.get();}

110

Genéricos (Polimorfismo universal). Ejemplo (Java)● Desde JDK .5 soporta genéricos● La generacidad permite usar tipos de datos como

parámetros● Ventajas:

● Los Errores pueden ser detectados en tiempo de compilación

● No usaremos conversiones explícitas● Los Errores disminuyen y aumenta el rendimiento

Polimorfismo Java

111

Genéricos (Polimorfismo universal). Ejemplo (Java)

● El valor del parámetro T puede ser una clase o interface (pero nunca un tipo primitivo).

● Cuando un objeto de tipo Box es declarado necesitamos especificar el tipo del parámetro T.

Polimorfismo Java

public class Box<T> { private T data; public T get() { return data; } public void set(T x) { data = x; }}

Box<Integer> b = new Box<Integer>();

112

Genéricos (Polimorfismo Universal). Ejemplo (Java)● Ejemplo de uso

● Este programa mostraría un error de compilación.

Polimorfismo Java

public static void main(String[] args) { Box<Integer> b = new Box<Integer>(); b.set(new Integer(46)); Integer n = b.get();}

public static void main(String[] args) { Box<String> b = new Box<String>(); b.set(“Hola”); Integer n = b.get();}

113

Genericos (Polimorfismo Universal). Ejemplo (Java)● En Java, podemos encontrar una gran cantidad de clases

genéricas. La mayoria de ellas implementadas en colecciones (in java.util)

● Ejemplo: ArrayList, implementación de una matriz de tamaño variable

Polimorfismo Java

packake java.util;public class ArrayL ist <E> { public ArrayL ist(); public boolean add(E element); public E set(int index, E element); public E get(int index); public E remove(int index); public int size(); …

114

Genericos (Polimorfismo universal). Ejemplo (Java)● A veces tenemos que restringir el tipo de parámetros

genéricos . Nostros usamos extends.● Ejemplo: en el parking sólo hay vehículos aparcados.

Polimorfismo Java

public class Parking <V extends Vehicle> { private int numPlaces; private ArrayL ist<V> places; public Parking(int numPlaces) { this.numPlaces = numPlaces; places = new ArrayL ist<V>(numPlaces); } …

115

Genéricos (Polimorfismo Universal). Ejemplo (Java)● Nosotros podemos definir Métodos Genéricos (no clases).● Ejemplo: Mostrar el contenido de una lista ArrayList

Polimorfismo Java

public class OperationsArray { public static <T> void showArray(ArrayL ist<T> a) { for (int i = 0; i < a.size(); i++) System.out.println(a.get(i).toString()); }}

Este parámetro colo puede ser usado dentro delMétodo donde se ha definido

116

Generics (universal Polimorfismo). Ejemplo (Java)● Ejemplo: La interface generíca java.lang. Compara entre

dos objetos comparables:

Polimorfismo Java

public interface Comparable<T> { public int compareTo(T x);}

Devuelve un número

< 0 , si es < x

> 0, si es > x

== 0, si es = x

117

Genéricos (Polimorfismo Universal). Ejemplo (Java)● Ejemplo: usando genéricos, nosotros implementamos la

comparación para el método de la clase Figure.

Polimorfismo Java

public abstract class Figure implements Comparable<Figure> {... public int compareTo(Figure f) { if (this.area() < f.area()) return -1; else if (this.area() > f.area()) return 1; else return 0; }...

118

● Este es el principal mecanismo de manejo de errores del paradigma orientado a objetos.

● Cuando un programa es ejecutado, pueden sufrir algunas situaciones imprevistas. Nosotros las llamamos Excepciones.

● El programa debe detectarlas y cambiarlas para resolverlas. La rutina que resuelve el problema es lo que se llama manejador de excepciones.

● Cuando se genera un excepción la ejecución normal del programa es interrumpida y es buscado el manejador de excepciones adecuado.

● Si se encuentra , el manejador de excepción toma el control.

Excepciones

119

Ejemplo (Java)● En Java, podemos identificar dos tipos de situaciones de

inesperadas.:● No recuperables o errors: bajo nivel, normalmente

afectan al hardware, fallo de memoria, etc.● Recuperables o Excepciones: el resto de

situaciones.● En Java, los errores/Excepciones son clases.

Excepciones Java

120

Ejemplo (Java)● Errores y Excepciones jerarquía

Excepciones Java

Object

Throwable

Error

RuntimeException IOException User Excepciones

Arithmetic-Exception

IndexOutOf-BoundsException

NullPointer-Exception

...

Situación inesperada

I/O error

Error de programación

Los errores deben repararse Las Excepciones deben controlarseException

Ex.: división x cero Ex.: indice fuera de rango Ex.: usa una referencia nula

Error lógico de programa

121

Ejemplo (Java)● Definición de un uso de excepción

Excepciones Java

public class UserException extends Exception { /* Constructors */ public UserException(String msg) { super(msg); } public UserException() { super(); }}

Una excepción normalmente contiene un mensaje con la descripción del problemaEl mensaje se puede obtener invocando al método getMessage(), heredado de la clase Throwable.

122

Ejemplo (Java)● Cuando un error o excepción surge , se crea un objeto

de la clase correspondiente . Este objeto contiene información sobre el problema y la ejecución del programa es interrumpida, lanzando tal excepción

● Se produce una excepción mediante la instrucción throw.

Excepciones Java

UserException exc = new UserException();throw exc;/* abbreviated */throw new UserException(“Something”);

123

Ejemplo (Java)● Cuando se produce una excepción el código puede:

● Propagar la excepción a cualquiera , para ser gestionada por otro, (“pasar la patata caliente”).

● O controlar/atrapar la excepción con un manejador de excepciones.

● Cuando se invoca un método que provoca una excepción, el código que lo invocó tiene las dos mismas opciones : propagar o atacar la excepción.

Excepciones Java

124

Ejemplo (Java)● Cuando un método propaga una excepción, el debe

ser declarado como explícito en el prototipo del método con throws.

Excepciones Java

public void propagateTheException() throws UserException { throw new UserException();}public void propagateTheExcepciones(int cod)throws E xception1, E xception2 { switch (cod) { case 1: throw new Exception1(); case 2: throw new Exception2(); }}

125

Ejemplo (Java)● Con el fin de controlar/ atacar la excepción, se debe

definir un manejador de excepciones try-catch-finally

Excepciones Java

public static void main (String[] args) {

try {

canThrowException();

} catch (ThrownException exc) {

System.out.println(“E rror message: “ + exc.getMessage());

exc.printStackTrace();

} finally {

System.out.println(“This is always executed”);

}

}

Dentro del try colocamos el código que podría lanzar Excepciones

Dentro del catch , en caso de excepción se controla

Optional. Se ejecuta SIEMPRE independientemente de la excepción

126

Ejemplo (Java)● El bloque catch puede ser reproducido tantas veces

como excepciones hayan en el código.

Excepciones Java

try { mayThrowException1(); mayThrowException2() } catch (Exception1 e1) { System.out.println(“E rror message: “ + e1.getMessage()); e1.printStackTrace(); } catch (E xception2 e2) { System.out.println(“E rror message: “ + e2.getMessage()); e2.printStackTrace(); }

127

Ejemplo (Java)● El bloque catch soporta Herencia para identificar el tipo

de excepción.● La mayoría de excepciones son manejadas al final.

Excepciones Java

try {

mayThrowSeveralExcepciones();

} catch (Exception e) {

System.out.println(“E rror message: “ + e.getMessage());

e.printStackTrace();

} catch (Throwable thr) {

System.out.println(“E rror message: “ + thr.getMessage());

thr.printStackTrace();

}

Captura algún tipo de excepciones

Captura las situaciones inesperadas