JAVA
1.Contenido
- DEFINICIÓN
Java es un lenguaje de programación de propósito general, concurrente, orientado a objetos que fue diseñado específicamente para tener tan pocas dependencias de implementación como fuera posible. Su intención es permitir que los desarrolladores de aplicaciones escriban el programa una vez y lo ejecuten en cualquier dispositivo (conocido en inglés como WORA, o "write once, run anywhere"), lo que quiere decir que el código que es ejecutado en una plataforma no tiene que ser recompilado para correr en otra. Java es, a partir de 2012, uno de los lenguajes de programación más populares en uso, particularmente para aplicaciones de cliente-servidor de web, con unos 10 millones de usuarios reportados.
El lenguaje de programación Java fue originalmente desarrollado por James Gosling de Sun Microsystems (la cual fue adquirida por la compañía Oracle) y publicado en 1995 como un componente fundamental de la plataforma Java de Sun Microsystems. Su sintaxis deriva en gran medida de C y C++, pero tiene menos utilidades de bajo nivel que cualquiera de ellos. Las aplicaciones de Java son generalmente compiladas a bytecode (clase Java) que puede ejecutarse en cualquier máquina virtual Java (JVM) sin importar la arquitectura de la computadora subyacente.
La compañía Sun desarrolló la implementación de referencia original para los compiladores de Java, máquinas virtuales, y librerías de clases en 1991 y las publicó por primera vez en 1995. A partir de mayo de 2007, en cumplimiento con las especificaciones del Proceso de la Comunidad Java, Sun volvió a licenciar la mayoría de sus tecnologías de Java bajo la Licencia Pública General de GNU. Otros también han desarrollado implementaciones alternas a estas tecnologías de Sun, tales como el Compilador de Java de GNU y el GNU Classpath.
Java es un lenguaje útil para casi todo tipo de problemas. Podemos citar como funcionalidades de Java varias:
1. Aplicaciones “cliente”: son las que se ejecutan en un solo ordenador (por ejemplo el portátil de tu casa) sin necesidad de conectarse a otra máquina. Pueden servirte por ejemplo para realizar cálculos o gestionar datos.
2. Aplicaciones “cliente/servidor”: son programas que necesitan conectarse a otra máquina (por ejemplo un servidor de datos) para pedirle algún servicio de forma más o menos continua, como podría ser el uso de una base de datos. Pueden servir por ejemplo para el teletrabajo: trabajar desde casa pero conectados a un ordenador de una empresa.
3. Podemos hablar también de “aplicaciones web”, que son programas Java que se ejecutan en un servidor de páginas web. Estas aplicaciones reciben “solicitudes” desde un ordenador y envían al navegador (Internet Explorer, Firefox, Safari, etc.) que actúa como su cliente páginas de respuesta en HTML.
- CARACTERÍSTICAS
Principales Características de JAVA.
Java es un lenguaje de programación de propósito general orientado a objetos desarrollado por Sun Microsystems. También se puede decir que Java es una tecnología que no sólo se reduce al lenguaje sino que además provee de una máquina virtual Java que permite ejecutar código compilado Java, sea cual sea la plataforma que exista por debajo; plataforma tanto hardware, como software (el sistema operativo que soporte ese hardware). El apoyo a esta tecnología viene dado por la gran cantidad de fabricantes que apoyan esta especificación de máquina virtual.
Aprender el lenguaje de programación Java requiere tiempo y esfuerzo, pero en este curso trataremos de sentar las bases para el conocimiento general del lenguaje. El lenguaje se inspira en otros lenguajes:
Java es interpretado.
Estrictamente hablando, Java es interpretado, aunque en realidad Java es tanto interpretado como compilado. De hecho, sólo cerca del 20% del código Java es interpretado por la JVM (Java Virtual Machine), pero es un 20% muy importante. Tanto la seguridad de Java como su habilidad para ser ejecutado en múltiples plataformas se deben a que los pasos finales de la compilación se manejan localmente.
Existen ciertos entornos que para mejorar el rendimiento usan un pequeño compilador para la última fase de compilación, de forma que una vez que se tenga el bytecode, en vez de interpretarlo se compila generando código nativo para esa plataforma y se ejecuta, pero esta compilación se realiza cada vez que se quiera ejecutar el programa. El único código realmente independiente es el bytecode. Este tipo de compiladores se conocen como 'Just In Time' o JIT. Sin embargo, el bytecode no se completa hasta que se junta con un entorno de ejecución, que en este caso será la máquina virtual Java de la plataforma en la que estemos. Un browser puede proveer dicha plataforma desde el punto de vista del sistema operativo.
Inconvenientes.
El browser tiene que interpretar los ficheros de clases antes de que se ejecuten. Utilizando un lenguaje de programación tradicional como puede ser el C++, el ordenador puede ejecutar directamente el código generado. Sin embargo, debido a la interpretación que el browser tiene que hacer de los ficheros, los programas escritos en Java tienden a ejecutarse bastante más lentos que con otros lenguajes de programación (p.e. C++).
¿Por qué se considera un rasgo positivo el hecho de combinar la compilación y la interpretación?
Facilita la seguridad y la estabilidad.
Reduce los problemas de versiones.
El hecho de que la última fase de la compilación se lleve a cabo por un dispositivo de una determinada plataforma, releva al programador de la responsabilidad del mantenimiento de varios fuentes en varias plataformas. La interpretación también admite que los datos se incorporen en tiempo de ejecución, de ahí el comportamiento dinámico que también caracteriza a Java.
La máquina virtual Java.
Para establecer Java como parte integral de la red, el compilador Java compila su código a un fichero objeto de formato independiente de la arquitectura de la máquina en que se ejecutará. Cualquier máquina que tenga el sistema de ejecución (runtime) puede ejecutar ese código objeto, sin importar en modo alguno la máquina en que ha sido generado.
El código fuente Java se "compila" a un código de bytes de alto nivel independiente de la máquina. Este código (bytecode) está diseñado para ejecutarse en una máquina hipotética que es implementada por un sistema runtime, que sí es dependiente de la máquina. Por lo tanto, lo que verdaderamente es dependiente del sistema es la Máquina Virtual Java (JVM) y las librerías fundamentales, que también nos permitirían acceder directamente al hardware de la máquina. El compilador Java genera bytecode que serán ejecutables dondequiera que exista una JVM.
Orientación a objetos.
Java implementa la tecnología básica de C++ con algunas mejoras y elimina algunas cosas para mantener el objetivo de la simplicidad del lenguaje. Java trabaja con sus datos como objetos y con interfaces a esos objetos. Soporta las tres características propias del paradigma de la orientación a objetos: encapsulación, enlace dinámico y polimorfismo. Los modelos de objetos son llamados, como en C++, clases y sus copias, instancias. Estas instancias, como en C++, necesitan ser construidas y destruidas en espacios de memoria.
Java incorpora funcionalidades inexistentes en C++ como por ejemplo, la resolución dinámica de métodos. Esta característica deriva del lenguaje ObjectiveC. En C++ se suele trabajar con librerías dinámicas (DLLs) que obligan a recompilar la aplicación cuando se retocan las funciones que se encuentran en su interior. Java resuelve este inconveniente mediante una interfaz específica llamada RTTI (Run Time Type Identification) que define la interacción entre objetos excluyendo variables de instancias o implementación de métodos. Las clases en Java tienen una representación en el runtime que permite a los programadores interrogar por el tipo de clase y enlazar dinámicamente la clase con el resultado de la búsqueda.
En Java casi todo son objetos. La mayoría de los lenguajes orientados a objetos permiten la herencia múltiple, lo que puede llevar a confusiones y/o complicaciones innecesarias. Java no permite herencia múltiple, sólo soporta "Herencia simple" en una estructura cósmica (todas las clases Java derivan jerárquicamente de la clase "Object"). La herencia simple significa que en cada momento cada clase sólo hereda de otra clase. Este tipo de herencia evita problemas del tipo de herencias múltiples contradictorias o exclusivas entre sí.
Java también permite la creación de clases totalmente abstractas, a las que llama interfaces con características similares a los interfaces IDL de CORBA. Las interfaces permiten definir métodos que
pueden compartir con varias clases, sin tener en cuenta cómo las otras manejan los métodos.
Seguridad en JAVA.
El código Java pasa muchos tests antes de ejecutarse en una máquina. El código se pasa a través de un verificador de bytecodes que comprueba el formato de los fragmentos de código y aplica un probador de teoremas para detectar fragmentos de código ilegal -código que falsea punteros, viola derechos de acceso sobre objetos o intenta cambiar el tipo o clase de un objeto-.
Si los bytecode pasan la verificación sin generar ningún mensaje de error, entonces sabemos que:
El código no produce desbordamiento de operandos en la pila
El tipo de los parámetres de todos los códigos de operación son conocidos y correctos
No ha ocurrido ninguna conversión ilegal de datos, tal como convertir enteros en puntero
El acceso a los campos de un objeto se sabe que es legal: public, private, protected
No hay nungún intento de violar las reglas de acceso y seguridad establecidas
Evitamos saltos a mitad de una instrucción, o direccionamientos de memoria de un objeto fuera de los límites del mismo.
El cargador de clases también ayuda a Java a mantener su seguridad, separando el espacio de nombres del sistema de ficheros local, del de los recursos procedentes de la red. Esto limita cualquier aplicación del tipo Caballo de Troya, ya que las clases se buscan primero entre las locales y luego entre las procedentes del exterior.
- TIPOS DE DATOS
Los primeros lenguajes de programación no usaban objetos, solo variables. Una variable podríamos decir que es un espacio de la memoria del ordenador a la que asignamos un contenido que puede ser un valor numérico (sólo números, con su valor de cálculo) o de tipo carácter o cadena de caracteres (valor alfanumérico que constará sólo de texto o de texto mezclado con números).
Vamos a comentar distintas cuestiones:
1. Un objeto es una cosa distinta a un tipo primitivo, aunque “porten” la misma información. Tener siempre presente que los objetos en Java tienen un tipo de tratamiento y los tipos primitivos, otro. Que en un momento dado contengan la misma información no significa en ningún caso que sean lo mismo. Iremos viendo las diferencias entre ambos poco a poco. De momento, recuerda que el tipo primitivo es algo elemental y el objeto algo complejo. Supón una cesta de manzanas en la calle: algo elemental. Supón una cesta de manzanas dentro de una nave espacial (considerando el conjunto nave + cesta): algo complejo. La información que portan puede ser la misma, pero no son lo mismo.
2. ¿Para qué tener esa aparente duplicidad entre tipos primitivos y tipos envoltorio? Esto es una cuestión que atañe a la concepción del lenguaje de programación. Tener en cuenta una cosa: un tipo primitivo es un dato elemental y carece de métodos, mientras que un objeto es una entidad compleja y dispone de métodos. Por otro lado, de acuerdo con la especificación de Java, es posible que necesitemos utilizar dentro de un programa un objeto que “porte” como contenido un número entero. Desde el momento en que sea necesario un objeto habremos de pensar en un envoltorio, por ejemplo Integer. Inicialmente nos puede costar un poco distinguir cuándo usar un tipo primitivo y cuándo un envoltorio en situaciones en las que ambos sean válidos. Seguiremos esta regla: usaremos por norma general tipos primitivos. Cuando para la estructura de datos o el proceso a realizar sea necesario un objeto, usaremos un envoltorio.
3. Los nombres de tipos primitivos y envoltorio se parecen mucho. En realidad, excepto entre int e Integer y char y Character, la diferencia se limita a que en un caso la inicial es minúscula (por ejemplo double) y en el otro es mayúscula (Double). Esa similitud puede confundirnos inicialmente, pero hemos de tener muy claro qué es cada tipo y cuándo utilizar cada tipo.
4. Una cadena de caracteres es un objeto. El tipo String en Java nos permite crear objetos que contienen texto (palabras, frases, etc.). El texto debe ir siempre entre comillas. Muchas veces se cree erróneamente que el tipo String es un tipo primitivo por analogía con otros lenguajes donde String funciona como una variable elemental. En Java no es así.
5. Hay distintos tipos primitivos enteros. ¿Cuál usar? Por norma general usaremos el tipo int. Para casos en los que el entero pueda ser muy grande usaremos el tipo long. Los tipos byte y short los usaremos cuando tengamos un mayor dominio del lenguaje.
6. ¿Cuántos tipos de la biblioteca estándar de Java hay? Cientos o miles. Es imposible conocerlos todos.
7. ¿Un array es un objeto? Los arrays los consideraremos objetos especiales, los únicos objetos en Java que carecen de métodos.
- OPERADORES
Los operadores aritméticos en java son:
+ Suma. Los operandos pueden ser enteros o reales
- Resta. Los operandos pueden ser enteros o reales
* Multiplicación. Los operandos pueden ser enteros o reales
/ División. Los operandos pueden ser enteros o reales. Si ambos son enteros el resultado es entero. En cualquier otro caso el resultado es real.
% Resto de la división. Los operandos pueden ser de tipo entero o real.
Ejemplo de operaciones aritméticas:
int a = 10, b = 3;
double v1 = 12.5, v2 = 2.0;
char c1='P', c2='T';
En aquellas operaciones en las que aparecen operandos de distinto tipo, java convierte los valores al tipo de dato de mayor precisión de todos los datos que intervienen. Esta conversión es de forma temporal, solamente para realizar la operación. Los tipos de datos originales permanecen igual después de la operación.
Los tipos short y byte se convierten automáticamente a int.
Por ejemplo:
int i = 7;
double f = 5.5;
char c = 'w';
OPERADORES JAVA RELACIONALES
Los operadores relacionales comparan dos operandos y dan como resultado de la comparación verdadero ó falso.
Los operadores relacionales en java son:
< Menor que
> Mayor que
<= Menor o igual
>= Mayor o igual
!= Distinto
== Igual
Los operandos tienen que ser de tipo primitivo.
Por ejemplo:
int a = 7, b = 9, c = 7;
OPERADORES JAVA LÓGICOS
Los operadores lógicos se utilizan con operandos de tipo boolean. Se utilizan para construir expresiones lógicas, cuyo resultado es de tipo true o false.
Los operadores lógicos en Java son:
&& AND. El resultado es verdadero si los dos operandos son verdaderos. El resultado es falso en caso contrario. Si el primer operando es falso no se evalúa el segundo, ya que el resultado será falso.
|| OR. El resultado es falso si los dos operandos son falsos. Si uno es verdadero el resultado es verdadero. Si el primer operando es verdadero no se evalúa el segundo.
! NOT. Se aplica sobre un solo operando. Cambia el valor del operando de verdadero a falso y viceversa.
Las definiciones de las operaciones OR, AND y NOT se recogen en unas tablas conocidas como tablas de verdad.
OPERADORES JAVA UNITARIOS.
Los operadores unitarios en java son:
Los operadores unitarios en java son:
– + signos negativo y positivo
++ -- incremento y decremento
~ complemento a 1
! NOT. Negación
Estos operadores afectan a un solo operando.
El operador ++ (operador incremento) incrementa en 1 el valor de la variable.
Ejemplo de operador incremento:
int i = 1;
i++; // Esta instrucción incrementa en 1 la variable i.
// Es lo mismo que hacer i = i + 1; i toma el valor 2
El operador –- (operador decremento) decrementa en 1 el valor de la variable.
2.Resumen
El lenguaje Java tiene su propia estructura, reglas de sintaxis y paradigma de programación. El paradigma de programación del lenguaje Java se basa en el concepto de programación orientada a objetos (OOP), que las funciones del lenguaje soportan.
El lenguaje Java es un derivado del lenguaje C, por lo que sus reglas de sintaxis se parecen mucho a C: por ejemplo, los bloques de códigos se modularizan en métodos y se delimitan con llaves (
{
y }
) y las variables se declaran antes de que se usen.
Estructuralmente, el lenguaje Java comienza con paquetes. Un paquete es el mecanismo de espacio de nombres del lenguaje Java. Dentro de los paquetes se encuentran las clases y dentro de las clases se encuentran métodos, variables, constantes, entre otros. En este tutorial, aprenderá acerca de las partes del lenguaje Java.
Tipos de Datos:
Los primeros lenguajes de programación no usaban objetos, solo variables. Una variable podríamos decir que es un espacio de la memoria del ordenador a la que asignamos un contenido que puede ser un valor numérico (sólo números, con su valor de cálculo) o de tipo carácter o cadena de caracteres (valor alfanumérico que constará sólo de texto o de texto mezclado con números).
3.Summary
The Java language has its own structure, syntax
rules, and programming paradigm. The programming paradigm of the Java language
is based on the concept of object oriented programming (OOP), which the
functions of the language support.
The Java language is a derivative of C language,
so its syntax rules closely resemble C: for example, code blocks are
modularized into methods and are delimited with braces ({y}) and variables are
declared before that they are used.
Structurally, the Java language begins with
packages. A package is the Java namespace mechanism. Within the packages are
the classes and within the classes are methods, variables, constants, among
others. In this tutorial, learn about the parts of the Java language.
Type of data:
The first programming languages did not use objects, only
variables. A variable can be said to be a space in the memory of the computer
to which we assign a content that can be a numerical value (only numbers, with
their calculation value) or character type or string of characters
(alphanumeric value consisting only of text or text mixed with numbers).
4.Recomendaciones
• Las instancias de las clases siguen la misma recomendación
que los métodos y atributos.
• Si una base de datos es demasiado grande, se debe hacer un
re diseño de base de datos centralizada, para que esta sea una base de datos
distribuida ya que se pueden almacenar los datos en localidades donde son utilizados con mayor frecuencia,
de tal manera que la mayor parte de las operaciones sean sólo locales lo cual
reduce el tráfico en la red.
• Los nombre de las clases deben empezar por mayúscula.
• Los atributos y méodos de las clases deben empezar por minúsculas y si están formadas por varias
5.Conclusiones
- Java es un lenguaje de programación de alto nivel muy dinámico que permite desarrollar aplicaciones web, Android,etc. Java se ha convertido en un lenguaje muy aplicable a Internet y programación de sistemas distribuidos en general. Pero su campo de aplicación no es exclusivamente Internet: una de las grandes ventajas de Java es que se procura que sea totalmente independiente del hardware: existe una "máquina virtual Java" para varios tipos de ordenadores.
- Java tiene ventajas significativas no sólo como un lenguaje comercial sino también como un lenguaje de enseñanza. Permite a los estudiantes aprender la programación orientada a objetos sin exponerlos a la complejidad de C ++. Proporciona el tipo de comprobación de errores en tiempo de compilación rigurosamente asociada con Pascal. Permite a los instructores para introducir a los estudiantes a la programación GUI, redes, hilos y otros conceptos importantes utilizados en el software de hoy en día.Java podría ser un lenguaje que la mayoría de los departamentos de ciencias de la computación podrían estar de acuerdo en usar como lenguaje introductorio. Si es así, todos nos beneficiamos de tener una sola lengua dominante en CS1.
6.Apreciación del Equipo
- Se podría decir que Java es uno de los lenguajes mas usados en la actualidad que tiene un grado de complejidad que va depender de la preparación del que lo este haciendo uso,por otro aspecto tiene una estructura fácil de entender.
- Tener en cuenta la existencia de fragmentación más complejas y eficientes, ya sea las técnicas de fragmentación vertical que se basa en grafos, que genera en un solo paso fragmentos verticales.
7.Glosario de Términos
- ENSAMBLADOR. Se refiere a un tipo de programa informático que se encarga de traducir un fichero fuente escrito en un lenguaje ensamblador, a un fichero objeto que contiene código máquina, ejecutable directamente por el microprocesador.
- PLATAFORMA JAVA. Es el nombre de un entorno o plataforma de computación originaria de Sun Microsystems, capaz de ejecutar aplicaciones desarrolladas usando el lenguaje de programación Java.
- CÓDIGO FUENTE. Es un conjunto de líneas de texto con los pasos que debe seguir la computadora para ejecutar dicho programa.
- COMPILACION. Es una técnica para mejorar el rendimiento de sistemas de programación que compilan a bytecode.
- BYTECODE. Un código intermedio más abstracto que el código máquina. Habitualmente es tratado como un archivo binario que contiene un programa ejecutable similar a un módulo objeto.
- CLIENTE-SERVIDOR. Es un modelo de aplicación distribuida en el que las tareas se reparten entre los proveedores de recursos o servicios, llamados servidores, y los demandantes, llamados clientes.
- ORACLE. Es una compañía de software que desarrolla bases de datos (Oracle Database) y sistemas de gestión de bases de datos.
8.Bibliografia