1 1 2 Datos Primitivas Y Objetos

38
Datos: Primitivas y objetos Datos: Primitivas y objetos (resumen) (resumen) Apoyo SSD3 Apoyo SSD3

Transcript of 1 1 2 Datos Primitivas Y Objetos

Datos: Primitivas y objetos Datos: Primitivas y objetos (resumen)(resumen)

Apoyo SSD3Apoyo SSD3

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 22

TiposTipos

Existen muchas formas de información.Existen muchas formas de información. Los datos que existen en los programas Los datos que existen en los programas

están categorizados.están categorizados. Esta categorización ayuda al programador Esta categorización ayuda al programador

a identificar el tipo de dato y usarlo a identificar el tipo de dato y usarlo apropiadamenteapropiadamente

Esta categorización se hace usando un Esta categorización se hace usando un sistema de tipossistema de tipos

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 33

Tipos de datos primitivosTipos de datos primitivos

Java ofrece tipos de datos básicos Java ofrece tipos de datos básicos llamados “primitivas”, y también permite llamados “primitivas”, y también permite los medios para definir nuevos tipos de los medios para definir nuevos tipos de datosdatos

Un nuevo tipo de datos puede definirse Un nuevo tipo de datos puede definirse mediante la definición de una clasemediante la definición de una clase

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 44

Clases y objetosClases y objetos

Una clase es análoga a un esquema para Una clase es análoga a un esquema para la construcción de un edificio, donde se la construcción de un edificio, donde se especifica el diseño pero no se tiene nada especifica el diseño pero no se tiene nada en concretoen concreto

Un objeto es una instancia de una clase; Un objeto es una instancia de una clase; pueden existir tantas instancias de una pueden existir tantas instancias de una clase como edificios basados en un clase como edificios basados en un mismo esquema de diseñomismo esquema de diseño

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 55

ObjetosObjetos

Los objetos (al igual que los edificios) Los objetos (al igual que los edificios) ocupan un espacio específico y están ocupan un espacio específico y están ubicados en un lugar particularubicados en un lugar particular

Los objetos consumen memoria y se Los objetos consumen memoria y se encuentran localizados en una dirección encuentran localizados en una dirección particular de memoria. particular de memoria.

Un apuntador a un objeto es llamado Un apuntador a un objeto es llamado referenciareferencia

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 66

Tipos de datos primitivosTipos de datos primitivos

Los tipos primitivos disponibles en Java Los tipos primitivos disponibles en Java pueden ser numéricos o booleanos. pueden ser numéricos o booleanos. Representan números y resultados Representan números y resultados lógicos respectivamentelógicos respectivamente

Los tipos numéricos pueden ser de tipo Los tipos numéricos pueden ser de tipo entero o de punto flotante.entero o de punto flotante.

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 77

Tipos de datos enterosTipos de datos enteros

bytebyte – representa a un entero que requiere de – representa a un entero que requiere de un byte de almacenamientoun byte de almacenamiento

shortshort – representa a un entero que requiere de – representa a un entero que requiere de dos bytes de almacenamientodos bytes de almacenamiento

intint – representa un número que requiere de – representa un número que requiere de cuatro bytes de almacenamientocuatro bytes de almacenamiento

longlong – representa un entero que requiere ocho – representa un entero que requiere ocho bytes de almacenamientobytes de almacenamiento

charchar – representa caracteres unicode y – representa caracteres unicode y requieren dos bytes de almacenamientorequieren dos bytes de almacenamiento

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 88

Un caso especialUn caso especial

El tipo “char” destaca en esta lista, pues El tipo “char” destaca en esta lista, pues aunque guarda enteros éstos se aunque guarda enteros éstos se interpretan como caracteres basándose interpretan como caracteres basándose en un mapa que asocia los enteros con en un mapa que asocia los enteros con los caractereslos caracteres

El mapa que usa Java es el El mapa que usa Java es el UnicodeUnicode

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 99

CuidadoCuidado

Aún cuando el tipo “char” internamente Aún cuando el tipo “char” internamente representa enteros, no debe usarse como representa enteros, no debe usarse como tal pues ocasionaría confusionestal pues ocasionaría confusiones

El tipo “short” está disponible con la El tipo “short” está disponible con la misma cantidad de memoria que “char” misma cantidad de memoria que “char” por lo que no es necesario usar un tipo por lo que no es necesario usar un tipo “char” en un contexto numérico“char” en un contexto numérico

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 1010

Tipos Java de punto flotanteTipos Java de punto flotante

floatfloat - representa un número de punto - representa un número de punto flotante que require exactamente cuatro flotante que require exactamente cuatro bytes de almacenamientobytes de almacenamiento

double double - representa un número de punto - representa un número de punto flotante que requiere exactamente de flotante que requiere exactamente de ocho bytes de almacenamientoocho bytes de almacenamiento

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 1111

DiferenciasDiferencias

Todos los tipos representan valores con Todos los tipos representan valores con un almacenamiento finito y por lo tanto un almacenamiento finito y por lo tanto solo pueden representar un número finito solo pueden representar un número finito de valores.de valores.

Un tipo entero representa a todos los Un tipo entero representa a todos los valores en su respectivo rangovalores en su respectivo rango

Esto no se cumple para los tipos de punto Esto no se cumple para los tipos de punto flotante flotante

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 1212

Consideraciones con los tipos de Consideraciones con los tipos de punto flotantepunto flotante

Solo un conjunto particular de valores de Solo un conjunto particular de valores de punto flotante pueden representarse punto flotante pueden representarse exactamente dentro de cualquier rangoexactamente dentro de cualquier rango

Esto tiene ciertos riesgos. Por ejemplo, en Esto tiene ciertos riesgos. Por ejemplo, en un programa la expresión((10.0 / 3.0) * un programa la expresión((10.0 / 3.0) * 3.0) puede NO ser igual a 10.0. 3.0) puede NO ser igual a 10.0.

Estos riesgos pueden causar que algunos Estos riesgos pueden causar que algunos programas se comporten inesperadamenteprogramas se comporten inesperadamente

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 1313

Tipos de datos (cont.)Tipos de datos (cont.)

La otra categoría de tipos primitivos es el La otra categoría de tipos primitivos es el booleano. booleano.

Recuerda que el tipo booleano representa Recuerda que el tipo booleano representa información lógicainformación lógica

• booleanboolean - representa un valor lógico de - representa un valor lógico de verdadero o falsoverdadero o falso

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 1414

Tipos especialesTipos especiales

Además de los tipos numéricos y Además de los tipos numéricos y booleanos hay otros dos tipos primitivos booleanos hay otros dos tipos primitivos especialesespeciales Uno es el tipo ”void” (vacio). Uno es el tipo ”void” (vacio).

• Este tipo especial se usa para representar la Este tipo especial se usa para representar la ausencia de dato. ausencia de dato.

• Se usa cuando se definen ciertos métodosSe usa cuando se definen ciertos métodos• Datos del tipo void no pueden existirDatos del tipo void no pueden existir

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 1515

Tipos especialesTipos especiales

El otro tipo especial es el tipo “null” (nulo), El otro tipo especial es el tipo “null” (nulo), el cual no tiene nombre. Más adelante se el cual no tiene nombre. Más adelante se explicará a detalle el uso de “null”explicará a detalle el uso de “null”

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 1616

Literales primitivasLiterales primitivas

Un programador explicitamente crea Un programador explicitamente crea almacenamiento para los datos primitivos almacenamiento para los datos primitivos ya sea usando literales o declaracionesya sea usando literales o declaraciones

Una literal es una entidad que se Una literal es una entidad que se representa a sí misma literalmente. Por representa a sí misma literalmente. Por ejemplo 5 es una literalejemplo 5 es una literal

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 1717

Categorías de literales de JavaCategorías de literales de Java

enteroentero Punto flotantePunto flotante BooleanBoolean caractercaracter stringstring nullnull

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 1818

Una literal entera se puede Una literal entera se puede expresar…expresar…

En tres diferentes bases: decimal, En tres diferentes bases: decimal, hexadecimal, y octal. hexadecimal, y octal. Decimal es el predeterminadoDecimal es el predeterminado

• Las comas no pueden usarse para agrupar dígitos. Las comas no pueden usarse para agrupar dígitos. Las literales enteras son no negativasLas literales enteras son no negativas

• Una expresión como -1 hacen uso de la literal 1 y Una expresión como -1 hacen uso de la literal 1 y el operador negación ("-"). el operador negación ("-").

• El ("-") no es parte de la literalEl ("-") no es parte de la literal

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 1919

Una literal entera se puede Una literal entera se puede expresar…expresar…

