lunes, 30 de marzo de 2009

Introducción a la Programación Orientada a Objetos en Java


Introduccion a Java

Java utiliza convenciones casi idénticas para declaración de variables, paso de parámetros, y demás, pero sólo considera las partes de C++ que no estaban ya en C.

Las principales características que Java son:
Punteros: En Java, no existen punteros, evitando el acceso directo a la memoria volátil.
Variables globales:En Java lo único global es el nombre de las clases.
goto: Java no tiene ninguna sentencia goto. Sin embargo Java tiene las sentencias break y continue que cubren los casos importantes de goto.
Asignación de memoria: Se utiliza el operador new para asignar un espacio de memoria a un objeto en el montículo de memoria. Con new no se obtiene una dirección de memoria sino un descriptor al objeto del montículo. La memoria real asignada a ese objeto se puede mover a la vez que el programa se ejecuta, pero sin tener que preocuparse de ello. Cuando no tenga ninguna referencia de ningún objeto, la memoria ocupada estará disponible para que la reutilice el resto del sistema sin tener que llamar a free o delete. A esto se le llama recogida de basura. El recolector de basura se ejecuta siempre que el sistema esté libre, o cuando una asignación solicitada no encuentre asignación suficiente.
Conversión de tipos insegura: En Java se puede hacer una comprobación en tiempo de ejecución de la compatibilidad de tipos y emitir una excepción cuando falla.
Operadores
Operadores aritméticos binarios de Java
Operador .......... Uso ............ Descripción
+ op1 + op2...... Suma ............op1 y op2
- op1 - op2 ........Resta .......... op2 de op1
* op1 * op2 .......Multiplica .......op1 por op2
/ op1 / op2 ........Divide ..........op1 por op2
% op1 % op2 .....Calcula .......el resto de dividir op1 entre op2

Versiones unarias de los operadores "+" y "-"
Operador .... Uso ................... Descripción
+ ............. +op ..... ....Convierte op a entero si es un byte, short o char
- .............. -op ...........Niega aritméticamente op

Operaciones con "++" y "--"
Operador ..... Uso...................... Descripción
++ op++ ...Incrementa op en 1; se evalúa al valor anterior al incremento
++ ++op ... Incrementa op en 1; se evalúa al valor posterior al incremento
-- op-- .... Decrementa op en 1; se evalúa al valor anterior al incremento
-- --op .... Decrementa op en 1; se evalúa al valor posterior al incremento

Operadores de comparación
Operador ........... Uso ............. Devuelve verdadero si
> ..................op1 > op2....... op1 es mayor que op2
>=............... op1 >= op2..... op1 es mayor o igual que op2
<................. op1 < op2 .....op1 es menor que op2
<= ..............op1 <= op2 .....op1 es menor o igual que op2
==............. op1 == op2 ........op1 y op2 son iguales
!= ...............op1 != op2 ........... op1 y op2 son distintos


Operadores condicionales
Operador ........ Uso .......... Devuelve verdadero si...
&&op1&&op2...op1 y op2...son ambos verdaderos, condicionalmente evalúa op2
&op1&op2.......op1 y op2...son ambos verdaderos, siempre evalúa op1 y op2
op1op2........op1oop2...son verdaderos, condicionalmente evalúa op2
op1op2.........op1oop2.....son verdaderos, siempre evalúa op1 y op2
! !op................. op .............. es falso


Operadores de desplazamiento de bits
Operador .....Uso ............. Operación
>> ..........op1 >> op2 .....Desplaza los bits de op1 a la derecha op2 veces
<< .........op1 << op2 .....Desplaza los bits de op1 a la izquierda op2 veces
>>>......op1>>> op2 ..Desplaza los bits de op1 a la derecha op2 veces(sinSigno)


Operadores de lógica de bits
Operador ....Uso .........Operación
& ...........op1 & op2 .......AND
............op1 op2 .........OR
^ ...........
op1 ^ op2 ......OR
~........... ~op2..... Complemento

Operadores de atajo de asignación
Operador ....Uso .................Equivalente a
+= ........op1+= op2 ......op1 =op1 + op2
-= .........op1 -= op2 ......op1 =op1 - op2
*=........ op1 *= op2 ......op1 =op1 * op2
/= .........op1/= op2 .......op1 = op1 / op2
%=....... op1 %= op2 .....op1 = op1 % op2
&= .........op1 &= op2...... op1 = op1 & op2

Precedencia de operadores
Tipo de operadores ............Operadores de este tipo
Operadores posfijos .......[ ] . (parametros) expr++ expr--
Operadores unarios........ ++expr --expr +expr -expr ~ !
Creación o conversión new ..........(tipo) expr
Multiplicación............................... * / %
Suma........................................ + -
Desplazamiento .........................<<
Comparación ..............................< <= = instanceof
Igualdad .................................. ==
!= .....................................AND a nivel de bit
&........................................... OR a nivel de bit
^ ......................................XOR a nivel de bit
..........................................AND lógico
&&....................................... OR lógico

Condicional ....................................? :
Asignación ...............= += -= *= /= %= &= ^= = <<= = =

