SlideShare una empresa de Scribd logo
1 de 26
Descargar para leer sin conexión
Tema 4. Tipos de datos: clases y
referencias
Introducción a la Informática y a la Programación (IIP)
Curso 2011/12
Departamento de Sistemas Informáticos y Computación
Contenidos
1. Introducción
2. Ejemplo de definición y uso de una clase
3. Inicialización de los atributos
4. Representación en memoria de los objetos. Variables referencia
5. Diferencias entre variables elementales y objetuales
 Declaración. Operador new
 El operador de acceso "."
 La asignación
 Copia de objetos
 Comparación de objetos
 El garbage collector
6. Información de clase. Modificador static
07/10/2011 IIP - Curso 2011/12 2
Introducción
• En Java es posible utilizar elementos cuyos valores no son tipos primitivos.
• Un valor no perteneciente a un tipo primitivo es un tipo compuesto o
estructurado. Para definirlos en Java se utilizan las clases.
• Un elemento perteneciente a un tipo no primitivo, definido con una clase, es
un objeto.
• El valor de una variable objeto, debe entenderse como la agregación de los
valores individuales de sus componentes o atributos; estos podrán ser tanto
valores individuales como estructurados.
07/10/2011 3IIP - Curso 2011/12
// Crear un Circulo de radio 50, amarillo, con centro
// en (100,100)
Circulo c1 = new Circulo(50,"amarillo",100,100);
// Añadirlo a la Pizarra y dibujarlo
miPizarra.add(c1);
Introducción
Recordatorio de esquema de definición de una clase (tema 2):
[modificadores] class NombreDeLaClase [ extends OtraClase ] {
// Definición de atributos
[[modificadores] tipo nomVar1;
[modificadores] tipo nomVar2;
... ... ...
[modificadores] tipo nomVarN; ]
// Definición de métodos
// Constructores
... ... ...
... ... ...
// Otros métodos
}
07/10/2011 4IIP - Curso 2011/12
Ejemplo de definición y uso de una clase
• Se desea representar un punto en un espacio de dos dimensiones
(dos valores reales). Definición de la clase:
• Almacenado el código en un fichero (Punto.java) y tras haberlo
compilado, puede usarse para definir y utilizar variables de tipo
Punto en otra clase Java.
07/10/2011 5IIP - Curso 2011/12
class Punto {
double x; // la abscisa
double y; // la ordenada
// el constructor por defecto no es necesario
public Punto() { } //constructor por defecto
}
Ejemplo de definición y uso de una clase
07/10/2011 6IIP - Curso 2011/12
class PruebaPunto {
public static void main(String[] args) {
// se definen e inicializan dos variables de tipo Punto
Punto p1 = new Punto(); Punto p2 = new Punto();
// se asignan valores a los atributos de p1:
p1.x = 1.0; p1.y = 1.0;
// se asignan valores a los atributos de p2 usando p1:
p2.x = 2.0 * p1.x; p2.y = -2.0 * p1.y;
// se escriben los valores de los atributos de p2:
System.out.println("(" + p2.x + "," + p2.y +")");
}
}
Ejemplo de definición y uso de una clase
Algunas características, generalizables, de las clases de los ejemplos son:
• Mediante la operación new se crea un objeto de la propia clase. Después se
pueden utilizar los elementos del objeto: atributos y métodos.
• Los atributos de una clase pueden ser de cualquier tipo (elementales o no). Se
utilizan siguiendo las reglas de uso de las variables de dicho tipo.
• En el ejemplo se han definido sin modificador de acceso, esto se conoce como
acceso friendly: accesibles desde todas las clases del paquete en que se
encuentre la clase en que se definen.
– Pero habitualmente se definirán de acceso privado, private, por ocultación y seguridad.
• El uso de los elementos del objeto se hace utilizando la notación de punto. En
particular, a los atributos se les asigna o lee su valor utilizando:
07/10/2011 7IIP - Curso 2011/12
nombreDeVariableObjeto.nombreDeAtributo
Inicialización de los atributos
• Cuando el objeto se crea, sus atributos se inicializan por defecto:
– A cero los numéricos, al código cero los char y a false los boolean.
– A null, que representa la inexistencia, los objetos.
• Se les puede dar un valor inicial explícitamente, por ejemplo:
• También se pueden inicializar en los constructores (tema 5).
En todo caso, la secuencia de ejecución de la inicialización es:
07/10/2011 8IIP - Curso 2011/12
class Punto {
double x = 1.0; double y = 1.0;
public Punto() { }
}
Por defecto explícitamente en los constructores
Representación en memoria. Referencias
Cuando se crea un objeto y se asigna a una variable, el sistema le
asocia memoria dividiéndola en dos partes:
• Una parte asociada al objeto como tal, mediante la que se mantiene su
información (valores de atributos y métodos que se pueden aplicar).
– La zona del sistema en la que se guarda la memoria de los objetos que se crean
durante la ejecución se denomina montículo (heap).
• Otra parte de memoria se asocia a la variable con la que se nombra al objeto.
Mediante la misma, el sistema determina en ejecución dónde se encuentra el
objeto para poder actuar con él.
Cuando se crea un objeto, se dice que mediante la variable que da nombre al
objeto se referencia la zona de memoria donde se encuentra el objeto en sí.
Es habitual denominar a estas variables variables referencia.
07/10/2011 9IIP - Curso 2011/12
Representación en memoria. Referencias
Ejemplo:
07/10/2011 10IIP - Curso 2011/12
// Creación de un Punto por defecto (0.0, 0.0). Asignación de la
// referencia al objeto a la variable punto1
Punto punto1 = new Punto();
0.0
x 0.0
y
montículo
Memoria del sistema
punto1
Representación en memoria. Referencias
Algunas características de las referencias:
• Todos los objetos en Java se manipulan mediante referencias. Los únicos
elementos no referenciados son los valores elementales.
• Cuando una variable referencia no identifique ningún objeto; puede utilizarse
una constante especial para indicarlo: null.
• Si dos variables referencia mantienen un mismo valor, entonces ambas están
referenciando al mismo objeto.
• Los únicos operadores permitidos para manipular variables referencia son: de
asignación (=), de acceso (.) y comparaciones: (==, !=).
La principal diferencia entre valores primitivos y referencia consiste en que las
variables que representan a los primeros mantienen su valor, mientras que las
que representan a los segundos mantienen una referencia a los mismos.
07/10/2011 11IIP - Curso 2011/12
Diferencias: declaración, operador new
La declaración de un objeto no lo genera. Cuando se desea utilizar un nuevo
objeto de cierto tipo, es necesario crearlo.
Hasta el momento de su creación el objeto no existe y cualquier intento de
referenciarlo antes provocará un error de compilación o en tiempo de
ejecución.
07/10/2011 12IIP - Curso 2011/12
// Se declara circulo, que no referencia a ningún objeto
Circulo circulo;
// Se crea un Circulo y se asigna su referencia a circulo
circulo = new Circulo();
// Alternativamente: Se declara circulo y se le asigna la
// referencia al objeto Circulo que se crea
Circulo circulo = new Circulo();
Diferencias: declaración, operador new
07/10/2011 13IIP - Curso 2011/12
circulo
50.0radio
color
100centroX
100centroY
montículo
Memoria del sistema
“negro”
//Creación de un Circulo por defecto: radio 50, negro, en (100,100)
Circulo circulo = new Circulo();
Diferencias: el operador de acceso "."
El operador punto se emplea para seleccionar el método específico que se
desee utilizar sobre un objeto, por ejemplo:
y también para acceder a sus atributos:
Si se intenta utilizar un objeto inexistente, se producirá bien un error del
compilador, bien la excepción siguiente en ejecución:
07/10/2011 14IIP - Curso 2011/12
// creación de un objeto de tipo Pizarra
Pizarra miPizarra = new Pizarra("ESPACIO DIBUJO", 300, 300);
// creación de un objeto de tipo Circulo
Circulo circulo = new Circulo(50, "amarillo", 100, 100);
// uso del método add de la clase Pizarra
miPizarra.add(circulo);
Punto p1 = new Punto();
p1.x = -10.0;
NullPointerException
Diferencias: la asignación
La asignación entre variables referencia reemplaza las referencias, no el
contenido referenciado por las mismas.
07/10/2011 15IIP - Curso 2011/12
Punto p1 = new Punto(); // p1 referencia a un objeto
// de la clase Punto
Punto p2 = p1; // p1 y p2 referencian al
// mismo objeto
p2 0.0
x 0.0
y
montículo
Memoria del sistema
p1
Diferencias: la asignación
Considérese el ejemplo siguiente, en el que se pierde la referencia a un
objeto, se dice que el objeto queda desreferenciado.
07/10/2011 16IIP - Curso 2011/12
Punto p1 = new Punto(); // p1 referencia a un objeto
Punto p2 = new Punto(); // p2 referencia a otro objeto
p2 = p1; // p1 y p2 referencian al primer objeto,
// nada referencia al segundo
p2
0.0
x 0.0
y
montículo
p1 0.0
0.0
x
y
Memoria del sistema
Diferencias: copia de objetos
Si la estructura del objeto es conocida y accesible, entonces es posible
realizar una copia del mismo mediante una copia atributo a atributo.
Ejemplo, suponiendo que los atributos de Circulo fuesen accesibles (acceso
public o friendly en lugar de private como se declararon originalmente):
07/10/2011 17IIP - Curso 2011/12
// Crear un Circulo de radio 10, amarillo, con centro en (15,20)
Circulo c1 = new Circulo(10,"amarillo",15,20);
// se crea una copia:
Circulo copia = new Circulo();
copia.radio = c1.radio;
copia.color = c1.color;
copia.centroX = c1.centroX;
copia.centroY = c1.centroY;
Diferencias: copia de objetos
Nótese que el objeto String de valor "negro" queda desreferenciado.
07/10/2011 18IIP - Curso 2011/12
c1
montículo
Memoria del sistema
“amarillo”
10.0radio
color
15centroX
20centroY
10.0radio
color
15centroX
20centroY
copia
“negro”
Diferencias: comparación de objetos
• Para los tipos primitivos el operador "==" es cierto o falso según sean o no
iguales los valores de las variables que se comparan.
• Cuando este operador se aplica a objetos, devolverá cierto o falso según
sean o no iguales las referencias contenidas.
Si se aplica el operador a dos objetos distintos, aunque sus atributos
tengan el mismo valor, el resultado será false. Ejemplo:
07/10/2011 19IIP - Curso 2011/12
Punto p1 = new Punto();
p1.x = 3.0; p1.y = -2.5;
Punto p2 = p1;
Punto p3 = new Punto();
p3.x = 3.0; p3.y = -2.5;
System.out.println(p1 == p1);
System.out.println(p1 == p2);
System.out.println(p1 == p3);
true
true
false
Diferencias: comparación de objetos
• Si lo que se desea es determinar la igualdad interna de los objetos, es
necesario hacerlo mediante una comparación atributo a atributo:
• Como los atributos serán por lo general privados, se recurrirá a la definición
y uso de un método especializado, equals(), que existe, además,
predefinido en la clase Object.
07/10/2011 20IIP - Curso 2011/12
System.out.println(p1.x == p1.x && p1.y == p1.y);
System.out.println(p1.x == p2.x && p1.y == p2.y);
System.out.println(p1.x == p3.x && p1.y == p3.y);
true
true
true
Diferencias: el garbage collector
• Es un subsistema de la máquina virtual Java que recupera la memoria de los
objetos no referenciados para que pueda volver a ser utilizada.
• Es frecuente en los lenguajes actuales basados en el uso de una máquina
virtual (por ejemplo Java, C#, Python). En otros lenguajes (por ejemplo C++ o
Ada) es necesario que el programador libere explícitamente la memoria que
ha dejado de utilizarse.
• En Java entra en funcionamiento automáticamente, pero es posible
inhabilitar su funcionamiento, si se desea, o sugerir al sistema que se
ejecute mediante una utilidad de la clase System (System.gc()).
07/10/2011 21IIP - Curso 2011/12
Información de clase. Modificador static
En ocasiones es necesario mantener información común a todos los objetos
de una clase, por ejemplo:
• Número de objetos de la clase Punto que se han creado en un
momento dado.
• Número de objetos de la clase Circulo que existen de color
"amarillo".
• Número de objetos de la clase Circulo que se han creado y que han
cambiado su color de "negro" a "amarillo" .
La solución consiste en poder mantener información asociada a
toda la clase en conjunto.
Una variable o atributo de clase es una variable mediante la que es posible
mantener información común a todos los elementos de la clase.
07/10/2011 22IIP - Curso 2011/12
Información de clase. Modificador static
Se declaran precedidas del modificador static . Por ejemplo:
A efectos de su visibilidad, un atributo de clase, tiene el mismo
comportamiento que cualquier otro y puede declararse public, private o
friendly, tal y como es el caso.
07/10/2011 23IIP - Curso 2011/12
class Punto {
double x; // la abscisa, variable de instancia
double y; // la ordenada, variable de instancia
static int contador = 0; // variable de clase
// cada vez que se ejecute el constructor contador
public Punto() { contador++; } // se incrementa
}
Información de clase. Modificador static
Como no están asociados a ningún objeto (pertenecen a la clase):
• El sistema les asigna memoria la primera vez que se ejecuta código de la
clase, lo que puede ocurrir la primera vez que se crea un objeto de la
misma.
• La memoria asociada a las variables de clase permanece en uso hasta que la
clase deje de estar cargada en memoria, normalmente al finalizar el
programa que la utiliza.
• Si es accesible (no es privada), para referenciarlas desde otra clase se utiliza
la forma:
• Para el ejemplo anterior, sería:
07/10/2011 24IIP - Curso 2011/12
NombreDeClase.nombreDeAtributoDeClase
Punto.contador
Información de clase. Modificador static
Ejemplo, supuesta declarada la clase Punto:
07/10/2011 25IIP - Curso 2011/12
class PruebaPunto2 {
public static void main(String[] args) {
// se escribe el valor inicial del contador de Puntos,
// nótese que aún no se ha creado ningún objeto
System.out.println("Num. puntos inicial: " + Punto.contador);
// se definen e inicializan varias variables de tipo Punto
Punto p1 = new Punto(); Punto p2 = new Punto(); Punto p3 = new Punto();
int puntosCreados = Punto.contador; // puntosCreados vale 3
Punto.contador = 0; // se resetea el número
....
}
}
Información de clase. Modificador static
Un uso habitual de las variables de clase es usarlas para almacenar un valor
constante, común a todos los elementos de la clase. Ejemplo:
07/10/2011 26IIP - Curso 2011/12
public class Circulo {
private double radio; private String color;
private int centroX, centroY;
public static final double DOS_PI = 2 * Math.PI;
....
/** calcula el área del Circulo. */
public double area() { return Math.PI * radio * radio; }
/** calcula el perímetro del Circulo. */
public double perimetro() { return DOS_PI * radio; }
....
}

