viernes, 15 de abril de 2016

20 (Clase) POO Java by Cus: Arrays estáticos Enmascaramiento o conve...



Arrays estáticos (Arreglo):

Un arreglo es un conjunto de datos o una estructura de datos homogéneos que se encuentran ubicados en forma consecutiva en la memoria RAM (sirve para almacenar datos en forma temporal).


VENTAJAS
INCONVENIENTES
- Acceso y operación con elementos más eficiente.
- Permiten almacenar tanto objetos como tipos primitivos directamente
- Rigidez. No se pueden redimensionar (aunque sí copiar a otros arrays estáticos de mayor tamaño).
Fuente: (enlace)

Definición

Un arreglo puede definirse como un grupo o una colección finita, homogénea y ordenada de elementos. Los arreglos pueden ser de los siguientes tipos:
  • De una dimensión.
  • De dos dimensiones.
  • De tres o más dimensiones.

Tipos de arreglos

  • Arreglos unidimensionales.
  • Arreglos multidimensionales.
  • Arreglo con múltiple subíndices.

Arreglos unidimensionales

Es un tipo de datos estructurado que está formado de una colección finita y ordenada de datos del mismo tipo. Es la estructura natural para modelar listas de elementos iguales. Están formados por un conjunto de elementos de un mismo tipo de datos que se almacenan bajo un mismo nombre, y se diferencian por la posición que tiene cada elemento dentro del arreglo de datos. Al declarar un arreglo, se debe inicializar sus elementos antes de utilizarlos. Para declarar un arreglo tiene que indicar su tipo, un nombre único y la cantidad de elementos que va a contener.

Arreglos multidimensionales

Es un tipo de dato estructurado, que está compuesto por dimensiones. Para hacer referencia a cada componente del arreglo es necesario utilizar n índices, uno para cada dimensión. El término dimensión representa el número de índices utilizados para referirse a un elemento particular en el arreglo. Los arreglos de más de una dimensión se llaman arreglos multidimensionales.

Arreglos con múltiple subíndices

Es la representación de tablas de valores, consistiendo de información arreglada en renglones y columnas. Para identificar un elemento particular de la tabla, se debe especificar dos subíndices; el primero identifica el renglón del elemento y el segundo identifica la columna del elemento. A los arreglos que requieren dos subíndices para identificar un elemento en particular se conocen como arreglo de doble subíndice. Note que los arreglos de múltiples subíndices pueden tener más de dos subíndices.

Operaciones con arreglos

Las operaciones en arreglos pueden clasificarse de la siguiente forma:
  • Lectura: este proceso consiste en leer un dato de un arreglo y asignar un valor a cada uno de sus componentes
  • Escritura: Consiste en asignarle un valor a cada elemento del arreglo.
  • Asignación: No es posible asignar directamente un valor a todo el arreglo
  • Actualización: Dentro de esta operación se encuentran las operaciones de eliminar, insertar y modificar datos. Para realizar este tipo de operaciones se debe tomar en cuenta si el arreglo está o no ordenado.
  • Ordenación.
  • Búsqueda.
  • Insertar.
  • Borrar.
  • Modificar.
“La mayoría de las operaciones anteriores cobra sentido con los arreglos dinámicos”

La sintaxis a emplear con arrays:

private TipoPrimitivoUObjeto [ ] [ ] nombreDelArray;   //Declaración: reserva espacio de memoria
nombreDelArray = new TipoPrimitivoUObjeto [numero1] [numero2]; //Creación del array


private int [ ] miArrayDeNumeros = { 2, -3, 4, 7, -10 }; //Sintaxis declarar y crear un array en una línea


Enmascaramiento o conversión

Tipado:

https://es.wikipedia.org/wiki/Tipado_fuerte
Un lenguaje de programación es fuertemente tipado si no se permiten violaciones de los tipos de datos, es decir, dado el valor de una variable de un tipo concreto, no se puede usar como si fuera de otro tipo distinto a menos que se haga una conversión. No hay una única definición de este término. Un lenguaje que se dice que no está tipado se refiere a que no está fuertemente tipado.
“Java se puede considerar como un lenguaje de Tipado intermedio o suave, debido a que las operaciones con número Reales (float, double) se puede realizará directamente con número enteros (integer, long) sin presentar problemas de compilación, sin embargo no se puede asegurar que no exista perdida de informacion en cada operacion”


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" (también lo llaman casting) y es algo que se debe manejar con cuidado, pues un mal uso de la conversión de tipos frecuentemente da lugar a errores.
Una forma de realizar conversiones consiste en colocar el tipo destino entre paréntesis, a la izquierda del valor que queremos convertir de la forma siguiente: Tipo VariableNueva = (NuevoTipo) VariableAntigua;


Por ejemplo:

int miNumero = (int) ObjetoInteger;   char c = (char)System.in.read();
“Basicamente se le da un formato a la variable antes de ser guardado en la variable nueva”

Las conversiones permitidas son las siguientes:

TIPO ORIGEN
TIPO DESTINO
byte
double, float, long, int, char, short
short
double, float, long, int
char
double, float, long, int
int
double, float, long
long
double, float
float
Double


“También es aplicable a objetos, no está limitado a variables primitivas”

Length

La sintaxis nombreDelArray.length devuelve un entero (int) con el número de elementos que forman el array.

valueOf

El método valueOf es un método sobrecargado aplicable a numerosas clases de Java y que permite realizar conversiones de tipos. Ejemplos de uso.
EXPRESIÓN
INTERPRETACIÓN aprenderaprogramar.com
miInteger = miInteger.valueOf (i)
Con i entero primitivo que se transforma en Integer
miInteger = miInteger.valueOf (miString)
El valor del String se transforma en Integer
miString = miString.valueOf (miBooleano)
El booleano se transforma en String “true” o “false”
miString = miString.valueOf (miChar)
El carácter (char) se transforma en String
miString = miString.valueOf (miDouble)
El double se transforma en String. Igualmente aplicable a float, int, long.