Estructuras de control


Sentencia Clave
Toma de decisión if-else, switch-case
Bucle for, while, do-while
Misceláneo break, continue, label:, return, goto



Clases y Objetos
Clases:

La clase es una unidad fundamental en Java. Los datos que contenga, se denominan atributos, y las funciones y rutinas que defina, se conocen como sus métodos. Un objeto no es más que la instancia de una clase, una clase llevada a la existencia, así como una variable entera es una instancia, un ejemplo vivo de un tipo int. Una clase define cómo es un objeto.
Un ejemplo inicial de clase puede ser el siguiente :
class Punto {
public long x;
public long y;
}
Una clase se define con la palabra reservada class, seguida del nombre de la clase. Luego, entre llaves, se va definiendo su estructura.
Objeto:
Entidad que contiene unos datos particulares (DATOS MIEMBRO) y unas operaciones concretas sobre ellos (FUNCIONES MIEMBRO). A un objeto de una clase también se le denomina instancia de una clase.
Elementos a resaltar:
Un objeto contiene información: DATOS MIEMBRO (también llamados atributos). En C los struct también podían contener información de diferente tipo (miembros de la estructura).
Un objeto además (y ahí radica la gran diferencia con los tipos de datos estructurados de C), posee operaciones que manipulan los valores de los datos miembro: FUNCIONES MIEMBRO (métodos).