Como número hexadecimal los dígitos son Como número hexadecimal los dígitos son precedidos por 0x o 0X (cero y x) por ejemplo precedidos por 0x o 0X (cero y x) por ejemplo 0x10 que es 16 en decimal0x10 que es 16 en decimal• Enteros hexadecimales usan las letras A hasta F Enteros hexadecimales usan las letras A hasta F

para representar dígitos cuyo valor va del 10 al 15 para representar dígitos cuyo valor va del 10 al 15 respectivamenterespectivamente

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 2020

Una literal entera se puede Una literal entera se puede expresar…expresar…

Como número octal los dígitos se preceden Como número octal los dígitos se preceden con cero, como en 017, que es 15 en con cero, como en 017, que es 15 en decimal. decimal. • Literales octales usan solo dígitos de 0 a 7Literales octales usan solo dígitos de 0 a 7

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 2121

Declaraciones primitivasDeclaraciones primitivas

Además de las literales, los datos Además de las literales, los datos primitivas pueden introducirse mediante primitivas pueden introducirse mediante decaracionesdecaraciones

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 2222

Declaraciones primitivasDeclaraciones primitivas

Una declaració para datos primitivos Una declaració para datos primitivos consiste del nombre del tipo, un consiste del nombre del tipo, un identficador y opcionalmente se puede identficador y opcionalmente se puede inicializar con =, y un punto y coma (";") inicializar con =, y un punto y coma (";") como se muestra a continuacióncomo se muestra a continuación

int  valueX;  // sin inicializadorint  valueX;  // sin inicializador

double valueY = 7.1;  // con inicializadordouble valueY = 7.1;  // con inicializador  

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 2323

ConstantesConstantes

Se puede hacer uso de la palabra Se puede hacer uso de la palabra reservada “final”, para indicar que una reservada “final”, para indicar que una declaración es de solo lecturadeclaración es de solo lectura

Estos son referidos como Estos son referidos como datos finalesdatos finales o o constantesconstantes

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 2424

Ejemplos de constantesEjemplos de constantes

final int  MAX = 100;final int  MAX = 100;

final double  PI = 3.14159;final double  PI = 3.14159;

final char  DEFAULT_CHAR = 'z';final char  DEFAULT_CHAR = 'z';

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 2525

Referencias y variables de Referencias y variables de referenciareferencia

En Java los objetos se manipulan En Java los objetos se manipulan mediante referenciasmediante referencias

Las referencias son nombres que Java dá Las referencias son nombres que Java dá a los objetosa los objetos

Los objetos son manipuladosLos objetos son manipulados usando usando identificadores conocidos como identificadores conocidos como referenciasreferencias

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 2626

Referencias a variablesReferencias a variables

Se declaran referencias a variables de la Se declaran referencias a variables de la misma manera que se declaran primitivas. misma manera que se declaran primitivas. Considera o siguienteConsidera o siguiente

String  line;String  line; Se declara una referencia a una variable Se declara una referencia a una variable

tipo String.tipo String.

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 2727

ReferenciasReferencias

Las referencias deben tener un valor Las referencias deben tener un valor antes de poder usarseantes de poder usarse

En el ejemplo anterior se le debe asignar En el ejemplo anterior se le debe asignar una cadena de caracteres o un nulo antes una cadena de caracteres o un nulo antes de poder usarla o la compilación fallaráde poder usarla o la compilación fallará

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 2828

ReferenciasReferencias

En cualquier caso el programador puede En cualquier caso el programador puede explícitamente asignarle valor nuloexplícitamente asignarle valor nuloString  line = null;String  line = null;  

Null es el nombre que Java dá a los Null es el nombre que Java dá a los objetos que no existen. Es como si dijera objetos que no existen. Es como si dijera que la referencia se refiere a nadaque la referencia se refiere a nada

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 2929

Creación de objetosCreación de objetos

Para crear un objeto se debe usar el Para crear un objeto se debe usar el operador “new” junto con otros operador “new” junto con otros constructores de objetosconstructores de objetos

A continuación se muestra un ejemploA continuación se muestra un ejemploString  line = new  String("Hello");String  line = new  String("Hello");

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 3030

Acceso a métodosAcceso a métodos

Para acceder variables de instancias y Para acceder variables de instancias y métodos en un objeto, use el operador métodos en un objeto, use el operador punto (".").punto (".").

