Programación orientada a objetos



Descargar 149,28 Kb.
Fecha de conversión20.05.2017
Tamaño149,28 Kb.
PROGRAMACIÓN ORIENTADA A OBJETOS

La programación orientada a objetos (POO) es un modelo de programación que utiliza objetos, ligados mediante mensajes, para la solución de problemas.

Como ejemplo, consideremos una entidad bancaria. En ella identificamos entidades que son cuentas: cuenta del cliente 1, cuenta del cliente 2, etc. Una cuenta puede verse como un objeto que tiene unos atributos, nombre, número de cuenta y saldo, y un conjunto de métodos como IngresarDinero, Reti­rarDinero, AbonarIntereses, SaldoActual, Transferencia etc. Realizamos una transferencia mediante la sentencia:

cuenta0l.Transferencia(cuenta02);



Transferencia es un mensaje que el objeto cuenta02 envía al objeto cuenta01, solicitando le sea hecha una transferencia, siendo la respuesta a tal mensaje la eje­cución del método Transferencia.

MECANISMOS BÁSICOS DE LA POO


Los mecanismos básicos de la programación orientada a objetos son: objetos, mensajes, métodos y clases.

Objetos


Un programa orientado a objetos se compone solamente de objetos. Un objeto es una entidad que tiene unas propiedades parti­culares (atributos) y unas formas de operar sobre ellas, los métodos.

Por ejemplo, una ventana de una aplicación Windows es un objeto. El color de fondo, la anchura, la altura, etc. son sus atributos. Las rutinas, que permiten maximizar la ventana, minimizarla, etc. son sus métodos.



Mensajes

Cuando se ejecuta un programa orientado a objetos, los objetos reciben, interpretan y responden a mensajes de otros objetos. Un mensaje está asociado con un método, de tal forma que cuando un objeto recibe un mensaje la respuesta a ese mensaje es ejecutar el mé­todo asociado.

Por ejemplo, cuando un usuario quiere maximizar una ventana de una aplica­ción Windows, lo que hace simplemente es pulsar el botón de la misma que reali­za esa acción. Eso, provoca que Windows envíe un mensaje a la ventana para indicar que tiene que maximizarse. Como respuesta a este mensaje se ejecutará el método programado para ese fin.

Métodos

Un método se implementa en una clase de objetos, y determina cómo tiene que actuar el objeto cuando recibe el mensaje vinculado con ese método. A su vez, un método puede también enviar mensajes a otros objetos solicitando una acción o información.



En adición, las propiedades (atributos) definidas en la clase permitirán alma­cenar información para dicho objeto.

Cuando se diseña una clase de objetos, la estructura más interna del objeto se oculta a los usuarios que lo vayan a utilizar, manteniendo como única conexión con el exterior, los mensajes. Esto es, los datos que están dentro de un objeto so­lamente podrán ser manipulados por los métodos asociados al propio objeto.

La ejecución de un programa orientado a objetos realiza fundamentalmente tres cosas:


  1. Crea los objetos necesarios.

  2. Los mensajes enviados a unos y a otros objetos dan lugar a que se procese internamente la información.

  3. Finalmente, cuando los objetos no son necesarios, son borrados, liberándose la memoria ocupada por los mismos.

Clases

Una clase es un tipo de objetos definido por el usuario. Una clase es la generalización de un tipo específico de objetos.


Un objeto de una determinada clase se crea en el momento en que se define una variable de dicha clase. Por ejemplo, la siguiente línea declara el objeto cliente01 de la clase o tipo Cuenta.

Cuenta clienteO1 = new Cuenta(); // nueva cuenta

Cuando escribe un programa utilizando un lenguaje orientado a objetos, no se definen objetos, se definen clases de objetos, donde una clase se ve como una plantilla para múltiples objetos con características similares

No se tienen que escribir todas las clases que se necesitan en un programa, ya que Java proporciona una biblioteca de clases estándar para realizar las operaciones más habituales que podamos requerir.

CÓMO CREAR UNA CLASE DE OBJETOS


Un objeto contiene, por una parte, atributos que definen su estado, y por otra, operaciones que definen su comportamiento. Tam­bién sabemos que un objeto es la representación concreta y específica de una cla­se. ¿Cómo se escribe una clase de objetos? Como ejemplo, podemos crear una clase PC.

class PC

{

// ...



}

Para declarar una clase hay que utilizar la palabra reservada class seguida del nombre de la clase y del cuerpo de la misma. El cuerpo de la clase incluirá entre { y } los atributos y los métodos u operaciones que definen su comportamiento.

