clases y objetos -...

57
Java Clases y Objetos H. Tejeda V. [email protected] Universidad Michoacana Facultad de Ciencias F´ ısico-Matem ´ aticas Java– p. 1

Upload: vutram

Post on 11-Oct-2018

231 views

Category:

Documents


0 download

TRANSCRIPT

Java

Clases y Objetos

H. Tejeda V.

[email protected]

Universidad Michoacana

Facultad de Ciencias Fısico-Matematicas

Java– p. 1

Introduccion

• La unidad fundamental del lenguaje de programación Java es la clase .• Las clases proporcionan la estructura de los objetos y los mecanismos

para fabricar objetos a partir de una definición de clase.• Las clases definen métodos .• Un método es una colección de código ejecutable y que manipula los

datos almacenados en los objetos.• Los métodos proporcionan el comportamiento de los objetos de una

clase.

Java– p. 2

Programacion orientada a objetos

• Separa estrictamente la noción de qué se va a hacer y de cómo se va ahacer.

• El “que” está descrito por un conjunto de métodos y su semánticaasociada.

• La combinación de métodos, datos y semántica se describe como uncontrato en el diseñador de la clase y el programador que la utiliza.

• El contrato define un tipo , de forma que todos los objetos que seaninstancias de ese tipo respetan el contrato.

Java– p. 3

Semantica

• No es suficiente suponer que los métodos declarados en una clase sonsu contrato completo, la semántica de esas operaciones es tambiénparte del contrato.

• Dos métodos pueden tener el mismo nombre y los mismos parámetros ylanzar las mismas excepciones, pero no son equivalentes si tienendiferente semántica.

• El contrato del método, que incluye su signatura y su semántica, define loque significa.

• Por ejemplo, no se puede suponer que cualquier método denominadoprint imprimirá una copia del objeto, ya que alguien puede definirlo conla semántica “procesar intervalo” o “dar prioridad a las no terminales”.

Java– p. 4

Acerca del “Como”

• El “como” de un objeto está definido por su clase.• La clase define la implementación de los métodos que tiene el objeto.• Cada objeto es una instancia de la clase.• Cuando se invoca a un método sobre un objeto, se examina la clase para

obtener el código que se debe ejecutar.• Un objeto puede utilizar a otros objetos para realizar su trabajo.

Java– p. 5

Una Clase Simple

• Se presenta una clase simple denominada Cuerpo que puede usarsepara almacenar datos sobre cuerpos celestes, como cometas,asteroides, planetas y estrellas.

class Cuerpo {public long numId;public String nombre;public Cuerpo orbita;

public static long sigID = 0;}

Java– p. 6

Descripcion de Cuerpo

• Para declarar una clase se usa class , un nombre y proporcionando unalista entre llaves de los miembros de la clase.

• Una declaracion de clase crea un nombre de tipo por lo que lasreferencias a objetos de ese tipo se declaran como:

Cuerpo mercurio;

• Con la declaración se indica que mercurio es una variable que puedealmacenar una referencia a un objeto de tipo Cuerpo

• La declaración no crea un objeto.• Durante la existencia de mercurio se puede referir a diversos objetos

Cuerpo .

Java– p. 7

Miembros de una clase

Una clase puede tener tres clases de miembros:• Los campos son las variables de datos asociados con una clase y sus

objetos. Almacenan el estado de una clase u objeto.• Los métodos contienen el código ejecutable de una clase y definen el

comportamiento de los objetos.• Las clases anidadas e interfaces anidadas son declaraciones de

clases o interfaces que aparecen anidadas dentro de la declaración deotra clase o interfaz.

Java– p. 8

Modificadores de clase

• Una declaración de clase puede estar precedida de modificadores queotorgan ciertas propiedades.◦ public Es públicamente accesible, es decir, cualquiera puede

declarar referencias a objetos de la clase o acceder a sus miembropúblicos. Sin este modificador, una clase sólo es accesible dentro desu propio paquete.