Sintaxis de Java
Comentarios
// comentario de una línea/* comentario multilínea *//**comentario de documentación */
/* Este es un comentario de
varias líneas */
// comentario unilínea
/** Esto es documentación
*/
Declaración de variables
tipo nombre1 [,nombre2,...];
int a, b;
Declaración de clase
[ámbito] class nombre [extends clase] { // variables globales // métodos}
public class dato {
. . .
}
Clase con herencia
class valor extends dato {
. . .
}
Métodos
[ámbito] tipo nombre( parámetros ) {. . .}
public void metodo(int i){
. . .
}

Introducción a la Orientación a Objetos


Paradigmas de Programacion Java
La Programación Orientada a Objetos (POO u OOP según sus siglas en inglés) es un paradigma de programación que usa objetos y sus interacciones para diseñar aplicaciones y programas de computadora. Está basado en varias técnicas, incluyendo herencia, modularidad, polimorfismo y encapsulamiento. Su uso se popularizó a principios de la década de 1990. Actualmente son muchos los lenguajes de programación que soportan la orientación a objetos.
Conceptos fundamentales
La programación orientada a objetos es una nueva forma de programar que trata de encontrar una solución a estos problemas. 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.
• Objeto: entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos). 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: 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.
• Componentes de un objeto:atributos, identidad, relaciones y métodos.
• Representación de un objeto: un objeto se representa por medio de una tabla o entidad que esté compuesta por sus atributos y funciones correspondientes. En comparación con un lenguaje imperativo, una "variable", no es más que un contenedor interno del atributo del objeto o de un estado interno, así como la "función" es un procedimiento interno del método del objeto.
CLASES Y OBJETOS
Clases
El elemento básico de la programación orientada a objetos en Java es la clase. Una clase define la forma y comportamiento de un objeto.Para crear una clase sólo se necesita un archivo fuente que contenga la palabra clave reservada class seguida de un identificador legal y un bloque delimitado por dos llaves para el cuerpo de la clase.Un archivo de Java debe tener el mismo nombre que la clase que contiene, y se les suele asignar la extensión ".java". Hay que tener presente que en Java se diferencia entre mayúsculas y minúsculas; el nombre de la clase y el de archivo fuente han de ser exactamente iguales.Las clases típicas de Java incluirán variables y métodos de instancia. Los programas en Java completos constarán por lo general de varias clases de Java en distintos archivos fuente.Una clase es una plantilla para un objeto. Por lo tanto define la estructura de un objeto y su interfaz funcional, en forma de métodos. Cuando se ejecuta un programa en Java, el sistema utiliza definiciones de clase para crear instancias de las clases, que son los objetos reales. Los términos instancia y objeto se utilizan de manera indistinta. La forma general de una definición de clase es:
class Nombre_De_Clase {
tipo_de_variable nombre_de_atributo1;
tipo_de_variable nombre_de_atributo2;
// . . .
tipo_devuelto nombre_de_método1( lista_de_parámetros ) {
cuerpo_del_método1;
}
tipo_devuelto nombre_de_método2( lista_de_parámetros ) {
cuerpo_del_método2;
}
// . . .
}
Los atributos
Los datos se encapsulan dentro de una clase declarando variables dentro de las llaves de apertura y cierre de la declaración de la clase, variables que se conocen como atributos. Se declaran igual que las variables locales de un método en concreto.
Los atributos se pueden declarar con dos clases de tipos: un tipo simple Java (ya descritos), o el nombre de una clase (será una referencia a objeto).Cuando se realiza una instancia de una clase (creación de un objeto) se reservará en la memoria un espacio para un conjunto de datos como el que definen los atributos de una clase. A este conjunto de variables se le denomina variables de instancia.
Los métodos
Los métodos son subrutinas que definen la interfaz de una clase, sus capacidades y comportamiento.Un método ha de tener por nombre cualquier identificador legal distinto de los ya utilizados por los nombres de la clase en que está definido. Los métodos se declaran al mismo nivel que las variables de instancia dentro de una definición de clase.En la declaración de los métodos se define el tipo de valor que devuelven y a una lista formal de parámetros de entrada, de sintaxis tipo identificador separadas por comas.
La forma general de una declaración de método es:
tipo_devuelto nombre_de_método( lista-formal-de-parámetros ) {
cuerpo_del_método;
}
Objetos
Referencias a Objeto e Instancias
Los tipos simples de Java describían el tamaño y los valores de las variables. Cada vez que se crea una clase se añade otro tipo de dato que se puede utilizar igual que uno de los tipos simples. Por ello al declarar una nueva variable, se puede utilizar un nombre de clase como tipo. A estas variables se las conoce como referencias a objeto.Todas las referencias a objeto son compatibles también con las instancias de subclases de su tipo.
Constructores
Las clases pueden implementar un método especial llamado constructor. Un constructor es un método que inicia un objeto inmediatamente después de su creación. De esta forma nos evitamos el tener que iniciar las variables explícitamente para su iniciación.El constructor tiene exactamente el mismo nombre de la clase que lo implementa; no puede haber ningún otro método que comparta su nombre con el de su clase. Una vez definido, se llamará automáticamente al constructor al crear un objeto de esa clase (al utilizar el operador new).El constructor no devuelve ningún tipo, ni siquiera void. Su misión es iniciar todo estado interno de un objeto (sus atributos), haciendo que el objeto sea utilizable inmediatamente; reservando memoria para sus atributos, iniciando sus valores
La lista de parámetros especificada después del nombre de una clase en una sentencia new se utiliza para pasar parámetros al constructor.Se llama al método constructor justo después de crear la instancia y antes de que new devuelva el control al punto de la llamada.
El operador new
El operador new crea una instancia de una clase (objetos) y devuelve una referencia a ese objeto. Hay una distinción crítica entre la forma de manipular los tipos simples y las clases en Java: Las referencias a objetos realmente no contienen a los objetos a los que referencian. De esta forma se pueden crear múltiples referencias al mismo objeto.Cuando ya no haya ninguna variable que haga referencia a un objeto, Java reclama automáticamente la memoria utilizada por ese objeto, a lo que se denomina recogida de basura.Cuando se realiza una instancia de una clase (mediante new) se reserva en la memoria un espacio para un conjunto de datos como el que definen los atributos de la clase que se indica en la instanciación. A este conjunto de variables se le denomina variables de instancia.La potencia de las variables de instancia es que se obtiene un conjunto distinto de ellas cada vez que se crea un objeto nuevo. Es importante el comprender que cada objeto tiene su propia copia de las variables de instancia de su clase, por lo que los cambios sobre las variables de instancia de un objeto no tienen efecto sobre las variables de instancia de otro.
Acceso al objeto
*El operador punto (.)
El operador punto (.) se utiliza para acceder a las variables de instancia y los métodos contenidos en un objeto, mediante su referencia a objeto:referencia_a_objeto.nombre_de_variable_de_instanciareferencia_a_objeto.nombre_de_método( lista-de-parámetros );
Este es uno de los aspectos más importantes de la diferencia entre la programación orientada a objetos y la programación estructurada.
La referencia this
Java incluye un valor de referencia especial llamado this, que se utiliza dentro de cualquier método para referirse al objeto actual. El valor this se refiere al objeto sobre el que ha sido llamado el método actual. Se puede utilizar this siempre que se requiera una referencia a un objeto del tipo de una clase actual. Si hay dos objetos que utilicen el mismo código, seleccionados a través de otras instancias, cada uno tiene su propio valor único de this.Un refinamiento habitual es que un constructor llame a otro para construir la instancia correctamente. La destrucción del objeto
La destrucción de los objetos
Cuando un objeto no va a ser utilizado, el espacio de memoria de dinámica que utiliza ha de ser liberado, así como los recursos que poseía, permitiendo al programa disponer de todos los recursos posibles. A esta acción se la da el nombre de destrucción del objeto.En Java la destrucción se puede realizar de forma automática o de forma personalizada, en función de las características del objeto.
La destrucción por defecto:
*Recogida de basura
El intérprete de Java posee un sistema de recogida de basura, que por lo general permite que no nos preocupemos de liberar la memoria asignada explícitamente.El recolector de basura será el encargado de liberar una zona de memoria dinámica que había sido reservada mediante el operador new, cuando el objeto ya no va a ser utilizado más durante el programa (por ejemplo, sale del ámbito de utilización, o no es referenciado nuevamente).El sistema de recogida de basura se ejecuta periódicamente, buscando objetos que ya no estén referenciados.
La destrucción personalizada: finalize
A veces una clase mantiene un recurso que no es de Java como un descriptor de archivo o un tipo de letra del sistema de ventanas. En este caso sería acertado el utilizar la finalización explícita, para asegurar que dicho recurso se libera. Esto se hace mediante la destrucción personalizada, un sistema similar a los destructores de C++.