Más contenido relacionado

La actualidad más candente

Introducción a la Programaciónen Java
Introducción a la Programaciónen JavaIntroducción a la Programaciónen Java
Introducción a la Programaciónen Javasantosisidrorivera
 
Programación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaProgramación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaAngel Vázquez Patiño
 
programacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic netprogramacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic netpp mm
 
Elementos básicos de la programación orientada a objetos.
Elementos básicos de la programación orientada a objetos.Elementos básicos de la programación orientada a objetos.
Elementos básicos de la programación orientada a objetos.Whaleejaa Wha
 
16 17 tecnologias python oop
16 17 tecnologias python oop16 17 tecnologias python oop
16 17 tecnologias python oopSoftware Guru
 
PROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETOPROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETOAnabel Jaramillo
 
10. programacion orientada a objetos en visual basic .net
10.  programacion orientada a objetos en visual basic .net10.  programacion orientada a objetos en visual basic .net
10. programacion orientada a objetos en visual basic .netjohnny herrera
 
Apunte paradigma orientado a objetos
Apunte paradigma orientado a objetosApunte paradigma orientado a objetos
Apunte paradigma orientado a objetosAlejandro Canosa
 
Jyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumeradosJyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumeradosJyoc X
 
Fundamentos POO en JS. Mixins y Traits.
Fundamentos POO en JS. Mixins y Traits.Fundamentos POO en JS. Mixins y Traits.
Fundamentos POO en JS. Mixins y Traits.Maximiliano Fierro
 
Propiedades De La Poo
Propiedades De La PooPropiedades De La Poo
Propiedades De La Pooda4
 

La actualidad más candente (20)

Introducción a la Programaciónen Java
Introducción a la Programaciónen JavaIntroducción a la Programaciónen Java
Introducción a la Programaciónen Java
 
Programación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaProgramación 3: Clases y objetos en Java
Programación 3: Clases y objetos en Java
 
Clases y Objetos
Clases y ObjetosClases y Objetos
Clases y Objetos
 
programacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic netprogramacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic net
 
Atributos
AtributosAtributos
Atributos
 
Mv vol2 ver5.0(corregido)
Mv vol2 ver5.0(corregido)Mv vol2 ver5.0(corregido)
Mv vol2 ver5.0(corregido)
 
Jpa
JpaJpa
Jpa
 
Elementos básicos de la programación orientada a objetos.
Elementos básicos de la programación orientada a objetos.Elementos básicos de la programación orientada a objetos.
Elementos básicos de la programación orientada a objetos.
 
Traduccion capitulo 9 (completo)
Traduccion capitulo 9 (completo)Traduccion capitulo 9 (completo)
Traduccion capitulo 9 (completo)
 
16 17 tecnologias python oop
16 17 tecnologias python oop16 17 tecnologias python oop
16 17 tecnologias python oop
 
