Sei sulla pagina 1di 37

Desarrollador en Java

PROGRAMACIN ORIENTADA A OBJETOS


CON JAVA
MYSQL

PROGRAMA A DISTANCIA:
DESARROLLADOR EN JAVA.

Area de Transferencia de
Conocimientos

Pgina 1 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A OBJETOS


CON JAVA
MYSQL

Introduccin:

El Instituto Nacional de Investigacin y Capacitacin en las Telecomunicaciones (INICTEL)


de la Universidad Nacional de Ingeniera (UNI) presenta el programa en la Modalidad de
Educacin distancia DESARROLLADOR EN JAVA, el cual tiene como objetivo conocer,
comprender y aplicar el aprendizaje terico y prctico de los conceptos fundamentales para
utilizar la tecnologa Java en el desarrollo de aplicaciones Web de porte empresarial.
Durante el programa se estudiarn los conceptos bsicos del desarrollo Web con Java,
creacin de pginas dinmicas con JSP y Servlets, manejo del Servidor Web Tomcat,
Glass Fish estructura de un proyecto Web, acceso datos a nivel pagina, session, utilizacin
de JDBC en entornos Web. . Al finalizar el programa, el alumno deber ser capaz de
determinar la mejor arquitectura para una aplicacin Web y realizar el desarrollo del mismo
en forma integral, escalable, robusta y segura

El presente programa comprender los siguientes cursos:


1. Fundamentos de HTML Java Script - XML (30 horas)
2. Java 2 Nivel I: Programacin Orientada a Objeto con Java (30 horas)
3. Java 2 Nivel II: Programacin de Java Servlets y Server Pages (30 horas)
4. Java 2 Nivel III: Desarrollo de Aplicaciones Web con Enterprise Java Beans (30 horas)
Objetivos del programa.
El participante comprender y aplicar

los lenguajes bsicos necesarios para

disear pginas web con interactividad.


El participante ser capaz de comprender

y disear programas

aplicando la

programacin orientada a objetos (POO) utilizando el lenguaje Java.


El participante podr realizar aplicaciones con programacin orientada a objetos
aplicando la tecnologa Web
El participante disear aplicaciones con POO y acceso a base de datos con
tecnologa Web.

Area de Transferencia de
Conocimientos

Pgina 2 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A OBJETOS


CON JAVA

INDICE

MYSQL

CAPITULO 2:
Principios fundamentales sobre Programacin Orientada a Objetos
2.0

Programacin Orientada a Objetos

2.1

La Herencia en JAVA

2.2

Sobrecarga de Mtodos

2.3

Polimorfismo

14

2.4

Clases Abstractas

17

2.5

Interfaces

26

2.6

Resumen

37

Area de Transferencia de
Conocimientos

Pgina 3 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A OBJETOS


CON JAVA
MYSQL

CAPITULO 2:
Programacin con objetos
Objetivos:
Al finalizar este capitulo

Identificar y analizar el lenguaje de programacin Java, sus


fundamentos, sus estructuras de control de programa, y sus clases.
Identificar los Fundamentos de la Programacin Orientada a Objetos,
con la metodologa de programacin tales como la herencia, el
polimorfismo, las clases abstractas, la interface.
Analizar estas metodologas con programas que permitan comprender
el uso de estas metodologas

Introduccin:
La Programacin Orientada a Objetos facilita la creacin de software de calidad
basadas en el modo de pensar del hombre, con el modo de operar de las mquinas
y se centra en los conceptos bsicos que son los objetos a la cuales se le atribuye
sus propiedades, mtodos y a su vez se generan los modelos de herencia,
abstraccin, encapsulamiento y polimorfismo.

Pensar en trminos de objetos es muy parecido a cmo lo haramos en la vida real.


Por ejemplo vamos a pensar en una persona para tratar de modelar en un esquema
de POO1. Diramos que la persona es el elemento principal que tiene una serie de
caractersticas, como podran ser el nombre, la edad, el sexo, etc. Adems tiene una
serie de funcionalidades (acciones) asociadas, como pueden ser comer, caminar,
dormir, etc.

Programacin Orientada a Objetos

Area de Transferencia de
Conocimientos

Pgina 4 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

2.1

MYSQL

La herencia en java

Java permite el empleo de la herencia, caracterstica muy potente que permite


definir una clase tomando como base a otra clase ya existente. Esto es una de
las bases de la reutilizacin de cdigo, en lugar de copiar y pegar.
En java, como ya vimos la herencia se especifica agregando la clusula
extends despus del nombre de la clase. En la clausula extends indicaremos
el nombre de la clase base de la cul queremos heredar.
Al heredar de una clase base, heredaremos tanto los atributos como los
mtodos, mientras que los constructores son utilizados, pero no heredados.

Fig 1.-Concepto Grfico de Herencia

Area de Transferencia de
Conocimientos

Pgina 1 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA
MYSQL

