TUTORIAL DE JAVA. DEFINICIÓN DE P.O.O. CURSO GRATIS DE JAVA

A petición de algunos estudiantes, haremos este post especial con algunos de los conceptos más importantes de la Programación Orientada a Objetos.

La Programación Orientada a Objetos nace como un conjunto de prácticas a la hora de programación y se ha convertido en uno de los paradigmas de programación más importantes de la actualidad. Sin embargo, ¿Por qué surge este paradigma? Por la forma en que los humanos vemos el mundo, vemos un mundo basado en objetos, tantos palpables como no palpables, por ejemplo: silla, perro, cuenta bancaria y todo con lo que interactuamos y conocemos son objetos que además cada uno tiene características implícitas y realizan un conjunto de operaciones. De esta conclusión llegamos a uno de los conceptos más importantes de la P.O.O., que es el concepto de “Clase“.

Clase: Una clase se puede definir como una descripción abstracta de un grupo de objetos, cada uno de los cuales tiene una serie de atributos, un estado específico y es capaz de realizar una serie de operaciones.

Una representación visual de una clase en UML se pudiera ver de la siguiente forma.

Ejemplo Clase UML

Ejemplo Clase UML

En la primera de las secciones siempre irá el nombre de la clase, en el segundo serían los atributos ( conjunto de características de la clase ) y en la tercera sección serían los métodos es decir las operaciones que pueden realizar las clases.

El segundo concepto que es importante analizar es el concepto de objetos.

Objetos: Un objeto, no es más que una instancia de una clase. La instancia de  una  clase  significa  definir  un  objeto  dándole  valores  a  sus atributos y comportamiento, y realizando operaciones permitidas por la clase.

Ahora bien, que significa ser instancia de una clase, esto se puede resumir en que nos servirá de vínculo o representante de la clase en otro entorno, por ejemplo, si desde una clase necesitamos acceder o inicializar otra clase lo haremos mediante la creación de un objeto. Una nota importante, cuando creamos un objeto no siempre es necesario inicializar cada uno de los valores de la misma, más adelante cuando estudiemos los constructores se podrá ver todo.

Llegado a este punto podremos dar una primera definición de Programación orientada a Objetos.

Programación Orientada a Objetos: La POO es un estilo de programación, donde todos los elementos que forman parte del problema se conciben como objetos, definiendo cuales son sus atributos y comportamiento, como se relacionan entre sí y como están organizadas.

Principios de la P.O.O.

Pilares de la POO

Pilares de la POO

 Abstracción

La abstracción es la capacidad que permite representar las características esenciales de un objeto sin preocuparse de las restantes características (no esenciales).

Aclarando un poco este concepto podemos hacer alguna similitud con la vida real, por ejemplo, cuando vemos un autobús no vemos un conjunto de llantas o de asientos, sencillamente vemos algo más complejo, vemos un medio de transporte, es decir nos abstrajimos de detalles de su construcción para centrarnos en lo verdaderamente importante

Encapsulamiento

 Encapsulamiento: Es la propiedad que permite asegurar que los aspectos externos de un objeto se diferencie de sus detalles internos.

Le da la posibilidad al programador de decidir que elementos esconder y la forma de mostrarlo al resto de las clases. Por ejemplo, en este tipo de principio es donde escondemos el acceso directo a los atributos y hacemos los famosos métodos get y set que controlan el método de acceder a los mismos. Los temas de encapsulamiento lo trataremos más en detalle

Modularidad

Modularidad: La modularidad es la propiedad que permite dividir una aplicación en partes más pequeñas ( llamadas módulos ), cada una de las cuales debe ser tan independiente como sea posible de la aplicación en si y de las restantes partes.

Esto es una interpretación del famoso dicho de divide y vencerás, es dividir un gran problema en partes reutilizables más pequeñas, con el objetivo de reutilizar las funcionalidades y encontrar más fácilmente las soluciones.

Con respecto a esto, quiero hacer una aclaración, en varios años impartiendo clases de programación, he notado que se puede malinterpretar este concepto con dividir todo en partes muy pequeñas, eso no es así! Hay que dividir un software en módulos que merezcan la pena porque si se divide todo tan pequeño como sea se entorpece el proceso de desarrollo.

Otros conceptos importantes

Herencia

Herencia: Son clases que heredan propiedades y características de otras clases superiores.

Las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento, permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes. Estos pueden compartir (y extender) su comportamiento sin tener que volver a implementarlo. Esto suele hacerse habitualmente agrupando los objetos en clases y estas en árboles o enrejados que reflejan un comportamiento común. Cuando un objeto hereda de más de una clase se dice que hay herencia múltiple.

Haciendo una analogía con la vida real, nos podría quedar un gráfico de la siguiente forma

POO Herencia

POO Herencia

Es decir los herbívoros, carnívoros y omnívoros son animales, es decir comparten las características de los animales, sin embargo tienen características propias que los diferencian del resto, esas características lo hacen único, y es justamente la herencia la que garantiza que podamos representar esto en nuestro sistema.

La generalización es el proceso contrario por el cual de una clase hija se lleva una clase padre.

 Polimorfismo

Polimorfismo: Es el mecanismo de definir un mismo método en varios objetos de diferentes clases pero con distintas formas de implementación.

 

Ya que hemos acabado de tocar los temas de herencia, sin embargo nos surge una duda, ¿Qué pasaría si a pesar de tener características comunes con una clase padre, hay un método que se comporta de forma diferente? Esta es justamente la finalidad del polimorfismo.

 

Constructor

Es el método más importante de una clase, a través de este inicializaremos todas las variables de la clase y a través de este es que será posible la creación de un objeto. No vamos a profundizar más en este aspecto ya que dedicaremos todo un post a esto.

 

Aunque en este post quizás hayan conceptos que no han sido tratados, poco a poco iremos desarrollando otros contenidos donde los trataremos.

Recuerda: Si tienes comentarios, dudas o sugerencias, no dudes en postearlo.

Volver al Índice de Contenidos

Acerca de ronald

Deja un Comentario

Tu dirección de email no será publicada. Required fields are marked *

*

Free WordPress Themes - Download High-quality Templates