Texto de Introducción a la Programación · Programa Un programa es una ... Orientado al objeto...
Transcript of Texto de Introducción a la Programación · Programa Un programa es una ... Orientado al objeto...
1
Texto de Introducción a laProgramación
MSc. Lic. Carla Salazar SerrudoLic. Victor Hugo Montaño
Carrera de Informática y SistemasUMSS - 2003
2
ÍndiceBibliografíaIntroducciónAlgoritmosTipos de datos y operadoresControl de flujoProgramación orientada a objetos (POO)Arreglos y CadenasCaracterísticas avanzadas de POO
3
Bibliografía • Manual de referencia, Mc Graw Hill Editores.
Naughton, Patrick ; Schildt, Herbert (1997)
• Clase LeerTeclado, Univ. Raúl Fernández
• http://java.sun.com/docs/books/tutorial/index.html
• Como programar en Java, Prentice-HallHispanoamericana, S.A., Deitel y Deitel (1998)
4
Introducción
Uso de la computadora para resolver problemas más o menos complejos. La computadora realiza operaciones tales como: aritméticas, comparaciones, almacenamiento, transferencia de datos, etc.Dichas operaciones se realizan por medio de instrucciones o comandos.
5
Instrucción
Una instrucción es una sentencia u ordenLas instrucciones pueden ser:
de entrada de datos (y recuperación)operaciones sobre los datos (manipulación)de salida (presentación) de resultados y almacenamiento
6
ProgramaUn programa es una lista de instrucciones.Un programa es una descripción de pasos a dar para resolver un problema.El programa (software) dirige el funcionamiento del ordenador (hardware).
7
Los algoritmos
Descripción exacta no ambigua de la secuencia de pasos a aplicar para encontrar una solución a un problema a partir de unos datos.Método de resolución general de un problema.Ej.: receta de cocina (freír papas)
8
Los algoritmos (2)
Para programar hay que analizar el problema y diseñar una estrategia de resolución. Hay que contemplar todas las alternativas lógicas posibles (no dejar cabos sueltos).Problema Algoritmo Programa
9
Los algoritmos (3)
Un programa es la codificación de un algoritmo en un lenguaje de programación concreto.Características:
completorobustoeficienteconsistente
10
Descripción de algoritmos
Pseudocódigodescripción verbal en lenguaje “casi natural”.
Diagramas de flujodescripción gráficacada símbolo representa una acción (entradas, salidas, procesos, comparaciones...)todos los símbolos tienen una flecha de entrada y otra de salida (al menos), salvo los símbolos inicial y final.
11
Ejemplo pseudocódigo
Ejemplo: sumar dos númerosprograma Suma
leer(n1)
leer(n2)
suma = n1 + n2
escribir(“suma es ”, suma)
fin
12
Diagramas de flujo
Inicio n1, n2 suma = n1 + n2
EntradaSalida (pantalla)
Cálculo
Fin
suma
13
Estructuras básicas
ASIGNACIONlongitud = 2 * 3.14 * radiox = x + 1
ENTRADA/SALIDAleer(edad)imprimir(valor)
CONDICIONsi (edad < 18) entonces
imprimir(“No puedes votar”)si no
voto = leer(“Elija su voto”)fin si
14
Estructuras básicas (2)ITERACIONmientras (num != 8) hacer
num = leer(“Otra vez. Número:”)fin mientras
para i=1 hasta 10 paso 1 hacerimprimir(3 “x” i “=” 3*i)
fin para
repetirx = x + 2
hasta que (x > 50)
15
Refinamiento
Refinamiento por pasos sucesivos (top-down)
Descomposición de un problema en subproblemas en etapas sucesivas.Atención al principio a los aspectos globales del sistema. Al avanzar el diseño, descomposición en subsistemas (detalles).
16
Refinamiento (2)
Composición hacia arriba (bottom-up)Identificar conjunto primitivo de objetos, acciones y relaciones que proporcionarán una base para la soluciónConceptos de alto nivel expresados en términos del conjunto de primitivos (combinaciones).Necesidad de un conjunto completo de primitivas
17
Ejemplo de refinamientoProblema: Dibujar la función Y = X3+2x-3Top-Down
Etapa 1.1. Calcular puntos2. Dibujarlos
Modularidad
18
Programando con Java
MSc. Lic. Carla Salazar SerrudoLic. Victor Hugo Montaño
Carrera de Informática y SistemasUMSS - 2003
19
Características de Java
Orientado al objeto (tendencia en boga)
Simple (similar a C, sin complejidades)
Multiplataforma (Windows, PowerMac, Unix)
Robusto (hace chequeos, elimina punteros)
Recolección de basura automáticaBibliotecas estándaresRealmente portable en un 100%Facilidades para programación en redes
20
Compilador e intérprete de Java
Compilador de Java (específico x plataforma) javac P1.java
P1.java P1.class
Intérprete de Java (específico x plataforma) java P1 (class)
Salidadel
Prog.
21
Compilador e intérpreteEl compilador analiza la sintaxis del código fuente (con extensión .java). Si no hay errores, genera bytecodes
> javac P1.javaEl intérprete es la Máquina Virtual Java que ejecuta los bytecodes (con extensión .class) creados por el compilador
> java P1
22
Un primer programa en Java
public class Ejemplo {
public static void main(String args[ ]) {
System.out.println(“Introducción a la Programación con Java”);}
}
23
Un primer programa en Java (2)
Todo programa se escribe en el método estático llamado main en una clase cualquiera Este método se empieza a ejecutar cuando seinvoca el intérprete de Java para una clasedadaargs es un arreglo de Strings que contiene los parámetros con los que fue invocado el programa
24
Variables de entorno
Es necesario incluir las siguientes líneas al final del autoexec.batPara tener accesibles el compilador y el intérprete Java:
Set PATH= %PATH%; C:\jdk1.4\bin(el directorio depende de dónde se haya instalado jdk)
25
Variables de entorno (2)
Para acceder a las clases desarrolladas por uno mismo:
Set CLASSPATH= .;%CLASSPATH%(incluye el directorio donde uno se encuentra)
26
// Este es el esqueleto de un programa en Java
class <nombre del Programa>
{
/* Definiciones globales*/
/* Metodo Principal*/
/* Otros Métodos*/
}
Se utiliza para abrir un bloque de instrucciones.
Se utiliza para cerrar un bloque de instrucciones
Estructura de un programa
27
// Este es el esqueleto de un programa en Java
class <nombre del Programa>{
/* Definiciones globales*/
/* Este es el Método Principal*/
/* Otros Métodos*/
}
Si sólo quiero comentario de una línea coloco // al inicio de esta
Si quiero comentario de más de una línea coloco /* al inicio del comentario y */ al final
Comentarios
28
Aquí se definen las variables que yo deseo que se puedan utilizar en todo mi programa.
Cada aplicación de Java debe tener un método principal llamado main, que define donde comienza el flujo del programa.
Deben seguir las convenciones utilizadas en algoritmo.
Variables y métodos
class <nombre del Programa>{
/* Definiciones globales*/
/* Método Principal*/
/* Otros Métodos*/
}
29
// Este es el esqueleto de un programa en Javaclass <nombre del Programa> {
/* Definiciones globales*/
public static void main (String args[]){
/* Definiciones locales*/......
/* cuerpo de instrucciones */......
}}
Todo el código de un método estará entre la llave de apertura ( { ) y la correspondiente llave de cierre ( } ).
Sintaxis del método main
30
// Este es el esqueleto de un programa en Javaclass <nombre del Programa> {
/* Definiciones globales*/
public static void main (String args[])
{
/* Definiciones locales*/......
/* cuerpo de instrucciones */......
}}
La palabra public es un especificador de acceso. En este caso el main debe ser declarado public ya que es llamado por código que está fuera de su clase, cuando el programa comienza.
La palabra static permite que main sea llamado por el intérprete de Java antes de que se cree cualquier objeto .
La palabra void indica al compilador que main no devuelve ningún valor.
String args[], declara una variable args que es una especie de vector que puede contener cadenas de caracteres.
Sintaxis del método main
31
// Este es el esqueleto de un programa en Javaclass <nombre del Programa> {
/* Definiciones globales*/
public static void main (String args[]){
/* Definiciones locales*/......
/* cuerpo de instrucciones */......
}}
Aquí se definen las variables que solo voy a utilizar en el método principal.
Sintaxis del método main
Después de cada instrucción se coloca ;
32
Identificadores
Nombran variables, funciones, clases y objetosComienza con una letra, un subrayado (_) o un símbolo de dólar ($). Los siguientes caracteres pueden ser letras o dígitosNo se permiten vocales acentuadas ni ñSe distinguen las mayúsculas de las minúsculas
33
Identificadores (2)
No tienen longitud máximaLa forma básica de una declaración de variable, por ejemplo, sería:
tipo identificador [ = valor][,identificador [= valor] ...];
Ejemplo de constante: final float PI = 3.14159;
34
Identificadores (3)
No existen reglas, pero es conveniente seguir unas normas para que el código sea más legible:nombre de CLASE empieza por Mayúsculasnombre de MÉTODOS y ATRIBUTOS por minúsculaslas CONSTANTES con mayúsculas completamentecuando empieza una nueva palabra la ponemos en mayúsculas ej: dibujarRectangulo
35
Variables y constantes
Variables: zona de memoria cuyos valores van a cambiar durante la ejecución
Ej: int x, y, z;
Constantes: zona de memoria cuyos valores no cambian
Ej: final double PI = 3.14159265;
36
Tipos de datosEn Java existen dos tipos de datos:
Tipos primitivosTipos referencia
Los tipos primitivos son:Lógico (boolean), texto (char), entero (byte, short, int, long) y real (float, double)
Los tipos referencia son punteros a objetos
37
Tipos primitivos de datos
El tipo de un objeto determina cuánto espacio ocupa en memoria y cómo puede ser usado
Los tipos de datos primitivos en Java son:
byte, short, int, long enterosfloat, double números punto flotantechar caracterboolean valores lógicos
38
Enteros
Los tipos de datos enteros pueden ser: byte, short, int y longTodos los tipos tienen signo. El cero se considera positivo.Los enteros se representan así:
Decimal: 2, 156, 564545Octal: 077, 077700 (empiezan con cero)Hexadecimal: 0xABFF, 0xCC00 (empiezan con 0x)Long: 156L
39
Punto flotante
Existen dos tipos de datos reales: float (32 bits) y double (64 bits)Un número es de punto flotante si lleva:
Un punto decimal: 3.14159, 2.0Una E o e (valor exponencial): 105e25, 1.05E27Una F o f (float): 279F, 2.79fUna D o d (double): 279D, 2.79d
40
Caracteres y valores lógicos
El tipo de datos boolean (8 bits) puede tomar dos valores posibles: true y false.El tipo boolean no toma valores numéricosEl tipo char (16 bits) representa sólo un carácter Unicode (caracteres gráficos de todos los idiomas).
Caracteres simples: ‘a’Caracteres especiales: ‘\t’, `\n`Caracteres Unicode: `\u00BF`
41
Tipos de datos primitivos
Tipo Valor por defecto(atributos de la clase ) Valores
boolean false true o falsechar ‘\u0000’ (null) ‘\u0000’ a ‘\uFFFF’byte (byte) 0 -128 a +127short (short) 0 -32,768 a +32,767int 0 -2,147,483,648 a +2,147,483,647long 0L -9,223,372,036,854,775,808 a
+9,223,372,036,854,775,807float 0.0f -3.40292347E+38 a
+3.40292347E+38double 0.0d -1.79769313486231570E+308 a
+1.79769313486231570E+308
42
Declaraciones de variables
int i, k;
int j = 1, x;
double pi = 3.14159;
char c = ‘a’;
boolean somosFelices = true;
Las declaraciones de variables pueden ir encualquier parte del programa, pero siempreantes de que la variable sea usada.
43
/* Este programa declara algunas variables */class declaraVar {
public static void main (String args[]) {
int x, y;float z = 3.1416;double w =8.4445;boolean bandera = true;char c; String st1 =“María”;
} }
Declaración de variables
44
• Se puede dar valores a las variables en el momento de su declaración• O en una instrucción de asignación independiente una vez que ha sido declarada•Se utiliza el signo = en ambos casos. Ej:
int x =5;boolean t;t = true;
Asignación de valores a variables
45
Las asignaciones también pueden ser expresiones en notación INFIJA
Ejemplo:monto = pvp * cantidad ;
Donde pvp y cantidad deberán ser variables anteriormente declaradas y con valor previo asignado
Asignación de valores a variables
46
/* Este programa asigna valores a variables */class AsignaValorVar {
public static void main (String args[]) {
int x, y, z;x = 2;y = 4;z = x * y;System.out.println(“El valor de z es “ + z);
} }
Asignación de valores a variables (2)
47
Algunas de las operaciones a utilizar en la asignación:
() indica prioridad de ejecución* multiplicación/ división decimal + , - suma, resta
Ejemplo:impuesto = ( (pvp * cantidad) * porc) ) / 100;
Asignación de valores a variables (3)
48
Expresiones y asignación
Aritméticas:suma + 20 * c / (mod % 3)
Relacionales: a > b, b >= c, c != 4, a == 0
Cadenas:“hola “+ nombre + “ hoy es “+ dia + “de”+mes
Casts:(int) pi, (pi = 3.1), (int) (Math.random()*100)+1)
49
Expresiones y asignación (2)
Asignación:a = 1;
Asignación como operador: a = b = c = d = 0;boolean cero = ( b = c - 10) == 0;
Otros: a == 1 ? a+1 : a-1
50
Operadores
Operadores Asociatividad Tipo
() izquierda a derecha paréntesis ++ -- + - ! derecha a izquierda unarios * / % izquierda a derecha multiplicativos + - izquierda a derecha aditivos < <= > >= izquierda a derecha relacionales == != izquierda a derecha de igualdad && izquierda a derecha AND lógico | | izquierda a derecha OR lógico = += -= *= /= %= derecha a izquierda asignación
ej. x += y x = x + y;
51
Conversiones de tipo
Java no reclama si un tipo de menor rango se convierte a uno de mayor rango.
byte < short < int < long < float < double
Ejemplo: int i = 1;long l = i; //ok
52
Ejemplos
l = 1000000000000;
float f = l; //ok
double d= 1.0e24;
int i = d; // Error
float f = 1.0f;
int i = f; // Error
short s = i; //Error
53
Ejemplos (2)
double d = 1.0; int i = (int)d; //ok
int i = 256;
byte b = (byte)i; /*ok pero
b ==0 */
54
Para mostrar un texto por pantalla se usan las siguientes instrucciones:
• System.out.println (texto);• System.out.print (texto);
La primera imprime “texto” en la pantalla y deja el cursor en la siguiente línea
La segunda imprime “texto” en la pantalla y deja el cursor inmediatamente después de texto.
Salida de datos
55
Para obtener los valores de las variables desde teclado, usamos el programa creado llamado LeerTeclado:
Variable = LeerTeclado.readTipode variable();Ejemplos:Numero1 = LeerTeclado.readInt();Numero2 = LeerTeclado.readDouble();Nombre = CTeclado.readLine();EstadoCivil = LeerTeclado.readChar();
Lectura de datos
56
// Programa que lee dos números y los sumaimport LeerTeclado;class Sumar {
public static void main (String args[]){int v1,v2;System.out.println("Introduzca v1");v1 = LeerTeclado.readInt();System.out.println("Introduzca v2");v2 = LeerTeclado.readInt();System.out.println("La suma es "+
(v1+v2));}
}
Ejemplo de programa
57
Programación estructurada
Simplifica la estructura de un programaReduce las opciones y facilita la legibilidad de los programasEstructuras tienen:
Un punto de entrada y Un punto de salida
Permite estructuras anidadasFocaliza la atención en un punto cada vez
?
58
Agrupación de sentenciasDonde se puede escribir una sentencia, se puede escribir un grupo de sentencias agrupadas dentro de llaves
sentencia //simple
{sentencia;sentencia; …;
sentencia;} //compuesta
59
; es un terminador
Toda sentencia en Java debe terminar con un ;Existe la sentencia vacía, por lo cual podemos poner varios ; seguidos ;;;;;Algunas estructuras como switch no van seguidas de ;
60
Programación estructurada
Estructura secuencialacción1; acción2; acción3;
Estructuras condicionalesif (condición) acción1 [else acción2]switch (selector) {case valor1; acción1;
case valor2; acción2; … ;case valorn: acciónN}
Estructuras repetitivaswhile (condición) acción;do {acción} while condición;for (inicialización; condición; actualización) acción;
61
Estructura condicional
condición
acción1
TrueFalse
acción2
if (condición) {acción1;
}else {acción2;
}
62
Estructuras condicionales
De acuerdo al resultado de la evaluación de una condición se realiza una acción u otraSintaxis:
if (condición) acción;if (condición) {acción1; acción 2;…;acciónN}if (condición) acción1 else acción2;if (condición) {acción1; …;acciónN} else{acción1; ..;acciónN}
63
Ejemplo de condicional…if(calif >= 70)
System.out.println(“Aprobado”);else {
System.out.println(“Reprobado”);System.out.println(“Cursar de nuevo materia”);
}…
64
Raíces ecuación segundo grado
class Raices2g {. . .D=(b*b) - (4*a*c);if (D>=0) { // raices reales
x1=((-b)+Math.sqrt(D))/2*a;
x2=((-b)-Math.sqrt(D))/2*a;System.out.println("x1= "+x1);System.out.println("x2= "+x2);}
else {//soluciones imaginarias
r = -b/(2*a);
i = (Math.sqrt(-D)/2*a);System.out.println("x1= "+r+" + "+i+"i");System.out.println("x2= "+r+" - "+i+"i");}
...
65
Condiciones anidadas
if (calif>=90)System.out.println(“A”)
else if (calif>=80)System.out.println(“B”)
else if (calif >= 70)System.out.println(“C”)…
66
Ejemplo condicionales anidados
{int mes;if (mes==1) System.out println (“Enero”);else if (mes == 2) System.out.println (“ Febrero”);...else if (mes == 12) System.out.println (“Diciembre”)
else System.out.println (“ Error”);...
}
67
Condicionales anidados
Muchos if anidados dificultan la comprensión del programaProblemas de ambigüedad en el anidamiento de ifs:if (C1) if (C1)
if (C2) acción1 if ( C2) acción1else acción2 else acción2
68
Condicionales anidados
El compilador de Java siempre asocia un else con el if más cercano:
if (condición1) acción;if (condición2) acción2;else acción 3;
Para cambiar esta regla debemos usar llavesif (condición1) {acción1;if(condicion2) accion2;
} else acción3;
69
Sentencia switch
Caso general de ifswitch (selector) {
case valor1: acción1;case valor2: acción2;
…;case valorn: acciónN;[default : acciónM] }
70
Sentencia switch
int llave;......switch (llave) {
case 3 : ......break;
case 2: ......break;......
case <valor>: .......break;
default:......break;
}...
llave puede ser de tipobyte, char, short, int, long
Ejecuta a partir del case que cumpla.
llave == valorHay que insertar break para no ejecutar los siguientes casosEl default es opcional
71
Sentencia switch: case
El selector debe ser un valor constantecase 2case 1+1case uno + 1 // uno constante entera que vale 1
Se pueden poner varios cases juntos:case ‘d’: case ‘D’se ejecutan las sentencias asociadas si la expresión de control coincide con alguna de los valores del case
72
Sentencia switch: case (2)
El último case no necesita break, pero se suele poner por simetría y claridadSi se escribe más de una sentencia, no se necesitan escribirlas entre llaves ({})Si escribimos dos case con el mismo valor de selector, se produce un error en tiempo de compilación
73
Calculadora//Calculadoraimport LeerTeclado.*;class Calculadora {public static void main (String args[]) {
char operador;int n1,n2, resultado;
n1= LeerTeclado.readInt();operador= LeerTeclado.readChar();n2= LeerTeclado.readInt();...
74
Calculadora (2)switch (operador) {case ‘+’: resultado= n1 + n2;
break;case ‘-’: resultado= n1- n2;
break;case’/’: resultado= n1/n2;
break;default: resultado=0;}System.out.println (“->” + resultado);}}
75
Estructuras repetitivas
Permiten la ejecución repetida de un grupo de sentenciasPueden ser:
while (condición) acción;do acción while (condición);for (inicialización; condición; actualización)
76
Estructura while
while (condición) {acción;
}
condición acciónTrue
False
77
Ejemplo while
public class MCD {//calculo del maximo comun divisor entre 15 y 24public static void main(String args[ ]) {
int x = 15, y = 24;while (x != y) {
if (x < y)y = y - x;
elsex = x - y;
}System.out.println(“el MCD entre 15 y 24 es “ + x);
}}
78
Estructura do-while
do {acción;
} while (condición);
False
condición
acción
True
79
Ej: constante de Euler// Constante de Eulerclass Euler {public static void main (String arg[]) {int i;double e, ei;i=0; ei=1; //entero ->reale= ei;do {
i++;ei= ei/i; // real / entero -> reale=e+ei;System.out.println (“e=” + e);
} while (ei> Math.pow(1, -10));}
}
80
Estructura for
condición
Inicialización
actualizaciónacciónTrue
False
81
Estructura for
for(inicialización; condición; actualización) acción;
inicialización: se pueden inicializar, e incluso declarar, cualquier número de variablescondición: si es verdad se sigue el ciclo (bucle) actualización: actualiza varias variables (modifica valor)
for(int i=0; i<10; i++) {System.out.println(i);}
for(int i=1, j=2 (j<10)&&(i>2); i++, j=j+i) acción;
82
Ejemplos
i=1; while (i<=10) {System.out.println(i); i= i+1}i=1; do {System,out.println(i); i: =i+1} while(i<=10);for (i=1; i <=10; i++) {System.out.println (i); }
Ejemplo: cálculo del factorial de un número enterofact= 1; for(i= n; i >= 1; i--) {fact = fact *i;}
83
Elección de estructura
Si 1 ó más veces, elegir do { } while ();Si 0 ó más veces, elegir while () {}Si número fijo de veces, elegir for
Aunque en realidad todo se puede escribir con for´s y resulta más cómodo y compacto.
84
Programación orientada a objetos
MSc. Lic. Carla Salazar SerrudoLic. Victor Hugo Montaño
Carrera de Informática y SistemasUMSS - 2003
85
Orientación a Objetos
El concepto surge en los lenguajes de programación
Se organiza el software como una colección de objetos discretos que encapsulan
Estructuras de Datos yComportamiento.
Un sistema OO funciona mediante la colaboración entre los objetos que se comunican entre sí
86
Orientación a Objetos (2)
El concepto se extiende a los métodos de análisis y diseño
Se utilizan los objetos del mundo real como base para construir modelosLos elementos que forman los sistemas del mundo real se corresponden con objetos software
87
Clases y objetos
ClaseAtributosOperacionesComportamiento
Lavadora
marcamodelocapacidad: integer...
Programar()PonerRopa()CerrarPuerta()Lavar(...)Objeto
Valores de los atributosEstadoIdentidad
ID:Lavadora
marca=“Lapava”capacidad=5estado=centrifugando
88
Conceptos POOClases: patrones que indican cómo construir los objetosObjetos: instancias de las clases en tiempo de ejecución
Ej: plano de un casa vs casa hechaMiembros de una clase:
Atributos: propiedades de los objetosMétodos: comportamiento de los objetos
89
Conceptos POO (2)Cada objeto tiene características reconocibles
Un empleado tiene CI, nombre, sueldo, ...Cada objeto es único:
El empleado1 es Juan Pérez con CI 335566 y sueldo 3000 Bs.
Los objetos realizan operaciones sobre sus atributos
90
Ejemplo clase y objeto
ClaseAtributosMétodos
Empleado
CI: 336655
MostrarCI();MostrarNombre();
91
Ejemplo mínimo de POOclass MinimoPOO {public static void main (String args[]) {
Pizarra obj = new Pizarra();Pizarra.mostrar();
}}class Pizarra {public void mostrar(){
System.out.println(“Ejemplo objeto”);}
}
92
Paso de mensajes
:MandoADistancia :Televisor
Conectar()
Canal(4)
Invocación de métodosMedio de colaboración entre objetosEj: un objeto mando a distancia puede encender un televisor. También puede sintonizar canales
93
Sintaxis de clase
class < NombreClase> {
// declaración de atributos
<tipo> <variable>;
// declaración de métodos
<tipo> <nombreMétodo>(<argumentos>)
{ ... }
}
94
Sintaxis de clase (2)
El nombre del fichero Java debe coincidir con el de la clase definida en él. Ej: NombreClase.javaEs recomendable definir una clase por cada fichero Java
95
Ejemplo de claseclass Hora {
// atributos
int hora;
int min;
int seg;
// métodos
void asignarHora (int h){
hora = h; }
}
96
Creación de un objeto
Se utiliza la palabra reservada new<refObjeto> = new <NombreClase>();
Ejemplo:Hora clases;
clases = new Hora();
hora min seg
0xFF000000
clases
97
Acceso a los miembros de un objeto
Usando el operador punto (.) se puede acceder a los atributos y a los métodos
<refObjeto>.<atributo><refObjeto>.<método>()
Ejemplo:Hora clases = new Hora();clases.hora = 14;clases.min = 15;clases.asignarHora(11)
98
MétodosLos métodos son bloques de código (subprogramas) definidos dentro de una claseUn método tiene acceso a todos los atributos de su clasePueden ser llamados desde cualquier sitio.Todos los programas se inician main
99
Definición de métodos<tipoRetorno> <nombreMétodo> (<lista de argumentos>) {
<bloqueCódigo>
}
<TipoRetorno>: Tipo de dato que retorna el método. Puede ser primitivo o referencia. Sino devuelve valor, debe ser void<lista de argumentos>: Argumentos separados por comas: (tipo1 var, tipo2 var2, ...)
100
Definición de métodos (2)<bloqueCódigo> : Conjunto de sentencias que implementan la tarea que debe realizar el métodoSi devuelve un valor, se debe usar la sentencia return:
return <valor>
<valor>: Debe ser del mismo <tipoRetorno>con que se ha declarado el método. Si se necesitan, se pueden declarar variables locales
101
Ejemplosdouble areaCirculo(double r) {
return r*r*PI;
}
void imprimirHola() {
System.out.println(“hola”);}
String horaFormato(int h, int m){
return h+ “:”+ m;}
102
Paso de argumentosEn Java solo existe el paso de argumentos por valorEl método recibe una copia de los argumentosEl valor de los argumentos de tipo primitivo no cambia fuera del métodoEl valor de los argumentos de tipo referencia no cambia fuera del método
103
Ámbito de las variables
Se disponen de tres tipos de variables:Variables miembro pertenecientes a una claseArgumentos de un método de la claseVariables locales de un método de la clase
Los argumentos de un método funcionan como variables locales
104
Ejemplo
class AmbitoVar {
int x; //variable miembro
void metodo1( int y) { //argumento
int z; // variable local
x = y + z;
}
}
105
Ámbito de variables (2)Las variables miembro son visibles desde cualquier parte de la claseLos argumentos y variables locales sólo son visibles dentro del método al que pertenecen. Dejan de existir al terminar el método.Dentro de un método, si coincide el identificador de un argumento o variable local con el de una variable miembro, sólo se accede a la variable del método
106
Puntero thisSe usa para apuntar al objeto actual dentro de un métodoCon this se hace accesible una variable miembro cuyo identificador coincide con una variable local
107
Ejemplomain ... {int a=4; EjThis obj = new EjThis();obj.x = 1;obj.metodo(a);...
}class EjThis {
int x;void metodo (int y) {int x=2;y = 3*this.x + y – x;System.out.println(y) // y = 5 }
}
108
Sobrecarga de métodos
Varios métodos con la misma tarea, pero diferentes argumentos.Un método se identifica por su nombre, tipo de retorno, número de argumentos que tiene y el tipo de cada uno de ellos.
void mostrarInt(int i) void mostrar(int i)void mostrarLong(long l) void mostrar(long l)void mostrarFloat(float f) void mostrar(float f)
109
Constructores
Un constructor es un tipo especial de método que permite construir una objeto de una claseclass Hora {
...
public Fecha () {...}
public Fecha (int h, int m, int s)
{...}
110
Constructores (2)
Los constructores no tienen tipo de retorno.Se usan con la palabra reservada newHora clase = new Hora(14, 15, 0);
Se pueden sobrecargar y son opcionalesEn el constructor se inicializan variables miembro
111
Destructores
No existen destructores de objetos en JavaEl garbage collector es el que libera la memoria de objetos
112
Arreglos
Los estructuras de memoria que almacenan en una variable múltiples valores del mismo tipo.Los arreglos son objetos, se crean con la palabra newSe usan corchetes [] para declarar el arreglo y para acceder a sus elementos
113
Arreglos (2)
Se puede averiguar el largo de un arreglo: int largo = a.length;
length es un campo del objeto arreglo y no un método. El primer elemento del arreglo está en la posición 0 y el último en la posición length-1 Se puede asignar un arreglo a otro
114
Arreglos(3)
Declaración:tipoDeElementos[] nombreDelArreglo = new
tipoDeElementos[tamañoDelArreglo];
Creación:un arreglo vacío:
int []lista = new int[50];con valores iniciales:
String [] nombres = {"Juan","Pepe","Pedro"};
115
Arreglos (4)
Se pueden declarar como:int[] A; int A[];
Esto es la declaración del puntero al arreglo, no se especifica tamaño en la declaración;Inicialización:A = new int[10];
int[] A = new int[10];
116
Ejemplosint [] digitosPares = {0,2,4,6,8}
String [] dias = {“lunes”, “martes”,“miércoles”, “jueves” ,“viernes”, “sábado”, “domingo” }Hora [] clases = {new Hora(8,15),
new Hora(9,45), new Hora(11,15),new Hora(14,15) }
Recorrido:for (int i=0; i < dias.length, i++)
System.out.println(dias[i]);
117
Arreglos multidimensionalesLos arreglos anteriores eran de una sola dimensiónPara tener más dimensiones se necesita un par de corchetes para cada dimensión.
Int [] unAño = new int [12]Int [][] tresAños = new int[3] [12]// tresAños es un arreglo de tres elementos, donde cada elemento es un arreglo de dimensión 12.
118
Arreglos multidimensionalesInicialización:
int [][] matriz = new int [2][3];matriz[0][0]= 1; matriz[0][1]= 2; matriz[0][2]= 3; matriz[1][0]= 4; matriz[1][1]= 5; matriz[1][2]= 6;
Equivalente a:int [][] matriz = {{1,2,3},
{4,5,6}};
119
Clase Math
La clase Math de Java provee de los métodos matemáticos típicos:
Math.sqrt(x)Math.sin(x)Math.max(x,y)Math.pow(x,y)Math.PI // constante PIMath.E // constante E
No es necesario importarla, está disponible
120
Clase String
Permite el manejo de cadenasNo es necesario importarla, está disponibleCreación
String s = new String(“Hola Mundo”);String s = “Hola Mundo”;
Tamaño de un String: int i = s.length();
121
Clase String(2)
k-esimo carácter: char c = s.charAt(k)
Subsecuencias: String sub = s.substring(k)
String sub = s.substring(inicio, fin)
Búsqueda de subsecuencias: int i = s.indexOf(“hola”);
122
Clase String(3)
Comparación: boolean iguales = s1.equals(s2);
int i = s1.compareTo(s2);
//0 si s1==s2, >0 si s1>s2, <0 si s1<s2
123
Ejemplo de substrings //Contar las apariciones de “hola” en string s:
public class Cuenta {public static void main(String args[]) {
int i , apariciones = 0;
String s = “llego y dijo hola”;while ((i = s.indexOf(“hola”)) != -1) {
++apariciones;s = s.substring(i+1);
}System.out.println(“hola aparecio “+
apariciones+ “veces”);}
}
124
Características avanzadas POOExisten tres conceptos avanzados:
Encapsulación: Permite la protección de ciertas partes de un objeto del acceso desde otros objetos externosHerencia: Jerarquía de clases basada en la agrupación de atributos y métodos comunesPolimorfismo: Tratamiento generalizado de todas las clases pertenecientes a una jerarquía de herencia
125
Encapsulación
Consiste en el agrupamiento de datos y su tratamiento en una misma estructuraPermite la protección de la manipulación externa de algunas partes de los objetosUn objeto puede tener datos y código privados de acceso restringido
126
Encapsulación(2)
Fuerza al usuario a usar una interfaz para acceder a los datos.Hace que el código sea más fácil de mantener.Se tienen modificadores de acceso para proteger los miembros de un objeto
127
Modificadores para restringir acceso
Los modificadores se colocan al principio del miembro[<modificador>] <tipo> <identificador>
[<modificador>] <tipo> <nombre> (<arg>) { ... }
Los modificadores permiten acceder a los datos o al código de manera restringida
128
Modificadores de acceso
public: Un miembro con acceso público es accesible para todos los métodos del programa. Los miembros públicos son heredados a las subclases.private: Un miembro con acceso privado es accesible sólo para todos los métodos de la clase. No se heredan.protected: Un miembro con acceso protegido es accesible por todos los métodos del paquete. Se heredan.
129
Ejemploclass Hora {public int hora;public int min;public int seg;
}...Hora h = new Hora();
h.hora = 25; // valores incorrectosh.min = 61; h.seg = 100;
...
130
Ejemplo (2)class Hora {private int hora;private int min;private int seg;
}...Hora h = new Hora();
h.hora = 25; // ERRORh.min = 61; // ERRORh.seg = 100; // ERRORint h1;h1 = h.hora; // ERROR
}
131
Ejemplo (3)class Hora {
private int hora;private int min;private int seg;public void setHora(int h){
if (h>0) && (h<25)hora = h;
}public void getHora(){
return hora;}
}...Hora h = new Hora();
h.setHora(25); h.getHora();}
132
HerenciaJerarquía de clases basada en agrupar atributos y/o métodos comunesEj: una lavadora, televisor y plancha son electrodomésticosLas clases descendientes se llaman subclasesLas clases ascendientes se llaman superclases
133
Ejemplo
Las subclases heredan características y métodos de las superclases (excepto constructores)
PlanchaTelevisor
ElectrodomésticotensiónconsumoConectarDesconectar
Lavadoracapacidad numCanales vapor
134
Ejemplo (2)
Las partes comunes de lavadora, televisor y plancha se agrupan en una clase llamada electrodoméstico.Las partes no comunes pertenecen a cada clase en particularLas subclases heredan de las superclases con la palabra extend
135
Relación “es-un”
Para saber si la relación de herencia es correcta, se plantea la pregunta ¿la subclase es una superclase?Ej: ¿la plancha es un electrodoméstico?
class Electrodoméstico {...}class Plancha extends Electrodoméstico{
boolean vapor; ...}
136
Relación “es-un” (2)class Electrodoméstico {
int tensión;float consumo;
...}
class Plancha extends Electrodoméstico {boolean vapor;
...}
137
Herencia simple
Si una clase hereda de una única clase se considera herencia simpleSi una clase hereda de varias clases se considera herencia múltipleLa herencia simple permite que el código sea reutilizable
138
Relación “tiene-un”
Una clase puede tener referencias a otros objetos de otras clasesSe diferencia de la herencia en que es necesario instanciarlos por separadoResponde a la pregunta: ¿Contenedor tiene un contenido?
139
Relación “tiene-un” (2)class Motor {
...
}
class Chasis {
...
}
class coche {
Motor m; // coche tiene un motor
Chasis ch; // coche tiene un chasis
...
}
140
PolimorfismoPolimorfismo indica muchas formasUna clase sólo tiene una forma, pero una variable que hace referencia a la superclase de una jerarquía puede tener muchas formas (una por cada subclase)Puede usarse con
Parámetros polimórficosColecciones heterogéneas
141
Polimorfismo (2)Electrodoméstico e1 = new Electrodoméstico();
Electrodoméstico e2 = new Plancha();
Electrodoméstico e3 = new Televisor();
Electrodoméstico e4 = new Lavadora();
e2.vapor = true // ERROR
((Plancha)e2).vapor = true;
142
Parámetros polimórficosclass Mascota {...}class Raton extends Mascota {...}class Gato extends Mascota {...}
class Veterinario {void vacunar (Mascota m) { ... }
}...
Veterinario doctor = new Veterinario();Gato tom = new Gato();Raton jerry = new Raton();doctor.vacunar(tom);doctor.vacunar(jerry);
143
Colecciones heterogéneas
Usando polimorfismo se puede conseguir que un arreglo contenga elementos de distinto tipo.Se crea el arreglo con el tipo de la superclase
Mascota [] lista = new Mascota[3];lista[0] = new Mascota();lista[1] = new Gato();lista[2] = new Raton();
144
Colecciones heterogéneasclass Empleado {
int calcularVacaciones() { ...}}class Jefe extends Empleado {
int calcularVacaciones() { ...}}Empleado [] lista = new Empleado[100];lista[0] = new Empleado();lista[1] = new Jefe(); ...
lista[99] = new Empleado();For (int i= 0; i<lista.length; i++)
System.out.println(lista[i].calcularVacaciones());