Anda di halaman 1dari 75

Programacin Orientada a Objetos

Objetivos

Explicar los conceptos de clases y objetos


Establecer la estructura y miembros de una clase Java Definir variables y mtodos en Java Explicar los especificadores de acceso Aprender a declarar mtodos miembros Explicar la necesidad de y uso de constructores para una clase

Qu es una Clase?
Una clase es una entidad autocontenida que tiene las definiciones de los atributos y el comportamiento que son comunes a todos los objetos de software de un tipo en particular Los atributos se convierten en las variables y el comportamiento se refleja con los mtodos en una clase Java A partir de una clase se pueden crear instancias llamadas objetos

Qu es una Clase?
Caracteristicas (variables)
N# de Ruedas Tipo de Ruedas Color Velocidad

Bicicleta

acelerar

desacelerar

frenar

Cambiar Velocidad

Responsabilidades (mtodos)

Estructura de una Clase


Definicion de la Clase package transporte;//Opcional import java.lang.String;//Opcional class Bicicleta{ Conjunto de int nRuedas; Caracteristicas int tipoRuedas; (variables miembro) String color; float velocidad; public public public public v){} } Responsabilidades (mtodos) void void void void acelerar(float a){} desacelerar(float a){} frenar(){} cambiarVelocidad(int

Miembros de una Clase


Los miembros de una clase (variables y mtodos) pueden ser de dos tipos:

Miembros de Instancia
Miembros de Clase

Cada objeto perteneciente a una clase tiene su propia copia de los Miembros de Instancia de la clase a la que pertenecen
Todos los objetos pertenecientes a una clase comparten los Miembros de Clase de la clase a la que pertenecen

Miembros de una Clase


class Persona{ int ci; static int numPersonas = 0;
La palabra reservada static permite declarar Variables de Clase

public Persona(int numCi){ ci = numCi; numPersonas++; } public int getCi(){return ci;} public static int getNumPersonas(){ return numPersonas; Los Mtodos de } }

Los miembros que no poseen la clusula static, son considerados Miembros de Instancia

Clase slo pueden acceder a Miembros de Clase

Componentes de una Clase


Componentes
public

Propsito
La clase es pblicamente accesible

abstract final
class nombreClase extends superClase implements interface { }

La clase no puede ser instanciada La clase no puede ser derivada


Especifica el nombre de la clase Especifica el nombre de la superclase Especifica las interfaces implementadas dentro de la clase Implementacin de la clase

Qu es un Objeto?
Un objeto es una instancia de una clase

Ciclo de Vida de un Objeto


Usualmente en un programa Java, muchos objetos son creados a partir de diferentes clases y estos objetos interactan entre s enviando mensajes

Despus de que el objeto completa el trabajo para el cual fue creado, es recolectado como basura y sus recursos liberados
Creacin de Objetos Uso de Objetos Destruccin de Objetos

Creacin de Objetos
La creacin de un objeto es bsicamente la creacin de una

instancia de una clase, tambin conocido como instanciacin


de una clase
La declaracin puede estar separada de la creacin Los objetos de una clase son creados a travs del operador new

Persona p2 = new Persona(7897009); Persona p1; p1 = new Persona(13077876);


La inicializacin del objeto se realiza por la llamada al constructor de la clase

