Sie sind auf Seite 1von 41

Unidad

3
PROGRAMACIN ORIENTADA A OBJETOS

ESTRUCTURA DE UNA CLASE


Clases y Objetos
Una clase describe un grupo de objetos que comparten
propiedades y mtodos comunes
Una clase es una plantilla que define qu forma tienen
los objetos de la clase
Una clase se compone de:
Informacin: campos (atributos, propiedades)
Comportamiento: mtodos (operaciones, funciones)
Un objeto es una instancia de una clase
Clase Objeto
Empresa Sodimac
Casa La Moneda
Empleado Juan Prez
Ventana (tiempo de diseo) Ventana (tiempo de ejecucin)
String Juan Prez
Implementacin de una clase
Elementos que aparecen en la implementacin de una
clase:
La palabra reservada this.
Modificadores estticos, dinmicos y finales de una Clase y sus
componentes.
Modificadores de visibilidad public y private de una Clase y sus
componentes.
Definicin 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 mtodos consultores y modificadores. De
esta manera se garantiza la encapsulacin u ocultacin
de datos.
Los atributos se alojan en variables.
Atributos de la clase
class Circulo {
// atributos
// mtodos
// constructores
// main()
}
mbito de las variables
En una clase pueden definirse tres tipos de variables:
Variables de clase o variables estticas (static variables)
Son compartidas por todos los objetos de la clase, y de otras clases si el
acceso a estas lo permite.
Pueden existir, an 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 mtodos.
Duran hasta cuando se termina de ejecutar el mtodo.
Se guardan en la RAM, en el stack storage.
Variables
local

De instancia

Esttica
nradio y color son variables de instancia,
hay una copia de ellas por cada objeto
Circulo

class Circulo {
// campos
double radio = 5;
String color;
static int numeroCirculos = 0;
static final double PI = 3.1416;
// mtodos
// constructores
// main( ) numeroCirculos y PI son
n

} variables static, estn slo una


vez en memoria; PI adems es
constante (final): no puede
modificarse
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 excepcin NullPointerException
Acceso a variables static: se utiliza la sintaxis "clase."
Circulo c1;
Circulo.numeroCirculos++;
System.out.println(Circulo.PI);

9
Referencias en Java
public class TestClase {
public static void main( String args[] ){
Circulo c1 = new Circulo();
Circulo c2; c2 = c1;
}
}
Creacin de Objetos de una Clase:
c1 es una variable Referencia al nuevo Objeto creado.
c2 es una variable Referencia a ningn Objeto, i.e. tras la
declaracin Circulo c2 ; c2 == null
Qu ocurre si se ejecuta c2 = c1; ?
Referencias en Java
Una variable Referencia almacena la direccin 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.
Definicin de constructores
Un constructor es un mtodo 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 ms parmetros
No tiene tipo de retorno, ni siquiera void
Un constructor no pblico restringe el acceso a la creacin de objetos
Si la clase no tiene ningn constructor, el sistema
provee un constructor default, sin parmetros
Si la clase tiene algn constructor, debe usarse alguno
de los constructores definidos al instanciar la clase (el
sistema no provee un constructor default en este caso)
Definicin de constructores
class Circulo {
...
Dos diferentes
// constructores constructores
public Circulo() {
radio = 1;
}
public Circulo(int r) {
radio = r;
Instanciacin usando el
} segundo constructor

void f() {
Circulo c = new Circulo(30);
...
}
}
Definicin de constructores
Los Constructores de una clase permiten dar un valor
inicial a los atributos del objeto. Ejemplo: definicin de
los mtodos Constructores de Circulo
Invocacin entre Constructores
La palabra this puede ser utilizada en la primera lnea
de un constructor para invocar a otro constructor.
class Circulo {
private double radio; This hace referencia al
objeto sobre el que se
private static int numeroCirculos = 0;
invoca el mtodo y
Circulo(int radio) { sirvde para evitar
this.radio = radio; aliasing de nombres
Circulo.numeroCirculos++;
}
Circulo() {
this(10); // radio default: 10
}
}
This?
Sirve para hacer referencia a un mtodo o propiedad
del objeto actual.
This?
Donde se puede usar el this?
Puede referirse a cualquier miembro del objeto actual
desde dentro de un mtodo de instancia o un
constructor.
Si se intenta utilizar dentro de un mtodo esttico (Static
methods) lanzara:
"Cannot use This in a static context"
Definicin de Mtodos
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 ningn valor
Pueden ser de instancia o static.
Mtodo de instancia, tiene acceso
directo a las variables de instancia del
objeto sobre el que se invoca

class Circulo {
// campos
double radio = 5;
String color;
static int numeroCirculos = 0;
static final double PI = 3.1416;
// mtodos
double getCircunferencia() {
return getCircunferencia(radio);
}
static double getCircunferencia(double r) {
return 2 * r * PI;
}
// constructores
// main( ) Mtodo static, no tiene acceso
} directo a variables de instancia
Definicin de Mtodos
Los Mtodos de una clase definen su funcionalidad.
Ejemplo: Definicin de Mtodos Consultores en la clase Circulo.
Se podra utilizar this
para referenciar a
atributos pero no es
necesario puesto que
no hay aliasing de
nombres.

Al definir como privados todos los atributos de Circulo,


se deben proporcionar mtodos para acceder a su valor.
Definicin de Mtodos
Al definir como privados todos los atributos de Circulo,
se deben proporcionar mtodos para modificar su valor.
Ejemplo: definicin de los Mtodos Modificadores de Circulo.
Definicin de Mtodos
Ejemplo: definicin de otros Mtodos de Circulo

