Documentos de Académico
Documentos de Profesional
Documentos de Cultura
OBJETOS.
CLASES
HERENCIAS
Estos objetos interactúan unos con otros, en contraposición a la visión tradicional
en la cual un programa es una colección
de subrutinas (funciones o procedimientos), o simplemente una lista
de instrucciones para el computador. Cada objeto es capaz de recibir mensajes,
procesar datos y enviar mensajes a otros objetos de manera similar a un servicio.
Clases En programación orientada a objetos, la herencia es, después de la
agregación o composición, el mecanismo más utilizado para alcanzar algunos de
los objetivos más preciados en el desarrollo de software como lo son la
reutilización y la extensibilidad. A través de ella los diseñadores pueden crear
nuevas clases partiendo de una clase o de una jerarquía de clases preexistente
(ya comprobadas y verificadas) evitando con ello el rediseño, la modificación y
verificación de la parte ya implementada. La herencia facilita la creación de objetos
a partir de otros ya existentes e implica que una subclase obtiene todo el
comportamiento (métodos) y eventualmente los atributos (variables) de su
superclase.
Es la relación entre una clase general y otra clase más específica. Por ejemplo: Si
declaramos una clase párrafo derivada de una clase texto, todos los métodos y
variables asociadas con la clase texto, son automáticamente heredados por la
subclase párrafo.
La herencia es uno de los mecanismos de los lenguajes de programación
orientada a objetos basados en clases, por medio del cual una clase se deriva de
otra de manera que extiende su funcionalidad. La clase de la que se hereda se
suele denominar clase base, clase padre, superclase, clase ancestro (el
vocabulario que se utiliza suele depender en gran medida del lenguaje de
programación).
MENSAJE
En ciencias de la computación, el paso de mensajes es un paradigma
de programación ampliamente usado en el software moderno. Sus aplicaciones
cubren un amplio campo, y puede usarse desde para garantizar que los diferentes
objetos que constituyen un programa informático puedan trabajar de forma
coherente entre ellos hasta para permitir que una tarea pueda ejecutarse de forma
sincronizada entre varios ordenadores. Es uno de los conceptos clave en modelos
de programación concurrente, programación distribuida y programación orientada
a objetos.
De forma abstracta, se llama mensaje a una porción de información que un
proceso emisor envía a un destinatario (El cual puede ser otro proceso, un actor o
un objeto). El modelo de paso de mensajes es el que define los métodos y
funciones para poder llevar a cabo el envío de un mensaje de un proceso emisor a
un destinatario. Supone un enfoque opuesto al paradigma tradicional en el cual los
procesos, funciones y subrutinas sólo podían ser llamados directamente a través
de su nombre.
POLIMORFISMO
En programación orientada a objetos, el polimorfismo se refiere a la propiedad por
la que es posible enviar mensajes sintácticamente iguales
a objetos de tiposdistintos. El único requisito que deben cumplir los objetos que se
utilizan de manera polimórfica es saber responder al mensaje que se les envía.
La apariencia del código puede ser muy diferente dependiendo del lenguaje que
se utilice, más allá de las obvias diferencias sintácticas.
Por ejemplo, en un lenguaje de programación que cuenta con un sistema de
tipos dinámico (en los que las variables pueden contener datos de cualquier tipo u
objetos de cualquier clase) como Smalltalk se requiere que los objetos que se
utilizan de modo polimórfico sean parte de una jerarquía de clases.
PACKAGE
java.lang Contiene las clases e interfaces más empleadas en la mayoría de
los programas de Java. Es importado automáticamente por todos los
programa Java: no se necesita sentencia import para utilizar lo declarado
en este paquete.
java.io Contiene clases que permiten las operaciones de entrada y salida de
datos de un programa.
java.util Contiene clases e interfaces de utilidades: operaciones con la fecha
y la hora, generación de números aleatorios...
java.applet Contiene todas las clases e interfaces necesarias para la
construcción de applets de Java
java.net Contiene clases que permite a un programa comunicarse a traves
de redes (Internet o intranet)
java.text Contiene clases e interfaces que permiten operaciones de
números, fechas, caracteres y cadenas.
java.awt Es el paquete Abstract Windowing Toolkit. Contiene muchas
clases e interfaces necesarias para trabajar con la interfaz de usuario
gráfica clásica.
java.beans Contiene clases para facilitar a los programadores la generación
de componentes de software reutilizables.
CONSTRUCTORES
CLASES ABSTRACTAS
Las clases abstractas son aquellas que por sí mismas no se pueden identificar con
algo 'concreto' (no existen como tal en el mundo real), pero sí poseen
determinadas características que son comunes en otras clases que pueden ser
creadas a partir de ellas.
Para que lo comprendas mejor, un ejemplo de clase abstracta sería una
llamada Vehículo: todos ellos realizan acciones similares (arrancar, acelerar,
frenar, etc.), pero sin embargo existen muchos tipos de vehículos diferentes y que
se comportan de forma totalmente distinta (el proceso de arrancarlos no se realiza
siguiendo los mismos pasos, unos tienen que despegar y vuelan como los
aviones, otros se sumergen para desplazarse por debajo del agua como los
submarinos, cada uno de ellos necesita ser frenado de distinto modo...).
Es decir, en el mundo real no existe un objeto 'vehículo' como tal sino que hay
diferentes tipos de vehículo, pero aunque poseen características comunes y
realizan las mismas acciones lo hacen de forma muy diferente (pudiendo además
realizar otras específicas cada uno de ellos).
Así pues, ya que una clase abstracta no representa algo concreto tampoco puede
ser instanciada (no se puede crear un Objeto a partir de ella) pero sí es posible
crear otras clases en base a su definición.
METODOS
En la programación, un método es una subrutina cuyo código es definido en
una clase y puede pertenecer tanto a una clase, como es el caso de los métodos
de clase o estáticos, como a un objeto, como es el caso de los métodos de
instancia. Análogamente a los procedimientos en lenguajes imperativos, un
método consiste generalmente de una serie de sentencias para llevar a cabo una
acción, un juego de parámetros de entrada que regularán dicha acción o,
posiblemente, un valor de salida (o valor de retorno) de algún tipo.
La diferencia entre un procedimiento (generalmente llamado función si devuelve
un valor) y un método es que este último, al estar asociado con un objeto o clase
en particular, puede acceder y modificar los datos privados del objeto
correspondiente de forma tal que sea consistente con el comportamiento deseado
para el mismo. Así, es recomendable entender a un método no como una
secuencia de instrucciones sino como la forma en que el objeto es útil (el método
para hacer su trabajo). Por lo tanto, podemos considerar al método como el pedido
a un objeto para que realice una tarea determinada o como la vía para enviar un
mensaje al objeto y que éste reaccione acorde a dicho mensaje.
flotante de
precisión simple
Norma IEEE
754
double Numérico 8 ± 1.8x10- 0.0 Double
en Coma 308 a ± 1.8x10308
flotante de
precisión doble
Norma IEEE
754
char Carácter 2 \u0000 a \uFFFF \u0000 Characte
Unicode r
boolea Dato lógico - true ó false false Boolean
n
void - - - - Void
OPERADORES
Un operador lleva a cabo operaciones sobre uno (operador unario), dos
(operador binario) o tres (operador ternario) datos u operandos de tipo primitvo
devolviendo un valor determinado también de un tipo primitivo. El tipo de valor
devuelto tras la evaluación depende del operador y del tipo de los operandos. Por
ejemplo, los operadores aritméticos trabajan con operandos numéricos, llevan a
cabo operaciones aritméticas básicas y devuelven el valor numérico
correspondiente. Los operadores se pueden clasificar en distintos grupos según se
muestra en los siguientes apartados.
int i,j;
double x;
char c;
boolean b;
String s;
i = 15;
j = i;
x = 12.345;
c = 'A';
b = false;
s = "Hola";
$>javac OpAsignacion.java
$>java OpAsignacion
i = 15
j = 15
x = 12.345
c = A
b = false
s = Hola
El resultado es de tipo long si, al menos, uno de los operandos es de tipo long y
ninguno es real (float o double).
El resultado es de tipo int si ninguno de los operandos es de tipo long y tampoco
es real (float o double).
El resultado es de tipo double si, al menos, uno de los operandos es de
tipo double.
El resultado es de tipo float si, al menos, uno de los operandos es de tipo float y
ninguno es double.
El formato empleado para la representación de datos enteros es el
complemento a dos. En la aritmética entera no se producen nunca
desbordamientos (overflow) aunque el resultado sobrepase el intervalo de
representación (int o long).
La división entera se trunca hacia 0. La división o el resto de dividir por cero es
una operación válida que genera una excepción ArithmeticException que puede
dar lugar a un error de ejecución y la consiguiente interrupción de la ejecución
del programa.
La aritmética real (en coma flotante) puede desbordar al infinito (demasiado
grande, overflow) o hacia cero (demasiado pequeño, underflow).
El resultado de una expresión inválida, por ejemplo, dividir infinito por infinito, no
genera una excepción ni un error de ejecución: es un valor NaN (Not a Number).
Todos los valores numéricos que se comparan con NaN dan como
resultado false excepto el operador != que devuelve true. Esto ocurre incluso si
ambos valores son NaN.
4.6 OPERADORES LÓGICOS O BOOLEANOS
Realizan operaciones sobre datos booleanos y tienen como resultado un valor
booleano. En la siguiente tabla se resumen los diferentes operadores de esta
categoría.
La sentencia de asignación:
if (expresionLogica)
valor = expresion_1;
else
valor = expresion_2
4.10 SEPARADORES
Existen algunos caracteres que tienen un significado especial en el lenguaje Java.
En la siguiente tabla se resumen los diferentes separadores que pueden
encontrarse en el código fuente de un programa.
Figura 4.10 Separadores en Java
4.11 EXPRESIONES
Una expresión es una combinación de operadores y operandos que se evalúa
generándose un único resultado de un tipo determinado.
Descripción Operadores
suma y resta +-
equivalencia == !=
operador XOR ^
operador OR |
OR booleano ||
condicional ?:
operadores de asignación = += -= *= /= %= &= ^= |= <<= >>= >>>=
int j = 1 + 3 * 4; // resultado j = 13
int j = 1 + 3 – 4; resultado j= 0;
Utilización de paréntesis
Se utilizan para aislar una porción de la expresión de forma que el cálculo
se ejecute de forma independiente. Puede forzar a una expresión a ignorar
las reglas de precedencia.
int j = 1 + 3 * 4; // resultado j = 13
int h = (1 + 3) * 4 // resultado h = 16
int k = 1 + (h = 3);
RECOLECTOR DE BASURA
En los lenguajes orientados a objetos: se reserva memoria cada vez que el programador
crea un objeto, pero éste no tiene que saber cuánta memoria se reserva ni cómo se hace
esto.
En los lenguajes declarativos: cada vez que se construye una expresión se reserva
memoria (de una manera inteligente), pero el programador no es consciente de ello.
Cuando se compila el programa, automáticamente se incluye en éste
una subrutina correspondiente al recolector de basura. Esta subrutina también es invocada
periódicamente sin la intervención del programador.
El recolector de basura es informado de todas las reservas de memoria que se producen en el
programa. Además, el compilador colabora para que sea posible llevar una cuenta de todas
las referencias que existen a un determinado espacio de memoria reservado.
Cuando se invoca el recolector de basura, recorre la lista de espacios reservados observando
el contador de referencias de cada espacio. Si un contador ha llegado a cero significa que ese
espacio de memoria ya no se usa y, por tanto, puede ser liberado.
Naturalmente, este proceso consume un cierto tiempo en el que no se hace nada
verdaderamente útil para el propósito del programa. Por tanto, no puede ser invocado con
demasiada frecuencia.
En consecuencia, el único inconveniente a este mecanismo es determinar cuándo se tiene
que ejecutar el recolector de basura. Existen varios algoritmos para hacerlo, pero el más
eficiente es el primero de ellos:
FINALIZADORES EN JAVA
Los finalizadores son métodos que vienen a completar la labor del garbage
collector. Un finalizador es un método que se llama automáticamente cuando se
va a destruir un objeto (antes de que la memoria sea liberada de modo automático
por el sistema).
Se utilizan para ciertas operaciones de terminación distintas de liberar
memoria (por ejemplo: cerrar ficheros, cerrar conexiones de red, liberar memoria
reservada por funciones nativas, etc.).
Hay que tener en cuenta que el garbage collector sólo libera la memoria reservada
con new. Si por ejemplo se ha reservado memoria con funciones nativas en C (por
ejemplo, utilizando la función malloc()), esta memoria hay que liberarla
explícitamente utilizando el método finalize().
Un finalizador es un método de objeto (no static), sin valor de retorno (void), sin
argumentos y que siempre se llama finalize(). Los finalizadores se llaman de modo
automático siempre que hayan sido definidos por el programador de la clase. Para
realizar su tarea correctamente, un finalizador debería terminar siempre llamando
al finalizador de su super-clase.
Tampoco se puede saber el momento preciso en que los finalizadores van a ser
llamados. En muchas ocasiones será conveniente que el programador realice
esas operaciones de finalización de modo explícito mediante otros métodos que él
mismo llame.