Miembros de un Objeto
Generalmente, para refererirse a los miembros de un objeto, se puede agregar el nombre de la variable o referencia del objeto con un punto (.) entre ellos.
class A{ public int m1; private int m2; public void setM2(int val){ m2 = val; } public static void main(String args[]){ A obj = new A(); obj.m1 = 32; // acceso a una variable m. obj.setM2(42);// acceso a un metodo m. } }

Mtodos Getter y Setter


Se utilizan para acceder a propiedades de un

objeto.
class A{ private int m2; public void setM2(int val){ m2 = val; } public int getM2(){ return m2; } }

Tipos de Variables en Java


Las variables disponibles en una clase pueden

ser de varios tipos:


Variables de instancia Variables de clase Variables final

Mtodos en Java
Los mtodos disponibles en una clase pueden

ser de varios tipos:


Mtodos de instancia Mtodos de clase Mtodos abstractos Mtodos final

Modificadores de Acceso
En Java, existen diferentes formas de controlar el acceso a los miembros de una clase. Para ello se utilizan los Modificadores de Acceso, que son: private proctected public

Sin modificador(se asume package)

Private
Un miembro especificado como private es accesible slo dentro de la clase donde es definido Se utiliza para mantener el estado del objeto consistente
class Cuenta{ private float saldo; // Miembro privado public Cuenta() { saldo = 0; } } class Principal { public static void main(String args[]){ Cuenta c = new Cuenta(); c.saldo = 125; //Error, miembro
privado

}
}

Protected
Permite que un miembro sea accedido por la clase en el que est definido, sus subclases y las clases en el mismo paquete
class Padre{//Definida en el paquete p protected int m1; // Miembro protegido } class Hijo extends Padre{//Definida en el paquete p public void setM1(int val){ m1 = val; // Correcto, es protegida } } class Otra{ //Definida en otro paquete public static void main(String args[]){ new Hijo().m1 = 20; //Error m1 no es accesible } }

Public
Cualquier clase perteneciente a cualquier paquete tiene acceso a los miembros pblicos de una clase
class Padre{ public int m1; // Miembro pblico } class Hijo extends Padre{ public void setM1(int val){ m1 = val; // Correcto, es pblica } } class Otra{ public static void main(String args[]){ new Hijo().m1 = 20; // Correcto, es pblica } }

Package
Permite que un miembro sea accedido dentro de la clase en la que est definido, y las clases en el mismo paquete
class Padre{//Definida en el paquete p int m1; // Miembro con acceso package } class Hijo extends Padre{//Definida en p public void setM1(int val){ m1 = val; // Correcto } } class Otra{//Definida en otro paquete public static void main(String args[]){ new Hijo().m1 = 20; //Error m1 no es accesible } }

Modificadores de Acceso
Modificador Clase Subclase mismo paquete Clase mismo Paquete Subclase otro paquete Clase otro paquete

private

si

no

no

no

no

protected

si

si

si

si

no

public

si

si

si

si

si

package

si

si

si

no

no

Declaracin de Miembros
Componentes de la Declaracin de variables Nivel de acceso static final transient Propsito del Componente Especifica el nivel de acceso a la variable Indica la declaracin de una variable de clase Indica que la variable es una constante Indica que la variable no debe ser serializada Indica al compilador que el valor de la variable puede cambiar en cualquier momento Indica el tipo de datos al cual pertenece la variable

volatile
tipo

Declaracin de Miembros
Componentes de la Declaracin de mtodos Propsito del Componente
Especifica el nivel de acceso al mtodo Indica la declaracin de un mtodo de clase Indica que la implementacin del mtodo no es proporcionada Indica que el mtodo no puede ser sobreescrito por su subclase

Nivel de acceso
static abstract final

native
synchronized tipoRetorno nombreMetodo (lista de parmetros) throws Excepciones

Indica que la implementacin del mtodo est en algn otro lenguaje


Indica que el mtodo requiere un monitor para ejecutarse Indica el tipo de dato de la variable que es retornada por el mtodo y el nombre del mtodo Lista de argumentos para el mtodo Da la lista de excepciones lanzadas por este mtodo.

Constructores de una Clase


Todos los objetos creados en Java tienen al menos un

constructor para inicializar un nuevo objeto creado a partir de


un tipo particular
Debe tener el mismo nombre de la clase

class Persona{ int ci; static int numPersonas = 0; public Persona(){ci=0;} public Persona(int numCi){ ci = numCi; Si no numPersonas++; proporcionamos } algn constructor, Java lo hace public getCi(){return ci;} public static int getNumPersonas(){ return numPersonas; } }

Podemos tener tantos constructore s como queramos

Sobrecarga de Mtodos
Java permite tener dos o ms mtodos con el mismo nombre dentro de la misma clase, siempre que cumplan con alguna de las siguientes premisas: Distinto numero de argumentos

Diferencia en los tipos de datos de los argumentos


Orden distinto en el que aparecen los argumentos

No basta con que el tipo de retorno sea distinto para diferenciar a dos mtodos sobrecargados

Sobrecarga de Mtodos
1. public class A{ 2. public 3. 4. } 5. public int n3){ 6. 7. } 8. public 9. ); 10. } 11.}
Mtodo suma int suma(int n1, int n2){ original return ( n1 + n2 );

int suma(int n1, int n2,

return ( n1 + n2 + n3 );
Mtodo suma sobrecargado void suma(int n1, int n2){ perfectamente

System.out.println( n1 + n2

Este Mtodo suma genera un error

Nota: en la lnea 8 se genera un error ya que el mtodo suma solo se diferencia en el tipo de retorno

Clases Anidadas
Una clase anidada es una clase cuya definicin est dentro de otra clase Si una clase contiene a una clase anidada, es conocida como clase exterior.

Las clases anidadas tienen acceso total a los miembros de su clase exterior, incluso a los miembros privados.
Estas clases son consideradas miembro de la clase contenedora.

Clases Anidadas
class A{

Clase exterior
class B{

String mensaje = "miembro de A"; A(){ System.out.println("Clase externa"); }

B(){

Clase anidada

System.out.println("Clase Anidada"); System.out.println(objA.mensaje); } } public static void main(String args[]){ A objA = new A(); B objB = objA.new B(); } }

Acceso a los miembros de la clase exterior

Herencia

Objetivos
Entender los fundamentos de herencia

Aprender cmo usar el modificador super y this


Discutir acerca de cmo crear una jerarqua de herencia de mltiples niveles Explicar la sobrescritura de mtodos Discutir acerca del uso de la palabra clave final para prevenir la sobrescritura Aprender a usar la palabra clave final para prevenir la herencia

Fundamentos de Herencia
Usando este concepto se puede crear una clase general que da la definicin de los rasgos comunes a un conjunto de clases relacionadas Permite crear una jerarqua de clasificaciones En Java, la clase de la cual se hereda es llamada superclase y la clase que hereda de otra clase es llamada subclase Para especificar que una clase hereda de otra clase, la clase que hereda debe usar la palabra clave extends despus del nombre de la clase en su declaracin

Fundamentos de Herencia
Superclase o Clase Base
Transporte

Aereo

Maritimo

Subclase o Clase Derivada

Fundamentos de Herencia
class Transporte{ int color; float velocidad; int capacidad; public Transporte(int c, int cap){ color = c; capacidad = cap; } } class Aereo extends Transporte{ float altura; public Aereo(int c, int cap, float a){ super(c,cap); altura = a; } }

Fundamentos de Herencia
La herencia mltiple no es soportada por Java Una subclase en una jerarqua puede llegar a ser una superclase para otra clase Una clase no puede ser una superclase de s misma

Cada subclase de una clase ser una forma especializada de la superclase


Transporte Esta clase es subclase de Transporte y a la vez es superclase de Helicptero

Aereo

Maritimo

Helicoptero

Qu se Hereda?
Los miembros (variables y mtodos)

son heredados
Los constructores no son heredados

Los modificadores de acceso controlan el acceso a los miembros, as los miembros privados de la clase base, aunque son heredados no son accesibles directamente por la subclase

La Clase java.lang.Object
Es la sper clase directa o indirectamente de todos las clases en Java. Los miembros (variables y mtodos) son heredados a toda clase en Java

Posee mtodos importantes como: equals(), hashcode(), toString()

La Clusula super
La palabra reservada super se utiliza para hacer una llamada explcita al constructor de la clase base desde la clase derivada Tambin se puede usar para referir a los miembros (variables y mtodos) de la superclase

La Clusula super
class Aereo extends Transporte{

float altura; public Aereo(int c, int cap, float a){ super(c,cap); /* Llamada explicita al constructor base */ altura = a;
} public void setColor(int val){ super.color = val;/* Variable miembro de la superclase */ } }

La Clusula this
La palabra reservada this se utiliza para hacer referencia a los miembros (variables y mtodos) de la clase actual
class Aereo extends Transporte{ float altura; public void setAltura(float altura){

this.altura = altura; }
}
Variable miembro Variable local del mtodo

Herencia y Modificadores de acceso


Una subclase puede acceder a todas las variables y mtodos declarados como public y protected de su superclase. Si la superclase est presente en el mismo paquete que la subclase, entonces la subclase puede acceder a todas las variables y mtodos declarados sin modificador(package por defecto) en su superclase.

Orden de Construccin de los Objetos class X {


X(){ System.out.println(Objeto Padre");

} } class Y extends X { Y(){ System.out.println(Objeto Hijo"); } } public class ConstructorOrderTest { public static void main(String[] args) { Y y = new Y(); } }

Salida: Objeto Padre Objeto Hijo

Sobrescritura de Mtodos
Es el proceso mediante el cual el contenido de un mtodo de la superclase es editado en la subclase. Esto se logra cumpliendo las siguientes premisas: Tener el mismo nombre de mtodo Tener el mismo nmero de parmetros Tener los mismos tipos de datos en cada parmetro y en el mismo orden Tener el mismo tipo de retorno

Sobrescritura de Mtodos
class X { public void mostrar(){ System.out.println(Objeto Padre); } Mtodo original
de la superclase } class Y extends X { public void mostrar(){ System.out.println(Objeto Hijo"); } } Mtodo

sobrescrito en la subclase

Comportamiento Virtual y Herencia


En Java todos los mtodos son virtuales por defecto. Por virtual se entiende que todos los mtodos en Java son polimrficos por naturaleza. El comportamiento asociado con los mtodos polimrficos se denomina comportamiento virtual, ya que el comportamiento correcto es determinado en tiempo de ejecucin.

Comportamiento Virtual y Herencia


class Padre{ public void mostrar(){ System.out.println("Superclase"); } } class Hijo extends Padre{ Referencia public void mostrar(){ de la System.out.println("Subclase"); superclase } public String method1(){ return "func"; } public static void main(String args[]){ Esto Padre obj = new Hijo(); ocasionara obj.mostrar(); un error //System.out.println(obj.method1()); } } Salida: Subclase

La Clusula final
Se puede declarar una variable que tenga un valor constante a travs del programa usando el modificador final sobre la variable. Cuando se usa con un mtodo, previene que el mtodo sea sobreescrito Cuando se usa con una clase, previene que la clase sea heredada

La Clusula final
final class Cuenta{ protected float saldo = 0; Error, la clase Cuenta no puede public final float interes = 10; public final void setSaldo(float val){ ser heredada saldo = (val>=0)?val:saldo; } } class CuentaCorriente extends Cuenta{ private float numChequera; public void cambiarInteres(){interes+=2;} public void setSaldo(float val){ saldo = val; Error, el valor de la variable } interes no puede ser }
cambiado Error, el mtodo cambiarInteres() no puede ser sobrescrito

Resumen
Se entendieron los fundamentos de la herencia Se aprendi acerca de cmo usar el modificador super

Se aprendi acerca de la sobrecarga y sobreescritura de mtodos


Se discuti acerca del uso de la palabra clave final

Clases Abstractas e Interfaces

Objetivos
Aprender acerca del modificador abstract

Entender los fundamentos de las clases y mtodos abstractos


Conocer qu son las interfaces Discutir acerca de la extensin de una interfaz Aprender a usar interfaces como referencias

Modificador Abstract
Las clases abstractas sirven para definir caractersticas genricas de un concepto abstracto. Estas no pueden ser instanciadas Un mtodo abstracto, es aquel donde la implementacin no se encuentra en esa clase. Slo pueden presentarse dentro de una clase abstracta

Clases Abstractas Vs. Concretas


Clases Abstractas Generalizan clases concretas Clases Concretas Representan objetos del mundo real

No pueden ser instanciadas

Pueden ser instanciadas

Pueden definir mtodos abstractos

No define mtodos abstractos

Puede proveer implementacin para algunos de sus mtodos

Provee implementacin para todos sus mtodos

Clases Abstractas
Clase abstracta Mtodo abstracto

Mtodo con implementacin

Clases Abstractas y Referencias


Aunque no se puede instanciar una clase abstracta, se puede crear una referencia a ella A esta referencia se le pueden asignar referencias de subclases de la clase abstracta. Esta caracterstica es muy til para realizar polimorfismo

Clases Abstractas y Referencias


abstract class A{ abstract String metodo(); } class B extends A{ String metodo(){return Mtodo} public static void main(String args[]){ A obj1 = new B(); // Correcto A obj2 = new A();// Error } }

Qu es una Interfaz?
Las interfaces son similares a las clase, pero no tienen ninguna variable de instancia y no se proporciona la implementacin para los mtodos declarados en ella Se usan bsicamente, para especificar que debe hacer una clase, pero no cmo, de esto se encargan las clases que implementen la interfaz

Qu es una Interfaz?
Una interfaz puede ser implementada por cualquier nmero de clases y tambin una clase puede implementar cualquier nmero de interfaces Una interfaz puede extender a otra interfaz, as se crean jerarquas de interfaces Una interfaz no puede implementar otra interfaz

Una clase que implementa una interfaz y no proporciona la implementacin para todos los mtodos que estn definidos en la interfaz, entonces debe ser declarada como abstracta

Interfaces

Qu es una Interfaz?

public interface Telefono{ void llamar(int tlf); } public interface Agenda{ void grabarNumero(String nombre,int tlf); Definicin de los int buscarNumero(String nombre); mtodos de las } interfaces public class Celular implements Telefono, Agenda{ public void llamar(int tlf){ // cdigo para llamar } Clase que public void grabarNumero(String nombre,int tlf){ implementa // cdigo para grabar} varias interfaces public int buscarNumero(String nombre){ // cdigo para buscar} public static void main(String args[]){ Telefono nokia = new Celular(); // Correcto } }

Variables en una Interfaz


Las variables en una interfaz se consideran constantes que han sido inicializadas con valores deseados Se puede hacer uso de las interfaces para importar constantes compartidas en muchas clases Se pueden declarar variables en una interfaz de la siguiente manera: public interface Constantes{ String errorMsg = ha ocurrido un error; final static String okMsg = Todo esta bien; }
Todas las variables de una interfaz son final y static por defecto

Heredar de una Interfaz


Solo una interfaz puede heredar de otra interfaz usando la palabra clave extends Una clase no puede heredar de una interfaz, slo puede implementarla Una jerarqua de herencia de interfaz puede hacerse en forma similar a la jerarqua de herencia de clases
public public public public public interface A{...} interface B extends A{...} // OK interface C implements A{...}// Error class D implements A{...} // OK class E extends B{...} // Error

Resumen
Se aprendi acerca del modificador abstract

Se aprendi acerca de las clases y mtodos abstractos


Se aprendi que son y cmo se define las interfaces Se aprendi cmo implementar una interfaz Se aprendi acerca de las variables en una interfaz Se aprendi acerca de herencia en una interfaz

Paquetes

Objetivos de Aprendizaje
Conocer qu es un paquete

Aprender a definir un paquete


Entender cmo se representan los paquetes en el sistema de archivos Discutir la proteccin de acceso en paquetes Entender cmo usar los miembros de paquete

Entender cmo importar paquetes


Conocer acerca del CLASSPATH y su uso Tener una visin general de los paquetes incorporados de Java ms usados

Qu es un Paquete?
Un paquete es un repositorio de clases e interfaces relacionadas El uso de paquetes permite tener dos o ms clases con el mismo nombre en diferentes paquetes

Definen un espacio de nombres para guardar clases


Usando el comando package como la primera sentencia en un archivo fuente Java se crea un paquete Esto asegura que cualquier clase declarada en ese archivo pertenecer a ese paquete particular

Definicin de un Paquete
Un usuario puede construir una jerarqua de paquetes

Esto puede lograrse dividiendo un nombre de paquete de otro directamente usando un punto (.)
package pack1.pack2.pack3; Un punto importante es que la jerarqua de paquetes debe mantenerse en el sistema de archivos subyacente La jerarqua de paquetes del ejemplo anterior debe estar presente como: pack1/pack2/pack3 Unix o pack1\pack2\pack3 Windows

Paquetes y su representacin en el Sistema de Archivos


Los paquetes usualmente se almacenan en directorios del sistema de archivos, estn directamente relacionados con la estructura fsica de los directorios. Si la clase C pertenece al paquete x.y:
packake x.y;
public class C {...}

La clase C se compila y coloca en un directorio x\y bajo algn directorio del sistema de archivos, por ejemplo:

\Ejemplos\x\y\C.class

Paquetes y Proteccin de Acceso


Java utiliza cuatro tipos de visibilidad para los miembros de clase Subclases en el mismo paquete No subclasses en el mismo paquete

Subclases en diferentes paquetes


Clases no relacionadas en diferentes paquetes

Paquetes y Proteccin de Acceso


private Sin Modificador protected public Misma Clase Mismo Paquete Subclase Mismo paquete no-subclase Diferente paquete subclase Diferente paquete nosubclase si si si si

no

si

si

si

no

si

si

si

no no

no no

si no

si si

Usando Miembros de Paquetes


Slo los miembros pblicos de un paquete son accesibles fuera del paquete en el que estn definidos Para hacerlo, se debe seguir alguno de los siguientes pasos: Referirse al miembro por su nombre largo Importar el miembro desde el paquete Importar el paquete completo

Usando Miembros de Paquetes


Estamos haciendo referencia a Vector por su nombre largo

public class Pruebas{ public static void main(String args[]){ java.util.Vector v = new java.util.Vector(); v.addElement("Hola Mundo"); System.out.println((String)v.elementAt(0)); } }

Importando Paquetes
Referirse a las clases por su nombre largo puede ser un proceso tedioso Para evitar esto, Java provee la clusula import, que permite hacer visible una clase o el conjunto de clases en un paquete La clusula import se coloca justo debajo de la clusula package La sintaxis de la sentencia import es la siguiente: import pack1.[pack.](nombreClase|*);

Importando Paquetes
import java.util.Vector; // import java.util.*; public class Pruebas{ public static void main(String args[]){ Vector v = new Vector(); v.addElement("Hola Mundo"); System.out.println((String)v.elementAt(0)); } }
Aqu importamos la clase que queremos utilizar, o en su defecto el paquete completo

Qu es el CLASSPATH?
El CLASSPATH es una variable de ambiente que controla la ubicacin particular que debe ser considerada por Java como la raz de la jerarqua de paquetes Los paquetes pueden resolver problemas de control de acceso y conflictos de espacio de nombres, pero tambin crean dificultades al compilar y ejecutar programas Usualmente un usuario puede guardar todas las clases en el paquete por defecto sin nombre Esto permite al usuario el compilar el cdigo fuente y luego ejecutar el intrprete de Java sin problemas Esto se debe a que el directorio de trabajo (.) se encuentra por defecto en el CLASSPATH

Algunos paquetes Java incorporados


java.awt java.applet java.beans java.io java.lang java.math java.text java.util java.net java.rmi java.sql javax.swing

Resumen
Se aprendi qu es un paquete

Se aprendi a definir un paquete


Se aprendi acerca de la proteccin de acceso cuando se usan paquetes Se aprendi a usar miembros de paquetes Se aprendi a importar paquetes Se aprendi acerca del CLASSPATH y su uso Se present una visin general de los paquetes incorporados en Java

Anda mungkin juga menyukai