El uso de un mtodo esttico permite definirlo a nivel


de clase, no a nivel de instancia (objeto individual).
Se deber invocar como Circulo.leerCirculo(...).
Crea una clase Libro que modele la informacin que se mantiene en
una biblioteca sobre cada libro: ttulo, autor (usa la clase Persona),
ISBN, pginas, edicin, editorial , lugar (ciudad y pas) y fecha de
edicin (usa la clase Fecha). La clase debe proporcionar los siguientes
servicios:
accedentes y mutadores,
mtodo para leer la informacin y
mtodo para mostrar la informacin. Este ltimo mtodo mostrar la
informacin del libro con este formato:
Ttulo: Introduction to Java Programming
3a. edicin
Autor: Liang, Y. Daniel
ISBN: 0-13-031997-X
Prentice-Hall, New Jersey (USA), viernes 16 de noviembre de
2001
784 pginas
Sobrecarga de mtodos
(Overloading)
La firma de un mtodo es la combinacin del tipo de
dato que regresa, su nombre y su lista de argumentos.

La sobrecarga de mtodos es la creacin de varios


mtodos con el mismo nombre pero con diferentes
firmas y definiciones.

Se utiliza para reutilizar el nombre de un mtodo


pero con diferentes argumentos.
Reglas para sobrecargar un
mtodo
Los mtodos sobrecargados deben de cambiar la lista
de argumentos.
Pueden cambiar el tipo de retorno.
Un mtodo puede ser sobrecargado en la misma clase o
en una subclase.
Pueden cambiar el modificador de acceso.
Pueden declarar nuevas o ms amplias excepciones.
Veamos un mtodo que se desea sobrecargar:

Los siguientes mtodos son sobrecargas legales del


mtodo cambiarTamano():
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 mtodos en
ejecucin
Heap guarda las variables de instancia y los objetos
Cada hilo de la aplicacin tiene su propia pila (Stack)
pero todos comparten el mismo montculo (Heap).
Stack
Almacena:
Referencias a objetos (instacias)
Datos de tipo primitivo (int, float,char)
Variables locales
Parmetros de retorno de los mtodos

Es esttico, si lo llenamos, caeramos en un


StackOverflowError
public void metodo(){
metodo();
}
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 segn se vaya
requiriendo, la JVM le seguir proporcionando ms
memoria.
Los elementos almacenados no pueden ser
eliminados directamente sino con el Garbage
Collector.
Como interactan el Heap y el
Stack
Las referencias pueden apuntar a elementos del heap (es decir, a
los objetos).
Las referencias tienen un tipo, que es al tipo de objeto que
pueden apuntar las referencias.

Crea la
referencia en
el stack

Crea el objeto
en el heap y
en el mismo
momento
hacemos la
referencia
desde el stack
Como interactan el Heap y el Stack

Un objeto puede estar siendo apuntado por muchas referencias, pero una
referencia solo apunta a un objeto.
Instanciacin y Referencias
Los objetos se crean con el operador new, y se manejan
mediante referencias
Los objetos se crean en el rea de memoria dinmica
conocida como el heap
Una referencia contiene la
direccin de un objeto (es
similar a los punteros de
otros lenguajes)
Una asignacin entre objetos
es una asignacin de
referencias
Circulo c1 = new Circulo();
Circulo c2 = c1;
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
Paso de Parmetros
En Java el paso de parmetros se realiza "por valor.
Significa que cuando un argumento se pasa a una
funcin, la funcin recibe una copia del valor original.
Por lo tanto, si la funcin modifica el parmetro, slo la
copia cambia y el valor original permanece intacto.
Argumentos de tipos primitivos
Si un mtodo modifica el valor de un parmetro, este cambio slo
ocurre al interior del mtodo; al retornar el mtodo, se mantiene
el valor original
Argumentos de tipo referencia (objetos)
Al retornar el mtodo, la referencia pasada como parmetro sigue
referenciando al mismo objeto; sin embargo, los campos del
objeto podran haber sido modificados por el mtodo
ArrayList
Clase que permite almacenar datos en memoria de
forma similar a los Arrays.
Estructura dinmica 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.
Ventajas
No es necesario declarar su tamao como pasa con
los Arrays porque el almacenamiento es dinmico lo
cual permite aumentar o disminuir el consumo de
memoria de acuerdo a las necesidades.
La clase ArrayList tiene muchos mtodos predefinidos
que hacen ms fcil su uso. Por ejemplo: ara saber si
un array cuenta con un dato tendrs que recorrerlo
entero. Sin embargo un ArrayList te devuelve el
objeto que en la coleccin tiene ese valor.
Un ArrayList colecciona objetos, un array colecciona
dtos de un mismo tipo, que adems es bsico.
Mtodos de ArrayList
ArrayList
Recorrer un Array
Podemos recorrerlo de forma clsica con un bucle for:

Si el array contiene objetos de tipos distintos o


desconocemos el tipo:
Uso de for each
Facilita el recorrido de objetos existentes en una coleccin
sin necesidad de definir el nmero de elementos a recorrer.
Sintaxis:

Para cada elemento del tipo TipoARecorrer que se encuentre


dentro de la coleccin nombreDeLaColeccin ejecuta las
instrucciones que se indican

Evita el uso de Iteradores o de un bucle for normal.


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 mtodo 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 ms de cantante
famoso, y una vez introducido mostrar la lista
actualizada usando un for extendido.