Upload
vuongnguyet
View
227
Download
0
Embed Size (px)
Citation preview
Fundamentos de Fundamentos de InformáticaLección 6. Métodos de objetos y clasesj
Curso 2010-2011José Ángel Bañares y Pedro Álvarez2/11/2010. Dpto. Informática e Ingeniería de Sistemas.
Índice de contenidosÍndice de contenidos Abstracción Clases como mecanismo para definir abstracciones Declaración de métodos: procedimientos y funciones procedimientos y funciones. Invocación de métodos. Paso de parámetros. Métodos de clase y objeto
Diseño descendente
AbstracciónAbstracciónAbstraer, o el “método de dar nombre”,
a conceptos sobre los que construirnuestros programas Podemos asociar un nombre con una dirección de
memoria: Nombre de la variable) Podemos asociar un nombre con una “estructura” o
forma de interpretar uno o más bytes: Tipo de dato Podemos asociar un nombre con un grupo de
instrucciones java: métodoinstrucciones java: método Podemos asociar nombres a nuevas abstracciones
no soportadas por el lenguaje: nuevos tipos dedatos agrupando variables relacionadas y funcionesdatos agrupando variables relacionadas y funciones
ClasesClases En Java los programas están formados p g
por una o más clases Una de las clases define el método static void main (String[] args) agrupa las instrucciones que se ejecutarán al invocar la ejecución del programa.
Las clases del programa Java pueden definir más métodos: Nombre que damos a “instrucciones” definidas por el Nombre que damos a “instrucciones” definidas por el
programador y no soportadas directamente en el lenguaje
Diseño top-down: Descomposición del problema en Diseño top-down: Descomposición del problema en subproblemas.
ClasesClases Las clases permiten definir nuevas p
“abstracciones” que agrupan: datos (fields): agrupación de datos. Métodos (methods):acciones que se pueden
con la abstracción.
Las nuevas abstracciones pueden ser: Programas
N ti d d t Nuevos tipos de datos Librería de funciones (por ej. Math).
Declaración de métodosDeclaración de métodosDeclaración del métodoModificadores tipo nombre (parámetros) {
Variables y sentenciasreturn expresión; //del tipo declaradop ; // p
}
El tipo void
Ti i iti ( t l á t b l ) Tipo primitivo (entero,r eal, carácter, booleano) Clase
Procedimientos / Acciones (void)(void)public class DibujaCaja{static void caja(){static void caja(){System.out.println("+-----------+");System.out.println("+ +");System out println("+ +"); DeclaraciónSystem.out.println( + + );System.out.println("+-----------+");
} public static void main (String[] args){
Declaración
p ( g[] g ){caja();
}}
Invocación métodoestático definido en la clase}
+-----------++ ++ ++ ++-----------+
Procedimientos / Acciones (void)(void)public class DibujaCaja{static void caja(){static void caja(){System.out.println("+-----------+");System.out.println("+ +");System out println("+ +"); DeclaraciónSystem.out.println( + + );System.out.println("+-----------+");
} public static void main (String[] args){
Declaración
p ( g[] g ){DibujaCaja.caja();
}}
InvocaciónInvocación métodoestático definido en la clase}
+-----------++ ++ ++ ++-----------+
Funciones (valores)public class LiberiaMat {public class LiberiaMat {public static double E (){final double PRECISION= 1E-5; Declaración
double termino = 1.0;double exp = termino;double indice = 1;
while (termino > PRECISION){termino = termino /indice;exp+=termino;indice++;
}return exp;
}
bli t ti id i (St i [] ){public static void main (String[] args){System.out.println(E()+1);} 3.7182815255731922
Invocación
Llamadas a métodosLlamadas a métodosDeclaración del métodoDeclaración del método
Método (parámetro) - Declarado en la propia clasej () caja();
Clase. Método(parámetros) - Declarado estático en otra claseDibujaCaja.caja();
Objeto método (parámetros) Declarado en otro objeto Objeto.método (parámetros) - Declarado en otro objeto v1.length
Paso de parámetrosPaso de parámetros El valor devuelto o la acción puede depender de p p
parámetrosDeclaración parámetos formales (o parámetros)Modificadores tipo nombre (tipo variable, tipo variable ..) {
Variables y sentenciasreturn expresión; //del tipo declaradop ; // p
}
Argumentos o parámetros reales(expresion, expresion, ...)
caja(5,5); Math.exp(2);p( );
Paso de parámetrosPaso de parámetrosDeclaración parámetos formales (o parámetros)static void caja (int anchura int profundidad)static void caja (int anchura, int profundidad)
h
Método cajatamaño
A t á t l
anchura
6060
tamaño
Argumentos o parámetros realesInt tamaño= 60;caja(tamaño,(int) tamaño/2);
profundidad
30
Variable e instrucciones instrucciones del método
caja
Paso de parámetrosPaso de parámetros En Java se pasan el valor de los p
argumentos
Si es un tipo primitivo Si es un tipo primitivo No se puede modificar el valor.
Si bj t l “ t ” l Si son objetos se pasa el “puntero” al objeto. Se puede modificar el estado del objeto Se puede modificar el estado del objeto.
Nota: En lenguajes como Ada se distingue parámetros de entrada, salida, e/sde entrada, salida, e/s.
Declaración de métodosDeclaración de métodosDeclaración del métodoModificadores tipo nombre (parámetros) {
Variables y sentenciasreturn expresión; //del tipo declarado
Modificadores
p ; // p}
Modificadores public: Puede invocarse por otras clases static: Método de clase static: Método de clase final: Como los atributos final, supone que el
compilador puede sustituir la invocación porlas sentencias del método.
Métodos de clase y objetoMétodos de clase y objetoCuando la clase define nuevos tipos de
d t d bj t d l tidatos, podemos crear objetos del tipoespecificado.int[] listaEnteros =new int[] {5 4 1};int[] listaEnteros =new int[] {5,4,1};
Los objetos agrupan datos y tienen estado listaEnteros[1] =2;
método de objeto: El resultado depende del estado del objeto listaEnteros.length;j g ;
Método de clase: El resultado no depende del estado Math.abs(-1);
Métodos de clase (static)Métodos de clase (static) Invocación método de clase
NombreClase.NombreMetodo();NombreObjeto.NombreMetodo();> Character.getNumericValue('a')
10
h b ( 1)> Math.abs(-1)
1
Dentro de la clase en la que se define el método se puede invocar utilizando sólo el nombre del método
NombreMetodo();NombreMetodo();
Métodos de objetoMétodos de objeto Invocación método de objetoj
NombreObjeto.NombreMetodo();
> String nombre = "El mono lleva kimono";
> System.out.println(nombre);
El mono lleva kimonoEl mono lleva kimono
> String nombreMinuscula=nombre.toLowerCase();
> System.out.println(nombreMinuscula);
el mono lleva kimono
Métodos de objetoMétodos de objeto Todos los métodos de la clase String nog
cambian el String original. Devuelven unnuevo String. Los String son inmutables.
> String nombreMayuscula=nombre.toUpperCase();
> System out println(nombreMayuscula);> System.out.println(nombreMayuscula);
EL MONO LLEVA KIMONO
> System.out.println(nombre);
El mono lleva kimono
> nombre = nombre.toUpperCase();
> S stem o t println(nombre)> System.out.println(nombre);
EL MONO LLEVA KIMONO
Declaración de métodos finalfinalpublic static final void f() {
System.out.println(”método f() de A");}
}// i é i// La clase B invoca un método finalpublic class B {public void g() {A f()A.f();
}}//En tiempo de compilación nuestra clase B se convierte en://En tiempo de compilación nuestra clase B se convierte en:public class B {public void g() {System out println("método f() de A");System.out.println( método f() de A );
}}
Diseño descendenteDiseño descendente Problema: Dibujar tabla con caracteres j
‘+’, ‘-’, ‘ ‘número espaciosp
+---+---+---+
+ + + ++ + + +
Número filas +---+---+---+
+ + + +
+---+---+---+
número columnas
Diseño descendenteDiseño descendente Problema: Dibujar tabla con caracteres j
‘+’, ‘-’, ‘ ‘número espaciosp
+---+---+---+ dibLHoz
+ + + + dibLSep+ + + + dibLSep
Número filas +---+---+---+ dibLHoz
+ + + + dibLSep
+---+---+---+ dibLHoz
número columnas
Diseño descendenteDiseño descendenteCuadrados (Pb)
dibLHoz;for (int i=1;i<=nf; i++){
dibLSep;dibLHoz;
}
dibLHoz (Pb 1) dibLSep (Pb2)System.out.print('+');for (int i=1; i<=nc; i++) {
escribeGuiones(ne);
dibLHoz (Pb 1)System.out.print(‘+');for (int i=1; i<=nc; i++) {
escribeBlancos(ne);
dibLSep (Pb2)
escribeGuiones(ne);System.out.print('+');
}System out println();
escribeBlancos(ne);System.out.print(’ ');
}System out println();System.out.println(); System.out.println();
Diseño descendenteDiseño descendente
dibLH (Pb 1) dibLS (Pb2)Cuadrados (Pb)
System.out.print('+');for (int i=1; i<=nc; i++) {
dibLHoz (Pb 1)System.out.print(‘+');for (int i=1; i<=nc; i++) {
dibLSep (Pb2)
escribeGuiones(ne);System.out.print('+');
}S t t i tl ()
escribeBlancos(ne);System.out.print(’ ');
}System.out.println(); System.out.println();
f ( 1 )Escribir-guiones ( Pb1.1) Escribir-blancos (Pb 1.2)
for(int i=1; i<=n; i++) System.out.print('-');
for(int i=1; i<=n; i++) System.out.print(’ ');
Diseño descendentes sin métodosmétodos
import java.util.Scannerpublic class Cuadrados {public class Cuadrados {
static void main(String[] args){Scanner entrada = new Scanner(System.in);( y );
System.out.print("Numero filas:");int nf = entrada.nextInt();()System.out.print("Numero columnas:");int nc = entrada.nextInt();System.out.print("Numero espacios:");int ne = entrada.nextInt();
Diseño descendentes sin métodosmétodos
//Dibujar Linea Horizontal
System.out.print('+');for (int i=1; i<=nc; i++) {
for(int j=1; j<=ne; j++) ( j ; j ; j )System.out.print('-');
System.out.print('+');}}System.out.println();
Diseño descendentes sin métodos for (int i=1;i<=nf; i++){métodos for (int i=1;i<=nf; i++){
//Dibujar linea separaciónSystem.out.print('+');for (int l=1; l<=nc; l++) {for (int l 1; l< nc; l ) {
for(int j=1; j<=ne; j++) System.out.print(' ');
System.out.print('+');y p ( );}System.out.println();
//Dibujar Linea HorizontalSystem.out.print('+');for (int l=1; l<=nc; l++) {
for(int j=1; j<=ne; j++) System.out.print('-');
System.out.print('+');}}System.out.println();
}
Métodos con parámetros 0Métodos con parámetros 0import java.util.Scanner;
public class Cuadrados {
public static void dibLineaH(int ne, int nc){System.out.print('+');for (int i=1; i<=nc; i++) {( ) {
for(int j=1; j<=ne; j++) System.out.print('-');
System.out.print('+');}System.out.println();
}
Métodos con parámetros 0Métodos con parámetros 0public static void dibLineaSep(int ne, int nc){public static void dibLineaSep(int ne, int nc){
System.out.print('+');for (int i=1; i<=nc; i++) {
for(int j=1; j<=ne; j++) ( j ; j ; j )System.out.print(' ');
System.out.print('+');}}System.out.println();
}
Métodos con parámetros 0Métodos con parámetros 0public static void main(String[] args){
Scanner entrada = new Scanner(System.in);Scanner entrada new Scanner(System.in);
System.out.print("Numero filas:");int nf = entrada.nextInt();();System.out.print("Numero columnas:");int nc = entrada.nextInt();System.out.print("Numero espacios:");y p ( p )int ne = entrada.nextInt();
dibLineaH(ne,nc);for (int i=1;i<=nf; i++){
dibLineaSep(ne,nc);dibLineaH(ne,nc);
}}}}
Métodos con parámetros IMétodos con parámetros Iimport java.util.Scanner;
public class Cuadrados1 {
public static void escribeGuiones (int n){p ( ){for(int i=1; i<=n; i++)
System.out.print('-');}}
public static void escribeBlancos (int n){for(int i=1; i<=n; i++)
System.out.print(' ');}
Métodos con parámetros IMétodos con parámetros Ipublic static void dibLineaH(int ne, int nc){
System out print('+');System.out.print( + );for (int i=1; i<=nc; i++) {
escribeGuiones(ne);System.out.print('+');y p ( );
}System.out.println();
}}public static void dibLineaSep(int ne, int nc){
System.out.print('+');for (int i=1; i<=nc; i++) {
escribeBlancos(ne);System.out.print('+');
}S ()System.out.println();
}
Métodos con parámetros IMétodos con parámetros Ipublic static void main(String[] args){
Scanner entrada = new Scanner(System.in);Scanner entrada new Scanner(System.in);
System.out.print("Numero filas:");int nf = entrada.nextInt();();System.out.print("Numero columnas:");int nc = entrada.nextInt();System.out.print("Numero espacios:");y p ( p )int ne = entrada.nextInt();
dibLineaH(ne,nc);for (int i=1;i<=nf; i++){
dibLineaSep(ne,nc);dibLineaH(ne,nc);
}}}
Métodos con parámetros IMétodos con parámetros Iimport java.util.Scanner;
public class Cuadrados1 {
public static void escribeGuiones (int n){p ( ){for(int i=1; i<=n; i++)
System.out.print('-');}}
public static void escribeBlancos (int n){for(int i=1; i<=n; i++)
System.out.print(' ');}
Métodos con parámetros IIMétodos con parámetros II
public static void repiteChar (int n, char letra){for(int i=1; i<=n; i++)
System.out.print(letra);}}
Métodos con parámetros IIMétodos con parámetros IIpublic static void dibLineaH(int ne, int nc){
System.out.print('+');for (int i=1; i<=nc; i++) {
escribeGuiones(ne);S t t i t(' ')System.out.print('+');
}System.out.println();
}}public static void dibLineaSep(int ne, int nc){
System.out.print('+');for (int i=1; i<=nc; i++) {for (int i=1; i<=nc; i++) {
escribeBlancos(ne);System.out.print('+');
}}System.out.println();
}
Métodos con parámetros IIMétodos con parámetros IIpublic static void dibLinea(int ne, int nc, char inicial, char separacion){
System.out.print(inicial);for (int i=1; i<=nc; i++) {
repiteChar(ne, separacion);S t t i t(i i i l)System.out.print(inicial);
}System.out.println();
}}
Métodos con parámetros IIMétodos con parámetros IIimport java.util.Scanner;
public class Cuadros {
bli t ti id it Ch (i t h l t ){public static void repiteChar (int n, char letra){for(int i=1; i<=n; i++)
System.out.print(letra);}}public static void dibLinea(int ne, int nc, char inicial, char separacion){
System.out.print(inicial);for (int i=1; i<=nc; i++) {for (int i=1; i<=nc; i++) {
repiteChar(ne, separacion);System.out.print(inicial);
}}System.out.println();
}
Métodos con parámetros IIMétodos con parámetros IIpublic static void main(String[] args){
Scanner entrada = new Scanner(System.in);
System.out.print("Numero filas:");i t f t d tI t()int nf = entrada.nextInt();System.out.print("Numero columnas:");int nc = entrada.nextInt();System out print("Numero espacios:");System.out.print("Numero espacios:");int ne = entrada.nextInt();
dibLinea(ne nc '+' ' ');dibLinea(ne,nc, + , - );for (int i=1;i<=nf; i++){
dibLinea(ne,nc,'+',' ');dibLinea(ne nc '+' '-');dibLinea(ne,nc, + , );
}}