Post Populares

EOFException

By : Alma Esqueda
Es una checked exception, por lo cual, en caso de ser declarada tiene que ser manejada dentro del método. Existen dos modos de manejar una excepción: Arrojándola o tratándola. Cuando arrojas una excepción (usando la palabra reservada throws) quiere decir que en el método donde la arrojas no es necesario darle un tratamiento en específico, sin embargo, la excepción podrá ser arrojada hacia algún trozo de código que mande llamar a este método.



IOException

By : Alma Esqueda
Significa que se ha producido un error en la entrada/salida. Es obligatorio tratar la excepción, ya sea en la cabeza del método con "throws IOException" o con un bloque try/catch.


java.io.IOException es una clase java que tiene por objetivo señalar que ha ocurrido algún tipo error de entrada o salida de datos, java crea un objeto de esta clase que representa ese error.

Así, los métodos de las clases que manejan Streams de entrada o salida lanzan estas excepciones (objetos de la clase IOException); por ejemplo, aquellos de las clases InputStream, InputStreamReader, OutputStream o OutputStreamWriter. 
Como ocurre con otras clases de excepciones, cuando se crea y lanza un objeto de la clase IOException este debe ser capturado en un bloque try - catch o ser traspasado o relanzado al método que realizó la llamada al método que genera la excepción (sentencia throws). Sin embargo, una vez generado el objeto Exception, este debe ser capturado en alguno de los métodos, ya que de no ser así hará que el programa termine, arrojando un mensaje de error. 
Cuando crees algún programa que utilize algunas de estas clases de entrada/salida (io) y sus métodos, deberás importar también la clase IOException, agregando la siguiente línea en el encabezado de tu programa 


NoRouteToHostException

By : Alma Esqueda
Las señales que se produjo un error al intentar conectar un conector a una dirección remota y el puerto. Normalmente, el host remoto no se puede alcanzar debido a un cortafuegos intermedio, o si un enrutador intermedio es hacia abajo.


BindException

By : Alma Esqueda
Las señales que se produjo un error al intentar enlazar un socket a una dirección y el puerto local. Por lo general, el puerto está en uso, o la dirección local solicitada no puede ser asignada.
Esta excepción se lanza para indicar que se produjo un error cuando una aplicación intenta enlazar un socket a una dirección y el puerto local. La principal causa de esta excepción es que, o bien el puerto ya está en uso, o la dirección solicitada no se puede asignar a la aplicación de llamada.
El BindException clase amplía la SocketException clase, que se lanza para indicar un error al crear o acceder a un socket.Además, el SocketException clase extiende la IOException clase, que se utiliza para indicar que se ha producido una excepción de E/S.
La estructura de las BindException
Constructores
*BindException ()
Crea una instancia de la BindException clase, estableciendo nula como su mensaje.
*BindException (String s)
Crea una instancia de la BindException clase, utilizando la cadena especificada como mensaje. El argumento de cadena indica el nombre de la clase que arrojó el error.
El BindException en Java

Como ya explicamos, el BindException se produce cuando la aplicación Java intenta enlazar un socket a una dirección y el puerto local, pero que están siendo utilizados por otra aplicación. Eche un vistazo al siguiente ejemplo:

BindExceptionExample.java:
01
importación java.io.IOException;
02
importación java.net.ServerSocket;

03

04
pública clase BindExceptionExample {

05
     
06
    privada última estática int PORT = 15000;

07
     
08
    públicas estáticas void main (String [] args) lanza IOException {

09
        ServerSocket _socket = nueva ServerSocket (PORT);
10
         

11
        // La siguiente declaración lanza una BindException.
12
        ServerSocket _socket_ = nueva ServerSocket (PORT);

13
         
14
        _socket.close ();

15
        _socket_.close ();
16
    }

17
}

En este ejemplo queremos crear dos instancias del ServerSocket clase. La primera instancia se crea correctamente y se une el puerto especificado. Cuando el segundo ejemplo está a punto de ser creado, usando el mismo puerto, entonces, un BindException se lanza.
Una muestra de la ejecución se muestra a continuación:
1
Excepción en el hilo "principal" java.net.BindException: Dirección ya en uso
2
    en java.net.PlainSocketImpl.socketBind (Método Nativo)

