Introducción&ala...

6
31/01/12 1 Introducción a la Programación Métodos Curso de Programación en Java Luis Guerra [email protected] Enero 2012 Introducción La mayor parte de los programas que resuelven problemas reales conFenen un alto número de líneas de código Cientos de miles de líneas La experiencia ha demostrado que la mejor manera para desarrollar y mantener programas de cierta complejidad es el construirlos a parFr de piezas pequeñas o módulos Técnica divide y vencerás Módulos En Java hay tres Fpos de módulos: Métodos Clases Paquetes El API (ApplicaFon Programming Interface) de Java ofrece varios módulos Objetos y Métodos Un objeto está compuesto de: Estado: variables de instancia variables de clase comparFdas (ya se verán) Métodos de instancia de clase Introducción I Los métodos describen los mecanismos para realizar las acciones/tareas de los objetos Aísla al usuario (del objeto) de las tareas complejas que realiza En otros lenguajes: funciones y procedimientos Introducción II Para promocionar la reusabilidad cada método debería estar limitado a realizar un tarea muy concreta El nombre de esa tarea Fene que expresar claramente la acción del método Un método que realiza una única tarea es más sencillo de comprobar y de depurar que uno que realice varias

Transcript of Introducción&ala...

31/01/12  

1  

Introducción  a  la  Programación  

Métodos  Curso  de  Programación  en  Java  

   

Luis  Guerra  [email protected]  

Enero  2012    

Introducción  

!   La  mayor  parte  de  los  programas  que  resuelven  problemas  reales  conFenen  un  alto  número  de  líneas  de  código  !   Cientos  de  miles  de  líneas  

!   La  experiencia  ha  demostrado  que  la  mejor  manera  para  desarrollar  y  mantener  programas  de  cierta  complejidad  es  el  construirlos  a  parFr  de  piezas  pequeñas  o  módulos  !   Técnica  divide  y  vencerás  

Módulos  

!   En  Java  hay  tres  Fpos  de  módulos:  !   Métodos  !   Clases  !   Paquetes  

!   El  API  (ApplicaFon  Programming  Interface)  de  Java  ofrece  varios  módulos  

Objetos  y  Métodos  !   Un  objeto  está  compuesto  de:  

!   Estado:  !   variables  de  instancia  !   variables  de  clase  

!   comparFdas  (ya  se  verán)  

!   Métodos  !   de  instancia    !   de  clase  

Introducción  I  

!   Los  métodos  describen  los  mecanismos  para  realizar  las  acciones/tareas  de  los  objetos  

!   Aísla  al  usuario  (del  objeto)  de  las  tareas  complejas  que  realiza  

!   En  otros  lenguajes:  funciones  y  procedimientos  

Introducción  II  

!   Para  promocionar  la  reusabilidad  cada  método  debería  estar  limitado  a  realizar  un  tarea  muy  concreta  !   El  nombre  de  esa  tarea  Fene  que  expresar  claramente  la  acción  

del  método  

!   Un  método  que  realiza  una  única  tarea  es  más  sencillo  de  comprobar  y  de  depurar  que  uno  que  realice  varias  

31/01/12  

2  

Introducción  III  

!   Permiten  modularizar  un  programa  separando  sus  tareas  en  unidades  auto  contenidas  

!   Ventajas:  !   Divide  y  vencerás  !   ReuFlización    !   Evitar  duplicidad  

!   Facilita  la  depuración  y  el  mantenimiento  

!   En  Java  todo  método  Fene  que  pertenecer  a  una  clase  !   El  programa  principal  main  es  un  método  de  una  clase  

 

Introducción  IV  

!   Como  ya  se  vio  en  el  capítulo  de  introducción,  los  objetos  interactúan  por  medio  de  mensajes  

!   Un  objeto  le  pide  a  otro  que  realice  una  acción  (ejecuta  el  método  X)  

!   El  objeto  llamado  realiza  la  acción  pudiendo  devolver  un  resultado  !   puede  no  devolver  nada  

!   El  objeto  llamante  no  conoce  los  detalles  de  cómo  se  lleva  a  cabo  la  acción  

¿Como  funciona  un  programa  orientado  a  objetos?  

Cocina  

No  hay  café  

Tienda  

Comprar  café  

Café  

Buscar  el  café  

Esquema  general  

Método(a1, ..., an)

a1 a2 an

