Cursos subvencionados para trabajadores
Realiza el curso gratis a través de tu empresa.
Cursos SubvencionadosInscrí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....
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
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
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....
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:
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....
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.
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.
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 instanciaprivate 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);
Mediante 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....
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:
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....
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....
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....
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....
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 {public CuentaPlatino() {} public CuentaPlatino(String numeroCuenta, String titularCuenta, double cantidadInicial) {private const double limiteDescubierto = 2500.00;
private double fondosDisponibles;
super(numeroCuenta, titularCuenta, cantidadInicial);
}
// Redefinición del metodo retirarpublic 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 {public CuentaDeposito() {} public CuentaDeposito(String numeroCuenta, String titularCuenta, double cantidadInicial) {private const double interes = 5;
super(numeroCuenta, titularCuenta, cantidadInicial)
}
// Redefinición del metodo depositar de CuentaBancariapublic 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....
Copyright 2010© ADRInfor S.L. Logroño | Tel: 941250116 Fax: 941236805 |
Email |
Política de Privacidad |
Aviso Legal |
Área Privada
Descubre Educaplay: nuestra plataforma para la creación y disfrute de actividades y juegos educativos multimedia