Download clases y objetos

Document related concepts
no text concepts found
Transcript
Programación Avanzada para Sistemas
de Telecomunicación
Objetos y clases
Juan Carlos Cruellas
[email protected]
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Objetos y clases
•
•
•
•
•
Concepto de objeto.
Concepto de clase.
Clases, objetos y programas.
Clases en Java.
Objetos en Java.
– Creación de objetos (instanciación de clases).
– Acceso a miembros de objetos.
• Modificadores.
– static
– final
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Concepto de objeto
• Definición de objeto: .
– Entidad que contiene unos datos particulares (DATOS
MIEMBRO) y unas operaciones concretas sobre ellos
(FUNCIONES MIEMBRO).
• Elementos a resaltar:
– Un objeto contiene información: DATOS MIEMBRO
(también llamados atributos). En C los struct también
podían contener información de diferente tipo (miembros de
la estructura).
– Un objeto además (y ahí radica la gran diferencia con los
tipos de datos estructurados de C), posee operaciones que
manipulan los valores de los datos miembro: FUNCIONES
MIEMBRO (métodos).
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Concepto de objeto
No orientación
a objetos
Struct_0
Función_0
Struct_1
Orientación
a objetos
Objeto_0
dato_0
dato_1
Función_1
función_0
Función_2
Struct_2
U PC
Departamento
Arquitectura
Computadores
función_1
función_2
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Concepto de clase
• Una clase es una abstracción que describe un
conjunto de objetos que poseen los mismos datos
miembro (los datos miembro de cada objeto particular
pueden tener diferentes valores), las mismas
funciones miembro (idéntico código) y la misma
semántica.
• A un objeto de una clase también se le denomina
instancia de una clase.
• Un ejemplo de clase:
– Aulario: cualquier edificio con aulas.
– Coordenada de tablero de ajedrez: un par de enteros del 1
al 8.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Concepto de clase
• Un ejemplo de objeto:
– El aulario A6. Uno de los aularios del campus.
– La coordenada (1,3).
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases, objetos y programas
• Un programa escrito en un lenguaje orientado a
objetos contiene instrucciones que:
– Definen clases.
– Crean objetos (instancian clases).
– Los hacen interaccionar con otros objetos (invocando a
funciones miembro de otros objetos).
– Destruyen objetos cuando no son necesarios.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases, objetos y programas
• En programación orientada a objetos, clases y objetos
pasan a ser elementos en torno a los cuales giran
todas las actividades propias del análisis, el diseño, la
implementación y las pruebas.
• Algunas tareas importantes del proceso de desarrollo
de software :
– Narración detallada del funcionamiento del código a
desarrollar.
– Identificación de las clases que formarán parte del programa
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases, objetos y programas
– Identificación, para cada clase, de sus datos miembro.
– Identificación, para cada clase, de sus funciones miembro.
– Propuesta de secuencia temporal de interacciones entre
objetos de las clases (invocaciones de funciones de objetos
por parte de funciones de otros objetos).
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java: sintaxis de definición de
clases
public: modificador de acceso. Indica desde qué partes del
programa puede accederse a objetos de esta clase.
class: clave que indica que lo que se define a continuación
es una clase.
Coordinate: nombre de la clase. Elegida por usuario. Regla:
comienza por MAYÚSCULA.
public class Coordinate{
}
{: indica el comienzo de la definición de la clase.
}: indica el final de la definición de la clase.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java: sintaxis definición de datos
miembro
protected: modificador de acceso. Indica desde qué partes del
programa puede accederse los datos miembros.
int: indica el tipo de la información almacenada en los datos
miembros.
row, col: nombres de los datos miembros. Elegidos por
usuario. Regla: comienza por minúscula.
public class Coordinate{
protected int row,col ;
}
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java: sintaxis definición de datos
miembro
• Java reutiliza la sintaxis de declaración de variables
de C para la definición de datos miembro,
anteponiendo el modificador de acceso.
• Algunos tipos primitivos predefinidos de Java (se
comentarán más tarde):
– int, float, double, char, unsigned int, long, boolean
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java: sintaxis definición de
funciones miembro
public class Coordinate{
protected int row,col ;
public int getRow(){
return this.row ;
}
}
• Java reutiliza la sintaxis de definición de funciones de
C para la definición de funciones miembro,
anteponiendo el modificador de acceso.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java: sintaxis definición de
funciones miembro
•
La función anterior devuelve el valor del dato
miembro row del objeto.
•
La definición de una función (salvo algunas
excepciones) DEBE INDICAR el valor o clase de
objeto devuelto entre el modificador de acceso y el
nombre de la función.
Si una función no devuelve valor alguno, se usará la
partícula void.
•
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java: sintaxis definición de
funciones miembro
•
•
Las funciones java también pueden devolver objetos.
Desde las funciones miembro puede accederse a los
datos miembro de dos formas:
1. Escribiendo su nombre sin más (return row ;)
2. Anteponiendo a su nombre la clave this
(return this.row ;).
•
La opción 2 elimina potenciales problemas si en la
función aparece una variable o un argumento con el
mismo nombre del dato miembro.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java. Funciones especiales:
constructores
• Toda clase Java dispone de unas funciones con un
cometido muy especial: ASIGNAR VALORES
INICIALES A LOS DATOS MIEMBRO.
• Estas funciones especiales son LOS
CONSTRUCTORES.
• CARACTERÍSTICAS:
– Una clase puede disponer de VARIOS CONSTRUCTORES.
– Ningún constructor devuelve nada. Son las únicas funciones
en las que no se indica el valor u objeto devuelto.
– Todos los constructores tienen el mismo nombre: el
NOMBRE DE LA CLASE.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java. Funciones especiales:
constructores
– Todos los constructores deben diferenciarse entre sí en la
lista de argumentos.
– NOTA: Esta es una regla general en Java. Una
clase puede tener VARIAS FUNCIONES CON EL
MISMO NOMBRE SIEMPRE Y CUANDO TENGAN
DIFERENTES LISTAS DE ARGUMENTOS.
– En su versión más simple, el código de los constructores
serán instrucciones de asignación de valores a los datos
miembro.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java. Funciones especiales:
constructores
• Constructor sin argumentos. También conocido
como constructor por defecto:
– Tiene la lista de argumentos vacía.
– Solo puede haber uno por clase.
– Se usa en aquellas ocasiones en las que el diseñador sabe
que los datos miembro de algunos objetos de la clase deben
tener unos valores iniciales constantes y conocidos de
antemano.
– En su versión más simple: sentencias de asignación a
valores constantes.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java. Funciones especiales:
constructores
public Coordinate(){
this.row = 1 ;
this.col = 1 ;
}
El constructor por defecto asigna el valor 1 a los datos row y
col.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java. Funciones especiales:
constructores
• Si una clase no dispone de un constructor por defecto, el
compilador Java construye uno automáticamente. Dicho
constructor asigna los valores a los datos en función de su tipo:
– Datos numéricos: el valor 0.
– Datos booleanos: el valor false.
– Datos carácter: el carácter vacío.
• En el caso anterior, si el diseñador no lo hubiera añadido, el
compilador de Java crearía un constructor que asignaría los
valores 0 a ambos. PERO ESOS VALORES SON
INCORRECTOS, ya que hemos dicho que las coordenadas del
tablero de ajedrez van de 1 a 8!!!..
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java. Funciones especiales:
constructores
public class Coordinate{
protected int row,col ;
public Coordinate(){
this.row = 1 ;
this.col = 1 ;
}
public int getRow(){
return this.row ;
}
}
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java. Funciones especiales:
constructores
• Constructores con argumentos.
– Una clase puede disponer de VARIOS constructores con
argumentos siempre y cuando sus listas de argumentos
sean distintas.
– Todos ellos tienen algún argumento.
– Permiten al diseñador crear objetos asignando en tiempo de
ejecución los valores iniciales de sus datos miembros.
– En su versión más simple: sentencias de asignación a
valores de los argumentos.
– En ellos aparece por primera vez el problema del ámbito de
valores permitidos para cada uno de los datos miembro
(COHERENCIA de los valores de los datos miembro).
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java. Funciones especiales:
constructores
• Versión no tolerante a fallos, y por tanto incorrecta:
public Coordinate(int r,int c){
this.row = r ;
this.col = c ;
}
• El constructor asigna a row el valor que tenga el
argumento r y a col el valor que tenga c.
• Sin embargo, este código NO es correcto. ¿Por
qué?
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java. Funciones especiales:
constructores
• En caso de que r tuviera un valor 9, el constructor
CREARÍA UNA COORDENADA CON UN VALOR
DE FILA 9, COSA QUE NO PUEDE SUCEDER por
la propia definición de la clase coordenada de
ajedrez!!!.
• El constructor con argumentos, DEBE ASEGURAR
que el valor de cada uno de los datos miembros
pertenezca al ámbito definido por la propia clase.
• Si el valor del argumento correspondiente no
pertenece a dicho ámbito, el constructor NO DEBE
ASIGNAR VALORES INICIALES Y DEBE SEÑALAR
LA EXISTENCIA DE UNA SITUACIÓN ANÓMALA.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java. Funciones especiales:
constructores
• Antes de asignar valores a los datos miembro, el
constructor con argumento COMPRUEBA la
coherencia de los valores de los argumentos
mediante el CÓDIGO DE GUARDA, que está al
comienzo de la función y consta de:
– Una o varias sentencias condicionales.
– Instrucciones especiales para señalar situaciones
anómalas que evitan la ejecución normal de la función si
alguna de las condiciones de coherencia de valores no se
cumple .
• Las asignaciones de valores a los datos miembro
aparecen después del código de guarda.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java. Funciones especiales:
constructores
public Coordinate(int r,int c){
if(r<1 || r>8 || c<1 || c>8)
throw new IllegalArgumentException("COORDINATE") ;
this.row = r ;
this.col = c ;
}
– La sentencia if() comprueba la corrección semántica de los
valores de los argumentos.
– La sentencia que comienza con throw… devuelve el
control a la función invocante . Si hay algún valor
incorrecto, las dos últimas sentencias NO se ejecutan y
NO se asigna valor a los datos miembros.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java. Funciones especiales:
constructores
• Ventajas de señalar errores y no asignar valores:
– No se permite continuar la ejecución con valores erróneos.
Ello solo llevaría a perder tiempo.
– En su lugar, tan pronto como se detecta un valor erróneo se
señala. Si hay un valor erróneo es porque antes de invocar
al constructor SE HA REALIZADO UN CÁLCULO
ERRÓNEO. Que sea el constructor quien señale el error
FACILITA ENORMEMENTE LA DEPURACIÓN DEL RESTO
DEL PROGRAMA!!. En lugar de esperar a finalizar la
ejecución, el diseñador puede pasar directamente a depurar
el código.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java. Funciones especiales:
constructores
public class Coordinate{
protected int row,col ;
public Coordinate(){
this.row = 1 ;
this.col = 1 ;
}
public Coordinate(int r,int c){
if(r<1 || r>8 || c<1 || c>8)
throw new IllegalArgumentException("COORDINATE") ;
this.row = r ;
this.col = c ;
}
public int getRow(){
return this.row ;
}
}
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java. Funciones especiales: asignación a
e inspección de valores de datos miembro
• Junto con los constructores hay un conjunto de
funciones que prácticamente todas las clases tienen:
las de acceso a los valores de los datos miembro.
• Pueden ser de dos tipos:
– Acceso para inspección de valores (operaciones getXXX).
– Acceso para asignación de valores (operaciones setXXX).
• En principio, conviene que haya una de cada por cada
dato miembro de la clase.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java. Funciones especiales: asignación a
e inspección de valores de datos miembro
• Operaciones de acceso para inspección de valores:
– Práctica recomendable: que haya una por dato miembro.
– Es recomendable que sus nombres sean getXXX, donde
XXX debería ser el nombre del dato miembro asociado:
• Los nombres de las funciones de inspección para la clase
Coordinate serían: getRow y getCol.
– NO tienen lista de argumentos.
– Tienen un único cometido: devolver el valor del
correspondiente dato miembro. Generalmente una sola
instrucción return.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java. Funciones especiales: asignación a
e inspección de valores de datos miembro
public int getRow(){
return this.row ;
}
public int getCol(){
return this.col ;
}
• Cada función permite inspeccionar el valor de uno de
los datos miembro.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java. Funciones especiales: asignación a
e inspección de valores de datos miembro
• Operaciones de acceso para asignación de valores:
– Práctica recomendable: que haya una por dato miembro.
– Es recomendable que sus nombres sean setXXX, donde
XXX debería ser el nombre del dato miembro asociado:
• Los nombres de las funciones de inspección para la clase
Coordinate serían: setRow y setCol.
– Argumento: el valor a asignar al dato miembro en cuestión.
– No devuelven valor alguno (void).
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java. Funciones especiales: asignación a
e inspección de valores de datos miembro
– Tareas:
• En algunas ocasiones comprobar que el valor a asignar es
semánticamente correcto. Código de guarda.
• Si el valor es semánticamente correcto, asignarlo al dato
miembro. Si no, señalar la presencia de una situación anómala
y NO asignar el valor.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java. Funciones especiales: asignación a
e inspección de valores de datos miembro
public void setRow(int r){
if(r<1 || r>8)
throw new IllegalArgumentException(“ROW") ;
this.row = r ;
}
public void setCol(int c){
if(c<1 || c>8)
throw new IllegalArgumentException(“COLUMN") ;
this.col = c ;
}
• Cada función permite asignar un valor a cada función.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java.
public class Coordinate{
protected int row,col ;
public Coordinate(){
this.row = 1 ;
this.col = 1 ;
}
public Coordinate(int r,int c){
if(r<1 || r>8 || c<1 || c>8)
throw new IllegalArgumentException("COORDINATE") ;
this.row = r ;
this.col = c ;
}
public int getRow(){
return this.row ;
}
public int getCol(){
return this.col ;
}
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Clases en Java.
public void setRow(int r){
if(r<1 || r>8)
throw new IllegalArgumentException(“ROW") ;
this.row = r ;
}
public void setCol(int c){
if(c<1 || c>8)
throw new IllegalArgumentException(“COLUMN") ;
this.col = c ;
}
//Asigna valores a los dos datos miembros.
public void set(int r,int c){
if(r<1 || r>8 || c<1 || c>8)
throw new IllegalArgumentException("COORDINATE") ;
this.row = r ;
this.col = c ;
}
}
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Objetos en Java: creación de objetos
public class MainClass{
public static void main(String [] args){
Coordinate c0 = new Coordinate() ;
}
}
• La creación de un objeto se hace en dos pasos:
– Se invoca a un operador especial: new.
– Se invoca a un constructor.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Objetos en Java: creación de objetos
• ATENCION:
– main() es la función principal de toda aplicación Java.
– Java no admite funciones fuera de las clases. Por tanto,
main() debe ser una función miembro de una clase.
– Su sintaxis es EXACTAMENTE la indicada. Si se obvia
alguna parte, el compilador de Java no la identificará como
la función principal.
– Si al intentar ejecutar el programa, la máquina virtual no
encuentra ninguna en ningún archivo, lanza un error .
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Objetos en Java: creación de objetos
• Operador new:
– Reserva un bloque de memoria del tamaño adecuado para
contener un objeto de la clase pertinente. Gestión dinámica
de memoria: el bloque se asigna en tiempo de ejecución, no
en tiempo de compilación.
– Devuelve la dirección de comienzo del bloque de memoria.
• Constructor:
– Asigna valores iniciales a los datos miembro del objeto
creado en memoria.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Objetos en Java: creación de objetos
• Comentarios al código:
Coordinate c0 = new Coordinate() ;
– El operador new está a la derecha de una asignación
– new reserva un bloque de memoria y devuelve una
dirección.
– Esa dirección se asigna a una variable (c0).
– En consecuencia c0 es una variable CUYO VALOR ES UNA
DIRECCIÓN a un bloque de memoria que contiene un
objeto de clase Coordinate (terminología Java: una
REFERENCIA a un objeto)!!!.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Objetos en Java: creación de objetos
1. c0 inicialmente contiene una
dirección de valor null (no
apunta a ningún sitio)
2. new busca un bloque libre
del tamaño adecuado y
cuando lo encuentra, lo
reserva.
3. El constructor asigna
valores iniciales a los datos
miembro.
4. new devuelve la dirección
del bloque. Esta se asigna a
c0 que queda apuntando al
objeto recién creado
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
1
c0
2
4
c0
3
row=1
col=1
Grupo de Aplicaciones Telemáticas
Objetos en Java: acceso a miembros
• Acceder a una función miembro de un objeto significa
invocar a esa función, lanzar su ejecución, previo
paso de los argumentos pertinentes.
• Acceder a un dato miembro de un objeto significa
situarse en la posición de memoria en la que se
almacena su valor.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Objetos en Java: acceso a miembros
public class MainClass{
public static void main(String [] args){
Coordinate c0 = new Coordinate() ;
c0.setRow(1) ;
}
}
• Sintáxis de acceso a un miembro de un objeto:
nombre de objeto
U PC
Departamento
Arquitectura
Computadores
. nombre de miembro
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Objetos en Java: acceso a miembros
• Los modificadores de acceso ponen restricciones a
los lugares del programa desde los cuales pueden
realizarse los accesos mencionados.
• El modificador public indica que puede accederse al
miembro DESDE CUALQUIER PUNTO DEL
PROGRAMA.
– La sentencia “c0.setRow(1);“ es correcta: la función
setRow() de Coordinate es una función pública.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Objetos en Java: acceso a miembros
public class MainClass{
public static void main(String [] args){
Coordinate c0 = new Coordinate() ;
c0.setRow(1) ; // correcto: setRow()es public
c0.row = 1 ; /*error!!: row es un dato
protegido. No se compilará.*/
}
}
– El acceso al dato miembro row desde una función que no es
de la clase Coordinate ESTÁ PROHIBIDO. El compilador
avisa de que “ c0.row = 1; “ es incorrecta.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Objetos en Java: acceso a miembros.
public class Coordinate{
protected int row,col ;
public Coordinate(){
this.row = 1 ;
this.col = 1 ;
}
public Coordinate(int r,int c){
if(r<1 || r>8 || c<1 || c>8)
throw new IllegalArgumentException("COORDINATE") ;
this.row = r ; /* CORRECTO: dato protegido PERO acceso desde función de
la propia clase */
this.col = c ; // IDEM
}
– Al dato protegido puede accederse desde cualquier función
de la propia clase. Por eso “ this.row = r; “ es correcta.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Objetos en Java: acceso a miembros.
Modificador
de acceso
public
protected
Acceso permitido desde…
Cualquier punto del programa
Desde funciones de la misma clase.
Desde funciones de clases derivadas de la clase.
Desde funciones de la misma clase.
Desde funciones de clases del mismo package.
private
U PC
Desde funciones de la misma clase.
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Modificadores.
• Además de los modificadores de acceso existen otros
modificadores que pueden aplicarse a los miembros
de una clase: static y final.
• Cada uno de ellos puede aplicarse a un dato miembro
o a una función.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Modificadores: static (miembros de clase)
• Cuando a un miembro de una clase se le antepone el
modificador static se fuerza a que TODOS LOS
OBJETOS DE DICHA CLASE COMPARTAN DICHO
MIEMBRO; esto es, el miembro NO es un miembro de
objeto sino de clase.
• El acceso a estos miembros NO se realiza a través de
ningún objeto, sino a través de la propia clase.
• DATO MIEMBRO ESTATICO:
– Todos los objetos de esa clase COMPARTEN EL DATO
MIEMBRO. SOLO HAY UN DATO EN MEMORIA: EL
CORRESPONDIENTE A LA CLASE.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Modificadores: static (miembros de clase)
– Usos:
• Atributo con un valor común para todos los objetos de esa
clase.
• Gestión de constantes (junto con el modificador final).
– Puede accederse a estos datos INCLUSO SIN HABER
CREADO NINGUN OBJETO DE LA CLASE
– SINTAXIS DE DEFINICIÓN:
public static int a ;
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Modificadores: static (miembros de clase
d2 = v2
O1
d0 = v10
O2
El dato estático
d2 es COMPARTIDO
por todos los objetos.
d1 = v11
U PC
Departamento
Arquitectura
Computadores
d0 = v20
d1 = v21
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Modificadores: static (miembros de clase)
• FUNCIÓN ESTÁTICA DE UNA CLASE.
– Conceptualmente solo hay una copia de la función.
– La función puede invocarse INCLUSO SIN HABER
CREADO NINGUN OBJETO DE LA CLASE.
– Usos:
• Construcción de librerías de funciones. Si se crea una clase
con todas las funciones estáticas NO será necesario crear
ningún objeto de esa clase antes de invocar a cualquiera de
ellas. EJEMPLO: la clase Math de Java solo tiene funciones
matemáticas estáticas (no hay dato miembro alguno).
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Modificadores: static (miembros de clase)
– Sintaxis de definición:
public static double sin(double x) ;
• SINTAXIS DE ACCESO:
nombre de clase
. nombre de miembro
– En lugar del nombre del objeto, el punto viene precedido por
el NOMBRE DE LA CLASE, ya que el dato o función
miembro estático NO pertenece a ningún objeto en concreto
sino a la clase en sí.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Modificadores: static (miembros de clase)
– Ejemplo:
double x = Math.sin(y) ;
– La función sin(x) viene precedida por el nombre de la clase.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Modificadores: final
• Cuando a un dato miembro de una clase se le antepone el
modificador final se está definiendo un dato miembro con un
valor CONSTANTE.
• Para definir constantes visibles desde todo el programa, se
define, dentro de la clase pertinente, un dato miembro
público, estático y final.
public class PhysicsConstants{
public static final double PI = 3,141592 ;
public static final double EPSILON0 = 8.8541878176e-12 ;
}
– Regla: las constantes se escriben CON MAYÚSCULAS.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Modificadores: final
• Cuando a una función miembro de una clase se le
antepone el modificador final se:
– Impide que ninguna clase derivada pueda redefinir el
comportamiento de dicha función. Se aclarará este aspecto
cuando se vea herencia.
– Se fuerza al compilador a no generar código de invocación a
la función sino a insertar directamente el código interno de
la función allí donde aparezca la invocación (ahorro de
proceso de llamada y recuperación del valor devuelto).
ADVERTENCIA: NO ABUSAR. Es difícil saber con
seguridad qué funciones necesitarán modificar las clases
derivadas.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas
Modificadores: final
• Cuando a un argumento de una función le precede el
modificador final, se impide que en el interior de la
función se altere el valor del argumento, si es de tipo
primitivo, o el contenido de lo referenciado por el
argumento, si es una referencia a un objeto.
U PC
Departamento
Arquitectura
Computadores
© J.C. Cruellas
Grupo de Aplicaciones Telemáticas