...

resultado

Argumentos

Método

Valor de retorno Puede  no  

devolver  un  resultado  

Declaración    

(static) tipo identificador (parámetros ...) {

...

sentencias

...

}

Normalmente,  se  suelen  uFlizar  nombres  compuestos  de  varias  palabras  y  se  escribe  en  mayúsculas  la  primera  letra  de  cada  palabra  exceptuando  la  primera  Ej:  preguntarNombreUsuario  

Uso  de  un  método  

!   Se  invoca  proporcionando  valores  a  los  argumentos  de  llamada  

!   El  valor  de  retorno  se  devuelve  por  medio  de  un  return  

!   Se  admiten  métodos  que  no  devuelvan  nada  !   Fpo  void  como  Fpo  de  retorno  

!   Sólo  con  este  Fpo  no  es  obligatorio  usar  la  sentencia  return  

31/01/12  

3  

Ejemplo  

!

static int suma(int a, int b) {!

int resultado;!

resultado = a+b;!

return resultado;!

}!

!

 

 

static void imprimeHola() {!

System.out.println(“hola”);!

}!

!

 

 // Llamadas!int resultado = suma(2,3);!int d=4, f=5;!suma(d,f);!imprimeHola();!  

Paso  de  parámetros  

!   Paso  por  valor:  !   La  función  trabaja  con  una  copia  del  valor  del  argumento  !   Se  considera  un  parámetro  de  entrada  

!   Las  operaciones  dentro  de  la  función  no  afectan  a  las  variables  de  entrada  

Ejemplo  

static int incremento (int a) {!

a = a + 1;!

return a;!

}!

public static void main(String[] args) {!

int b = 0;!

incremento(b); //Cuánto vale b una vez se ejecute el método!

}!

!

Ejemplo  

static int incremento (int a) {!

a = a + 1;!

return a;!

}!

public static void main(String[] args) {!

int a = 0, b=1;!

incremento(a); //Cuánto vale a una vez se ejecute el método!

}!

!

0  

0   1  

Ejemplo  

static int incremento (int a) {!

a = a + 1;!

return a;!

}!

public static void main(String[] args) {!

int a = 0, b=1;!

incremento(a); //Cuánto vale a una vez se ejecute el método!

}!

!

1  

0   1  

Bloque  

!   Un  conjunto  de  sentencias  contenidas  dentro  de  un  par  de  llaves  

!   Ya  hemos  visto  varios:  

int suma(int a, int b) {! int resultado;! resultado = a+b;! return resultado;!}!

if (condicion) {!...!}!

while(condicion) {!...!}!

for(int i=0; i<10; i++) {!...!}!

31/01/12  

4  

Variables  locales  

!   Las  variables  declaradas  dentro  de  un  método  

!   Su  ámbito  es  la  región  del  método  que  va  desde  su  declaración  al  final  del  bloque  !   No  pueden  usarse  antes  de  haber  sido  declaradas  

!   Se  crean  cuando  el  programa  llega  a  su  declaración  

!   Las  variables  de  Fpos  básicos  se  destruyen  al  finalizar  el  bloque  

!   No  se  inicializan  por  defecto  !   Si  se  intentan  usar  sin  haber  sido  inicializadas  -­‐>  ERROR  

 

Ejemplos  

static void imprime(int c) {!

System.out.println(c);!

}!

public static void main(String[] args) {!

imprime(a); !

int a = 0, b=1;!

if (a==0) {!

int c=2;!

imprime(a);!

}!

c=4;!

} !

Arrays  como  parámetros  

!   Recordatorio:  !   ¿Qué  es  un  array?  !   ¿Qué  almacena  una  variable  del  Fpo  array?  

!   ¿Qué  se  copiará  al  pasarlo  como  parámetro?  

!   ¿Qué  pasa  con  un  array  creado  en  una  función  y  devuelto  como  valor  de  retorno?  

¿Qué  es  un  array?    

10  20  30  40  

4  

50  60  70  80  

4  

int[] valores1 = {10,20,30,40};!

int[] valores2 = {50,60,70,80};!

valores1 = valores2;!

Arrays  como  parámetros  II  

!   Recordatorio:  !   ¿Qué  es  un  array?  !   ¿Qué  almacena  una  variable  del  Fpo  array?  

!   ¿Qué  se  copiará  al  pasarlo  como  parámetro?  