Fig. 2.-Concepto de Herencia con Diagramas de Clases

Area de Transferencia de
Conocimientos

Pgina 2 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

Ejemplos de aplicacin con herencia


MYSQL

Ejemplo1.-realizar un programa con clases que permite realizar lo


siguiente:
Se desea repartir una herencia de 50000 por la cual se reparte al primer hijo la
mitad de la herencia, al segundo hijo la tercera parte de lo queda y al tercer hijo
lo que resta. Escribir lo que corresponde a cada uno.
aplicaherencia.java
package herencia;
class aplicaherencia
{
double herencia,repartehijo1,repartehijo2,repartehijo3;
public double asignarherencia()
{
herencia=50000;
return herencia;
}
}
hijo.java
package herencia;
class hijo extends aplicaherencia
{
public void reparteherencia()
{
repartehijo1=asignarherencia()/2;
repartehijo2=(herencia - repartehijo1)/3;
repartehijo3=herencia-repartehijo1-repartehijo2;
}
public void salidaherencia()
{
System.out.println("La herencia es "+herencia);
System.out.println("La herencia del hijo1 es "+repartehijo1);
System.out.println("La herencia del hijo2 es "+repartehijo2);
System.out.println("La herencia del hijo3 es "+repartehijo3);
}
}
miherencia.java
Area de Transferencia de
Conocimientos

Pgina 3 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

package herencia;

MYSQL

public class miherencia


{
public static void main(String[]args)
{
hijo heredan=new hijo();
heredan.asignarherencia();
heredan.reparteherencia();
heredan.salidaherencia();
}
}

Su diagrama de clases

Fig. 3 Diagrama de Clases del Ejemplo1


En el siguiente diagrama de clases la clase hijo hereda de la clase
aplicaherencia el mtodo asignarherencia. y en la clase miherencia se crea
instancias utilizando las clases padre(hijo,aplicarherencia).
Utilice el Software StarUML para realizar el diagrama

Area de Transferencia de
Conocimientos

Pgina 4 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

Ejemplo2

MYSQL

