Programación orientada a objetos
La programación orientada a objetos, es un paradigma de programación que usa objetos en sus interacciones, para diseñar aplicaciones y programas informáticos.
Está basada en varias técnicas, incluyendo, abstracción, modularidad y encapsulamiento, herencia y polimorfismo.
Por otra parte podemos afirmar que la Programación (POO) orientada a objetos es la es una forma especial de programar, más cercana a como expresaríamos las cosas en la vida real que otros tipos de programación.
Con la POO tenemos que aprender a pensar las cosas de una manera distinta, para escribir nuestros programas en términos de objetos, propiedades, métodos y otras cosas que veremos rápidamente para aclarar conceptos y dar una pequeña base que permita soltarnos un poco con este tipo de programación.
Clases
La clase es un modelo o prototipo que define las variables y métodos comunes a todos los objetos de cierta clase. También se puede decir que una clase es una plantilla genérica para un conjunto de objetos de similares características.
Por otro lado, una instancia de una clase es otra forma de llamar a un objeto. En realidad no existe diferencia entre un objeto y una instancia. Sólo que el objeto es un término más general, pero los objetos y las instancias son ambas representación de una clase.
Ejemplo:
En el mundo real, normalmente tenemos muchos objetos del mismo tipo. Por ejemplo, nuestro teléfono celular es sólo uno de los miles que hay en el mundo. Si hablamos en términos de la programación orientada a objetos, podemos decir que nuestro objeto celular es una instancia de una clase conocida como "celular". Los celulares tienen características (marca, modelo, sistema operativo, pantalla, teclado, etc.) y comportamientos (hacer y recibir llamadas, enviar mensajes multimedia, transmisión de datos, etc.).
Cuando se fabrican los celulares, los fabricantes aprovechan el hecho de que los celulares comparten esas características comunes y construyen modelos o plantillas comunes, para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo. A ese modelo o plantilla le llamamos clase, y a los equipos que sacamos a partir de ella la llamamos objetos.
Objetos
Informalmente, un objeto representa a una entidad, ya sea física, conceptual o software. Un objeto representa un elemento, unidad o entidad individual e identificable, ya sea real o abstracta, con un papel bien definido en el dominio del problema.
En términos generales, se define un objeto como cualquier cosa que tenga una frontera definida con nitidez.
Un objeto es algo que tiene:
- Estado
- Comportamiento
- Identidad
Estado del objeto
- El estado de un objeto es una de las posibles condiciones en que un objeto puede existir.
- El estado de un objeto normalmente cambia con el tiempo
- El estado de un objeto es usualmente implementado por un conjunto de propiedades llamadas atributos, mas los enlaces que el objeto pueda tener con otros objetos
- El estado lo establecen los valores de los atributos y enlaces
Comportamiento del objeto
- El comportamiento determina como un objeto actúa y reacciona
- El comportamiento define la manera en la que unobjeto responde a las peticiones de otros objetos
- El comportamiento visible de un objeto se modela con un conjunto de mensajes a los que el puede responder
- Los mensajes se implementan como las operaciones del objeto
Identidad del objeto
Cada objeto tiene una identidad única, aun si su estado en un momento dado, es idéntico al de otros objetos.
Herencia
La herencia representa una jerarquía de abstracciones (clases). Básicamente, la herencia define una relación entre clases, el la que una clase comparte la estructura de comportamiento definida en una o más clases. De forma simple, la herencia es el proceso mediante el cual un objeto adquiere las propiedades de otro.
Cada vez que se especializa una clase, esta clase hereda atributos y comportamientos de su superclase; pero además se añaden nuevos comportamientos o se modifican alguno de los ya heredados
Semánticamente, la herencia denota una relación ; “es un”.
Por ejemplo, un oso es un tipo de mamífero, una casa es un tipo de bien inmueble.
Así la herencia implica una jerarquía de generalización/especialización, en la que una subclase especializa el comportamiento o estructura más general de sus superclases.


Abstracción
Aún cuando existe una multitud de aves diferentes, podemos reconocer un AVE en cuanto la vemos, incluso aún cuando esa ave en particular, no lo hayamos visto nunca. La abstracción se centra en las características esenciales de algún objeto, en relación a la perspectiva del observador.
Abstracción consiste en aislar un elemento de su contexto o del resto de los elementos que lo acompañan, identificando sus características esenciales,las cuales lo distinguen de los demás. En otras palabras, es la capacidad de conceptualizar entidades genéricas de información a partir de cosas concretas o en captar las características esenciales de un objeto, así como su comportamiento.
Encapsulamiento
El encapsulamiento consiste en unir en la clase las características y comportamientos, esto es, las variables y métodos. Es tener todo esto es una sola entidad. En los lenguajes estructurados esto era imposible. Es evidente que el encapsulamiento se logra gracias a la abstracción y el ocultamiento que veremos a continuación.
La utilidad del encapsulamiento va por la facilidad para manejar la complejidad, ya que tendremos a las clases como cajas negras donde sólo se conoce el comportamiento pero no los detalles internos, y esto es conveniente porque nos interesará será conocer qué hace la clase pero no será necesario saber cómo lo hace.
Al encapsular los datos del objeto, se maximiza la reutilizabilidad, se reduce la dependencia de los datos y se minimiza el tiempo de depuración.
En otras palabras, es la capacidad de esconderlos detalles de como funciona algo, detrás de una interfaz.
- Solo se necesita conocerla interfaz para poder usar alguna cosa
- El usuario no se ve afectado si se cambia o mejora el funcionamiento interno de algo, mientras se mantenga la interface
- El estado de un objeto no puede ser modificado por los objetos clientes directamente.
- Los valores de los atributos solo pueden mostrarse o cambiarse por las operaciones proporcionadas en el interface
Polimorfismo
Polimorfismo es la habilidad que adquieren los objetos de responder en forma diferente al mismo mensaje. Es decir, el mismo mensaje que se envía a muchos tipos de objetos, toma “muchas formas” y de ahí viene el término polimorfismo.
Polimorfismo es la habilidad de esconder diferentes implementaciones tras una sola interface.
Ejemplo
Pensemos en las Figuras Geométricas. Todas las Figuras Geométricas tienen como característica el poder calcular su área. Sin embargo, cada figura puede realizar esta operación de forma distinta.
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. Estos módulos se pueden compilar por separado, pero tienen conexiones con otros módulos. Al igual que la encapsulación, los lenguajes soportan la modularidad de diversas formas.
No hay comentarios:
Publicar un comentario