La programación orientada a
objetos es un paradigma surgido en los años 70, que utiliza objetos como
elementos fundamentales en la construcción de la solución. 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.
La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma
de programación que usa los objetosen sus
interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia,cohesión, abstracción, polimorfismo, acoplamiento y encapsulamiento. Su uso se popularizó a principios de la
década de los años 1990.
Entre los lenguajes orientados
a objetos se destacan los siguientes:
·
ABL Lenguaje de programación de OpenEdge de Progress Software
·
Ada
·
C++
·
C#
·
Clarion
·
D
·
Gambas
·
GObject
·
Genie
·
Harbour
·
Eiffel
·
Java
·
Ocaml
·
Oz
·
R
·
Pauscal [En
español]
·
Python
·
Ruby
·
Self
·
Magik (SmallWorld)
·
Vala
·
VB.NET
·
XBase++
·
Scala
La programación orientada a
objetos es una forma de programar que trata de encontrar una solución a estos
problemas. Entre los elementos principales de la POO, podremos encontrar
a:
Clase:
Definiciones de las
propiedades y comportamiento de un tipo de objeto concreto. La instanciación es
la lectura de estas definiciones y la creación de un objeto a partir de ella.
Herencia:
(Por ejemplo, herencia
de la clase C a la clase D) es la facilidad mediante la cual la clase D hereda
en ella cada uno de los atributos y operaciones de C, como si esos atributos y
operaciones hubiesen sido definidos por la misma D. Por lo tanto, puede usar
los mismos métodos y variables públicas declaradas en C. Los componentes
registrados como "privados" (private) también se heredan, pero como
no pertenecen a la clase, se mantienen escondidos al programador y sólo pueden
ser accedidos a través de otros métodos públicos. Esto es así para mantener
hegemónico el ideal de POO.
Objeto:
Instancia de una clase.
Entidad provista de un conjunto de propiedades o atributos (datos) y de
comportamiento o funcionalidad (métodos), los mismos que consecuentemente
reaccionan a eventos. Se corresponden con los objetos reales del mundo que nos
rodea, o con objetos internos del sistema (del programa). Es una instancia a
una clase.
Método:
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:
Características que
tiene la clase.
Mensaje:
Una comunicación
dirigida a un objeto, que le ordena que ejecute uno de sus métodos con ciertos
parámetros asociados al evento que lo generó.
Propiedad
o atributo:
Contenedor de un tipo de
datos asociados a un objeto (o a una clase de objetos), que hace los datos
visibles desde fuera del objeto y esto se define como sus características
predeterminadas, y cuyo valor puede ser alterado por la ejecución de algún
método.
Estado
interno:
Es una variable que se
declara privada, que puede ser únicamente accedida y alterada por un método del
objeto, y que se utiliza para indicar distintas situaciones posibles para el
objeto (o clase de objetos). No es visible al programador que maneja una
instancia de la clase.
Componentes
de un objeto:
Atributos, identidad,
relaciones y métodos.
Identificación
de un objeto:
Un objeto se representa
por medio de una tabla o entidad que esté compuesta por sus atributos y
funciones correspondientes.En comparación con un lenguaje
imperativo, una "variable" no es más que un contenedor interno del
atributo del objeto o de un estado interno, así como la "función" es
un procedimiento interno del método del objeto.
Características de la POO:
Abstracción:
Denota las
características esenciales de un objeto, donde se capturan sus comportamientos.
Cada objeto en el sistema sirve como modelo de un "agente" abstracto
que puede realizar trabajo, informar y cambiar su estado, y
"comunicarse" con otros objetos en el sistema sin revelar cómo se implementan estas características.
Los procesos, las funciones o los métodos pueden también ser abstraídos, y,
cuando lo están, una variedad de técnicas son requeridas para ampliar una
abstracción. El proceso de abstracción permite seleccionar las características
relevantes dentro de un conjunto e identificar comportamientos comunes para
definir nuevos tipos de entidades en el mundo real. La abstracción es clave en
el proceso de análisis y diseño orientado a objetos, ya que mediante ella
podemos llegar a armar un conjunto de clases que permitan modelar la realidad o
el problema que se quiere atacar.
Encapsulamiento:
Significa reunir todos
los elementos que pueden considerarse pertenecientes a una misma entidad, al
mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema.
Algunos autores confunden este concepto con el principio de ocultación,
principalmente porque se suelen emplear conjuntamente.
Modularidad:
Se denomina modularidad
a 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.
Polimorfismo:
Comportamientos
diferentes, asociados a objetos distintos, pueden compartir el mismo nombre; al
llamarlos por ese nombre se utilizará el comportamiento correspondiente al
objeto que se esté usando. O, dicho de otro modo, las referencias y las
colecciones de objetos pueden contener objetos de diferentes tipos, y la
invocación de un comportamiento en una referencia producirá el comportamiento
correcto para el tipo real del objeto referenciado. Cuando esto ocurre en
"tiempo de ejecución", esta última característica se llama asignación tardía o asignación
dinámica. Algunos lenguajes proporcionan medios más estáticos (en
"tiempo de compilación") de polimorfismo, tales como las plantillas y
la sobrecarga de operadores de C++.
Herencia:
Las clases no se
encuentran 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; siendo de
alta complejidad técnica por lo cual suele recurrirse a la herencia virtual
para evitar la duplicación de datos.