2. Clases y Objetos
– Una clase describe un grupo de objetos que comparten
propiedades y métodos comunes
– Una clase es una plantilla que define qué forma tienen
los objetos de la clase
– Una clase se compone de:
– Información: campos (atributos, propiedades)
– Comportamiento: métodos (operaciones, funciones)
– Un objeto es una instancia de una clase
“Juan Pérez”String
Ventana (tiempo de ejecución)Ventana (tiempo de diseño)
Juan PérezEmpleado
La MonedaCasa
SodimacEmpresa
ObjetoClase
4. Definición de Atributos
– Los Atributos de una Clase almacenan los datos de la
Clase.
– Por lo general, los atributos se suelen definir privados y
se definen métodos consultores y modificadores. De
esta manera se garantiza la encapsulación u ocultación
de datos.
– Los atributos se alojan en variables.
6. Ámbito de las variables
En una clase pueden definirse tres tipos de variables:
– Variables de clase o variables estáticas (static variables)
§ Son compartidas por todos los objetos de la clase, y de otras clases si el
acceso a estas lo permite.
§ Pueden existir, aún asi no se hayan creado objetos y duran el tiempo que
la clase se encuentra cargada en memoria.
§ Se guardan en la RAM, en el static storage.
– Variables de instancia o de objeto
§ Son variables guardadas en cada objeto de la clase.
§ Se guardan en la RAM, en el heap storage.
– Variables locales a los métodos.
§ Duran hasta cuando se termina de ejecutar el método.
§ Se guardan en la RAM, en el stack storage.
8. class Circulo {
// campos
double radio = 5;
String color;
static int numeroCirculos = 0;
static final double PI = 3.1416;
// métodos
// constructores
// main( )
}
nradio y color son variables de instancia,
hay una copia de ellas por cada objeto
Circulo
nnumeroCirculos y PI son
variables static, están sólo una
vez en memoria; PI además es
constante (final): no puede
modificarse
9. Acceso a variables
– Acceso a variables de instancia: se utiliza la sintaxis
"objeto."
Circulo c1 = new Circulo();
c1.radio = 5;
c1.color = "rojo";
// si c1 es null,
// se genera una excepción NullPointerException
– Acceso a variables static: se utiliza la sintaxis "clase."
Circulo c1;
Circulo.numeroCirculos++;
System.out.println(Circulo.PI);
9
10. Referencias en Java
public class TestClase {
public static void main( String args[] ){
Circulo c1 = new Circulo();
Circulo c2; c2 = c1;
}
}
– Creación de Objetos de una Clase:
– c1 es una variable Referencia al nuevo Objeto creado.
– c2 es una variable Referencia a ningún Objeto, i.e. tras la
declaración Circulo c2 ; c2 == null
– ¿ Qué ocurre si se ejecuta c2 = c1; ?
11. Referencias en Java
– Una variable Referencia almacena la dirección de
memoria en la que se encuentra el Objeto al que
referencia.
– Al hacer:
– Circulo c2 = c1;
– La variable referencia c2 pasa a tener el mismo valor que 7 c1,
es decir, ambas apuntan al mismo objeto.
12. Definición de constructores
– Un constructor es un método especial invocado para
instanciar e inicializar un objeto de una clase
– Invocado con la sentencia new
– Tiene el mismo nombre que la clase
– Puede tener cero o más parámetros
– No tiene tipo de retorno, ni siquiera void
– Un constructor no público restringe el acceso a la creación de objetos
– Si la clase no tiene ningún constructor, el sistema
provee un constructor default, sin parámetros
– Si la clase tiene algún constructor, debe usarse alguno
de los constructores definidos al instanciar la clase (el
sistema no provee un constructor default en este caso)
15. Invocación entre Constructores
– La palabra this puede ser utilizada en la primera línea
de un constructor para invocar a otro constructor.
class Circulo {
private double radio;
private static int numeroCirculos = 0;
Circulo(int radio) {
this.radio = radio;
Circulo.numeroCirculos++;
}
Circulo() {
this(10); // radio default: 10
}
}
This hace referencia al
objeto sobre el que se
invoca el método y
sirvde para evitar
aliasing de nombres
16. ¿This?
– Sirve para hacer referencia a un método o propiedad
del objeto actual.
17. ¿This?
– ¿Donde se puede usar el this?
Puede referirse a cualquier miembro del objeto actual
desde dentro de un método de instancia o un
constructor.
Si se intenta utilizar dentro de un método estático (Static
methods) lanzara:
"Cannot use This in a static context"
18. Definición de Métodos
– Instrucciones que operan sobre los datos de un objeto
para obtener resultados.
– Pueden retornar un valor o pueden ser declarados
void para indicar que no retornan ningún valor
– Pueden ser de instancia o static.
19. class Circulo {
// campos
double radio = 5;
String color;
static int numeroCirculos = 0;
static final double PI = 3.1416;
// métodos
double getCircunferencia() {
return getCircunferencia(radio);
}
static double getCircunferencia(double r) {
return 2 * r * PI;
}
// constructores
// main( )
}
Método de instancia, tiene acceso
directo a las variables de instancia del
objeto sobre el que se invoca
Método static, no tiene acceso
directo a variables de instancia
20. Definición de Métodos
– Los Métodos de una clase definen su funcionalidad.
– Ejemplo: Definición de Métodos Consultores en la clase Circulo.
– Al definir como privados todos los atributos de Circulo,
se deben proporcionar métodos para acceder a su valor.
Se podría utilizar this
para referenciar a
atributos pero no es
necesario puesto que
no hay aliasing de
nombres.
21. Definición de Métodos
– Al definir como privados todos los atributos de Circulo,
se deben proporcionar métodos para modificar su valor.
– Ejemplo: definición de los Métodos Modificadores de Circulo.
23. – Crea una clase Libro que modele la información que se mantiene en
una biblioteca sobre cada libro: título, autor (usa la clase Persona),
ISBN, páginas, edición, editorial , lugar (ciudad y país) y fecha de
edición (usa la clase Fecha). La clase debe proporcionar los siguientes
servicios:
– accedentes y mutadores,
– método para leer la información y
– método para mostrar la información. Este último método mostrará la
información del libro con este formato:
– Título: Introduction to Java Programming
– 3a. edición
– Autor: Liang, Y. Daniel
– ISBN: 0-13-031997-X
– Prentice-Hall, New Jersey (USA), viernes 16 de noviembre de
– 2001
– 784 páginas
24. Sobrecarga de métodos
(Overloading)
– La firma de un método es la combinación del tipo de
dato que regresa, su nombre y su lista de argumentos.
– La sobrecarga de métodos es la creación de varios
métodos con el mismo nombre pero con diferentes
firmas y definiciones.
–Se utiliza para reutilizar el nombre de un método
pero con diferentes argumentos.
25. Reglas para sobrecargar un
método
– Los métodos sobrecargados deben de cambiar la lista
de argumentos.
– Pueden cambiar el tipo de retorno.
– Un método puede ser sobrecargado en la misma clase o
en una subclase.
– Pueden cambiar el modificador de acceso.
– Pueden declarar nuevas o más amplias excepciones.
27. Heap, Stack y Variables de
referencia
– La memoria está dividida en tres partes, Zona de Datos,
Stack y Heap.
– Existen dos espacios en donde se ejecutan nuestras
aplicaciones: Stack y Heap.
– Stack almacena variables locales y los métodos en
ejecución
– Heap guarda las variables de instancia y los objetos
– Cada hilo de la aplicación tiene su propia pila (Stack)
pero todos comparten el mismo montículo (Heap).
28. Stack
– Almacena:
– Referencias a objetos (instacias)
– Datos de tipo primitivo (int, float,char…)
– Variables locales
– Parámetros de retorno de los métodos
– Es estático, si lo llenamos, caeríamos en un
StackOverflowError
public void metodo(){
metodo();
}
29. Heap
– Los objetos son creados, eliminados o modificados en
esta parte de la memoria.
– La Java Virtual Machine (JVM), le asigna un espacio
predeterminado de memoria y según se vaya
requiriendo, la JVM le seguirá proporcionando más
memoria.
–Los elementos almacenados no pueden ser
eliminados directamente sino con el Garbage
Collector.
32. Instanciación y Referencias
– Los objetos se crean con el operador new, y se manejan
mediante referencias
– Los objetos se crean en el área de memoria dinámica
conocida como el heap
– Una referencia contiene la
dirección de un objeto (es
similar a los punteros de
otros lenguajes)
– Una asignación entre objetos
es una asignación de
referencias
– Circulo c1 = new Circulo();
– Circulo c2 = c1;
33. Garbage Collection
– Es un proceso de la JVM que está revisando que objetos
pueden ser borrados y cuales no.
– Es un proceso de baja prioridad, por lo que no se pasa
en todo momento liberando memoria, si no que pasa
de vez en cuando.
El primer objeto se
queda sin
referencia
34. Paso de Parámetros
– En Java el paso de parámetros se realiza "por valor“.
– Significa que cuando un argumento se pasa a una
función, la función recibe una copia del valor original.
Por lo tanto, si la función modifica el parámetro, sólo la
copia cambia y el valor original permanece intacto.
– Argumentos de tipos primitivos
– Si un método modifica el valor de un parámetro, este cambio sólo
ocurre al interior del método; al retornar el método, se mantiene
el valor original
– Argumentos de tipo referencia (objetos)
– Al retornar el método, la referencia pasada como parámetro sigue
referenciando al mismo objeto; sin embargo, los campos del
objeto podrían haber sido modificados por el método
35. ArrayList
– Clase que permite almacenar datos en memoria de
forma similar a los Arrays.
– Estructura dinámica de datos.
– http://docs.oracle.com/javase/6/docs/api/java/util/Arra
yList.html
– ArrayList nombreArray = new ArrayList();
– Puede contener cualquier tipo de
elementos.
36. Ventajas
– No es necesario declarar su tamaño como pasa con
los Arrays porque el almacenamiento es dinámico lo
cual permite aumentar o disminuir el consumo de
memoria de acuerdo a las necesidades.
– La clase ArrayList tiene muchos métodos predefinidos
que hacen más fácil su uso. Por ejemplo: ara saber si
un array cuenta con un dato tendrás que recorrerlo
entero. Sin embargo un ArrayList te devuelve el
objeto que en la colección tiene ese valor.
– Un ArrayList colecciona objetos, un array colecciona
dtos de un mismo tipo, que además es básico.
40. Uso de for each
– Facilita el recorrido de objetos existentes en una colección
sin necesidad de definir el número de elementos a recorrer.
– Sintaxis:
“Para cada elemento del tipo TipoARecorrer que se encuentre
dentro de la colección nombreDeLaColección ejecuta las
instrucciones que se indican”
– Evita el uso de Iteradores o de un bucle for normal.
41. Ejercicio
– Crea una clase denominada ListaCantantesFamosos que
al ser inicializada contenga un ArrayList con tres Strings
que sean el nombre de cantantes famosos. Crea una
clase test con el método main que inicialice un objeto
ListaCantantesFamosos y usando un for
extendido muestre los cantantes en la lista por pantalla.
Se debe pedir al usuario un nombre más de cantante
famoso, y una vez introducido mostrar la lista
actualizada usando un for extendido.