Fundamentos

Introducción a la Programación Orientada a Objetos

Fundamentos Nivel medio

La programación orientada a objetos es un paradigma de la programación, es decir, una manera de programar, que aportó una nueva visión de cómo realizar un programa durante los años 80. Con ella se introdujo una forma de organizar el código que, a día de hoy, sigue estando presente y es ampliamente utilizada en los principales lenguajes de programación, PHP entre ellos.

La programación estructurada

Gracias a la funcionalidad que nos dan las funciones, durante mucho tiempo la programación se centró en la construcción de módulos o librerías de funciones que resolvieran muchos de los problemas repetitivos. Podemos construir funciones, como hemos visto, para resolver ecuaciones, para calcular máximos o para encapsular instrucciones que vamos a realizar en varias ocasiones.

Sin embargo, las funciones se centran en aportar esa funcionalidad, pero no tienen mucho interés con los datos, especialmente con su persistencia de los datos. Es decir, una función va a recibir unos datos de entrada y va a devolver unos datos de salida, pero no se preocupa sobre “qué representan” esos datos ni los va a almacenar de una forma clara y coherente.

A la hora de construir programas más complejos, es frecuente que los datos que tengamos tengan un cierto significado agrupado. Por ejemplo, si construimos un programa que procese datos de un libro como, por ejemplo, calcule su precio, guarde sus principales datos descriptivos como autor, temática, número de páginas, año de publicación, editorial, etc., tendremos que guardarnos esos datos normalmente en arrays. Y, pese a que podemos construir arrays muy buenos, la organización y reutilización de los datos no es siempre sencilla. Si la entidad que queremos guardar y procesar es muy grande, dispone de muchísimos datos y funciones para trabajar con ellos, el código puede volverse extenso, desorganizado y algo caótico.

¿Qué es un objeto?

La programación orientada a objetos tiene como una de sus partes principales a esas entidades las cuales denominamos, como este método indica, objetos. Un objeto podríamos decir que es la propia representación de una entidad de la vida real (o también algo abstracto, por supuesto). Podemos utilizar el ejemplo que acabamos de nombrar anteriormente y decir que un libro es un objeto.

Un objeto va a tener una serie de características o atributos junto a una serie de métodos o funciones asociadas a él que nos permitirán, tanto manejar de una manera más accesible los datos como realizar todas las funcionalidades que se refieren a ellos. Además, con un objeto también podemos definir el nivel de acceso que se puede tener para acceder o realizar ciertas acciones, aunque esto lo veremos en próximos artículos. Y, por último, un objeto también tiene otra serie de funcionalidades que veremos también en el futuro como, por ejemplo, la herencia.

Características o atributos de un objeto

Sigamos con el ejemplo del libro. Vamos a utilizar algo de pseudocódigo para definir los atributos de un libro. Estos atributos pueden ser los que nosotros, como programadores, definamos (porque los necesitemos y vayamos a utilizarlos). Por ejemplo tendríamos algo así:

OBJETO Libro {
    ATRIBUTO precio
    ATRIBUTO autor
    ATRIBUTO isbn
    ATRIBUTO temática
    ATRIBUTO nº de páginas
    ATRIBUTO editorial
    ATRIBUTO año de publicación
    ATRIBUTO año de adquisición
    ATRIBUTO descripción
    ATRIBUTO estantería donde lo guardamos
    ATRIBUTO colocación en la estantería
    ATRIBUTO leído
    ATRIBUTO valoración
}

Podríamos seguir hasta donde cada uno quisiera o necesitara. Tenemos nuestro objeto, el libro, que tiene una serie de atributos. Hasta aquí podríamos pensar en que esto podríamos construirlo sencillamente con un array que tuviera todos estos campos como índices, y no iríamos muy desencaminados. Pero la potencia de un objeto viene con su funcionalidad y la forma de encapsular los datos que tiene.

Métodos o funciones de un objeto

Tenemos ya definidos todos los atributos que necesitamos para nuestro libro, pero necesitamos ahora operar con estos atributos. Para ello, creamos los métodos o funciones asociados a ese objeto. Estas funciones están ligadas al objeto en el que se han definido y, por tanto, no se van a poder utilizar si no es por vía de ese objeto. Un ejemplo de funciones podría ser el siguiente:

