Académique Documents
Professionnel Documents
Culture Documents
PROGRAMA A DISTANCIA:
DESARROLLADOR EN JAVA.
Area de Transferencia de
Conocimientos
Pgina 1 de 37
Mdulo 01
Desarrollador en Java
Introduccin:
y disear programas
aplicando la
Area de Transferencia de
Conocimientos
Pgina 2 de 37
Mdulo 01
Desarrollador en Java
INDICE
MYSQL
CAPITULO 2:
Principios fundamentales sobre Programacin Orientada a Objetos
2.0
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
CAPITULO 2:
Programacin con objetos
Objetivos:
Al finalizar este capitulo
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.
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
Area de Transferencia de
Conocimientos
Pgina 1 de 37
Mdulo 01
Desarrollador en Java
PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA
MYSQL
Area de Transferencia de
Conocimientos
Pgina 2 de 37
Mdulo 01
Desarrollador en Java
PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA
Pgina 3 de 37
Mdulo 01
Desarrollador en Java
PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA
package herencia;
MYSQL
Su diagrama de clases
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
"
Pgina 6 de 37
Mdulo 01
Desarrollador en Java
PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA
2.2
Sobrecarga de mtodos
MYSQL
Area de Transferencia de
Conocimientos
Pgina 7 de 37
Mdulo 01
Desarrollador en Java
PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA
class Animal { }
class Caballo extends Animal{ }
class Animales{
public void MetodoSobrecargado(Animal a){
Area de Transferencia de
Conocimientos
Pgina 8 de 37
Mdulo 01
Desarrollador en Java
PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA
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
double base,largo,altura,area,perimetro,volumen,dato;
String linea;
public void Geometria(double x, double y){
area=x*y;
}
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();
}
}
Area de Transferencia de
Conocimientos
Pgina 11 de 37
Mdulo 01
Desarrollador en Java
PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA
Ejemplo5
MYSQL
Area de Transferencia de
Conocimientos
Pgina 12 de 37
Mdulo 01
Desarrollador en Java
PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA
Ahora que hemos visto ambas formas de reescribir mtodos, revisemos las
reglas y diferencias entre ambos tipos de reescritura:
Area de Transferencia de
Conocimientos
Pgina 13 de 37
Mdulo 01
Desarrollador en Java
PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA
2.3
Polimorfismo
MYSQL
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() {
Aves.java
Pgina 15 de 37
Mdulo 01
Desarrollador en Java
PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA
}
}
Polimorfismo.java
Pgina 16 de 37
Mdulo 01
Desarrollador en Java
PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA
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
Area de Transferencia de
Conocimientos
Pgina 18 de 37
Mdulo 01
Desarrollador en Java
PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA
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;
Area de Transferencia de
Conocimientos
Pgina 20 de 37
Mdulo 01
Desarrollador en Java
PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA
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
MYSQL
Pgina 23 de 37
Mdulo 01
Desarrollador en Java
PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA
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
MYSQL
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
Area de Transferencia de
Conocimientos
Pgina 26 de 37
Mdulo 01
Desarrollador en Java
PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA
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;
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;
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]);
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
...
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
Area de Transferencia de
Conocimientos
Pgina 33 de 37
Mdulo 01