El punto es un operador infijo que requiere El punto es un operador infijo que requiere que el objeto sea el operador izquierdo y que el objeto sea el operador izquierdo y el campo o método el operador derecho. el campo o método el operador derecho.

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 3131

Acceso a métodosAcceso a métodos

Por ejemplo, acceder al método “length”, se Por ejemplo, acceder al método “length”, se usa lo siguiente.usa lo siguiente.String  line = new  String("Hello there");String  line = new  String("Hello there");

int  lengthLine = line.length();int  lengthLine = line.length();

// longitud es 11// longitud es 11

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 3232

Comparaciones y equivalenciasComparaciones y equivalencias

Considere la siguientes declaraciones de Considere la siguientes declaraciones de variable escalar.variable escalar.int  valueX = 5;int  valueX = 5;

int  valueY = 5;int  valueY = 5;  

La siguiente expresión será evaluada La siguiente expresión será evaluada verdadera.verdadera.valueX == valueY valueX == valueY 

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 3333

Comparaciones y equivalenciasComparaciones y equivalencias

Ahora considere las siguientes Ahora considere las siguientes declaraciones de variables de referencadeclaraciones de variables de referenca

String  lineOne = new  String("Hi");String  lineOne = new  String("Hi");

String  lineTwo = new  String("Hi");String  lineTwo = new  String("Hi");  

La siguiente expresión resultará falsaLa siguiente expresión resultará falsalineOne == lineTwolineOne == lineTwo

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 3434

Comparaciones y equivalenciasComparaciones y equivalencias

La función del operador equivalencia ("==") es La función del operador equivalencia ("==") es comparar lo que está comparar lo que está directamentedirectamente representado representado por sus operandospor sus operandos

Cuando se compara lineOne y lineTwo, es la Cuando se compara lineOne y lineTwo, es la referencia-objeto indicada por las entidades referencia-objeto indicada por las entidades comparadas.comparadas.

Ya que lineOne y lineTwo son objetos Ya que lineOne y lineTwo son objetos separados sería imposible para ellos compartir separados sería imposible para ellos compartir el mismo objeto referenciael mismo objeto referencia

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 3535

Comparaciones y equivalenciasComparaciones y equivalencias

Ahora veamos el siguiente ejemploAhora veamos el siguiente ejemploString  lineOne = new  String("Hola");String  lineOne = new  String("Hola");

String  lineTwo = new  String("Hello");String  lineTwo = new  String("Hello");

lineOne = lineTwo;lineOne = lineTwo;

¿Cuál será el resultado de la siguiente ¿Cuál será el resultado de la siguiente expresión?expresión?lineOne == lineTwo  lineOne == lineTwo  

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 3636

Comparaciones y equivalenciasComparaciones y equivalencias

El valor será verdadero.El valor será verdadero. La función del operador asignación ("=") es La función del operador asignación ("=") es

asignar basado en lo que esta representado por asignar basado en lo que esta representado por sus operandossus operandos

Por lo que la asignación causa que el objeto Por lo que la asignación causa que el objeto referenciado en lineOne sea copiado en lineTworeferenciado en lineOne sea copiado en lineTwo

Así que ahora lineOne y lineTwo ahora tienen el Así que ahora lineOne y lineTwo ahora tienen el mismo objeto referencia y por lo tanto son mismo objeto referencia y por lo tanto son igualesiguales

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 3737

Algo para tener en cuentaAlgo para tener en cuenta

¿Qué sucedió con el objeto que antes ¿Qué sucedió con el objeto que antes estaba representado por lineTwo? Aun estaba representado por lineTwo? Aun existe pero ahora es imposible usarlo existe pero ahora es imposible usarlo pues no se puede acceder a el. pues no se puede acceder a el.

Cosas como esta causan lo que se llama Cosas como esta causan lo que se llama “goteos de memoria” y hace que los “goteos de memoria” y hace que los programas consuman memoria que programas consuman memoria que después no pueden usarse.después no pueden usarse.

Mtl. Lourdes CahuichMtl. Lourdes Cahuich 3838

Recolector de basuraRecolector de basura

Para evitar esto existen programas Para evitar esto existen programas llamados “recolectores de basura”, para llamados “recolectores de basura”, para buscar y recuperar esta memoria.buscar y recuperar esta memoria.

Java hace uso automático del recolector Java hace uso automático del recolector de basura.de basura.