Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf ·...

29
Departamento Arquitectura Computadores UPC Grupo de Aplicaciones Telemáticas © J.C. Cruellas Programación Avanzada para Sistemas de Telecomunicación Objetos y clases Juan Carlos Cruellas [email protected] Departamento Arquitectura Computadores UPC Grupo de Aplicaciones Telemáticas © J.C. Cruellas 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

Transcript of Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf ·...

Page 1: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

Programación Avanzada para Sistemas de Telecomunicación

Objetos y clases

Juan Carlos [email protected]

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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

Page 2: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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).

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

Concepto de objeto

Struct_0

Struct_2

Función_0

Función_1

Función_2

Struct_1

Objeto_0

dato_0

dato_1

función_0

función_1

función_2

No orientación a objetos

Orientación a objetos

Page 3: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

Concepto de clase

• Un ejemplo de objeto: – El aulario A6. Uno de los aularios del campus.– La coordenada (1,3).

Page 4: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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

Page 5: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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).

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

Clases en Java: sintaxis de definición de clases

public class Coordinate{

}

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.

{: indica el comienzo de la definición de la clase.}: indica el final de la definición de la clase.

Page 6: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

Clases en Java: sintaxis definición de datos miembro

public class Coordinate{

protected int row,col ;

}

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.

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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

Page 7: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

Page 8: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

Page 9: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

Page 10: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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!!!..

Page 11: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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 ;

}

}

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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).

Page 12: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

Clases en Java. Funciones especiales: constructores

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é?

• Versión no tolerante a fallos, y por tanto incorrecta:

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

Page 13: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

Page 14: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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 ;

}

}

Clases en Java. Funciones especiales: constructores

Page 15: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

Page 16: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

Clases en Java. Funciones especiales: asignación a e inspección de valores de datos miembro

• Cada función permite inspeccionar el valor de uno de los datos miembro.

public int getRow(){

return this.row ;

}

public int getCol(){

return this.col ;

}

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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).

Page 17: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

Clases en Java. Funciones especiales: asignación a e inspección de valores de datos miembro

• Cada función permite asignar un valor a cada función.

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 ;

}

Page 18: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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 ;

}

Clases en Java.

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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 ;

}

}

Clases en Java.

Page 19: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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 .

Page 20: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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)!!!.

Page 21: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

Objetos en Java: creación de objetos

1. c0 inicialmente contiene una dirección de valor null (no apunta a ningún sitio)

c0

2. new busca un bloque libre del tamaño adecuado y cuando lo encuentra, lo reserva.

1

2

3. El constructor asigna valores iniciales a los datos miembro.

col=1

row=13

4. new devuelve la dirección del bloque. Esta se asigna a c0 que queda apuntando al objeto recién creado

c04

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

Page 22: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

Objetos en Java: acceso a miembros

• Sintáxis de acceso a un miembro de un objeto:

nombre de objeto . nombre de miembro

public class MainClass{

public static void main(String [] args){

Coordinate c0 = new Coordinate() ;

c0.setRow(1) ;

}

}

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

Page 23: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

Objetos en Java: acceso a miembros

– 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.

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á.*/

}

}

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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

}

Objetos en Java: acceso a miembros.

– Al dato protegido puede accederse desde cualquier función de la propia clase. Por eso “ this.row = r; “ es correcta.

Page 24: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

Objetos en Java: acceso a miembros.

Desde funciones de la misma clase.private

Desde funciones de la misma clase.Desde funciones de clases del mismo package.

Desde funciones de la misma clase.Desde funciones de clases derivadas de la clase.

protected

Cualquier punto del programapublic

Acceso permitido desde…Modificador de acceso

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

Page 25: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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 ;

Page 26: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

Modificadores: static (miembros de clase

O 1 O 2

d0 = v10

d1 = v11

d0 = v20

d1 = v21

d2 = v2

El dato estáticod2 es COMPARTIDOpor todos los objetos.

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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).

Page 27: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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í.

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

Modificadores: static (miembros de clase)

– Ejemplo:

double x = Math.sin(y) ;

– La función sin(x) viene precedida por el nombre de la clase.

Page 28: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.

Page 29: Programación Avanzada para Sistemas de …people.ac.upc.edu/cruellas/past/Clases-y-objetos.pdf · • Clases, objetos y programas. • Clases en Java. • Objetos en Java. – Creación

DepartamentoArquitecturaComputadores

U P C

Grupo de Aplicaciones Telemáticas© J.C. Cruellas

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.