Java. Clases y Objetos. H. Tejeda V. Universidad Michoacana Facultad de Ciencias Físico-Matemáticas. Java p.

Documentos relacionados
Tema 2: Programación basada en Objetos

12. Tipos de atributos

3.4 Clases y Objetos 05/04/2004. Conceptos Generales. Modificadores de la Clase. Estructura de una Clase. Variables Miembros

Programación Tema 4: Métodos. Programación DIT-UPM

Clases y Objetos en C++

Programación Orientada a Objetos en C++

POO: Clases y objetos

Tema 6: Clases. Índice

Principios de Computadoras II

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

Estructura de datos y Programación

Programación Orientada a Objetos. Resumen de Temas Unidad 3: Constructores y destructores

Tema 2: EL TIPO DE DATOS ENTERO. INSTRUCCIÓN DE ASIGNACIÓN Y DE COMPOSICIÓN SECUENCIAL

Práctica 2. Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones

Estructura de Datos Unidad 1: Repaso del Lenguaje Java

Introducción a la Programación Métodos

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005

Conceptos a tratar. Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

CAPITULO 2: VARIABLES Y CONSTANTES

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia

abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

IMPLEMENTACIÓN DE CONCEPTOS P.O.O. EN JAVA

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

Programación Orientada a Objetos. Orientación a Objetos en Java

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

INDICE Prologo 1 Recorrido rápido de java 2 Clases y objetos 3 Extensión de clases

Introducción a Java. Introducción a Java. Programación I

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Lección 2: Creando una Aplicación en Java. 1. Estructura del archivo de una clase. 3. Definiendo clases fundamentos

Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota:

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Unidad IV. Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a métodos y constructores.

En Java, un arreglo es un grupo de variables (llamados elementos o componentes) que contienen valores, todos del mismo tipo.

class identificador{ //Bloque de propiedades (datos miembro, atributos, propiedades) //Bloque de métodos (comportamientos) }

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Los Constructores(1)

Datos Elementales y formato de un programa en Java

Sebastián García Galán

Tema 2: Clases y Objetos en Java. Programación Orientada a Objetos Curso 2010/2011

Introducción a Java. Dr. (c) Noé Alejandro Castro Sánchez

CAPITULO 2. COMPRENDER LAS DEFINICIONES DE CLASE

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Capítulo 3. Introducción a la programación. Continuar

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Tutorial de C# Delegados y Eventos. Por: Óscar López, M.Sc.

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Tema 3. Programación orientada a objetos en Java (Parte 1)

Informática Lección 5. Arreglos (vectores) Curso Pedro Álvarez y José Ángel Bañares 2/11/2010. Dpto. Informática e Ingeniería de Sistemas.

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC.

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos

Métodos, clases, y objetos

Sesión 3. TEMA 5. DEFINICIONES DE CLASES

Introducción a Java (II) Dr. (c) Noé Alejandro Castro Sánchez

Una función es un miniprograma dentro de un programa. Las funciones contienen varias

Estructuras de control selectivas

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC.

Examen Teórico Convocatoria de Junio de 2012

Sesión 6. TEMA 8 COMPORTAMIENTO AVANZADO CON OBJETOS

3.3 Conceptos Básicos del Lenguaje Java

Definición de clase: Una clase es un prototipo que define las variables y los métodos de todos los objetos con características comunes.

Definición de clase: Una clase es un prototipo que define las variables y los métodos de todos los objetos con características comunes.

o Una clase en Java se compone de: o A los anteriores se les conoce también como miembros de la clase.

Para crear un arreglo de cualquier tipo de elementos la sintaxis es:

Academia de computación de IE, ICA e ISISA. Unidad didáctica Programación Orientada a Objetos

! Fundamentos de la POO. ! Comportamiento y estado. ! Clases y objetos en Java

Instituto Tecnológico de Celaya

Bloque II. Elementos del lenguaje de programación Java

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

Tema 2: Clases y Objetos. Programación Orientada a Objetos Curso 2015/2016

Tema 2.- Objetos y mensajes

Examen Teórico. Convocatoria de Febrero de 2018

REPASO ARRAYS O ARREGLOS UNIDIMENSIONALES EN JAVA. EJEMPLOS DE CÓDIGO. (CU00903C)

FACULTAD DE ECONOMIA Y ADMINISTRACION DEPARTAMENTO DE CIENCIAS DE LA COMPUTACION CÁTEDRA PROGRAMACION GENERAL. Trabajo Práctico Nº 4

Tema 2: Desarrollo de Algoritmos. E.E. de Algorítmica

int[] nombrearray1; int nombrearray2[];

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; }

