POO

Aquí se publicarán algunos ejemplos de POO



Ejemplo de Herencia simple y sin clases abstractas

//////////CLASE RECTANGULO
package poo_herencia1;
public class Rectangulo {
    private double largo;
    private double ancho;
    public Rectangulo(double largo, double ancho){
      this.largo = largo; 
      this.ancho = ancho;
    }
    public double area(){
        double res = ancho * largo;
        return res;
    }
    public String soy(){
        return "Soy de la clase RECTANGULO";
    }
}

/////CLASE TERRENO
package poo_herencia1;
public class Terreno extends Rectangulo{
    private double pm2;
    public Terreno(double largo, double ancho, double pm2){
       super(largo,ancho); 
       this.pm2 = pm2;
    }
    public double costoTerreno(){
        return super.area() * pm2;
    }
 
    @Override
     public String soy(){
        return "Soy de la clase TERRENO";
    }
 
}

////CLASE PRINCIPAL
package poo_herencia1;
public class Principal {
    public static void main(String[] args) {
     Terreno t = new Terreno(20, 10, 2000);
     System.out.println("Precio:" + t.costoTerreno()     );
     System.out.println("Area: "  + t.area()  );
   
     // ARREGLO DE LA CLASE PADRE   
     Rectangulo arr[] = new Rectangulo[3];
   
     arr[0] = new Rectangulo(20,15);
     arr[1] = new Terreno(15, 5, 100);
     arr[2] = new Rectangulo(10,5);           
     ////POLIMORFISMO
       for (int i=0; i<3; i++){
          System.out.println("..."+arr[i].soy() );
       }
    }
}

Ejemplo de herencia con clase abstracta

//// CLASE ABSTRACTA FIGURA
package poo_herenciaabstractatics;
public abstract class Figura {
    public abstract double area();
    public abstract String soy();
}

/// CLASE CIRCULO
package poo_herenciaabstractatics;
public class Circulo extends Figura{
    private double radio;
    public Circulo(double ra){
        this.radio = ra;
    }
 
    @Override
    public double area(){
        return Math.PI * radio * radio;
    }

    @Override
    public String soy() {
        return "Soy un Círculo...";
    }
}

///CLASE ROMBO
package poo_herenciaabstractatics;
public class Rombo extends Figura {
    private double dMenor;
    private double dMayor;
    public Rombo(double diagMenor, double diagMayor){
        this.dMenor = diagMenor;
        this.dMayor = diagMayor;
    }

    @Override
    public double area() {
        return (dMayor * dMenor)/2;
    }

    @Override
    public String soy() {
        return "Soy rombo...";
    }
}

///CLASE PRINCIPAL
package poo_herenciaabstractatics;
public class Principal {

   public static void main(String[] args) {

      Circulo c = new Circulo(5.5);
      Rombo   r = new Rombo(10,5);
   
      Figura arreglo[]= new Figura[2];
      arreglo[0] = c;
      arreglo[1] = r;
               ///POLIMORFISMO
      for(int i=0; i<2;i++){
        System.out.println("Soy:"+ arreglo[i].soy() );       
        System.out.println("Area:"+arreglo[i].area() );
      }
    }

}


Ejemplo de archivos de texto sin buffer


///CLASE MANEJADOR ARCHIVO
package poo_archivostexto;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class ManejadorArchivo {
    private String archivo;
    public ManejadorArchivo(String archivo) {
        this.archivo = archivo;
    }
    public void añadir(String frase ){
       File objFile  = new File(archivo);
       try {                            // true es para añadir
          FileWriter escritor = new FileWriter(objFile,true);
            for(int i = 0; i<frase.length(); i++){
                   escritor.write(frase.charAt(i));
            }
            escritor.write('\n');
            escritor.close();
        } catch (FileNotFoundException ex) {
            System.out.println("Archivo no se pudo crear");
        } catch (IOException ioe){
            System.out.println("Error de escritura");
        }
    }
 
    public void leer(){
      File objFile  = new File(archivo);
      try {
            FileReader lector = new FileReader(objFile);
            int numcar = lector.read();
            while(numcar!=-1){
                   char car = (char) numcar;
                   System.out.print(car);
                   numcar = lector.read();
            }
            lector.close();
        } catch (FileNotFoundException ex) {
            System.out.println("Archivo inexistente");
        } catch (IOException ioe){
            System.out.println("Error de lectura");
        }
    }
}


////CLASE PRINCIPAL


package poo_archivostexto;

public class POO_archivosTexto {
    public static void main(String[] args) {
        ManejadorArchivo m =
                new ManejadorArchivo("C:\\temporal\\texto.txt");
     //LECTURA
        m.leer();
     //AÑADIR LINEAS 
        System.out.println("Añadiendo");
        m.añadir("se acerca el fin de semestre");
    }
}

