Está en la página 1de 6

8.

1 -Introducción a la Programación Orientada a Objetos

Introducción a la Programación Orientada a Objetos (POO)

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). 

Éste es el modelo que la POO intenta seguir para estructurar un sistema.

Es importante recalcar nuevamente que la POO no es un lenguaje de programación, es una


forma de enfrentarse a una realidad de nuestro problema. 

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.

La POO se fue convirtiendo en el estilo de programación dominante a mediados de los años


1980, en gran parte debido a la influencia de C++, una extensión del lenguaje de programación
C. Su dominación fue consolidada gracias al auge de las interfaces gráficas de usuario, para las
cuales la POO está particularmente bien adaptada. En este caso, se habla también de
programación dirigida por eventos.
8.1 -Introducción a la Programación Orientada a Objetos

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.

Pero ¿qué es realmente la abstracción? 

Básicamente es la capacidad de separar los elementos (al menos mentalmente) para poder


verlos de forma singular. Como cuando describimos el cuerpo humano y decimos cabeza,
brazo(s), pierna(s), etc.

 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:

En programación orientada a objetos, el polimorfismo se refiere a la propiedad por la que es


posible enviar mensajes sintácticamente iguales a objetos de tipos distintos. El único
requisito que deben cumplir los objetos que se utilizan de manera polimórfica es saber
responder al mensaje que se les envía. 

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

JavaScript está diseñado en un paradigma simple basado en objetos. Un objeto es una


colección de propiedades, y una propiedad es una asociación entre un nombre (o clave) y un
valor. El valor de una propiedad puede ser una función, en cuyo caso la propiedad es
conocida como un método. Además de los objetos que están predefinidos en el navegador,
puedes definir tus propios objetos. 

En JavaScript, un objeto es un entidad independiente con propiedades y métodos.


Compáralo con una taza, por ejemplo. Una taza es un objeto con propiedades. Una taza
tiene un color, un diseño, un peso, un material del que está hecha, etc. Del mismo modo, los
objetos de JavaScript pueden tener propiedades que definan sus características.

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 ({}).

Las propiedades no asignadas de un objeto son undefined (y no null). Ejemplo:

taza.dibujo; //undefined

4 - Ejemplo

Consideremos que debemos desarrollar un sistema de stock, el cual lo programaremos


basándonos en POO

Las características que debemos saber en cuanto a stock son:

1 El stock se encuentra compuesto por un conjunto de artículos, por nombre de sucursal


donde se encuentra el stock, y dirección. 

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.

4 El stock debe contar con las funcionalidades de:

 Dado el nombre de un artículo, indicar la cantidad de ese artículo que hay en


stock.

 Ingresar un nuevo artículo en stock.

 A partir del identificador de un artículo, se debe desplegar toda la información


del mismo.
8.1 -Introducción a la Programación Orientada a Objetos

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.

Para resolver la categoría y sub-categoría, podemos hacer uso de la característica de Herencia,


creando otro objeto llamado Sub-categoría, que hereda del objeto Categoría, es decir que
tendrá toda las mismas propiedades, agregando que también la sub-categoría tendrá la
propiedad de Categoría padre, indicando el nombre de la categoría donde se encuentra
incluida.
8.1 -Introducción a la Programación Orientada a Objetos

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:

 cantidadArtículos(nombre): es el método que desplegará la cantidad de artículos que


se encuentran con el nombre ingresado.

 nuevoArtículo(Artículo): este método ingresará un nuevo artículo a stock. Por esto es


que el método, necesita como dato de entrada, un objeto Artículo.

 infoArtículo(identificador): a partir del identificador, el stock desplegará toda la


información del Artículo con ese identificador. La la diferencia entre identificador y
nombre, es que este último se puede repetir, mientras que el identificador es único.
Por ejemplo, puedo tener un artículo con nombre Jabón en polvo X, y puedo tener
mucha cantidad de artículos con este nombre, mientras que el identificador será único
por cada uno.

Como ya se mencionó, el Encapsulamiento trata sobre un objeto que realizará determinada


acción, y sólo ese objeto sabrá cómo realizarla. En este ejemplo, solamente hemos diseñado la
realidad pasada a POO, especificando que el objeto Stock deberá contar con los métodos ya
detallados. En este ejemplo no debemos preocuparnos en cómo se programará ese método,
eso corresponde a la etapa de programación.

También podría gustarte