Está en la página 1de 44

UNIDAD DE TRABAJO 3

CLASES Y OBJETOS

I.E.S. Pedro Mercedes, 1 DAW


Curso 2013-2014

CLASES Y OBJETOS
1.
2.
3.
4.
5.

6.
7.
8.
9.
10.
11.
12.

13.

Definicin de clase.
Variables miembro o atributos.
Mtodos.
Sobrecarga de mtodos
Manejo de objetos.
Constructores.
Paso de argumentos a mtodos.
Uso de this.
Variables miembro de clase static o atributos estticos.
Variables finales.
Mtodos de clase (static).
Devolucin de objetos
Ejercicios

1. DEFINICIN DE CLASE
Una

clase es un tipo de datos creado por el


programador. Especifica como son los
objetos de esa clase, es decir, de que datos
consta y que operaciones se puede hacer con
ellos.
Un objeto (o instancia) es un ejemplar
concreto de una clase.
Definicin de una clase:
[public] class Nombre_clase{
}

definicin de variables y mtodos


3

1. DEFINICIN DE CLASE
Todas las variables y funciones de Java deben
pertenecer a una clase. No hay variables ni
funciones globales.
En un fichero se pueden definir varias clases, pero
no puede haber ms de una clase public. El
fichero debe llamarse como la clase pblica.
Slo se especifica un mtodo main en la clase que
sea punto de partida del programa.
Las
clases se pueden agrupar en paquetes
(packages). Esta agrupacin est relacionada con la
jerarqua de directorios y ficheros que guardan las
clase.

1. DEFINICIN DE CLASE

La POO consiste, precisamente, en el uso de clases. Para


lo cul se agrupan en una solo estructura:
Los datos que nos interesan sobre algo (atributos).
Las operaciones que se pueden realizar sobre esos datos (mtodos).

Los miembros de una clase pueden ser:


Datos o atributos: Se les denomina variables miembro, pueden ser
de cualquiera de los tipos definidos por Java (int, double, ) o tipos
referencia (objetos, Strings, arrays,).
Funciones o mtodos: Se les denomina funciones miembro. Indican
las operaciones que puede realizar un objeto.