Empleado.java
package herencia;
public class Empleado {
protected String nombre,cargo;
protected double costoDia;
public Empleado(String n,String c){
this.nombre=n;this.cargo=c;this.costoDia=80;
}
public String getNom(){
return nombre;
}
public String getCar(){
return cargo;
}
public static void main(String[] args) {
}
}
Estable.java
package herencia;
public class Estable extends Empleado {
protected int diasTrab;
public Estable(String n,String c){
super(n,c); // Este constructor permite accede a la clase principal
}
public void setDiasTrab(int d){
this.diasTrab=d;
}
public double getSueldo(){
return diasTrab*costoDia;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
Eventual.java
package herencia;
public class Eventual extends Empleado {
protected int horasTrab;
public Eventual(String n,String c){
super(n,c);
}
public void setHorasTrab(int ht){
this.horasTrab=ht;
}
Area de Transferencia de
Conocimientos

Pgina 5 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA
MYSQL

public double getSalario(){


return horasTrab*costoDia/8;
}
public static void main(String[] args) {
}
}
Planilla.java
package herencia;
import javax.swing.*;
public class Planilla {
public static void main(String[] args) {
Estable es=new Estable("Luis","vendedor");
Eventual ev=new Eventual("Juan","Vigilante");
es.setDiasTrab(10);
ev.setHorasTrab(10);
JOptionPane.showMessageDialog(null,es.getNom()+
"
+es.getCar()+" " +es.getSueldo());
JOptionPane.showMessageDialog(null,ev.getNom()+ev.getSalario());
}
}

"

Fig. 4.-Diagrama de Clases del Ejemplo2


Area de Transferencia de
Conocimientos

Pgina 6 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

2.2

Sobrecarga de mtodos

MYSQL

Un mtodo sobrecargado se utiliza para reutilizar el nombre de un mtodo pero


con diferentes argumentos (opcionalmente un tipo diferente de retorno). Las
reglas para sobrecargar un mtodo son las siguientes:
+ Los mtodos sobrecargados debe de cambiar la lista de argumentos.
+ Pueden cambiar el tipo de retorno.
+ Pueden cambiar el modificador de acceso.
+ Pueden declarar nuevas o ms amplias excepciones.
+ Un mtodo puede ser sobrecargado en la misma clase o en una subclase.
Veamos un mtodo que se desea sobrecargar:
public void cambiarTamano(int tamano, String nombre, float patron){ }
Los siguientes mtodos son sobrecargas legales del mtodo cambiarTamano():
public void cambiarTamano(int tamano, String nombre){}
public int cambiarTamano(int tamano, float patron){}
public void cambiarTamano(float patron, String nombre) throws
IOException{}
Cmo invocar un mtodo sobrecargado::
Lo que define qu mtodo es el que se va a llamar son los argumentos que se
envan al mismo durante la llamada. Si se invoca a un mtodo con un String
como argumento, se ejecutar el mtodo que tome un String como argumento,
si se manda a llamar al mismo mtodo pero con un float como argumento, se
ejecutar el mtodo que tome un float como argumento y as sucesivamente. Si
se invoca a un mtodo con un argumento que no es definido en ninguna de las
versiones sobrecargadas entonces el compilador arrojar un mensaje de error.
Ejemplo de una clase con un mtodo sobrecargado:
Al ejecutar el cdigo anterior obtendremos lo siguiente:
Mtodo que recibe enteros. Mtodo que recibe flotantes.
Mtodo que recibe una cadena: Monillo007
Al utilizar objetos en lugar de tipos primitivos o cadenas se vuelve ms
interesante. Veamos lo que sucede cuando se tiene un mtodo sobrecargado
que en una de sus versiones toma un Animal como parmetro y en otra un
Caballo.

Area de Transferencia de
Conocimientos

Pgina 7 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

Ejemplo1.-Ejemplos de Mtodo Sobrecargado


MYSQL

class Animal { }
class Caballo extends Animal{ }
class Animales{
public void MetodoSobrecargado(Animal a){

System.out.println("Mtodo de parmetro Animal...");


}
public void MetodoSobrecargado(Caballo c){
System.out.println("Mtodo de parmetro Caballo...");
}
public static void main(String... args){
Animales as = new Animales();
Animal objetoAnimal = new Animal();
Caballo objetoCaballo = new Caballo();
as.MetodoSobrecargado(objetoAnimal);
as.MetodoSobrecargado(objetoCaballo);
}
}
Al ejecutar el cdigo anterior obtenemos:
Mtodo de parmetro Animal...
Mtodo de parmetro Caballo...
Como era de esperarse, cada objeto manda a llamar al mtodo que le
corresponde de acuerdo a su tipo.

Area de Transferencia de
Conocimientos

Pgina 8 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

Ejemplo2.-En este ejemplo el Mtodo Geometra permite calcular el rea y


MYSQL

el volumen.
Sobrecarga.java
package javaapplication5;
public class Sobrecarga {

double base,largo,altura,area,perimetro,volumen;
public void Geometria(double x, double y){
area=x*y;
System.out.println("El Area de un rectngulo===."+area);
}
public void Geometria(double x, double y,double z){
volumen=x*y*z;
System.out.println("El volumen de un cubo es."+volumen);
}
public void Geometria (String cadena){
System.out.println("Mtodos de Sobrecarga: "+ cadena);
}
}
main.java
package javaapplication5;
import java.io.*;
import java.util.Scanner;
public class Main {
double base,altura;
public static void main(String[] args) {
Sobrecarga s = new Sobrecarga();
double a = 20.5;
double b = 30.5;
double c=10;
s.Geometria("Geometria");
s.Geometria(a, b);s.Geometria(a, b, c);
}
}
Area de Transferencia de
Conocimientos

Pgina 9 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

Ejemplo3.-En este ejemplo el Mtodo Geometra permite calcular el rea y el


MYSQL

volumen con Lectura de Datos.


Ejemplo con Lectura de Datos
Sobrecarga.java
package javaapplication5;
import java.io.*;
import java.util.Scanner;
public class Sobrecarga {

double base,largo,altura,area,perimetro,volumen,dato;
String linea;
public void Geometria(double x, double y){
area=x*y;

System.out.println("El Area de un rectngulo===."+area);

}
public void Geometria(double x, double y,double z){
volumen=x*y*z;
System.out.println("El volumen de un cubo es."+volumen);
}
public void Geometria(String cadena){
System.out.println("Mtodos de Sobrecarga: "+ cadena);
}
public void EjecutarMetodos()
{Scanner teclado = new Scanner(System.in);
System.out.println("Cual es la base");
base = teclado.nextInt();
System.out.println("Cual es el largo");
largo = teclado.nextInt();
System.out.println("Cual es la altura");
altura = teclado.nextInt();
Geometria("Geometricos");
Geometria(base,largo);
Geometria(base,largo,altura);
}
}
Area de Transferencia de
Conocimientos

Pgina 10 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

Principal.java
MYSQL

package javaapplication5;
import java.io.*;
import java.util.Scanner;
public class Principal {
double base,altura;
public static void main(String[] args) {
Sobrecarga s = new Sobrecarga();
S. EjecutarMetodos();
}
}

Ejemplo4.-Otro ejemplo de Sobrecarga con el mtodo Suma


Sumar.java
/** Diversos modos de sumar */
public class Sumar {
public float suma(float a, float b) {
System.out.println("Estoy sumando reales");
return a+b;
}
public int suma(int a, int b) {
System.out.println("Estoy sumando enteros");
return a+b;
}
public static void main(String[] args) {
float x = 1, float y = 2;
int v = 3, int w = 5;
System.out.println(suma(x,y));
System.out.println(suma(v,w));
}
}

Area de Transferencia de
Conocimientos

Pgina 11 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

Ejemplo5
MYSQL

Esto tambin se aplica a los constructores. De hecho, es la aplicacin ms


habitual de la sobrecarga:
Rectangulo.java
/** Calcula el area de un rectangulo
*/
public class Rectangulo {
private float x1,y1,x2,y2;
public Rectangulo(float ex1, float ey1, float ex2, float ey2) {
x1 = ex1;
x2 = ex2;
y1 = ey1;
y2 = ey2;
}
public Rectangulo() {
x1 = 0;
x2 = 0;
y1 = 1;
y2 = 1;
}
public float calcularArea() {
return (x2-x1) * (y2-y1);
}
public static void main(String[] args) {
Rectangulo prueba1 = new Rectangulo(1,4,7,6);
Rectangulo prueba2 = new Rectangulo();
System.out.println(prueba1.calcularArea());
System.out.println(prueba2.calcularArea());
}
}

Area de Transferencia de
Conocimientos

Pgina 12 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

Reglas de la sobrecarga y sobreescritura de mtodos::


MYSQL

Ahora que hemos visto ambas formas de reescribir mtodos, revisemos las
reglas y diferencias entre ambos tipos de reescritura:

+Argumentos: En un mtodo sobrecargado los argumentos deben de cambiar


mientras que en un mtodo sobreescrito NO deben cambiar.

+ El tipo de retorno: En un mtodo sobrecargado el tipo de retorno puede


cambiar, en un mtodo sobreescrito NO puede cambiar, excepto por subtipos
del tipo declarado originalmente.
+ Excepciones: En un mtodo sobrecargado las excepciones pueden cambiar,
en un mtodo sobreescrito pueden reducirse o eliminarse pero NO deben de
arrojarse excepciones nuevas o ms amplias.

+ Acceso: En un mtodo sobrecargado puede cambiar, en un mtodo


sobreescrito el acceso NO debe de hacerse ms restrictivo(puede ser menos
restrictivo).
+ Al invocar: En un mtodo sobrecargado los argumentos son los que
determinan qu mtodo es el que se invocar, en un mtodo sobreescrito el
tipo de objeto determina qu mtodo es elegido.

Area de Transferencia de
Conocimientos

Pgina 13 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

2.3

Polimorfismo
MYSQL

El polimorfismo en java consiste en declarar y definir varios mtodos con el


mismo nombre, pero con diferente nmero y/o tipo de argumentos y que
realizan diferentes operaciones. Sin embargo, el tipo que devuelven los
mtodos debe coincidir.
Polimorfismo es la capacidad de que diferentes objetos de una misma jerarqua
tengan comportamientos distintos aunque reciban el mismo mensaje.
La idea detrs del polimorfismo es poder disear nuestro cdigo teniendo en
cuenta que todas las clases que derivan de una clase base heredan los
mtodos de la clase base.
Una sintaxis algo genrica puede ser la que sigue:

class nombreClase
{ tipo1 var1;
tipo2 var2;
tipo3 var3;
nombreClase nombreMetodo(tipo1 arg1, )
{ sentencia11;
sentencia12;

sentencia1n;
}
nombreClase nombreMetodo(tipo2 arg1, )
{ sentencia21;
sentencia22;
sentencia2n;
}
public static void main(args[]) {
sentenciam1;
sentenciam2;

sentenciamn;
}
}
En muchas ocasiones, cuando utilizamos herencia podemos terminar teniendo una
familia de clases que comparten un interfaz comn. Por ejemplo, si creamos un
nuevo fichero que contenga a Mamifero y Gato le aadimos:
Mamifero.java
Area de Transferencia de
Conocimientos

Pgina 14 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

package javaapplication5;
MYSQL

class Mamifero {
String especie,nombre, color;
int patas;
public void mover() {

System.out.println("Los comportamientos de los mamferos y el numero de


patas");
}
}
Gato.java

class Gato extends Mamifero {


public void mover() {
patas=4;
System.out.println("EL Gato maulla");
System.out.println("Su numeros de Patas es===>" +patas);
}
}
Perro.java

class Perro extends Mamifero {


public void mover() {
patas=4;
System.out.println("El perro ladra");
System.out.println("Su numeros de Patas es====>" +patas);
}
}

Aves.java

class Aves extends Mamifero {


public void mover() {
patas=2;
System.out.println("Las Aves Vuelan");
Area de Transferencia de
Conocimientos

Pgina 15 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

System.out.println("Su Numeros de Patas es==>" +patas);


MYSQL

}
}
Polimorfismo.java

public class Polimorfismo {


public static void muevete(Mamifero m) {
m.mover();
}
public static void main(String[] args) {
Mamifero animal=new Mamifero();
Gato manchas = new Gato();
Perro pinky = new Perro();
Aves aguila=new Aves();
animal.mover();
muevete(manchas);
muevete(pinky);
muevete(aguila);
}
}
Vemos que el mtodo muvete llama al mtodo mover de un mamfero. El no
sabe con qu clase de mamfero trata, pero funciona y se llama al mtodo
correspondiente al objeto especfico que lo llama (es decir, primero un gato y
luego un perro y luego un ave). Y esto no slo se aplica a los mtodos. Por
ejemplo, podemos reescribir el cdigo del procedimiento principal:
Y vemos que funciona exactamente igual. El polimorfismo consiste en que toda
referencia a un objeto de una clase especfica puede tomar la forma de una
referencia a un objeto de una clase heredada a la suya.

2.4 Clases abstractas


Concepto
Hay ocasiones, cuando se desarrolla una jerarqua de clases en que algn
comportamiento est presente en todas ellas pero se materializa de forma
distinta para cada una. Por ejemplo, pensemos en una estructura de clases
Area de Transferencia de
Conocimientos

Pgina 16 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

para manipular figuras geomtricas. Podramos pensar en tener una clase


MYSQL

genrica, que podra llamarse Figura y una serie de clases que extienden a la
anterior que podran ser Crculo, Polgono, etc. Podra haber un mtodo dibujar
dado que sobre todas las figuras puede llevarse a cabo esta accin, pero las
operaciones concretas para llevarla a cabo dependen del tipo de figura en
concreto (de su clase). Por otra parte la accin dibujar no tiene sentido para la
clase genrica Figura, porque esta clase representa una abstraccin del
conjunto de figuras posibles.
Para resolver esta problemtica Java proporciona las clases y mtodos
abstractos. Un mtodo abstracto es un mtodo declarado en una clase para el
cual esa clase no proporciona la implementacin (el cdigo). Una clase
abstracta es una clase que tiene al menos un mtodo abstracto. Una clase que
extiende a una clase abstracta debe implementar los mtodos abstractos
(escribir el cdigo) o bien volverlos a declarar como abstractos, con lo que ella
misma se convierte tambin en clase abstracta.
Declaracin e implementacin de mtodos abstractos
Siguiendo con el ejemplo del apartado anterior, se puede escribir:
abstract class Figura {
...
abstract void dibujar();
. . .}
class Circulo extends Figuraca {
...
void dibujar() {
// codigo para dibujar Circulo
...
}
}
La clase abstracta se declara simplemente con el modificador abstract en su
declaracin. Los mtodos abstractos se declaran tambin con el mismo
modificador, declarando el mtodo pero sin implementarlo (sin el bloque de
cdigo encerrado entre {}). La clase derivada se declara e implementa de forma
normal, como cualquier otra. Sin embargo si no declara e implementa los
Area de Transferencia de
Conocimientos

Pgina 17 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

mtodos abstractos de la clase base (en el ejemplo el mtodo dibujar) el


MYSQL

compilador genera un error indicando que no se han implementado todos los


mtodos abstractos y que, o bien, se implementan, o bien se declara la clase
abstracta.
Clases abstractas
Referencias y objetos abstractos
Se pueden crear referencias a clases abstractas como cualquier otra. No hay
ningn problema en escribir:
Figura figur;
Sin embargo una clase abstracta no se puede instanciar, es decir, no se
pueden crear objetos de una clase abstracta. El compilador producir un error
si se intenta:
Figura figur = new Figura();

Esto es coherente dado que una clase abstracta no tiene completa su


implementacin y encaja bien con la idea de que algo abstracto no puede
materializarse.
Sin embargo utilizando el up-casting visto en el captulo dedicado a la Herencia
se puede escribir:
Figura figur = new Circulo();
figur.dibujar();
La invocacin al mtodo dibujarse resolver en tiempo de ejecucin y se
llamar al mtodo de la clase adecuada. En nuestro ejemplo se llamar al
mtodo dibujar de la clase Circulo.

Area de Transferencia de
Conocimientos

Pgina 18 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

Ejemplo1.-En este ejemplo se usa la clase abstracta Figura con su etodo


MYSQL

dibujkar

Figura.java
package javaapplication5;
abstract class Figura {
public int base=20,largo=30,altura=50,radio=10;
public int area;
abstract public void dibujar();
public void mensaje(String cad)
{System.out.println(cad);}
}
triangulo.java
package javaapplication5;
class triangulo extends Figura {
public void dibujar()
{
area=base*altura/2;
System.out.println("El area del Triangulo es==>"+area);
}
}
Rectangulo.java
package javaapplication5;
class Rectangulo extends Figura {
public void dibujar()
{
area=base*altura;
System.out.println("El area del Rectangulo es==>"+area);
}
}
Circulo.java
package javaapplication5;
class Circulo extends Figura {
public void dibujar()
Area de Transferencia de
Conocimientos

Pgina 19 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

{
MYSQL

area=radio*radio;

System.out.println("El area del Circulo es==>"+area);


}
}
pruebaFigura.java
package javaapplication5;
public class pruebaFigura {
public static void main(String[] args) {
triangulo t1=new triangulo();
t1.mensaje("Este es un triangulo");
t1.dibujar();
Rectangulo r1=new Rectangulo();
r1.mensaje("Este es un Recatngulo");
r1.dibujar();
Circulo c1=new Circulo();
c1.mensaje("Este es un Circulo");
c1.dibujar();
}
}

Area de Transferencia de
Conocimientos

Pgina 20 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

Ejemplo 2.-Otro Ejemplo con la Clase vehculo


MYSQL

Vehiculo.java
package javaapplication5;
abstract class vehiculo {
public int velocidad=0;
abstract public void acelera();
public void para()
{ System.out.println("Termino con velocidad es==>");
velocidad=0;}
}
coche.java
package javaapplication5;
class coche extends vehiculo {
public void acelera() {
System.out.println("La aceleracin del coche es==>");
velocidad+=5;
}
}
Avion.java
class Avion extends vehiculo {
public void acelera() {
System.out.println("La acelearacin del Avion es==>");
velocidad+=50;
}
}
Barco.java
package javaapplication5;
class Barco extends vehiculo {
public void acelera() {
System.out.println("La acelearacin del Barco es==>");
velocidad+=10;
}
}
Area de Transferencia de
Conocimientos

Pgina 21 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

prueba.java
MYSQL

package javaapplication5;
public class prueba {
public static void main(String[] args) {
//coche
coche c1=new coche();
c1.acelera();
System.out.println(c1.velocidad);
c1.para();
System.out.println(c1.velocidad);
//Avion
Avion av1=new Avion();
av1.acelera();
System.out.println(av1.velocidad);
av1.para();
System.out.println(av1.velocidad);
//Barco
Barco bar1=new Barco();
bar1.acelera();
System.out.println(bar1.velocidad);
bar1.para();
System.out.println(bar1.velocidad);
}
}

Area de Transferencia de
Conocimientos

Pgina 22 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

Ejemplo 3.import java.util.*;


abstract class Instrumento {

MYSQL

public abstract void tocar();


public String tipo() {
return "Instrumento";
}
public abstract void afinar();
}
class Guitarra extends Instrumento {
public void tocar() {
System.out.println("Guitarra.tocar()");
}
public String tipo() { return "Guitarra"; }
public void afinar() {}
}
class Piano extends Instrumento {
public void tocar() {
System.out.println("Piano.tocar()");
}
public String tipo() { return "Piano"; }
public void afinar() {}
}
class Saxofon extends Instrumento {
public void tocar() {
System.out.println("Saxofon.tocar()");
}
public String tipo() { return "Saxofon"; }
public void afinar() {}
}
// Un tipo de Guitarra
class Guzla extends Guitarra {
Area de Transferencia de
Conocimientos

Pgina 23 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

public void tocar() {


MYSQL

System.out.println("Guzla.tocar()");
}
public void afinar() {
System.out.println("Guzla.afinar()");
}
}
// Un tipo de Guitarra
class Ukelele extends Guitarra {
public void tocar() {
System.out.println("Ukelele.tocar()");
}
public String tipo() { return "Ukelele"; }
}
public class Musica2 {
// No importa el tipo de Instrumento,
// seguir funcionando debido a Polimorfismo:
static void afinar(Instrumento i) {
// ...
i.tocar();
}
static void afinarTodo(Instrumento[] e) {
for(int i = 0; i < e.length; i++)
afinar(e[i]);
}
public static void main(String[] args) {
Area de Transferencia de
Conocimientos

Pgina 24 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

// Declarar un Arreglo SIN INSTANCIAS es


valido en Clases Abstractas

MYSQL

Instrumento[] orquesta = new Instrumento[5];


// Generar una INSTANCIA de una la Clase
Abstracta no es valido
// Instrumento nuevo = new Instrumento();
int i = 0;
// Up-casting al asignarse el Arreglo
orquesta[i++] = new Guitarra();
orquesta[i++] = new Piano();
orquesta[i++] = new Saxofon();
orquesta[i++] = new Guzla();
orquesta[i++] = new Ukelele();
afinarTodo(orquesta);
}
}
La caracterstica de hacer una Clase/Mtodo abstract reside en
que no puede ser generada una instancia de la misma, este
comportamiento se demuestra en el mtodo principal (main)
Aunque dentro del mtodo sea generado un Arreglo de esta
Clase abstracta, recuerde que un arreglo es nicamente un
contenedor de Objetos, esto permite que sea generado sin
ningn error.
Dentro de comentarios se encuentra la generacin de una
instancia del tipo Instrumento la cual generara un error al ser
compilada la Clase.

Una clase abstracta es una clase que tiene al menos un mtodo que no ha sido
especificado. Esto evita que se pueda instanciar.

Area de Transferencia de
Conocimientos

Pgina 25 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

2.5 Interfaces
MYSQL

Concepto de Interface

El concepto de Interface lleva un paso ms adelante la idea de las clases


abstractas. En Java una interface es una clase abstracta pura, es decir una
clase donde todos los mtodos son abstractos (no se implementa ninguno).
Permite al diseador de clases establecer la forma de una clase (nombres de
mtodos, listas de argumentos y tipos de retorno, pero no bloques de cdigo).
Una interface puede tambin contener datos miembro, pero estos son siempre
static y final. Una interface sirve para establecer un 'protocolo' entre clases.
Para crear una interface, se utiliza la palabra clave interface en lugar de class.
La interface puede definirse public o sin modificador de acceso, y tiene el
mismo significado que para las clases. Todos los mtodos que declara una
interface son siempre public.
Para indicar que una clase implementa los mtodos de una interface se utiliza
la palabra clave implements. El compilador se encargar de verificar que la
clase efectivamente declare e implemente todos los mtodos de la interface.
Una clase puede implementar ms de una interface.
Declaracin y uso
Una interface se declara:
interface nombre_interface {
tipo_retorno nombre_metodo ( lista_argumentos ) ;
...
}
Por ejemplo:
interface InstrumentoMusical {
void tocar();
void afinar();
String tipoInstrumento();
}

Area de Transferencia de
Conocimientos

Pgina 26 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

Y una clase que implementa la interface:


MYSQL

class InstrumentoViento extends Object implements InstrumentoMusical {


void tocar() { . . . };
void afinar() { . . .};
String tipoInstrumento() {}
}
class Guitarra extends InstrumentoViento {
String tipoInstrumento() {
return "Guitarra";
}
}
La clase InstrumentoViento implementa la interface, declarando los mtodos y
escribiendo el cdigo correspondiente. Una clase derivada puede tambin
redefinir si es necesario alguno de los mtodos de la interface.
Referencias a Interfaces
Es posible crear referencias a interfaces, pero las interfaces no pueden ser
instanciadas. Una referencia a una interface puede ser asignada a cualquier
objeto que implemente la interface. Por ejemplo:
InstrumentoMusical instrumento = new Guitarra();
instrumento.play();
System.out.prinln(instrumento.tipoInstrumento());
InstrumentoMusical i2 = new InstrumentoMusical(); //error.No se puede
instanciar
Extensin de interfaces
Las interfaces pueden extender otras interfaces y, a diferencia de las clases,
una interface puede extender ms de una interface. La sintaxis es:
interface nombre_interface extends nombre_interface , . . . {
tipo_retorno nombre_metodo ( lista_argumentos ) ;
...
}

Area de Transferencia de
Conocimientos

Pgina 27 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

Ejemplo.MYSQL

vehiculo.java
package javaapplication5;
abstract class vehiculo {
int velocidad;String cad;
public void mensaje(String cad)
{
System.out.println(cad);
}
}
arrancable.java
package javaapplication5;
interface arrancable {
boolean motorArrancado=false;
void arrancar();
void detenerMotor();
}
coche.java
package javaapplication5;

class coche extends vehiculo implements arrancable {


public void arrancar (){
velocidad=70;
System.out.println("Metodo coche.arrancar==>");
System.out.println("velocidad===>"+velocidad);
}
public void detenerMotor(){
velocidad=0;
System.out.println("Metodo coche.detener Motor DETENIDO ");
System.out.println("velocidad===>"+velocidad);
}
}

Area de Transferencia de
Conocimientos

Pgina 28 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

BombaAgua.java
MYSQL

package javaapplication5;

class BombaAgua extends vehiculo implements arrancable {


int capacidad;
public void arrancar (){
capacidad=500;
System.out.println("Metodo BombaAgua.arrancar");
System.out.println("capacidad de "+capacidad + "litros" );
}
public void detenerMotor(){
capacidad=0;
System.out.println("Metodo BombaAgua.detenerMotor DESCARGADO");
System.out.println("capacidad de "+capacidad + "litros" );
}}
ArrancarObjetos.java
package javaapplication5;
public class ArrancarObjetos {
public static void main(String[] args) {
arrancable motorcito;//motorcito es una variable de tipo arrancable
coche c=new coche(); //Objeto de tipo coche
c.mensaje("BIENVENIDOS A MI COCHE");//mensaje Herencia de la
superclase
motorcito=c; //Motorcito apunta a c
motorcito.arrancar(); //Se arrancar c
motorcito.detenerMotor();
BombaAgua ba=new BombaAgua(); //Objeto de tipo BombaAgua
ba.mensaje("BIENVENIDOS A LA BOMBA DE AGUA");//mensaje Herencia de
la superclase
motorcito=ba; //Motorcito apunta a ba
motorcito.arrancar(); //Se arranca la bomba de agua
motorcito.detenerMotor();
}
}
Area de Transferencia de
Conocimientos

Pgina 29 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

Agrupaciones de constantes
MYSQL

Dado que, por definicin, todos los datos miembros que se definen en una
interface son static y final, y dado que las interfaces no pueden instanciarse
resulta una buena herramienta para implantar grupos de constantes. Por
ejemplo:
public interface Meses {
int ENERO = 1 , FEBRERO = 2 . . . ;
String [] NOMBRES_MESES = { " " , "Enero" , "Febrero" , . . . };
}
Esto puede usarse simplemente:
System.out.println(Meses.NOMBRES_MESES[ENERO]);

Un ejemplo casi real


El ejemplo mostrado a continuacin es una simplificacin de como funciona
realmente la gestin de eventos en el sistema grfico de usuario soportado por
el API de Java (AWT o swing). Se han cambiado los nombres y se ha
simplificado para mostrar un caso real en que el uso de interfaces resuelve un
problema concreto.
Supongamos que tenemos una clase que representa un botn de accin en un
entorno grfico de usuario (el tpico botn de confirmacin de una accin o de
cancelacin). Esta clase pertenecer a una amplia jerarqua de clases y tendr
mecanismos complejos de definicin y uso que no son objeto del ejemplo. Sin
embargo podramos pensar que la clase Botn tiene miembros como los
siguientes.
class Boton extends . . . {
protected int x , y, ancho, alto; // posicion del boton
protected String texto; // texto del boton
Boton(. . .) {
...
}
void dibujar() { . . .}
public void asignarTexto(String t) { . . .}
public String obtenerTexto() { . . .)
Area de Transferencia de
Conocimientos

Pgina 30 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

...
MYSQL

Lo que aqu nos interesa es ver lo que sucede cuando el usuario, utilizando el
ratn pulsa sobre el botn. Supongamos que la clase Botn tiene un mtodo,
de nombre por ejemplo click(), que es invocado por el gestor de ventanas
cuando ha detectado que el usuario ha pulsado el botn del ratn sobre l. El
botn deber realizar alguna accin como dibujarse en posicin 'pulsado' (si
tiene efectos de tres dimensiones) y adems, probablemente, querr informar a
alguien de que se ha producido la accin del usuario. Es en este mecanismo de
'notificacin' donde entra el concepto de interface. Para ello definimos una
interface Oyente de la siguiente forma:
interface Oyente {
void botonPulsado(Boton b);
}
La interface define un nico mtodo botonPulsado. La idea es que este mtodo
sea invocado por la clase Botn cuando el usuario pulse el botn. Para que
esto sea posible en algn momento hay que notificar al Botn quien es el
Oyente que debe ser notificado. La clase Botn quedara:
class Boton extends . . . {
...
private Oyente oyente;
void registrarOyente(Oyente o) {
oyente = o;
}
void click() {
...
oyente.botonPulsado(this);
}
}
El mtodo registrarOyente sirve para que alguien pueda 'apuntarse' como
receptor de las acciones del usuario. Obsrvese que existe una referencia de
tipo Oyente. A Botn no le importa que clase va a recibir su notificacin.
Simplemente le importa que implante la interface Oyente para poder invocar el
Area de Transferencia de
Conocimientos

Pgina 31 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

mtodo botonPulsado. En el mtodo click se invoca este mtodo. En el ejemplo


MYSQL

se le pasa como parmetro una referencia al propio objeto Botn. En la


realidad lo que se pasa es un objeto 'Evento' con informacin detallada de lo
que ha ocurrido.
Con todo esto la clase que utiliza este mecanismo podra tener el siguiente
aspecto:
class miAplicacion extends . . . implements Oyente {
public static main(String [] args) {
new miAplicacion(. . .);
...
}
...
miAplicacion(. . .) {
...
Boton b = new Boton(. . .);
b.registrarOyente(this);
}

...
void botonPulsado(Boton x) {
// procesar click
...
}
}
Obsrvese en el mtodo registrarOyente que se pasa la referencia thisque en
el lado de la clase Botn es recogido como una referencia a la interface
Oyente. Esto es posible porque la clase miAplicacion implementa la interface
Oyente . En trminos clsicos de herencia miAplicacion ES un Oyente .

Area de Transferencia de
Conocimientos

Pgina 32 de 37

Mdulo 01

Desarrollador en Java

PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA

2.6

RESUMEN
MYSQL

En este captulo se comprendieron los conceptos de las metodologas


de la

programacin orientada a objetos su teora bsica, sus

conceptos bsicos, su forma de implementar, la comprensin con


ejemplos bsicos desde las herencias con las superclases y
subclases, el polimorfismo, las clases abstractas y la simulacin de
herencia mltiple con la clase interface.
ENLACES DE INTERES
http://www.jorgesanchez.net/programacion/manuales/Java.pdf
http://www.manual-java.com/
http://www.webtaller.com/manual-java/indice_manual_java.php
http://www.docstoc.com/docs/278164/MANUAL-DE-JAVA

Area de Transferencia de
Conocimientos

Pgina 33 de 37

Mdulo 01

Potrebbero piacerti anche