◦ abstract Se emplea para clases incompletas, y de la cual no sepueden crear instancias de dicha clase, lo anterior obedece a que laclase contiene métodos abstract , los cuales deben serimplementados por una subclase.

◦ final Se usa cuando no se derivarán clases.◦ punto flotante estricta (strictfp ) Evalúa estrictamente toda la

aritmética de punto flotante definida dentro de dicha clase.

Java– p. 9

T A R E A

1. Escriba una clase simple denominada Vehiculo que tenga campos parala velocidad actual, la dirección actual en grados y el nombre delpropietario.

2. Escriba una clase ListaEnlazada con un campo tipo Object y unareferencia al siguiente elemento ListaEnlazada de la lista.

Java– p. 10

Una Clase Simple

• Se presenta una clase simple denominada Cuerpo que puede usarsepara almacenar datos sobre cuerpos celestes, como cometas,asteroides, planetas y estrellas.

class Cuerpo {public long numId;public String nombre;public Cuerpo orbita;

public static long sigID = 0;}

Java– p. 11

Campos

• Las variables de una clase se denominan campos .• Las variables nombre y orbita de la clase Cuerpo son ejemplos de

campos.• La declaración de un campo consiste en un nombre de tipo seguido del

nombre del campo y opcionalmente de una cláusula de inicialización ,para dar al campo un valor inicial.

• Cada objeto Cuerpo tiene sus propias instancias específicas de los trescampos:◦ Un long para diferenciar de forma única el cuerpo celeste de otros.◦ Un String para el nombre del cuerpo.◦ Una referencia tipo Cuerpo para indicar a que cuerpo orbita.

• Al dar a cada objeto diferente una instancia diferente de sus campos,cada objeto tiene su propio estado único.

• Los campos se conocen como variables de instancia .• Al cambiar los campos de algún objeto no se afecta a otros cuerpos.

Java– p. 12

Modificadores de los campos

• Las declaraciones de los campos pueden precederse de modificadoresque controlan ciertas propiedades del campo.

• modificadores de acceso : private, package, protected, public◦ static Para tener sólo una instancia de un campo compartida por

todos los objetos de una clase.◦ final Para cuando se quiere que una variable no pueda cambiarse

después de haber sido inicializada.◦ transient relacionado con la serialización de objetos.◦ volatile relacionado con aspectos del modelo de memoria y de

sincronización• Un campo no puede ser a la vez final y volatile .

Java– p. 13

Inicializacion de campos

• Cuando se declara un campo, se puede inicializar asignando un valor deltipo correspondiente.

• En el ejemplo Cuerpo , el campo sigID se inicializa con el valor cero.• La expresión de inicialización o inicializador no necesita ser una

constante, puede ser otro campo, una invocación a un método o unaexpresión donde se involucren las anteriores.

• Se requiere que el inicializador sea del tipo correcto.

double cero = 0.0; // constantedouble suma = 4.5 + 3.7; // expresi on constantedouble copiaCero = cero; // campodouble raizDos = Math.sqrt(2); // invocaci on a un metododouble algunVal = sum + 2 * Math.sqrt(raizDos); // combinaci on

Java– p. 14

Inicializacion cont.

• Los inicializadores proporcionan una gran flexibilidad en la forma deinicializar los campos, pero sólo son adecuados en esquemas simples deinicialización.

• Si un campo no se inicializa se le asigna un valor inicial por defecto comose muestra a continuación

Tipo Valor inicial

boolean false

char ’ \u0000’

byte, short, int, long 0

float +0.0f

double +0.0

referencia a objeto null

Java– p. 15

Campos estaticos

• Cuando se desea tener sólo una instancia de un campo compartida portodos los objetos de una clase, el campo se declara como static .

• Se conocen también como campos estáticos o variables de clase .• Al declarar un campo static sólo existe una copia de ese campo,

independientemente del número de instancias de la clase que se creen.• En el ejemplo sigID es un campo estático, el cual se inicializa con un

valor de cero cuando se inicializa la clase.• Se pretende que cada objeto Cuerpo que se crea tenga asignado como

