Está en la página 1de 8

PROGRAMACIN ORIENTADA A OBJETOS (POO)

PROGRAMACION ORIENTADA A OBJETOS



La programacin orientada a objetos o POO (OOP segn sus siglas en ingls) es un
paradigma de programacin que usa los objetos en sus interacciones, para disear
aplicaciones y programas informticos. Est basado en varias tcnicas, incluyendo
herencia, cohesin, abstraccin, polimorfismo, acoplamiento y encapsulamiento. Su uso se
populariz a principios de la dcada de los aos 1990. En la actualidad, existe una gran
variedad de lenguajes de programacin que soportan la orientacin a objetos.
Introduccin
Los objetos son entidades que tienen un determinado estado, comportamiento (mtodo) e
identidad:
El estado est compuesto de datos o informaciones; sern uno o varios atributos a
los que se habrn asignado unos valores concretos (datos).
El comportamiento est definido por los mtodos o mensajes a los que sabe
responder dicho objeto, es decir, qu operaciones se pueden realizar con l.
La identidad es una propiedad de un objeto que lo diferencia del resto; dicho con
otras palabras, es su identificador (concepto anlogo al de identificador de una
variable o una constante).
Un objeto contiene toda la informacin que permite definirlo e identificarlo frente a otros
objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder
tener valores bien diferenciados en sus atributos. A su vez, los objetos disponen de
mecanismos de interaccin llamados mtodos, que favorecen la comunicacin entre ellos.
Esta comunicacin favorece a su vez el cambio de estado en los propios objetos. Esta
caracterstica lleva a tratarlos como unidades indivisibles, en las que no se separa el estado
y el comportamiento.
Los mtodos (comportamiento) y atributos (estado) estn estrechamente relacionados por la
propiedad de conjunto. Esta propiedad destaca que una clase requiere de mtodos para
poder tratar los atributos con los que cuenta. El programador debe pensar indistintamente
en ambos conceptos, sin separar ni darle mayor importancia a alguno de ellos. Hacerlo
podra producir el hbito errneo de crear clases contenedoras de informacin por un lado y
clases con mtodos que manejen a las primeras por el otro. De esta manera se estara
realizando una programacin estructurada camuflada en un lenguaje de programacin
orientado a objetos.
La POO difiere de la programacin estructurada tradicional, en la que los datos y los
procedimientos estn separados y sin relacin, ya que lo nico que se busca es el
procesamiento de unos datos de entrada para obtener otros de salida. La programacin
estructurada anima al programador a pensar sobre todo en trminos de procedimientos o
funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan.
En la programacin estructurada solo se escriben funciones que procesan datos. Los
programadores que emplean Programacin Orientada a Objetos, en cambio, primero
definen objetos para luego enviarles mensajes solicitndoles que realicen sus mtodos por
s mismos.

Origen
Los conceptos de la programacin orientada a objetos tienen origen en Simula 67, un
lenguaje diseado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard,
del Centro de Cmputo Noruego en Oslo. En este centro se trabajaba en simulaciones de
naves, que fueron confundidas por la explosin combinatoria de cmo las diversas
cualidades de diferentes naves podan afectar unas a las otras. La idea surgi al agrupar los
diversos tipos de naves en diversas clases de objetos, siendo responsable cada clase de
objetos de definir sus propios datos y comportamientos. Fueron refinados ms tarde en
Smalltalk, desarrollado en Simula en Xerox PARC (cuya primera versin fue escrita sobre
Basic) pero diseado para ser un sistema completamente dinmico en el cual los objetos se
podran crear y modificar "sobre la marcha" (en tiempo de ejecucin) en lugar de tener un
sistema basado en programas estticos.
La programacin orientada a objetos se fue convirtiendo en el estilo de programacin
dominante a mediados de los aos ochenta, en gran parte debido a la influencia de C++,
una extensin del lenguaje de programacin C. Su dominacin fue consolidada gracias al
auge de las Interfaces grficas de usuario, para las cuales la programacin orientada a
objetos est particularmente bien adaptada. En este caso, se habla tambin de programacin
dirigida por eventos.
Las caractersticas de orientacin a objetos fueron agregadas a muchos lenguajes existentes
durante ese tiempo, incluyendo Ada, BASIC, Lisp y Pascal, entre otros. La adicin de estas
caractersticas a los lenguajes que no fueron diseados inicialmente para ellas condujo a
menudo a problemas de compatibilidad y en la capacidad de mantenimiento del cdigo. Los
lenguajes orientados a objetos "puros", por su parte, carecan de las caractersticas de las
cuales muchos programadores haban venido a depender. Para saltar este obstculo, se
hicieron muchas tentativas para crear nuevos lenguajes basados en mtodos orientados a
objetos, pero permitiendo algunas caractersticas imperativas de maneras "seguras". El
Eiffel de Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con esos
objetivos, pero ahora ha sido esencialmente reemplazado por Java, en gran parte debido a la
aparicin de Internet y a la implementacin de la mquina virtual de Java en la mayora de
navegadores. PHP en su versin 5 se ha modificado; soporta una orientacin completa a
objetos, cumpliendo todas las caractersticas propias de la orientacin a objetos.

