-
int a,b;
(
'int' es un tipo de dato y 'a' y 'b' son variables de tipo entero con
las que podemos operar)
Para
utilizar la funcionalidad definida 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 especificaciones para construir una silla serán de
poca utilidad; lo que se necesita es una silla real construida a
partir de esas especificaciones. Siguiendo con la analogía anterior,
también se puede decir que para hacer operaciones aritméticas, de
nada sirve por sí solo el tipo entero (int); para ello
necesitamos variables (o constantes) con las que operar
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 través del estudio de ellos se adquiere el
conocimiento necesario para, mediante la abstracción y la
generalización, agruparlos según sus características en
conjuntos. Estos conjuntos determinan las clases
de objetos con las que estamos trabajando. Primero existen los
objetos; luego aparecen las clases en función de la solución que
estemos buscando. Ésta es la forma más común 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 análisis en una base teórica abstracta,
sustentada por el conocimiento previo que da lugar primeramente a
clases de objetos que satisfagan las necesidades de la solución.
Estos
conceptos son parte de la base teórica de la idea de objeto y
clase
utilizados en la POO.
Los objetos tienen características fundamentales que nos permiten
conocerlos mediante la observación, identificación y el estudio
posterior de su comportamiento; estas características son:
- Identidad
- Comportamiento
- Estado
En
las ramas de las ciencias
de la computación
más estrictamente matemáticas,
el término objeto es usado en sentido puramente matemático para
referirse a cualquier "cosa". Esta interpretación
resulta útil para discutir sobre teorías abstractas, pero no es
suficientemente concreta para servir como definición de un tipo
primitivo
en discusiones de ramas más específicas, como en la
programación,
que está más cerca de cálculos reales y el procesamiento
de información.
Identidad
La
identidad es la propiedad que permite a un objeto diferenciarse de
otros. Generalmente esta propiedad 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 identifica.
En
programación
la identidad de los objetos sirve para comparar si dos objetos son
iguales
o no. No es raro encontrar que en muchos lenguajes
de programación
la identidad de un objeto esté determinada por la dirección de
memoria
de la computadora
en la que se encuentra el objeto, pero este comportamiento puede
ser variado redefiniendo la identidad del objeto a otra propiedad.
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 código;
un objeto es más fácil de reutilizarse en tanto su
responsabilidad sea mejor definida y más concreta.
Una
tarea fundamental a la hora de diseñar una aplicación
informática
es definir el comportamiento que tendrán los objetos de las
clases involucradas en la aplicación,
asociando la funcionalidad requerida por la aplicación a las
clases adecuadas.
Estado
El
estado de un objeto se refiere al conjunto de los valores de sus
atributos en un instante de tiempo dado. El comportamiento de un
objeto puede modificar el estado de este. Cuando una operación de
un objeto modifica su estado se dice que esta tiene "efecto
colateral".
Esto
tiene especial importancia en aplicaciones que crean varios hilos
de ejecución.
Si un objeto es compartido por varios hilos
y en el transcurso de sus operaciones estas modifican 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á
En
programación
orientada a objetos
(POO), una instancia de programa (por ejemplo un programa
ejecutándose en una computadora) es tratada como un conjunto
dinámico
de objetos interactuando entre sí. Los objetos en la POO
extienden la noción más general descrita en secciones anteriores
para modelar un tipo
muy específico que está definido fundamentalmente por:
- atributos, que representan los datos asociados al objeto, o, lo que es lo mismo, sus propiedades o características. Los atributos y sus valores en un momento dado, determinan el estado de un objeto.
- métodos, que acceden a los atributos de una manera predefinida e implementan el comportamiento del objeto.
Los
atributos y métodos de un objeto están definidos por su clase,
aunque (en un lenguaje dinámico como Python
o Ruby)
una instancia puede poseer atributos que no fueron definidos en su
clase. Algo similar ocurre con los métodos: una instancia puede
contener métodos que no estén definidos en su clase de la misma
manera que una clase puede declarar ciertos métodos como "métodos
de clase", y estos (en dependencia del lenguaje) podrán estar o
no presentes en la instancia.
En
el caso de la mayoría de los objetos, los atributos solo pueden ser
accedidos a través de los métodos; de esta manera es más fácil
garantizar que los datos permanecerán siempre en un estado bien
definido (invariante
de clase).
En
un lenguaje
en el que cada objeto es creado a partir de una clase, un objeto es
llamado una instancia
de esa clase. Cada objeto pertenece a un tipo
y dos objetos que pertenezcan a la misma clase tendrán el mismo tipo
de dato.
Crear una instancia de una clase es entonces referido como instanciar
la clase.
En
casi todos los lenguajes
de programación
orientados a objeto, el operador "punto" (.) es usado para
referirse o "llamar" a un método particular de un objeto.
Un ejemplo de lenguaje que no siempre usa este operador es C++,
ya que para referirse a los métodos de un objeto a través de un
puntero al objeto se utiliza el operador (->).
Considérese
como ejemplo una clase aritmética llamada Aritmética. Esta clase
contiene métodos como "sumar", "restar",
"multiplicar", "dividir", etc. que calculan el
resultado de realizar estas operaciones sobre dos números.
Un
objeto de esta clase puede ser utilizado para calcular el producto de
dos números, pero primeramente sería necesario definir dicha clase
y crear un objeto. En las secciones a continuación se muestra cómo
hacer esto utilizando dos lenguajes de programación: C++
y Python.
Declaración de una clase
Esta
clase podría ser definida de la siguiente manera en C++:
class Aritmetica
{
public:
inline int sumar (int a, int b) const
{
return a + b;
}
inline int restar (int a, int b) const
{
return a - b;
}
inline float multiplicar (int a, int b) const
{
return a * b;
}
inline float dividir (int a, int b) const
{
return a / b;
}
};
o
como sigue en Python:
class Aritmetica:
def sumar(self, a, b):
return a + b
def restar(self, a, b):
return a - b
def multiplicar(self, a, b):
return a * b
def dividir(self, a, b):
return a / b
Instanciación de una clase en un objeto
Para
crear un objeto de tipo 'Aritmetica' (instanciar Aritmetica) en C++
se haría de la siguiente forma:
Aritmetica calculador = Aritmetica();
#Otra manera usando punteros
Aritmetica* calculador1 = new Aritmetica();
la
misma operación usando python
sería así:
calculador = Aritmetica()
No hay comentarios:
Publicar un comentario