Modificadores
Los modificadores son elementos del lenguaje que se colocan delante de la definición de variables locales, datos miembro, métodos o clases y que alteran o condicionan el significado del elemento. El modificador static que se usa para definir datos miembros o métodos como pertenecientes a una clase, en lugar de pertenecer a una instancia, los modificadores de acceso, que son aquellos que permiten limitar o generalizar el acceso a los componentes de una clase o a la clase en si misma.
Modificadores de acceso
Los modificadores de acceso permiten al diseñador de una clase determinar quien accede a los datos y métodos miembros de una clase.Los modificadores de acceso preceden a la declaración de un elemento de la clase (ya sea dato o método), de la siguiente forma:
[modificadores] tipo_variable nombre;
[modificadores] tipo_devuelto nombre_Metodo ( lista_Argumentos );
Existen los siguientes modificadores de acceso:
public - Todo el mundo puede acceder al elemento. Si es un dato miembro, todo el mundo puede ver el elemento, es decir, usarlo y asignarlo. Si es un método todo el mundo puede invocarlo.
private - Sólo se puede acceder al elemento desde métodos de la clase, o sólo puede invocarse el método desde otro método de la clase.
protected - Se explicará en el capítulo dedicado a la herencia.
sin modificador - Se puede acceder al elemento desde cualquier clase del package donde se define la clase. Pueden utilizarse estos modificadores para cualquier tipo de miembros de la clase, incluidos los constructores (con lo que se puede limitar quien puede crear instancias de la clase).
Modificadores de acceso para clases
Las clases en si mismas pueden declararse:
public - Todo el mundo puede usar la clase. Se pueden crear instancias de esa clase, siempre y cuando alguno de sus constructores sea accesible.
sin modificador - La clase puede ser usada e instanciada por clases dentro del package donde se define.
Las clases no pueden declararse ni protected , ni private.
Importancia de los modificadores de acceso
Los modificadores de acceso permiten al diseñador de clases delimitar la frontera entre lo que es accesible para los usuarios de la clase, lo que es estrictamente privado y 'no importa' a nadie más que al diseñador de la clase e incluso lo que podría llegar a importar a otros diseñadores de clases que quisieran alterar, completar o especializar el comportamiento de la clase. Con el uso de estos modificadores se consigue uno de los principios básicos de la Programación Orientada a Objetos, que es la encapsulación:
Las clases tienen un comportamiento definido para quienes las usan conformado por los elementos que tienen un acceso público, y una implementación oculta formada por los elementos privados, de la que no tienen que preocuparse los usuarios de la clase. Los otros dos modificadores, protected y el acceso por defecto (package) complementan a los otros dos. El primero es muy importante cuando se utilizan relaciones de herencia entre las clases y el segundo establece relaciones de 'confianza' entre clases afines dentro del mismo package. Así, la pertenencia de las clases a un mismo package es algo más que una clasificación de clases por cuestiones de orden. Cuando se diseñan clases, es importante pararse a pensar en términos de quien debe tener acceso a que. Qué cosas son parte de la implantación y deberían ocultarse (y en que grado) y que cosas forman parte de la interface y deberían ser públicas.