Conceptos Fundamentales

La programacin orientada a objetos es una forma de programar que trata de encontrar una
solucin a estos problemas. Introduce nuevos conceptos, que superan y amplan conceptos
antiguos ya conocidos. Entre ellos destacan los siguientes:
Clase: Definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La
instanciacin es la lectura de estas definiciones y la creacin de un objeto a partir de ellas.
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 mtodos y variables pblicas declaradas en C. Los componentes registrados como
"privados" (private) tambin se heredan, pero como no pertenecen a la clase, se mantienen
escondidos al programador y slo pueden ser accedidos a travs de otros mtodos pblicos.
Esto es as para mantener hegemnico el ideal de POO.
Objeto: Instancia de una clase. Entidad provista de un conjunto de propiedades o atributos
(datos) y de comportamiento o funcionalidad (mtodos), 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.

Mtodo: Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecucin se
desencadena tras la recepcin de un "mensaje". Desde el punto de vista del
comportamiento, es lo que el objeto puede hacer. Un mtodo puede producir un cambio en
las propiedades del objeto, o la generacin de un "evento" con un nuevo mensaje para otro
objeto del sistema.

Evento: Es un suceso en el sistema (tal como una interaccin del usuario con la mquina, o
un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje
adecuado al objeto pertinente. Tambin se puede definir como evento la reaccin que puede
desencadenar un objeto; es decir, la accin que genera.

Atributos: Caractersticas que tiene la clase.

Mensaje: Una comunicacin dirigida a un objeto, que le ordena que ejecute uno de sus
mtodos con ciertos parmetros 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
caractersticas predeterminadas, y cuyo valor puede ser alterado por la ejecucin de algn
mtodo.

Estado interno: Es una variable que se declara privada, que puede ser nicamente accedida
y alterada por un mtodo 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 mtodos.

Identificacin de un objeto: Un objeto se representa por medio de una tabla o entidad que
est compuesta por sus atributos y funciones correspondientes.
En comparacin con un lenguaje imperativo, una "variable" no es ms que un contenedor
interno del atributo del objeto o de un estado interno, as como la "funcin" es un
procedimiento interno del mtodo del objeto.

Caractersticas de la POO
Existe un acuerdo acerca de qu caractersticas
contempla la "orientacin a objetos". Las caractersticas siguientes son las ms importantes:
Abstraccin: Denota las caractersticas 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 cmo se implementan estas caractersticas. Los procesos, las
funciones o los mtodos pueden tambin ser abstrados, y, cuando lo estn, una variedad de
tcnicas son requeridas para ampliar una abstraccin. El proceso de abstraccin permite
seleccionar las caractersticas relevantes dentro de un conjunto e identificar
comportamientos comunes para definir nuevos tipos de entidades en el mundo real. La
abstraccin es clave en el proceso de anlisis y diseo 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 abstraccin. Esto permite aumentar
la cohesin de los componentes del sistema. Algunos autores confunden este concepto con
el principio de ocultacin, principalmente porque se suelen emplear conjuntamente.

Modularidad: Se denomina modularidad a la propiedad que permite subdividir una
aplicacin en partes ms pequeas (llamadas mdulos), cada una de las cuales debe ser tan
independiente como sea posible de la aplicacin en s y de las restantes partes. Estos
mdulos se pueden compilar por separado, pero tienen conexiones con otros mdulos. Al
igual que la encapsulacin, los lenguajes soportan la modularidad de diversas formas.

Principio de ocultacin: Cada objeto est aislado del exterior, es un mdulo natural, y cada
tipo de objeto expone una interfaz a otros objetos que especifica cmo pueden interactuar
con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su
modificacin por quien no tenga derecho a acceder a ellas; solamente los propios mtodos
internos del objeto pueden acceder a su estado. Esto asegura que otros objetos no puedan
cambiar el estado interno de un objeto de manera inesperada, eliminando efectos
secundarios e interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un
acceso directo a los datos internos del objeto de una manera controlada y limitando el grado
de abstraccin. La aplicacin entera se reduce a un agregado o rompecabezas de objetos.

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 invocacin de un
comportamiento en una referencia producir el comportamiento correcto para el tipo real
del objeto referenciado. Cuando esto ocurre en "tiempo de ejecucin", esta ltima
caracterstica se llama asignacin tarda o asignacin dinmica. Algunos lenguajes
proporcionan medios ms estticos (en "tiempo de compilacin") 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 jerarqua de clasificacin. 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 comn. Cuando un objeto hereda de ms de una clase se dice que hay
herencia mltiple; siendo de alta complejidad tcnica por lo cual suele recurrirse a la
herencia virtual para evitar la duplicacin de datos.

Recoleccin de basura: La recoleccin de basura o garbage collection es la tcnica por la
cual el entorno de objetos se encarga de destruir automticamente, y por tanto desvincular
la memoria asociada, los objetos que hayan quedado sin ninguna referencia a ellos. Esto
significa que el programador no debe preocuparse por la asignacin o liberacin de
memoria, ya que el entorno la asignar al crear un nuevo objeto y la liberar cuando nadie
lo est usando. En la mayora de los lenguajes hbridos que se extendieron para soportar el
Paradigma de Programacin Orientada a Objetos como C++ u Object Pascal, esta
caracterstica no existe y la memoria debe desasignarse expresamente.

Lenguajes orientados a objetos
Simula (1967) es aceptado como el primer lenguaje que posee las caractersticas principales
de un lenguaje orientado a objetos. Fue creado para hacer programas de simulacin, en
donde los "objetos" son la representacin de la informacin ms importante. Smalltalk
(1972 a 1980) es posiblemente el ejemplo cannico, y con el que gran parte de la teora de
la programacin orientada a objetos se ha desarrollado.
Entre los lenguajes orientados a objetos se destacan los siguientes:
ABAP -> SAP Lenguaje orientado a eventos
ABL Lenguaje de programacin de OpenEdge de Progress Software
ActionScript
ActionScript 3
Ada
C++
C#
Clarion
Clipper
1

D
Object Pascal (Embarcadero Delphi)
Gambas
Genie
Harbour
Eiffel
Fortran 90/95
Java
JavaScript
2

Lexico
3

Objective-C
Ocaml
Oz
R
Perl
4

PHP
5

PowerBuilder
Python
Ruby
Self
Smalltalk
6

Magik (SmallWorld)
Vala
VB.NET
Visual FoxPro
7

Visual Basic 6.0
Visual DataFlex
Visual Objects
XBase++
Lenguaje DRP
Scala
8

Muchos de estos lenguajes de programacin no son puramente orientados a objetos, sino
que son hbridos que combinan la POO con otros paradigmas.
Al igual que C++, otros lenguajes, como OOCOBOL, OOLISP, OOPROLOG y Object
REXX, han sido creados aadiendo extensiones orientadas a objetos a un lenguaje de
programacin clsico.
Un nuevo paso en la abstraccin de paradigmas de programacin es la Programacin
Orientada a Aspectos (POA). Aunque es todava una metodologa en estado de maduracin,
cada vez atrae a ms investigadores e incluso proyectos comerciales en todo el mundo.

Resumen
La programacin orientada a objetos es un paradigma surgido en los aos 70, que utiliza
objetos como elementos fundamentales en la construccin de la solucin. Un objeto es una
abstraccin de algn hecho o ente del mundo real, con atributos que representan sus
caractersticas o propiedades, y mtodos que emulan su comportamiento o actividad. Todas
las propiedades y mtodos 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.

También podría gustarte