Está en la página 1de 6

Objeto (programacin)

1 Denicin de objeto

En el paradigma de programacin orientada a objetos


(POO, o bien OOP en ingls), un objeto es una unidad
dentro de un programa de computadora que consta de un
estado y de un comportamiento, que a su vez constan respectivamente de datos almacenados y de tareas realizables durante el tiempo de ejecucin. Un objeto puede ser
creado instanciando una clase, como ocurre en la programacin orientada a objetos, o mediante escritura directa
de cdigo y la replicacin otros objetos, como ocurre en
la programacin basada en prototipos.

En losofa un objeto es aquello que puede ser observado,


estudiado y aprendido, en contraposicin a la representacin abstracta de ese objeto que se crea en la mente a
travs del proceso de generalizacin. Un objeto en POO
representa alguna entidad de la vida real, es decir, alguno
de los objetos que pertenecen al negocio con que estamos
trabajando o al problema con el que nos estamos enfrentando, y con los que podemos interactuar. A travs del
estudio de ellos se adquiere el conocimiento necesario para, mediante la abstraccin y la generalizacin, agruparlos segn sus caractersticas en conjuntos. Estos conjuntos determinan las clases de objetos con las que estamos
trabajando. Primero existen los objetos; luego aparecen
las clases en funcin de la solucin que estemos buscando. sta es la forma ms comn de adquirir conocimiento
aunque no es la nica. En ocasiones, cuando el observador es un experto del negocio (o del problema), el proceso
puede ser a la inversa y comenzar el anlisis en una base
terica abstracta, sustentada por el conocimiento previo
que da lugar primeramente a clases de objetos que satisfagan las necesidades de la solucin.

Estos objetos interactan unos con otros, en contraposicin a la visin tradicional en la cual un programa es una
coleccin de subrutinas (funciones o procedimientos), o
simplemente una lista de instrucciones para el computador. Cada objeto es capaz de recibir mensajes, procesar
datos y enviar mensajes a otros objetos de manera similar
a un servicio.
En el mundo de la programacin orientada a objetos
(POO), un objeto es el resultado de la instanciacin de
una clase.[1] Una clase es el anteproyecto que ofrece la
funcionalidad en ella denida, pero sta queda implementada slo al crear una instancia de la clase, en la forma de
un objeto. Por ejemplo: dado un plano para construir sillas (una clase de nombre clase_silla), entonces una silla
concreta, en la que podemos sentarnos, construida a partir de este plano, sera un objeto de clase_silla. Es posible crear (construir) mltiples objetos (sillas) utilizando
la denicin de la clase (plano) anterior. Los conceptos
de clase y objetos son anlogos a los de tipo de datos y
variable; es decir, denida una clase podemos crear objetos de esa clase, igual que disponiendo de un determinado tipo de dato (por ejemplo el tipo entero), podemos
denir variables de dicho tipo:

Estos conceptos son parte de la base terica de la idea de


objeto y clase utilizados en la POO. Los objetos tienen
caractersticas fundamentales que nos permiten conocerlos mediante la observacin, identicacin y el estudio
posterior de su comportamiento; estas caractersticas son:
Identidad
Comportamiento
Estado

int a,b;

En las ramas de las ciencias de la computacin ms estrictamente matemticas, el trmino objeto es usado en
sentido puramente matemtico para referirse a cualquier
cosa. Esta interpretacin resulta til para discutir sobre teoras abstractas, pero no es sucientemente concreta para servir como denicin de un tipo primitivo
en discusiones de ramas ms especcas, como en la
programacin, que est ms cerca de clculos reales y el
procesamiento de informacin.

( 'int' es un tipo de dato y 'a' y 'b' son variables de tipo


entero con las que podemos operar)

Para utilizar la funcionalidad denida en una clase en particular (salvo en las clases abstractas), primeramente es
necesario crear un objeto de esa clase. De la misma manera, para una persona que desea sentarse, las especicaciones para construir una silla sern de poca utilidad;
lo que se necesita es una silla real construida a partir de
esas especicaciones. Siguiendo con la analoga anterior,
tambin se puede decir que para hacer operaciones arit- 1.1 Identidad
mticas, de nada sirve por s solo el tipo entero (int); para
ello necesitamos variables (o constantes) con las que ope- La identidad es la propiedad que permite diferenciar a un
objeto y distinguirse de otros. Generalmente esta propierar.
1