Ejemplo de archivos de texto CON BUFFER


///CLASE MANEJADORA
package poo_archivostextobuffered;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Manejador {
     private String archivo;
    public Manejador(String archivo) {
        this.archivo = archivo;
    }
    public void añadir(String frase ){
       File objFile  = new File(archivo);
       try {                    // true es para añadir
          FileWriter escritor = new FileWriter(objFile,true);
          BufferedWriter escritorRapido =
                   new BufferedWriter(escritor);
          escritorRapido.write(frase);
          escritorRapido.newLine();
          escritorRapido.flush();
          escritorRapido.close();
        } catch (FileNotFoundException ex) {
            System.out.println("Archivo no se pudo crear");
        } catch (IOException ioe){
            System.out.println("Error de escritura");
        }
    }
 
    public void crear(String frase ){
       File objFile  = new File(archivo);
       try {                     
          FileWriter escritor = new FileWriter(objFile);
          BufferedWriter escritorRapido =
                  new BufferedWriter(escritor);
          escritorRapido.write(frase);
          escritorRapido.newLine();
          escritorRapido.flush();
          escritorRapido.close();
        } catch (FileNotFoundException ex) {
            System.out.println("Archivo no se pudo crear");
        } catch (IOException ioe){
            System.out.println("Error de escritura");
        }
    }
 
    public String leer(){
      File objFile  = new File(archivo);
      String respuesta="";
      try {
            FileReader lector = new FileReader(objFile);
            BufferedReader lectorRapido = new BufferedReader(lector);
             String linea=lectorRapido.readLine();
            while(  linea!=null ){
                   respuesta+=linea+"\n";
                   linea=lectorRapido.readLine();
            }
            lectorRapido.close();
        } catch (FileNotFoundException ex) {
            System.out.println("Archivo inexistente");
        } catch (IOException ioe){
            System.out.println("Error de lectura");
        }
      return respuesta;
    }
   
}


/// CLASE PRINCIPAL, se incluye uso de StringTokenizer para manipular campos de registro

package poo_archivostextobuffered;

import static java.lang.System.exit;
import java.util.Scanner;
import java.util.StringTokenizer;

public class Principal {

    public static void main(String[] args) {
        Manejador manager = new Manejador("C:\\temporal\\texto.txt");
        Scanner scanner = new Scanner(System.in);
     
        for(;;){
            System.out.println("\n1.-Crear archivo");
            System.out.println("2.-Leer archivo");
            System.out.println("3.-Añadir al archivo");
            System.out.println("4.-Salir");
            System.out.print("Elija---> ");
            int opcion = Integer.parseInt(scanner.nextLine());
            if(opcion>=1 && opcion<=3){
           
                switch(opcion){
                    case 1:  ///CREAR
                           System.out.println("Teclea nombre: ");
                           String nombrec = scanner.nextLine();
                         
                           System.out.println("Teclea NoControl: ");
                           String ncc = scanner.nextLine();
                         
                           System.out.println("Teclea Edad: ");
                           String edadc = scanner.nextLine();
                     
                           manager.crear(nombrec+"|"+ncc+"|"+edadc ); break;
                    case 2: /// LEER
                            String r=manager.leer();
                            StringTokenizer str = new StringTokenizer(r, "\n");
                            while( str.hasMoreTokens()==true )  {
                               String f=str.nextToken();

                               StringTokenizer str2 = new StringTokenizer(f, "|");
                             
                               String campoNombre= str2.nextToken();
                               String campoNc    = str2.nextToken();
                               String campoEdad  = str2.nextToken();
                             
                               System.out.println("Nombre:" +campoNombre );
                               System.out.println("NC    :" +campoNc );
                               System.out.println("Edad  :" +campoEdad );
                            }
                            break;
                    case 3: // AÑADIR
                          System.out.println("Teclea nombre: ");
                           String nombre = scanner.nextLine();
                         
                           System.out.println("Teclea NoControl: ");
                           String nc = scanner.nextLine();
                         
                           System.out.println("Teclea Edad: ");
                           String edad = scanner.nextLine();
                     
                     
                           manager.añadir(nombre+"|"+nc+"|"+edad ); break;
                }
            }
            else
                exit(0);
        }
    }
 
}

Ejemplo de archivos binarios para SERIALIZAR OBJETOS


////CLASE ESTUDIANTES serializable

package poo_archivosobjetos;
import java.io.Serializable;
public class Estudiante implements Serializable {
    private int numeroDeControl;
    private String nombre;
    public Estudiante(int nc, String nombre){
        this.numeroDeControl =nc;
        this.nombre = nombre;
    }
    @Override
    public String toString (){
        return "soy " + nombre + " con número de control "
                + numeroDeControl;
    }
    public int getNumeroDeControl() {
        return numeroDeControl;
    }
    public void setNumeroDeControl(int numeroDeControl) {
        this.numeroDeControl = numeroDeControl;
    }
    public String getNombre() {
        return nombre;
    }
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
 }

//// CLASE MANEJADOR
package poo_archivosobjetos;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;


public class ManejadorObjetos {
    private String archivo;
    public ManejadorObjetos(String archivo) {
        this.archivo = archivo;
    }
    public Estudiante [] leer(){
       Estudiante estudiantes[]=null ;
       try{
         File objFile  = new File(archivo);
         FileInputStream in = new FileInputStream(objFile);
         ObjectInputStream lectorobj = new ObjectInputStream(in);
         estudiantes = (Estudiante []) lectorobj.readObject();
         lectorobj.close();
       }               
        catch (ClassNotFoundException ex) {
            System.out.println("Clase no hallada");}
         catch(IOException e){   
             System.out.println("Falla de entrada salida");
        }
       return estudiantes;
    }
   
     public void escribir(){
        Estudiante estudiantes[] = { new Estudiante(123,"juan"),
                                    new Estudiante(124,"nacho"), 
                                    new Estudiante(123,"ana"),
                                    new Estudiante(888,"Gualo"),
                                    };
      try{
          File objFile  = new File(archivo);
          FileOutputStream ou = new FileOutputStream(objFile);
          ObjectOutputStream escritorobj =
                        new ObjectOutputStream(ou);
          escritorobj.writeObject(estudiantes);
          escritorobj.flush();
          escritorobj.close();
        }
         catch(IOException e){   
             System.out.println("Falla de entrada salida");
        }
     }
}


////CLASE PRINCIPAL

package poo_archivosobjetos;

public class Principal {
    public static void main(String[] args) {
        ManejadorObjetos objetos =
              new ManejadorObjetos("C:\\temporal\\texto.dat");
       objetos.escribir();
        Estudiante arr []= objetos.leer();
        for(int i=0;i<arr.length; i++){
            System.out.println( arr[i].toString()   );
        }
    }
}

2do. Ejemplo de archivos binarios, persistencia de objetos con agregación.


// CLASE DOMICILIO

public class Domicilio   implements Serializable{
    private String calle;
    private int noExt;
    private String colonia;
    private String ciudad;
    private String municipio;
    private String estado;
    private String pais;

    public String getCalle() {
        return calle;
    }

    public void setCalle(String calle) {
        this.calle = calle;
    }

    public int getNoExt() {
        return noExt;
    }

    public void setNoExt(int noExt) {
        this.noExt = noExt;
    }

    public String getColonia() {
        return colonia;
    }

    public void setColonia(String colonia) {
        this.colonia = colonia;
    }

    public String getCiudad() {
        return ciudad;
    }

    public void setCiudad(String ciudad) {
        this.ciudad = ciudad;
    }

    public String getMunicipio() {
        return municipio;
    }

    public void setMunicipio(String municipio) {
        this.municipio = municipio;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public String getPais() {
        return pais;
    }

    public void setPais(String pais) {
        this.pais = pais;
    }
    
}

// CLASE ESTUDIANTE

public class Estudiante implements Serializable {
    private int numeroDeControl;
    private String nombre;
    private Domicilio domicilios [] = new Domicilio[2];
    public Estudiante(int nc, String nombre){
        this.numeroDeControl =nc;
        this.nombre = nombre;
        Domicilio d1 = new Domicilio();
           d1.setCalle("Morelos");
           d1.setNoExt(123);
           d1.setColonia("Centro");
           d1.setCiudad("Morelia");
           d1.setMunicipio("Morelia");
           d1.setEstado("Michoacán");
           d1.setPais("México");
        Domicilio d2 = new Domicilio();
           d2.setCalle("Madero");
           d2.setNoExt(321);
           d2.setColonia("Vasco");
           d2.setCiudad("Morelia");
           d2.setMunicipio("Morelia");
           d2.setEstado("Michoacán");
           d2.setPais("México");
        domicilios[0] = d1;
        domicilios[1] = d2;
        
    }
    @Override
    public String toString (){
        Domicilio d1 = this.domicilios[0];
        Domicilio d2 = this.domicilios[1];
        return "Soy " + nombre + " con no. control "
                + numeroDeControl + "\n" 
      +"Domicilio1: " + d1.getCalle()+" " + d1.getNoExt() + "\n"
      +"Domicilio2: " + d2.getCalle()+" " + d2.getNoExt() + "\n";
    }
    public int getNumeroDeControl() {
        return numeroDeControl;
    }
    public void setNumeroDeControl(int numeroDeControl) {
        this.numeroDeControl = numeroDeControl;
    }
    public String getNombre() {
        return nombre;
    }
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public Domicilio[] getDomicilios() {
        return domicilios;
    }
 }

//CLASE MANEJADOR DE OBJETOS

public class ManejadorObjetos {
    private String archivo;
    private Estudiante estudiantes[] = null;
    private int cima;
   
    public ManejadorObjetos(String archivo) {
        this.archivo = archivo;
        estudiantes = new Estudiante[100];
        cima = 0;
    }
    
    public void agregarEstudiante(int nc, String nombre){
        estudiantes[cima]=new Estudiante(nc, nombre);
        cima++;
    }
    
    public void leer(){
       try{ 
         File objFile  = new File(archivo);
         FileInputStream in = new FileInputStream(objFile);
         ObjectInputStream lectorobj = new ObjectInputStream(in);
         estudiantes = (Estudiante []) lectorobj.readObject();
         lectorobj.close();
         for (int i=0; estudiantes[i]!=null; i++ ){
            cima++;  
         }
       }                
        catch (ClassNotFoundException ex) {
            System.out.println("Clase no hallada");}
         catch(IOException e){    
             System.out.println("Falla de entrada salida");
        }
      
      
      
      
    }
     public void crear(){
          estudiantes[0]=new Estudiante(1, "Nombre default");
      try{
          File objFile  = new File(archivo);
          FileOutputStream ou = new FileOutputStream(objFile);
          ObjectOutputStream escritorobj = 
                        new ObjectOutputStream(ou);
          escritorobj.writeObject(estudiantes);
          escritorobj.flush();
          escritorobj.close();
        } 
         catch(IOException e){    
             System.out.println("Falla de entrada salida");
        }
     }
     public String consultar(int numControl){
         String respuesta =" No se ha encontrado ";
         boolean encontrado = false;
         for(int i=0;i<estudiantes.length; i++){
             if(estudiantes[i]!=null)  {
                  if(estudiantes[i].getNumeroDeControl() == numControl)  {
                    respuesta=estudiantes[i].toString();
                    encontrado = true;
                      break;
                  }
             }
         }
         return respuesta;
     }
     
     public void grabar(){
      try{
          File objFile  = new File(archivo);
          FileOutputStream ou = new FileOutputStream(objFile);
          ObjectOutputStream escritorobj = 
                        new ObjectOutputStream(ou);
          escritorobj.writeObject(estudiantes);
          escritorobj.flush();
          escritorobj.close();
        } 
         catch(IOException e){    
             System.out.println("Falla de entrada salida");
        }
     }
}

//CLASE PRINCIPAL

public class Principal {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException  {
        // TODO code application logic here
     ManejadorObjetos objetos =
              new ManejadorObjetos("C:\\temporal\\texto.dat");
       Scanner scanner = new Scanner(System.in);
       boolean continuar=true;
        
        while(continuar==true){
          System.out.println("\n1.-Crear un archivo con un registro inicial");
            System.out.println("2.-Leer archivo de disco");
            System.out.println("3.-Agregar Estudiante");
            System.out.println("4.-Consultar Estudiante");
            System.out.println("5.-Modificar Estudiante NO IMP");
            System.out.println("6.-Eliminar Estudiante NO IMP");
            System.out.println("7.-Grabar a disco");
            System.out.println("8.-Salir");
            System.out.print("Elija---> ");
            int opcion = Integer.parseInt(scanner.nextLine()); 
            opcion=opcion*1;
            switch(opcion){
                case 1: objetos.crear(); break;
                case 2: objetos.leer(); break;
                case 3: 
                       InputStreamReader inKey=new InputStreamReader(System.in);
                       BufferedReader lector = new BufferedReader(inKey); 
                       System.out.print("Teclea número de contrl:");
                       int noCtrl;
                       noCtrl = Integer.parseInt(lector.readLine());
                       System.out.print("Teclea nombre:");
                       String nombre=lector.readLine();
                       objetos.agregarEstudiante(noCtrl, nombre);
                       break;

                case 4: System.out.println("No control a consultar: ");
                        String nc = scanner.nextLine();
                        int nc_a_buscar = Integer.parseInt(nc);
                        String resp=objetos.consultar(nc_a_buscar);
                        System.out.println("Respuesta: "+resp); 
                case 7: objetos.grabar(); break;
                case 8: continuar=false; break;
            }
            
        }
    }
}