Por favor, activa JavaScript y desactiva tu adblock para este sitio

El Javatar

Blog dedicado a la Programación en Java, C, PHP, Phyton, HTML, SQL y Mucho Más

miércoles, 30 de abril de 2014

Paradigmas de Programación IV: Programación Orientada a Objetos

Paradigmas de Programación IV - Programación Orientada a Objetos
En esta cuarta entrega sobre paradigmas de programación finalizaremos los paradigmas que teníamos designados en la categoría de programación imperativa, y lo haremos hablando del que quizás es uno de los paradigmas de más renombre: La Programación Orientada a Objetos (POO).

Pues bien, según Wikipedia, la programación orientada a objetos es un paradigma de programación que usa los objetos en sus interacciones, para diseñar aplicaciones y programas informáticos; además, está basado en varias técnicas, incluyendo herencia, cohesión, abstracción, polimorfismo, acoplamiento y encapsulamiento.

Pero antes de seguir, es conveniente aclarar a grandes rasgos algunos de estos conceptos que deben tenerse muy claros cuando se habla de programación orientada a objetos; sin embargo por el momento solamente daré conceptos claves que sirvan para aclarar dudas, pues en su momento trataré de hacer entradas explicando con ejemplos cada uno de estos conceptos:

Objeto: Es una entidad que consta de un estado y un comportamiento y, básicamente posee las siguientes características:
- Es una instancia de una clase
- Posee un conjunto de propiedades características (atributos)
- Alberga ciertos patrones de comportamiento (métodos)
- Puede interactuar con otros objetos.
- Tiene un estado

Clase: Una clase son las definiciones de las propiedades y comportamiento de un tipo de objeto concreto. Por otro lado, la instanciación es la lectura de estas definiciones y la creación de un objeto a partir de ellas.

Método: Es un algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena tras la recepción de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un método puede producir un cambio en las propiedades del objeto, o la generación de un "evento" con un nuevo mensaje para otro objeto del sistema.

Evento: Es un suceso en el sistema (tal como una interacción del usuario con la máquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. También se puede definir como evento la reacción que puede desencadenar un objeto; es decir, la acción que genera.

Atributos: Son el conjunto de propiedades o características que tiene la clase

La programación orientada a objetos se basa entonces en el uso de objetos para la creación de un programa dividiendo el problema y ademas proporcionando mayor eficiencia contando con las siguientes características:

Abstracción: En programación este concepto hace alusión al hecho de prescindir de la necesidad de conocer cómo se realiza un proceso para centrarse en qué procesos desempeña una instancia (objeto) ya sea comunicarse con otras instancias, cambiar su estado, realizar una labor concreta, etc. Ésto nos facilita la construcción de clases que desempeñen funciones preestablecidas y reutilizar el código de manera más eficiente.

Encapsulamiento: Es el método por el cual se apela a todos los elementos de una entidad que está al mismo nivel de abstracción aumentando así la cohesión de los componentes del sistema, no debe confundirse con la ocultación pese a que ambos procesos se realizan de forma simultánea. Se denomina entonces encapsulamiento al ocultamiento del estado, es decir, de los datos miembro de un objeto de manera que sólo se pueda cambiar mediante las operaciones definidas para ese objeto.

Modularidad: Ya tratada en la anterior entrada (Programación modular), la modularidad es la propiedad que permite subdividir 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 sí y de las restantes partes, de esta forma se logra soliviantar la corrección y el desarrollo de código, además de darle legibilidad y facilidad de mantenimiento.

Principio de Ocultación: Hace referencia a que los atributos privados de un objeto no pueden ser modificados ni obtenidos a no ser que se haga a través del paso de un mensaje, es decir mediante la invocación a métodos, ya sean estos funciones o procedimientos.

Cada instancia está aislada del resto de código y sólo otras pueden usarse de interfaz para la comunicación entre dichos objetos, ésto protege los atributos y patrones de conducta de un objeto de accesos fuera de protocolo a las mismas, solamente los métodos del objeto pueden acceder a su estado asegurando la integridad de los mismos.

Polimorfismo: Se refiere a la propiedad por la que es posible enviar mensajes sintácticamente iguales a objetos de tipos distintos. El único requisito que deben cumplir los objetos que se utilizan de manera polimórfica es saber responder al mensaje que se les envía.

Los patrones de comportamiento pueden denominarse de forma idéntica y ser invocados desde objetos distintos y/o de diferentes tipos y seguirá siendo eficaz para la instancia referenciada, mas, si ésto ocurre durante el "tiempo de ejecución" se conoce como asignación dinámica aunque algunos lenguajes proporcionan una metodología más estática de polimorfismo como plantillas, sobrecarga de operadores etc.

Herencia: Es el proceso de cesión de características de una clase a otra por el cual se consigue definir una jerarquía de características que pueden ser más específicas tras la herencia, conteniendo la subclase más especificaciones que la superclase.

Recolección de basura: Es la técnica por la cual el entorno de objetos se encarga de destruir automáticamente, y por tanto desvincular la memoria asociada de los objetos que hayan quedado sin ninguna referencia a ella. Esto significa que el programador no debe preocuparse por la asignación o liberación de memoria, ya que el entorno la asignará al crear un nuevo objeto y la liberará cuando nadie lo esté usando.

Sin embargo, en la mayoría de los lenguajes híbridos que se extendieron para soportar el Paradigma de Programación Orientada a Objetos como C++ u Object Pascal, esta característica no existe y la memoria debe des-asignarse expresamente.

Bueno, como dije anteriormente en esta entrada solo me estoy limitando a dejando claros esos conceptos claves que son importantes tener en cuenta cuando hablamos de programación orientada a objetos, pues pronto haré artículos explicando con ejemplos todos estos conceptos para tenerlos mucho más claros.

Sin embargo, la gente de DesarrolloWeb hizo un Hangout en donde explican a mayor fondo todos estos conceptos. Aquí les dejo el video:


En resumen, (Sacado de Wikipedia ;) ) un objeto es una abstracción de algún hecho o ente del mundo real, con atributos que representan sus características o propiedades, y métodos que emulan su comportamiento o actividad. Todas las propiedades y métodos comunes a los objetos se encapsulan o agrupan en clases. Una clase es una plantilla, un prototipo para crear objetos; En general, se dice que cada objeto es una instancia o ejemplar de una clase.

Fuente:
http://linceus.blogspot.com.es/2014/03/paradigmas-de-la-programacion-iv.html

Bien, eso es todo por el momento, sin embargo recuerda que cualquier duda puedes hacérmela saber a través de los comentarios. Me despido pero seguiremos hablando de Paradigmas de Programación en el siguiente artículo donde hablaremos de Programación Funcional.

==> Artículo 5: Paradigmas de Programación V: Programación Funcional

No hay comentarios.:

Publicar un comentario