OBJETOS EN LA PROGRAMACIN ORIENTADA A OBJETOS

dad es tal, que da nombre al objeto. Tomemos por ejemplo el verde como un objeto concreto de una clase color;
la propiedad que da identidad nica a este objeto es precisamente su color verde. Tanto es as que para nosotros
no tiene sentido usar otro nombre para el objeto que no
sea el valor de la propiedad que lo identica.

miento de la informacin en ltima instancia requieren


de una representacin en la memoria de la computadora.
En este sentido, los objetos son primitivas fundamentales
necesarias para denir de forma precisa conceptos como referencias, variables y vinculacin de nombres. En
ciencias de la computacin se utiliza cotidianamente la
En programacin la identidad de los objetos sirve pa- interpretacin ms concreta de objeto en lugar de las ms
ra comparar si dos objetos son iguales o no. No es raro abstractas sin que esto sea considerado un error.
encontrar que en muchos lenguajes de programacin la Es preciso hacer notar que aunque un bloque de memoria
identidad de un objeto est determinada por la direccin puede aparecer contiguo en un nivel de abstraccin y no
de memoria de la computadora en la que se encuentra el contiguo en otro, lo importante es que este aparece contiobjeto, pero este comportamiento puede ser variado re- guo para el programa, quien lo trata como un objeto. Por
deniendo la identidad del objeto a otra propiedad.
este motivo, los detalles de implementacin privados de
un modelo de objetos no deben ser expuestos al cliente
del objeto, y estos pueden ser cambiados sin que se requieran cambios al cdigo cliente.
1.2 Comportamiento
El comportamiento de un objeto est directamente relacionado con su funcionalidad y determina las operaciones que este puede realizar o a las que puede responder
ante mensajes enviados por otros objetos. La funcionalidad de un objeto est determinada, primariamente, por
su responsabilidad. Una de las ventajas fundamentales de
la POO es la reusabilidad del cdigo; un objeto es ms fcil de reutilizarse en tanto su responsabilidad sea mejor
denida y ms concreta.
Una tarea fundamental a la hora de disear una aplicacin
informtica es denir el comportamiento que tendrn los
objetos de las clases involucradas en la aplicacin, asociando la funcionalidad requerida por la aplicacin a las
clases adecuadas.

Los objetos en la computadora existen entonces, slo


dentro de contextos capaces de reconocerlos; un espacio
de memoria slo contiene un objeto si un programa lo trata como tal (por ejemplo, reservndolo para uso exclusivo
de un procedimiento especco y/o asocindole un tipo
de dato). As, el tiempo de vida de un objeto es el tiempo durante el cual este es tratado como un objeto. Es por
esto que los objetos son entidades conceptuales, a pesar
de su presencia fsica en la memoria de la computadora.
En otras palabras, los conceptos abstractos que no ocupen espacio de memoria en tiempo de ejecucin, no son,
de acuerdo con esta denicin, objetos. Ejemplos de estos conceptos son: patrones de diseo exhibidos por un
conjunto de clases y tipos de datos en lenguajes de programacin que utilizan tipos estticos.

Se llama objeto fantasma a un objeto que no es


referenciado en un programa, y que por tanto no sirve a
ningn propsito. En un lenguaje que posea un recolector
El estado de un objeto se reere al conjunto de atributos de basura, este marcar la memoria ocupada por el objeto
y sus valores en un instante de tiempo dado. El compor- como libre, aunque sta todava contendr los datos del
tamiento de un objeto puede modicar el estado de este. objeto hasta el momento en que sea reescrita.
Cuando una operacin de un objeto modica su estado
se dice que esta tiene efecto colateral.

1.3

Estado

Esto tiene especial importancia en aplicaciones que crean


varios hilos de ejecucin. Si un objeto es compartido por
varios hilos y en el transcurso de sus operaciones estas
modican el estado del objeto, es posible que se deriven
errores del hecho de que alguno de los hilos asuma que el
estado del objeto no cambiar (Vase Condicin de carrera).

Representacin en las computadoras

Los objetos, aunque son entidades conceptuales, dado el


diseo de las computadoras, se corresponde directamente con bloques de memoria de tamao y localizacin especcos. Esto ocurre porque los clculos y el procesa-

3 Objetos en la programacin
orientada a objetos

En programacin orientada a objetos (POO), una instancia de programa (por ejemplo un programa ejecutndose
en una computadora) es tratada como un conjunto dinmico de objetos interactuando entre s. Los objetos en la
POO extienden la nocin ms general descrita en secciones anteriores para modelar un tipo muy especco que
est denido fundamentalmente por:
1. atributos, que representan los datos asociados al
objeto, o, lo que es lo mismo, sus propiedades o caractersticas. Los atributos y sus valores en un momento dado, determinan el estado de un objeto.
2. mtodos, que acceden a los atributos de una ma-

3.2

Instanciacin de una clase en un objeto

nera predenida e implementan el comportamiento 3.2 Instanciacin de una clase en un objeto


del objeto.
Para crear un objeto de tipo 'Aritmetica' (instanciar Aritmetica) en C++ se hara de la siguiente forma:
Los atributos y mtodos de un objeto estn denidos por
su clase, aunque (en un lenguaje dinmico como Python o Aritmetica calculador = Aritmetica(); #Otra manera
Ruby) una instancia puede poseer atributos que no fueron usando punteros Aritmetica* calculador1 = new Aritmedenidos en su clase. Algo similar ocurre con los mto- tica();
dos: una instancia puede contener mtodos que no estn
denidos en su clase de la misma manera que una clase la misma operacin usando python sera as:
puede declarar ciertos mtodos como mtodos de clase, y estos (en dependencia del lenguaje) podrn estar o calculador = Aritmetica()
no presentes en la instancia.
En el caso de la mayora de los objetos, los atributos solo
pueden ser accedidos a travs de los mtodos; de esta ma- 3.3 Operando con un objeto
nera es ms fcil garantizar que los datos permanecern
siempre en un estado bien denido (invariante de clase). Una vez que tenemos un objeto de 'Aritmetica', podeEn un lenguaje en el que cada objeto es creado a partir mos usarlo para realizar clculos sobre dos nmeros. En
de una clase, un objeto es llamado una instancia de esa C++ contamos con dos objetos de ejemplo: calculador
clase. Cada objeto pertenece a un tipo y dos objetos que y calculador1"; en esta ltima variable en realidad hemos
pertenezcan a la misma clase tendrn el mismo tipo de almacenado la direccin de memoria del objeto creado.
dato. Crear una instancia de una clase es entonces referido En este lenguaje esto sienta diferencias a la hora de utilizar el objeto.
como instanciar la clase.
En casi todos los lenguajes de programacin orientados a
objeto, el operador punto (.) es usado para referirse o
llamar a un mtodo particular de un objeto. Un ejemplo
de lenguaje que no siempre usa este operador es C++, ya
que para referirse a los mtodos de un objeto a travs de
un puntero al objeto se utiliza el operador (->).

Para calcular la suma entre 78 y 69 usando un objeto calculador necesitaramos un cdigo como el siguiente en
C++:
int resultado = 0; resultado = calculador.sumar(78, 69);
#Otra manera usando punteros resultado = calculador1>sumar(78, 69);

Considrese como ejemplo una clase aritmtica llamada


Aritmtica. Esta clase contiene mtodos como sumar, ahora usando Python para sumar dos nmeros con el obrestar, multiplicar, dividir, etc. que calculan el re- jeto calculador:
sultado de realizar estas operaciones sobre dos nmeros.
resultado = calculador.sumar(78, 69)
Un objeto de esta clase puede ser utilizado para calcular el producto de dos nmeros, pero primeramente sera necesario denir dicha clase y crear un objeto. En las Otro ejemplo del mundo real de un objeto podra ser mi
secciones a continuacin se muestra cmo hacer esto uti- perro, el cual es una instancia de un tipo (una clase) llamada perro, la que es una subclase de la clase animal.
lizando dos lenguajes de programacin: C++ y Python.
En el caso de un objeto polimrco, algunos detalles de su
tipo pueden ser ignorados; por ejemplo, el objeto mi perro puede ser usado en un mtodo que espera recibir un
3.1 Declaracin de una clase
animal. Tambin podra usarse un objeto gato, puesto que esta tambin pertenece a la clase animal. Pero
Esta clase podra ser denida de la siguiente manera en mientras es accedido como un animal, algunos atribuC++:
tos de un perro o un gato permanecern no disponiclass Aritmetica { public: inline int sumar (int a, int b) bles, como la cola, porque no todos los animales tienen
const { return a + b; } inline int restar (int a, int b) const cola.
{ return a - b; } inline oat multiplicar (int a, int b) const
{ return a * b; } inline oat dividir (int a, int b) const {
3.3.1 Atributos dinmicos en objetos
return a / b; } };
Python y C++ son lenguajes con caractersticas muy diferentes. Python utiliza un sistema de tipos dinmico y C++
class Aritmetica: def sumar(self, a, b): return a + b def en cambio, uno esttico o estricto. El sistema de tipos usarestar(self, a, b): return a - b def multiplicar(self, a, b): do en Python permite al programador agregar atributos a
return a * b def dividir(self, a, b): return a / b
una instancia que no han sido denidos en la clase que le
dio origen, cosa que no es posible hacer en un lenguaje
o como sigue en Python:

