Upload
holahola333hola
View
26
Download
1
Embed Size (px)
Citation preview
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()
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