Fundamentos de Programación FPRG Tema 4. Tipos

Anuncio
Fundamentos de Programación
FPRG
Tema 4. Tipos Básicos
y Expresiones Simples
Miguel A. de Miguel
[email protected]
Temario
n 
Tema 3. Tipos básicos
n 
Datos
n 
n 
n 
n 
Tipos, valores y variables
Enteros: int, long, short y byte
Reales: double y float
Expresiones aritméticas
n 
n 
n 
Lógicos: boolean
Operaciones lógicas
n 
n 
n 
n 
n 
n 
Unicode
Tipos simples
Conversión de tipos
n 
n 
Operadores relacionales
Caracteres: char, String
n 
n 
Precedencia y paréntesis
promoción
Conversiones implícitas
Conversiones explícitas
Campos
Arrays
Fundamentos de Programación
2
Tipos de datos primitivos
n 
n 
n 
Las clases nos permiten crear nuevos
tipos de datos
Podemos crear nuevas clases a partir de
otras clases (composición-agregación)
Pero … Cuales son los datos simples a
partir de los que creamos las clases mas
sencillas?
Los tipos primitivos de datos son tipos
básicos con operaciones asociadas
n  Datos con tipo primitivo no son objetos
n 
Fundamentos de Programación
3
Tipos, valores y variables
n 
n 
n 
n 
Cada tipo primitivo tiene asociado un rango de valores:
enteros, reales, {true, false}, caracteres
Y un conjunto de operadores (+,-,&,|, …)
Java permite representar valores mediante literales (1,
‘a’, 2.0, true), variables o expresiones
Las variables son una forma de almacenar información
n 
n 
n 
n 
Tienen asociado un tipo (primitivo o de clase)
Variables de campo, variables locales y parámetros
Podemos cambiar su valor tantas veces queramos
Solo podemos acceder (modificar o consultar) a ellas en su
ámbito
n 
n 
n 
Campo: dentro de la clase (métodos e inicialización de campos)
Variables locales: método o bloque en donde se declaran
Parámetros: método
Fundamentos de Programación
4
Enteros
n 
n 
Hay cuatro tipos primitivos para representar enteros:
int, long, short y byte
Los literales son los mismos para todos ellos:
… -3, -2, -1, 0, 1, 2, 3 …
n 
Terminando en L decimos explícitamente que es long
Entero
Bits
int
32
short
long
byte
Mínimo
Máximo
Integer.MIN_VALUE
Integer.MAX_VALUE
-231 (- 2147483658)
231-1 (2147483657)
16
Short.MIN_VALUE
Short.MAX_VALUE
64
Long.MIN_VALUE
Long.MAX_VALUE
8
-215 (-32768)
-263 (-9223372036854775808)
Byte.MIN_VALUE
-27 (-128)
Fundamentos de Programación
215-1 (32767)
263-1
(9223372036854775807)
Byte.MAX_VALUE
27-1 (127)
5
Enteros
n 
n 
Los literales pueden ser en decimal, octal (0 a la izquierda 065),
y hexadecimal (0x a la izquierda 0xBABA14)
Una expresión la creamos aplicando operadores a literales,
variables y valores que devuelven métodos.
n 
n 
Un literal o una variables son las expresiones mas simples
Los operadores de los enteros son:
n 
Unarios aritméticos (preceden a la expresión):
n 
n 
Binarios aritméticos (operan sobre sus expresiones a izquierda y
derecha):
n 
n 
n 
n 
n 
n 
- invierte signo del entero
+, - Suma y resta
* Multiplicación
/ división que devuelve enteros 6 / 7 == 0, 13 / 2 == 6
% módulo (el resto cuando los números son positivos)
x % y == x - (x / y) * y
++, -- pre/post incremento/decremento
Binarios relacionales (comparan valores de las expresiones a
izquierda y derecha):
n 
n 
>, >=, <, <= Menor, menor o igual, mayor, mayor o igual
==, != igual, distinto
Fundamentos de Programación
6
Reales
n 
n 
Número reales en coma flotante (mantisa y
exponente): double, float
Los literales: …-2.0, -1.0, 0.0, 1.0, 2.0, … ó
26.77e3
n 
n 
Terminando en D o F decimos explícitamente si es
float o double
Número limitado de cifras significativas y de
exponente
Real
Bits
Mínimo
Menor Constante
Representable
Máximo
Mayor Constante
Representable
float
32
Float.MIN_VALUE
Float.MAX_VALUE
double
64
Double.MIN_VALUE
Double.MAX_VALUE
Fundamentos de Programación
7
Reales
n 
Los operadores son los mismos que los enteros
pero admiten/devuelven reales
n 
n 
n 
Unarios aritméticos: Binarios aritméticos: +, -, *, /
Binarios relacionales: >, >=, <, <=, ==, !=
n 
0.0 == 0.0 es true, pero en general == y != nos puede dar
resultados no esperados
Fundamentos de Programación
8
Lógicos
n 
n 
n 
Valores lógicos: boolean
Los literales: true, false
Los operadores operan sobre booleanos (por
ejemplo resultado de operadores relacionales):
n 
n 
Unarios: ! negación
Binarios:
n 
x && y: para que sea true, x e y deben ser true
n 
n 
x || y: será true si cualquiera de las dos (x o y) es true
n 
n 
Si x es false y no se evalúa
Si x es true y no se evalúa
x ^ y: o bien x o bien y es true, pero no los dos
Fundamentos de Programación
9
Caracteres
n 
char representa un único carácter mediante
estándar Unicode 2.0 (16 bits)
n 
n 
Literales:
n 
n 
n 
ASCII
‘a’ ‘j’ ‘\n’ ‘\t’ ‘\r’ ‘\\’
0u0020
Operadores:
n 
Binarios relacionales: >, >=, <, <=, ==, !=
n 
Los caracteres están ordenados según Unicode:
n 
n 
‘0’, ‘1’, …, ‘9’, … ‘a’, ‘b’ … ‘z’, ‘A’, ‘B’, … ‘Z’
Clase Character
Fundamentos de Programación
10
Caracteres
n 
n 
String es una clase para representar cadenas
de caracteres
Literales
n 
n 
"a", "Hola que tal“
Un literal puede ser tratado como una instancia de la
clase String:
n 
n 
n 
pero debemos cuidar de modificarlas
Caracteres de escape
Operadores:
n 
Clase String
Fundamentos de Programación
11
Expresiones y precedencia operadores
n 
Una expresión permite realizar múltiples
operaciones simples o complejas
n 
n 
Un operando puede ser:
n 
n 
n 
n 
n 
(9.0/5.0) * g + 32.0
Literal
Variable (campo, parámetro, variable local)
Resultado de una llamada a método que devuelve un
resultado compatible con los operandos del operador
El resultado de una expresión
Operadores de los tipos primitivos y de String
Fundamentos de Programación
12
Expresiones y precedencia operadores
n 
Una expresión con varios operadores se
ejecutan con el siguiente orden:
n 
n 
n 
n 
n 
n 
Operadores unarios y llamadas a método, de
izquierda a derecha
Operadores multiplicación y división de izquierda a
derecha
Operadores de suma y resta de izquierda a derecha
Operadores de relación
Operadores de asignación
Para fijar nuestro orden deseado (o para evitar
problemas) usaremos paréntesis
n 
-1 + 2 * (2 - 4 + 3) / 2
Fundamentos de Programación
13
Tipos simples vs. Tipos compuestos
n 
int,short,long,byte,double,float,
char,boolean son tipos primitivos
n 
n 
n 
n 
Las variables de esos tipo sólo almacenan un valor simple
Se representan con 8..64 bits
Se encuentran siempre contenidos dentro de un objeto, o están
entre los parámetros y variables locales de un método activo
El resto de los tipos (compuestos) son clases:
n 
Las variables de tipo compuesto referencian objetos
n 
n 
n 
Para inicializarlas hay que usar new, o copiar otra referencia
Los datos de un objeto son campos de tipos primitivos o
referencias a otros objetos
Un objeto es una estructura compleja. Incluye bastante
información (además de los datos): referencia a la clase,
identificador de objeto, monitor …
Fundamentos de Programación
14
Conversiones de Tipos
n 
Todos los operandos y parámetros tienen un
tipo que debemos respetar
n 
n 
n 
Los operadores primitivos tienen tipos para los
operandos y devuelven un resultado de un cierto tipo
La invocación de métodos debe respetar el tipo de
los parámetros, y devuelve un valor con un
determinado tipo
Algunas veces queremos usar como dato un
operador que no es del tipo correcto (por
ejemplo sumar enteros y reales)
Fundamentos de Programación
15
Conversiones automáticas
n 
Si un operando de un operador, un parámetro o
un valor de asignación tienen tipo diferente del
esperado, java puede hace una conversión
automática
n 
Hace la conversión si el valor seguro que es
representable con un valor del tipo primitivo
esperado
n 
n 
n 
n 
n 
enteros, char y boolean con reales
char y boolean con enteros
int en long, short en int, byte en short
Por ejemplo 3.0 / 2 -> 1.5 convierte 2 a 2.0
Se puede perder información al convertir de
entero a real
Fundamentos de Programación
16
Conversiones explícitas
n 
Decimos de forma explícita como hacer la
conversión:
n 
n 
n 
n 
(nuevoTipo) expresion
por ejemplo (char) 33 -> ’!’
Podemos perder información
Podemos forzar operador que queremos usar:
n 
((double) 3) / 2
n 
n 
n 
n 
convierte explícitamente 3 a 3.0
usa un operador / de real
convierte automáticamente 2 a 2.0
Hay muchas conversiones mediante métodos en
Integer, Byte,Short,Long,Double,Float,
Char,String
n 
Representación de Fundamentos
númerosdecon
string
Programación
17
Temario
n 
Tema 3. Tipos básicos
n 
n 
Datos
Campos
n 
n 
n 
n 
n 
n 
Identificadores
Declaración
Asignación
Inicialización
Constantes
Tipos envoltorio
n 
n 
n 
Integer
Double
Boolean
Fundamentos de Programación
18
Campos
n 
n 
n 
Definen los datos primitivos y referencias que
nos permiten definir la información asociada a
los objetos de una clase
Se declaran en cualquier punto dentro de una
clase y fuera de un método
Sintaxis:
Tipo nombre;
Tipo nombre1,nombre2,… nombreN;
n 
n 
n 
n 
int i;
Punto origen, destino;
String nombre;
Persona propietario, conyugeDelPropietario;
Fundamentos de Programación
19
Identificadores
n 
Cadena de letras Unicode, dígitos, $ y _ que no
comienzan por dígito
n 
n 
n 
n 
n 
n 
Un identificador determina el campo, parámetro,
variable local, método, clase o paquete al que nos
estamos refiriendo
Ejemplos no validos:
n 
n 
n 
n 
Mayúsculas != Minúsculas
Número ilimitado de caracteres
No pueden incluir blancos
No se pueden usar palabras reservadas
día del año (blancos)
1a
class
Debemos hacer un esfuerzo por elegir nombres
fácilmente comprensibles que permitan comprender qué
20
Fundamentos de Programación
representan
Asignación
n 
n 
n 
n 
Permite actualizar el valor de la variable
Sintaxis variable = expresion;
Primero se evalúa la expresión (con el valor
antiguo de la variable) y después se actualiza la
variable
La variable debe estar declarada:
n 
n 
n 
Un campo debe aparecer declarado en algún punto
de la clase
Una variable local debe aparecer declarada en
contexto de la asignación y previamente
Asignación a un parámetro dentro de un método
Fundamentos de Programación
21
Inicialización
n 
Podemos fijar el valor inicial cuando hacemos la
declaración
n 
n 
Si no lo hacemos tomará el valor por defecto:
n 
n 
n 
n 
n 
Tipo variable = expresión;
Enteros y reales 0 y 0.0
Booleanos false
Char 0u0000
referencias null
Debemos cuidar lo que escribimos en una expresión de
inicialización
Los valores necesarios deben ser conocibles:
int i=metodoQueUsaj();
int j=20*i;
public int metodoQueUsaj()
{ return j;}
Fundamentos de Programación
n 
22
Constantes
n 
Algunas veces identificamos campos cuyo valor inicial es
conocido y su valor será siempre el mismo. Ejemplos:
n 
Valores que son siempre los mismos:
n 
n 
Valores iniciales por defecto (para evitar argumentos en los
constructores):
n 
n 
posición de origen
Se declaran:
n 
n 
n 
n 
n 
tamaño por defecto
Valores de uso típicos:
n 
n 
mayoría de edad
incluyen final antes del tipo
deben incluir inicialización
suelen ser static (lo veremos en el tema 6)
Convenio: usar mayúsculas
Ejemplo:
n 
final int MAYORIA_EDAD = 18;
Fundamentos de Programación
23
Envoltorios
n 
Integer, Long, Short, Byte, Float,
Double, Boolean, Character son clases
de java.lang que permiten representar
primitivos con clases. Incluyen:
n 
Operadores no predefinidos:
n 
n 
Operadores de conversión
n 
n 
longValue()
Operadores para formatear impresiones
n 
n 
compare(Double anotherDouble)
toString()
Constantes típicas de los primitivos
n 
SIZE
Fundamentos de Programación
24
Vectores y arrays
n 
Vectores (álgebra)
n 
un vector de N reales
n 
v0, v1, v2, ..., vn-1
n 
n 
acceso al término késimo
n 
una matriz de MxN
reales
n 
arrays (java)
n 
v00, v01, ..., v0n-1
v10, v11, ..., v1n-1
una matriz de MxN reales
double[][] v
= new double[M][N]
...
vm-1,0, vm-1,1, ..., vm-1,n-1
n 
acceso al término k-ésimo
v[k]
Matrices (álgebra)
n 
un array de N reales
double[] v
= new double[N];
vk
n 
arrays (java)
acceso al término x, y
n 
acceso al término x, y
v[x][y]
vxy
Programación DIT-UPM
25
Arrays: Declaración
n 
Ejemplos de estructuras de datos representables con
array:
n 
n 
n 
Los puntos de una pantalla
El conjunto de números de teléfono de una agenda
Los arrays nos permiten representar muchos valores
primitivos u objetos de un mismo tipo
Nos referimos a todos ellos en conjunto, con el mismo nombre
n  Podemos referirnos a cada uno de ellos de forma individual
Tipo[] nombreVariable ;
Tipo nombreVariable[];
n 
Programación DIT-UPM
26
Arrays: Creación
n 
Los array son tipos de objetos, y antes de usarlos hay
que crearlos:
nombreVariable = new Tipo[Expresion int];
n  Al crear el array fijamos el número de elementos que
queremos almacenar en él
n  Cada uno de los elementos del array se crea y se inicializa con
su valor por defecto
n 
n 
n 
Si el tipo base del array es un tipo primitivo, se inicializa con su
valor por defecto (0 int, false boolean, \u0000 char, 0.0 reales)
Si el tipo base es una clase, todos los valores del array son null
Existen los literales de array: son un conjunto de expresiones
del mismo tipo, separadas por comas y encerradas entre llaves
int[] arrayDeInt = {2,4,6,8,10};
int[][] matriz= {{ 1, 2, 3 }, { 4, 5, 6 }};
Programación DIT-UPM
27
Arrays: Acceso
n 
n 
n 
El nombre de la variable de tipo array nos referencia todo
el grupo en conjunto
El array es un tipo de objeto (con algunas peculiaridades)
Dos variables array pueden referenciar el mismo grupo
Tipo[] var1, var2;
…
var1=var2
n  var1 y var2 referencian el mismo conjunto (no son dos copias)
metodo(Tipo[] par) { …}
…
obj.metodo(var1)
n  par nos hará referencia al conjunto que referencia var1
n 
El campo length de una variable array devuelve el número de
elementos que tiene el array
Programación DIT-UPM
28
Arrays: Acceso II
n 
Para referenciar un elemento en concreto debemos
identificar su posición (índice), el primero es el 0
nombreVariable[Expresion int]
n  Nos devuelve un valor del tipo base del array
n  Podemos usar esa posición como cualquier otra variable
nombreVariable[Expresion int]=Expresion del Tipo Base
n  Por ejemplo:
variableArrayInt[i]=11;
variableArrayInt[i]=variableArrayInt[i]+(variableArrayInt[j]+1);
variableArrayObj[i].metodo();
n 
Cuando el índice que empleamos tiene un valor mayor
o igual que length, o el número es menor de 0:
n 
Se levanta una excepción: ArrayIndexOutOfBoundException
Programación DIT-UPM
29
Arrays Multidimensionales
n 
En algunos casos nos interesa tener arrays con varios índices:
n 
n 
Los puntos de una pantalla los podemos representar mediante un
array de dos dimensiones
Por cada dimensión que queramos tener, incluimos un índice ([]), y
en el constructor definimos el tamaño cada una de las dimensión
Color pantalla[][]=new Color[1024][2048]
n 
Para acceder a un elemento base debemos incluir tantos índices
como dimensiones tenga el array
pantalla[i][j]
n 
n 
Un array multidimensional es un array de arrays
Con un solo índice (pantalla[i]) obtenemos referencia un array que
representa todos los elementos de esa dimensión (una fila de la
pantalla
pantalla[i][0], pantalla[i][1], … pantalla[i][pantalla[i].length-1])
Programación DIT-UPM
30
Arrays Multidimensionales II
n 
n 
pantalla.length devuelve el número de elementos de la
primera dimensión, pantalla[i].length devuelve el
número de elementos de la dimensión i
Podemos ir creando las diferentes dimensiones
dinámicamente, pero una vez creadas, su tamaño no
cambia
Programación DIT-UPM
31
Descargar