como C++. Por ejemplo:

OBJETOS ESPECIALIZADOS

4.1 Composicin

La clase siguiente en Python no dene ningn atributo:

La composicin (tambin conocida como relacin asociativa) es un tipo de relacin que se establece entre dos
objetos que tienen comunicacin persistente. Se utiliza
para expresar que un par de objetos tienen una relacin
pero es posible hacer lo siguiente:
de dependencia para llevar a cabo su funcin, de modo
1: p = Prueba() 2: p.unNumero = 3 3: print(Atributo que uno de los objetos involucrados est compuesto por
unNumero de p = %s % p.unNumero) 4: Atributo el otro.
unNumero de p = 3
De manera prctica, es posible reconocer asociatividad
entre dos objetos A y B si la proposicin A tiene un
A la instancia de p creada en la lnea 1, le es asignado en B (o viceversa) es verdadera. Por ejemplo: una compula lnea 2 el valor 3, lo cual crea un atributo de nombre tador tiene un disco duro es verdadero; por tanto, un obunNumero en p de tipo int para almacenar el nmero 3. jeto computador tiene una relacin de composicin con
al menos un objeto disco duro.
class Prueba(object): pass

Relaciones entre objetos

Como ya se ha dicho antes, un sistema orientado a objetos est caracterizado por objetos que interactan entre
s. Estas interacciones suponen ciertos tipos de relaciones
entre los objetos del sistema. La semntica que expresa
un objeto en el sistema est determinada, en primer lugar,
por las relaciones que ste establece con otros objetos o
conjuntos de objetos. Tomemos como ejemplo un objeto
fecha, del que sin establecer ningn tipo de relacin, podra decirse que signica un da del ao particular. Pero si
relacionamos ese objeto fecha con un objeto Persona de
manera que represente la fecha en que esa persona naci,
en ese contexto dado, el mismo objeto fecha adoptara
un signicado diferente, el de un cumpleaos; aunque sigue siendo una fecha, ahora tiene otra idea asociada. Las
relaciones entre objetos no solo estn denidas por los
objetos que participan y la circunstancia que los relaciona, sino tambin por la cantidad de objetos (cardinalidad
de la relacin) y la direccin de la misma. Una relacin
puede tener cardinalidad:
uno a uno, ejemplo: un auto tiene un motor.
uno a muchos, ejemplo: un auto tiene muchas ruedas.
muchos a muchos, ejemplo: un auto se puede servir en muchas gasolineras y una gasolinera puede
servir a muchos autos.
y direccionalidad:
unidireccional, ejemplo: un auto tiene cuatro ruedas.
bidireccional
Las relaciones entre objetos ms generales son las siguientes:

4.2 Uso
Un objeto usa (conoce) a otro cuando puede enviarle
mensajes, por ejemplo, para requerir de este algn servicio. La composicin puede verse como un caso particular
de esta relacin.

4.3 Delegacin
En ocasiones, para lograr exibilidad de diseo, un objeto es implementado de forma tal que este delegue parte
de su funcionalidad en otro objeto. Esto es muy comn
en aplicaciones que hacen uso de interfaces grcas de
usuario, en las que los controles grcos generales delegan la accin que se ejecutar ante determinado estmulo
en otro objeto.