Los atributos son las características individuales que diferencian un objeto de otro. El color de una ventana Windows, la diferencia de otras; el CURP. de una persona la identifica entre otras; el modelo de un ordenador le distingue entre otros; etc.



La clase PC puede incluir los siguientes atributos:

  • Marca: Mitac, Toshiba, Ast

  • Procesador: Intel, AMD

  • Pantalla: TFT, DSTN, STN

Los atributos también pueden incluir información sobre el estado del objeto; por ejemplo, en el caso de un ordenador, si está encendido o apagado, si la pre­sentación en pantalla está activa o inactiva, etc.

  • Dispositivo: encendido, apagado

  • Presentación: activa, inactiva

Todos los atributos son definidos en la clase por variables:
class PC

{

String Marca;



String Procesador;

String Pantalla;

boolean PCEncendido;

boolean Presentación;

// ...

}

Se han definido cinco atributos: tres de ellos, Marca, Procesador y Pantalla, pueden contener una cadena de caracteres del tipo String. Los otros dos atributos, PCEncendido y Presentación, son de tipo bolean.



El comportamiento define las acciones que el objeto puede emprender. Por ejemplo, un objeto de la clase PC puede realizar algunas acciones como:

  • Ponerse en marcha

  • Apagarse

  • Desactivar la presentación en la pantalla

  • Activar la presentación en la pantalla

  • Cargar una aplicación

Para definir este comportamiento hay que crear métodos. Los métodos son rutinas de código definidas dentro de la clase, que se ejecutan en respuesta a alguna acción tomada desde dentro de un objeto de esa clase o desde otro objeto de la misma o de otra clase. Los objetos se comunican en ellos mediante mensajes. Agreguemos a la clase PC un método que res­ponda a la acción de ponerlo en marcha:

void EncenderPC()

{

if (PCEncendido == true)

// si está encendido...

System.out.println("El ordenador ya está en marcha.");

else // si no está encendido, encenderlo.

{

PCEncendido = true;



System.out.println("El ordenador se ha encendido.");

}

}



Un método consta de su nombre precedido por el tipo del valor que devuelve cuando finalice su ejecución (la palabra reservada void in­dica que el método no devuelve ningún valor) y seguido por una lista de paráme­tros separados por comas y encerrados entre paréntesis. Los paréntesis indican a Java que el identificador EncenderPC se refiere a un método y no a un atributo. A continuación se escribe el cuerpo del método encerrado entre { y }.

El método EncenderPC comprueba si el ordenador está encendido; si lo está, simplemente visualiza un mensaje indicándolo; si no lo está, se enciende y lo comunica mediante un mensaje.

Agreguemos un método más para que el objeto nos muestre su estado:



void Estado()

{

System.out.println("\nEstado del ordenador:" + "\nMarca " + Marca + "\nProcesador " + Procesador + "\nPantalla " + Pantalla + "\n");



if (PCEncendido == true) // si el ordenador está encendido...

System.out.println("El ordenador está encendido.");

else // si no está encendido...

System.out.println("El ordenador está apagado.");

}
El método Estado visualiza los atributos específicos de un objeto.



Para poder crear objetos de la clase PC y trabajar con ellos, tenemos que añadir a esta clase el método main. Siempre que se trate de una aplicación (no de un applet) es obli­gatorio que la clase que define el comienzo de la misma incluya un método main.

Cuando se ejecuta una clase Java compilada que incluye un método main, éste es lo primero que se ejecuta.

Añadiendo el método main a la clase PC el código completo es el siguiente:

class PC

{

String Marca;



String Procesador;

String Pantalla;

boolean PCEncendido;

boolean Presentación;

void EncenderPC()

{

if (PCEncendido == true) // si está encendido...



System.out.println("El ordenador ya está encendido.");

else // si no está encendido, encenderlo.

{

PCEncendido = true;



System.out.println("El ordenador se ha encendido.");

}

}



void Estado()

{

System.out.println("\nEstado del ordenador:" +

"\nMarca " + Marca +

"\nProcesador " + Procesador +

"\nPantalla " + Pantalla + "\n");

if (PCEncendido == true) // si el ordenador está encendido...

System.out.println("El ordenador está encendido.");

else // si no está encendido...

System.out.println("El ordenador está apagado.");

}
public static void main (String[] args)

{

PC MiPC = new PC();



MiPC.Marca = "Toshiba";

MiPC.Procesador = "Intel Pentium";

MiPC.Pantalla = "TFT";

MiPC.EncenderPC();

MiPC.Estado();

}

}



El método main siempre se declara público y estático, no devuelve un resul­tado y tiene un parámetro args que es un arreglo de cadenas de caracteres.

El método main del ejemplo hace lo siguiente:

La primera línea crea un objeto de la clase PC y almacena una refe­rencia al mismo en la variable MiPC. Esta variable se utiliza pa­ra acceder al objeto.

Las tres líneas siguientes establecen los atributos del objeto referenciado por MiPC. Se puede observar que para acceder a los atributos o propieda­des del objeto se utiliza el operador punto (.).

En las dos últimas líneas el objeto recibe los mensajes EncenderPC y Estado. La respuesta a esos mensajes es la ejecución de los métodos respecti­vos. Para acceder a los métodos del objeto se utiliza el operador punto.

Para acceder a un miembro de una clase (atributo o método) se utiliza la sintaxis siguiente:



nombre_objeto.nombre_miembro

Al ejecutar el programa se pueden observar los resultados siguientes:

El ordenador se ha encendido.

Estado del ordenador:

Marca Toshiba

Procesador Intel Pentium

Pantalla TFT

El ordenador está encendido.



Otra forma de crear objetos de una clase y trabajar con ellos es incluir dicha cla­se en el mismo archivo fuente de una clase ejecutable.

Una clase ejecutable es aquella que incluye el método main y crea objetos de otras clases.

Por ejemplo, en vez de añadir el método main a la clase PC, añadimos una nueva clase pública denominada MiPC que incluya el método main:

public class MiPC

{

public static void main (String[] args)

{

// ...


}

class PC

{

// ...



}

Una aplicación se construye mediante una cla­se cuyo nombre debe coincidir con el del programa fuente que la contenga, res­petando mayúsculas y minúsculas. Por lo tanto, el código anterior se guarda en un archivo fuente denominado MiPC java.

Finalmente se completa el có­digo, se compila y ejecuta. Ahora es la clase MiPC la que crea un objeto de la clase PC

public class MiPC

{

public static void main (String[] args)

{

PC MiPC = new PC();



MiPC.Marca = "Toshiba";

MiPC.Procesador = "Intel Pentium";

MiPC.Pantalla = "TFT";

MiPC.EncenderPC();

MiPC.Estado();

}

}



class PC

{

String Marca;



String Procesador;

String Pantalla;

boolean PCEncendido;

boolean Presentación;
void EncenderPC()

{

if (PCEncendido == true) // si está encendido...



System.out.println("El ordenador ya está encendido.");

else // si no está encendido, encenderlo.

{

PCEncendido = true;



System.out.println("El ordenador se ha encendido.");

}

}



void Estado()

{

System.out.println("\nEstado del ordenador:" +

"\nMarca " + Marca +

"\nProcesador " + Procesador +

"\nPantalla " + Pantalla + "\n");

if (PCEncendido == true) // si el ordenador está encendido...

System.out.println("El ordenador está encendido.");

else // si no está encendido...

System.out.println("El ordenador está apagado.");

}

}


La aplicación MiPC java tiene dos cla­ses: la clase ejecutable MiPC y la clase PC. La clase ejecutable es pública (public) y la otra no. Cuando se incluyen varias clases en un archivo fuente, sólo una puede ser pública y su nombre debe coincidir con el del archivo donde se guardan. Al compilar este archivo, Java creará tanto archivos .class como clases separadas hay.
CARACTERÍSTICAS DE LA POO

Las características fundamentales de la POO son: abstracción, encapsulamiento, herencia y polimorfismo.
Abstracción

Por medio de la abstracción conseguimos no preocuparnos por los detalles concretos de las cosas, sino generalizar y centrarse en los aspectos que permitan tener una visión global del problema.
Encapsulamiento

Esta característica permite ver un objeto como una caja negra en la que se ha in­troducido de alguna manera toda la información relacionada con dicho objeto. Esto nos permitirá manipular los objetos como unidades básicas, permaneciendo oculta su estructura interna.

La abstracción y el encapsulamiento están representados por la clase. La clase es una abstracción, porque en ella se definen las propiedades o atributos de un de­terminado conjunto de objetos con características comunes, y es una encapsula­ción porque constituye una caja negra que encierra tanto los datos que almacena cada objeto como los métodos que permiten manipularlos.
Herencia

La herencia permite el acceso automático a la información contenida en otras cla­ses. De esta forma se garantiza la reutilización del código. Con la herencia todas las clases están clasificadas en una jerarquía. Cada clase tiene su superclase (la clase superior en la jerarquía), y cada clase puede tener una o más subclases (las clases inferiores en la jerarquía).




Clase

PC



Clase

PC_Escritorio

Clase

PC_Portatil

Las clases que están en la parte inferior en la jerarquía se dice que heredan de las clases que están en la parte superior en la jerarquía.

El término herencia significa que las subclases disponen de todos los métodos y propiedades de su superclase. Este mecanismo proporciona una forma rápida y cómoda de extender la funcionalidad de una clase.

En Java cada clase sólo puede tener una superclase, lo que se denomina he­rencia simple. En otros lenguajes orientados a objetos, como C++, las clases pueden tener más de una superclase, lo que se conoce como herencia múltiple. En este caso, una clase comparte los métodos y propiedades de varias clases. Esta ca­racterística, proporciona un poder enorme a la hora de crear clases, pero complica excesivamente la programación, por lo que es de escasa o nula utilización. Java, intentando facilitar las cosas, soluciona este problema de comportamiento com­partido utilizando interfaces.

Una interfaz es una colección de nombres de métodos, sin incluir sus definiciones, que puede ser añadida a cualquier clase para proporcionarle comporta­mientos adicionales no incluidos en los métodos propios o heredados.
Polimorfismo

Esta característica permite implementar múltiples formas de un mismo método, dependiendo cada una de ellas de la clase sobre la que se realice la implementa­ción. Esto hace que se pueda acceder a una variedad de métodos distintos (todos con el mismo nombre) utilizando exactamente el mismo medio de acceso.

CONSTRUCTORES Y DESTRUCTORES


Un constructor es un procedimiento especial de una clase que es llamado auto­máticamente siempre que se crea un objeto de esa clase. Su función es iniciar el objeto.

Un destructor es un procedimiento especial de una clase que es llamado automáticamente siempre que se destruye un objeto de esa clase. Su función es rea­lizar cualquier tarea final en el momento de destruir el objeto.

Otro Ejemplo:

Se va a construir una clase para representar números racionales. Un número racional como objeto, tendría dos atributos: el numerador y el denominador. Y los métodos aplicables 'sobre los números racionales son numerosos: suma, resta, multiplica­ción, simplificación, etc. Pero sólo consideraremos dos métodos:

AsignarDatos, para establecer los valores del numerador y del denominador;

VisualizarRacional, para visualizar un nú­mero racional.

La aplica­ción propuesta, queda como se muestra a continuación:



class Racional

{

int Numerador;



int Denominador;
void AsignarDatos(int num, int den)

{

Numerador = num;



if (den == 0) den = 1; // el denominador no puede ser cero

Denominador = den;


void VisualizarRacional()

{ .


System.out.println(Numerador + “/” + Denominador);

}

public static void main (String[1 args)

{

// Punto de entrada a la aplicación



Racional rl = new Racional(); // crear un objeto Racional

rl.AsignarDatos(2, 5);

rl.VisualizarRacional();

}

}



Una vez editado el programa, se guarda en el disco con el nombre Racional.java.

¿Qué hace esta aplicación?

Fijándonos en el método principal, main, vemos que se ha declarado un objeto r1 de la clase Racional.

Racional r1 = new Racional();

En el siguiente paso se envía el mensaje AsignarDatos al objeto r1. El objeto responde a este mensaje ejecutando su método AsignarDatos que almacena el valor 2 en su numerador y el valor 5 en su denominador; ambos valores han sido pasados como argumentos.

r1.AsignarDatos(2, 5);



Finalmente, se envía el mensaje VisualizarRacional al objeto r1. El objeto responde a este mensaje ejecutando su método VisualizarRacional que visualiza sus atributos numerador y denominador en forma de quebrado; en nuestro caso, el número racional 2/5:

r1.VisualizarRacional();



Al finalizar, se compila; y luego se ejecuta la aplicación.
EJERCICIOS PROPUESTOS

1. Añadir a la aplicación PC.java el método ApagarPC.

2. Diseñar una clase Coche que represente coches. Incluir los atributos marca, modelo y color; y los métodos que simulen, enviando mensajes, las acciones de arrancar el motor, cambiar de velocidad, acelerar, frenar y parar el motor.


La base de datos está protegida por derechos de autor ©absta.info 2016
enviar mensaje

    Página principal