Unidad Didáctica 1. Introducción a la Programación Orientada a Objetos (POO) Conceptos de clase, objeto e interfaz. Atributos y métodos

Temas. Taller III 2007 Gentile,Vazquez

5. Sentencias selectivas o condicionales

JavaScript Avanzado (I)

Paradigmas de lenguajes de programación. Introducción a la programación imperativa. Lenguaje C. Programación imperativa

TEMA 3:Programación con Clases y Objetos.

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

Programación orientada a objetos II

PROGRAMACIÓN ORIENTADA A OBJETOS 1/7/2009. Examen de Java. Nombre: DNI: Titulación:

Curso de Java Introducción a la Programación II

Introducción a Java 10/02/2011. Tokens. Juan Manuel Fernández Peña Curso Rev Tokens. Tokens

Construcciones del Lenguaje Java

Tema 4. Control de flujo. Programación Programación - Tema 4: Control de Flujo

Lenguajes de programación. Algoritmos y Estructuras de Datos I. Lenguajes compilados. Lenguajes compilados

Transcripción:

Java Clases y Objetos H. Tejeda V. htejeda@fismat.umich.mx Universidad Michoacana Facultad de Ciencias Físico-Matemáticas Java p. 1

Introducción 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

Programación orientada a objetos Separa estrictamente la noción de qué se va a hacer y de cómo se va a hacer. El que está descrito por un conjunto de métodos y su semántica asociada. La combinación de métodos, datos y semántica se describe como un contrato 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 sean instancias de ese tipo respetan el contrato. Java p. 3

Semántica No es suficiente suponer que los métodos declarados en una clase son su contrato completo, la semántica de esas operaciones es también parte del contrato. Dos métodos pueden tener el mismo nombre y los mismos parámetros y lanzar las mismas excepciones, pero no son equivalentes si tienen diferente semántica. El contrato del método, que incluye su signatura y su semántica, define lo que significa. Por ejemplo, no se puede suponer que cualquier método denominado print imprimirá una copia del objeto, ya que alguien puede definirlo con la 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 usarse para 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

Descripción de Cuerpo Para declarar una clase se usa class, un nombre y proporcionando una lista entre llaves de los miembros de la clase. Una declaracion de clase crea un nombre de tipo por lo que las referencias a objetos de ese tipo se declaran como: Cuerpo mercurio; Con la declaración se indica que mercurio es una variable que puede almacenar 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 de otra clase o interfaz. Java p. 8

Modificadores de clase Una declaración de clase puede estar precedida de modificadores que otorgan ciertas propiedades. public Es públicamente accesible, es decir, cualquiera puede declarar referencias a objetos de la clase o acceder a sus miembro públicos. Sin este modificador, una clase sólo es accesible dentro de su propio paquete. abstract Se emplea para clases incompletas, y de la cual no se pueden crear instancias de dicha clase, lo anterior obedece a que la clase contiene métodos abstract, los cuales deben ser implementados 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 para la velocidad actual, la dirección actual en grados y el nombre del propietario. 2. Escriba una clase ListaEnlazada con un campo tipo Object y una referencia al siguiente elemento ListaEnlazada de la lista. Java p. 10

Una Clase Simple Se presenta una clase simple denominada Cuerpo que puede usarse para 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 tres campos: 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 modificadores que 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

Inicialización de campos Cuando se declara un campo, se puede inicializar asignando un valor del tipo 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 una expresión donde se involucren las anteriores. Se requiere que el inicializador sea del tipo correcto. double cero = 0.0; // constante double suma = 4.5 + 3.7; // expresión constante double copiacero = cero; // campo double raizdos = Math.sqrt(2); // invocación a un método double algunval = sum + 2*Math.sqrt(raizDos); // combinación Java p. 14

Inicialización cont. Los inicializadores proporcionan una gran flexibilidad en la forma de inicializar los campos, pero sólo son adecuados en esquemas simples de inicialización. Si un campo no se inicializa se le asigna un valor inicial por defecto como se muestra a continuación Tipo Valor inicial boolean char byte, short, int, long 0 float false \u0000 +0.0f double +0.0 referencia a objeto null Java p. 15