PROGRAMACIÓN ORIENTADA A OBJETOS
PROGRAMACIÓN ORIENTADA A OBJETOSPROGRAMACIÓN ORIENTADA A OBJETOS
PROGRAMACIÓN ORIENTADA A OBJETOS
 
PROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETOPROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETO
 
Unidad 2 clases y objetos
Unidad 2 clases y objetosUnidad 2 clases y objetos
Unidad 2 clases y objetos
 
Cap6 clases
Cap6 clasesCap6 clases
Cap6 clases
 
10. programacion orientada a objetos en visual basic .net
10.  programacion orientada a objetos en visual basic .net10.  programacion orientada a objetos en visual basic .net
10. programacion orientada a objetos en visual basic .net
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
 
Apunte paradigma orientado a objetos
Apunte paradigma orientado a objetosApunte paradigma orientado a objetos
Apunte paradigma orientado a objetos
 
Jyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumeradosJyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumerados
 
Fundamentos POO en JS. Mixins y Traits.
Fundamentos POO en JS. Mixins y Traits.Fundamentos POO en JS. Mixins y Traits.
Fundamentos POO en JS. Mixins y Traits.
 
Propiedades De La Poo
Propiedades De La PooPropiedades De La Poo
Propiedades De La Poo
 

Destacado

Introducción a la programación y la informática. Tema 7
Introducción a la programación y la informática. Tema 7Introducción a la programación y la informática. Tema 7
Introducción a la programación y la informática. Tema 7Andres Garcia Garcia
 
Introducción a la programación y la informática. Tema 8
Introducción a la programación y la informática. Tema 8Introducción a la programación y la informática. Tema 8
Introducción a la programación y la informática. Tema 8Andres Garcia Garcia
 
Introducción a la programación y la informática. Tema 6
Introducción a la programación y la informática. Tema 6Introducción a la programación y la informática. Tema 6
Introducción a la programación y la informática. Tema 6Andres Garcia Garcia
 
Introducción a la programación y la informática. Tema 5
Introducción a la programación y la informática. Tema 5Introducción a la programación y la informática. Tema 5
Introducción a la programación y la informática. Tema 5Andres Garcia Garcia
 
Introducción a la programación y la informática. Tema 9
Introducción a la programación y la informática. Tema 9Introducción a la programación y la informática. Tema 9
Introducción a la programación y la informática. Tema 9Andres Garcia Garcia
 
Introducción a la programación y la informática. Tema 2
Introducción a la programación y la informática. Tema 2Introducción a la programación y la informática. Tema 2
Introducción a la programación y la informática. Tema 2Andres Garcia Garcia
 
Introducción a la programación y la informática. Tema 3
Introducción a la programación y la informática. Tema 3Introducción a la programación y la informática. Tema 3
Introducción a la programación y la informática. Tema 3Andres Garcia Garcia
 
Introducción a la programación y la informática. Tema 1
Introducción a la programación y la informática. Tema 1Introducción a la programación y la informática. Tema 1
Introducción a la programación y la informática. Tema 1Andres Garcia Garcia
 
User Interface Testing | Best Practices
User Interface Testing | Best Practices User Interface Testing | Best Practices
User Interface Testing | Best Practices David Tzemach
 
UI Testing Best Practices - An Expected Journey
UI Testing Best Practices - An Expected JourneyUI Testing Best Practices - An Expected Journey
UI Testing Best Practices - An Expected JourneyOren Farhi
 
Introducción a la programación y la informática. Tema 10
Introducción a la programación y la informática. Tema 10Introducción a la programación y la informática. Tema 10
Introducción a la programación y la informática. Tema 10Andres Garcia Garcia
 

Destacado (12)

Introducción a la programación y la informática. Tema 7
Introducción a la programación y la informática. Tema 7Introducción a la programación y la informática. Tema 7
Introducción a la programación y la informática. Tema 7
 
Introducción a la programación y la informática. Tema 8
Introducción a la programación y la informática. Tema 8Introducción a la programación y la informática. Tema 8
Introducción a la programación y la informática. Tema 8
 
Introducción a la programación y la informática. Tema 6
Introducción a la programación y la informática. Tema 6Introducción a la programación y la informática. Tema 6
Introducción a la programación y la informática. Tema 6
 
Introducción a la programación y la informática. Tema 5
Introducción a la programación y la informática. Tema 5Introducción a la programación y la informática. Tema 5
Introducción a la programación y la informática. Tema 5
 
Introducción a la programación y la informática. Tema 9
Introducción a la programación y la informática. Tema 9Introducción a la programación y la informática. Tema 9
Introducción a la programación y la informática. Tema 9
 
Introducción a la programación y la informática. Tema 2
Introducción a la programación y la informática. Tema 2Introducción a la programación y la informática. Tema 2
Introducción a la programación y la informática. Tema 2
 
Introducción a la programación y la informática. Tema 3
Introducción a la programación y la informática. Tema 3Introducción a la programación y la informática. Tema 3
Introducción a la programación y la informática. Tema 3
 
Introducción a la programación y la informática. Tema 1
Introducción a la programación y la informática. Tema 1Introducción a la programación y la informática. Tema 1
Introducción a la programación y la informática. Tema 1
 