3
    en java.net.AbstractPlainSocketImpl.bind (AbstractPlainSocketImpl.java:382)
4
    en java.net.ServerSocket.bind (ServerSocket.java:375)

5
    en java.net.ServerSocket. (ServerSocket.java:237)
6
    en java.net.ServerSocket. (ServerSocket.java:128)

7
    en main.java.BindExceptionExample.main (BindExceptionExample.java:14)
La forma más sencilla de evitar esta excepción es usar otro puerto y verificar que el puerto no está en uso por otra aplicación.



SocketException

By : Alma Esqueda
Lanzado para indicar que hay un error al crear o acceder a un Socket* .
* Los sockets son un mecanismo que nos permite establecer un enlace entre dos programas que se ejecutan independientes el uno del otro (generalmente un programa cliente y un programa servidor) Java por medio de la librería java.net nos provee dos clases: Socket para implementar la conexión desde el lado del cliente y ServerSocket que nos permitirá manipular la conexión desde el lado del servidor. Cabe resaltar que tanto el cliente como el servidor no necesariamente deben estar implementados en Java, solo deben conocer sus direcciones IP y el puerto por el cual se comunicarán.




NullPointerException

By : Alma Esqueda
Las excepciones de tipo NullPointer son las causas de excepción en tiempo de ejecución más comunes.
Todos los valores en Java, excepto las primitivas, son referencias a objetos y todos tienen un valor por defecto, el valor null, que indica que el objeto no tiene asignado ningún valor. A un objeto con valor null, no inicializado, que no referencia ningún objeto, no se le puede aplicar ningún método, siendo el resultado el lanzamiento de una excepción de tipo NullPointerException
Una excepción de tipo NullPointerException lleva asociada la información de la línea de código donde se produjo el error. El mecanismo para detectar y corregir el error es directamente ir a esta línea de código y averiguar cuál de los objetos involucrados en la operación es el que no ha sido inicializado. Una vez detectado, será necesario inicializar el valor del objeto, pero siempre teniendo cuidado de no hacerlo para simplemente eliminar el error, sino que se le debe asignar un valor acorde con la lógica propia del programa.

 public class ValidarNull {
    public static void main(String[] args){
        String cadenaPrueba = null;
        try{
           //Validamos la cadena nula evitando la excepciòn
            if ("".equals(cadenaPrueba)) {
                System.out.println("Hola");
            }else{
                System.out.println("Adiós");
            }
        }catch(NullPointerException ex){
            System.out.println("Una fea excepción: "+ex);
        }
    }   
}

Herencia

By : Alma Esqueda
La herencia es específica de la programación orientada a objetos, donde una clase nueva se crea a partir de una clase existente. La herencia (a la que habitualmente se denomina subclases) proviene del hecho de que la subclase (la nueva clase creada) contiene las atributos y métodos de la clase primaria. La principal ventaja de la herencia es la capacidad para definir atributos y métodos nuevos para la subclase, que luego se aplican a los atributos y métodos heredados.
Esta particularidad permite crear una estructura jerárquica de clases cada vez más especializada. La gran ventaja es que uno ya no debe comenzar desde cero cuando desea especializar una clase existente. Como resultado, se pueden adquirir bibliotecas de clases que ofrecen una base que puede especializarse a voluntad (la compañía que vende estas clases tiende a proteger las datos miembro usando la encapsulación).

Jerarquía de clase

La relación primaria-secundaria entre clases puede representarse desde un punto de vista jerárquico, denominado vista de clases en árbol. La vista en árbol comienza con una clase general llamada superclase (a la que algunas veces se hace referencia como clase primariaclase padre,clase principal, o clase madre; existen muchas metáforas genealógicas). Las clases derivadas (clase secundaria o subclase) se vuelven cada vez más especializadas a medida que van descendiendo el árbol. Por lo tanto, se suele hacer referencia a la relación que une a una clase secundaria con una clase primaria mediante la frase "es una" x o y.
Jerarquía de clase

Redefinición de métodos en clases derivadas.

