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.).

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.

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.

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:

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.

|