Sie sind auf Seite 1von 25

Conceptos bsicos de la Programacin Orientada a Objetos.

Programacin Orientada a Objetos.


La programacin orientada a Objetos bsicamente define una serie de
conceptos y tcnicas de programacin para representar acciones o
cosas de la vida real basada en objetos, a diferencia de otras formas
de programacin como por ejemplo la estructurada, con la POO
trabajamos de manera distinta vinculando diferentes conceptos tales
como clases, objetos, mtodos, propiedades, estados, herencia,
encapsulacin entre otros, generando cada vez interrelaciones en
nuestro desarrollo en pro del funcionamiento del sistema principal,
definiendo el programa como un conjunto de estos objetos
relacionados entre s.
Clases.
Las clases son uno de los principales componentes de un lenguaje de
programacin, pues en ellas ocurren todos los procesos lgicos
requeridos para un sistema, en si podemos definirlas como
estructuras que representan objetos del mundo real, tomando como
objetos a personas, lugares o cosas, en general las clases poseen
propiedades, comportamientos y relaciones con otras clases del
sistema.
Nombre: Contiene el Nombre de la Clase.
Atributos: Representan las propiedades que caracterizan la clase.
Mtodos: Representan el comportamiento u operaciones, la forma
como interacta la clase con su entorno.

En java se representa as:

Hay que tener en cuenta que Java posee unos estndares de


codificacin, que definen las convenciones para nombres de clases,
mtodos, variables, constantes.
Para las clases se define lo siguiente:
- La primera letra debe ser mayscula.
- Utilizar nomenclatura camelCase (por ej: un nombre compuesto por
varias palabras: clase "FiguraGeometrica")
- Los nombres deben ser sustantivos.
Con base a lo anterior, y como la idea es representar algo de la vida
real, entonces podemos decir que una clase puede ser cualquier cosa,
solo basta con mirar a nuestro alrededor y observar cualquier objeto,
casi todas las cosas son candidatas para convertirse en clases, por
ejemplo, una silla, un carro, un avin, una mesa, un perro, una
persona entre otros.
Basados en este concepto veamos un ejemplo de clase donde
aplicaremos las tres partes fundamentales:
Si queremos trabajar con un carro definimos:
Nombre de la clase: Carro
Atributos de la clase: Color, marca,
tamao, numero de puertas....

tipo,

Mtodos de la clase: encender(), arrancar(), girar(), retroceder(),


frenar() .
hay que tener en cuenta que la clase carro es la representacin
general de todos los carros, por eso los atributos se manejan como
variables, ya que, si tomamos la marca o el color, depende del carro
con el que vamos a trabajar.
Y listo, ya tenemos el concepto de nuestra clase definida, en la
entrada sobre conceptos bsicos vimos la estructura bsica de una
clase en java, ahora veamos cmo se representa nuestra clase Carro:

Como vemos la clase cumple con las reglas definidas anteriormente,


tiene un nombre, atributos y mtodos, solo tenemos que definir lo
que queremos que nuestros mtodos realicen.
Objeto.
Los objetos representan una entidad concreta o abstracta del mundo
real, en programacin bsicamente se le conoce como la instancia de
una clase en si es lo que da el sentido a estas.

Al igual que las clases se componen de tres partes fundamentales:


Estado: Representa los atributos o caractersticas con valores
concretos del objeto.
Comportamiento: Se define por los mtodos u operaciones que se
pueden realizar con l.

Identidad: Es la propiedad nica que representa al objeto y lo


diferencia del resto.
En la imagen, los moldes representan las clases,
mientras que las galletas obtenidas de estos
moldes representan los objetos instancias de
estas clases, por ejemplo, atributos del objeto
galleta podra ser sabor, color, tamao etc.
En java se representa creando una instancia de la clase por medio de
la palabra new al hacer eso creamos el objeto de la clase y podemos
hacer uso de los mtodos o atributos de esta (dependiendo de la
visibilidad de los mismos) por medio de un punto (.) as:

Herencia.
La herencia en java representa lo que conocemos
de herencia en el mundo real, bsicamente
mediante esta obtenemos las caractersticas o
rasgos comunes de nuestros padres o abuelos, en
java es el mismo enfoque permitiendo la creacin
de nuevas clases basadas en clases ya existentes, con las cuales
podemos obtener las caractersticas de las clases padres, heredando
campos, atributos, mtodos o funcionalidades.
Bsicamente mediante este concepto
podemos obtener las caractersticas
de una clase padre o de una jerarqua
mayor dependiendo de nuestro rbol
de herencia, en java definimos esta
jerarqua
mediante
la
palabra
extends seguido del nombre de la
clase a la que vamos a heredar,
tambin se debe tener claro que solo
se puede heredar de una sola clase
pues el lenguaje no permite la
Herencia mltiple (En Java por defecto
todas las clases heredan de la clase
Object, es decir, esta es la clase
Padre de todas las clases en Java).

Encapsulamiento.

Este concepto es uno de los ms importantes en trminos de


seguridad dentro de nuestra aplicacin, la encapsulacin es la
forma de proteger nuestros datos dentro del sistema,
estableciendo bsicamente los permisos o niveles de visibilidad o
acceso de nuestros datos.
Se representa por 3 niveles:
Pblico: Se puede acceder a todos los atributos o
mtodos de la clase.
Protegido: Se puede acceder a los atributos o mtodos solo en la
misma jerarqua de herencia.
Privado: Solo se puede acceder a los atributos o mtodos de la clase
en la que se encuentran.
con la Encapsulacin mantenemos nuestros datos seguros, ya que
podemos evitar que por ejemplo se hagan modificaciones al estado o
comportamiento de un objeto desde una clase externa, una buena
prctica es trabajar con mtodos setter y getter que permiten
manipular nuestros datos de forma segura.
en Java lo representamos as:

Clases Abstractas.
La abstraccin permite resaltar la
parte ms representativa de

algo,
para

ignorando
centrarse

detalles
en
lo

principal.
La imagen
es
muy
fcil de identificar, con base a ella podemos crear una clase
persona, o la clase hombre, humano entre otras, pero
obviamente vemos que la imagen no tiene elementos como
ojos, nariz, boca, rostro en general, ni dedos, pies, manos o cuello,

pero entonces porque decimos que es una persona? Precisamente


aqu estamos aplicando el concepto de abstraccin, ya que nos
fijamos en lo ms representativo de algo, en este caso
vemos que se tiene una cabeza, tronco, brazos y pies,
con esto es suficiente para saber que es una persona sin
fijarnos en los detalles mencionados anteriormente.
La Abstraccin en java solo tiene lgica mediante la
Herencia, ya que una clase abstracta posee al menos un mtodo
abstracto el cual no tiene implementacin, el comportamiento de
estos mtodos lo definen las clases concretas que lo hereden.
Podemos usarlos cuando existan varias clases con caractersticas o
acciones comunes, pero con diferentes comportamientos, mediante el
uso de la herencia y componentes abstractos hacemos ms ptima y
organizada nuestra aplicacin. (hay que tener en cuenta que, a
diferencia de las clases concretas, las clases abstractas no se pueden
instanciar).
Bsicamente una clase Abstracta es similar a una clase normal , la
estructura es prcticamente igual, ya que poseen nombre, atributos y
mtodos, pero para que una clase sea abstracta la condicin es que al
menos uno de sus mtodos sea abstracto (se le agrega la palabra
reservada abstract y no se especifica el cuerpo del mtodo). Su uso
depende de la aplicacin del concepto de Herencia y adicionaremos
a la estructura bsica de clase la palabra reservada abstract.

Veamos cmo se implementa en Java.

Caractersticas de una Clase Abstracta.


Esto es lo que debemos conocer sobre de Clases Abstractas.

Una clase Abstracta No puede ser instanciada (no se pueden crear


objetos directamente - new), solo puede ser heredada.

Si al menos un mtodo de la clase es abstract, esto obliga a que


la clase completa sea definida abstract, sin embargo, la clase
puede tener el resto de mtodos no abstractos.

Los mtodos abstract no llevan cuerpo (no llevan los caracteres


{}).

La primera subclase concreta que herede de una clase abstract


debe implementar todos los mtodos de la superclase.

Cundo Utilizarlas?

Al trabajar clases y mtodos abstractos, no solo mantenemos nuestra