Lenguaje Unificado de Modelado
Lenguaje Unificado de Modelado (UML, por sus siglas en inglés, Unified Modeling Language) es el lenguaje de modelado de sistemas de software más conocido y utilizado en la actualidad; está respaldado por el OMG (Object Management Group). Es un lenguaje gráfico para visualizar, especificar, construir y documentar un sistema. UML ofrece un estándar para describir un "plano" del sistema (modelo), incluyendo aspectos conceptuales tales como procesos de negocio y funciones del sistema, y aspectos concretos como expresiones de lenguajes de programación, esquemas de bases de datos y componentes reutilizables.
Es importante resaltar que UML es un "lenguaje de modelado" para especificar o para describir métodos o procesos. Se utiliza para definir un sistema, para detallar los artefactos en el sistema y para documentar y construir. En otras palabras, es el lenguaje en el que está descrito el modelo.Se puede aplicar en el desarrollo de software entregando gran variedad de formas para dar soporte a una metodología de desarrollo de software (tal como el Proceso Unificado Racional o RUP), pero no especifica en sí mismo qué metodología o proceso usar.UML no puede compararse con la programación estructurada, pues UML significa Lenguaje Unificado de Modelado, no es programación, solo se diagrama la realidad de una utilización en un requerimiento. Mientras que, programación estructurada, es una forma de programar como lo es la orientación a objetos, sin embargo, la programación orientada a objetos viene siendo un complemento perfecto de UML, pero no por eso se toma UML sólo para lenguajes orientados a objetos.UML cuenta con varios tipos de diagramas, los cuales muestran diferentes aspectos de las entidades representadas.
Principios de la Orientacion a Objetos
Abstracción: La abstraccion es un metodo por el cual abstraemos, vale la redundancia, una determinada entidad de la realidad sus caracteristicas y funciones que desempeñan, estos son representados en clases por medio de atributos y metodos de dicha clase.
Encapsulamiento: Este concepto se basa en que por ejemplo a un conductor no necesita saber como esta compuesta las partes internas del motor, sino la funcionalidad que tiene, a este ocultamiento se le denomina encapsulamiento. Es el ocultamiento de informacion que no es necesario saber un determinado usuario.
Herencia: Este es un concepto fundamental para la POO y para el lenguaje java, ya que con este concepto significa que vamos a poder reutilizar codigo. Pero en java no existe la herencia multiple como en otros programas como C/C++, aca es solo herencia simple, pero en java existe algo que simula esta herencia multiple que son las llamadas interfaces
Conceptos del Diseño Orientado a Objetos
INTERFACES
Los métodos abstractos son útiles cuando se quiere que cada implementación de la clase parezca y funcione igual, pero necesita que se cree una nueva clase para utilizar los métodos abstractos.Los interfaces proporcionan un mecanismo para abstraer los métodos a un nivel superior.Un interface contiene una colección de métodos que se implementan en otro lugar. Los métodos de una clase son public, static y final.La principal diferencia entre interface y abstract es que un interface proporciona un mecanismo de encapsulación de los protocolos de los métodos sin forzar al usuario a utilizar la herencia.Al utilizar implements para el interface es como si se hiciese una acción de copiar-y-pegar del código del interface, con lo cual no se hereda nada, solamente se pueden usar los métodos.La ventaja principal del uso de interfaces es que una clase interface puede ser implementada por cualquier número de clases, permitiendo a cada clase compartir el interfaz de programación sin tener que ser consciente de la implementación que hagan las otras clases que implementen el interface.
Polimorfismo: El concepto de Polimorfismo es uno de los fundamentos para cualquier lenguaje orientado a Objetos, las mismas raíces de la palabra pueden ser una fuerte pista de su significado: Poli = Multiple, morfismo= Formas , esto implica que un mismo Objeto puede tomar diversas formas. A través del concepto de Herencias ("Inheritance") es posible ilustrar este comportamiento:
El poder manipular un Objeto como si éste fuera de un tipo genérico otorga mayor flexibilidad al momento de programar con Objetos, el término Polimorfismo también es asociado con un concepto llamado Late-Binding (Ligamiento Tardío).

domingo, 29 de marzo de 2009

Fundamentos de la programacion Java


El Software
El software de Java para el equipo o el entorno de ejecución Java se denomina también ejecución Java, entorno de ejecución, ejecución, JRE, máquina virtual Java, máquina virtual, Java VM, JVM, VM o descarga de Java.
Lenguajes de programación
El lenguaje para la programación en Java, es un lenguaje orientado a objeto, de una plataforma independiente. El lenguaje para la programación en Java, fue desarrollado por la compañia Sun Microsystems, con la idea original de usarlo para la creacion de paginas WEB.Esta programación Java tiene muchas similitudes con el lenguaje C y C++, asi que si se tiene conocimiento de estelenguaje, el aprendizaje de la programación Java sera de facil comprension por un programador que haya realizadoprogramas en estos lenguajes.Con la programación en Java, se pueden realizar distintos aplicativos, como son applets, que son aplicaciones especiales,que se ejecutan dentro de un navegador al ser cargada una pagina HTML en un servidor WEB, Por lo general los applets son programas pequeños y de propositos especificos.
Resolución de problemas con computadora
Aunque el proceso de diseñar programas es un proceso creativo, se pueden considerar una serie de fases o pasos comunes,que generalmente deben seguir todos los programadores.La resolución de problemas con computadoras se pueden dividir en tres fases:*Análisis del problema *Diseño del algoritmo *Resolución del algoritmo en la computadora El análisis y el diseño del algoritmo requiere la descripción del problema en subproblemas a base de refinamientos sucesivosy una herramienta de programación:*Diagrama de flujo *Diagrama N-S *Pseudocódigo Durante la tercera etapa se implementa este algoritmo en un código escrito en un lenguaje de programación,reflejando las ideas obtenidas en las fases de análisis y diseño.

Entorno de programación
"Eclipse" un entorno de programación Java excepcional Ahora que he estado un poco metido en Java, he probado este entorno de programación Java que funciona muy bien.Es fácil e intuitivo de usar y puedes ver directamente el resultado del programa en cuanto lo compilas.Aparte es una genial gestión de errores, dependencias, herencias entre objetos, etc ... así como una buena ayuda y base de datos sobre clases disponibles para tus programas.

