Sunteți pe pagina 1din 27

PROGRAMACIN ORIENTADA A OBJETOS CON JAVA

CAPTULO 2:

SINTAXIS POO EN JAVA

CONTENIDOS
TEMA 2: Sintaxis POO en Java.
1. CLASES 2. ATRIBUTOS Y MTODOS 3. ATRIBUTOS Y MTODOS ESTTICOS 4. CREACIN DE OBJETOS 5. HERENCIA 6. CLASES ABSTRACTAS 7. THIS Y SUPER 8. INTERFACES 9. PAQUETES

POO - CLASES
La clase es la unidad fundamental de programacin en Java. La clase define el interfaz y la implementacin de los objetos de esa clase. Todo objeto es instancia de alguna clase. La declaracin de una clase tiene la forma bsica:
[public] [final] [abstract] class NombreClase {
... }

Cuerpo de la clase Aqu declaramos los miembros de la clase: atributos y mtodos

public es visible desde otros paquetes final esta clase no puede tener subclases abstract clase abstracta
3

POO - CLASES
Modificadores de clase:
Los modificadores de clase son palabras reservadas que se anteponen al nombre de las clases con el fin de definirles un comportamiento concreto. Los tipos de modificadores de clase que podemos definir son:

abstract final public

Una clase abstracta tiene al menos un mtodo abstracto. Una clase abstracta no se instancia, sino que se utiliza como clase base para la herencia. Una clase final se declara como la clase que termina una cadena de herencia. No se puede heredar de una clase final. 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. Si no se especifica ningn tipo de modificador, se entiende que cualquier objeto que se encuentre en el mismo paquete que esta clase podr hacer uso de ella.
4

POO - ATRIBUTOS Y MTODOS


Una clase en Java puede contener atributos (variables) y mtodos. Los atributos pueden ser tipos primitivos como int, char, etc. u otros objetos. Los mtodos son funciones. Tanto los mtodos como los atributos se definen dentro del bloque de la clase. Java no soporta mtodos o variables globales. Ejemplo:
public class MiClase { int i; //atributo i public MiClase() { //constructor i = 10; } public void suma_a_i( int j ) { //mtodo i = i + j; } } ... MiClase mc1; mc1 = new MiClase(); mc1.i++; // incrementa la instancia de i de mc1 mc1.suma_a_i( 10 ); MiClase mc2 = new MiClase(); mc2.i++; // incrementa la instancia de i de mc2 mc2.suma_a_i( 5 );

i = 21

mc1
i = 16

mc2

POO - ATRIBUTOS Y MTODOS


Atributos:
La sintaxis bsica para declarar atributos es:
[final] [static] acceso tipo lista-de-identificadores

acceso: public | private | protected | tipo: es cualquier tipo primitivo o clase o array de ellos
final: significa que el valor de ese campo no puede ser modificado (constante) static: significa que todas las instancias comparten la misma variable

(atributo de clase) Ejemplos:


private double minimo, maximo; final static int maxInstancias = 10; static float[] valores;
6

POO - ATRIBUTOS Y MTODOS


El ocultamiento de informacin tiene varios grados en Java. Todos los atributos y mtodos de una clase son accesibles desde el cdigo de la propia clase. Para controlar el acceso desde otras clases, se utilizan modificadores de acceso:

public protected private (friendly)

Accesible desde cualquier lugar en que sea accesible la clase Accesible por las subclases y clases del mismo paquete Slo accesible por la propia clase

Accesible por las clases del mismo paquete


7

POO - ATRIBUTOS Y MTODOS


Inicializacin de los atributos:
Java asigna un valor por defecto a los atributos que no se inicializan que depende del tipo de stos:
Tipo del campo
boolean char byte, short, int, long float, double

Valor Inicial
0 \u0000 0 +0.0f +0.0d

referencia a objeto

null

Sin embargo, no asigna ningn valor por defecto inicial a las variables locales de mtodos o constructores. Debemos asignar algn valor a una variable local antes de usarla.

POO - ATRIBUTOS Y MTODOS


Inicializacin de los atributos:
Los atributos pueden: No inicializarse, con lo que tendrn los valores por defecto vistos anteriormente, segn el tipo del campo. Inicializarse en la declaracin, asignndoles una expresin. No se pueden invocar mtodos que pueden lanzar excepciones.
private String miNombre = Juan + Carlos; private int edad = obtenerMiEdad();

POO - ATRIBUTOS Y MTODOS


Mtodos:
La sintaxis bsica para declarar mtodos es:
[final] [static] [abstract] acceso tipo identificador(args) {...}

final: static: abstract:

significa que el mtodo no puede ser sobrecargado por las clases que hereden de esta significa que es un mtodo de clase slo se proporciona la signatura del mtodo. Slo es posible en clases abstractas y no puede coincidir con los modificadores
final, static, private

acceso: es igual que para campos tipo: el tipo de retorno del mtodo. Puede ser cualquier tipo primitivo, clase, array o void args: lista de 0 o ms argumentos separados por comas, donde cada argumento tiene la forma: tipo identificador

10

POO - ATRIBUTOS Y MTODOS


Mtodos:
Ejemplos:
public static void main(String args[]) { ... } public long[] getSueldos() { ... }

public double potencia(double base, double exponente) { ... }


abstract public void hacerAlgo();

11

POO - ATRIBUTOS Y MTODOS


Mtodos:
Todo mtodo debe finalizar con una sentencia return (excepto los mtodos de tipo void) seguida de una expresin del mismo tipo que el valor de retorno. Los mtodos estticos slo pueden acceder a miembros estticos. Podemos tener mtodos con el mismo nombre pero diferente nmero y/o tipo de los argumentos. En ese caso el compilador escoge el mtodo a invocar en funcin del nmero y tipo de los argumentos suministrados. Esto se conoce como sobrecarga de mtodos.
X x = new X(); x.producto(2, 3); x.producto(2.0, 3.5); class X { public int producto(int a, int b) { return a * b; } public double producto(double a, double b) { return a * b; } 12

...

POO - EJEMPLO CLASE


public class Persona { //Atributos private String DNI; private String nombre; private int edad; private String estado; ... //Constructor public Persona(String p_dni, String p_nombre, int p_edad, String p_estado, ...) { DNI = p_dni; nombre = p_nombre; edad = p_edad; estado = p_estado; } //Mtodos public String getDNI() { return DNI; } public String getNombre() { return nombre; } public int getEdad() { return edad; } public void cumpleaos() { edad += 1; } public String getEstado() { return estado; } public void setEstado(String nuevo) { estado = nuevo; } } 13

Si queremos crear una clase en la que el valor de un atributo sea el mismo para todos los objetos instanciados a partir de esa clase debemos utilizar la palabra clave static. Para manejar este tipo de atributos necesitamos mtodos estticos.
class Documento { static int version = 10; int numero_de_capitulos; void aade_un_capitulo() { numero_de_capitulos++; } static void modifica_version( int i ) { version = i; } } doc1 doc2 doc3 doc1.aade_un_capitulo(); Documento.modifica_version(11);
NC = 5 NC = 7 NC = 15

POO - ATRIBUTOS Y MTODOS ESTTICOS

V = 10

14

POO - CREACIN DE OBJETOS


Las referencias a objetos tienen valor null por defecto. A diferencia de otros lenguajes, la declaracin de una variable (referencia) de una cierta clase, no implica la creacin de un objeto asociado. La vinculacin entre una referencia y un objeto se hace despus mediante el operador new o asignando el valor de una referencia a otra del mismo tipo.

Cualquier objeto ha de ser creado explcitamente mediante el operador new.


A a1, a2; a1 = new A(); a2 = a1;

a1 Objeto real a2

15

POO - CREACIN DE OBJETOS


Los objetos tienen un tiempo de vida y consumen recursos durante el mismo. Cuando un objeto no se va a utilizar ms, debera liberar el espacio que ocupaba en la memoria de forma que las aplicaciones no la agoten. En Java, la recoleccin y liberacin de memoria es responsabilidad de un thread llamado automatic garbage collector (recolector automtico de basura). Este thread monitoriza el alcance de los objetos y marca los objetos que se han salido de alcance. Veamos un ejemplo:
String s; s = new String( "abc" ); s = "def"; // // // // no se ha asignado memoria todava memoria asignada se ha asignado nueva memoria (nuevo objeto)

abc

abc

def

16

POO - HERENCIA
La Herencia es el mecanismo por el que se crean nuevos objetos definidos en trmino de objetos ya existentes. Para heredar de una clase utilizamos la palabra clave extends:
class Empleado extends Persona {

. . .
}

La clase Empleado hereda todos los atributos y mtodos (la interfaz y la implementacin) de Persona. A partir de aqu, podemos: Extender la clase Persona aadiendo nuevos mtodos a la clase Empleado. Aumentamos el interfaz. Anular mtodos de Persona con la propia implementacin de Empleado.

En Java slo es posible extender de una clase (herencia simple).


17

POO - HERENCIA
public class MiClase { int i; public MiClase() { i = 10; } public void suma_a_i( int j ) { i = i + j; } } public class MiNuevaClase extends MiClase { public void suma_a_i( int j ) { i = i + ( j/2 ); } }

MiNuevaClase mnc; mnc = new MiNuevaClase(); mnc.suma_a_i( 10 );

Ahora cuando se crea una instancia de MiNuevaClase, el valor de i tambin se inicializa a 10 porque los constructores tambin se heredan. Pero la llamada al mtodo suma_a_i() produce un resultado diferente.

18

POO - CLASES ABSTRACTAS


Cuando mediante los mecanismos de herencia se organizan las clases en una jerarqua lo normal es que las clases que representan los conceptos ms abstractos ocupen un lugar ms alto en la misma. Una de las caractersticas ms tiles de cualquier lenguaje orientado a objetos es la posibilidad de declarar clases que definen como se utiliza esa clase pero sin tener que implementar los mtodos que posee. Esto es muy til cuando la implementacin es especfica para cada usuario, pero todos los usuarios tienen que utilizar los mismos mtodos.

19

POO - CLASES ABSTRACTAS


abstract class Figura { Punto posicion; No se pueden crear instancias de public void mover(Punto nuevaPos) { las clases abstractas. Tienen la funcin posicion = nuevaPos; de encapsular un concepto abstracto dibujar(); que compartirn sus subclases. Parte del interfaz que definen, no posee } una implementacin. abstract public void dibujar(); }

final class Circulo extends Figura { public void dibujar() { . . . } }


No se pueden extender (final). Suelen utilizarse cuando resultara peligroso permitir que las subclases dieran otra implementacin de ciertos mtodos.
20

POO - THIS Y SUPER

This:
La referencia this se usa para referirse al propio objeto y se usa explcitamente para referirse tanto a las variables de instancia como a los mtodos de un objeto. Dentro de los mtodos no estticos, podemos utilizar el identificador especial this para referirnos a la instancia que est recibiendo el mensaje. Algunos usos habituales son: Evitar conflictos de nombres con los argumentos de mtodos.
class Persona { String nombre; public void setNombre(String nombre) { this.nombre = nombre; ...

Pasar una referencia de ese objeto a otro mtodo.


Button incrementar = new Button(Incrementar); incrementar.addActionListener(this);
21

POO - THIS Y SUPER

Super:
Super se usa para referirse a mtodos de la clase padre.
import MiClase; public class MiNuevaClase extends MiClase { public void suma_a_i( int j ) { i = i + ( j/2 ); } public void suma_a_i_padre( int j ) { super.suma_a_i( j ) } }

Cuando extendemos una clase, los constructores de la subclase deben invocar algn constructor de la superclase como primera sentencia.
public Circulo(double radio) { super(); this.radio = radio; }

Si no se invoca explcitamente un constructor de la superclase con la palabra reservada super, debe existir un constructor sin parmetros en la superclase o no debe haber ningn constructor (el compilador genera uno por defecto sin parmetros).

22

POO - THIS Y SUPER


Ejemplo de herencia con uso de this y super. Clase Empleado que hereda de la clase Persona definida anteriormente:
public class Empleado extends Persona { //Atributos private String categoria; private double sueldo; private Departamento dept; //asociacin //Constructor public Empleado(String p_dni, String p_nombre, int p_edad, String p_estado, String categoria, double sueldo, Departamento dept) { super(p_dni, p_nombre, p_edad, p_estado); //constructor clase padre this.categoria = categoria; this.sueldo = sueldo; this.dept = dept; } //Mtodos public String getCategoria() { return categoria; } public void setCategoria(String nueva) { categoria = nueva; } public double getSueldo() { return sueldo; } public void subeSueldo(int cantidad) { sueldo += cantidad; } public Departamento getDepartamento() { return dept; } public void setDepartamento(Departamento otroDept) { dept = otroDept; } }

23

POO - INTERFACES
Constituyen un mecanismo para separar la interfaz de la implementacin. Un interface contiene mtodos y atributos constantes. Las clases que implementen el interface estn obligadas a codificar todos los mtodos definidos en el interface. Se declaran de forma similar a las clases:
interface Nombre { atributos mtodos }

Cuerpo del interfaz. Slo puede contener signaturas de mtodos (no la implementacin o cuerpo) y atributos

Los atributos de un interfaz son implcitamente public, static y final, y deben ser inicializados en la declaracin. Los mtodos de un interfaz son implcitamente public, abstract y no pueden ser static.

24

POO - INTERFACES
Ejemplo:
public interface VideoClip { int version = 1; //atributo constante void play(); //comienza la reproduccin del video void bucle(); //reproduce el video en un bucle void stop(); //detiene la reproduccin } class DivX implements VideoClip { void play() { <cdigo> } void bucle() { <cdigo> } void stop() { <cdigo> } }
25

POO - PAQUETES
Un package es un mecanismo para organizar clases e interfaces relacionadas. La propia librera estndar de Java est organizada en forma de paquetes. Adems, todas las clases de un paquete tienen acceso friendly, por defecto unas a otras. La sentencia package, si existe, debe ir al principio del fichero fuente y debe ser la primera sentencia de ste:
package identificador[.identificador] ...;

Todas las clases declaradas en esa unidad de compilacin pertenecern al mismo paquete. Ejemplo:
package Matematicas.Estadistica;

Por defecto todas las clases que se encuentren en un mismo directorio pertenecen al mismo paquete. 26

POO - PAQUETES
El nombre completo de una clase es la suma del nombre del paquete ms el nombre de la clase. As, para declarar una referencia de la clase Varianza del paquete Matematicas.Estadistica utilizaramos la sentencia:
Matematicas.Estadistica.Varianza var;

Para evitar tener que utilizar nombres tan largos, podemos utilizar la sentencia import:
import Matematicas.Estadistica.Varianza;

o bien
// todas las clases del paquete

import Matematicas.Estadistica.*;
Nota: Cuando se utiliza este tipo de importacin solo se importan las clases del paquete Estadstica no los subpaquetes.

De ese modo podemos declarar:


Varianza var;
27

S-ar putea să vă placă și