PROGRAMACIÓN ORIENTADA A OBJETOS
ENCAPSULAMIENTO
Programación
orientada a objetos, diseño de clases y creación de objetos.
Programación
orientada a objetos
La programación orientada a objetos es un nuevo enfoque de
programación ya aceptado universalmente por la comunidad de programadores. Esta
aceptación se sustenta en los múltiples beneficios que trae y los resume en sus
siguientes características principales:
Abstracción, a través de la cual definimos y establecemos el
contenido de una clase.
Encapsulamiento, a través de la cual establecemos los niveles de
acceso a los componentes de una clase, siendo el acceso privado obligatorio
para todos los atributos de la clase.
Herencia, a través de la cual se puede extender o agregar y/o
modificar o reutilizar la funcionalidad de una clase existente, llamada padre,
en otra clase llamada hija para evitar la redundancia en el código ya
desarrollado. Esta característica resume la frase “aprovecha lo que ya está
hecho”.
Polimorfismo, a través de la cual se puede programar lo genérico
de algún proceso sin saber el detalle de cómo se va a llevar a cabo. Por
ejemplo, podemos programar la secuencia genérica de un proceso de cálculo sin
saber aún la forma del cálculo que se hará. Esta característica se orienta a la
construcción de plantillas de uso general para que, a través de la herencia
esas plantillas se puedan particularizar.
Diseño de clases
Una
clase, en la práctica es un nuevo tipo de dato particularizado que se compone
de: nombre, atributos, constructores y métodos. Los atributos representan los
datos y/o características de la clase, los constructores permiten crear objetos
de la clase y los métodos representan la funcionalidad de la clase que será
utilizada por los objetos.
Nombre
Atributos
|
Constructores
|
Métodos
|
Generalmente los atributos son de
acceso privado y los métodos son de acceso público.
Los constructores tienen el mismo
nombre de la clase. Cuando una clase no tiene un constructor explícito, se debe
considerar uno implícito, por defecto vacío.
Sintaxis general:
public class
Nombre{
// Atributos privados
// Constructores públicos
// Métodos de acceso y modificación
públicos y/o privados
}
Creación de
objetos
Un objeto, en la práctica es una
variable cuyo tipo de dato es una clase. Cuando el objeto es creado, obtiene
una copia de los atributos de la clase para uso exclusivo de dicho objeto. Por
ésta razón, todos los objetos de una clase tendrán los mismos atributos pero
cada uno con valores diferentes.
Sintaxis general:
Clase objeto; // declaración del objeto
Objeto = new Clase (); // creación del
objeto, invoca al constructor
Asignación de objetos
Cuando
un objeto es asignado a otro, éste guarda la dirección de memoria del objeto
existente. Luego, el acceso a los datos puede hacerse por cualquiera de los
objetos.
Sintaxis general: Clase a, b; //
declaración de 2 objetos
a = new Clase (); // crea un objeto con sus
propios datos/atributos
b = a; // asignación del objeto a en
el objeto b.
Luego, tanto a como b pueden
utilizar la misma funcionalidad de la clase y referirse a los mismos datos
creados para el objeto a.
Ejemplo 1
Diseñe una
clase de nombre Producto con los siguientes atributos privados: código
(cadena), descripción (cadena), precio (real) y con los métodos públicos
get/set. Considere un constructor implícito.
public
class Producto {
//
atributos privados
prívate
String codigo, descripcion;
prívate double precio;
// constructor
public Producto(String codigo, String
descripcion, double precio){
this.codigo=codigo;
this.descripcion=descripcion;
this.precio=precio;
// métodos get
public String getCodigo(){return codigo;}
public String getDescripcion(){return descripcion;}
public double getPrecio(){ return precio;}
// métodos set
public
void setCodigo(String c){ codigo =c; }
public void setDescripcion(String d){ descripcion=d; }
public void
setPrecio(double p){ precio=p; }
}
}
Cada vez que
hace clic en el botón Nuevo debe crear un objeto de la clase Producto y
mostrar la información de sus atributos. Cada vez que hace clic en el botón Borrar
debe borrar la información del área de texto, de las cajas de texto y
enfocar el ingreso en la caja de texto del código.
PanelPrincipal con distribución BorderLayout.
En el norte colocamos otro panel (jPanel1) con
distribución BoxLayout donde colocamos las etiquetas y las cajas de
texto.
En el sur colocamos otro panel (jPanel2) con
distribución FlowLayout donde colocamos los botones.
En el centro colocamos un área de texto con su propiedad
editable desmarcada.
Doble clic en el botón Nuevo para programar su acción:
private void
btnNuevoActionPerformed(java.awt.event.ActionEvent evt) {
// crea un objeto nuevo de la clase Producto
Producto nuevo = new Producto();
// lee los valores de la GUI y los coloca como atributos del nuevo
objeto
nuevo.setCodigo(leeCodigo());
nuevo.setDescripcion(leeDescripcion());
nuevo.setPrecio(leePrecio());
// muestra la información del nuevo objeto
lista(nuevo); }
// métodos que leen los datos de la GUI
private String leeCodigo(){return
txtCodigo.getText();}
private String leeDescripcion(){return
txtDescripcion.getText();}
private double leePrecio(){return
Double.parseDouble(txtPrecio.getText());}
// método que muestra la información de un objeto de la clase
Producto
private void
lista(Producto p){
imprime("Codigo\t:"+p.getCodigo());
imprime("Descripcion\t:"+p.getDescripcion());
imprime("Precio\t:"+p.getPrecio());
}
//método que muestra una
cadena en el objeto de salida de la GUI
private void imprime(String s){
txtSalida.append(s+"\n"); }
Observe y analice la llamada al constructor
desarrollado. Regresamos al diseño y hacemos doble clic en el
botón Borrar
para programar su acción:
private void
btnBorrarActionPerformed(java.awt.event.ActionEvent evt) {
txtSalida.setText("");
txtCodigo.setText("");
txtDescripcion.setText("");
txtPrecio.setText("");
txtCodigo.requestFocus();
}
Desarrolle la clase de aplicación de
nombre Principal en un JFrame. Coloque distribución BorderLayout,
vaya a la ficha Source y escriba lo que está en negrita:
public class Principal
extends javax.swing.JFrame {
public
Principal() {
initComponents();
add(new
PanelPrincipal());
setSize(600,200);
}
Ejecute su
aplicación.
0 comentarios:
Publicar un comentario