“El principal uso del valueof es llevar valores numérico a Texto, por ejemplo 225 --> “225” donde las comilla significan que es una cadena de caracteres”

Static

static: los atributos miembros de una clase pueden ser atributos de clase o atributos de instancia; se dice que son atributos de clase si se usa la palabra clave static: en ese caso la variable es única para todas las instancias (objetos) de la clase (ocupa un único lugar en memoria). A veces a las variables de clase se les llama variables estáticas. Si no se usa static, el sistema crea un lugar nuevo para esa variable con cada instancia (la variable es diferente para cada objeto). En el caso de una constante no tiene sentido crear un nuevo lugar de memoria por cada objeto de una clase que se cree. Por ello es adecuado el uso de la palabra clave static. Cuando usamos “static final” se dice que creamos una constante de clase, un atributo común a todos los objetos de esa clase.

Final

final: en este contexto indica que una variable es de tipo constante: no admitirá cambios después de su declaración y asignación de valor. final determina que un atributo no puede ser sobreescrito o redefinido. O sea: no funcionará como una variable “tradicional”, sino como una constante. Toda constante declarada con final ha de ser inicializada en el mismo momento de declararla. final también se usa como palabra clave en otro contexto: una clase final (final) es aquella que no puede tener clases que la hereden.

ToString

... El método toString(). El propósito de este método es asociar a todo objeto un texto representativo. Llamar a toString() sobre un objeto Integer producirá un resultado ... devuelve el entero asociado, solo que en forma de String. ¿Qué ocurre cuando se invoca el método sobre un objeto definido por el programador? ...  System.out.println (“Obtenemos “ + profesor1.toString() );. En este caso, el resultado que obtenido es:
“Obtenemos Profesor@1de9ac4”.
El método efectivamente ha devuelto un String, ¿pero qué ha devuelto? El resultado obtenido consta del nombre de la clase seguido de una cadena “extraña” que representa la dirección de memoria en que se encuentra el objeto...
file:*/docs/api/java/lang/Object.html#toString--
public String toString()
Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.
The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:
getClass().getName() + '@' + Integer.toHexString(hashCode())
Returns:
a string representation of the object.

Equals

file:*/docs/api/java/lang/Object.html#equals-java.lang.Object-
(de la super clase universal Object)
public boolean equals(Object obj)
Indicates whether some other object is "equal to" this one.
The equals method implements an equivalence relation on non-null object references:
  • It is reflexive: for any non-null reference value x, x.equals(x) should return true.
  • It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.
  • It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should returntrue.
  • It is consistent: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modified.
  • For any non-null reference value x, x.equals(null) should return false.
The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any non-null reference values x and y, this method returns true if and only if x and y refer to the same object (x == y has the value true).
Note that it is generally necessary to override the hashCode method whenever this method is overridden, so as to maintain the general contract for the hashCodemethod, which states that equal objects must have equal hash codes.
Parameters:
obj - the reference object with which to compare.
Returns:
true if this object is the same as the obj argument; false otherwise.
See Also:
hashCode(), HashMap


“Su versión original o nativa normalmente se utiliza solo para comparar objetos de tipo String o de tipo Date, si se desea saber si dos objetos creado por el programador son iguales, el método equals de esos objetos debe ser sobre escrito para que realice una comparación de manera correcta tomando en cuenta los parametros que para el programador definen la igualdad entre los objetos”.

InstanceOf

El operador instanceof permite comprobar si un objeto es de una clase concreta.

Fill

Description:

The java.util.Arrays.fill(int[] a, int val) method assigns the specified int value to each element of the specified array of ints.

Declaration

Following is the declaration for java.util.Arrays.fill() method
public static void fill(int[] a, int val)

Parameters

  • a -- This is the array to be filled.
  • val -- This is the value to be stored in all elements of the array.

Return Value

This method does not return any value.

CopyOF

Description

The java.util.Arrays.copyOf(int[] original,int newLength) method copies the specified array, truncating or padding with zeros (if necessary) so the copy has the specified length. For all indices that are valid in both the original array and the copy, the two arrays will contain identical values. For any indices that are valid in the copy but not the original, the copy will contain 0.Such indices will exist if and only if the specified length is greater than that of the original array.

Declaration

Following is the declaration for java.util.Arrays.copyOf() method
public static int[] copyOf(int[] original,int newLength)

Parameters

  • original -- This is the array to be copied.
  • newLength -- This is the length of the copy to be returned.

Return Value

This method returns a copy of the original array, truncated or padded with zeros to obtain the specified length.
Exception
  • NegativeArraySizeException -- If newLength is negative.
  • NullPointerException -- If original is null.

For Each

EL FOR EXTENDIDO O BUCLES FOR EACH EN JAVA
... Esta forma de uso del for, que ya existía en otros lenguajes, facilita el recorrido de objetos existentes en una colección sin necesidad de definir el número de elementos a recorrer. La sintaxis que se emplea es:
for ( TipoARecorrer nombreVariableTemporal : nombreDeLaColección ) {
                                           Instrucciones
   }



En ningún momento se usa la palabra clave each... La interpretación de la sintaxis del for extendido es: “Para cada elemento del tipo TipoARecorrer que se encuentre dentro de la colección nombreDeLaColección ejecuta las instrucciones que se indican”. La variable local-temporal del ciclo almacena en cada paso el objeto que se visita y sólo existe durante la ejecución del ciclo y desaparece después. Debe ser del mismo tipo que los elementos a recorrer.