identificador el valor en curso de sigID y realice el incremento, por lotanto sólo se desea tener una copia.

• Un campo static puede ser referido directamente dentro de su propiaclase, pero cuando se accede externamente hay que utilizar el nombrede la clase.

System.out.println(Cuerpo.sigID);

• También se puede acceder a un miembro estático mediante unareferencia a un objeto de la clase, pero se recomienda no hacerlo yhacerlo sólo con campo no estáticos .

Java– p. 16

T A R E A

3. Añada un campo estático a su clase Vehiculo para almacenar elsiguiente número de identificación del vehículo, y un campo no estáticopara almacenar el número de identificación de cada coche.

Java– p. 17

Campos final

• Una variable final es aquella cuyo valor no se puede cambiar despuésde ser inicializada.

• Si se intenta asignar a este tipo de variable se produce un error decompilación.

• Se usan para definir constantes con nombre, es decir, propiedadesinmutables .

• Si un campo final no tiene un inicializador se denomina final enblanco , y se usa cuando no se puede inicializar el campo de formasimple.

Java– p. 18

¿Que considerar para tener un campo final ?

• ¿Representa el campo una propiedad inmutable del objeto?• ¿Se conoce siempre el valor del campo cuando se crea el objeto?• ¿Es siempre práctico y apropiado establecer el valor del campo cuando

se crea el objeto?

Java– p. 19

T A R E A

4. Respecto al ejercicio 3, ¿consideras que el campo de número deidentificación debería ser final?

Java– p. 20

Control de acceso

• Para que la comprensión, depuración y mantenimiento de los programassea posible se requiere que sólo algunos miembros de una clase uobjeto sean accesibles.

• En la programación orientada a objetos se proporciona soporte para elencapsulado y la ocultación de datos .

• Se requiere de un mecanismo para controlar quién accede a quémiembros de una clase o interfaz, e incluso quién accede a la propiaclase o interfaz.

• El control se especifica usando modificadores de acceso en lasdeclaraciones de clases, interfaces y miembros.

Java– p. 21

Modificadores de acceso

• Todos los miembros de una clase son siempre accesibles al código de lapropia clase. Para controlar el acceso desde otras clases, los miembrosde una clase tiene cuatro posibles modificadores.private los miembros sólo son accesibles en la propia claseprotected los miembros son accesibles en las subclases de la clase, en

las clases del mismo paquete y en la propia clase.package los miembros son accesibles en todas las clases del mismo

paquete, así como en la propia clase. Es el modificador de accesopor defecto, es decir, si no se indica modificador es el que seráusado.

public los miembros son accesibles en cualquier parte donde la clasesea accesible.

• Los modificadores de acceso private y protected se aplican sólo amiembros, no a las propias clases o interfaces a menos que seananidadas.

Java– p. 22

Creacion de objetos

• Los objetos que representan los cuerpos celestes particulares se crean einicializan de la siguiente forma:

Cuerpo sol = new Cuerpo();sol.numId = Cuerpo.sigID++;sol.nombre = "Sol";sol.orbita = null; // el sol es el centro del sistema solar

Cuerpo tierra = new Cuerpo();tierra.numId = Cuerpo.sigID++;tierra.nombre = "Tierra";tierra.orbita = sol;

• Observar que primero se declara o define una variable de referencia lacual se puede referir a objetos de tipo Cuerpo .

• El objeto al que se refiere se debe crea explícitamente utilizando new,indicando el tipo de objeto que se crea y los parámetros que se utilizaránpara su construcción.

Java– p. 23

Creacion de objetos (continuacion)

• El sistema en tiempo de ejecución reserva espacio suficiente paraalmacenar los campos del objeto y lo inicializa.

• Si el sistema no consigue espacio suficiente para crear el objeto, puedeusar el recogedor de basura para intentar obtener espacio.

• En el ejemplo, cada nuevo objeto Cuerpo obtiene un identificador únicoa través del campo estático sigID de Cuerpo . También se realiza unincremento del campo anterior para que el siguiente Cuerpo obtenga unidentificador único.