Campos estáticos Cuando se desea tener sólo una instancia de un campo compartida por todos 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 lo tanto sólo se desea tener una copia. Un campo static puede ser referido directamente dentro de su propia clase, pero cuando se accede externamente hay que utilizar el nombre de la clase. System.out.println(Cuerpo.sigID); También se puede acceder a un miembro estático mediante una referencia a un objeto de la clase, pero se recomienda no hacerlo y hacerlo 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 el siguiente número de identificación del vehículo, y un campo no estático para 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és de ser inicializada. Si se intenta asignar a este tipo de variable se produce un error de compilación. Se usan para definir constantes con nombre, es decir, propiedades inmutables. Si un campo final no tiene un inicializador se denomina final en blanco, y se usa cuando no se puede inicializar el campo de forma simple. Java p. 18

Qué 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 de identificación debería ser final? Java p. 20

Control de acceso Para que la comprensión, depuración y mantenimiento de los programas sea posible se requiere que sólo algunos miembros de una clase u objeto sean accesibles. En la programación orientada a objetos se proporciona soporte para el encapsulado 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 propia clase o interfaz. El control se especifica usando modificadores de acceso en las declaraciones de clases, interfaces y miembros. Java p. 21

Modificadores de acceso Todos los miembros de una clase son siempre accesibles al código de la propia clase. Para controlar el acceso desde otras clases, los miembros de una clase tiene cuatro posibles modificadores. private los miembros sólo son accesibles en la propia clase protected 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 acceso por defecto, es decir, si no se indica modificador es el que será usado. public los miembros son accesibles en cualquier parte donde la clase sea accesible. Los modificadores de acceso private y protected se aplican sólo a miembros, no a las propias clases o interfaces a menos que sean anidadas. Java p. 22

Creación de objetos Los objetos que representan los cuerpos celestes particulares se crean e inicializan 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 la cual 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án para su construcción. Java p. 23

Creación de objetos (continuación) El sistema en tiempo de ejecución reserva espacio suficiente para almacenar los campos del objeto y lo inicializa. Si el sistema no consigue espacio suficiente para crear el objeto, puede usar el recogedor de basura para intentar obtener espacio. En el ejemplo, cada nuevo objeto Cuerpo obtiene un identificador único a través del campo estático sigid de Cuerpo. También se realiza un incremento del campo anterior para que el siguiente Cuerpo obtenga un identificador único. En el ejemplo se construye un modelo del sistema solar, por lo tanto el sol 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 borran explí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, puede ser tan sencillo como retornar de algún método, o en el caso de referencias más perdurables, como los campos de objetos, se pueden poner a null. Java p. 25

T A R E A 5. Escriba un método main para la clase Vehiculo que cree unos cuantos vehículos e imprima los valores de sus campos. 6. Escriba un método main para la clase ListaEnlazada que cree unos cuantos objetos de tipo Vehiculo y los sitúe en nodos sucesivos de la lista. Java p. 26

Construcción e inicialización 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 simple asignación. Java p. 27

Constructores Son bloques de sentencias que se usan para inicializar un objeto antes de 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 y después de que sus inicializadores explícitos se hayan ejecutado. Java p. 28

Constructor e inicialización para Cuerpo La declaración de un constructor consiste en el nombre de la clase seguido por una lista de parámetros y un cuerpo de sentencias encerradas 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 numid y también la única entidad que accede a sigid, se puede hacer que sigid sea privado, para que sólo se pueda acceder dentro de la clase Cuerpo. Java p. 29

Creación de objetos con el constructor Se muestran ejemplos del uso del constructor de la clase Cuerpo. Cuerpo sol = new Cuerpo(); // numid vale 0 sol.nombre = "Sol"; sol.orbita = null; Cuerpo tierra = new Cuerpo(); // numid vale 1 tierra.nombre = "Tierra"; tierra.orbita = sol; El constructor de Cuerpo se invoca cuando new crea el objeto pero después de que nombre y orbita han tomado sus valores iniciales por defecto. 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 usando this, 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 no gire 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 inicialización 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 inicialización 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

Métodos 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 Método 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 método modificadores de acceso Puede ser private, package, protected, public abstract. Método en el cual no se ha definido el cuerpo. La subclase será responsable de proporcionar un cuerpo. static. Se emplea para realizar una tarea general para todos los objetos de 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

Métodos estáticos Se invoca en nombre de una clase completa y no sobre un objeto especí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 de identificación más alto utilizado hasta el momento. Java p. 39

Invocaciones de métodos Los métodos se invocan como operaciones sobre objetos, mediante referencias usando el operador punto. referencia.metodo ( parámetros ); Cada método se declara con un número específico de parámetros, cada uno de ellos de un tipo específico: un tipo primitivo o un tipo de referencia. 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 estado de un objeto. El método devuelve una representación de cadena de texto del estado del objeto, en vez de acceder y proguntar por todos los campos de un objeto. 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étodo tostring. 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

Ejecución de un método y retorno Al ser invocado un método el flujo de control pasa del método que invoca al método invocado, y se ejecutan las sentencias en secuencia de acuerdo con su semántica. Un método completa su ejecución y retorna al que lo llama cuando sucede 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 como un 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, puedecerrar; 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 parámetros Los parámetros de métodos se pasan por valor, es decir, son copias de los valores con los que fue invocado el método. Si el método cambia el valor del parámetro no se afectan los valores en el código que lo invocó. Cuando el parámetro es una referencia a un objeto, la referencia al objeto (no el objeto en sí) es lo que se pasa por valor, con lo anterior es posible cambiar a qué objeto se refiere un parámetro. Pero si se cambian campos del objeto o se invocan métodos que cambian el estado del objeto, 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és: uno = " + uno); public static void calculamitad(double arg) { arg /= 2.0; // se divide arg por 2 System.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és: " + sirio ); public static void nombrecomun(cuerpo refcuerpo) { refcuerpo.nombre = " Estrella del Perro"; System.out.println( "nombrecomun: " + refcuerpo ); Java p. 47

Uso de métodos para control de acceso Los datos de sólo lectura son comunes en los objetos, pero no existe alguna palabra clave para aplicarla a un campo. Se puede forzar que el acceso sea de sólo lectura usando final, o bien ocultando el campo usando private y proporcionando un nuevo mé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 métodos para control de acceso (cont.) Los métodos que regulan el acceso a los datos internos se denominan algunas 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 de só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, y proporcione métodos de acceso para dichos campos. Qué campos deberían tener métodos para cambiarlos, y cuáles no? 11. Haga que los campos de su clase ListaEnlazada sean private, y proporcione métodos de acceso para dichos campos. Qué campos deberían tener métodos para cambiarlos, y cuáles no? 12. Añada un método denominado cambiarvelocidad que cambie el valor actual de la velocidad del vehículo con un valor que se proporciona y añ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 de elementos de la lista. Java p. 50

this Con los constructores se dió un ejemplo donde se usa la invocación explícita a un constructor para invocar a otro constructor al principio de un constructor. Se puede usar la referencia especial a un objeto this dentro de un método no estático. No existe referencia this en un método estático ya que no opera sobre ningún objeto específico. Se utiliza comúnmente para pasar una referencia del objeto actual como parámetro para otros métodos. Se muestra un método que requiere añadir el objeto actual a una lista de objetos 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 un campo o invocación de método del objeto actual, pero convencionalmente 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 los parámetros del mismo nombre. Java p. 52

Sobrecarga de métodos Todos los métodos tienen una signatura, que consiste en su nombre junto con el número y tipo de parámetros. Dos métodos pueden tener el mismo nombre si tienen diferente número o tipo de parámetros, y por lo tanto diferente signatura. Esta característica se denomina sobrecarga, ya que el nombre simple del método tiene más de un significado. Se muestran algunos métodos orbitaalrededorde de la clase Cuerpo que devuelven true si el cuerpo actual gira alrededor del cuerpo 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úmero de grados de giro otro que tome una de las constantes Vehiculo.GIRO_IZQUIERDA o Vehiculo.GIRO_DERECHA. Java p. 54

El método main Siempre se debe proporcionar el nombre de una clase que conduzca la aplicación. Al ejecutar un programa, el sistema localiza y ejecuta el método main de esa 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 cuyos nombres se especifiquen en la línea de comandos, y después los muestre. Java p. 56

Métodos nativos Se usan cuando se tiene un código que no está escrito en Java, o bien cuando 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 pueden sobrecargar, 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