Tipos de Datos
Los tipos de datos en Java pueden dividirse en dos categorías: simples y compuestos.
*Los simples son tipos nucleares que no se derivan de otros tipos, como los enteros, de coma flotante, booleanos y de carácter.
*Los tipos compuestos se basan en los tipos simples, e incluyen las cadenas, las matrices y tanto las clases como las interfaces, en general.Cada tipo de datos simple soporta un conjunto de literales que le pueden ser asignados, para darles valor.
En este apartado se explican los tipos de datos simples (o primitivos) que presenta Java, así como los literales que soporta (sintaxis de los valores que se les puede asignar)
Tipos de datos enteros
Se usan para representar números enteros con signo. Hay cuatro tipos: byte, short, int y long.
Literales enteros
Son básicos en la programación en Java y presentan tres formatos:
*Decimal: Los literales decimales aparecen como números ordinarios sin ninguna notación especial.
*Hexadecimal: Los hexadecimales (base 16) aparecen con un 0x ó 0X inicial, notación similar a la utilizada en C y C++.
*Octal: Los octales aparecen con un 0 inicial delante de los dígitos.
Tipos de datos en coma flotante
Se usan para representar números con partes fraccionarias. Hay dos tipos de coma flotante: float y double. El primero reserva almacenamiento para un número de precisión simple de 4 bytes y el segundo lo hace para un numero de precisión doble de 8 bytes.
Literales en coma flotante
Representan números decimales con partes fraccionarias. Pueden representarse con notación estándar (563,84) o científica (5.6384e2).De forma predeterminada son del tipo double (8 bytes). Existe la opción de usar un tipo más corto (el tipo float de 4 bytes), especificándolo con una F ó f al final del número.La declaración de variables de coma flotante es muy similar a la de las variables enteras.
Tipo de datos boolean
Se usa para almacenar variables que presenten dos estados, que serán representados por los valores true y false. Representan valores bi-estado, provenientes del denominado álgebra de Boole.
Literales Booleanos
Java utiliza dos palabras clave para los estados: true (para verdadero) y false (para falso). Este tipo de literales es nuevo respecto a C/C++, lenguajes en los que el valor de falso se representaba por un 0 numérico, y verdadero cualquier número que no fuese el 0.
Tipo de datos carácter
Se usa para almacenar caracteres Unicode simples. Debido a que el conjunto de caracteres Unicode se compone de valores de 16 bits, el tipo de datos char se almacena en un entero sin signo de 16 bits.Java a diferencia de C/C++ distingue entre matrices de caracteres y cadenas.
Literales carácter
Representan un único carácter y aparecen dentro de un par de comillas simples. De forma similar que en C/C++. Los caracteres especiales (de control y no imprimibles) se representan con una barra invertida ('\') seguida del código carácter.
Conversión de tipos de datos
En Java es posible transformar el tipo de una variable u objeto en otro diferente al original con el que fue declarado. Este proceso se denomina "conversión", "moldeado" o "tipado". La conversión se lleva a cabo colocando el tipo destino entre paréntesis, a la izquierda del valor que queremos convertir de la forma siguiente:char c = (char)System.in.read();Arrays
Vectores y Matrices
Una matriz es una construcción que proporciona almacenaje a una lista de elementos del mismo tipo, ya sea simple o compuesto.Si la matriz tiene solo una dimensión, se la denomina vector.En Java los vectores se declaran utilizando corchetes ( [ y ] ), tras la declaración del tipo de datos que contendrá el vector. Por ejemplo,esta sería la declaración de un vector de números enteros (int):
int vectorNumeros[ ]; // Vector de números
-Se observa la ausencia de un número que indique cuántos elementos componen el vector, debido a que Java no deja indicar el tamañode un vector vacío cuando le declara. La asignación de memoria al vector se realiza de forma explícita en algún momento del programa.
*Para ello o se utiliza el operador new:
int vectorNumeros = new int[ 5 ]; // Vector de 5 números
*O se asigna una lista de elementos al vector:
int vectorIni = { 2, 5, 8}; // == int vectorIni[3]=new int[3];
Se puede observar que los corchetes son opcionales en este tipo de declaración de vector, tanto después del tipo de variable como después del identificador.Si se utiliza la forma de new se establecerá el valor 0 a cada uno de los elementos del vector.
Cadenas
En Java se tratan como una clase especial llamada String. Las cadenas se gestionan internamente por medio de una instancia de la clase String. Una instancia de la clase String es un objeto que ha sido creado siguiendo la descripción de la clase.
Cadenas constantes
Representan múltiples caracteres y aparecen dentro de un par de comillas dobles. Se implementan en Java con la clase String. Esta representaciónes muy diferente de la de C/C++ de cadenas como una matriz de caracteres.Cuando Java encuentra una constante de cadena, crea un caso de la clase String y define su estado, con los caracteres que aparecen dentro de las comillas dobles.Vemos un ejemplo de cadena declarada con la clase String de Java:String capitalUSA = "Washington D.C.";String nombreMio = "Minerva";
Operadores y Expresiones
Los operadores son un tipo de tokens que indican una evaluación o computación para ser realizada en objetos o datos, y en definitivasobre identificadores o constantes. Además de realizar la operación, un operador devuelve un valor, ya que son parte fundamental de las expresiones.El valor y tipo que devuelve depende del operador y del tipo de sus operandos. Por ejemplo, los operadores aritméticos devuelven un número como resultado de su operación.Los operadores realizan alguna función sobre uno, dos o tres operandos.
*Operadores unarios
Los operadores que requieren un operando son llamados operadores unarios. Por ejemplo, el operador "++" es un operador unario que incrementa el valor de su operando en una unidad.Los operadores unarios en Java pueden utilizar tanto la notación prefija como la posfija.La notación prefija indica que el operador aparece antes que su operando.
*Operadores aritméticos
El lenguaje Java soporta varios operadores aritméticos para los números enteros y en coma flotante. Se incluye + (suma), - (resta), * (multiplicación), / (división), y % (módulo, es decir, resto de una división entera).
* Operadores de comparación y condicionales
Un operador de comparación compara dos valores y determina la relación existente entre ambos. Por ejemplo, el operador != devuelve verdadero (true) si los dos operandos son distintos. La siguiente tabla resume los operadores de comparación de Java
* Operadores de bit
Un operador de bit permite realizar operaciones de bit sobre los datos. Existen dos tipos: los que desplazan (mueven) bits, y operadores lógicos de bit.
**Operadores de desplazamiento de bits
Los tres operadores de desplazamiento simplemente desplazan los bits del operando de la parte izquierda el número de veces indicado por el operando de la parte derecha. El desplazamiento ocurre en la dirección indicada por el operador.
**Operadores de lógica de bits
La lógica de bits (lógica de Bool) se utiliza para modelizar condiciones biestado y trabajar con ellas (cierto/falso, true/false, 1/0).En Java hay cuatro operadores de lógica de bitsEl operador & realiza la operación AND de bit. Aplica la función AND sobre cada par de bits de igual peso de cada operando.La función AND es evaluada a cierto si ambos operandos son ciertos.El operador realiza la operación OR de bit. Aplica la función OR sobre cada par de bits de igual peso de cada operando. La función OR es evaluada a cierto si alguno de los operandos es cierto.El operador ^ realiza la operación OR exclusivo de bit (XOR). Aplica la función XOR sobre cada par de bits de igual peso de cada operando. La función XOR es evaluada a cierto si los operandos tienen el mismo valor.Para finalizar, el operador de complemento invierte el valor de cada bit del operando. Convierte el falso en cierto, y el cierto en falso.
* Operadores de asignación
El operador de asignación básico es el =, que se utiliza para asignar un valor a otro. Por ejemplo: int contador = 0; Inicia la variable contador con un valor 0.Java además proporciona varios operadores de asignación que permiten realizar un atajo en la escritura de código.Permiten realizar operaciones aritméticas, lógicas, de bit y de asignación con un único operador.+=; -=; *=; /=; %=; &=

Estructuras Básicas de Control
El lenguaje Java soporta las estructuras de control:Sentencia
Toma de decisión
*if-else, switch-case
*Bucle for, while, do-while
Misceláneo
*break, continue, label:, return, goto

jueves, 22 de enero de 2009

Palabras Reservadas


Una palabra reservada es una palabra que tiene un significado gramatical especial
para ese lenguaje y no puede ser utilizada como un identificador en ese lenguaje.

abort
La palabra abort se usa tanto para abortar una tarea o una particion.absabs se utiliza
como el operador prefijo unitario que devuelve el valor absoluto de un número.

abstract

abstract define un método y un tipo etiquetado como abstracto, es decir, el tipo base
de una clase de tipos que comparten ciertas propiedades, pero el cual no puede
instanciarse por tener algunas operaciones primitivas sin implementar.

accept

accept se utiliza para aceptar citas en una tarea.

access

La palabra reservada access se utiliza en las declaraciones de tipo puntero.

aliased

aliased se utiliza en la declaración de variables o campos de registros que tienen
potencialmente uno o varios punteros referenciandolos.

all
Esta palabra se utiliza en:Declaración de tipos puntero que pueden apuntar a
variables aliased y no sólo a objetos creados en el montón (heap).
Desreferenciación de punteros.

and
Se utiliza como el operador lógico de conjunción y en Ada 2005 para
añadir a un tipo una determinada interfaz.

array
Para declarar tipos array.

at
at se usa en cláusulas de representación.

begin
begin se utiliza para indicar el inicio de la secuencia de sentencias en un bloque
o en el cuerpo de un subprograma, tarea o paquete.

body
La palabra body se utiliza en la definición del cuerpo (implementación) de paquetes y tareas.

case
Esta palabra se usa en las sentencias case y en la definición de registros variantes.

constant
Esta palabra se utiliza para declarar objetos constantes y números con nombre.
declare
Esta palabra indica el comienzo de la parte declarativa de un bloque.

delay
delay se utiliza para retardar la ejecución del programa durante unos segundos o hasta
un tiempo determinado.delay 10.5;Ahora := Ada.Calendar.Clock;delay until Ahora + 30.0;

delta
Se utiliza para la declaración de tipos de coma fija.

digits
Se utiliza para la declaración de tipos de coma flotante.

do
Usado en la aceptación de citas en tareas.

else
Usada en la sentencia if-then-else.

elsif
Usada en la sentencia if-then-else.

end
Utilizada para marcar el final de una de las siguientes estructuras:Sentencias de
control Cuerpos de subprogramas Registros Especificaciones y cuerpos de
paquetes Tareas, objetos protegidos, sentencias de aceptación de citas y de
selección de citas. Bloques

entry
Para definir una cita de una tarea o de un objeto protegido.

exception
Para declarar excepciones o definir un manejardor.

exit
Para salir de un bucle condicional o incondicionalmente.

for
Usada en los bucles for y en las cláusulas de representación.

function
Para definir funciones.

generic
Para definir unidades genéricas.

goto
Para la sentencia goto.

if
Usada en la sentencia if-then-else.

inin
se utiliza en:El test de pertenenciaLos modos in e in out de los parámetros de
subprogramas. interfaceSólo Ada 2005. Usada para declarar una interfaz que
puede luego implementarse con un tipo etiquetado.

is
Esta palabra se usa comúnmente para separar la declaración de un identificador de su
definición. En concreto se encuentra en:Definiciones de tipos. Definiciones de subtipos
Declaraciones de especificaciones y cuerpos de paquetes. Definiciones de cuerpos de
subpaquetes Instanciaciones de genericos.

limited
La palabra reservada limited se usa en:Declaraciones de tipos limitados. Sólo Ada 2005.
Interdependencia limitada de paquetes.

loop
loop es utilizada en los bucles simple, for y while.

mod
mod se utiliza como operador binario que devuelve el módulo.Modulo := X mod Y;

new
new se utiliza en los siguientes contextos:En derivacion de tipos. En extencion de
tipos. En instanciacion de genericos. En reserva de memoria.

not
Es el operador logico de negacion. Es parte de la comprobacion de no pertenencia, not in.

null
El valor nulo de un puntero. Definición de un registronulo y del valor de ese tipo. Parte
nula de un registro variante. Sentencia nula.

of
En la declaración de tipos array.

or
Operador lógico de disyunción inclusiva. En la sentencia select en tareas.

others
others se utiliza en varios contextos en los que se indica el resto de casos posibles en una
lista de opciones:Inicialización del resto de elementos de un array. Caso por defecto en
una sentencia case. Caso por defecto en la definición de un registro variante. Tratamiento
por defecto de cualquier otra excepción en un manejador de exepcion.

out
Modos out e in out de parámetros de procedimientos.overridingSólo Ada 2005: Para
declarar que un método debe redefinir un método heredado. Con not overriding se
declara lo contrario, que no debe existir un método con este nombre en la clase del
tipo etiquetado.

package
package se usa en la especificación y cuerpo de paquetes.

pragma
pragma se usa para aplicar un pragma a la compilación.

private
Para declarar tipos privados Marcar el inicio de la parte privada de una especificación
de paquete.procedure Para declarar procedimiento, punteros a procedimientos y
procedimientos como parámetros formales de genéricos.

protected
Usado en las unidades protegidas.

raise
En las sentencias que levantan una exepcion nombrada o relanzan la excepción actual
en un manejador de excepciones.

range
La palabra clave range se utiliza para:Definir el primer y último valor en una declaración
de tipo entero o enumeracion. Definir el rango mínimo en un tipo de coma flotante o de coma
fija. El rango de un tipo array. Opcionalmente, para definir el rango en un bluce for cuando
se especifica el tipo de la variable índice.

record
Usada en declaraciones de tipos de registros.

rem
Esta palabra clave se usa como el operador que devuelve el resto (remainder) de la
división entera con signo, es decir, la siguiente igualdad es verdadera:
A = (A / B) * B + (A rem B)

renames
Utilizada para renombrar un paquete, objeto o subprograma.

requeue
La sentencia requeue se emplea para redirigir una llamada que esté encolada en un punto
de entrada de una tarea hacia otra cola.

return
Para declarar el tipo del valor devuelto en la definición de una funcion. En una sentencia return,
para devolver el control al llamador desde un subprograma. Si es una función se indica además
el valor devuelto, si es un procedimiento, el return no tiene argumentos.

reverse
En un bluce for indica que la cuenta se ha de llevar a cabo en sentido inverso al ordinario.Por
ejemplo, el siguiente bucle imprime: 10 9 8 7 6 5 4 3 2 1.for I in reverse 1 .. 10 loop Ada.Text_IO.Put (Integer'Image (I)); end loop;Sin embargo, el siguiente bucle no imprime nada porque un rango cuyo primer valor es mayor que el segundo es un rango nulo loop Ada.Text_IO.Put (Integer'Image (I)); -- No entra al bucleend loop.
select
En la seleccion de citas en tareas.

separate
En la declaración y definición de subunidades.

subtype
En la declaración de subtipos.

synchronized
Sólo Ada 2005: Para declarar que una interfaz tiene que ser implementada por un tipo tarea o
un tipo protegido.type Personaje is synchronized interface.

tagged
En la declaración y extensión de tipos etiquetados.
taskEn la declaración y cuerpo de tareas y tipos tareas.
terminatePara terminar tareas.
thenEn la instruccion if-then-else y en el operador logico de conjuncion corto-circuitado (and then).

type
En la declaración de tipos y en los parámetros de tipo en unidades genericas.

while
El Bucle while o bucle mientras es una estructura de la mayoría de los lenguajes de programación estructurados cuyo propósito es repetir un bloque de código mientras una condición se mantenga verdadera.