• En el ejemplo se construye un modelo del sistema solar, por lo tanto elsol está en el centro, y el campo orbita de sol es null .

Java– p. 24

Recogedor de basura

• Los objetos se crean utilizando new, pero nunca se borranexplícitamente, la máquina virtual se encarga de la recogida de basura .

• Cuando no se necesita más un objeto dejamos de referirnos a él, puedeser tan sencillo como retornar de algún método, o en el caso dereferencias más perdurables, como los campos de objetos, se puedenponer a null .

Java– p. 25

T A R E A

5. Escriba un método main para la clase Vehiculo que cree unos cuantosvehículos e imprima los valores de sus campos.

6. Escriba un método main para la clase ListaEnlazada que cree unoscuantos objetos de tipo Vehiculo y los sitúe en nodos sucesivos de lalista.

Java– p. 26

Construccion e inicializacion

• Un objeto de nueva creación recibe un estado inicial.• Los campos se pueden inicializar dándoles un valor cuando se declaran

o pueden aceptar un valor por defecto.• El código de creación del objeto puede suministrar datos iniciales o

realizar operaciones que no se puedan expresar mediante una simpleasignación.

Java– p. 27

Constructores

• Son bloques de sentencias que se usan para inicializar un objeto antesde que se devuelva una referencia a dicho objeto mediante new.

• Tienen el mismo nombre de la clase que inicializan.• Pueden admitir cero o más parámetros.• No tienen tipo de retorno.• Se invocan después de que las variables de instancia del objeto de

nueva creación tengan asignados sus valores iniciales por defecto ydespués de que sus inicializadores explícitos se hayan ejecutado.

Java– p. 28

Constructor e inicializacion para Cuerpo

• La declaración de un constructor consiste en el nombre de la claseseguido por una lista de parámetros y un cuerpo de sentenciasencerradas entre llaves.

class Cuerpo {public long numId;public String nombre = " SIN NOMBRE";public Cuerpo orbita = null;

private static long sigID = 0;

Cuerpo () {numId = sigID++;

}

}

• Como el constructor de Cuerpo es el único que asigna el valor de numIdy también la única entidad que accede a sigID , se puede hacer quesigID sea privado, para que sólo se pueda acceder dentro de la claseCuerpo .

Java– p. 29

Creacion de objetos con el constructor

• Se muestran ejemplos del uso del constructor de la clase Cuerpo .

Cuerpo sol = new Cuerpo(); // numId vale 0sol.nombre = "Sol";sol.orbita = null;

Cuerpo tierra = new Cuerpo(); // numId vale 1tierra.nombre = "Tierra";tierra.orbita = sol;

• El constructor de Cuerpo se invoca cuando new crea el objeto perodespués de que nombre y orbita han tomado sus valores iniciales pordefecto.

Java– p. 30

Constructores Adicionales

• Se pueden tener varios constructores para una clase.

Cuerpo(String nombreCuerpo,Cuerpo orbitaAlrededorDe) {this();nombre = nombreCuerpo;orbita = orbitaAlrededorDe;

}

• El constructor puede invocar a otro constructor de la misma clase usandothis , lo que se conoce como invocación explícita a un constructor .

• Con lo anterior no se tiene que duplicar el código de inicialización.

Cuerpo sol = new Cuerpo( "Sol", null );Cuerpo tierra = new Cuerpo ( "Tierra", sol );

• Constructor de un parámetro para construir un objeto Cuerpo que nogire alrededor de ningún otro.

Cuerpo ( String nombreCuerpo ) {this( nombreCuerpo, null );

}

Java– p. 31

Razones para tener constructores especializados

• Algunas clases no tienen un estado inicial razonable sin parámetros.• Un estado inicial puede ser conveniente y razonable al construir ciertas

clases de objetos.• La construcción de un objeto puede ser una operación costosa, como

por ejemplo una tabla.• Un constructor que no es public pone restricciones sobre quién puede

crear objetos utilizándolo.

Java– p. 32

Bloques de inicializacion