User Interface Testing | Best Practices
User Interface Testing | Best Practices User Interface Testing | Best Practices
User Interface Testing | Best Practices
 
UI Testing Best Practices - An Expected Journey
UI Testing Best Practices - An Expected JourneyUI Testing Best Practices - An Expected Journey
UI Testing Best Practices - An Expected Journey
 
Introducción a la programación y la informática. Tema 10
Introducción a la programación y la informática. Tema 10Introducción a la programación y la informática. Tema 10
Introducción a la programación y la informática. Tema 10
 
Presentacion 1.10
Presentacion 1.10Presentacion 1.10
Presentacion 1.10
 

Similar a Introducción a la programación y la informática. Tema 4

UD2-ConceptosBasicos.pdf
UD2-ConceptosBasicos.pdfUD2-ConceptosBasicos.pdf
UD2-ConceptosBasicos.pdfChiquteRobledo
 
Java2-Clases.ppt
Java2-Clases.pptJava2-Clases.ppt
Java2-Clases.ppterosslo
 
Java2-Clases.ppt Programación Orientada a Objetos
Java2-Clases.ppt Programación Orientada a ObjetosJava2-Clases.ppt Programación Orientada a Objetos
Java2-Clases.ppt Programación Orientada a ObjetosJairo887360
 
El lenguaje C++ (1).ppt
El lenguaje C++ (1).pptEl lenguaje C++ (1).ppt
El lenguaje C++ (1).pptJOSECASHUUG
 
modularidad de programación 2da parte (3) (1).pptx
modularidad de programación 2da parte (3) (1).pptxmodularidad de programación 2da parte (3) (1).pptx
modularidad de programación 2da parte (3) (1).pptxjavierccallo
 
Metodos Constructor Y Destructor
Metodos Constructor Y DestructorMetodos Constructor Y Destructor
Metodos Constructor Y Destructorrezzaca
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetosjent46
 
Java
JavaJava
JavaUTN
 
Programacion orientada a objetos 1
Programacion orientada a objetos 1Programacion orientada a objetos 1
Programacion orientada a objetos 1mellcv
 
9. Creacion Y Destruccion De Objetos
9.  Creacion Y Destruccion De Objetos9.  Creacion Y Destruccion De Objetos
9. Creacion Y Destruccion De ObjetosEsteban Soraire
 
Programacion Orientada Objetos.pdf
Programacion Orientada Objetos.pdfProgramacion Orientada Objetos.pdf
Programacion Orientada Objetos.pdfSantiagoValenzuela24
 

Similar a Introducción a la programación y la informática. Tema 4 (20)

UD2-ConceptosBasicos.pdf
UD2-ConceptosBasicos.pdfUD2-ConceptosBasicos.pdf
UD2-ConceptosBasicos.pdf
 
Java2-Clases.ppt
Java2-Clases.pptJava2-Clases.ppt
Java2-Clases.ppt
 
Java2-Clases.ppt
Java2-Clases.pptJava2-Clases.ppt
Java2-Clases.ppt
 
Java2-Clases.ppt Programación Orientada a Objetos
Java2-Clases.ppt Programación Orientada a ObjetosJava2-Clases.ppt Programación Orientada a Objetos
Java2-Clases.ppt Programación Orientada a Objetos
 
Unidad 3 CLASES, OBJETOS E INTSANCIAS
Unidad 3 CLASES, OBJETOS E INTSANCIASUnidad 3 CLASES, OBJETOS E INTSANCIAS
Unidad 3 CLASES, OBJETOS E INTSANCIAS
 
El lenguaje C++ (1).ppt
El lenguaje C++ (1).pptEl lenguaje C++ (1).ppt
El lenguaje C++ (1).ppt
 
El lenguaje C++.ppt
El lenguaje C++.pptEl lenguaje C++.ppt
El lenguaje C++.ppt
 
Clase ed v7
Clase ed v7Clase ed v7
Clase ed v7
 
modularidad de programación 2da parte (3) (1).pptx
modularidad de programación 2da parte (3) (1).pptxmodularidad de programación 2da parte (3) (1).pptx
modularidad de programación 2da parte (3) (1).pptx
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
Cplus
CplusCplus
Cplus
 
C++
C++C++
C++
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
Metodos Constructor Y Destructor
Metodos Constructor Y DestructorMetodos Constructor Y Destructor
Metodos Constructor Y Destructor
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
 
Java
JavaJava
Java
 
Capítulo 03 ambiente trabajo simio
Capítulo 03 ambiente trabajo simioCapítulo 03 ambiente trabajo simio
Capítulo 03 ambiente trabajo simio
 
Programacion orientada a objetos 1
Programacion orientada a objetos 1Programacion orientada a objetos 1
Programacion orientada a objetos 1
 
9. Creacion Y Destruccion De Objetos
9.  Creacion Y Destruccion De Objetos9.  Creacion Y Destruccion De Objetos
9. Creacion Y Destruccion De Objetos
 
Programacion Orientada Objetos.pdf
Programacion Orientada Objetos.pdfProgramacion Orientada Objetos.pdf
Programacion Orientada Objetos.pdf
 

Último

6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primariaWilian24
 
Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024IES Vicent Andres Estelles
 
Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024IES Vicent Andres Estelles
 
Revista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdfRevista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdfapunteshistoriamarmo
 
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIASISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIAFabiolaGarcia751855
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOluismii249
 
Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024IES Vicent Andres Estelles
 
La Sostenibilidad Corporativa. Administración Ambiental
La Sostenibilidad Corporativa. Administración AmbientalLa Sostenibilidad Corporativa. Administración Ambiental
La Sostenibilidad Corporativa. Administración AmbientalJonathanCovena1
 
FUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
FUERZA Y MOVIMIENTO ciencias cuarto basico.pptFUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
FUERZA Y MOVIMIENTO ciencias cuarto basico.pptNancyMoreiraMora1
 
Biografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdfBiografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdfGruberACaraballo
 
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPC
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPCTRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPC
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPCCarlosEduardoSosa2
 
Factores que intervienen en la Administración por Valores.pdf
Factores que intervienen en la Administración por Valores.pdfFactores que intervienen en la Administración por Valores.pdf
Factores que intervienen en la Administración por Valores.pdfJonathanCovena1
 
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxlclcarmen
 
ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN PARÍS. Por JAVIER SOL...
ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN  PARÍS. Por JAVIER SOL...ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN  PARÍS. Por JAVIER SOL...
ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN PARÍS. Por JAVIER SOL...JAVIER SOLIS NOYOLA
 
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACIONRESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACIONamelia poma
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Juan Martín Martín
 
Los avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtualesLos avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtualesMarisolMartinez707897
 
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...Katherine Concepcion Gonzalez
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptAlberto Rubio
 

Último (20)

PP_Comunicacion en Salud: Objetivación de signos y síntomas
PP_Comunicacion en Salud: Objetivación de signos y síntomasPP_Comunicacion en Salud: Objetivación de signos y síntomas
PP_Comunicacion en Salud: Objetivación de signos y síntomas
 
6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria
 
Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024
 
Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024
 
Revista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdfRevista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdf
 
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIASISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
 
Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024
 
La Sostenibilidad Corporativa. Administración Ambiental
La Sostenibilidad Corporativa. Administración AmbientalLa Sostenibilidad Corporativa. Administración Ambiental
La Sostenibilidad Corporativa. Administración Ambiental
 
FUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
FUERZA Y MOVIMIENTO ciencias cuarto basico.pptFUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
FUERZA Y MOVIMIENTO ciencias cuarto basico.ppt
 
Biografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdfBiografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdf
 
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPC
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPCTRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPC
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPC
 
Factores que intervienen en la Administración por Valores.pdf
Factores que intervienen en la Administración por Valores.pdfFactores que intervienen en la Administración por Valores.pdf
Factores que intervienen en la Administración por Valores.pdf
 
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
 
ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN PARÍS. Por JAVIER SOL...
ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN  PARÍS. Por JAVIER SOL...ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN  PARÍS. Por JAVIER SOL...
ACERTIJO LA RUTA DEL MARATÓN OLÍMPICO DEL NÚMERO PI EN PARÍS. Por JAVIER SOL...
 
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACIONRESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024
 
Los avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtualesLos avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtuales
 
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
 

