Representación de Datos y Aplicaciones Tema 3 Elementos básicos de programación Natividad Martínez Madrid nati@it.uc3m.es Objetivos del tema 3 Conocer la estructura básica de un programa Java Comprender los conceptos de tipo, valor y variable Comprender las diferencias entre tipos de datos primitivos similares, y aprender a elegir el tipo más conveniente en cada caso Ser capaces de modelar funcionalidades básicas aritméticas, lógicas y relacionales mediante los operadores y expresiones correspondientes 2 1
Contenido del tema 3 Estructura básica de un programa Java Concepto de tipo y variable Tipos primitivos Concepto y tipo de operador y expresión Operadores aritméticos, lógicos y relacionales Elementos sintácticos básicos Comentarios Palabras reservadas Identificadores Variables Literales 3 Estructura básica de un programa Java Un programa Java está formado por una o varias clases Cada clase puede tener sus atributos y métodos Al menos una de las clases tendrá un método llamado main Dicho método es el que se comienza a ejecutar Los métodos tienen una serie de sentencias que se ejecutan en secuencia Alguna de esas sentencias pueden ser pasos de mensaje a otros objetos (llamadas a sus métodos) 4 2
Ejemplo: Programa Java /** Programa Java que dado el radio y altura * de un cilindro calcula su volumen */ public class VolumenCilindro { public static void main (String[] args){ /* El valor del número pi */ final double PI = 3.1415926536; double radio; double altura; radio = 23.4; // en centímetros altura = 120.2; // en centímetros System.out.println( Datos del cilindro: ); System.out.println( Radio: + radio); System.out.println( Altura: + altura); System.out.println( El volumen del cilindro es: ); System.out.println(PI * radio * radio * altura); } } 5 Tipos de datos El tipo de datos determina Los valores que puede tomar una variable Las operaciones que se pueden realizar sobre ella Dos categorías principales de tipos de datos Tipos primitivos Tipos referencia: para clases, interfaces y arrays Java es un lenguaje fuertemente tipado Cada variable y expresión tienen un tipo En todas la asignaciones se comprueba la compatibilidad de tipos 6 3
Tipos primitivos vs. tipos referencia Persona Clase Persona José 23 carpintero No incluye el objeto, sino una referencia al mismo damenombre dameedad dameprofesión Tipo int 27 Sólo incluye el valor, no comportamiento 7 Concepto de variable Las variables son los nombres en un lenguaje de programación Las variables siempre son de un tipo determinado Al declarar la variable, se indica siempre el tipo y su nombre double radio; 8 4
Valor de una variable El valor asignado a la variable puede ser Un literal (valor constante) a = 7.2 Una expresión de ese tipo a = b + c El resultado de un método, que sea de ese tipo a = sqrt (32.4) 9 Tipos primitivos Representan valores básicos de los elementos de un programa Tienen un tamaño y formato fijos Se definen literales (valores constantes) Clasificación general: Números enteros Caracteres Números reales Booleanos Aritméticos 10 5
Números enteros Números enteros positivos y negativos De distintos tamaños Formato: complemento a dos Tipo Descripción Tamaño Formato Mínimo Máximo byte Entero con signo 8 bits Complemento-2-128 +127 short Entero con signo 16 bits Complemento-2-32768 + 32767 int Entero con signo 32 bits Complemento-2-2147483648 +2147483647 long Entero con signo 64 bits Complemento-2-9223372036854775808 + 9223372036854775807 11 Literales enteros Formato decimal Cifras decimales 0, 34: tipo int Con l o L tras el número: 58941623984L: tipo long Formato octal Cifras octales: 0,1,2,3,4,5,6,7 Cada cifra octal representa 3 bits Los números octales comienzan por 0: 0642, 0642L Formato hexadecimal Cifras hexadecimales: 0,1,2,3,4,5,6,7, 8, 9, a, b, c, d, e, f (también sirve en mayúsculas) Cada cifra hexadecimal representa 4 bits Los números hexadecimales comienzan por 0x: 0xa54, 0xE08DL 12 6
Tipo carácter En realidad también es un entero (sin signo) Aritmética de caracteres Representación de un carácter por su código en formato Unicode Tipo Descripción Tamaño Formato Mínimo Máximo char Entero sin signo 16 bits Unicode \u0000 \uffff 13 Literales carácter Un carácter se representa entre comillas simples a, A (son caracteres diferentes) ñ, á O bien como su código Unicode \u0061 ( a ), \u0041 ( A ) Permite representar cualquier alfabeto Caracteres especiales (secuencias de escape): comienzan por \ Secuencia escape \b \t \n \r \ \ \\ Significado Retroceso Tabulador Salto de línea Cambio de línea Comillas dobles Comillas simples Barra atrás 14 7
Números reales Números reales positivos y negativos Aritmética de punto flotante (estándar IEEE 754) signo * mantisa * 2 exponente Tipo Descripción Tamaño Formato Mínimo Máximo float Real simple precisión 32 bits IEEE 754 ±3.40282347 e +38 ±1.40239486 e -45 double Real doble precisión 64 bits IEEE 754 ±1.79769313486231570 e +308 ±4.94065645841246544 e -324 Infinito negativo -4.9e-324-0.0 0.0 +4.9e-324 Infinito positivo -1.7e308 NaN (Not-a-Number) +1.7e308 15 Literales reales Deben incluir O bien un punto decimal (cuidado, no una coma!) O bien una e o E (exponencial) 1e2 == 1*10 2 Ejemplos: 0.0, 4.0, 4.,.23, 1.e2, 2E-2,.4e+4 Por defecto, son de tipo double Salvo que incluyan una f o F al final Ejemplos: 4.0f, 4.f,.23F, 1.e2F, 2E-2f,.4e+4f 16 8
Booleanos Representan los valores lógicos y (literales) Base para las expresiones lógicas (condiciones) Los literales booleanos y no son equivalentes a los enteros 1 y 0 Operaciones lógicas básicas: A NOT A A B A AND B A B A OR B 17 Tipos de datos primitivos en Java Tipo primitivo Descripción Tamaño Mínimo Máximo Envoltorio boolean Valor binario - - - Boolean char Carácter unicode 16 bits unicode 0 unicode 2 16-1 Character byte Entero con signo 8 bits -128 +127 Byte short Entero con signo 16 bits -2 15 +2 15-1 Short int Entero con signo 32 bits -2 31 +2 31-1 Integer long Entero con signo 64 bits -2 63 +2 63-1 Long float Real simple precisión 32 bits ±3.40282347 e +38 ±1.40239486 e -45 Float double Real doble precisión 64 bits ±1.79769313486231570 e +308 ±4.94065645841246544 e -324 Double 18 9
Textos String no es un tipo de datos primitivo sino una clase definida en Java para representar cadenas de textos. Es decir, las variables String son referencias al objeto de tipo String. Las cadenas de texto son una de las variables más utilizadas en Java, por eso hay una forma especial abreviada de crearlas: String s = asdf ; El contenido de la cadena de texto se escribe entre comillas dobles. Ejemplos: perro, (cadena con un espacio en blanco), (cadena vacía), a (cadena formada por el carácter a : a a ) 19 Operadores Un operador es un elemento que toma uno o más operandos y produce un nuevo valor Operadores unarios. Ej: (-): -7 Operadores binarios. Ej: (*): 2.5 * 3.2 Operadores terciarios. Ej: (?:): b?(a>2):(c<5) Tipos de operadores Operadores artiméticos Operadores relacionales Operadores lógicos Operadores a nivel de bit 20 10
Operadores aritméticos Realizan las operaciones clásicas de la aritmética: (+) : suma (también concatenación de Strings) (-) : resta (también es el menos unario) (*) : multiplicación Básicas (/) : división (%) : módulo (resto) (++) : incremento Abreviadas unarias (--) : decremento (+=) : suma y asignación (-=) : resta y asignación (*=) : multiplicación y asignación Abreviadas binarias (/=) : división y asignación (%=) : módulo y asignación 21 Operadores aritméticos básicos int a = 1 + 1; int b = a * 3; int c = b / 4; int d = c - a; int e = -d; double da = 1 + 1; double db = da * 3; double dc = db / 4; double dd = dc a; double de = -dd; 22 11
Incremento y decremento (++) y (--): aumentan o decrementan el valor de la variable en uno Existen dos variantes: Preincremento (Predecremento): ++a (--a): primero se incrementa (decrementa) y luego se produce el valor. Postincremento (Postdecremento): a++ (a--): primero se produce el valor y luego se incrementa (decrementa). x = 93; y = ++x; x = 93; y = x++; 23 Operadores relacionales Tanto los operandos como el resultado son booleanos Producen un resultado booleano: : si la relación es cierta : si la relación es falsa Operador < > <= >= ==!= Significado Menor que Mayor que Menor o igual Mayor o igual Igual Distinto Orden Igualdad 24 12
Operadores lógicos booleanos Tanto los operandos como el resultado son booleanos Operador & ^! && &= = ^= ==!=?: Significado AND lógico OR lógico OR exclusivo lógico NOT lógico unario AND en cortocircuito OR en cortocircuito AND y asignación OR y asignación OR exclusivo y asignación Igual a Distinto de If-then-else ternario 25 Ejemplo: Operadores lógicos Expresión lógica de la implicación: a => b La tabla de verdad de la implicación lógica es: a b => La expresión lógica equivalente sería:! (a &&!b) 26 13
Operador?: Operador ternario expresión1? expresión2 : expresión3 Se evalúa expresión2 si expresión1 es, y expresión3 en caso contrario Similar a una sentencia condicional if-then-else Ejemplo: denom == 0? 0 : num/denom 27 Expresiones aritmético-lógicas Mezcla de expresiones aritméticas, relacionales y lógicas. Por ejemplo: 3+7 < 4*3 9 < 3 Ejemplo: Se debe hacer la declaración de la renta si se tienen al menos 18 años y menos de 66, o bien si, teniendo más de 66, los ingresos anuales son más de 20000 28 14
Precedencia de operadores Define cómo se evalúa una expresión cuando hay varios operadores presentes Por ejemplo: a = x + y 2 / 2 + z es distinto de a = x + (y 2) / (2 + z) 29 Orden de precedencia Operadores unarios Operadores multiplicativos, de izquierda a derecha Operadores aditivos, de izquierda a derecha Operadores de relación Operadores de asignación 30 15
Elementos sintácticos básicos /** Programa Java que dado el radio y altura * de un cilindro calcula su volumen */ public class VolumenCilindro { public static void main (String[] args){ /* El valor del número pi */ final double PI = 3.1415926536; double radio; double altura; radio = 23.4; // en centímetros altura = 120.2; // en centímetros System.out.println( Datos del cilindro: ); System.out.println( Radio: + radio); System.out.println( Altura: + altura); System.out.println( El volumen del cilindro es: ); System.out.println(PI * radio * radio * altura); } } 31 Comentarios /*... */: comentario de bloque Todo lo que aparece entre las dos marcas se considera un comentario /**... */: comentario de documentación Caso particular de los comentarios de bloque Inclusión del comentario en la documentación del programa generada automáticamente con la herramienta javadoc //: comentario de línea Desde la marca al final de esa línea se considera un comentario 32 16
Palabras reservadas Forman parte del lenguaje Java propiamente dicho y no pueden usarse como nombres de clases, objetos, etc. Ejemplos de palabras reservadas: class, new, int, void, final, etc. 33 Identificadores Nombres que elige el programador para distintos elementos del programa: clases, objetos, variables, métodos, etc. Deben empezar con una letra y seguir con una sucesión de letras y cifras Letras válidas para formar identificadores: Caracteres UNICODE: alfabeto latino, griego, hebreo, cirílico, con acentos, etc Los siguientes caracteres: subrayado ( _ ) y dólar ( $ ) Ejemplos de identificadores: VolumenCilindro, PI, radio, altura 34 17
Convenios de nombrado de identificadores Identificadores de variables o métodos Empezar con minúscula. Si es un nombre compuesto, empezar cada palabra posterior con mayúscula Ejemplo: númeroelementos, ponvalor Identificadores de clases Mismas consideraciones que en el caso anterior, pero empezando por mayúscula Ejemplo: VolumenCilindro Identificadores de constantes Todo en mayúsculas. Si es un nombre compuesto, se separa cada palabra de la posterior con un subrayado Ejemplo: PI, VALOR_MAXIMO 35 Variables Nombres que hacen referencia a: Objetos de una clase Elementos de tipos primitivos Una variable queda determinada por: Un nombre La clase a la que pertenece el objeto o bien el tipo primitivo (que determina qué valores se pueden guardar y con qué rango) 36 18
Declaración de variables Se escribe primero el nombre del tipo o clase, y luego el nombre de la variable double radio; 37 Asignación de variables Nombre de variable seguido de un signo de igual seguido de una expresión del mismo tipo o clase que la variable a la que se le está asignando un valor radio = 23.4; radio = 12.4 + 4.2 + a; La declaración y asignación de variables pueden realzarse a la vez: double radio = 23.4; String texto = Programación ; 38 19
Constantes Algunas variables se declaran como constantes. Eso quiere decir que su valor no puede cambiar en toda la ejecución del programa. Se preceden por la palabra reservada final. final double PI = 3.1415926536; 39 Literales Se llama literales a posibles valores de tipos primitivos predefinidos en el lenguaje Números enteros Números reales Booleanos Caracteres Textos (String no es tipo primitivo) 40 20