Vistas de página en total

lunes, 14 de septiembre de 2015

Ejemplos de Programación Orientada a Objetos: Herencia

Cuando hablamos de programación orientada a objetos, estamos hablando de muchas características y beneficios que tiene este tipo de programación. Cuando reutilizamos código nos beneficia pues nos hace mas productivos, no tenemos que volver a programar las mismas lineas de código cada vez que necesitamos realizar la misma acción: mostrar datos en pantalla por ejemplo, esta es la esencia de la POO.

En esta entrada nos enfocaremos en la herencia, este es un beneficio de la programación Orientada a Objetos (POO), que tiene como fin establecer las características (atributos) y métodos mas generales de acuerdo a un grupo de objetos que guardan similitudes, pero que al final tienen una que otra diferencia.

En este tema vamos a diferenciar los atributos generales y los particulares de cada miembro del grupo de objetos que guardan una estrecha relación de similitud. Para lo cual crearemos dos clases en JAVA, una super clase que es la que contendrá los atributos y métodos mas generales del grupo de objetos, y varias sub clases que heredaran los atributos y métodos de la super clase, pero que tendrán atributos y métodos que difieren de los otros miembros del grupo.

Como ejemplo crearemos las clases que se detallan en la siguiente jerarquía.
Como podemos ver en la jerarquía, la super clase se llama Equipo y esta contendrá los atributos (características) y métodos comunes para todo objeto del grupo, en el siguiente nivel se puede observar 4 subclases que heredaran de la super clase Equipo, estas subclases son: Audio, Vídeo, Electrodomésticos y Electrónica. Estas subclases a la vez son super clases, pues hay sub clases que heredan de ellas, en el tercer nivel de la jerarquía se encuentran las sub clases que heredaran los atributos y caracteristicas de las super clases Audio, Vídeo, Electrodomésticos y Electrónica.

A continuación crearemos las clases en JAVA y observaremos el resultado del uso de la HERENCIA:
La clase principal (super clase), tiene los siguientes atributos y métodos:

Atributos:

  • nombre
  • marca
  • modelo
  • serie
  • color
  • etc.
Métodos:
  • Encender
  • Apagar
  • etc.
Todas las clases en JAVA heredan de la super clase Object, aun cuando el programador omita hacer referencia a esta clase, en el ejemplo se hace referencia a esta clase pero no es necesario. 

NOTA: para que una clase herede de otra se hace uso de la palabra reservada extends.

Codigo de la super clase Equipo:


/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ejemploherencia;

/**
 *
 * @author Guillermo Antonio
 * En este caso se hace referencia 
 * a la superclase Object aunque no es necesario hacerlo
 */
public class Equipo extends Object{
    //definimos las variables y el tipo de variables que vamos a usar.
    String nombre;
    String marca;
    String modelo;
    String serie;
    String color;
    
    //creamos el constructor que recibe por parametro todos los datos

    public Equipo(String nombre, String marca, String modelo, String serie, String color) {
        this.nombre = nombre;
        this.marca = marca;
        this.modelo = modelo;
        this.serie = serie;
        this.color = color;
    }
//creamos los metodos de acceso para cada una de las variables
    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getMarca() {
        return marca;
    }

    public void setMarca(String marca) {
        this.marca = marca;
    }

    public String getModelo() {
        return modelo;
    }

    public void setModelo(String modelo) {
        this.modelo = modelo;
    }

    public String getSerie() {
        return serie;
    }

    public void setSerie(String serie) {
        this.serie = serie;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
    
    //creamos los metodos encender y apagar que son comunes para todos los equipos
    
    public void encender(Boolean enc){
    if (enc){
    System.out.print("Encendiendo Aparato \n");
    }
    }
    
    public void apagar(Boolean enc){
    if(!enc){
    System.out.print("Aparato Apagado \n");
    }
    }
    
}

Codigo de la Subclase Audio

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ejemploherencia;

/**
 *
 * @author Guillermo Antonio
 * heredamos de la clase equipo todos sus metodos 
 * y caracteristicas
 * 
 */
public class Audio extends Equipo{
//creamos el constructor de la clase audio
    //no es necesario definir las variables nombre,marca,modelo, etc
    //porque estas ya estan definidas en la superclase equipo
    //asi como tambien estan definidos sus metodos de acceso
    //solo agregaremos los atributos que tiene en particular esta subclase de equipo
    String formatoAudio;

