Inicio » Política de privacidad » Informática profesional. » Programación » Curso de Java » Programación orientada a objetos

Curso de Java

Programación orientada a objetos


Inscríbete ahora y accede a 3 unidades gratis

Evalua el curso de Java y accede a las 3 unidades gratis con acceso completo al aula virtual donde podrás disfrutar de la inestimable ayuda del tutor y una gran variedad de recursos como videotutoriales, ejercicios resueltos, foros, enlaces, bibliografía, etc....


Introducción

Ver video en formato de WMV Ver video en formato de Flash Programación orientada a objetos

La programación orientada a objetos facilita la creación de software de calidad ya que fomenta su fácil mantenibilidad, alta escalabilidad y la reutilización de componentes software.

La programación orientada a objetos trata de amoldarse al modo de pensar del hombre y no al de la máquina. Esto es posible gracias a la forma racional con la que se manejan las abstracciones que representan las entidades del dominio del problema, y a propiedades como la herencia o el encapsulamiento.

El elemento básico de la POO es el objeto. Un objeto es la representación de un concepto para un programa, y contiene toda la información necesaria para abstraer dicho concepto: los datos que describen su estado y las operaciones o métodos que pueden modificar dicho estado. Ejemplo: SerHumano, Ciudad, CuentaBancaria, etc.

Se intuye que una CuentaBancaria podría definir una serie de atributos como

  • número
  • titular
  • saldo

que asumirán distintos valores para cada una y que servirían para identificarla de forma única. Lo importante es pensar que todas las cuentas bancarias deberían contar con esos atributos.

Lo mismo ocurriría con SerHumano. Pensando un poco podemos concluir que para nosotros un ser humano se define mediante los atributos

  • color de ojos
  • edad
  • nombre

Inscríbete ahora y accede a 3 unidades gratis

Evalua el curso de Java y accede a las 3 unidades gratis con acceso completo al aula virtual donde podrás disfrutar de la inestimable ayuda del tutor y una gran variedad de recursos como videotutoriales, ejercicios resueltos, foros, enlaces, bibliografía, etc....


Objetos

Se puede definir objeto como el "encapsulamiento de un conjunto de operaciones (métodos) que pueden ser invocados externamente, y de un estado que recuerda el efecto de los servicios". [Piattini et al., 1996].

Un objeto, además de un estado interno, presenta una interfaz para poder interactuar con el exterior. Es por esto por lo que se dice que en la programación orientada a objetos "se unen datos y procesos", y no como en su predecesora, la programación estructurada, en la que estaban separados en forma de variables y funciones.

Un objeto consta de:

  • Tiempo de vida: la duración de un objeto en un programa siempre está limitada en el tiempo. La mayoría de los objetos sólo existen durante una parte de la ejecución del programa. Los objetos son creados mediante un mecanismo denominado instanciación y cuando dejan de existir se dice que son destruidos.
  • Estado: todo objeto posee un estado, definido por sus atributos o campos. Con él se definen las propiedades del objeto, y el estado en que se encuentra en un momento determinado de su existencia. Por ejemplo, en el caso de CuentaBancaria podría ser:
    •         numero: 1234567890123456
    •         titular: Jesús Fernández
    •         saldo: 10000   
  • Comportamiento: todo objeto ha de presentar una interfaz, definida por sus métodos, para que el resto de objetos que componen los programas puedan interactuar con él.

Inscríbete ahora y accede a 3 unidades gratis

Evalua el curso de Java y accede a las 3 unidades gratis con acceso completo al aula virtual donde podrás disfrutar de la inestimable ayuda del tutor y una gran variedad de recursos como videotutoriales, ejercicios resueltos, foros, enlaces, bibliografía, etc....


Clases

Ver video en formato de WMV Ver video en formato de Flash Clases

Las clases son abstracciones que representan a un conjunto de objetos con unas características y comportamiento comunes. En este sentido, una clase se puede considerarse como una plantilla o molde que sirve para la creación o instanciación de objetos.

Ejemplo: se nos puede ocurrir pensar en una cuenta bancaria.

¿Qué caracteriza a las cuentas bancarias? Todas tienen un número de veinte dígitos, están asociadas a un titular y presentan un saldo aunque, por supuesto, dichas características para cada cuenta bancaria pueden ser distintas.

  • Características comunes: todas las cuentas tienen número identificativo, titular y saldo.
  • Comportamiento común: en todas las cuentas se pueden realizar dos operaciones básicas: depositar y retirar dinero.

No es que las citadas anteriormente sean todas las características que definen a una cuenta bancaria, pero sí en las que se está interesado como responsable de modelar un objeto de negocio del sistema software que se está diseñando.

  • ¿Cómo se representan las características comunes a nivel de código?

Mediante atributos de clase.

Ejemplo:

        // Declaración del paquete que va a contener a la clase

package cuentabancaria;

 // Declaración de clase

public class CuentaBancaria{

        // Atributos de clase. Son variables de instancia

private String numero;

private String titular;

private double saldo;

// Método constructor de la clase. Es invocado cada vez que se crea o instancia un objeto de la clase

public CuentaBancaria(String numeroCuenta, String titularCuenta, double cantidaInicial) {

numero = numeroCuenta;

titular = titularCuenta;

saldo = cantidaInicial;

}

...

Las clases representan el estado de los objetos mediante los valores que dichos atributos asumen para cada uno de ellos. En la mayoría de lenguajes orientados a objetos, estos atributos son implementados mediante variables de instancia (declaradas justo después de la clase y accesibles a todos los métodos de la misma).

¿Cómo se crea o instancia un objeto de la clase CuentaBancaria?

CuentaBancaria cuenta1 = new CuentaBancaria("12345678901234567890", "Juan Sanz", 1000);

CuentaBancaria cuenta2 = new CuentaBancaria("98765432109876543210", "Sara Gil", 3000);

  • ¿Cómo se representan el comportamiento común a nivel de código?

Mediante métodos.

Ver video en formato de WMV Ver video en formato de Flash Métodos

Ejemplo:

...

public void retirar(double cantidad) throws NoFondosDisponiblesException {

if (saldo >= cantidad) {

saldo = saldo - cantidad;

}

else

throw new NoFondosDisponiblesException("No hay suficientes fondos");

}

public void depositar(double cantidad){

if(cantidad > 0){

saldo = saldo + cantidad;

}

}

...

Los métodos permiten a las clases modificar el comportamiento de los objetos, cambiando los valores de los atributos e interactuando con otros métodos de la clase que expongan una determinada funcionalidad precisada.

Ejemplo de llamada a un método:

cuenta1.depositar(300);

Esta línea de código invoca al método despositar y provoca un cambio de valor en el atributo saldo del objeto de la clase CuentaBancaria cuya referencia es cuenta1: antes de la llamada, el saldo era de 1000, pero después será de 1300.


Inscríbete ahora y accede a 3 unidades gratis

Evalua el curso de Java y accede a las 3 unidades gratis con acceso completo al aula virtual donde podrás disfrutar de la inestimable ayuda del tutor y una gran variedad de recursos como videotutoriales, ejercicios resueltos, foros, enlaces, bibliografía, etc....


Modelo de objetos

Existen una serie de principios fundamentales para comprender cómo se modeliza la realidad al crear un programa bajo el paradigma de la orientación a objetos. Estos principios son:

  • Abstracción
  • Encapsulación
  • Modularidad
  • Herencia
  • Paso de mensajes
  • Polimorfismo
  • Relaciones entre objetos
  • Visibilidad

No importa si ahora estos principios no se entienden bien ahora. A medida que se vaya avanzando en el curso y conforme se vayan relizando ejercicios se comprenderán mejor.


Inscríbete ahora y accede a 3 unidades gratis

Evalua el curso de Java y accede a las 3 unidades gratis con acceso completo al aula virtual donde podrás disfrutar de la inestimable ayuda del tutor y una gran variedad de recursos como videotutoriales, ejercicios resueltos, foros, enlaces, bibliografía, etc....


Abstracción

Mediante la abstracción la mente humana modeliza la realidad en forma de objetos. Para ello busca parecidos entre la realidad y la posible implementación de objetos del programa que simulen el funcionamiento de los objetos reales.

Los seres humanos no pensamos en las cosas como un conjunto de cosas menores; por ejemplo, no vemos un cuerpo humano como un conjunto de células. Los humanos entendemos la realidad como objetos con comportamientos bien definidos. No necesitamos conocer los detalles de porqué ni cómo funcionan las cosas; simplemente solicitamos determinadas acciones en espera de una respuesta; cuando una persona desea desplazarse, su cuerpo le responde comenzando a caminar.

Pero la abstracción humana se gestiona de una manera jerárquica, dividiendo sucesivamente sistemas complejos en conjuntos de subsistemas, para así entender más fácilmente la realidad. Esta es la forma de pensar que la orientación a objeto intenta cubrir.


Inscríbete ahora y accede a 3 unidades gratis

Evalua el curso de Java y accede a las 3 unidades gratis con acceso completo al aula virtual donde podrás disfrutar de la inestimable ayuda del tutor y una gran variedad de recursos como videotutoriales, ejercicios resueltos, foros, enlaces, bibliografía, etc....


Encapsulación

Permite a los objetos elegir qué información es publicada y qué información es ocultada al resto de los objetos. Para ello los objetos suelen presentar sus métodos como públicos y sus atributos como privados e inaccesibles desde otros objetos. Esto se hace para dotar al programador de mecanismos que permitan aplicar lógica de control y validación cuando otros objetos consulten o modifiquen los atributos.

Con el encapsulado de los datos se consigue que las personas que utilicen un objeto sólo tengan que comprender su interfaz, olvidándose de cómo está implementada, y en definitiva, reduciendo la complejidad de utilización.

En la clase CuentaBancaria los métodos setters(setSaldo, setNumero, setTitular) permiten actuar del modo comentado anteriormente, mientras que los getters(getSaldo, getNumero, getTitular) acceden al valor de los atributos

...

public double getSaldo() {

return saldo;

}

public void setSaldo(double saldo) {

            if(saldo < 0)

    // Mostrar mensaje al usuario indicándole que no es posible

            else

    this.saldo = saldo;

}

public String getNumero() {

return numero;

}

public void setNumero(String numero) {

this.numero = numero;

}

public String getTitular() {

return titular;

}

public void setTitular(String titular) {

this.titular = titular;

}

...


Inscríbete ahora y accede a 3 unidades gratis

Evalua el curso de Java y accede a las 3 unidades gratis con acceso completo al aula virtual donde podrás disfrutar de la inestimable ayuda del tutor y una gran variedad de recursos como videotutoriales, ejercicios resueltos, foros, enlaces, bibliografía, etc....


Modularidad

Mediante la modularidad, se propone al programador dividir su aplicación en varios módulos diferentes (ya sea en forma de clases, paquetes o bibliotecas), cada uno de ellos con un sentido propio.

Esta fragmentación disminuye el grado de dificultad del problema al que da respuesta el programa, pues se afronta el problema como un conjunto de problemas de menor dificultad, además de facilitar la comprensión del programa.


Inscríbete ahora y accede a 3 unidades gratis

Evalua el curso de Java y accede a las 3 unidades gratis con acceso completo al aula virtual donde podrás disfrutar de la inestimable ayuda del tutor y una gran variedad de recursos como videotutoriales, ejercicios resueltos, foros, enlaces, bibliografía, etc....


Herencia

La mayoría de nosotros ve de manera natural nuestro mundo como objetos que se relacionan entre sí de una manera jerárquica. Por ejemplo, un perro es un mamífero, y los mamíferos son animales, y los animales seres vivos...

Del mismo modo, las distintas clases de un programa se organizan mediante la herencia.

Mediante la herencia una clase hija o subclase puede usar propiedades de su clase padre o superclase. De este modo se simplifican los diseños y se evita la duplicación de código al no tener que volver a codificar métodos ya implementados.

A veces interesa modificar el comportamiento de un método heredado. Para conseguirlo se redefine o sobrepone o sobrescribe (overriding en inglés) el método

  • Con la misma firma (mismo número de argumentos, mismo tipo de datos y en el mismo orden)

y

  • Con el mismo tipo de retorno

en la subclase, pero cambiando el código del método en función de las necesidades de programación.

Ejemplo1:

 

Ejemplo2: CuentaBancaria superclase de CuentaAhorros, CuentaPlatino y CuentaDeposito

 

        // Declaración del paquete que va a contener a la clase

package cuentabancaria;

 // Declaración de clase

public class CuentaBancaria{

        // Atributos de clase. Son variables de instancia

private String numero;

private String titular;

private double saldo;

// Método constructor de la clase. Es invocado cada vez que se crea o instancia un objeto de la clase

public CuentaBancaria(String numeroCuenta, String titularCuenta, double cantidaInicial) {

numero = numeroCuenta;

titular = titularCuenta;

saldo = cantidaInicial;

}

public void retirar(double cantidad) throws NoFondosDisponiblesException {

if (saldo >= cantidad) {

saldo = saldo - cantidad;

}

else

throw new NoFondosDisponiblesException("No hay suficientes fondos");

}

public void depositar(double cantidad){

if(cantidad > 0){

saldo = saldo + cantidad;

}

}

        }

 

package cuentabancaria;

// Cuenta bancaria de tipo ahorro: se emplean los metodos depositar y retirar de su superclase CuentaBancaria

// Si se retira una cantidad superior al saldo, se lanza una NoFondosDisponiblesException

public class CuentaAhorros extends CuentaBancaria{

public CuentaAhorros(){}

public CuentaAhorros(String numeroCuenta, String titularCuenta, double cantidadInicial) {

    super(numeroCuenta, titularCuenta, cantidadInicial);

}

public String getTipo() {

return "CuentaAhorros";

}

}

 

package cuentabancaria;

// Cuenta bancaria tipo platino: se emplea el metodo depositar de su superclase CuentaBancaria

// y se redefine el met retirar. De qué modo?

// Un titular de este tipo de cuenta dispone de un límite admisible en descubierto de 2500,

// que será utilizado cuando se intente retirar una cantidad que supere el saldo de la cuenta.

// Si se retira una cantidad superior al saldo + descubierto permitido, se lanza una NoFondosDisponiblesException

public class CuentaPlatino extends CuentaBancaria {

private const double limiteDescubierto = 2500.00;
private double fondosDisponibles;

public CuentaPlatino() {}

public CuentaPlatino(String numeroCuenta, String titularCuenta, double cantidadInicial) {

    super(numeroCuenta, titularCuenta, cantidadInicial);

}

// Redefinición del metodo retirar

public void retirar(double cantidad) throws NoFondosDisponiblesException {

// En vez de colocarlo en el constructor, lo hacemos aquí para evitar errores cuando depositas y retiras en una ejecución

// En la vida real es algo que no se prevé hacer, pero bueno...

fondosDisponibles = limiteDescubierto + saldo;

// Si el saldo es superior a la cantidad, se retira siguiendo los cauces normales, esto es, invocando a la superclase

if(saldo >= cantidad){

super.retirar(cantidad);

}

// Si el saldo es inferior a la cantidad, se usa el limite de descubierto disponible.

else{

// La cantidad a retirar no supera el saldo + limite descubierto

if(cantidad <= fondosDisponibles){

fondosDisponibles = fondosDisponibles - cantidad;

setSaldo(saldo - cantidad);

}

// La cantidad a retirar supera el saldo + limite descubierto

else

throw new NoFondosDisponiblesException("No hay suficientes fondos");

}

}

public double getLimiteDescubierto() {

return limiteDescubierto;

}

public double getFondosDisponibles() {

return fondosDisponibles;

}

public void setFondosDisponibles(double fondosDisponibles){

this.fondosDisponibles = fondosDisponibles;

}

public String getTipo() {

return "CuentaPlatino";

}

}

 

package cuentabancaria;

// Cuenta bancaria tipo depósito: se emplea el metodo retirar de su superclase CuentaBancaria  y se redefine el metodo depositar. De qué modo?

// Al depositar una cantidad igual o superior a 1000, el banco le ingresa la cantidad más el 5% de la misma

// Si se retira una cantidad superior al saldo, se lanza una NoFondosDisponiblesException

public class CuentaDeposito extends CuentaBancaria {

private const double interes = 5;

public CuentaDeposito() {}

public CuentaDeposito(String numeroCuenta, String titularCuenta, double cantidadInicial) {

    super(numeroCuenta, titularCuenta, cantidadInicial)

}

// Redefinición del metodo depositar de CuentaBancaria

public void depositar(double cantidad){

// Si deposita una cantidad igual o sup a 1000, el banco le ingresa la cantidad

// más un extra del 5% de la misma

if(cantidad >= 1000){

setSaldo(saldo + cantidad + cantidad*interes/100);

}

else

super.depositar(cantidad);

}

public String getTipo() {

return "Cuenta Deposito";

}

}


Inscríbete ahora y accede a 3 unidades gratis

Evalua el curso de Java y accede a las 3 unidades gratis con acceso completo al aula virtual donde podrás disfrutar de la inestimable ayuda del tutor y una gran variedad de recursos como videotutoriales, ejercicios resueltos, foros, enlaces, bibliografía, etc....


Si desea obtener un acceso sin restricciones a los contenidos del curso de Java y disfrutar de todas las herramientas del aula virtual (Videos explicativos streaming, acceso a los foros, chat, ejercicios resueltos, la ayuda del tutor, audioconferencia, estudio de grabación, test y actividades de autoevaluación, etc...) puede inscribirse completamente gratis y comenzar a realizar de forma inmediata el curso.