By : Alma Esqueda
Re-definición de las clases derivadas: El lenguaje java permite re-definir miembros de la clase base en las clases derivadas, pero el compilador emite una advertencia cuando detecta una re-definición. Una advertencia (warning) es un mensaje del compilador acerca de un posible problema. Sin embargo, en este caso sí se genera código ejecutable (a diferencia del mensaje de error). Re-definición de campos.

Constructores y destructores en clases derivadas.

By : Alma Esqueda
Constructores en clases derivadas: Al instanciar objetos de clases derivadas se inicia una cadena de invocaciones a constructores en las cuales el constructor de la clase derivada, antes de realizar sus propias tareas, invoca (ya sea implícita o explícitamente) al constructor de su clase base. Similarmente, si la clase base fue derivada de otra clase, el constructor de la clase base debe invocar al constructor de la clase ubicada en el siguiente nivel superior de la jerarquía, y así sucesivamente. El último constructor invocado en la cadena es el constructor de la clase Object, cuyo cuerpo se ejecuta primero. El cuerpo del constructor de la clase derivada se ejecuta al final. El constructor de cada clase base inicializa las variables de instancia que el objeto de la clase derivada hereda.

Destructores en clases derivadas: Cuando remueve de la memoria un objeto de una clase derivada, el recolector de basura invoca al destructor del objeto. Esto inicia una cadena de invocaciones a destructores, en donde el destructor de la clase derivada y los destructores de las clases bases directas e indirectas se ejecutan en orden inverso al que se ejecutaron los constructores, esto es, primero se ejecuta el destructor de la clase derivada y al final se ejecuta el destructor de la clase base ubicada en el nivel superior de la jerarquía. La ejecución de los destructores debe liberar todos los recursos que el objeto adquirió, antes de que el recolector de basura reclame la memoria de ese objeto. Cuando el recolector de basura invoca al destructor de un objeto de una clase derivada, ese destructor realiza su tarea y después invoca al destructor de la clase base.

Referencia al objeto de la clase base.

By : Alma Esqueda
La funcionalidad de una clase existente se puede extender al crear una nueva clase que se deriva de ella. La clase derivada hereda las propiedades de la clase base y es posible agregar o reemplazar métodos y propiedades según sea necesario.

En C#, el operador: que equivale a extends e implements en Java, define la herencia e implementación de interfaces. La clase base siempre debe estar en el extremo izquierdo en la declaración de clase.

Como Java, C# no admite herencia múltiple, lo que significa que las clases no pueden heredar más de una clase. Sin embargo, se pueden utilizar interfaces para ese propósito, de la misma manera que en Java

Reutilización de miembros heredados.

By : Alma Esqueda
Para que el código existente se pueda reutilizar, debe definir alguna forma de comunicación o interfaz. Esto se puede dar por llamadas a una subrutina, a un objeto, o a una clase.

En concreto:
1. Se puede declarar un nuevo atributo con el mismo identificador que uno heredado, quedando este atributo oculto. Esta técnica no es recomendable.
2. Se puede declarar un nuevo método de instancia con la misma cabecera que el de la clase ascendiente, lo que supone su sobreescritura. Por lo tanto, la sobreescritura o redefinición consiste en que métodos adicionales declarados en la clase descendiente con el mismo nombre, tipo de dato devuelto y número y tipo de parámetros sustituyen a los heredados.
3. Se puede declarar un nuevo método de clase con la misma cabecera que el de la clase ascendiente, lo que hace que éste quede oculto. Por lo tanto, los métodos de clase o estáticos (declarados como static) no pueden ser redefinidos.
4. Un método declarado con el modificador final tampoco puede ser redefinido por una clase derivada.
5. Se puede declarar un constructor de la subclase que llame al de la superclase de forma implícita o de mediante la palabra reservada super.

6. En general puede accederse a los métodos de la clase ascendiente que han sido redefinidos empleando la palabra reservada super delante del identificador del método. Este mecanismo sólo permite acceder al metodo perteneciente a la clase en el nivel inmediatamente superior de la jerarquía de clases.