• Se usan para realizar inicializaciones más complejas de campos.• Es un bloque de sentencias que aparece dentro de la declaración de la

clase y fuera de la declaración de cualquier miembro o constructor.• Se ejecuta como si estuviera situado al principio de cada constructor de

la clase.• Puede lanzar una excepción comprobada sólo si se declara que todos

los constructores lanzan esa excepción.

Java– p. 33

Bloques de inicializacion – Ejemplo

class Cuerpo {public long numId;public String nombre = " SIN NOMBRE";public Cuerpo orbita = null;

private static long sigID = 0 ;

{numId = sigID++;

}

public Cuerpo ( String nombreCuerpo,Cuerpo orbitaAlrededorDe ) {

nombre = nombreCuerpo;orbita = orbitaAlrededorDe;

}

}

Java– p. 34

Metodos

• Contienen generalmente el código que maneja el estado de un objeto.• Diversos objetos tienen tareas que no se pueden representar como la

lectura o modificación de un simple valor.

class ImprimeCuerpo {

public static void main ( String[] args ) {Cuerpo sol = new Cuerpo ( "Sol", null );Cuerpo tierra = new Cuerpo ( "Tierra", sol );System.out.println( "

Cuerpo " + tierra.nombre +" gira alrededor de " +tierra.orbita.nombre +" y tiene como ID " +tierra.numId );

}

}

Java– p. 35

Partes del Metodo

• Cabecera del método◦ Modificadores◦ Tipo de retorno◦ Signatura (nombre del método y lista de parámetros (que puede

estar vacía) encerrados por paréntesis).• Cuerpo del método. Sentencias encerradas entre llaves.

Java– p. 36

Modificadores de un metodo

• modificadores de acceso Puede ser private , package , protected ,public

• abstract . Método en el cual no se ha definido el cuerpo. La subclaseserá responsable de proporcionar un cuerpo.

• static . Se emplea para realizar una tarea general para todos los objetosde la clase.

• final . El método no puede ser modificado por una subclase.• syncronized Tiene código adicional que se relaciona con el control de

hilos concurrentes.• native Permite implementar un método que se puede usar desde Java

pero escrito con otro lenguaje como C o C++• strictfp La aritmética de punto flotante se evalúa estrictamente en el

método.• Un método abstracto no puede ser estático, final, sincronizado, nativo ni

estricto.

Java– p. 37

Metodos estaticos

• Se invoca en nombre de una clase completa y no sobre un objetoespecífico instanciado a partir de alguna clase.

• Se conocen también como métodos de clase .• Se puede usar para hacer una tarea general para todos los objetos de la

clase.• Un método static puede acceder sólo a campos static o a otros

métodos static de la clase.

Java– p. 38

T A R E A

7. Añada un método estático a Vehiculo que devuelva el número deidentificación más alto utilizado hasta el momento.

Java– p. 39

Invocaciones de metodos

• Los métodos se invocan como operaciones sobre objetos, mediantereferencias usando el operador punto .

referencia.metodo ( par ametros );

• Cada método se declara con un número específico de parámetros, cadauno de ellos de un tipo específico: un tipo primitivo o un tipo dereferencia.

• No se pueden declarar métodos con un número variable de parámetros.• Los métodos tienen un tipo de retorno, primitivo o de referencia. Si no

devuelve ningún valor, se debe poner void en el lugar correspondiente.

Java– p. 40

Ejemplo

• El ejemplo toString ilustra un caso donde se desea examinar el estadode un objeto.

• El método devuelve una representación de cadena de texto del estadodel objeto, en vez de acceder y proguntar por todos los campos de unobjeto.

• Se emplea + y += para concatenar objetos String .• Observar que si el cuerpo gira alrededor de otro cuerpo, se añade a la

cadena de cuerpo que describe ese cuerpo invocando el métodotoString .

• La cadena de texto resultante se devuelve con la sentencia return

public String toString() {String desc = numId + " (" + nombre + ")";if ( orbita != null )

desc += " gira alrededor de " + orbita.toString();return desc;

}

Java– p. 41

Ejecucion de un metodo y retorno

• Al ser invocado un método el flujo de control pasa del método que invocaal método invocado, y se ejecutan las sentencias en secuencia deacuerdo con su semántica.

• Un método completa su ejecución y retorna al que lo llama cuandosucede alguna de las 3 siguientes causas:◦ Se ejecuta una sentencia return◦ Se llega al final del método◦ Se lanza una excepción no capturada.

• Cuando un método devuelve un resultado deberá ser único, ya sea comoun valor primitivo o como una referencia a un objeto.

• Si se requiere devolver más de un resultado se puede:◦ devolver una referencia de un objeto que almacene los resultados

como campos.◦ Usar uno o más parámetros que se refieran a objetos en los que se

almacenen resultados.

Java– p. 42

Ejemplo

public class Permisos {public boolean puedeDepositar, puedeRetirar, puedeCerra r;

}

public class CuentaBancaria {private long numero;private long balance;

public Permisos permisosDe ( Persona quien ) {Permisos perm = new Permisos();perm.puedeDepositar = puedeDepositar(quien);perm.puedeRetirar = puedeRetirar(quien);perm.puedeCerrar = puedeCerrar(quien);return perm;

}

// ... definir puedeDepositar, puedeRetirar, puedeCerrar}

Java– p. 43

T A R E A

8. Añada un método toString a la clase Vehiculo .

9. Añada un método toString a la clase ListaEnlazada .

Java– p. 44

Valores de parametros

• Los parámetros de métodos se pasan “por valor”, es decir, son copias delos valores con los que fue invocado el método.

• Si el método cambia el valor del parámetro no se afectan los valores enel código que lo invocó.

• Cuando el parámetro es una referencia a un objeto, la referencia alobjeto (no el objeto en sí) es lo que se pasa “por valor”, con lo anterior esposible cambiar a qué objeto se refiere un parámetro. Pero si se cambiancampos del objeto o se invocan métodos que cambian el estado delobjeto, el objeto quedará modificado.

Java– p. 45

Ejemplo - Paso por valor

class PasaPorValor {

public static void main( String[] args ) {double uno = 1.0;System.out.println( " Antes: uno = " + uno);calculaMitad(uno);System.out.println( "despu es: uno = " + uno);

}

public static void calculaMitad(double arg) {arg /= 2.0; // se divide arg por 2System.out.println( "mitad: arg = " + arg);

}

}

Java– p. 46

Ejemplo - Paso por referencia

class PasoRef {

public static void main ( String[] args ) {Cuerpo sirio = new Cuerpo( "Sirio", null);System.out.println( " Antes: " + sirio );nombreComun(sirio);System.out.println( "despu es: " + sirio );

}

public static void nombreComun(Cuerpo refCuerpo) {refCuerpo.nombre = " Estrella del Perro";System.out.println( "nombreComun: " + refCuerpo );

}

}

Java– p. 47

Uso de metodos para control de acceso

• Los datos de sólo lectura son comunes en los objetos, pero no existealguna palabra clave para aplicarla a un campo.

• Se puede forzar que el acceso sea de sólo lectura usando final , o bienocultando el campo usando private y proporcionando un nuevométodo para leer su valor.

class Cuerpo {private long numId; // ahora "private"public String nombre = " SIN NOMBRE";public Cuerpo orbita = null;private static long sigID = 0;

Cuerpo () {NumId = sigID++;

}

public long getID() {return numId;

}//...

}Java– p. 48

Uso de metodos para control de acceso (cont.)

• Los métodos que regulan el acceso a los datos internos se denominanalgunas veces métodos accesores .

• No se debe confundir inmutabilidad con accesibilidad.• Si un campo es inmutable se debe declarar como final

independientemente de su accesibilidad.• Si no se desea que un campo forme parte del contrato de una clase se

debe ocultar tras un método, independientemente de si el campo es desólo lectura o modificable.

• El control de acceso se realiza por clase y no por objeto.

Java– p. 49

T A R E A

10. Haga que los campos de su clase Vehiculo sean private , yproporcione métodos de acceso para dichos campos. ¿Qué camposdeberían tener métodos para cambiarlos, y cuáles no?

11. Haga que los campos de su clase ListaEnlazada sean private , yproporcione métodos de acceso para dichos campos. ¿Qué camposdeberían tener métodos para cambiarlos, y cuáles no?

12. Añada un método denominado cambiarVelocidad que cambie el valoractual de la velocidad del vehículo con un valor que se proporciona yañada un método denominado parar que ponga la velocidad a cero.

13. Añada un método a ListaEnlazada que devuelva el número deelementos de la lista.

Java– p. 50

this

• Con los constructores se dió un ejemplo donde se usa la invocaciónexplícita a un constructor para invocar a otro constructor al principio deun constructor.

• Se puede usar la referencia especial a un objeto this dentro de unmétodo no estático.

• No existe referencia this en un método estático ya que no opera sobreningún objeto específico.

• Se utiliza comúnmente para pasar una referencia del objeto actual comoparámetro para otros métodos.

• Se muestra un método que requiere añadir el objeto actual a una lista deobjetos que esperan recibir algún servicio:

servicio.agregar ( this );

Java– p. 51

this (cont.)

• Se puede usar un this explícito al principio de cualquier acceso a uncampo o invocación de método del objeto actual, peroconvencionalmente se usará sólo cuando sea necesario.

public Cuerpo ( String nombre, Cuerpo orbita ) {this();this.nombre = nombre;this.orbita = orbita;

}

• Los campos nombre y orbita están ocultos para el constructor por losparámetros del mismo nombre.

Java– p. 52

Sobrecarga de metodos

• Todos los métodos tienen una signatura , que consiste en su nombrejunto con el número y tipo de parámetros.

• Dos métodos pueden tener el mismo nombre si tienen diferente númeroo tipo de parámetros, y por lo tanto diferente signatura.

• Esta característica se denomina sobrecarga , ya que el nombre simpledel método tiene más de un significado.

• Se muestran algunos métodos orbitaAlrededorDe de la claseCuerpo que devuelven true si el cuerpo actual gira alrededor delcuerpo inidicado, o de un cuerpo con el indicador especificado.

public boolean orbitaAlrededorDe ( Cuerpo otro ) {return ( orbita == otro );

}

public boolean orbitaAlrededorDe ( long id ) {return ( orbita != null && orbita.numId == id );

}

Java– p. 53

T A R E A

14. Añada dos métodos giro a Vehiculo , don uno de ellos tome un númerode grados de giro otro que tome una de las constantesVehiculo.GIRO_IZQUIERDA o Vehiculo.GIRO_DERECHA .

Java– p. 54

El metodo main

• Siempre se debe proporcionar el nombre de una clase que conduzca laaplicación.

• Al ejecutar un programa, el sistema localiza y ejecuta el método main deesa clase.

• El método main debe ser public , static y void y debe aceptar unúnico parámetro de tipo String [] .

• El siguiente ejemplo imprime sus parámetros:

class Eco {

public static void main ( String[] args ) {for ( int i = 0; i < args.length; i++ )

System.out.print(args[i] + " " );System.out.println();

}

}

Java– p. 55

T A R E A

15. Cambie Vehiculo.main para que cree coches con propietarios cuyosnombres se especifiquen en la línea de comandos, y después los muestre.

Java– p. 56

Metodos nativos

• Se usan cuando se tiene un código que no está escrito en Java, o biencuando se tienen que manejar elementos de hardware directamente.

• Se declaran usando el modificador native .• El cuerpo del método se especifica con un punto y coma, ya que el

método está implementado en otro lenguaje.

public native int getIDCPU();

• Los métodos nativos son como como los otros métodos, se puedensobrecargar, anular y pueden ser final, static, synchronized,public, protected o private .

• No puden ser declarado como abstract o strictfp .• Con los métodos nativos se pierde la portabilidad y seguridad del código.

Java– p. 57