aplicacin ms organizada y fcil de entender, sino que tambin al no
poder instanciar una clase abstracta nos aseguramos de que las
propiedades especficas de esta, solo estn disponibles para sus
clases hijas....
Con las Clases Abstractas lo que hacemos es definir un proceso
general que luego ser implementado por las clases concretas que
hereden dichas funcionalidades. Qu?, es decir, si tengo una clase
que hereda de otra Abstracta, estoy obligado a poner en el cdigo,
todos los mtodos abstractos de la clase padre, pero esta vez sern
mtodos concretos y su funcionalidad o cuerpo ser definido
dependiendo de para que la necesite, de esa manera si tengo otra
clase que tambin hereda del mismo padre, implementar el mismo
mtodo, pero con un comportamiento distinto. Veamos un Ejemplo.

En el diagrama vemos una clase Abstracta Instrumento, la cual


posee una propiedad tipo y un mtodo abstracto tocar(), vemos
tambin las clases hijas Guitarra, Saxofn y Violn que para este
ejemplo solo utilizaremos (mediante la herencia) las propiedades de
la clase Padre.
Todos los instrumentos musicales se pueden tocar, por ello creamos
este mtodo abstracto, ya que es un proceso comn en todos los
instrumentos sin importar el detalle de cmo se tocan, pues sabemos
que una guitarra no se toca de la misma manera que el saxofn, as
al heredar de la clase Instrumento, todas sus clases hijas estn
obligadas a implementar este mtodo y darle la funcionalidad que le
corresponda.

Veamos esto en Java.

Como vemos cada una de las


clases concretas implementan el
mtodo tocar() y le dan la
funcionalidad
dependiendo
de
cmo se toque el instrumento,
tambin en cada constructor de las
clases definimos el tipo, pero si
nos fijamos bien en las clases
concretas no tenemos la variable
tipo declarada, pues estamos
usando la variable heredada de la
clase Instrumento.
Hay que tener en cuenta que cuando trabajamos con clases
Abstractas, estas solo pueden ser heredadas mas no instanciadas,
esto quiere decir que no podemos crear objetos directamente de
estas clases.
Como vemos en la clase Principal tenemos la lgica para ejecutar
nuestra aplicacin y usamos el concepto de Polimorfismo para crear
los objetos de tipo Instrumento por medio de sus clases Hijas, pero
en ningn momento creamos un objeto como instancia directa de la
clase abstracta.
Interfaces.
Las interfaces son el mecanismo que utiliza Java para
simular la herencia mltiple, como mencionamos en Java
solo se puede extender de una sola clase, mediante el uso
de interfaces esto se puede simular ya que el lenguaje
permite implementar el nmero de interfaces que
necesitemos, bsicamente son clases completamente abstractas, es
comn relacionarlas con un contrato en el que se define que se debe
hacer, as cada clase concreta que implemente una interfaz est
obligada a implementar todos los mtodos que la compongan.
Las interfaces definen lo que la clase que la implemente deber hacer,
mas no la forma como lo har.
Al decir que las interfaces son clases completamente abstractas
significa que todos sus mtodos lo son y por ende no poseen
implementacin, no requieren el uso de la palabra reservada
abstract, ya que al ser completamente abstracta todo dentro de ella
lo es, al igual que las clases abstractas la implementacin de los
mtodos depende de las clases concretas que las usen.

Se debe tener en cuenta que toda variable definida en una interfaz


automticamente se convierte en una constante, adems tampoco se
puede instanciar una interfaz.
En java se representan con la palabra interface y se usan con la
palabra implements as:

Caractersticas de las Interfaces.

Todos los mtodos de una interfaz son implcitamente public


abstract, no es necesario especificarlo en la declaracin del
mismo.
Todas las variables y atributos de una interfaz son implcitamente
constantes (public static final), no es necesario especificarlo en
la declaracin del misma.
Los mtodos de una interfaz no pueden ser: static, final, strictfp
ni native.
Una interfaz puede heredar (extends) de una o ms interfaces.
Una interfaz no puede heredar de otro elemento que no sea una
interfaz.
Una interfaz no puede implementar (implements) otra interfaz.
Una interfaz debe ser declarada con la palabra clave interface.
Los tipos de las interfaces pueden ser utilizados polimrficamente.
Una interfaz puede ser public o package (valor por defecto).
Los mtodos toman como mbito el que contiene la interfaz.