class Alumno {
//Atributos
String nombre;
int edad;
//Mtodos
void VisualizarNombre() {}
void VisualizarEdad() {}

1. DEFINICIN DE CLASE
Por defecto tenemos acceso a las clases definidas en
java.lang (que es el paquete bsico .lang de lenguajedentro del paquete java). Para utilizar clases de otros
paquetes habr que referirse a ellos explcitamente.
Por ejemplo, para importar la clase math hay que usar la
siguiente instruccin:

import java.math.*;

Y despus se pueden usar los mtodos de la clase


con el nombre de la clase seguido del mtodo que
se quiera usar.
Math.pow( a,b )
Math.round( x )
Math.random()
Math.max( a,b )
Math.min( a,b )
Math.E
Math.PI

para double y float


devuelve un double
para int, long, float y double
para int, long, float y double
para la base exponencial
para PI

1. DEFINICIN DE CLASE

Hasta ahora slo se ha utilizado public para calificar el


nombre de las clases, pero hay 3 modificadores ms. Los
tipos de clases que podemos definir son:
abstract: Una clase abstract tiene al menos un mtodo abstracto. Una
clase abstracta no se instancia, sino que se utiliza como clase base para la
herencia.

final: Una clase final se declara como la clase que termina una cadena de
herencia. No se puede heredar de una clase final. Por ejemplo, la clase Math
es una clase final.

public:

synchronizable:

Las clases public son accesibles desde otras clases, bien sea
directamente o por herencia. Son accesibles dentro del mismo paquete en el
que se han declarado. Para acceder desde otros paquetes, primero tienen que
ser importadas.
Este modificador especifica que todos los mtodos
definidos en la clase son sincronizados, es decir, que no se puede acceder al
mismo tiempo a ellos desde distintos threads; el sistema se encarga de
colocar los flags necesarios para evitarlo. Este mecanismo hace que desde
7
threads diferentes se puedan modificar las mismas variables sin que haya
problemas de que se sobreescriban

2. VARIABLES MIEMBRO O ATRIBUTOS

Tambin son llamadas variables de instancia.


Cada objeto tiene su propia copia de variables miembro.
Pueden ser de tipos primitivos o referencias a objetos.
En un programa Java no debe haber variables sin
inicializar:

Cuando se crea un objeto, las variables miembro (atributos) se


inicializan al reservar memoria con los siguientes valores:

byte, short, int: 0


float: 0.0f
char :'\u0000' (null)
tipos de referencia: null

long: 0L
double: 0.0d
boolean: false

El programador puede inicializar los atributos en la declaracin o


en los constructores.
Sin embargo, a las variables locales de un mtodo no se les da
8
valor, por tanto, es conveniente inicializarlas.

2. VARIABLES MIEMBRO O ATRIBUTOS

Para acceder a los atributos desde la clase, se hace por


su nombre o bien a travs de la palabra reservada this
y el operador punto seguido del nombre de la variable.
Para acceder a los atributos desde una instancia de la
clase, es decir desde un objeto de esa clase, se hace a
travs del nombre del objeto, separado del nombre de la
variable por el operador punto.
mbitos de acceso de los atributos:

public (puede ser accedido desde cq. parte del prog)


private (solo dentro de esa clase)
protected (desde esa clase y desde clases heredadas)
package (modo por defecto, solo dentro del paquete
donde han sido declarados)

La sintaxis para declarar un atributo dentro de una


clase es la siguiente:
9
mbito tipo identificador;

3. MTODOS O FUNCIONES MIEMBRO

Son funciones definidas dentro de una clase.


Declaracin:
[mbito] tipo nombreMtodo ([tipo argumento1, tipo argumento2, ...])

cuerpo del mtodo

Si no devuelve ningn valor, el mtodo ser de tipo


void.
Los mtodos definen la interfaz de las clases, es decir,
como se accede a ellas, ocultando la estructura
interna de los datos.
Si el mtodo no va a recibir ningn dato en la
llamada, no hay que declarar ningn parmetro
dentro de los parntesis.
Toda clase debera tener, al menos, un mtodo.
10

3. MTODOS O FUNCIONES MIEMBRO

Los mtodos que retornan un valor deben


hacerlo con la palabra reservada return.
El tipo de dato devuelto por el mtodo y la
variable que lo recoge, desde donde fue
llamado el mtodo, deben ser compatibles.
Un mtodo slo puede devolver un nico valor.
Un mtodo puede declarar y manejar
variables locales, estas no sern atributos de
la clase. Cuidado, stas no se inicializan por
defecto.
11

3. MTODOS O FUNCIONES MIEMBRO


Para llamar a un mtodo desde la misma clase en la
que est implementado solo se usa el nombre del
Mtodo.

Por ejemplo, mtodos que se implementan dentro de una clase


pueden ser llamados entre ellos usando solo el nombre del mtodo.

Para llamar a un mtodo desde el exterior de la


clase, es decir, desde una instancia de la clase u
objeto:

nombreObjeto.nombreMtodo

Mtodo constructor: Es el mtodo al que se llama


cuando se instancia un objeto de la clase. Es decir,
cuando se hace un new nombreClase();

Puede estar o no implementado explcitamente, su sintaxis: No se


pone tipo devuelto porque simplemente crea una instancia de ese
12
objeto, reserva espacio en memoria:
nombreClase( tipo variable; tipo variable;.);

3. MTODOS O FUNCIONES MIEMBRO

Ejemplo

UT3_a_Crculo.

atributos pi y radio y
calculoLongitud, calculoArea:
class Circulo{
private float pi=3.1416;
private int radio;

Clase Circulo,
mtodos ponRadio,
Clase
Atributos

public void ponRadio(int r) {


radio=r;
}
public float calculoLongitud() {
Mtodos
return 2*pi*radio;
}
public float calculoArea() {
return pi*radio*radio;
}
PROUT3P1 Ejer1,2_CuentaBancaria

PROUT3P1 Ejer3_Tarjeta Crdito

13

3. MTODOS O FUNCIONES MIEMBRO

Mtodos getter y setter (get y set)


Los mtodos "get" y "set", tambin llamados "getters" y "setters",
son mtodos especiales que interactan con las variables miembro
privadas.
Mtodo get: lee el valor de la propiedad
Mtodo set: cambia el valor de la propiedad.
La convencin aceptada es la de nombrar mtodos get y set para
la variable de miembro asociada (por ejemplo, "getNombre" y
"setNombre", asociado a la variable "nombre"), con el prefijo "get"
o "set".
No todas las variables miembro pueden tener mtodos de acceso
asociados. Estos mtodos se escriben solamente para los valores
que se deben acceder externamente.
14

3. MTODOS O FUNCIONES MIEMBRO


public class Persona( ){
private String nombre;
private String apellidos;
private int edad;
private boolean sexo; // Tomaremos que el valor
verdadero significa varon, y el falso mujer.
public Persona( ){ }
// Aqu empezamos a declarar gets y sets
public String getNombre( ){
return this.nombre; }
public void setNombre(String nombre){
this.nombre = nombre; }
public String getApellidos( ){
return this.apellidos; }
public void setApellidos(String apellidos){
this.nombre = apellidos; }
public int getEdad( ){
return this.edad; }
public void setEdad(int edad){
this.edad= edad; }
public boolean getSexo( ){
return this.sexo; }
public void setSexo( boolean sexo ){
this.sexo = sexo ; }
}

Para usarlo en el main()


Persona persona = new Persona( );
persona.setNombre("Sebastin");
persona.setApellidos("Barrionuevo");
persona.setEdad(23);
persona.setSexo(true);
System.out.println( persona.getNombre( ) + " "
+ persona.getApellidos( ));

Hacer
PROUT3P1 Ejer4_Clase Coche
15

4. SOBRECARGA DE MTODOS
Los

mtodos sobrecargados son aquellos


que, dentro de la misma clase, tienen el mismo
nombre pero que se diferencian por el
nmero y/o tipo de los argumentos.
El tipo de argumentos con los que se llama al
mtodo, son los que permiten determinar a
Java a qu mtodo hay que invocar en cada
llamada.
Aunque los mtodos sobrecargados pueden
retornar tipos diferentes de valores, el tipo
devuelto por s solo es insuficiente para
distinguir dos versiones de un mtodo.
16

4. SOBRECARGA DE MTODOS
En

caso de que al llamar al mtodo no exista


una coincidencia exacta, Java intenta
adaptarse a uno de los mtodos sobrecargados
utilizando conversin automtica de tipos.
Si los mtodos se diferencian solo en el
valor devuelto, se producir un error de
codificacin y el compilador no lo admitir.
Diferente de la sobrecarga es el redefinicin:
una clase heredada puede redefinir un mtodo
heredado de una superclase.
Como el mtodo constructor es un mtodo
mas, tambin puede sobrecargarse (lo
veremos en el punto 6 de este tema)

17

4. SOBRECARGA DE MTODOS

Ejemplo UT3_b_SC: Implementa el siguiente ejemplo. Son


dos clases: clase SC y clase Sobrecarga1.

18

4. SOBRECARGA DE MTODOS

Desde el main se llama a todas las versiones del mtodo test y cada una
ejecuta el cdigo del mtodo asociado a su versin, se distinguen por el
tipo de parmetros.

19

4. SOBRECARGA DE MTODOS

Ejemplo UT3_c_SC2: Sobrecarga utilizando conversin automtica


de tipos. Implementa el ejemplo.

PROUT3P1 Ejer5_Clase
Operaciones

20

5. MANEJO DE OBJETOS
Cuando

se declara una variable de una clase


no se define ningn objeto, sino una referencia
a esa clase.
Para crear una instancia de una clase o lo que
es lo mismo, para crear un objeto de esa clase,
se utiliza el operador new:
variable= new NombreClase([parmetros]);
Todos

los objetos deben ser asignados


dinmicamente (en tiempo de ejecucin).
A partir de su instancia la manera de referirse
a ellos es a travs del nombre de variable que
21
se le ha dado.

5. MANEJO DE OBJETOS
Ejemplo UT3_a_Crculo_Contina:
Circulo c;
//c es la referencia al objeto de la clase Circulo
c= new Circulo();//new reserva, en tiempo de ejecucin,
//memoria para el objeto y retorna una
//referencia al mismo.

PI
radio
c

null

ponRadio()
calculoLongitud()

calculoArea()

22

5. MANEJO DE OBJETOS

La asignacin de variables objeto


(referencias) no duplica los objetos; las
variables apuntan al mismo objeto.
Circulo cc;
cc=c;
PI
c

radio
ponRadio()

cc

calculoLongitud()

calculoArea()

23

5. MANEJO DE OBJETOS

Ejemplo UT3_a_Crculo_Contina: Probar


la clase Circulo del ejemplo UT3_a con este mtodo
main

public class UsaCirculo {

public static void main(String[] args) {


Circulo c;
c= new Circulo();
c.ponRadio(5);
System.out.println("Longitud= "+ c.calculoLongitud());
System.out.println("Area= "+ c.calculoArea());
}
}
24

5. MANEJO DE OBJETOS
EjerPP_UT3_Rectngulo:

Disear la clase Rectngulo con los mtodos


necesarios para calcular el permetro (sumar
lados) y el rea (base x altura).
Sobrecargar los mtodos Calcula_Permetro y
Calcula_Area para que podamos llamarlos con
valores int, double, float y devuelva tambin
estos tipos.
Disear una clase que instancie un objeto de la
clase Rectngulo y que imprima su permetro y
su rea.
25

6. CONSTRUCTORES
El constructor es un mtodo que se llama
automticamente cuando se crea un objeto de una
clase. Es decir, cuando se hace un new.
Su nombre es el mismo que el de la clase, pero
no devuelve ningn valor.
Sintcticamente es similar a un mtodo: permite
parmetros pero no retorna ningn valor (ni
siquiera se puede especificar void).
Su funcin fundamental es inicializar el estado
interno de un objeto.
Los
constructores pueden tener tambin los
modificadores
de
acceso
public,
private,
protected y package.

26

6. CONSTRUCTORES
Una clase puede tener varios constructores
(sobrecarga).
Cuando en una clase no hay constructor, se llama
constructor por defecto al que no tiene
parmetros, no es necesario que este implementado
por el programador, ya que Java asume por defecto
que tiene esta cabecera public nombreClase()
Es decir, si el programador no disea constructor
para una clase, el compilador crea uno por defecto que
inicializa los atributos de la clase a los valores por
defecto.
Si el programador define un constructor, el por
defecto es sustituido por este o estos (si son varios).
En Java NO hay destructores; el sistema se
encarga automticamente de liberar la memoria de
los objetos que han perdido la referencia.

27

6. CONSTRUCTORES

Ejemplo UT3_a_Crculo_Contina:
class Circulo{
private float pi=3.1416;
private int radio;

public Circulo(){
radio=0;
}
public Circulo(int r){
radio=r;
}
public void ponRadio(int r) {...}
public float calculoLongitud() {...}
public float calculoArea() {...}
28

6. CONSTRUCTORES

Ejemplo UT3_d_Simptico: Analiza y ejecuta el


siguiente programa Java, indicando cul es el
resultado:

Ejercicio: Aade dos constructores para la clase Rectngulo


del EjerPP_UT3 y prubalos.

29

7. PASO DE ARGUMENTOS A MTODOS


RECUERDA

(visto en el tema anterior):

En Java, toda la informacin que se le pasa a un


mtodo en el momento de la llamada se hace por
valor. Es decir, se le hacen llegar datos concretos
a ese mtodo.
De esta manera, los argumentos de los tipos
primitivos se pasan siempre por valor. Al mtodo
le llega un valor que guardar dentro de una
variable (independiente de la variable que se
envo en la llamada). Si dentro del mtodo se
modifica el valor de esta variable, no afectar a la
variable del mtodo que la llamo.

30

7. PASO DE ARGUMENTOS A MTODOS


RECUERDA

(visto en el tema anterior):

Las referencias (arrays, objetos, Strings, ) se


pasan tambin por valor, pero a travs de ellas
se
pueden
modificar
los
objetos
referenciados.
Cuando el argumento es de tipo referencia, el
paso por valor significa que al mtodo le llega
una direccin (la del array, la del objeto,),
esa direccin concreta no puede ser modificada,
pero si los valores que haya contenidos en esa
direccin, es decir, los atributos del objeto o los
valores del array.

31

7. PASO DE ARGUMENTOS A MTODOS

Ejemplo UT3_a_Crculo_Contina:
objetos como parmetros:

Si passemos por
parmetro int radio, no
podramos modificarlo,
dentro del mtodo, solo
operar con ese valor.

Paso

de

class Circulo{
private float pi=3.1416;
private int radio;
public Circulo(){...}
public Circulo(int r){...}
public void ponRadio(int r) {...}
public float calculoLongitud() {...}
public float calculoArea() {...}

public void copiaCirculo(Circulo c){


c.radio=radio;

Hacer
PROUT3P1 Ejer6_7_Clase Cuadrado

32

8. USO DE THIS
this

es una referencia explcita al objeto


actual.

Slo

se puede utilizar dentro de un mtodo y


de la misma forma que cualquier otra
referencia a un objeto: this seguido del
operador .

Dentro

de una misma clase no es necesario


utilizar
this
puesto
que
se
hace
automticamente por el compilador. Pero hay
situaciones
en
las
que
se
hace
33
imprescindible su uso:

8. USO DE THIS

Cuando el nombre de los parmetros de un


mtodo coincide con las variables miembro,
ocultando estas:

class Circulo{
private float pi=3.1416;
private int radio;

public Circulo(){
radio=0;
}
public Circulo(int r){
radio=r;
}
................................

class Circulo{
private float pi=3.1416;
private int radio;

public Circulo(){
radio=0;
}
public Circulo(int radio){
this.radio=radio;
}
.............................

34

8. USO DE THIS

Es necesario, tambin, para retornar la


referencia al objeto actual, cuando un mtodo
devuelve un objeto de la clase en la que est
declarado. class EjemploThis{
private int i=0;

EjemploThis incremento(){
i++;
return this;
}
void imprimeThis(){
System.out.println(i);
}
public static void main(String [] args ){
EjemploThis x=new EjemploThis();
x.incremento().incremento().imprimeThis();
}

35

9. VARIABLES MIEMBRO DE CLASE STATIC O


ATRIBUTOS ESTTICOS

Son propias de la clase y no de cada objeto.

Declaracin:
[modificador acceso] static tipo nombreVar;

Utilizacin: Nombre_clase.nombreVar
Si no se inicializan en la declaracin, se les da
valor por defecto, tanto a los tipos primitivos como a
las referencias.
Se inicializan siempre antes que cualquier objeto de la
clase.
Todos los objetos de una misma clase comparten las
variables static.
36

9. VARIABLES MIEMBRO DE CLASE STATIC O


ATRIBUTOS ESTTICOS

Ejemplo UT3_a_Crculo_Contina:

Va a tener siempre el mismo


valor para todos los objetos que
se creen de esta clase. Es nica.

class Circulo{
private static float pi=3.1416;
private int radio;

public Circulo(){
radio=0;
}
public Circulo(int r){
radio=r;
}
public void ponRadio(int r) {...}
public float calculoLongitud() {...}
public float calculoArea() {...}

37

10. VARIABLES FINALES


Una variable (miembro, local o parmetro) declarada
como final no puede ser modificada.
Se suelen declarar en maysculas.
Sintaxis:

[modificador acceso] final tipo NOMBREVAR [=valor];

Una variable miembro final puede ser inicializada en


los constructores, pero no debe quedar sin
inicializar
Una variable final es constante, pero no tiene por
qu tener el mismo valor en todas las ejecuciones
de un programa, depende de la inicializacin hecha en
cada caso. Se puede inicializar con diferentes valores
38
segn el constructor sobrecargado.

10. VARIABLES FINALES

Ejemplo UT3_a_Crculo_Contina:
class Circulo{
private final float PI=3.1416;
private int radio;

public Circulo(){
radio=0;
}
public Circulo(int r){
radio=r;
}
public void ponRadio(int r) {...}
public float calculoLongitud() {...}
public float calculoArea() {...}
39

PROUT3P1 Ejer8_Clase Cuadrado

11. MTODOS DE CLASE O STATIC

Anlogamente a una variable static, un mtodo static es


un mtodo de la clase, no acta sobre objetos concretos.
Son mtodos que pueden ser usados sin realizar ninguna
instancia de la clase en la que estn declarados, es decir,
sin que exista un objeto de esa clase.

Si se invoca desde la misma clase en la que se encuentra definido,


basta con escribir su nombre.
Si se le invoca desde una clase distinta, debe anteponerse a su nombre,
el de la clase en la que se encuentra seguido del operador punto (.)
<NombreClase>.metodoEstatico

Pueden recibir parmetros explcitos de su clase, pero no


tienen argumento implcito ni pueden utilizar this.
40

11. MTODOS DE CLASE O STATIC

Se cargan en memoria en tiempo de compilacin y no a medida que


se ejecutan las lneas de cdigo del programa. Van precedidos del
modificador static. Un claro ejemplo es el mtodo main;
Declaracin:
[modificador acceso] static tipo nombreMetodo ([lista argumentos]){....}

Suelen emplearse para realizar operaciones comunes a todos los


objetos de la clase. No afectan a los estados de los mismos (a los
valores de sus variables de instancia). Por ejemplo, si se necesita un mtodo
para contabilizar el nmero de objetos creados de una clase, tiene sentido que sea
esttico ya que su funcin (aumentar el valor de una variable entera) se realizara
independientemente del objeto empleado para invocarle.

No conviene usar muchos mtodos estticos, pues si bien se aumenta


la rapidez de ejecucin, se pierde flexibilidad, no se hace un uso
efectivo de la memoria y no se trabaja segn los principios de la
41
POO.

11. MTODOS DE CLASE O STATIC


Ejemplo UT3_e_Hucha: Decir que hace esta clase sin implementarla.

42

12. EJERCICIOS
EjerPP_UT3_Ejercicio1:
Dadas la siguientes clases. Identifica las sentencias no
vlidas, razonando la respuesta:
class Ejercicio1{
public final int A = 345;
public int b;
private float c;
private void metodoUno( int a ){
b= a;
}
public float metodoDos( )
{
return 23;
}
}

class Principal{
public static void main( String[] args
){
Ejercicio1 q1;
q1 = new Ejercicio1( );
q1.A = 12;
q1.B= 12;
q1.C= 12;
q1.metodoUno( );
System.out.println( q1.metodoDos( 12
) );
q1.c = q1.metodoDos( );
}
}
43

12. EJERCICIOS
EjerPP_UT3_Ejercicio2: Indica cul sera la salida del
siguiente cdigo:

class Ejercicio2{
class Principal_2{
public int contador;
public static void main( String[] args ){
public void init( ){
Ejercicio2 q3;
contador = 1;
q3 = new Ejercicio2( );
}
q3.init();
public int incrementar( ){
q3.incrementar( );
contador = contador +1;
q3.incrementar( );
return contador;
System.out.println( q3.obtenerContador( ) )
}
}
public int obtenerContador(){ }
return contador;
}
}

PROUT3P1 Ejer9_Horas
PROUT3P1 Ejer10_Polinomios

44