Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
MANAB
UNIDAD ACADMICA DE CIENCIAS TECNICAS
CARRERA DE INGENIERA EN SISTEMAS COMPUTACIONALES
MATERIA:
Sistemas Expertos
TEMA:
Unidad 4: Mtodos
Generalidades de los mtodos
Mtodos que no devuelven valores
Mtodos que devuelven valores
Arreglos tipos
Operaciones con arreglos (Orden, recorrido)
Declaracin de objetos y constructores
Herencia, subclase - superclase
Demostracin de comportamiento polimrfico
ESTUDIANTE:
VARGAS AVILEZ EDDY GERONIMO
TUTOR:
ING. Jos Paladines Moran
MTODOS EN JAVA
/* Ejemplo - aprenderaprogramar.com */
//Comentario descriptivo de qu hace el mtodo
public tipoValorDevuelto nombreDelMtodo (tipo parmetro1,
tipo parmetro2) {
Cdigo del mtodo
return ResultadoQueDevuelveElMtodo;
}
Mtodos
tipo
procedimiento:
son
mtodos
que
realizan
ciertas
/* Ejemplo - aprenderaprogramar.com */
//Comentario descriptivo de qu hace el mtodo
public void nombreDelMtodo (tipo parmetro1, tipo
parmetro2) {
Cdigo del mtodo
}
En general un mtodo con tipo de retorno void no llevar sentencia return,
aunque en Java se permite que un mtodo de este tipo incluya la sentencia
return;. Si ocurre esto, la sentencia da lugar a que el mtodo finalice en ese
punto sin ejecutar ninguna lnea ms de cdigo. Solo tiene sentido su uso
asociado a que se cumplan ciertas condiciones.
Taxi.
es
un
objeto
tipo
String.
En
cambio
la
expresin
(int
Mtodos sin parmetros: son mtodos que no piden ningn dato u objeto
para ejecutarse. Un mtodo sin parmetros se identifica porque sus
parntesis finales estn vacos. Estos mtodos no necesitan recibir
informacin para ejecutarse.
Una cuestin importante en los mtodos con parmetros es el tipo
requerido. Prueba a introducir un dato errneo. Por ejemplo, introduce el
texto gasolina cuando te pida el tipo de motor de un taxi. El resultado es
que se produce un error porque el tipo recibido no coincide con el tipo
esperado. El correcto manejo de tipos es un aspecto importante en la mayor
parte de lenguajes de programacin, incluido Java, y ser algo a lo que
debamos prestar especial atencin siempre que estemos desarrollando
cdigo.
Los constructores funcionan en buena medida de forma similar a los
mtodos y tambin podemos definir constructores con parmetros y
constructores sin parmetros. El sentido de que un constructor pida uno o
varios parmetros es tener en cuenta esos parmetros a la hora de crear un
objeto.
MTODOS CONSULTORES (GET) Y MODIFICADORES (SET)
Continuamos con el uso de mtodos en Java. Prueba a establecer distintos
valores de matrcula, distrito y tipo de motor para los diferentes objetos
Taxi. Prueba tambin a, una vez establecidos unos valores para un objeto,
volver a cambiarlos por otros valores distintos.
Hay an otra manera de clasificar los mtodos que hemos definido para la
clase Taxi:
Mtodos modificadores: llamamos mtodos modificadores a aquellos
mtodos que dan lugar a un cambio en el valor de uno o varios de los
atributos del objeto.
atributos
estos
mtodos
suelen
ir
precedidos
del
prefijo
ESTADO DE UN OBJETO.
Hemos comprobado que un objeto tiene unos atributos. Adems, si tenemos
mtodos disponibles para ello, podemos cambiar varias veces el valor de
estos atributos. Por ejemplo, al objeto taxi1 le podemos establecer
inicialmente distrito Oeste, luego distrito Norte, Sur, etc.
Llamamos estado de un objeto al conjunto de valores de los atributos del
objeto en un momento dado. Sobre el objeto taxi1, pulsa botn derecho y
elige la opcin Inspect.
/* Ejemplo - aprenderaprogramar.com */
//Esta clase es una prueba
public class miPrueba {
public String resultado (String dimeUnString) {
System.out.println ("dimeUnString inicialmente vale " +
dimeUnString);
dimeUnString = dimeUnString + " recibido";
System.out.println ("dimeUnString ahora vale " +
dimeUnString);
return "El mtodo devuelve " + dimeUnString;
}
}
utilizan.
Estructura de un metodo.
package ciclos;
/**
*
* @author xymind
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int x=0;
while(x!=7)
{
System.out.println("X vale: "+x);
x++;
}
}
}
package ciclos;
/**
*
* @author xymind
*/
public class Main {
09 /**
10 * @param args the command line arguments
11
*/
12
public static void main(String[] args) {
13
14 iniciarCiclo();//aqui estamos ejecutando el metodo escrito en
15 //la parte de abajo, se puede utilizar mas de 1 vez
16 }
17
18
/*Comienza el metodo
19 Este metodo no regresa valores, es un metodo que unicamente
20 realiza un procedimiento, por lo que se declara como "void" seguido del
21
nombre que tendra el metodo*/
22
public void iniciarCiclo(){
23
24
int x=0;
25
while(x!=7)
26
{
27
System.out.println("X vale: "+x);
28
x++;
29
30
}
31
}
32
33
}
Los dos anteriores programas hacen exactamente lo mismo a diferencia de
que el segundo programa esta utilizando un metodo.
En este ultimo ejemplo se mostrara un metodo que regrese un valor, estos
metodos
se
declaran
diferente
siempre
deben
terminar
con la palabra return var; donde var es una variable cualquiera del
mismo tipo del metodo. Ejemplo:
Declaramos el metodo:
..//
1
2
3
4
//..
Notese que se utiliza int en lugar de void, lo cual indica que se regresara
una variable del tipo integer o numerico, por lo que dentro del metodo se
declara int x=10; que es precisamente un valor numerico, y se regresa el
valor de x, es decir 10. Finalmente el metodo puede ser usado para obtener
el valor de 10 del siguiente modo. //..codigo//
1
int variable;
2
3 variable = obtenerValor(); //estamos diciendo que variable vale ahora 10.
//..mas codigo//
Distribuido.
Java se ha diseado para trabajar en ambiente de redes y contienen una
gran biblioteca de clases para la utilizacin del protocolo TCP/IP,
incluyendo HTTP y FTP. El cdigo Java se puede manipular a travs de
recursos URL con la misma facilidad que C y C++ utilizan recursos
locales (archivos).
descritas
que
evitan
la
corrupcin
de
cdigo
evitan
su
Aplicaciones
programas escritos en Java y que se ejecutan de forma independiente de
los visualizadores. Esto se realiza llamando a los intrpretes Java con el
programa como opcin.
Manipuladores de contenido.
Un programa cargado en el
primera
aplicacin
Java
@autor
jemer
@versin
1.1.0
*/
Class
Public
AplicacionEsencial
static
void
System.out.println("Hola
main
(String
{
args[])
Mundo");
}
}
Lo anterior representa el codigo de un progrma Java que se compilara
y ejecutara de la siguiente forma:
El cdigo anterior se guarda en un fichero texto cuya extensin es .java
(AplicacionEsencial.java)
Este se compila llamando a javac. El resultado de esta compilacin es un
fichero con el nombre de la clase contenida y la extensin .class
(AplicacionEsencial.class). El nombre del fichero fuente (.java podra ser
cualquiera pero dado que el resultado de la compilacin adquiere el
nombre de la clase contenida en el mismo, es buena practica el llamar al
fichero fuente con el mismo nombre.
javac
AplicacionEsencial.java
java
AplicacionEsencial.class
Hola
Mundo
$
Las partes del programa anterior son:
Comentarios: desde "/*" hasta que aparece "*/", son ignorados por el
compilador
Por
ejemplo,
por
convencin
todas
las
implementaciones
Mtodos:
Esta interfaz tiene mtodos, entre ellos:
Mediante for-each
Usando iteradores
coleccin que est siendo iterada. El mtodo remove solo puede ser llamado
una vez por llamada de next y lanza una excepcin si esta regla es violada.
El siguiente mtodo realiza una eliminacin de elementos de la coleccin
static void filter(Collection<String> c) {
for (Iterator<String> it = c.iterator(); it.hasNext(); )
if (!cond(it.next()))
it.remove();
}
Operaciones
entre
colecciones
arreglos.
El
mtodo toArray provee un puento entre las colecciones y los arreglos. Las
operaciones de arreglos permiten al contenido de una coleccin ser
transformada en un arreglo. La forma ms simple sin argumentos crea un
nuevo arreglo tipo Object. La otra forma de este mtodo permite especificar
el tipo de salida que tendr el arreglo.
Suponiendo que c es de tipo Collection, la siguiente expresin enva el
contenido de est hacia un arreglo de Object cuya longitud es igual al
nmero de elementos en c.
Object[] a = c.toArray();
Ahora
suponiendo
que
contiene
solo
elementos
tipo String
sus
elementos
en
base
como
han
sido
Operaciones
bsicas:
La
operacin size,
retorna
el
nmero
de
Math.pow()
Math.sqrt()
Character.isDigit()
System.out.println();
Cuando se llama a un mtodo, la ejecucin del programa pasa al mtodo y
cuando ste acaba, la ejecucin contina a partir del punto donde se
produjo la llamada.
2.
3.
4.
5.
6.
import java.util.*;
public class Metodos1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int numero1, numero2, resultado;
System.out.print("Introduce primer nmero: ");
numero1 = sc.nextInt();
System.out.print("Introduce segundo nmero: ");
numero2 = sc.nextInt();
resultado = sumar(numero1, numero2);
System.out.println("Suma: " + resultado);
}
Puli static int sumar(int a, int b) }
Int c;
C=a + b;
Return c;
}
}
El mtodo se llama sumar y recibe dos nmeros enteros a y b.
En la
System.out.println();
System.out.println("# " + str + " #");
for (int i = 0; i < n + 4; i++){
System.out.print("#");
}
System.out.println();
}
}
Calculo del rea. En todo tringulo, se verifica que el rea est dada por
el Semiproducto de la base por la altura del triangulo. Esta formula del rea
es muy familiar y sencilla de aplicar, y puede usarse en tringulos
rectngulos en funcin de sus catetos adyacentes al ngulo recto, pues uno
de ellos se toma como base y el otro como altura.
El mtodo deber retornar el valor calculado (rea). Entonces, debemos
implementar un
mtodo que devuelve valor en la clase RobotRecolector.
Java
analizara
solamente
los
nombres
de
los
mtodos
durante
la
ARREGLOS TIPOS
ARRAYS, ARREGLOS O FORMACIONES EN JAVA
Arreglos (Array) ? Un arreglo es una secuencia de datos primitivos o de
objetos, todos del mismo tipo, unidos bajo un identificador comn. ? Todos
los elementos de un arreglo tienen el mismo nombre pero se diferencian por
la posicin que ocupan en l. ? Son de tipo referencia ? Sinnimos: ?
Vector ? Tabla ? Matriz.
Algunas clases que hemos citado, como ArrayList o LinkedList, se
denominan colecciones de tamao flexible porque permiten modificar
dinmicamente el nmero de tems que contienen, es decir, ampliarlo o
reducirlo.
veces
nos
referiremos
estas
colecciones
como
VENTAJAS
-
Acceso
INCONVENIENTES
y
operacin
con
elementos ms eficiente.
- Permiten almacenar tanto
objetos como tipos primitivos
directamente
La sintaxis a emplear con arrays la exponemos a continuacin.
private
TipoPrimitivoUObjeto
nombreDelArray;
//Declaracin:
lugar
un
error
en
tiempo
de
ejecucin del
tipo
ArrayIndexOutOfBoundsException.
System.out.println
(Nombre + i + : + misNombres[i]; }
En este ejemplo usamos i <, es decir, menor estricto, porque length nos
devuelve siempre un valor n+1 para unos ndices comprendidos entre 0 y n.
Uso de ciclos for each con arrays
Es posible usar ciclos for each con arrays. Por ejemplo:
//Ejemplo aprenderaprogramar.com
for (int tmpItem : cochesPorHora) { System.out.println (Nmero: +
tmpItem); }
String [ ] misNombres = new String [10];
For (String tmpObjeto : misNombres) { System.out.println (tmpObjeto); }
//Nota: en el caso de que un tem objeto no tenga contenido por pantalla
saldr null
El for each tiene ventajas como el poder recorrer una coleccin de la que se
desconoce su tamao, pero tambin inconvenientes como carecer de una
variable contadora en el ciclo. Si quisiramos contar tendramos que
introducir una variable contadora, cosa que con el for normal ya tenemos
con la propia definicin del bucle. Dado que en un array podemos conocer
con facilidad el nmero de elementos de que consta y disponer de forma
automtica de la variable contadora, ser ms habitual el uso de for
tradicionales con arrays que el uso del for extendido.
EJERCICIO.
Crea una clase con el mtodo main donde declares una variable de tipo
array de Strings que contenga los doce meses del ao, en minsculas y
declarados en una sola lnea. A continuacin declara una variable
mesSecreto de tipo String, y hazla igual a un elemento del array (por
ejemplo mesSecreto = mes[9]. El programa debe pedir al usuario que
adivine el mes secreto y si acierta mostrar un mensaje y si no pedir que
vuelva a intentar adivinar el mes secreto. Puedes comprobar si tu cdigo
es correcto consultando en los foros aprenderaprogramar.com.
Un ejemplo de ejecucin del programa podra ser este:
Adivine el mes secreto. Introduzca el nombre del mes en minsculas:
febrero
No ha acertado. Intente adivinarlo introduciendo otro mes: agosto
No ha acertado. Intente adivinarlo introduciendo otro mes: octubre
Ha acertado!
en
preorden,
hay
que
realizar
las
siguientes
Visite la raz
2.
3.
operaciones
en
postorden,
hay
que
realizar
las
siguientes
operaciones
//miembros de acceso
NodoArbol nodoizquierdo;
int datos;
NodoArbol nododerecho;
7
8
10
11
datos = datosNodo;
12
13
14
15
16
17
18
19
20
21
22
if(nodoizquierdo == null)
23
24
25
nodoizquierdo.insertar(valorInsertar);
26
27
28
29
30
31
32
if(nododerecho == null)
33
34
else
35
nododerecho.insertar(valorInsertar);
36
37
}
} // fin del metodo insertar
38 }
39
40 class Arbol
41 {
42
43
44
45
public Arbol()
46
47
48
raiz = null;
}
49
50
51
52
53
if(raiz == null)
54
55
else
56
57
58
59
60
61
62
ayudantePreorden(raiz);
63
64
65
66
67
68
69
if(nodo == null)
return;
70
71
72
ayudantePreorden(nodo.nodoizquierdo);
//recorre
subarbol
73 izquierdo
74
75
76
ayudantePreorden(nodo.nododerecho);
derecho
}
77
78
79
80
81
82
83
84
85
86
87
return;
88
89
ayudanteInorden(nodo.nodoizquierdo);
90
91
ayudanteInorden(nodo.nododerecho);
92
93
94
95
96
//recorre
subarbol
97
98
99
10
ayudantePosorden(raiz);
0
10
1
10
2
10
3
10
4
return;
10
5
ayudantePosorden(nodo.nodoizquierdo);
10
ayudantePosorden(nodo.nododerecho);
10
7
10 }
8
10
9
Clase controladora:
?
1 import javax.swing.JOptionPane;
2
int valor;
String Dato;
1
0
1
1
1
2
1
3
1
4
1
5
valor = Integer.parseInt(Dato);
1
7
1
arbol.insertarNodo(valor);
}
8
1
9
System.out.println("\n\nRecorrido Preorden");
2
0
2
1
2
2
2
3
2
arbol.recorridoPreorden();
4
2
5
System.out.println("\n\nRecorrido Inorden");
arbol.recorridoInorden();
6
2
7
System.out.println("\n\nRecorrido Postorden");
arbol.recorridoPosorden();
8
2}
9
3
0
3
1
3
2
3
3
class Foo2 {
//Constructores legales
Foo2() { }
Foo2(int x){ }
6
Foo2(int x, int... y){ }
7
8
//Constructores Ilegales
9
void Foo2() { }
10
Foo() { }
11
Foo2(short s);
12
static Foo2(float f) { }
final Foo2(long x) { }
13
14
abstract Foo2(char c) { } //No puede ser abstrac
15
Foo2(int... x, int t){ }
16
CONSTRUCTORES EN JAVA
La introduccin La programacin "insegura" uno de los mayores culpables
del encarecimiento de la programacin. Dos de estos aspectos de seguridad
son la inicializacin y la limpieza. C++ introdujo el concepto de constructor
Java tambin adopt el constructor, y proporciona un mtodo que libera
automticamente recursos de memoria cuando dejan de ser utilizados, se
llama garbage collector.
Pasos para la inicializacin 1.- Java inicializa siempre con valores por
defecto las variables que son miembros de la clases, mtodos. 2.- El
segundo paso para la inicializacin correcta de objetos es el uso de
constructores. 3.-Java todava dispone de una tercera lnea de actuacin
para evitar que haya variables sin inicializar correctamente. Son los
inicializadores. Java no permite que haya variable miembro que no estn
inicializadas VARIABLES NUMERICAS (PRIMITIVO) SE ESTABLECEN EN CERO
VARIABLES BOOLEAN SE ESTABLECEN EN FALSO VARIABLES DE REFERENCIA
SE ESTABLECEN EN NULL
Los
con
argumentos,
no
se
generar
uno
sin
argumentos
automticamente.
Declaracion del constructor (sintaxis) Modificador de Acceso nombre clase
(lista
{
de
parmetros)
public
Ventas
preciocontado=(precio*0.12)+precio;
(double
precio
System.out.println("El
Precio
)
al
Contado es ;"+preciocontado); } }
Llamada
al
constructor
nombre
clase
objeto
new
nombreclase
Objetos y Primitivos.
Al disear sus primeros programas en Java, pudo notar que todo gira
alrededor de instancias de Objetos que son manipuladas a travs de
referencias:
diversos
mecanismos
para
convertir
de
Clases
tipo
Objeto
DE
HERENCIA
EN
JAVA.
SUPERCLASES
SUBCLASES.
En Java muchas subclases pueden heredar de una misma superclase, y a su
vez una subclase puede convertirse en superclase de otra. As las cosas,
podemos hablar de una jerarqua de herencia. La jerarqua es el esquema
organizativo de las clases con relacin de herencia entre s.
En un proyecto nosotros definimos nuestra propia jerarqua de herencia.
Las clases del API de Java igualmente tienen establecida una jerarqua de
herencia, en este caso definida por el equipo de desarrollo del lenguaje de la
multinacional Oracle.
//Mtodos
public String getNombre () { return nombre; }
} //Cierre del
constructor
//Mtodos especficos de la subclase
public void setIdProfesor (String IdProfesor)
{ this.IdProfesor = IdProfesor; }
public String getIdProfesor () { return IdProfesor;
}
En la superclase:
public Persona() {
nombre = "";
apellidos = "";
edad = 0; }
public Persona (String nombre, String
apellidos, int edad) {
this.nombre = nombre;
this.apellidos = apellidos;
this.edad = edad;
En la subclase:
public Profesor () {
super();
IdProfesor = "Unknown";}
public Profesor (String nombre, String
Mtodo getClass
Todos los objetos en Java conocen su propia clase y pueden acceder a esta
informacin a travs del mtodo getClass, que todas las clases heredan de
la clase Object. El mtodo getClass devuelve un objeto de tipo Class(del
paquete java.lang), el cual contiene informacin acerca del tipo del objeto,
incluyendo el nombre de su clase
especificar
ningn
detalle
de implementacin,
como
las
preempaquetados
para
entrada
salida.
El
mtodo
static
Crear Subclases
Se declara que un clase es una subclase de otra clase dentro de La
declaracin de Clase. Por ejemplo, supongamos que queremos crear una
subclase llamada SubClase de otra clase llamada SuperClase. Se escribira
esto.
class SubClass extends SuperClass {
...
}
Sobreescribir Mtodos.
La habilidad de una subclase para sobreescribir un mtodo de su superclase
permite a una clase heredar de su superclase aquellos comportamientos
"ms cercanos" y luego suplementar o modificar el comportamiento de la
superclase.
Crear Subclases.
Se declara que una clase es una subclase de otra clase dentro de La
Crear una subclase puede ser tan sencillo como incluir la clausula extends
en la declaracin de la clase.