Cundo Utilizarlas?
Su uso est muy ligado al concepto de herencia y cumple el mismo
principio que aplicamos al usar clases abstractas, lo que buscamos es
establecer un mecanismo donde podamos compartir caractersticas
comunes entre clases diferentes, adems al igual que con clases
abstractas nos aseguramos que los mtodos y atributos solo estn
disponibles para las clases que las implementen.
Polimorfismo.
Este tal vez sea uno de los conceptos de la programacin orientada a
objetos ms usados pero muchas veces sin saber que se aplica ya
que el concepto inicialmente puede ser un poco confuso, bsicamente
mediante el polimorfismo programamos de forma
general en lugar de hacerlo de forma especfica,
se usa cuando se trabajen con la herencia y
objetos de caractersticas comunes los cuales
comparten la misma superClase y rbol
jerrquico, al trabajar con este concepto
optimizamos y simplificamos en gran medida nuestro trabajo.
Bsicamente podemos definirlo como la capacidad que tienen los
objetos de comportarse de mltiples formas sin olvidar que para esto
se requiere de la herencia, en si consiste en hacer referencia a
objetos de una clase que puedan tomar comportamientos de objetos
descendientes de esta.
Con el polimorfismo usamos la generalizacin olvidando los detalles
concretos de los objetos para centrarnos en un punto en comn
mediante una clase padre.
Tomando como ejemplo la imagen anterior, podemos decir que un
objeto de la clase FiguraGeometrica puede usarse para referirse a
cualquier objeto de cualquier subClase de FiguraGeometrica, en otras
palabras, una figura geomtrica puede ser un cuadro, un tringulo,
un cuadrado o cualquier figura que en trminos generales sea
geomtrica.

Veamos este proceso como se representa en Java.

Como vemos en el ejemplo la clase FiguraGeometrica puede


convertirse en cualquier figura que se encuentra en su jerarqua de
Herencia pudiendo utilizar las propiedades que compartan entre ellas,
hay que tener presente que solo se permite el polimorfismo de clases
padre a clases hija mas no al contrario.
Qu es un Constructor?
El objetivo de un constructor es el de inicializar un objeto cuando ste
es creado. Asignaremos los valores iniciales, as como los procesos
que sta clase deba realizar.

Se utiliza para crear tablas de mtodos virtuales y poder as


desarrollar el polimorfismo, una de las herramientas de la
programacin orientada a objetos (POO). Al utilizar un constructor, el
compilador determina cul de los objetos va a responder al mensaje
(virtual) que hemos creado. Tiene un tipo de acceso, un nombre y un
parntesis.
En java es un mtodo especial dentro de una clase, que se llama
automticamente cada vez que se crea un objeto de esa clase.
Posee el mismo nombre de la clase a la cual pertenece y no puede
regresar ningn valor (ni siquiera se puede especificar la palabra
reservada void). Por ejemplo, si aadiramos a la clase Suma un
constructor, tendramos que llamarlo tambin Suma. Cuando en una
clase no se escribe propiamente un constructor, java asume uno por
defecto (que es el Constructor vaco, es decir sin parmetros).

Constructor por defecto:


Un constructor por defecto es un constructor sin parmetros que no
hace nada. Sin embargo, ser invocado cada vez que se construya un
objeto sin especificar ningn argumento, en cuyo caso el objeto ser
iniciado con los valores predeterminados por el sistema (los atributos
numricos a ceros, los alfanumricos a nulos, y las referencias a
objetos a null).
Constructor con Parmetros:
Un constructor con Parmetros siempre debe especificar algn
argumento, en cuyo caso el objeto ser iniciado con los valores
indicados por el usuario, y realizar tambin las acciones
programadas al ejecutarse.
Destructor:
Un destructor en algunos lenguajes de programacin orientados a
objetos es un mtodo de una clase que se llama justo antes de una
instancia de esa clase y se elimina de la memoria. No todos los
lenguajes de programacin orientados a objetos suelen tener un
destructor.
La contrapartida de un destructor es un constructor que se ejecuta
cuando se crea el objeto, se instancia y se lo inicializa.

Excepciones.
Una excepcin es un objeto que se genera automticamente cuando
se produce un acontecimiento circunstancial que impide el normal
funcionamiento del programa:
-

Dividir por cero.

No encontrar un determinado fichero.

- Utilizar un puntero nulo en lugar de una referencia a un objeto.


