Documentos de Académico
Documentos de Profesional
Documentos de Cultura
La Programación Orientada a Objetos (de ahora en más como POO) es lo que se conoce como
un paradigma o modelo de programación.
Esto significa que no es un lenguaje específico, o una tecnología, sino una forma de programar,
una manera de plantearse la programación.
No es la única (o necesariamente mejor o peor que otras), pero se ha constituido en una de las
formas de programar más populares e incluso muchos de los lenguajes que usamos hoy día lo
soportan o están diseñados bajo ese modelo, entre otros, C#.
Lo que caracteriza a la POO es que intenta llevar al mundo del código, lo mismo que
encontramos en el mundo real
Cuando miramos a nuestro alrededor, ¿qué vemos? Pues cosas, objetos, pero podemos
reconocer estos objetos porque cada objeto pertenece a una clase. Eso nos permite distinguir,
por ejemplo, un perro de un auto (porque son de clases diferentes) y también un TV de
otro (porque, aunque sean iguales, cada uno es un objeto distinto).
Esto significa que POO sirve para desarrollar en muchos de los lenguajes comunes de hoy en
día manteniendo un mismo esquema mental. Incluso te permitirá enfrentar otros proyectos
que no necesariamente estén relacionados con escribir código, aunque en esta esta sección,
utilizaremos como lenguaje C# para aprender el paradigma.
Un poco de historia...
Los conceptos de la POO tienen origen en Simula 67, un lenguaje diseñado para hacer
simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard, del Centro de Cómputo Noruego
en Oslo. En este centro se trabajaba en simulaciones de naves, que fueron confundidas por la
explosión combinatoria de cómo las diversas cualidades de diferentes naves podían 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 más tarde en Smalltalk, desarrollado en Simula en Xerox
PARC (cuya primera versión fue escrita sobre Basic) pero diseñado para ser un sistema
completamente dinámico en el cual los objetos se podrían crear y modificar "sobre la marcha"
(en tiempo de ejecución) en lugar de tener un sistema basado en programas estáticos.
2 - Las 4 características
No hay un acuerdo aceptado por todo el mundo respecto a cuáles son las características que
definen la POO, pero al menos todos concuerdan en estas cuatro:
ABSTRACCIÓN:
Cada vez que pronunciamos una palabra, realmente lo que hacemos es asociar ese sonido (o
ese conjunto de garabatos al escribir) con una serie de cosas. Decimos que una ave es tal cosa,
que una silla es tal otra, etc.
Cuando vamos a aplicar la POO, lo primero que debemos hacer es cumplir con una vieja
máxima de guerra: "Divide y Vencerás*. Es decir, lo que hacemos es seccionar nuestro código
en grupos de código más pequeño que, al unirlos, hacen el trabajo.
Un buen ejemplo de abstracción es el cuerpo humano, aunque el cuerpo es una unidad, está
dividido en lo que conocemos por sistemas (el sistema respiratorio, el sistema linfático,
cardiovascular, etc.). Estos sistemas, a su vez están compuestos por otros más pequeños: los
órganos, y así sucesivamente. La abstracción nos permite dividir nuestro programa en distintos
objetos que se agrupan para formar cosas más complejas.
ENCAPSULAMIENTO:
También conocida como ocultamiento. Cuando te acuestas a ver televisión no te preocupas del
modo cómo esta funciona, o lo que hace para cambiar de canal o aumentar el volumen. A
menos que seas experto en electrónica o técnico en televisores, te pasará que no lo sabes y no
te importa; sólo sabes que al presionar un botón ocurre la magia.
El encapsulamiento se encarga de mantener ocultos los procesos internos que necesita para
hacer lo que sea que haga, dándole al programador acceso sólo a lo que necesita. Esto da
dos ventajas iniciales:
Lo que hace el usuario puede ser controlado internamente (incluso sus errores),
evitando así que todo colapse por una intervención no deseada -siguiendo con la
analogía de la TV: tú no quieres que un conocido tuyo, que no tiene ni idea de
electrónica, abra tu televisor y empiece a jugar con los circuitos para cambiar los
canales manualmente-.
La segunda ventaja es que, al hacer que la mayor parte del código esté oculto, puedes
hacer cambios y/o mejoras sin que eso afecte el modo cómo los usuarios van a utilizar
tu código. Sólo tienes que mantener igual la forma de acceder a él (en el caso del
control de la tele, que los botones sigan siendo los mismos y que el botón de
“apagado” no cambie el volumen). Por cierto, estas puertas de acceso que das a los
usuarios son lo que se conoce como interfaz.
8.1 -Introducción a la Programación Orientada a Objetos
HERENCIA:
Uno de los elementos más interesantes de la POO. La herencia es la capacidad que tiene una
clase de derivar las propiedades y métodos de otra.
Suena difícil, pero calma, lo veremos luego con paciencia. Tratemos de explicarlo con un
ejemplo: decimos que un pájaro es un ave; esto quiere decir que los pájaros tienen
características comunes con otras aves -pico, plumas, etc.-, es decir que el pájaro hereda las
características comunes de todas las aves. Pero además, resulta que un ave es un animal, lo
que significa que también comparte características comunes al caballo, el perro, el hombre y
cualquier otra cosa que pueda ser clasificada como animal.
La herencia nos permite, entre otras cosas, evitar tener que escribir el mismo código una y otra
vez, puesto que al definir que una categoría -que en programación llamaremos clase-
pertenece a otra, automáticamente estamos atribuyéndole las características generales de la
primera, sin tener que definirlas de nuevo.
POLIMORFISMO:
Es posible que el único modo de poder utilizar objetos de manera polimórfica sea que
compartan una raíz común, es decir, una jerarquía de clases, ya que esto proporciona la
compatibilidad de tipos de datos necesaria para que sea posible utilizar una misma variable de
referencia (que podrá apuntar a objetos de diversas subclases de dicha jerarquía) para enviar
el mismo mensaje (o un grupo de mensajes) al grupo de objetos que se tratan de manera
polimórfica.
8.1 -Introducción a la Programación Orientada a Objetos
3 - Definiciones
Como todas las variables de JavaScript, tanto el nombre del objeto (que puede ser una variable
normal) como el nombre de la propiedad son sensibles a mayúsculas y minúsculas. Puedes
definir propiedades asignándoles un valor. Por ejemplo, vamos a crear un objeto llamado
"taza" y le vamos a asignar propiedades denominadas "capacidad", "color", "material", y
"llena" como puedes observar en la imagen de la izquierda.
El ejemplo anterior también se podría escribir usando un iniciador de objeto, que es una lista
delimitada por comas de cero o más pares de nombres de propiedad y valores asociados de un
objeto, encerrados entre llaves ({}).
taza.dibujo; //undefined
4 - Ejemplo
2 Un artículo consta de: nombre, descripción, identificador único, costo, moneda del costo,
peso y categorías a las que pertenece.
3 Una categoría consta de: nombre, descripción, y categoría padre. Si una categoría tiene
categoría padre, la misma se convierte en una sub-categoría.
Solución
Lo primero que debemos hacer es identificar son los distintos objetos y sus
propiedades:
En la imagen, podemos observar el diagrama identificando los distintos objetos -cada caja- con
sus respectivas propiedades y asociaciones. Las asociaciones -marcadas por las flechas- hacen
referencia al relacionamiento que existen entre los objetos. En este caso el objeto Stock,
contiene un conjunto de Artículo, por ende Stock debe tener relacionado -comúnmente
llamado referenciado- a un conjunto de objetos de tipo Artículo.
Por otro lado un Artículo, pertenece a una o más categorías, por tanto debe tener referencia al
objeto Categoría. Otra relación que vemos ahí es que categoría puede estar relacionada a otra
-si la misma es una sub-categoría- que es la categoría padre, por esto es que un objeto
Categoría puede estar relacionado a otro de su mismos tipo.
Nos falta ahora tener en cuenta las funcionalidades que debe ofrecer el stock. Esto no es más
que aplicar Encapsulamiento, indicando que el objeto Stock será quien resuelva las
funcionalidades de: mostrar la cantidad de artículos en stock, ingresar un nuevo artículo,
mostrar información de un artículo: