Universidad de Ibagué, Coruniversitaria.
Ingeniería de Sistemas

Paradigmas de Programación

Inicio

Generalidades

Ejercicios

Talleres

Proyecto

 

 Paradigma Orientado a Objetos

  La Programación Orientada a Objetos es un importante paradigma de programación que está ganando mucha  popularidad. En la POO, las estructuras de datos y los algoritmos se integran en unidades denominadas clases.

 En la notación UML, la forma de representar gráficamente una Clase es la siguiente: Un rectángulo dividido en tres secciones.

Notación gráfica de una Clase

Ejemplo de una Clase

 La tecnología orientada a objetos se define como una metodología de diseño de software que modela las características de objetos reales o abstractos por medio del uso de Clases y Objetos. Actualmente, la orientación a objetos es fundamental en el desarrollo de software, sin embargo, esta tecnología no es nueva; se originó en la década de los años sesenta. De hecho, SIMULA, uno de los lenguajes de programación orientados a objetos más antiguos, fue desarrollado en 1967.

 Las Clases
En el mundo real, normalmente tenemos muchos objetos del mismo tipo. Por ejemplo, nuestro teléfono celular es sólo uno de los miles que hay en el mundo. Si hablamos en términos de la programación orientada a objetos, podemos decir que nuestro objeto celular es una instancia de una clase conocida como "celular". Los celulares tienen características (marca, modelo, sistema operativo, pantalla, teclado, etc.) y comportamientos (hacer y recibir llamadas, enviar mensajes multimedia, transmisión de datos, etc.).

http://java.ciberaula.com/imagenes/ciberaula/es/area/java/articulo/java_too_tres.gif
Cuando se fabrican los celulares, los fabricantes aprovechan el hecho de que los celulares comparten esas características comunes y construyen modelos o plantillas comunes, para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo. A ese modelo o plantilla le llamamos CLASE, y a los equipos que sacamos a partir de ella la llamamos OBJETOS.
http://java.ciberaula.com/imagenes/ciberaula/es/area/java/articulo/java_too_cuatro.gif
Esto mismo se aplica a los objetos de software, se puede tener muchos objetos del mismo tipo y mismas características.
Definición teórica: La clase es un modelo o prototipo que define las variables y métodos comunes a todos los objetos de cierta clase. También se puede decir que una clase es una plantilla genérica para un conjunto de objetos de similares características.
Por otro lado, una instancia de una clase es otra forma de llamar a un objeto. En realidad no existe diferencia entre un objeto y una instancia. Sólo que el objeto es un término más general, pero los objetos y las instancias son ambas representación de una clase.


Definición Teórica: Una instancia es un objeto de una clase en particular.


Herencia
La herencia es uno de los conceptos más cruciales en la POO. La herencia básicamente consiste en que una clase puede heredar sus variables y métodos a varias subclases (la clase que hereda es llamada superclase o clase padre). Esto significa que una subclase, aparte de los atributos y métodos propios, tiene incorporados los atributos y métodos heredados de la superclase. De esta manera se crea una jerarquía de herencia.
Por ejemplo, imaginemos que estamos haciendo el análisis de un Sistema para una tienda que vende y repara equipos celulares.

http://java.ciberaula.com/imagenes/ciberaula/es/area/java/articulo/java_too_cinco.gif
En el gráfico vemos 2 Clases más que posiblemente necesitemos para crear nuestro Sistema. Esas 2 Clases nuevas se construirán a partir de la Clase Celular existente. De esa forma utilizamos el comportamiento de la SuperClase.
En general, podemos tener una gran jerarquía de Clases tal y como vemos en el siguiente gráfico:
http://java.ciberaula.com/imagenes/ciberaula/es/area/java/articulo/java_too_seis.gif

Envío de Mensajes

Un objeto es inútil si está aislado. El medio empleado para que un objeto interactúe con otro son los mensajes. Hablando en términos un poco más técnicos, los mensajes son invocaciones a los métodos de los objetos.

Puede descargar aquí un archivo ejecutable con los conceptos básicos de  Objetos.

 

Lenguaje Java

 Java es un poderoso lenguaje orientado a objetos, utilizado principalmente para implementación de aplicaciones basadas en internet e intranets, así como el software para dispositivos que se comunican entre redes (teléfonos celulares, paginadores y asistentes digitales personales).  Se buscaba un lenguaje independiente de la plataforma y Sun Microsystems desarrolló Java en 1995 para crear sistemas de software elegante, robusto y de fácil mantenimiento.

El lenguaje Java tiene una sintaxis similar a la de C++ (que a su vez tiene una sintaxis similar a la de C). Con ellos, cada uno ha tratado de ganarse a los adeptos del lenguaje precedente. Pero, para ser justos, hay que decir que Java, aunque tiene el mismo 'look', es mucho más simple que C++.

// Un primer programa en Java:
// Cómo mostrar texto en un cuadro de diálogo
// Paquetes de Java (Colección de clases o bibliotecas)
import javax.swing.JOptionPane; // El programa usa la clase JOptionPane
//  @author Viejo Gus
public class Ventana{

// El método main empieza la ejecución del programa en Java
   public static void main(String arg []){

     JOptionPane.showMessageDialog( null, "Hola, mis pupilos!\nBienvenidos al mundo Java!!");
     System.exit(0); // Terminar el programa con la ventana
   } // Fin del método main
} // Fin de la clase Ventana

_____________________________________

import javax.swing.JOptionPane;
/**
*
* @author Viejo Gus
*/
class Ventana{
   private String Nombre;
   public void set_Nombre(){
   Nombre=JOptionPane.showInputDialog( "Cuál es tu nombre?");
   }
   public void get_Nombre(){
      JOptionPane.showMessageDialog( null, "Buenos días, "+Nombre+"\nBienvenido(a) al mundo Java!!");
   }
}

public class Ventana_imp {
  public static void main(String arg []){
     Ventana V = new Ventana();
     V.set_Nombre();
     V.get_Nombre();
   }
}

_____________________________________

// Un programita para multiplicar enteros
import javax.swing.JOptionPane; // Importa la clase JOptionPane

public class Prodent{

// El método main empieza la ejecución del programa en Java
  public static void main(String arg []){
     String primernum, segundonum;
     int num1,num2,prod;
// Lee el primer número del usuario como una cadena
     primernum=JOptionPane.showInputDialog("Digite el primer entero: ");
// Lee el segundo número del usuario como una cadena
     segundonum=JOptionPane.showInputDialog("Digite el segundo entero: ");
// Convierte los números del tipo String a tipo int
     num1 = Integer.parseInt(primernum);
     num2 = Integer.parseInt(segundonum);
// Multiplica los números
     prod = num1 * num2;
// visualiza el producto en una ventana
     JOptionPane.showMessageDialog(null,"El producto es "+prod, "Resultados ",JOptionPane.PLAIN_MESSAGE);
     System.exit(0); // Terminar el programa con la ventana
} // Fin del método main
} // Fin de la clase Prodent

Modificar el programa anterior para permitir otras operaciones aritméticas (suma, división, división residuo, raiz cuadrada...), utilizando estructuras condicionales dentro de un ciclo indeterminado.

_____________________________________

import javax.swing.JOptionPane;
/**
*
* @author Viejo Gus
*/

class Operacion{
     private int resp;
     public void set_resp(){
          resp=Integer.parseInt(JOptionPane.showInputDialog("Cual es el resultado de (1+2*3-4) ? "));
     }
     public void get_resp(){
          if (this.resp == 3)
               JOptionPane.showMessageDialog(null,"Todo bien, todo bien!...");
          else
               JOptionPane.showMessageDialog(null,"Ojo! usted tiene deudas con Pitágoras...");
     }
}
public class Operacion_imp {

     public static void main(String arg[]){
              Operacion Op = new Operacion();
              Op.set_resp();
              Op.get_resp();
     }
}

_____________________________________

// Un programa para determinar el mayor y el menor entre tres numeros
import javax.swing.JOptionPane; // Importa la clase JOptionPane
/**
*
* @author Viejo Gus
*/
public class TresNum {

   public static void main(String arg []){
     String primernum, segundonum, tercernum;
     float num1,num2,num3,may,men;
     primernum=JOptionPane.showInputDialog("Digite el primer numero: ");
     segundonum=JOptionPane.showInputDialog("Digite el segundo: ");
     tercernum=JOptionPane.showInputDialog("Digite el tercero : ");
     // Convierte los numeros del tipo String a tipo float
     num1 = Float.parseFloat(primernum);
     num2 = Float.parseFloat(segundonum);
     num3 = Float.parseFloat(tercernum);
     // Determina el mayor
     if (num1 > num2)
        may = num1;
     else
        may = num2;
     may = (may > num3)? may : num3;
     // Determina el menor
     if (num1 < num2)
        men = num1;
     else
        men = num2;
     men = (men < num3)? men : num3;

     JOptionPane.showMessageDialog(null,"El numero mayor es "+may+"\nEl numero menor es "+men, "Resultados ",JOptionPane.PLAIN_MESSAGE);
     System.exit(0); // Terminar el programa con la ventana
   } // Fin del metodo main
}