El objeto generado excepcin contiene informacin sobre el
acontecimiento ocurrido y transmite esta informacin al mtodo
desde el que se ha generado la excepcin.
La ocurrencia de estas situaciones excepcionales provocar la
terminacin no controlada del programa o aplicacin.
Las excepciones estndar.
En Java las situaciones que pueden provocar un fallo en el programa
se denominan excepciones.
Las excepciones pueden originarse de dos modos:

El programa hace algo ilegal (caso normal)

El siguiente cdigo de ejemplo origina una excepcin de divisin por


cero:
public class PruebaExcepcion {
public static void main( String[] a ) {
int i=0, j=0, k;
k = i/j; // Origina un error de division-by-zero
}
}
Si compilamos y ejecutamos esta aplicacin Java, obtendremos la
siguiente salida por pantalla:

> javac PruebaExcepcion.java


> java PruebaExcepcion
java.lang.ArithmeticException: / by zero
at PruebaExcepcion.main(melon.java:5)
Las excepciones predefinidas, como por ej. ArithmeticException, se
conocen como excepciones runtime. Las excepciones en tiempo de
ejecucin ocurren cuando el programador no ha tenido cuidado al
escribir su cdigo.
Por ejemplo: cuando se sobrepasa la dimensin de un array, se lanza
una excepcin ArrayIndexOutOfBounds.
Cuando se hace uso de una referencia a un objeto que no ha sido
creado se lanza la excepcin NullPointerException.
Estas excepciones le indican al programador que tipos de fallos tiene
el programa y que debe arreglarlo antes de proseguir.
Actualmente, como todas las excepciones son eventos runtime, sera
mejor llamarlas excepciones irrecuperables. Esto contrasta con las
excepciones que generamos explcitamente, que suelen ser mucho
menos severas y en la mayora de los casos podemos recuperarnos
de ellas. Por ejemplo, si un fichero no puede abrirse, preguntamos al
usuario que nos indique otro fichero; o si una estructura de datos se
encuentra completa, podremos sobrescribir algn elemento que ya no
se necesite.
El programa explcitamente genera una excepcin.
Para generar explcitamente una excepcin se ejecutar la sentencia
throw.
La sentencia throw tiene la siguiente forma:
throw ObjetoExcepction;
El objeto ObjetoException es un objeto de una clase Excepcion o que
hereda (ver siguiente unidad) de la clase Exception. Para que un
mtodo en Java, pueda lanzar excepciones ser necesario indicarlo
expresamente.
void MetodoQueLanzaExcepcion() throws Exception1,Exception2,...

Se pueden definir excepciones propias, no hay por qu limitarse a las


predefinidas. Para definir una excepcin ser necesario con extender
la clase Exception (herencia) y proporcionar la funcionalidad extra
que requiera el tratamiento de esa excepcin.
Ejemplos de excepciones.
Por formato
String str=" 12 ";
int numero=Integer.parseInt(str);
Si se introducen caracteres no numricos, o no se quitan los espacios
en blanco al principio y al final del string, se lanza una excepcin
NumberFormatException.
El mensaje que aparece en la ventana nos indica:
El tipo de excepcin: NumberFormatException,
La funcin que la ha lanzado: Integer.parseInt() que se llama
dentro de main (por ejemplo)
Por objeto no inicializado
Habitualmente, en un mensaje a un objeto no inicializado
public static void main(String[] args) {
String str;
str.length();
//...
}

El compilador se queja con el siguiente mensaje variable str might


not have been initilized. En otras ocasiones, se lanza una excepcin
del tipo NulPointerException.
class MiCanvas....{
Grafico grafico;
public void paint(...){
grafico.dibuja();
//...
}
//...

}
Si al llamarse a la funcin paint, el objeto grafico no ha sido
inicializado con el valor devuelto por new al crear un objeto de la
clase Grafico o de alguna de sus clases derivadas, se lanza la
excepcin NullPointerException apareciendo en la consola el
siguiente texto.
Tipos de excepcin
Todos los tipos de excepcin son subclase de Throwable. Esta clase
tiene dos subclases:
1. Exception: Se usa para las excepciones que debern capturar los
programas de usuario.
Esta clase tiene como subclase a RuntimeException, que representa
excepciones definidas automticamente por los programas (divisin
por 0, ndice invlido de matriz, etc). Adems tiene otras subclases
como ClassNotFoundException, InterruptedException,etc.
1. Error: Excepciones que no se suelen capturar en condiciones
normales.
Suelen ser fallos catastrficos no gestionados
programas. Ejemplo: desbordamiento de la pila.