"La re-utilización de software reduce el tiempo de desarrollo de los programas"
Los diseñadores que trabajan en proyectos de software a gran escala en la industria, las personas experimentadas con esos proyectos dicen que la re-utilización efectiva del software mejora el proceso de desarrollo del mismo. La programación orientada a objetos facilita la re-utilización de software, con lo que se obtiene una potencial reducción en el tiempo de desarrollo.
La disponibilidad de bibliotecas de clases extensas y útiles produce los máximos beneficios de la re-utilización de software a través de la herencia. Los diseñadores de aplicaciones crean sus aplicaciones con estas bibliotecas, y los diseñadores de bibliotecas obtienen su recompensa al incluir sus bibliotecas con las aplicaciones. Las bibliotecas de clases estándar de Java que se incluyen con Java SE 6 tienden a ser de propósito general.

Así como los diseñadores de sistemas no orientados a objetos deben evitar la proliferación de métodos, los diseñadores de sistemas orientados a objetos deben evitar la proliferación de clases. Dicha proliferación crea problemas administrativos y puede obstaculizar la re-utilización de software, ya que en una biblioteca de clases enorme es difícil para un cliente localizar las clases más apropiadas. La alternativa es crear menos clases que proporcionen una funcionalidad más substancial, pero dichas clases podrían volverse complejas.

Clasificación: herencia simple, herencia múltiple.

By : Alma Esqueda
La herencia se puede clasificar de dos formas:
1.    Herencia simple:

La herencia simple consiste en cuando una clase, hereda a una clase hijo, y a solo una le hereda sus atributos, es igual al concepto general de herencia, con la limitante de solo poder heredar de una clase padre a una clase hijo, y solo a una clase hijo
Un ejemplo de herencia simple en Java es la siguiente:
Public class animal{
Public String ojos;
Public String color;
Public int patas;
Public void patas(){
. . .
}
}
Public class perro extends animal{ /*la clase perro hereda atributos y métodos de la clase animal*/
System.out.println(“Dame el color del animal”+ color);//Hereda la variable color de la clase animal
}
2.    Herencia múltiple: 

     Consiste en la utilización de las propiedades de una clase a varias clases mas, lo que significa que en esta propiedad una sola clase padre puede heredarle atributos, u objetos de esta a varias clases hijo sin ninguna limitación entre ellas.


Nota: Java no soporta la herencia múltiple.

Definición: clase base, clase derivada.

By : Alma Esqueda
Definición de herencia: Es una forma de reutilización de software en la que se crea una nueva clase absorbiendo los miembros de una clase existente, y se mejoran con nuevas capacidades, o con modificaciones en las capacidades ya existentes. Con la herencia, los programadores ahorran tiempo durante el desarrollo, al reutilizar software probado y depurado de alta calidad. Esto también aumenta la probabilidad de que un sistema se implemente con efectividad.
Clase base: Una clase base es aquella que no dependen ninguno de sus atributos u objetos de la clase de alguna otra clase, se podría decir que en términos de herencia, sería la clase padre, la clase que se mantiene fija, en el aspecto de herencia. Es también por así llamarlo la clase principal de un programa, sería la clase primaria sin incluir la clase main en donde se corre todo el programa en sí.

Clase derivada: son clases que dependen de las clases bases, ya que algunos de sus métodos son también heredados, y muchas veces, el compilador arrojara malos resultados, ya que al ser dependientes estas clases, a veces podrán generar errores lógicos.

He aquí un ejemplo de lo que serian las clases bases y clases derivadas, y de cómo se demuestra la dependencia de la derivada con la clase base:
public abstract class Figura {
protected int x;
protected int y;
public Figura(int x, int y) {
this.x=x;
this.y=y;
}
public abstract double area();
}
class Rectangulo extends Figura{
protected double ancho, alto;
public Rectangulo(int x, int y, double ancho, double alto){
        super(x,y);
this.ancho=ancho;
this.alto=alto;
}
public double area(){
return ancho*alto;
}
}

En este ejemplo, se nota como la clase figura le da atributos a la clase rectangulo

- Autores: -Esqueda Garcia Alma Liliana -Garcia Lara Javier