!   ¿Qué  pasa  con  un  array  creado  en  una  función  y  devuelto  como  valor  de  retorno?  

Arrays  como  parámetros  III  

!   Lo  que  se  copia  es  la  referencia  no  el  objeto  

!   Permite  que  se  puedan  modificar  en  métodos  disFntos  a  donde  hayan  sido  declarados  !   Los  objetos  no  son  Fpos  básicos  y  no  se  destruyen  cuando  finaliza  

su  ámbito  !   sólo  cuando  no  pueden  ser  referenciados  

!   recolector  de  basura  

!   El  parámetro  se  declara  igual  que  una  variable  local    !   Fpo[]  nombre  

31/01/12  

5  

Ejemplo  static void modifica(int[] unarray) {!

unarray[0] = 1;!

}!

public static void main(String[] args) {!

int[] valores1 = {10,20,30,40};!

modifica(valores1);!

}!

10  20  30  40  

4  

Ejemplo  static void modifica(int[] unarray) {!

unarray[0] = 1;!

}!

public static void main(String[] args) {!

int[] valores1 = {10,20,30,40};!

modifica(valores1);!

}!

1   20  30  40  

4  

Ejemplo  static int[] creaArray() {!

int[] unarray = {10,20,30,40};!

return unarray;!

}!

public static void main(String[] args) {!

int[] valores1 = creaArray();!

}!

10  20  30  40  

4  

Tipos  de  métodos  

!   En  Java  no  existen  funciones    

!   Todos  son  métodos  !   Tienen  que  estar  incluidos  en  una  clase  

!   Dos  Fpos  de  métodos  !   De  instancia  !   De  clase  

Métodos  de  instancia  

!   Tiene  que  exis4r  un  objeto  para  poder  llamarlos  !   Se  uFliza  la  variable  que  almacena  la  referencia  de  objeto  para  la  

invocación  ! Ej:    

! scanner.nextInt();  ! System.out.println(2);  

!   Pueden  acceder  a  las  variables  de  instancia  

tipo identificador (parámetros ...) {

...

sentencias

...

}

Ejemplo  public class Perro{!

String nombre;!

Perro(String nom) {!

this.nombre = nom;!

}!

void ladrar() {!

System.out.println(“Guau!”);!

}!

}!

public static void main(String[] args) {!

Perro miPerro = new Perro(“Pancho”);!

miPerro.ladrar();!

}!

31/01/12  

6  

Métodos  estáFcos  o  de  clase  

!   No  necesitan  que  exista  un  objeto  para  poder  ser  llamados  

!   Pueden  acceder  a  variables  de  clase  !   Variables  comunes  a  todos  los  objetos  

!   Clase  Coche  Toyota  Corolla  !   Nº  ventanas,  dimensiones,  ...  

!   Tienen  el  modificador  staFc  delante  de  la  declaración  del  método  

!   Se  invocan  o  bien  dentro  de  un  método  de  la  clase  o  por  medio  del  idenFficador  de  la  clase  ! Ej:  MiClase.miMetodo(1,2,3);  Math.sqrt();  

Ejemplos  

class Operaciones {!

static int suma(int a, int b) {!

return a + b;!

}!

public static void main(String[] args) {!

System.out.println(suma(2,3));!

System.out.println(Operaciones.suma(2,3));!

}!

} !

Método  Main  

!   Se  denomina  función  principal  (en  inglés:  main  funcFon)  

!   Es  un  método  de  clase  

!   Sirve  de  punto  de  inicio  del  programa  

!   Cualquier  clase  puede  tener  un  método  main  

!   Cuando  se  lanza  java  se  especifica  la  clase  que  Fene  el  Main  que  se  debe  ejecutar  

!   Si  ninguna  clase  Fene  un  main,  java  devuelve  un  error  

Estructura  

public static void main( String[] args) {

sentencias

}

Argumentos  del  Main  

!   ¿Qué  son  los  args?  !   Un  Array  pero  ¿Qué  conFene?  

!   Los  argumentos  pasado  por  la  línea  de  mandatos  

!   Cuando  ejecutamos  un  programa  podemos  pasarle  argumentos  !   Ejemplo:  opciones  del  ejecutable,  datos,  ...  java  MiPrograma  1  2  3  

!   En  args  se  encuentran  cada  uno  de  los  argumentos  pasados  en  formato  String