por

nuestros

Excepciones Predefinidas
Las excepciones predefinidas y su jerarqua de clases es la que se
muestra en la figura:
-Excepciones no capturadas
public class EjemploExcepcion {
static void subroutine() {
int d = 0;
int a = 10 / d;
}
public static void main(String args[]) {
System.out.println("Antesxc1.subroutine");
EjemploExcepcion.subroutine();
System.out.println("Despuesxc1.subroutine");
}
}

Cuando la mquina virtual Java detecta la divisin por 0 construye


un objeto de excepcin y lanza la excepcin. Esto detiene la
ejecucin de EjemploExcepcion, ya que no hemos incluido un
gestor de la excepcin.

Cualquier excepcin no tratada por el programa ser tratada por el


gestor por defecto.
try y catch
public class Exc2 {
public static void main(String args[]) {
int d, a;
try { // controla un bloque de cdigo.
d = 0;
a = 42 / d;
System.out.println("Estoe imprimir.");
}
catch (ArithmeticException e) {// captura el error de divisin
System.out.println("Divisincero.");
}
System.out.println("Despusa sentencia catch.");
}
}
El objetivo de una sentencia catch bien diseada ser resolver la
condicin de excepcin y continuar.
// Gestiona una excepcin y continua.
import java.util.Random;
public class ManejadorExcepcion {
public static void main(String args[]) {
int a=0, b=0, c=0;
Random r = new Random();
for(int i=0; i<32000; i++) {
try {
b = r.nextInt();
c = r.nextInt();
a = 12345 / (b/c);
} catch (ArithmeticException e) {
System.out.println("Divisioncero.");
a = 0; // asigna a la variable el valor 0 y continua
}
System.out.println("a a);
}
}
}

La clase Throwable sobrescribe el mtodo toString() de la clase


Object, devolviendo una cadena con la descripcin de la
excepcin.
catch (ArithmeticException e) {
System.out.println("Excepcion e);
a = 0; // hacer a=0 y continuar
}
Clusula catch mltiple
En algunos casos un bloque de cdigo puede activar ms de un
tipo de excepcin. Usaremos varios bloques catch.
El siguiente programa produce una excepcin si se ejecuta sin
parmetros y otra distinta si se ejecuta con un parmetro.
Ejemplo
Public class MultiCatch {
public static void main(String args[]) {
try {
int a = args.length;
System.out.println("a+ a);
int b = 42 / a;
int c[] = { 1 };
c[42] = 99;
} catch(ArithmeticException e) {
System.out.println("Division0: " + e);
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println("Indicea de limites: " + e);
}
System.out.println("Despuesbloque try/catch.");
}
}
Al ordenar los bloques catch, las subclases de excepcin deben ir
antes que la superclase (en caso contrario no se ejecutarn nunca
y dar error de compilacin por cdigo no alcanzable).
Ejemplo
class SuperSubCatch {
public static void main(String args[]) {
try {
int a = 0;
int b = 42 / a;

}
catch(Exception e) {
System.out.println("catch cualquier tipo de excepcin.");
}
/* Este catch nunca se ejecutar */
catch(ArithmeticException e) { // ERROR - no alcanzable
System.out.println("Estoa se ejecutar.");
}
}
}
Sentencias try anidadas

Una sentencia try puede estar incluida dentro del bloque de otra
sentencia try.

Cuando un try no tiene catch para una excepcin se busca si lo


hay en el try ms externo, y as sucesivamente.

Ejemplo
public class TrysAnidados {
public static void main(String args[]) {
try {
int a = args.length;
/* Si no hay ningn argumento en la lnea de rdenes
se generar una excepcin de divisin por cero. */
int b = 42 / a;
System.out.println("a+ a);
try { // bloque try anidado
/* Si se utiliza un argumento en la lnea de rdenes
se generar una excepcin de divisin por cero. */
if(a==1) a = a/(a-a); // divisin por cero
/* Si se le pasan dos argumentos en la lnea de rdenes,
se genera una excepcin al sobrepasar los lmites
del tamao de la matriz. */
if(a==2) {
int c[] = { 1 };
c[42] = 99; // genera una excepcin de fuera de lmites
}
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println("Indicea de limites: " + e);
}
} catch(ArithmeticException e) {
System.out.println("Divisin0: " + e);
}

}
}
Lanzar excepciones explcitamente: throw
Usando la sentencia throw es posible hacer que el programa lance
una excepcin de manera explcita: throw objetoThrowable;
El objetoThrowable puede obtenerse mediante:
1.- El parmetro de una sentencia catch.
2.- Con el operador new.
Ejemplo
public class ThrowDemo {
public static void demoproc() {
try {
throw new NullPointerException("demo");
} catch(NullPointerException e) {
System.out.println("Capturaro de demoproc.");
throw e; // relanza la excepcin
}
}
public static void main(String args[]) {
try {
demoproc();
} catch(NullPointerException e) {
System.out.println("Nueva captura: " + e);
}
}
}
El flujo de ejecucin se detiene tras la sentencia throw (cualquier
sentencia posterior no se ejecuta).
Salida del anterior ejemplo:
Captura dentro de demoproc.
Nueva captura: java.lang.NullPointerException: demo
Sentencia throws
Sirve para enumerar una lista de los tipos de excepcin que un
mtodo puede lanzar.

Debe usarse para proteger los mtodos que usan un determinado


mtodo, si tal mtodo lanza la excepcin, pero no la maneja.

Es necesario usarla con todas las excepciones excepto Error y


RuntimeException y sus subclases.

Si las excepciones que lanza el mtodo y no maneja no se ponen


en throws se producir error de compilacin.

Forma general de declaracin de mtodo con throws


tipo metodo(lista_de_parametros) throws lista_de_excepciones
{
// cuerpo del metodo
}
Ejemplo
// Programa errneo que no compila
public class ThrowsDemo {
static void throwOne() {
System.out.println("DentrohrowOne.");
throw new IllegalAccessException("demo");
}
public static void main(String args[]) {
throwOne();
}

El mtodo que use al del throws debe capturar todas las excepciones
listada con el throws.
Ejemplo
// Programa correcto
class ThrowsDemo {
static void throwOne() throws IllegalAccessException {
System.out.println("DentrohrowOne.");
throw new IllegalAccessException("demo");
}
public static void main(String args[]) {
try {
throwOne();
} catch (IllegalAccessException e) {
System.out.println("Capturae);
}
}
}

Sentencia finally

Se puede usar esta sentencia en un bloque try-catch para


ejecutar un bloque de cdigo despus de ejecutar las sentencias
del try y del catch.

Se ejecutar tanto si se lanza, como si no una excepcin, y


aunque no haya ningn catch que capture esa excepcin.

Podr usarse por ejemplo para cerrar los archivos abiertos.

Ejemplo
public class FinallyDemo {
public static void procA() {// Lanza una excepcin fuera del mtodo
try {
System.out.println("DentrorocA");
throw new RuntimeException("demo");
} finally {
System.out.println("Sentencially de procA");
}
}
public static void procB() {// Ejecuta la sentencia return
// dentro del try
try {
System.out.println("DentrorocB");
return;
} finally {
System.out.println("Sentencially de procB");
}
}
public static void procC() {// Ejecuta un bloque try normalmente
try {
System.out.println("DentrorocC");
} finally {
System.out.println("Sentencially de procC");
}
}
public static void main(String args[]) {
try {procA();
} catch (Exception e) {
System.out.println("Excepcinurada");

}
procB(); procC();
}
}

Salida del anterior programa


Dentro de procA
Sentencia finally de procA
Excepcin capturada
Dentro de procB
Sentencia finally de procB
Dentro de procC
Sentencia finally de procC

Ordenamiento por insercin


El ordenamiento por insercin (insertion sort en ingls) es una
manera muy natural de ordenar para un ser humano, y puede usarse
fcilmente para ordenar un mazo de cartas numeradas en forma
arbitraria. Requiere O(n) operaciones para ordenar una lista de n
elementos.
Inicialmente se tiene un solo elemento, que obviamente es un
conjunto ordenado. Despus, cuando hay k elementos ordenados de
menor a mayor, se toma el elemento k+1 y se compara con todos los
elementos ya ordenados, detenindose cuando se encuentra un
elemento menor (todos los elementos mayores han sido desplazados
una posicin a la derecha) o cuando ya no se encuentran elementos
(todos los elementos fueron desplazados y este es el ms pequeo).
En este punto se inserta el elemento k+1 debiendo desplazarse los
dems elementos.

Das könnte Ihnen auch gefallen