_____________________________________

/** Programa para calcular un promedio de edad
* @ EdadProm.java
* ciclo while
*
* @author vGus
* @version 1.00 2008/10/10
*/
import javax.swing.JOptionPane;

public class EdadProm {
   public static void main(String arg[]){
       String ed,ned;
       int edad, ne=0, conte, acume=0;
       float prome;
       ned=JOptionPane.showInputDialog("Cuantas edades desea procesar? ");
       ne=Integer.parseInt(ned);
       JOptionPane.showMessageDialog(null,"Por favor, digite las "+ne+" edades");
       conte=1;
       while (conte <= ne){
            ed=JOptionPane.showInputDialog("Edad "+conte+"?");
            edad=Integer.parseInt(ed);
            acume=acume+edad; // Acumulador
            conte=conte+1; // Contador. Es equivalente a conte++
       }
       prome=acume/ne;
       JOptionPane.showMessageDialog(null,"La edad promedio es: "+prome);
     }
}

_____________________________________

// Empleado.java
// Creación y uso de un objeto de la clase Empleado
// El programa esta en modo consola. Codificarlo con cuadros de dialogo
import java.io.*;

public class Empleado{
     private String nombre;
     private float sueldo;

     public void setDatos(String nombre, float sueldo){
          this.nombre = nombre;
          this.sueldo = sueldo;
     }
     public void getDatos(){
          System.out.println("\nNombre del empleado: "+nombre);
          System.out.println("Sueldo : $"+sueldo);
     }

  public static void main(String arg[]) throws IOException{
     Empleado emp = new Empleado();
     String nombre;
     float sueldo;
     String sue;
     BufferedReader e;
     System.out.println("Por favor, digite los datos del empleado:");
     e = new BufferedReader(new InputStreamReader(System.in));
     System.out.print("\nNombre? ");
     nombre = e.readLine();
     System.out.print("Sueldo? $");
     sue = e.readLine();
     sueldo = java.lang.Float.parseFloat(sue);
     emp.setDatos(nombre,sueldo);
     emp.getDatos();
  }
}

<>  En Java se debe incluir la palabra reservada extends en la línea de la declaración de la clase derivada.  

// Herencialum.java
// Declaracion de clase base y clase derivada

import java.io.*;

class Persona{
protected String nombre, direc, fechanac;

public void setDatos(String nombre,String direc,String fechanac){
this.nombre = nombre;
this.direc = direc;
this.fechanac= fechanac;
}
public void getDatos(){
System.out.println("\nNombre : "+nombre);
System.out.println("Direccion : "+direc);
System.out.println("Fecha Nac.: "+fechanac);
}
}

// Alumno se deriva de Persona
class Alumno extends Persona{
private long codg;
private String prog;

public void setDatosAlum(long codg, String prog){
this.codg = codg;
this.prog = prog;
}
public void getDatosAlum(){
System.out.println("\nCodigo : "+codg);
System.out.println("Programa : "+prog);
}
}

public class Herencialum{

public static void main(String arg[]){

Alumno Alum = new Alumno();
Alum.setDatos("Laura Lucia Martinez H.","Varsovia II","27/11/1990");
Alum.setDatosAlum(512005207,"Comunicación Social");
Alum.getDatos();
Alum.getDatosAlum();
}
}
// Derivar la clase Profesor y leer por teclado varios objetos de Alumno y Profesor.

____________________________________________________________________________________________ 

  Ejercicios "amistosos"

____________________________________________________________________________________________

 Revisar todos los ejercicios amistosos desarrollados en C++ con el Paradigma Imperativo y convertirlos a programas Orientados a Objetos, codificándolos en lenguaje Java.

 

 



Inicio | Biografía | Cursos | Para pensar... | Para reflexionar... | Para reir | Enlaces

 
Profesor Gustavo Martínez Villalobos
Email: gustavo.martinez@unibague.edu.co
Facultad de Ingeniería de Sistemas, Coruniversitaria
Ibagué, Tolima, COLOMBIA