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