31
Fundamentos de Programación FPRG Tema 4. Tipos Básicos y Expresiones Simples Miguel A. de Miguel [email protected]

Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

  • Upload
    vananh

  • View
    235

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

Fundamentos de Programación FPRG

Tema 4. Tipos Básicos y Expresiones Simples

Miguel A. de Miguel [email protected]

Page 2: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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

Page 3: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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

Page 4: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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

Page 5: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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)

Page 6: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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

Page 7: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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

Page 8: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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

Page 9: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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

Page 10: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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

Page 11: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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

Page 12: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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

Page 13: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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

Page 14: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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 …

Page 15: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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)

Page 16: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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

Page 17: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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

Page 18: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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

Page 19: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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;

Page 20: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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

Page 21: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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

Page 22: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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;}

Page 23: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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;

Page 24: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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

Page 25: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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

Page 26: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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

Page 27: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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

Page 28: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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

Page 29: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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

Page 30: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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

Page 31: Fundamentos de Programación FPRG Tema 4. Tipos …mmiguel/doc/fprg/Tema4_tmp.pdf · Fundamentos de Programación 6 Enteros n Los literales pueden ser en decimal, octal (0 a la izquierda

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