5 Objetos especializados
Algunos trminos para tipos especializados de objetos
son:
Singleton: un objeto del que solo puede existir una
nica instancia de su clase durante el tiempo de vida
del programa.
Functor: un objeto que puede ser utilizado como una
funcin.
Objeto inmutable: un objeto creado con un estado
jo y que no puede variar en el tiempo de vida del
mismo.
Objeto de primera clase: un objeto que puede ser
utilizado sin restricciones.
Contenedor: un objeto que contiene a otros objetos.
Fbrica de objetos: un objeto cuyo propsito es crear
otros objetos.

5
Metaobjeto: un objeto a partir del cual se pueden
crear otros objetos (comparable con una clase, la que
no necesariamente es un objeto).
Prototipo: un metaobjeto especializado a partir del
cual se pueden crear otros objetos copindolo.
Objeto todopoderoso: un objeto que sabe mucho o
hace mucho. Este es un ejemplo de antipatrn de diseo.
Antiobjeto: una metfora computacional til para
conceptualizar y solucionar problemas complejos,
usualmente con aproximaciones paralelas.

Vase tambin
Patrn de diseo

Referencias

[1] Schildt, Helbert. Java, Manual de referencia (7 edicin).


Mc Graw Hill. p. 105. ISBN 0-07-226385-7.

8 ORIGEN DEL TEXTO Y LAS IMGENES, COLABORADORES Y LICENCIAS

Origen del texto y las imgenes, colaboradores y licencias

8.1

Texto

Objeto (programacin) Fuente: https://es.wikipedia.org/wiki/Objeto_(programaci%C3%B3n)?oldid=91962328 Colaboradores: Robbot,


Dodo, Ejmeza, Tano4595, JavierCantero, MatiasBellone, Soulreaper, Yrbot, Jesuja, Otermin, BOTpolicia, CEM-bot, Laura Fiorucci,
Santhy, Fsd141, Thijs!bot, Escarbot, JAnDbot, Kved, Achata, Gsrdzl, TXiKiBoT, Cinevoro, Technopat, Jose gueredo, Elabra sanchez,
KLosma, Shooke, Lucien leGrey, Muro Bot, BOTarate, Piztu, Tirithel, Farisori, Eduardosalg, Nebulha, Juan Mayordomo, Aipni-Lovrij,
SilvonenBot, AVBOT, Diegusjaimes, Informatico25, Luckas-bot, Nallimbot, SuperBraulio13, Xqbot, Jkbw, Adryitan, Botarel, BOTirithel, Hprmedina, Auledas, Marsal20, Dinamik-bot, GrouchoBot, Wikilptico, Edslov, EmausBot, Savh, Africanus, Grillitus, Rubpe19,
Ksarasola, Invadibot, Utolotu, Federico1984, Elvisor, Helmy oved, Legobot, Addbot, Coins, Gaaplex, Aristides10, BenjaBot, Krassnine y
Annimos: 76

8.2

Imgenes

Archivo:Commons-emblem-question_book_orange.svg
Fuente:
https://upload.wikimedia.org/wikipedia/commons/1/1f/
Commons-emblem-question_book_orange.svg Licencia: CC BY-SA 3.0 Colaboradores: <a href='//commons.wikimedia.org/wiki/File:
Commons-emblem-issue.svg' class='image'><img alt='Commons-emblem-issue.svg' src='https://upload.wikimedia.org/wikipedia/
commons/thumb/b/bc/Commons-emblem-issue.svg/25px-Commons-emblem-issue.svg.png' width='25' height='25' srcset='https:
//upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Commons-emblem-issue.svg/38px-Commons-emblem-issue.svg.png
1.5x,
https://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Commons-emblem-issue.svg/50px-Commons-emblem-issue.svg.png 2x'
data-le-width='48' data-le-height='48' /></a> + <a href='//commons.wikimedia.org/wiki/File:Question_book.svg' class='image'><img
alt='Question
book.svg'
src='https://upload.wikimedia.org/wikipedia/commons/thumb/9/97/Question_book.svg/25px-Question_
book.svg.png' width='25' height='20' srcset='https://upload.wikimedia.org/wikipedia/commons/thumb/9/97/Question_book.svg/
38px-Question_book.svg.png 1.5x, https://upload.wikimedia.org/wikipedia/commons/thumb/9/97/Question_book.svg/50px-Question_
book.svg.png 2x' data-le-width='252' data-le-height='199' /></a> Artista original: GNOME icon artists, Jorge 2701

8.3

Licencia del contenido

Creative Commons Attribution-Share Alike 3.0