CONCEPTO DE EXCEPCIONES

Una excepción es un proceso usado para describir algo que no esperaba que funcionara de esa manera. Por lo regular las excepciones se ejecutan cuando el código ha generado un error.

Un error en un código de java puede ser por ejemplo, provocado por la llamada a un método con datos no validos, abrir un archivo que no existe, fallo en la conexión de Internet, division por cero, etc.

CLASES DE EXCEPCIONES

Las excepciones son subclases de java.lang.Throwable. Funcionan como indicadores o señales para identificar cuando el código deja de comportarse normalmente y como puede manejarse para continuarlo.

Las excepciones pueden ser nombradas para identificarlas, están las predefinidas por el sistema Java y las definidas por el programador. Se expresa que las excepciones son elevadas(raised) o lanzadas (thrown) en el punto donde generan una interrupción en el curso normal del código. También se dice que pueden ser manipuladas (handled) o capturadas (caught) en el punto donde se reanuda la ejecución normal del código.

Java nos trae dos clases de excepciones que podemos manejar, las comprobadas y las no comprobadas.

Las excepciones comprobadas, son aquellas que se espera que el programador identifique y arregle en el programa, se generan por causas externas que pueden alterar el programa en tiempo de ejecución, por poner un ejemplo no encontrar un archivo.

Las excepciones no comprobadas proceden de errores del codigo, estas son difíciles de identificar por que el compilador o la JVM no le esta indicando en algún momento al programador que la verifique o que haga algo para corregirla cuando se produce.

De las excepciones que no son comprobadas tenemos las que se deben a errores en el código, también llamadas errores de tiempo de ejecución. Un ejemplo es el ejecutar un array vacío.

Las excepciones que son dificiles de recuperar debido a errores en el entorno se denominan errores, a este tipo de excepciones pertenecen situaciones como memoria ocupada

  • Excepciones comprobadas
  • Excepciones no comprobadas
    • Excepciones en tiempo de ejecución.
    • Errores.

Como todo en Java son clases y objetos, las excepciones en java se maneja como objetos segun su tipo:

  • Clase Exception: Representa excepciones comprobadas y no comprobadas. Efectua una continuacion del código, manejandolo por una modificacion de código en vez de terminar el programa. Es causado por efectos del entorno y puede gestionarse debido a que en la mayoria de las veces son errores ocacionados por el usuario del programa.
  • Clase Error: Es usada para condiciones de error graves, no comprobadas, cuando esto sucede no debe esperar que el programa responda correctamente o intente recuperarse.
  • Clase RuntimeException: Es usada en excepciones no comprobadas que pueden ser resultantes de codigo defectuoso. Cuando este tipo de excepción sucede trate de mantener el programa ejecutandose. Este tipo de excepciones indican un problema de diseño o implementacion, por lo regular un programa que funcione bien no genera este tipo de excepciones, por lo que no es recomendable gestionarlos
Hay dos alternativas para manejar las excepciones, una es detectar el error y permitir que la clase lo maneje, o dos, reenviar la excepcion al metodo que la invoco para indicar que se trata de un error.

REGLAS DE GESTION DE EXCEPCIONES

Para efectuar que el código permanezca siempre en funcionamiento y sea estable y mantenga su calidad, el lenguaje Java exige una excepcion comprobada ( Clase Exception) en un determinado punto del código.

El metodo que va a contener la excepcion debe definir la accion a realizar en el justo lugar donde se produce el problema, para gestionarlo puede efectuar cualquiera de las siguientes opciones:

  1. Un bloque try-catch-finally.
    la clausula catch debe contener la excepcion que debe manejar o una superclase, aunque la clausula este vacia.
  2. Declarar Excepciones que un método puede generar:
    Significa que el metodo devuelve la excepcion al metodo que lo generó, esto es declarar en el código que no lo va a gestionar y le deja esa responsabilidad al método.

THROW Y THROWS

Ya que las excepciones son objetos hay una manera de llamar a un objeto de este tipo:

throw e = new Exception();

Es distinto de llamar la sentencia throws en un método:

static void llamadaMetodo( argumentos ) throws TipoException {
 codigo;
 codigo;
 codigo;
}

Si un método esta generando una excepción comprobada y no la puede capturar entonces debe declarar en el método la sentencia. 

Las excepciones comprobadas deben ser declararas o de lo contrario el código no va a compilar.

COMO MANEJAR CODIGO CON EXCEPCIONES  (try / catch)

El lenguaje Java me permite averiguar la excepcion que se generó y como debe resolverla, con manejadores. Si el manejador es invocado despues de que el codigo ha efectuado una parada en la que ocurre una excepcion entonces el código que contiene el manejador es ejecutado permitiendo continuidad del programa.

El manejador se efectua mendiante la combinacion de sentencias try {} catch {}:

try{
     // curso normal del codigo;
     //codigo ejecutable en cualquier circunstancia;
}
catch (IOException ex_01){
     //codigo para manejar una excepcion de tipo IOException presente en el programa;
}
catch (Exception ex_02){
     //codigo para manejar una excepcion de tipo Exception presente en el programa;
}

Como ven pueden anidarse diferentes tipos de catch para manejar las excepciones presentes en el programa, aqui puede entenderse la logica del curso, el JVM interpretará el primer catch para manejar la excepcion, sino lo puede manejar entonces seguira con el segundo y asi sucesivamente. Debe tener presente ordenar los manejadores catch para poder efectuar las capturas de las excepciones lo mas óptimo posible.

LA SENTENCIA FINALLY

Java tambien tiene la sentencia finally:

try{
     // curso normal del codigo;
     //codigo ejecutable en cualquier circunstancia;
}
catch (IOException ex_01){
     //codigo para manejar una excepcion de tipo IOException presente en el programa;
}
finally{
     //codigo para manejar una excepcion de tipo Exception presente en el programa;
}

La sentencia finally define un bloque de código que siempre se ejecuta, independientemente se efectué la captura de la excepción o. no.

De la unica forma en que una sentencia finally no se ejecute seria en una JVM caida o cerrada ( por ejemplo la ejecucion del método System.exit).

EXCEPCIONES MAS COMUNES

  • NullPointerException: indica que se esta tratando de acceder a un atributo o un método de un objeto que no hace referencia a nada o null.
  • FileNotFoundException: Esta excepcion se genera por intentar leer datos de un archivo que no existe.
  • NumberFormatException: Indica que el formato del numero que esta leyendo no corresponde a uno válido.
  • ArithmeticException: Mas comunmente cuando se hace una division por cero (x/0).
  • SecurityException: Normalmente se genera en Browsers ( Navegadores de internet) por applets de Java que intentan ralizar una operacion
PRINCIPIOS DE PROGRAMACION EN JAVA

Java es un lenguaje orientado a objetos, esto significa que debe cumplir con las especificaciones del paradigma de la programacion orientada a objetos:
  • Encapsulación/li>
  • Herencia
  • Polimorfismo
  • Abstraccion
  • Seguridad
Cuando se crea un programa en java lo primero es que esta un programa compuestos de clases. Al igual que un diseñador usa prototipos para usar cuantas veces quiera para sus diseños y productos, del mismo modo un programador usa las clases como prototipo para manipular eventos, métodos y atributos.

Las clases a diferencia de las variables, no se declaran, se instancian. Instanciar una clase es crear un objeto del tipo clase que tiene una referencia en la memoria de la CPU de todos sus métodos y atributos, su propósito es tener entrada de datos y generar salidas de datos. Para los que no comprenden que son los métodos y los atributos su homólogo en otras prácticas serian respectivamente las funciones y los elementos ( o también variables si así se quiere).

Instanciar una clase es crear un objeto del tipo clase que tiene una referencia en la memoria de la CPU de todos sus métodos y atributos

COMO SE DECLARAN LAS CLASES

Las clases tienen modificadores que indican su estado global que puede ser public, private, protected. la palabra Class es reservada del lenguaje java para indicar que se esta definiendo una clase. La clase puede nombrarse 

<modificador> class <NombreClase>
{
     atributos;
     Constructores();
     metodos();
}

Tenga en cuenta que si esta definiendo una clase, solo puede haber una clase principal pública por archivo fuente, igualmente una sola llamada al método main por clase publica. Pero una clase no necesariamente debe definir el metodo main, la clase puede ser llamada por otra clase o desde otro archivo. En el mismo archivo fuente solo puede coexistir una clase publica y varias privadas, pero no mas de una clase Publica.

Ejemplo de clase publica sin método main:
archivo Greetings.java

public class Greetings {
    public static void greeting()
    {
        System.out.println("Saludos programador novato");
    }
}

Ejemplo de una clase publica con metodo main:
archivo Saludo.java

public class Saludo {

    public void setSaludo(){
        Greetings text = new Greetings();
        Greetings.greeting();
    }

    public static void main (String args[])
    {
        Saludo var1 = new Saludo();
        var1.setSaludo();
    }
}

Nótese qué una clase pública que esta en el archivo Greetings.java contiene un método para poner en pantalla un mensaje de texto. La clase Greeting es instanciada por un método en el archivo Saludo.java y llama al métodoGreeting contenido en la clase Greetings.

Luego desde el método main se instancia la clase Saludo y se invoca al método setSaludo(), el resultado sera poner en la linea de comando un mensaje de texto:

     Saludos programador novato

COMO SE DECLARAN ATRIBUTOS

<modificador> <tipo> <nombreAtributo> [= <valor_inicial>];

Los atributos son los homólogos de las variables, se decaran y pueden ser de cualquier identificador permitido, incluso objetos.

El modificador usado en los atributos principalmente es del tipo public o private.

El tipo de atributo puede ser de variable primitiva o de cualquier objeto.