Introducción a la programación y la informática. Tema 4

  • 1. Tema 4. Tipos de datos: clases y referencias Introducción a la Informática y a la Programación (IIP) Curso 2011/12 Departamento de Sistemas Informáticos y Computación
  • 2. Contenidos 1. Introducción 2. Ejemplo de definición y uso de una clase 3. Inicialización de los atributos 4. Representación en memoria de los objetos. Variables referencia 5. Diferencias entre variables elementales y objetuales  Declaración. Operador new  El operador de acceso "."  La asignación  Copia de objetos  Comparación de objetos  El garbage collector 6. Información de clase. Modificador static 07/10/2011 IIP - Curso 2011/12 2
  • 3. Introducción • En Java es posible utilizar elementos cuyos valores no son tipos primitivos. • Un valor no perteneciente a un tipo primitivo es un tipo compuesto o estructurado. Para definirlos en Java se utilizan las clases. • Un elemento perteneciente a un tipo no primitivo, definido con una clase, es un objeto. • El valor de una variable objeto, debe entenderse como la agregación de los valores individuales de sus componentes o atributos; estos podrán ser tanto valores individuales como estructurados. 07/10/2011 3IIP - Curso 2011/12 // Crear un Circulo de radio 50, amarillo, con centro // en (100,100) Circulo c1 = new Circulo(50,"amarillo",100,100); // Añadirlo a la Pizarra y dibujarlo miPizarra.add(c1);
  • 4. Introducción Recordatorio de esquema de definición de una clase (tema 2): [modificadores] class NombreDeLaClase [ extends OtraClase ] { // Definición de atributos [[modificadores] tipo nomVar1; [modificadores] tipo nomVar2; ... ... ... [modificadores] tipo nomVarN; ] // Definición de métodos // Constructores ... ... ... ... ... ... // Otros métodos } 07/10/2011 4IIP - Curso 2011/12
  • 5. Ejemplo de definición y uso de una clase • Se desea representar un punto en un espacio de dos dimensiones (dos valores reales). Definición de la clase: • Almacenado el código en un fichero (Punto.java) y tras haberlo compilado, puede usarse para definir y utilizar variables de tipo Punto en otra clase Java. 07/10/2011 5IIP - Curso 2011/12 class Punto { double x; // la abscisa double y; // la ordenada // el constructor por defecto no es necesario public Punto() { } //constructor por defecto }
  • 6. Ejemplo de definición y uso de una clase 07/10/2011 6IIP - Curso 2011/12 class PruebaPunto { public static void main(String[] args) { // se definen e inicializan dos variables de tipo Punto Punto p1 = new Punto(); Punto p2 = new Punto(); // se asignan valores a los atributos de p1: p1.x = 1.0; p1.y = 1.0; // se asignan valores a los atributos de p2 usando p1: p2.x = 2.0 * p1.x; p2.y = -2.0 * p1.y; // se escriben los valores de los atributos de p2: System.out.println("(" + p2.x + "," + p2.y +")"); } }
  • 7. Ejemplo de definición y uso de una clase Algunas características, generalizables, de las clases de los ejemplos son: • Mediante la operación new se crea un objeto de la propia clase. Después se pueden utilizar los elementos del objeto: atributos y métodos. • Los atributos de una clase pueden ser de cualquier tipo (elementales o no). Se utilizan siguiendo las reglas de uso de las variables de dicho tipo. • En el ejemplo se han definido sin modificador de acceso, esto se conoce como acceso friendly: accesibles desde todas las clases del paquete en que se encuentre la clase en que se definen. – Pero habitualmente se definirán de acceso privado, private, por ocultación y seguridad. • El uso de los elementos del objeto se hace utilizando la notación de punto. En particular, a los atributos se les asigna o lee su valor utilizando: 07/10/2011 7IIP - Curso 2011/12 nombreDeVariableObjeto.nombreDeAtributo
  • 8. Inicialización de los atributos • Cuando el objeto se crea, sus atributos se inicializan por defecto: – A cero los numéricos, al código cero los char y a false los boolean. – A null, que representa la inexistencia, los objetos. • Se les puede dar un valor inicial explícitamente, por ejemplo: • También se pueden inicializar en los constructores (tema 5). En todo caso, la secuencia de ejecución de la inicialización es: 07/10/2011 8IIP - Curso 2011/12 class Punto { double x = 1.0; double y = 1.0; public Punto() { } } Por defecto explícitamente en los constructores
  • 9. Representación en memoria. Referencias Cuando se crea un objeto y se asigna a una variable, el sistema le asocia memoria dividiéndola en dos partes: • Una parte asociada al objeto como tal, mediante la que se mantiene su información (valores de atributos y métodos que se pueden aplicar). – La zona del sistema en la que se guarda la memoria de los objetos que se crean durante la ejecución se denomina montículo (heap). • Otra parte de memoria se asocia a la variable con la que se nombra al objeto. Mediante la misma, el sistema determina en ejecución dónde se encuentra el objeto para poder actuar con él. Cuando se crea un objeto, se dice que mediante la variable que da nombre al objeto se referencia la zona de memoria donde se encuentra el objeto en sí. Es habitual denominar a estas variables variables referencia. 07/10/2011 9IIP - Curso 2011/12
  • 10. Representación en memoria. Referencias Ejemplo: 07/10/2011 10IIP - Curso 2011/12 // Creación de un Punto por defecto (0.0, 0.0). Asignación de la // referencia al objeto a la variable punto1 Punto punto1 = new Punto(); 0.0 x 0.0 y montículo Memoria del sistema punto1
  • 11. Representación en memoria. Referencias Algunas características de las referencias: • Todos los objetos en Java se manipulan mediante referencias. Los únicos elementos no referenciados son los valores elementales. • Cuando una variable referencia no identifique ningún objeto; puede utilizarse una constante especial para indicarlo: null. • Si dos variables referencia mantienen un mismo valor, entonces ambas están referenciando al mismo objeto. • Los únicos operadores permitidos para manipular variables referencia son: de asignación (=), de acceso (.) y comparaciones: (==, !=). La principal diferencia entre valores primitivos y referencia consiste en que las variables que representan a los primeros mantienen su valor, mientras que las que representan a los segundos mantienen una referencia a los mismos. 07/10/2011 11IIP - Curso 2011/12
  • 12. Diferencias: declaración, operador new La declaración de un objeto no lo genera. Cuando se desea utilizar un nuevo objeto de cierto tipo, es necesario crearlo. Hasta el momento de su creación el objeto no existe y cualquier intento de referenciarlo antes provocará un error de compilación o en tiempo de ejecución. 07/10/2011 12IIP - Curso 2011/12 // Se declara circulo, que no referencia a ningún objeto Circulo circulo; // Se crea un Circulo y se asigna su referencia a circulo circulo = new Circulo(); // Alternativamente: Se declara circulo y se le asigna la // referencia al objeto Circulo que se crea Circulo circulo = new Circulo();
  • 13. Diferencias: declaración, operador new 07/10/2011 13IIP - Curso 2011/12 circulo 50.0radio color 100centroX 100centroY montículo Memoria del sistema “negro” //Creación de un Circulo por defecto: radio 50, negro, en (100,100) Circulo circulo = new Circulo();
  • 14. Diferencias: el operador de acceso "." El operador punto se emplea para seleccionar el método específico que se desee utilizar sobre un objeto, por ejemplo: y también para acceder a sus atributos: Si se intenta utilizar un objeto inexistente, se producirá bien un error del compilador, bien la excepción siguiente en ejecución: 07/10/2011 14IIP - Curso 2011/12 // creación de un objeto de tipo Pizarra Pizarra miPizarra = new Pizarra("ESPACIO DIBUJO", 300, 300); // creación de un objeto de tipo Circulo Circulo circulo = new Circulo(50, "amarillo", 100, 100); // uso del método add de la clase Pizarra miPizarra.add(circulo); Punto p1 = new Punto(); p1.x = -10.0; NullPointerException
  • 15. Diferencias: la asignación La asignación entre variables referencia reemplaza las referencias, no el contenido referenciado por las mismas. 07/10/2011 15IIP - Curso 2011/12 Punto p1 = new Punto(); // p1 referencia a un objeto // de la clase Punto Punto p2 = p1; // p1 y p2 referencian al // mismo objeto p2 0.0 x 0.0 y montículo Memoria del sistema p1
  • 16. Diferencias: la asignación Considérese el ejemplo siguiente, en el que se pierde la referencia a un objeto, se dice que el objeto queda desreferenciado. 07/10/2011 16IIP - Curso 2011/12 Punto p1 = new Punto(); // p1 referencia a un objeto Punto p2 = new Punto(); // p2 referencia a otro objeto p2 = p1; // p1 y p2 referencian al primer objeto, // nada referencia al segundo p2 0.0 x 0.0 y montículo p1 0.0 0.0 x y Memoria del sistema
  • 17. Diferencias: copia de objetos Si la estructura del objeto es conocida y accesible, entonces es posible realizar una copia del mismo mediante una copia atributo a atributo. Ejemplo, suponiendo que los atributos de Circulo fuesen accesibles (acceso public o friendly en lugar de private como se declararon originalmente): 07/10/2011 17IIP - Curso 2011/12 // Crear un Circulo de radio 10, amarillo, con centro en (15,20) Circulo c1 = new Circulo(10,"amarillo",15,20); // se crea una copia: Circulo copia = new Circulo(); copia.radio = c1.radio; copia.color = c1.color; copia.centroX = c1.centroX; copia.centroY = c1.centroY;
  • 18. Diferencias: copia de objetos Nótese que el objeto String de valor "negro" queda desreferenciado. 07/10/2011 18IIP - Curso 2011/12 c1 montículo Memoria del sistema “amarillo” 10.0radio color 15centroX 20centroY 10.0radio color 15centroX 20centroY copia “negro”
  • 19. Diferencias: comparación de objetos • Para los tipos primitivos el operador "==" es cierto o falso según sean o no iguales los valores de las variables que se comparan. • Cuando este operador se aplica a objetos, devolverá cierto o falso según sean o no iguales las referencias contenidas. Si se aplica el operador a dos objetos distintos, aunque sus atributos tengan el mismo valor, el resultado será false. Ejemplo: 07/10/2011 19IIP - Curso 2011/12 Punto p1 = new Punto(); p1.x = 3.0; p1.y = -2.5; Punto p2 = p1; Punto p3 = new Punto(); p3.x = 3.0; p3.y = -2.5; System.out.println(p1 == p1); System.out.println(p1 == p2); System.out.println(p1 == p3); true true false
  • 20. Diferencias: comparación de objetos • Si lo que se desea es determinar la igualdad interna de los objetos, es necesario hacerlo mediante una comparación atributo a atributo: • Como los atributos serán por lo general privados, se recurrirá a la definición y uso de un método especializado, equals(), que existe, además, predefinido en la clase Object. 07/10/2011 20IIP - Curso 2011/12 System.out.println(p1.x == p1.x && p1.y == p1.y); System.out.println(p1.x == p2.x && p1.y == p2.y); System.out.println(p1.x == p3.x && p1.y == p3.y); true true true
  • 21. Diferencias: el garbage collector • Es un subsistema de la máquina virtual Java que recupera la memoria de los objetos no referenciados para que pueda volver a ser utilizada. • Es frecuente en los lenguajes actuales basados en el uso de una máquina virtual (por ejemplo Java, C#, Python). En otros lenguajes (por ejemplo C++ o Ada) es necesario que el programador libere explícitamente la memoria que ha dejado de utilizarse. • En Java entra en funcionamiento automáticamente, pero es posible inhabilitar su funcionamiento, si se desea, o sugerir al sistema que se ejecute mediante una utilidad de la clase System (System.gc()). 07/10/2011 21IIP - Curso 2011/12
  • 22. Información de clase. Modificador static En ocasiones es necesario mantener información común a todos los objetos de una clase, por ejemplo: • Número de objetos de la clase Punto que se han creado en un momento dado. • Número de objetos de la clase Circulo que existen de color "amarillo". • Número de objetos de la clase Circulo que se han creado y que han cambiado su color de "negro" a "amarillo" . La solución consiste en poder mantener información asociada a toda la clase en conjunto. Una variable o atributo de clase es una variable mediante la que es posible mantener información común a todos los elementos de la clase. 07/10/2011 22IIP - Curso 2011/12
  • 23. Información de clase. Modificador static Se declaran precedidas del modificador static . Por ejemplo: A efectos de su visibilidad, un atributo de clase, tiene el mismo comportamiento que cualquier otro y puede declararse public, private o friendly, tal y como es el caso. 07/10/2011 23IIP - Curso 2011/12 class Punto { double x; // la abscisa, variable de instancia double y; // la ordenada, variable de instancia static int contador = 0; // variable de clase // cada vez que se ejecute el constructor contador public Punto() { contador++; } // se incrementa }
  • 24. Información de clase. Modificador static Como no están asociados a ningún objeto (pertenecen a la clase): • El sistema les asigna memoria la primera vez que se ejecuta código de la clase, lo que puede ocurrir la primera vez que se crea un objeto de la misma. • La memoria asociada a las variables de clase permanece en uso hasta que la clase deje de estar cargada en memoria, normalmente al finalizar el programa que la utiliza. • Si es accesible (no es privada), para referenciarlas desde otra clase se utiliza la forma: • Para el ejemplo anterior, sería: 07/10/2011 24IIP - Curso 2011/12 NombreDeClase.nombreDeAtributoDeClase Punto.contador
  • 25. Información de clase. Modificador static Ejemplo, supuesta declarada la clase Punto: 07/10/2011 25IIP - Curso 2011/12 class PruebaPunto2 { public static void main(String[] args) { // se escribe el valor inicial del contador de Puntos, // nótese que aún no se ha creado ningún objeto System.out.println("Num. puntos inicial: " + Punto.contador); // se definen e inicializan varias variables de tipo Punto Punto p1 = new Punto(); Punto p2 = new Punto(); Punto p3 = new Punto(); int puntosCreados = Punto.contador; // puntosCreados vale 3 Punto.contador = 0; // se resetea el número .... } }
  • 26. Información de clase. Modificador static Un uso habitual de las variables de clase es usarlas para almacenar un valor constante, común a todos los elementos de la clase. Ejemplo: 07/10/2011 26IIP - Curso 2011/12 public class Circulo { private double radio; private String color; private int centroX, centroY; public static final double DOS_PI = 2 * Math.PI; .... /** calcula el área del Circulo. */ public double area() { return Math.PI * radio * radio; } /** calcula el perímetro del Circulo. */ public double perimetro() { return DOS_PI * radio; } .... }