You are on page 1of 7

Fundamentos de Elementos de un lenguaje

Programación
 Un sublenguaje para definir los datos (álgebra)
 representación de la información
 qué datos tenemos
 cómo los llamamos
 cómo son (estructura)
Tema 3:
 qué se puede hacer con ellos
Tipos de Datos Primitivos
 Un sublenguaje para definir los algoritmos
 qué le hacemos a los datos
Dpto. de Ingeniería de Sistemas Telemáticos
http://www.lab.dit.upm.es/~fprg/  en qué orden (cuándo se lo hacemos)
 cuántas veces
oct-07 1 oct-07 2

Datos Valores Enteros


 Tipos  Números enteros
 álgebra  decimales: 53, 2300, -7, 0
 definen el rango (dominio) y las operaciones  hexadecimales: 0x35
 Valores  octales: 065
 Representación del rango  no son enteros válidos:
 12,34
 Variables  45.67
 Continentes de valores  13E5
 de un cierto tipo

oct-07 3 oct-07 4

Valores Caracteres y
Valores Reales Cadenas
 Números reales (punto flotante)  Caracteres
 notación decimal y científica  ´a´ ´Ñ´ ´?´
 5. -0.78 0.00000034 123.0  Cadenas de caracteres (strings)
 -23.4E8 123.E-34  ”Hola a todos” -> Hola a todos
 no son válidos  ”esto es una cadena” -> esto es una cadena
 .58
 ”dijo ´Adios´ y se fué” -> dijo ’Adios’ y se fué
 4,76
 ”qué \”raro\” es esto” -> qué ”raro” es esto
 56.3F14

oct-07 5 oct-07 6

1
Valores Lógicos (booleanos) Enumerados
 Sólo dos valores: {true, false}  Definición de conjuntos por extensión
 En minúsculas  Nombre y Rango
 Se usan en operaciones de comparación y  Calificación є { Suspenso , Aprobado , Bien , Notable ,
lógicas Sobresaliente }
 DiaSemana є { Lunes , Martes , Miércoles , Jueves ,
Viernes , Sábado , Domingo };

oct-07 7 oct-07 8

Tipos Simples y Objetos Tipos enteros


 Formado por valores enteros
En Java se distingue entre:  Varios rangos (n bits [0..2n-1] ó [-2n-1 .. 2n-1-1])
 Tipos simples o primitivos: números, caracteres,  En los programas, sus valores se escriben en
 predefinidos en el lenguaje: sintaxis especial decimal, hexadecimal u octal
 Objetos  byte 8 bits [-128..127]
 definibles por el programador  short 16 bits [-32768..+32767]
 disponibles en la API de Java  int 32 bits [-2147483658..+2147483647]
 arrays (matrices, vectores, ¡arreglos!)  long 64 bits [-9223372036854775808..
 manejo similar a los objetos +9223372036854775807]
 pero con sintaxis especial

oct-07 9 oct-07 10

Operaciones sobre enteros Operaciones sobre enteros


 Predefinidas en el lenguaje Java  Disponibles en el API de Java (Math)
 - menos unario  Math.abs(x) valor absoluto
 * producto  Math.sqrt(x) raíz cuadrada
 / división ¡enteros! 4/2 = 2 pero 4/3 = 1  Math.pow(x,y) x elevado a y
 % módulo (resto para valores positivos)
 i % j = i - (i / j) * j
 signo(i % j) = signo (i)
 + suma
 - resta

oct-07 11 oct-07 12

2
Expresiones ariméticas Tipos reales (¡flotantes!)
 Formado por valores reales
1 - 2 * 3 + 4  rango: [menor .. mayor]
 (1 - 2) * (3 + 4)  mantisa y exponente
 10 / 3 / 2  precisión: número de cifras significativas
 Se evalúan los paréntesis  float 32 bits -3.4029234E+38..+3.4029234E+38
6 cifras significativas
 por orden de precedencia
 double 64 bits -1.79769313486231570E+308 ..
 1º: - unario
+1.79769313486231570E+308
 2º: * / %
15 cifras significativas
 3º: + - binario
 de izquierda a derecha
oct-07 13 oct-07 14

Operaciones sobre reales Operaciones sobre reales


 Predefinidas por el lenguaje JAVA
 - menos unario  Disponibles en el API de JAVA (Math)
 * producto  Math.abs(x) valor absoluto
 / división  Math.ceil(x) redondeo entero superior
 + suma  Math.floor(x) redondeo entero inferior
 - resta  Math.cos(x) coseno
 Math.tan(x) tangente
 Math.sqrt(x) raiz cuadrada
x
 Math.exp(x) e
 Math.pow(x, y) potenciación xy
 Math.log(x) logaritmo neperiano
oct-07 15 oct-07 ... 16

Operaciones sobre
Tipo booleano booleanos
 Se usan en operaciones de comparación y  Predefinidos por el lenguaje JAVA
lógicas  && AND con cortocircuito
 o representan condiciones  || OR con cortocircuito
 [true,false]  ^ XOR (OR exclusivo)
 ! NOT (negación)
 & AND lógico (sin cortocircuito)
 | OR lógico (sin cortocircuito)

oct-07 17 oct-07 18

3
Operaciones sobre
booleanos Operadores Relacionales
 A && B : si A entonces B si no, false  Predefinidos por el lenguaje Java
 Si A es false, B no se evalúa  == igualdad
 A || B : si A entonces true si no, B  != distinto
 Si A es true, B no se evalúa  < menor que
 <= menor o igual
 > mayor
 >= mayor o igual
 ATENCIÓN: prioridad operadores relacionales
menor que ningún otro operador
bisiesto = (año % 4 == 0) & (año % 100 != 0)
oct-07 19 oct-07 | (año % 400 == 0); 20

Operaciones sobre
Tipo carácter caracteres
 Se llama char  Predefinidos los relacionales (==, <, …)
 Ocupa 16 bits  Resto, en el API de Java
 Estándar UNICODE 2.0, que incluye ASCII  IsLowerCase(c) true si c es letra y minúscula, falso
 admite ISO-latin-1, cirílico, kanji, ... en caso contrario
 IsUpperCase(c) true si c es letra y mayúscula
 Valores de \u0000 .. \uFFFF
 toLowerCase(c) Si c es letra mayúscula, devuelve la
 Más cómodo: ´a´, ´J´, ´ñ´ , … minúscula correspondiente, si no, devuelve c
 Especiales: ´\n´ ´\t´ ´\r´ ´\\´ ´\´´  toUpperCase (c) Si c es letra minúscula, devuelve la
 ordenados ´A´ < ´B´ < ....;´a´ < ´b´ < ...; mayúscula correspondiente, si no, devuelve c

´0´ < ´1´... < ´9´


oct-07 21 oct-07 22

Enumerados Uso Enumerados


 En java:
enum Calificacion {SUSPENSO, APROBADO, boolean NoHayClase=
BIEN, NOTABLE, SOBRESALIENTE};
dia == DiaSemana.SABADO
enum TurnoDeClase { MAÑANA, TARDE };
Enum DiaSemana {LUNES, MARTES, MIERCOLES,
|| dia == DiaSemana.DOMINGO;
JUEVES, VIERNES, SABADO, DOMINGO};

oct-07 23 oct-07 24

4
Conversiones Promoción
 Las operaciones determinan el tipo a devolver a  (nombre de tipo) expresión
partir de los operandos  Convierten el valor de la expresión a un valor del tipo
 4 / 3 -> 1 (int, int) -> int entre paréntesis
 a veces, no es el resultado deseado  (char)98 -> devuelve ´b´
 Conversión de tipos:  (int)10.0 -> devuelve el entero 10
 Implícita (definida en el lenguaje)  (double)10 -> devuelve el double 10.0
 Explícita (casting o promoción), forzada por el  Los valores se pueden ver alterados
programador

oct-07 25 oct-07 26

Conversiones implícitas Conversiones implícitas


 5.0 / 4 -> 1.25
 El 4 se convierte “automáticamente” en 4.0 para  Sólo aplica a tipos primitivos
poder dividir  De tipos “pequeños” a “grandes”:
 La promoción tiene mayor prioridad  byte a short, int, long, float, o double
 (float) 5 / 4 -> 1.25 (formato float)  short a int, long, float o double
 El 5 se convierte por la promoción forzada a 5.0, el 4  char a int, long, float, o double (¡OJO!)
se convierte “automáticamente”  int a long, float o double
 long a float o double
 float a double
 ¡Se puede perder información!
 En el paso de long a float o double
oct-07 27 oct-07 28
 En el paso de int a float

Convertir cadenas en otros


Atributos
valores
 Típicamente, desde línea de comandos  Una variable almacena un valor
double base= Double.valueOf(args[0]).doubleValue();  se define (declaración)
int x= Integer.valueOf(args[1]).IntValue();  se crean
 Otra forma:  se cargan con un valor inicial (datos de entrada)
int precio= Integer.parseInt(args[1]);  su valor se modifica (algoritmo)
 Si no se puede convertir, se lanzará una excepción:  llegan a un valor final (resultado)
el programa termina abruptamente

oct-07 29 oct-07 30

5
Definición de atributos Identificadores
 Se elige un nombre (identificador)
 Se antepone el tipo adecuado  Identificador: nombre de un elemento del
 int n;
programa:
 variables, constantes, clases, métodos, etc.
 char respuesta;
 double base, altura, superficie;  Reglas:
 secuencia de caracteres (letras, dígitos, ´$´ y ´_´)
 longitud ilimitada
 no pueden comenzar por número
 mayúsculas != minúsculas
 dos identificadores son iguales si coinciden todos sus
caracteres
oct-07 31 oct-07 32

Identificadores Identificadores
 Válidos:  Deben asegurar la legibilidad
 x, base, hola, respuesta, díaDelMes, saldo_cliente,  significativos
a1x, eje3, año, _preparado, $saldoCliente  x*y; // multiplica dos números
 No válidos:  base * altura; // calcula superficie
• ¡pero es el mismo código!
 1x, no#valido, día del mes
 legibles, sin abreviaturas ni contracciones
 No se pueden usar como identificadores las  sinónimos cortos
palabras reservadas del lenguaje:  combinar mayúsculas y minúsculas
 public, static, class, goto, for,...  añadir comentario al final de la línea para aclarar
 int base; // base del triángulo

oct-07 33 oct-07 34

Carga de atributos Carga inicial


 En Java, al declarar una variable de un tipo
 Se pone el nombre de la variable, el signo ´=´ y primitivo, toma un valor inicial por defecto:
una expresión del mismo tipo  números enteros: 0
int x, y;  números reales: 0.0
x = 2 * 8;  booleanos: false;
y = 7.5 / 3; // ERROR: tipos distintos!  caracteres: \u0000 // carácter nulo
y = (int)Math.sqrt(x); // correcto!  referencias: null
x = y * 3; // recarga la variable x, se olvida el viejo valor
y = y / x; // primero se evalúa la expresión
// luego se asigna el resultado a ´y´

oct-07 35 oct-07 36

6
Carga en la declaración Constantes
 Se puede asignar un valor inicial en la  Se pueden declarar atributos con un valor
declaración de variables inmutable.
 int m = 7;  final int maximo= 100;
 double x = 10.0, y = 3 * 5;  final float velocidadLuz= 300000.0;
 float p = m / 10.0, q = 2 * p;  Error:
 La expresión ha de poderse resolver (todos los  final int numAlumnos; // ¡fija el valor a 0!
valores conocidos)  numAlumnos= 540; // no se puede cambiar
 El valor de las constantes se proporciona en la
declaración

oct-07 37 oct-07 38

Criterios de declaración de
constantes Envoltorios
 Declararla antes de usarla (obligatorio)  Clases especiales para “envolver” tipos simples
 Declarar una constante para valores  Boolean, Character, Integer, Long, Double, Float
significativos  No hay para Byte ni Short
 Elegir un nombre claro e inequívoco  Usados para
 Declararla en un solo lugar  convertir a tipo String (imprimir)
 para facilitar mantenimiento mediante cambio  leer de una cadena
sistemático  utilleria
 MIN_VALUE, MAX_VALUE para números
 no redefinir la misma constante en varios puntos

oct-07 39 oct-07 40

You might also like