Por seguridad los atributos se declaran como privados y se acceden a ellos y manipulan por medio de los métodos como set_ (denominados (setters) y get_ (denominados getters).

ejemplo de atributos
public String texto1;
public int valor1;
public float variableArea;
private boolean colorAzul;

ejemplo de atributos declarados
public boolean examenAprobado = false;
public int area=500;
public float pi=3.141592F

En atributos del tipo primitivo float o double al final del valor debe escribirse en mayúscula que clase de punto flotante se trata, F parafloat y D para double.

ejemplo de varios atributos del mismo tipo
public float radio, area, tamaño, volumen, densidad;

COMO SE DECLARAN METODOS

<modificador> <tipo_retorno> <nombre> ( <argumentos>) {
     <sentencia>;
}

Los métodos son homólogos de las funciones, en la programación orientada a objetos se usan los métodos como un proceso con el cual se cambia de valor los atributos o por el cual se tiene datos de entrada para procesar una salida de datos. 

Los métodos usan principalmente como modificador de acceso el public, protected y private.

El parámetro tipo_retorno indica el tipo de valor que devuelve el método, puede ser del tipo primitivo, array o objeto. El método debe devolver un tipo de retorno como el especificado, de lo contrario encontrará error al compilar. Para devolver un valor dentro de un método debe utilizarse la sentencia return.

La lista de argumentos son atributos o valores que se le pasan al método para poder trabajar, deben estar denotados por el tipo de valor e identificador  y separados por comas.

CONSTRUCTORES

Un constructor es parecido a los métodos, pero difiere de los métodos en que estan diseñados para inicializar una instancia. Tiene caracteristicas que los difieren de los métodos:

  • Deben tener el mismo nombre de las clase
  • Solo pueden tener como tipo de atributo public, private, protected.
  • Usan los mismos argumentos que los métodos.
  • No tienen valores de retorno.
  • No tienen capacidad de herencia.
  • Pueden declararse con parámetros.
COMO SE DECLARAN CONTRUCTORES

Antes de declarar un constructor, si el código no lo tiene definido, el lenguaje Java se encarga de suministrarlo. El constructor predeterminado al ser creado por el lenguaje no tiene argumentos y su cuerpo esta vacio.



ENCAPSULACIÓN

Es el termino usado para describir el como se da una interfaz al usuario con acceso limitado, ocultando ciertos elementos de la implementación de una clase sin perder la función de la clase o la interfaz.

Su propósito es el de ocultar datos, ya que la información de los atributos no debe tocarse directamente. La encapsulación de atributos dentro de una interfaz publica, puede realizarse cambios en estos dentro de la interfaz sin afectar el código.


COMO ESTA ORGANIZADO UN ARCHIVO FUENTE

Un archivo fuente ( extensión .java) esta organizado con el siguiente formato:

package <declaración del paquete>;

import <declaración de importación>;

public class <declaración de clase>{

     atributo <atributos>;
     método <declaración métodos>;
     <sentencia_1>;
     <sentencia_2>;
     <sentencia_3>;
     <sentencia_n>;
     <sentencia_...>;
}

El archivo fuente debe estar organizado siempre en este orden, es decir, la sentencias de importación deben preceder a la declaración de clases y si se declara un paquete, este debe preceder a la declaración de importaciones y a las de clases.

Es importante recalcar que cuando se escribe un programa en Java el nombre del archivo fuente (.java) debe tener el mismo nombre y nomenclatura ( mayúsculas y minúsculas) que la clase pública que contiene.

De todas las clases que contiene el archivo fuente solo una puede declararse como pública, el resto pueden usar otro tipo de atributo. Pero si un archivo no tiene una clase publica declarada el archivo fuente puede tener el nombre que quiera.

La sugerencia es siempre un archivo fuente por cada declaración de clase y el nombre del archivo igual al nombre de la clase.

COMENTARIOS

Para hacer una breve descripción de una parte de nuestro código podemos incluir texto que el compilador no va a leer, pero que si estará presente siempre en el código para ayudarnos a entender después  lo que hemos hecho. Se usan dos backslash "//" para comenzarla linea de comentario, que en un editor de texto que identifique código Java lo sombreará en color Gris.

//Linea de comentario
//Segunda linea de comentario

Cuando una sola línea de comentario no es suficiente puede usarse un método de comentario de varias lineas que comienza con un backslash y un asterisco y termina en posición opuesta así: "/*   comentario*/". 

/*comentario de una linea*/

/*
comentario
de 
varias
lineas
*/

/*


CODIFICACIÓN DE ARCHIVOS FUENTE EN JAVA

Para escribir código en el lenguaje Java se usan convenciones que estan definidas como un estandar a la hora de fabricar programas:

  • Paquetes: los nombres de paquetes se escriben en minúsculas:
    package conjunto_universal.subconjunto.clases;
    package conjuntouniversal.subconjunto.*;
  • Clases: los nombres de clases deben ser escritos en letras minusculas, todas las palabras seguidas y la primera letra de cada palabra en mayuscula, esta forma de nomenclatura tambien es llamada lomo de camello o CamelCase en ingles:
    public class Barcos;
    class ContabilidadEmpresarial;
    class RecursosHumanos;
  • Métodos: Los metodos deben ser verbos escritas con la palabra inicial en minuscula y las siguientes palabras con la inicial en Mayuscula:
    balanceCuenta();
    insertarBuque();
    mostrarCuadricula();
    listarContenedores();
    insertarFactura();
    borrarFactura();
  • Variables: Deben escribirse en mayusculas y minusculas, con la inicial en minuscula, con la siguiente palabra con la inicial en mayuscula. Casi no se usan los signos de subrayado (_) y evite el signo de dolar ($).
    clienteActual;
    contenedorNombre;
    nombreEmpleado;
    cargoEmpleado;
    deptoEmpleado;

  • Constantes: Las constantes deben escribirse enteramente en mayusculas y separando las palabras mediante underscore (subrayado).
    MAX_NUM_CONTENEDORES;
    MAX_PESO_PANAMAXMAX;
    MAX_NUDOS;

  • Estructuras de Control: cuando las sentencias forman parte de una estructura de control de flujo  como un for, while, es necesario incluirlas en un paquete de sentencias con los corchetes ({}) aunque solo tengan una linea de código:
    for ( i=0; i<MAX_NUM_CONTENEDORES; i++){
    sentencia;
    sentencia;
    }

  • Espacios: Los espacios son usados para entender mejor el código y distinguir el principio y el fin de las estructuras de control usese de acuerdo a la estructura de control las separaciones por sangria necesarias, por lo regular no son mas de 4. Puede variar de acuerdo a las convenciones usadas.
  • Comentarios: Use comentarios de una linea o varias, puede inclusive usar JAVADOC. No hay restricción de acuerdo a la forma en que deben estar escritos los comentarios.


CONCEPTO DE PAQUETE

La mayoría de los sistemas de computo son de grandes dimensiones, Java usa muchas de las características del lenguaje UML para definirlas en su lenguaje para hacer mas entendible grandes cantidades de código y estructurarlo para ofrecerlo como una orientación al servicio y a la calidad del software a los clientes.

UML incluye el concepto de paquete para organizar en conjuntos de código el que una clase pieda contener otras clases  u otros paquetes que formen una jerarquia. Una practica de programadores UML es organizar los paquetes por similitud semántica.

Para interpretar el concepto de paquete que proviene de UML, Java porporciona la sentencia package como una forma de agrupar clases relacionadas.

DECLARACION DE UN PAQUETE

package <nombre_paquete_superior>.<nombre_paquete>;

Digamos que estamos declarando el paquete de una compañia de transporte y tambien un paquete para identificar los vehiculos de la compañia.

//definición de paquete transporte como el conjunto universal
package transporte;

//definición del paquete vehículos como subconjunto de transporte
package transporte.vehiculos;


Cualquiera que sea la motivacion, todo aquel ingeniero, aficionado o programador que desee darle un valor a sus conocimientos debe memorizar el siguiente lema:

" El conocimiento no cabe en un frasco, pero si en un diploma"

Así estará seguro que si desea darle un valor agregado a sus conocimientos o tener un motivo por el cual aumentar la remuneración por sus esfuerzos por ser mas competitivo y productivo en el ambiente laboral, por ser mas productivo y con pasion por lo que hace, no lo hara por cualquier diploma.

Hay toda clase de estudiantes, los que no pueden asistir a un curso presencial, los que si pueden en horarios normales, los que pueden asistir a clase en horarios extendidos, los que pueden estudiar con un tutor, etc...

Pero aun asi las preguntas importantes son  ¿donde estudiar? y ¿que estudiar?, los que deseen aumentar sus habilidades en tecnologia, pueden tomar diferentes orientaciones, certificaciones oficiales hay para todas las tecnologias por nombrar unas:

  • SUN
  • Cisco
  • Microsoft
  • F5
  • Juniper
  • Oracle
Cada una de las casas tienen diferentes certificaciones, en nuestro caso nombraremos las certificaciones de SUN disponibles ya que es lo que nos importa en nuestro blog de estudios sobre Java. Cualquier persona que desee tener conocimientos sobre java y que quiera certificarlos debe tener en su pared un diploma de la Sun Microsystems. La imagen 1 muestra los diferentes escalamientos que tienen las certificaciones.


Fig 1. Escalamientos en certificaciones Sun de Java

Entre las certificaciones disponibles tenemos la siguiente lista:

  • Sun Certified Enterprise Architect (SCEA)
  • Sun Certified Mobile Application Developer (SCMAD)
  • Sun Certified Developer For Java Web Services (SCDJWS)
  • Sun Certified Business Component Developer (SCBCD)
  • Sun Certified Web Component Developer (SCWCD)
  • Sun Certified Java Developer (SCJD)
  • Sun Certified Java Programmer (SCJP)
  • Sun Certified Java Associate (SCJA)

Sun Certified Java Associate (SCJA)

Esta certificacion provee una entrada a la carrera en  desarrollo de aplicaciones y administracion de proyectos de software usando Java como nenguaje y tecnologia. Este certificado validad los conceptos de la Orientacion a Objetos, conocimiento general sobre el lenguaje Java, sus plataformas y Tecnologias.

Para obtener este certificado el estudiante debe completar el examen CX-310-019:

Sun Certified Associate for the Java Platform, Standard Edition, Exam Version 1.0 (CX-310-019)

Sun Certified Java Programmer (SCJP)

Este certificado es fundamental para programadores interesados en demostrar proficiencia en los fundamentos del lenguaje de programación Java.
 
- Sun Certified Programmer for the Java Platform, Standard Edition 6 (CX-310-065) - NEW!
- Upgrade Exam: Sun Certified Programmer for the Java Platform, Standard Edition 6 (CX-310-066) - NEW!
- Sun Certified Programmer for the Java Platform, Standard Edition 5.0 (CX-310-055)
- Upgrade Exam: Sun Certified Programmer for the Java Platform, Standard Edition 5.0 (CX-310-056)


Sun Certified Java Developer (SCJD)

Esta es una certificación para desarrolladores en demostrar avanzados conceptos usando Java SE. Los candidatos deben completar dos fases, la primera una asignacion como un examen de conocimientos puestos en practica y deben ser SCJP certificados de cualquier edicion.
 
- Sun Certified Developer for the Java Platform, Standard Edition: Assignment (Step 1 of 2) (CX-310-252A)
- Sun Certified Developer for the Java Platform, Standard Edition: Essay (Step 2 of 2) (CX-310-027)
- Sun Certified Developer for the Java Platform, Standard Edition: Assignment Resubmission (CX-310-252R)

Sun Certified Web Component Developer (SCWCD)

Este certificado es para desarrolladores especializados en el desarrollo de aplicaciones JSP (JavaServer Pages) y Servlets usados en servicios web y contenidos web dinámicos.

Los candidatos podran obtener este certificado completando el examen, y deben ser SCJP certificados.

 
- Sun Certified Web Component Developer for the Java Platform, Enterprise Edition 5 (CX-310-083)
- Upgrade Exam: Sun Certified Web Component Developer for the Java Platform, Enterprise Edition 5 (CX-310-084)

Sun Certified Business Component Developer (SCBCD)

Esta certificación es para componentes de desarrollo en tecnologias para JavaBeans (EJB), para desarrolladores que sean responsables de diseñar, probar, desarrollar, implementar e integrar aplicaciones EJB.

Los candidatos podran obtener este certificado completando el examen, y deben ser SCJP certificados.

 
- Sun Certified Business Component Developer for the Java Platform, Enterprise Edition 5 (CX-310-091) - New!
- Upgrade Exam: Sun Certified Business Component Developer for the Java Platform, Enterprise Edition 5 (CX-310-092) - New!

Sun Certified Developer For Java Web Services (SCDJWS)

Este certificado es para desarrolladores que quieran crear aplicaciones para servicios Web usando componentes desarrollados en Tecnologia Java.

Los candidatos podran obtener este certificado completando el examen, y deben ser SCJP certificados.

 
- Sun Certified Developer for Java Web Services 5 (CX-310-230) - NEW!
- Upgrade Exam: Sun Certified Developer for Java Web Services 5 (CX-310-231) - NEW!


Sun Certified Mobile Application Developer (SCMAD)

Este certificado es para desarrolladores que crean aplicaciones móviles usando tecnologias Java para celulares, SmartPhones y dispositivos inteligntes.

Los candidatos podran obtener este certificado completando el examen, y deben ser SCJP certificados.

 
- Sun Certified Mobile Application Developer for the Java Platform, Micro Edition, Version 1.0 (CX-310-110) - New!

Sun Certified Enterprise Architect (SCEA)

"El acto de conseguir un certificado te hace un mejor arquitecto" (Humphrey Sheil, CTO, SCEA, and SCEA examiner)

Esta certificación es para arquitectos de empresa responsables de diseñar aplicaciones Java con un enfasis en el uso de la tecnologia JEE para crear diseños seguros, flexibles y escalables.

La certificación SCEA “significa que su poseedor puede manejar diseños avansdos y tener roles de responsabilidad en crear aplicaciones. El candidato a esta certificación debe demostrar un profundo conocimiento en el entendimiendo y el uso de apropiados usos del diseño y arquitectura de aplicaciones modernas.

El proceso

Para obtener este certificado el candidato debe completar tres niveles: Examen multi nivel de conocimientos, una asignación y un desarrollo.

 
- Sun Certified Enterprise Architect for the Java Platform, Enterprise Edition 5 (Step 1 of 3) (CX-310-052)
- Sun Certified Enterprise Architect for the Java Platform, Enterprise Edition 5: Assignment (Step 2 of 3) (CX-310-301A)
- Sun Certified Enterprise Architect for the Java Platform, Enterprise Edition 5: Essay (Step 3 of 3) (CX-310-062)
- Sun Certified Enterprise Architect for the Java Platform, Enterprise Edition 5: Assignment Resubmission (CX-310-301R)
- Upgrade Exam: Sun Certified Enterprise Architect for the Java Platform, Enterprise Edition 5 (CX-310-053)

DONDE ESTUDIAR EN LATINOAMERICA

En Latinoamerica podemos contar con el instituto Formacion Digital América, el cual es un instituto que nos ofrece entrenamiento en linea y bien documentado para los principales certificados de Java para las plataformas JSE, JME y JEE.

Ofrecen para los paises de Colombia, Mexico, Panamá, Ecuador y Venezuela.

http://www.formaciondigitalamerica.com/djo/



INTRODUCCIÓN

Para escribir sus primeras lienas de código java tenga listos e instalados los siguientes paquetes de software

  • Netbeans ( como IDE) para escribir el código con ayudas visuales y depuracion.
  • Notepad++ (como editor de texto) para escribir codigo sin ayudas visuales.
  • JRE Version 6 update 20 para la plataforma que este usando, en mi caso Windows XP.
CONFIGURANDO MI PRIMER PROYECTO DE SOFTWARE

Netbeans es un entorno de desarrollo muy robusto, para mi gusto es el mejor orientado al desarrollo de apliaciones java, el criterio de otros programadores puede variar segun la experiencia y el gusto.

Al instalar el Netbeans y lo ejecutamos por primera vez nos mostrará una pantalla de carga inicial como la de la figura 1.


Fig 1. Pantalla de inicio de NetBeans

Lo primero que se hace es configurar en Neatbeans un proyecto, para ello vamos a crear un proyecto usando la siguiente ruta en los menus "File > New Project" o damos click al boton nuevo proyecto . Nos aparecerá un asistente de dos pasos, en el paso uno indicamos la categoria de proyecto y el tipo de proyecto que estaremos trabajando. En nuestro caso la categoria de proyecto a escoger sera el de "Java" y el tipo de proyecto sera "Java Application" como se ilustra en la figura 2.

Escoger un proyecto de categoria Java y un projecto como Java Application
Fig 2. Escogiendo Proyecto y Categoria para Aplicacion Java

En el segundo paso Indicamos el nombre del proyecto (Project Name) como "JavaTutorial01", podemos cambiar la ubicación del proyecto (Project Location), escoger si va a usar un folder dedicado a las librerias "Use Dedicated Folder for Storing Libraries". Este campo no lo vamos a usar en nuestro caso, vease la figura 3.


Fig 3. Editando el proyecto

Una vez completado el asistente, tendremos nuestro Netbeans configurado para trabajar con nuestro proyecto, el cual estaremos usando en toda nuestra linea de aprendizaje de java.

Ahora en el netbeans valla a la ruta "File > New File" o haga click en el botón  para iniciar el asistente y  para nuestro proyecto previamente creado (JavaTutorial01) creará un nuevo archivo tipo "Java Class" (fig 5). Opte por ponerle el nombre "HelloWorld" al archivo, mantenga las demas configuraciones intactas, en la opción Package Escriba "FirstStepsInJava" como en Figura 6.


Fig 5 Escogiendo un nuevo archivo Java de clases.


Fig 6. Editando el nuevo archivo

MIS PRIMERAS LINEAS DE CODIGO

Una vez creado el proyecto y el archivo fuente ahora podemos poner nuestras lineas de código. Java comprende los archivos con línea de codigo de bits (unos y ceros que comprenden java) tipo java, para identificarlos todos los archivos fuente tienen la extension .java, en nuestro caso. En netbeans en el panel izquierdo está la pestaña "Projects" la cual muestra los archivos del proyecto, podemos ver en la figura 7 todos los archivos fuente que existen en el paquete contenido en el proyecto con la extension ".java".


Fig 7. Archivos fuente del proyecto.


Fig 8. Panel de escritura de lineas de código en Netbeans

En el panel derecho escribiremos las siguientes lineas de código, deben quedar similar a la ilustracion 8:

package FirstStepsInJava;

public class HelloWorld {
    public void setMessage(){
        System.out.println("Hello World");
    }

    public static void main (String args[])
    {
        HelloWorld hola = new HelloWorld();
        hola.setMessage();
    }
}

COMPILANDO Y EJECUTANDO EL CÓDIGO FUENTE

Java interpreta el codigo contenido y lo compila, es decir, lo interpreta y lo convierte en un archivo que cualquier maquina virtual de java (JVM) puede ejecutar en cualquier plataforma, los archivos ejecutables de java tienen la extension .class.

Para hacer que Netbeans compile el archivo valla al menu "Run > Run Main Project" o haga click en el boton el programa va a ejecutar el código contenido en el archivo fuente si no tiene excepciones en tiempo de ejecucion o errores de código. En nuestro caso, el programa solo pondra en pantalla un mensaje que dice "Hello Word".







INTRODUCCION

Antes de comenzar a programar en Java debe tener en cuenta una serie de pasos previos:

  1. Debe saber como va a desarrollar su aplicacion y para que clase de usuario final esta dirigido. En un entorno de trabajo  ideal deberá tenerlo en cuenta
  2. Debe saber que el producto o servicio que va a prestar como un desarrollo de java debe ser seguro, confiable y orientado a las necesidades y especificaciones del cliente.
  3. Mantenga un control de calidad del su producto, solo asi podra ser competitivo en el mercado del software, si trabaja solo le sera mas facil, si trabaja en un equipo asegurese de poder liderarlo o de tener un lider y una buena herramienta de colaboracion y centralizacion del código.
  4. Contrario a lo que muchos otros programadores digan, yo le aseguro que si va a escribir un programa que en un futuro podra vender y prestar el servicio por su mantenimiento y mejoras asegurese de escribir comentarios en su código, no querra peder despues tiempo y dinero tratando de encontrar la linea de código que tenia la inconsistencia y darse cuenta dias después que la tenia delante suyo.
  5. Contar con las herramientas adecuadas para la escritura, depuracion y ejecución del software.
  6. Java instalado en la cpu en que se va a ejecutar el script.
PLATAFORMA

Java cuenta con distribuciones para varias plataformas, entre estas la Windows, Linux en sus diferentes distribuciones, BSD en sus diferentes distribuciones y Mac Os X.


AMBIENTE DE DESARROLLO

Existen diferentes ambientes de desarrollo todos muy robustos, mencionare algunos de los más populares que puede usar a la hora de programar en Java, personalmente programo en Netbeans Version 6.8 para todos mis proyectos y los tutoriales:

  • Netbeans (Sun Microsystems "ahora oracle").


  • Jdeveloper (Oracle).


  • eclipse (Open Source).


  • easyeclipse (distribucion de eclipse de facil instalacion).


  • pulsar (distribucion de eclipse para desarrollo de aplicaciones móviles).


Cual quiera que vallla a usar a la hora de desarrollar puede usarla en cualquiera de las plataformas disponibles, (indows, Linux y Mac).

DISTRIBUCION DE JAVA  DISPONIBLES

Las distribuciones de Java disponibles van dependiendo del tipo de aplicación al cual esta orientado a desarrollar, puede ser desde una Java Card, pasando por una aplicacion de celular, hasta una aplicacion robusta cliente - servidor o una aplicacion web, a continuación listo las distribuciones de Java estables más recientes y las plataformas a las cuales estan disponibles:


PARADIGMA DE LA PROGRAMACION ORIENTADA A OBJETOS

CONTENIDO:
  • INTRODUCCION
  • ORIGEN
  • CONCEPTOS FUNDAMENTALES
  • CARACTERISTICAS DE LA POO
  • BIBLIOGRAFIA
  • REFERENCIAS
INTRODUCCION

Los objetos son entidades que combinan estado (atributo), comportamiento (método) e identidad:

  • El estado está compuesto de datos, será uno o varios atributos a los que se habrán asignado unos valores concretos (datos).
  • El comportamiento está definido por los procedimientos o métodos con que puede operar dicho objeto, es decir, qué operaciones se pueden realizar con él.
  • La identidad es una propiedad de un objeto que lo diferencia del resto, dicho con otras palabras, es su identificador (concepto análogo al de identificador de una variable o una constante).

La programación orientada a objetos, es necesaria en la vida de un programador ya que con esta visualizamos las actividades de cada una de esas. Un objeto contiene toda la información que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos. A su vez, los objetos disponen de mecanismos de interacción llamados métodos, que favorecen la comunicación entre ellos. Esta comunicación favorece a su vez el cambio de estado en los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las que no se separa el estado y el comportamiento.

Los métodos (comportamiento) y atributos (estado) están relacionados, al coexistir en una clase, las clases usan los métodos para modificar y manipular los atributos que tienen. El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a alguno de ellos. Hacerlo podría producir el hábito erróneo de crear clases contenedoras de información por un lado y clases con métodos que manejen a las primeras por el otro.

La programación estructurada tradicional difiere de la programación orientada a objetos. Cuando se programa objetos los datos y los procedimientos están separados y sin relación, ya que lo único que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La programación estructurada anima al programador a pensar en funciones que procesan datos. Los programadores que emplean POO, en cambio, primero definen objetos para luego enviarles mensajes solicitándoles que realicen sus métodos por sí mismos.


CONCEPTOS FUNDAMENTALES


La programación orientada a objetos es una forma de programar que trata de encontrar una solución a los problemas que ocacionaba la programacion estructurada. Introduce nuevos conceptos, que superan y amplían conceptos antiguos ya conocidos. Entre ellos destacan los siguientes:

  •     Clase: definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciación es la lectura de estas definiciones y la creación de un objeto a partir de ellas.
  •     Herencia: (por ejemplo, herencia de la clase D a la clase C) Es la facilidad mediante la cual la clase D hereda en ella cada uno de los atributos y operaciones de C, como si esos atributos y operaciones hubiesen sido definidos por la misma D. Por lo tanto, puede usar los mismos métodos y variables publicas declaradas en C. Los componentes registrados como "privados" (private) también se heredan, pero como no pertenecen a la clase, se mantienen escondidos al programador y sólo pueden ser accedidos a través de otros métodos públicos. Esto es así para mantener hegemónico el ideal de OOP.
  •     Objeto: entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos) los mismos que consecuentemente reaccionan a eventos. Se corresponde con los objetos reales del mundo que nos rodea, o a objetos internos del sistema (del programa). Es una instancia a una clase.
  •     Método: Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena tras la recepción de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un método puede producir un cambio en las propiedades del objeto, o la generación de un "evento" con un nuevo mensaje para otro objeto del sistema.
  •     Evento: Es un suceso en el sistema (tal como una interacción del usuario con la máquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. También se puede definir como evento, a la reacción que puede desencadenar un objeto, es decir la acción que genera.
  •     Mensaje: una comunicación dirigida a un objeto, que le ordena que ejecute uno de sus métodos con ciertos parámetros asociados al evento que lo generó.
  •     Propiedad o atributo: contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos), que hace los datos visibles desde fuera del objeto y esto se define como sus características predeterminadas, y cuyo valor puede ser alterado por la ejecución de algún método.
  •     Estado interno: es una variable que se declara privada, que puede ser únicamente accedida y alterada por un método del objeto, y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos). No es visible al programador que maneja una instancia de la clase.

CARACTERISTICAS DE LA POO


Existe un acuerdo acerca de qué características contempla la "orientación a objetos", las características siguientes son las más importantes:

  •     Abstracción: Denota las características esenciales de un objeto, donde se capturan sus comportamientos.Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar cómo se implementan estas características. Los procesos, las funciones o los métodos pueden también ser abstraídos y cuando lo están, una variedad de técnicas son requeridas para ampliar una abstracción.
  •     Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.
  •     Principio de ocultación: Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica cómo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificación por quien no tenga derecho a acceder a ellas, solamente los propios métodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstracción. La aplicación entera se reduce a un agregado o rompecabezas de objetos.
  •     Polimorfismo: comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre, al llamarlos por ese nombre se utilizará el comportamiento correspondiente al objeto que se esté usando. O dicho de otro modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocación de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en "tiempo de ejecución", esta última característica se llama asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en "tiempo de compilación") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++.
  •     Herencia: las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes. Estos pueden compartir (y extender) su comportamiento sin tener que volver a implementarlo. Esto suele hacerse habitualmente agrupando los objetos en clases y estas en árboles o enrejados que reflejan un comportamiento común. Cuando un objeto hereda de más de una clase se dice que hay herencia múltiple.
  •     Recolección de basura: la Recolección de basura o Garbage Collector es la técnica por la cual el ambiente de Objetos se encarga de destruir automáticamente, y por tanto desasignar de la memoria, los Objetos que hayan quedado sin ninguna referencia a ellos. Esto significa que el programador no debe preocuparse por la asignación o liberación de memoria, ya que el entorno la asignará al crear un nuevo Objeto y la liberará cuando nadie lo esté usando. En la mayoría de los lenguajes híbridos que se extendieron para soportar el Paradigma de Programación Orientada a Objetos como C++ u Object Pascal, esta característica no existe y la memoria debe desasignarse manualmente.



QUE ES JAVA


Java es bien nombrado en el mundo de la tecnologia desde hace ya mucho tiempo, tiene grandes influencias desde programas muy pequeños (scripts), aplicaciones complejas (desktops), aplicaciones corporativas, sitios web, aplicaciones mòbiles, dispositivos embebidos, linea blanca o electrodomesticos y la mas reciente en BlueRay, como veran esta presente en todos lados.


Esto identifica a Java no solo como un solo lenguaje de programacion sino toda una tecnologia cuyo limite es la imaginacion del programador. Java como lenguaje es uno de los primeros lenguajes estructurados como orientado a objetos o dicho en siglas POO ( viene de Object Oriented Programming en ingles "OOP").

HISTORIA DE JAVA


Nacio en 1991 Gracias a James Gosling como un proyecto de investigación para crear un lenguaje de programacion llamado "oak" ("roble" en español), en su época estaba destinado a solventar un problema de comunicación entre dispositivos de consumo como Videograbadoras, televisores, etc.

Estos expertos querian integrar CPU`s a estos dispositivos de consumo para que pudiesen compartir las mismas mejoras, pero fue un intento fracasado, cambiaron su objetivo a la plataforma de Internet que estaba madurando en esa época y usaron el lenguaje para mejorar contenido multimedia mediante implementacion de (applets) y asi fue que se implemento el lenguaje Java.

CARACTERISTICAS PRINCIPALES DEL LENGUAJE JAVA.


Desde su creacion Gosling decidio que Java fuera robusto, estable y orientado a objetos, con lo cual establecio una serie de reglas de diseño para su lenguaje:

  • Debe ser Orientado a Objetos ( POO)..
  • Debe ser Distribuido.
  • Debe ser Simple y de facil lectura para un programador.
  • Debe ser Multihilo (Multi-Threats).
  • Debe ser seguro y confiable.
  • Debe ser independiente de plataforma.
Explicare mejor que significan cada uno de los principios que persigue java o cualquiera de las implementaciones que hay en el mercado ( es correcto, hay mas ademas de la oficial).

LENGUAJE ORIENTADO A  OBJETOS


Uno de los principios de un lenguaje moderno no es hacer códigos simples, sino implementar objetos. Un objeto es un fracmento de còdigo que puede inteactuar con otro fagmento de código para resolver un problema, no tiene una estructura orientada a procedimientos.

Un lenguaje orientado a procedimientos es aquel que el tal cual se escribe el código asi mismo el compilador lo leerá linea a linea. Un lenguaje orientado a objetos estructura todo lo que necesita sin importar el orden en que se escribe ya que cuando un objeto necesita de otro, este toma su informacion la ejecuta y regresa la respuesta


Por ejemplo, un programa para calcular salario tiene un objeto llamado salario el cual esta esperando del objeto empleado el costo por hora y horas trabajadas, cuando empleado llama al objeto salario este se ejecuta, realiza el cálculo programado y retorna el salario al objeto empleado.

En otro blog describire mas detallado las caracteristicas y estandares de interpretacion y aplicacion usado en cualquier lenguaje orientado a objetos.

LENGUAJE DISTRIBUDO

Java dio paso a la introduccion de tecnologias de redes distribuidas como lo son la Invocacion de Metodos Remotos "RMI" ( Remote Methond Invocation por sus siglas en ingles), CORBA (Common Request Broker Architecture) y URL (Universal Resource Locator).


El dinamismo de java permite crear pequeñas partes de codigo que pueden ser facilmente invocadas desde cualquier computadora en internet y ser ejecutadas en esa computadora.


LENGUAJE SIMPLE

Java es simple porque le fueron retirados elementos de programacion complejos e inseguros como lo son los punteros a direcciones de memoria, una practica mal utilizada en otros lenguajes. En su lugar permite hacer referencias a objetos y tiene una funcion llamada reciclaje de memoria, la cual destruye los objetos que ya fueron usados y ya no se hacen más referencias.

LENGUAJE MULTIHILO

Multihilo es la forma de describir el proceso de ejecutar varias tareas diferentes al mismo tiempo, por ejemplo: Consultar una base de datos, reproducir en pantalla una interfaz de usuario, imprimir un reporte. Esto hace un mejor uso de los recursos del sistema.

LENGUALE SEGURO Y ESTABLE

El lenguaje java es seguro por que el entorno donde se ejecuta aplica medidas de seguridad para proteger el código de posibles ataques:

  • Prohibe el acceso a memoria mediante punteros, usa referencias en ese caso
  • Impide que los programas distribuidos como applets, hagan lectura y escritura de discos duros de un equipo.
  • Verifica que el codigo creado sea válido
  • Implementa "Firmas Digitales" asi la persona o equipo que esta recibiendo el código puede verificar su legitimidad.
LENGUAJE INDEPENDIENTE DE PLATAFORMA

Desde los inicios de la computación las plataformas existentes tuvieron grandes variaciones, hoy dia tenemos pocas pero las mas grandes son Windows, Linux, Unix, Mac y tambien tenemos arquitecturas de computacion 32 bits y 64 bits. Debido a estas diferencias cada sistema operativo se comporta distinto, tiene distintas necesidades y recursos y normalmente se tendria que crear un código especifico para cada plataforma y arquitectura.

Sin embargo Java elimina este problema ya que un paquete de java tiene todos los recursos que necesita el sistema operativo para ejecutar el codigo java sin importar la plataforma que sea, de este modo el programador solo se procupa por crear su código ya que sea leido y ejecutado en cualquier CPU.

La forma en que Java lo hace es mediante un interprete llamado Maquina Virtual Java o JVM ( Java Virtual Machine en ingles). Java tiene disponible una JVM para cada plataforma en que desee ejecutar código Java, sin embargo el código java necesita ademas de el JVM unas bibliotecas que contengan clases y objetos especificos para la plataforma donde se va a ejecutar, esta combinacion de JVM y bibliotecas es lo que se conoce como el Entorno de Ejecucion de Java JRE, actualmente estamos en la version 6.

Cuando Java comenzo a caminar lo hizo con su JSE 1.0

PRODUCTOS DE JAVA

Dendiendo del mercado al que se desea dirigir y del objetivo del siftware que va a crear hay un kit de desarrollo, entornos de emulacion para dispositivos de consumo ( como celulares por ejemplo), estas implementaciones de Java la encontramos en tres diferentes productos:

  • Java JSE: Tambien llamada Java Standard Edition. Permite desarrollar applets y aplicaciones que se ejecutaran en navegadores web o en computadoras de trabajo comunes, " aplicaciones sencillas como un block de notas".

  • Java JEE: Tambien llamada Java Enterprise Edition. Esta orientado a aplicaciones empresariales distribuidas, ambientes cliente-servidor " aplicaciones completas como un correo electronico".
  • Java JME: Tambien llamada Java Micro Edition. Esta orientado a aplicaciones con recursos limitados como dispositivos móviles, es usada para crear aplicaciones pequeñas o juegos.


Etiquetas: | edit post