    public Audio(String nombre, String marca, String modelo, String serie, String color, String formatoAudio) {
        super(nombre, marca, modelo, serie, color);
        //ponemos el valor de la variable formatoAudio que es la unica variable que no esta en la superclase equipo
        this.formatoAudio=formatoAudio;
    }
    //creamos los metodos de acceso para la variable que se creo en esta clase

    public String getFormatoAudio() {
        return formatoAudio;
    }

    public void setFormatoAudio(String formatoAudio) {
        this.formatoAudio = formatoAudio;
    }
    
    //se agregan los metodos unicos para esta clase
    public void reproducir(Boolean rpdr){
    if(rpdr){
    System.out.println("Reproduciendo");
    }else{
    System.out.println("Sin Reproducir");
    
    }
    }
    
}

Codigo de la sub clase AutoEstereo, esta hereda de la clase audio que a su vez hereda de la clase Equipo.

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ejemploherencia;

/**
 *
 * @author Guillermo Antonio
 * esta clase hereda de la superclase Audio, que 
 * a la vez ess una subclase que hereda de la superclase Equipo
 * esta clase va a tener los atributos y metodos tanto de la clase Equipo
 * asi como tambien de la clase audio
 * 
 */
public class AutoEstereo extends Audio{
    //definimos los atributos que son unicos para esta clase y no comparte con las otras subclases 
    //de la clase audio
    int potenciaSalida;
    String receptorMultimedia;
    
//este constructor recibe todos los valores y se los pasa a la super clase
    //por medio del metodo super.
    public AutoEstereo(String nombre, String marca, String modelo, String serie, String color, String formatoAudio,Integer potenciaSalida, String receptorMultimedia) {
        
        super(nombre, marca, modelo, serie, color, formatoAudio);
        
        this.potenciaSalida=potenciaSalida;
        this.receptorMultimedia=receptorMultimedia;
    }
    //creamos los metodos de acceso para los atributos definidos en esta clase

    public int getPotenciaSalida() {
        return potenciaSalida;
    }

    public void setPotenciaSalida(int potenciaSalida) {
        this.potenciaSalida = potenciaSalida;
    }

    public String getReceptorMultimedia() {
        return receptorMultimedia;
    }

    public void setReceptorMultimedia(String receptorMultimedia) {
        this.receptorMultimedia = receptorMultimedia;
    }
    //metodo que devuelve un String con todos los datos del autoEstereo
    public String mostrarDatos(){
    return "Datos: \n Nombre:"+this.nombre+"\n Modelo: "+this.modelo+" \n Marca: "+this.marca+"\n Serie: \t"+this.serie;
    }
    
}


Codigo de la clase principal donde se encuentra el método main.


/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ejemploherencia;

import javax.swing.JOptionPane;

/**
 *
 * @author Guillermo Antonio
 */
public class EjemploHerencia {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        //en esta clase vamos a crear una instancia de la clase AutoEstereo
        //aunque la clase Auto Estereo no tenga el codigo para poner nombre, marca, etc
        //se tiene acceso a estos atributos y metodos a traves de la instancia de AutoEstereo
        //porque esta hereda de las clases Equipo y Audio
        
        AutoEstereo estereo=new AutoEstereo("Reproductor MP3", "Sony", "RXY76Y", "XZ345T", "negro", "MP3", 55, "4 canales");
        
        //a continuacion mostramos los datos en un mensaje
        
        JOptionPane.showMessageDialog(null, estereo.mostrarDatos());
        
        //despues de mostrar los datos del reproductor.. llamamos el metodo encender
        estereo.encender(true);
        //despues de encenderlo lo apagamos
        estereo.apagar(false);
    }
    
}

Aun faltan algunas clases, les queda a ustedes como tarea desarrollarlas y tomar en cuenta los aspectos que se han explicado en esta entrada.



NOTA: a continuación adjunto el proyecto en un archivo comprimido .rar, espero les sea útil este ejemplo. Para comprender y manejar este y otros temas de POO, deben practicar.


Saludos.




No hay comentarios: