Tu portal de
formación online

Infórmate
Inicio » Catálogo » Curso de Programación en Java » Modelo de objetos

Curso de Programación en Java

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 no se entienden bien estos conceptos. A medida que se vaya avanzando en el curso y conforme se vayan realizando ejercicios se comprenderán mejor.

 

Abstracción

Mediante la abstracción, la mente humana modela 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, 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.

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;

}
...

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.

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

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

Paso de mensajes

Una aplicación orientada a objetos consiste en un número determinado de objetos que interactúan entre si enviándose mensajes unos a otros para invocar sus métodos. Este intercambio de mensajes facilita su comportamiento, cambios de estado, destrucción o almacenamiento.

Ya que todo lo que un objeto puede realizar está expresado en sus métodos, este simple mecanismo de mensajes soporta todas las posibles interacciones entre ellos.

Mediante el denominado paso de mensajes, un objeto puede solicitar de otro objeto que realice una acción determinada o que modifique su estado. El paso de mensajes se suele implementar como llamadas a los métodos de otros objetos.

Desde el punto de vista de la programación estructurada, esto correspondería con la llamada a funciones.

Polimorfismo

Diferentes objetos pueden responder a un mismo mensaje de diferentes maneras. El polimorfismo permite a los objetos interactuar entre ellos sin necesidad de conocer previamente a que tipo pertenecen.

Un objeto puede ser de diferentes tipos. Por ejemplo un vehículo automático de carga puede especializarse para cargar bobinas, palets u otro tipo de items. Los demás objetos del sistema no tienen porque saber cuantos tipos de vehículos disponemos. El mismo mensaje cargarItem, acompañado del parámetro que identifica dicho item, será intrepretado de distinta manera por cada objeto receptor, el cual ya conoce previamente como tiene que tratar la naturaleza de su carga: bobinas, palets, etc.

Hay una reducción de esfuerzo muy significativa por el hecho de que cualquier objeto del sistema puede enviar mensajes a los vehículos automáticos de carga sin necesidad de saber de antemano qué tipo de vehículos están en circulación.

No hay necesidad así de crear un código específico para cada tipo de vehículo, con lo cual, nos ahorramos sentencias IF o CASE que son complejas de mantener y de actualizar cuando se incorporan nuevos tipos de objetos.

Relación entre objetos

Durante la ejecución de un programa, los diversos objetos que lo componen han de interactuar entre sí para lograr una serie de objetivos comunes.

Existen varios tipos de relaciones que pueden unir a los diferentes objetos, pero entre ellas destacan las relaciones de: asociación, todo/parte, y generalización/especialización.

  • Relaciones de Asociación
    Serían relaciones generales, en las que un objeto realiza llamadas a los métodos de otro, interactuando con él.
    Representan las relaciones con menos riqueza semántica.

  • Relaciones de Todo/Parte
    Muchas veces una determinada entidad existe como conjunción de otras entidades, como un conglomerado de ellas. En este tipo de relaciones un objeto componente se integra en un objeto compuesto. La orientación a objetos recoge este tipo de relaciones como dos conceptos: la agregación y la composición.
    La diferencia entre agregación y composición es que mientras que la composición se entiende que dura durante toda la vida del objeto componedor, en la agregación no tiene por qué ser así.
    Ejemplo de agregación: un ordenador y sus periféricos. Los periféricos de un ordenador pueden estar o no, se pueden compartir entre ordenadores y no son propiedad de ningún ordenador.
    Ejemplo de composición: un árbol y sus hojas. Un árbol está íntimamente ligado a sus hojas. Las hojas son propiedad exactamente de un árbol, no se pueden compartir entre árboles y cuando el árbol muere, las hojas lo hacen con él.

  • Relaciones de Generalización/Especialización
    A veces sucede que dos clases tiene muchas de sus partes en común, lo que normalmente se abstrae en la creación de una tercera clase (padre de las dos) que reune todas sus características comunes.
    El ejemplo más extendido de este tipo de relaciones es la herencia, propiedad por la que una clase (clase hija) recoge aquellos métodos y atributos que una segunda clase (clase padre) ha especificado como "heredables".
    Este tipo de relaciones es característico de la programación orientada a objetos.
    En realidad, la generalización y la especialización son diferentes perspectivas del mismo concepto, la generalización es una perspectiva ascendente (bottom-up), mientras que la especialización es una perspectiva descendente (top-down).

Visibilidad

Toda clase encapsula unos elementos (atributos y operaciones) que disponen de ciertos criterios de visibilidad y manipulación para otras clases.

Los elementos públicos( ) pueden ser usados por cualquier otra clase.

Los elementos privados(-) pueden ser usados sólo por la clase propietaria.

Los elementos protegidos(#) pueden ser usados por la subclases y por la clases del mismo paquete.

Cada plataforma de desarrollo (C#, C , Smalltalk, Java) desarrolla sus propias reglas con respecto a la visibilidad y manipulación de atributos y operaciones.

Si desea obtener un acceso sin restricciones a los contenidos del curso de Programación en 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.
Este sitio web utiliza cookies de terceros con la finalidad de analizar el uso que hace de nuestra web y personalizar el contenido de los anuncios. Si continúa navegando entendemos que acepta su uso. Más información × Cerrar