OBJETO Libro {
    ATRIBUTO precio
    ATRIBUTO autor
    ATRIBUTO isbn
    ATRIBUTO temática
    ATRIBUTO nº de páginas
    ATRIBUTO editorial
    ATRIBUTO año de publicación
    ATRIBUTO año de adquisición
    ATRIBUTO descripción
    ATRIBUTO estantería donde lo guardamos
    ATRIBUTO colocación en la estantería
    ATRIBUTO leído
    ATRIBUTO valoración

    FUNCIÓN registrarEstanteriaDondeSeGuarda
    FUNCIÓN obtenerEstanteriaDondeSeGuarda
    FUNCIÓN registrarColocacionEnEstanteria
    FUNCIÓN obtenerColocacionEnEstanteria
    FUNCIÓN moverEnEstanteria
    FUNCIÓN obtenerLibroSiguiente
    FUNCIÓN obtenerLibroAnterior
    FUNCIÓN intercambiarConOtroLibro
}

Hemos obviado expresamente la escritura de muchísimas otras más funciones para tratar con toda la cantidad de atributos que hemos nombrado. Por ello, nos hemos quedado con algunas de ejemplo para que podamos ver la funcionalidad de un objeto.

En la definición de objeto, además de los atributos, tendríamos ahora estas funciones para procesar datos con ese objeto, en este caso nuestro objeto Libro. Como veis, tenemos funciones tanto para registrar dónde vamos a guardar el libro como para obtener dónde está. De igual forma, tenemos otras funciones para moverlo, saber cuáles son los libros que tiene al lado, intercambiarlo con otro libro…, lo que se nos ocurra.

Obviamente tendríamos que desarrollar la lógica e instrucciones que harían cada una de esas funciones. Pero lo importante ahora es que esas funciones están vinculadas al objeto que hemos definido.

Manejo de un objeto

Vamos a quedarnos aquí, pues todo lo demás lo iremos viendo en los próximos artículos sobre programación orientada a objetos. Pero sí veremos un poco qué podemos hacer con todo lo que hemos visto ahora.

Tenemos nuestro objeto con sus atributos y funciones definidas. Ahora, podríamos hacer algo así:

libro = nuevo Libro

libro->registrarEstanteriaDondeSeGuarda(estanteriaPrincipal)
libro->registrarColocacionEnEstanteria(segundaFila, terceraPosicion)
libro->moverEnEstanteria(unaPosicionHaciaLaDerecha)

IMPRIMIR libro->obtenerColocacionEnEstanteria()
IMPRIMIR libro->obtenerEstanteriaDondeSeGuarda()
IMPRIMIR libro->obtenerLibroSiguiente()
IMPRIMIR libro->obtenerLibroAnterior()

Veremos, en próximos artículos, por qué hemos puesto ese nuevo y por qué hemos utilizado esos símbolos -> como representando a flechas. Pero ahora sólo debemos quedarnos con ciertas cosas. Una, que en la primera línea hemos creado nuestro objeto Libro. A partir de ahí, hemos realizado una serie de acciones con este objeto. Estas han sido registrarlo en la segunda fila, tercera posición de la estantería principal y luego lo hemos movido una posición a la derecha.

Más adelante hemos mostrado por pantalla dónde está el libro en la estantería, en qué estantería está, cuál es el siguiente y cuál el anterior. Y, fijáos, podríamos hacer todo esto las veces que fuera necesario (pues son funciones), sin saber la lógica de cómo hace cada función para hacer cada cosa.

Podemos tener nuestro objeto bien definido, con atributos y funciones, y darle la información de estas funciones a un compañero programador. Él podría interactuar con el objeto Libro sin saber cómo hace lo que hace, simplemente llamando a las funciones disponibles. Es una de las formas en que dos o más programadores pueden trabajar en un mismo proyecto a la vez, sin esperar a que el otro acabe una cosa para poder continuar.

Resumen

Una vez vista una pequeña introducción de la programación orientada a objetos, muy sencillita y corta para tener una primera aproximación sin muchas pretensiones, en el siguiente artículo veremos ya cómo definir objetos en PHP. Hay más, mucho más, de lo que aquí hemos comentado y nos va a permitir un nivel de potencia y control que no teníamos hasta ahora.

Deja una respuesta