Una de las grandes ventajas que
tiene ser el primero en algo es que eres original, sé que esto es una
perogrullada pero no deja de ser verdad, de Pero Grullo pero verdad al fin y al
cabo. Algo así les ocurrió a los filósofos de la antigua Grecia quienes fueron
los primeros que trataron sistemáticamente los principales temas que han
preocupado de siempre a la humanidad, puede que hubiera otros filósofos antes
de ellos pero sus testimonios no han llegado hasta nosotros. Otros vinieron
después que copiaron, ampliaron e iniciaron nuevos caminos, pero la base del
pensamiento actual está allí, en la Grecia clásica, sobre esos cimientos se
construyó a lo largo de los siglos el edificio de nuestro conocimiento.
De hecho, en este ejercicio de
redacción que acometo imprudentemente, lo que pretendo es describir cómo un
paradigma de la ingeniería del software
(1) desarrollado a
finales del siglo XX bebe en las fuentes de la filosofía que se hacía
veinticuatro siglos antes.
Uno de estos personajes
originales fue Platón (2), aunque ya había una
tradición filosófica importante cuando empezó a filosofar, podemos considerarle
bastante original. El núcleo de la filosofía platónica a través del cual se
articula todo su pensamiento y que, al mismo tiempo, representa su principal
aportación a la historia del saber, es la teoría
de las ideas.
La formulación de la teoría, en su
forma más básica, nos lleva a distinguir entre dos realidades. La realidad tangible y la realidad sensible.
La primera está constituida por
las ideas – de “eidos” que significa
literalmente “aspecto” o “figura” – que son inmateriales, eternas y ajenas a
cualquier cambio o modificación. La segunda lo constituyen lo que solemos
llamar “cosas” y, por tanto, está formada por todo aquello que es material,
finito, corruptible o modificable.
Un ejemplo que pone el profesor Antonio
Escohotado (3) es el de una puerta.
Si pienso en una puerta puedo representármela con tales o cuales
características – grande, pequeña, verde o azul, de madera o de cristal -,
recordada, imaginada, o percibida directamente porque la estoy viendo delante
de mí. Pero además de esto hay una abertura en la pared. La puerta es puerta
porque son aberturas en la pared, que constituye algo universal y no se agota
en ninguno de sus ejemplos. Platón decía que una idea existe cuando damos el
mismo nombre a muchas cosas separadas.
Uno podría pensar entonces que
las ideas residen en nuestra mente y son meras representaciones de los objetos
que podemos tocar con nuestros sentidos, pero lo platónico siempre es un poco
más complicado. Las ideas representan la esencia
de los objetos de conocimiento, no son meros contenidos mentales, no son
conceptos, las ideas subsisten independientemente de que sean pensadas o no.
Por tanto las ideas son independientes del pensamiento, del sujeto que las
piensa y del objeto del que son su esencia. Yo, para aclararme sobre cómo las
ideas pueden ser independientes del sujeto, pienso en que la idea existe incluso
si no conozco su concepto correspondiente, las patatas existían y su idea
platónica también antes del descubrimiento de América pero nadie que viviera en
este hemisferio las conocía, por cierto, ¿cómo demonios harían para acompañar a
un huevo frito?.
Las ideas son el modelo o
arquetipo de las cosas de la realidad sensible, son identidades puras, lo que
Platón denomina también como género
o clase formada por las cosas de la realidad sensible con la misma identidad
ideal. Las cosas son una copia o imitación de las ideas, son ejemplares únicos
de las ideas.
La consecuencia inmediata de la
teoría platónica de las ideas es la separación entre el mundo o realidad
intangible y el mundo o realidad sensible. Este es el dualismo platónico que
recibió muchas críticas, la primera y más importante, la de su alumno en la
Academia de Atenas, Aristóteles (4).
Aristóteles viene a poner un poco
de sentido común a la propuesta de Platón. Está de acuerdo con él en que hay un
elemento común entre todos los objetos de la misma clase, el universal, la
idea, que es la causa de que le demos el mismo nombre a todos los objetos del
mismo género. El macedonio admite que ese universal existe, pero no que tenga
existencia independiente de las cosas, niega que sea subsistente como dicen los filósofos.
El dualismo platónico para
Aristóteles no tiene ningún sentido, duplicar el mundo visible, estableciendo
un mundo paralelo es complicar el asunto sin obtener ninguna ventaja a cambio,
ya que este mundo paralelo necesita a su vez de una explicación, es – en
definitiva - establecer una separación entre las cosas y aquello por lo que las
cosas son como son, entre los objetos y su esencia.
En cualquier caso, esa visión inteligente del mundo real que comparten los dos filósofos, la división – si se quiere metodológica - entre los ejemplares y la idea que representa a toda una categoría de esos ejemplares, ha sido una herramienta usada hasta la saciedad a lo largo de la historia del conocimiento humano, desde la clasificación biológica de las especies a los tipos ideales de Weber, desde la clasificación de las criaturas celestiales en distintos coros por la iglesia medieval – supongo yo que después de un tremendo chute de incienso -hasta el paradigma de la orientación a objetos (5) de la moderna informática.
Y antes de empezar a desgranar
qué es eso de la orientación a objetos debo hacer una seria advertencia. Los
informáticos, sobre todo aquellos que nos dedicamos al desarrollo de programas
– o, especificando más, los que nos dedicamos a la ingeniería del software (6) - tenemos un trabajo
que no dudaría en calificar de “platónico”.
Me di cuenta enseguida, nada más
sumergirme en este condenado mundillo cuando era un joven estudiante en la
Universidad Politécnica de Madrid, lo que pasa es que entonces no sabía muy
bien cómo expresarlo, me faltaba cultura, situación a la que puse remedio años
después cuando estudié sociología.
La ingeniería del software es
platónica pues nos movemos entre dos realidades: un mundo real, que es el
pretendemos interpretar con nuestra ciencia, y un mundo intangible, que en su
versión conceptualmente más simple, reside en una máquina gobernada por
impulsos eléctricos interpretados como unos y ceros.
Así pues, nuestro trabajo
consiste esencialmente en interpretar la realidad hablando con los expertos en
la materia que pretendemos informatizar, utilizamos diversas técnicas de
diagramación para representar esa realidad siguiendo metodologías de análisis
contrastadas, y luego construimos programas cambiando el lenguaje de los
diagramas por el lenguaje de programación que la situación aconseja o nuestra
empresa quiere que usemos. Lenguaje con instrucciones que el ordenador – que no
deja de ser un autómata - sigue al pie de la letra.
Lo dicho, interpretamos la
realidad sensible para transformarla a una realidad intangible y binaria, y de
paso resolvemos - espero que de manera eficaz - algún problema del mundo real, desde la
aproximación de un avión al aeropuerto a la nómina de una empresa pasando por
un portal web para conseguir pareja.
Y en ese proceso de interpretación
de la realidad mediante diagramas y programas es donde hay que colocar al
análisis, el diseño y la programación orientada a objetos. Vamos a asomarnos
tímidamente a sus principios y cómo conectan con lo descrito antes acerca de lo
que pensaban Platón y Aristóteles.
Todo comenzó en la década de 1960 con un lenguaje de programación muy particular, Simula (7), que estaba pensado para realizar simulaciones, desde circuitos a aeronaves, y en ese entorno era necesario agrupar características y crear clases de cosas. Está considerado como el primer lenguaje orientado a objetos. La orientación a objetos quedó circunscrita a este entorno durante años, hasta que a finales de la década de 1980 tomó un gran impulso y hoy proliferan los lenguajes de programación que cumplen con sus requisitos.
Los conceptos básicos de este
tipo de lenguajes son la clase y el objeto. La clase es equivalente al género platónico, siguiendo con el
ejemplo del profesor Escohotado, yo hago
abstracción de todas las puertas y creo la clase “puerta” en donde coloco todas
las características que definen a las puertas, entendiendo por características
los tipos datos – atributos en la
jerga informática - que las describen y
las operaciones - o métodos en la
misma jerga – que puedes realizar sobre esos datos.
Pero la clase es el modelo, es la
definición universal, es la idea al modo de Platón, en cambio la cosa, el
ejemplar que forma parte del mundo sensible, sería el objeto. Y es el objeto el
que tiene existencia real, ya veremos un poco más adelante cómo se manifiesta
esa existencia en un entorno tan abstracto como el interior de un ordenador.
Con el objeto definimos la puerta corredera de madera verde que se puede abrir
y cerrar hacia los lados y que mide 1 por
2 metros o la puerta giratoria de cristal que no para nunca. Ambas
pertenecen a la clase puerta y ambas son objetos distintos.
Pero, ¿cómo puede tener existencia
real un objeto dentro del ordenador?. Pues bien, mientras que la clase no se
ejecuta (8) y queda
como definición, el objeto existe en
tiempo de ejecución, almacena datos en memoria y acaba muriendo cuando deja de
ejecutarse. Es más, hay programas llamados “recolectores de basura” que limpian
la memoria de los restos de estos objetos para que no estorben, son como
enterradores de objetos muertos. Al
tiempo en que el objeto está vivo en
memoria se le llama persistencia y
es una de las propiedades básicas de la orientación a objetos.
Voy a proponeros un pequeño viaje
a la programación orientada a objetos. No me voy a meter en mucho detalle, sé
que es terreno pantanoso, pero si hemos llegado hasta aquí merece la pena un
pequeño esfuerzo más.
Supongamos que quiero crear la clase
“persona”. En ella introduciré todos los atributos o datos que creo que definen
a un ser humano. Podría poner dentro de la clase datos como el nombre y
apellidos, datos biométricos como la altura o el peso o el color del pelo, lugar,
país y fecha de nacimiento, dirección, teléfonos y muchos otros datos
característicos de una persona. Y como operaciones o métodos podría incluir el
cálculo de la edad o el consumo basal de
calorías en función del sexo, la edad y el peso, el número de combinaciones
pueden ser enorme. Una posible definición simplificada, utilizando un pseudocódigo (9) parecido a un lenguaje de programación cualquiera,
podría ser:
Clase persona;
Atributos
Nombre: caracteres (50);
LugarNacimiento: caracteres (25);
PaisNacimiento: caracteres (20);
AñoNacimiento: entero;
AñoDefuncion: entero;
Métodos
Vida
(AñoNacimiento, AñoDefuncion);
/* calcula los
años de vida restando al año de defunción el año de nacimiento */
Fin Clase
Luego para crear un objeto de la
clase bastaría con poner algo así en el programa:
Platon es nueva persona; o Aristoteles es nueva persona;
Y para meter datos bastaría:
Platon.Nombre:=
“Platón”;
Platon.LugarNacimiento:=”Atenas”;
Platon.PaisNacimiento:=”Grecia”;
Platon.AñoNacimiento:=
-427;
Platon.AñoDefuncion:=
-347;
Esto sería
un ejemplo de una asignación directa de los valores a los datos pero podrían
obtenerse de la pantalla o de una base de datos o de cualquier otra fuente.
Y como
ejemplo de operación podría calcular sus años de vida invocando al método:
Vida(Platon.AñoNacimiento,
Platon.AñoDefuncion);
Como el lector presupondrá todo
esto puede llegar a ser muy complicado y no quiero ir mucho más allá pues me
meto en territorio farragoso, así que vamos a ir terminando pero no sin ver una
propiedad más que da idea de la potencia de definición que proporciona la
orientación a objetos. Yo puedo, superando a Platón, construir clases de
clases. Como diría mi hijo pequeño: ¿Cómo te quedas Platón?, ¿en eso no habías
pensado, eh?.
Supongamos que trabajo en una
empresa de software que recibe encargos de otras empresas. Una empresa me
encarga una aplicación de ventas que trata básicamente de gestionar clientes y
otra me encarga solucionarle el problema de su nómina que trata básicamente de
gestionar empleados. Si tengo bien definida una clase persona, evidentemente con más datos de los que he
puesto en párrafos anteriores, puedo reutilizarla para crear nuevas clases,
pues al fin y al cabo, todos los clientes y los empleados son personas. Para
ello bastaría algo así como:
Clase Empleado es nueva persona;
Atributos
Departamento: caracteres (20);
PuestoTrabajo: caracteres (20);
Categoria: caracteres (15);
SueldoBase: numeroreal;
Antigüedad:
entero;
Métodos
Retribución(); /* calcula la retribución mensual de
un empleado */
Fin clase
Clase Cliente es nueva persona;
Atributos
Empresa:
caracteres (20);
Cargo: caracteres
(20);
VentasAnuales:
vector [1..12] de numeroreal;
CuentaBancaria:
caracteres (15);
Métodos
Cobros (); /*
realiza los cobros a los clientes */
Envíos (); /*
programa envíos de productos */
Fin clase
En este caso, la clase empleado heredaría todos los atributos y métodos
de la clase persona añadiendo las características propias de un empleado. Y lo
mismo pasaría con la clase cliente. De esta manera programaría una sola vez
todo aquello que tiene que ver con las personas independientemente de si éstas
son empleados o clientes. A esto se le llama reutilización y abarata mucho los proyectos.
Antes hemos hablado de que el
trabajo del ingeniero de software pasa por la traducción de la realidad a un
lenguaje ejecutable en un ordenador. Ese trabajo resulta más fácil con el
paradigma de la orientación a objetos ya que permite describir la realidad de
una manera más sencilla, fidedigna y con más potencia semántica que cualquier
otra manera que se haya diseñado anteriormente. Acerca la realidad sensible al
mundo intangible siguiendo un sistema que en el fondo fue el mismo que concibió
Platón hace muchos siglos. Lo que francamente no sé es si los creadores del
lenguaje Simula hace 50 años pensaron en las ideas de Platón y Aristóteles cuando concibieron este paradigma
pero, de lo que estoy seguro, es que fueron herederos de una milenaria tradición
intelectual que tiene su origen en ellos.
Juan Carlos Barajas Martínez
Informático y sociólogo
Notas
- La ingeniería de software es la aplicación de un enfoque sistemático, disciplinado y cuantificable al desarrollo, operación, y mantenimiento del software. Según Bohem, es la aplicación práctica del conocimiento científico al diseño y construcción de programas de computadora y a la documentación asociada requerida para desarrollar, operar y mantenerlos. Se conoce también como desarrollo de software o producción de software.
- Platón (en griego antiguo: Πλάτων) (Atenas o Egina,1 ca. 427-347 a. C.) fue un filósofo griego seguidor de Sócrates y maestro de Aristóteles. En 387 fundó la Academia, institución que continuaría su marcha a lo largo de más de novecientos años. Su influencia como autor y sistematizador ha sido incalculable en toda la historia de la filosofía, de la que se ha dicho con frecuencia que alcanzó identidad como disciplina gracias a sus trabajos.
- Antonio Escohotado Espinosa (Madrid, 5 de julio de 1941) es un pensador, ensayista y profesor universitario español cuyas obras, si bien centradas principalmente en el derecho, la filosofía y la sociología, han abordado una gran variedad de campos. Obtuvo notoriedad pública por sus investigaciones acerca de las drogas, y son conocidas sus posiciones antiprohibicionistas. El leit motiv de su obra es una afirmación de la libertad como antídoto frente al miedo o las coacciones que empujan al ser humano hacia toda clase de servidumbres. Fue profesor de filosofía en la Facultad de Ciencias Políticas y Sociología de la UNED.
- Aristóteles (en griego antiguo: Ἀριστοτέλης, Aristotélēs; Estagira, 384 a. C.-Calcis, 322 a. C.) fue un filósofo, lógico y científico de la Antigua Grecia cuyas ideas han ejercido una enorme influencia sobre la historia intelectual de Occidente durante más de dos milenios. Aristóteles escribió cerca de 200 tratados (de los cuales solo nos han llegado 31) sobre una enorme variedad de temas, incluyendo lógica, metafísica, filosofía de la ciencia, ética, filosofía política, estética, retórica, física, astronomía y biología. Aristóteles transformó muchas, si no todas, las áreas del conocimiento que abordó. Es reconocido como el padre fundador de la lógica y de la biología, pues si bien existen reflexiones y escritos previos sobre ambas materias, es en el trabajo de Aristóteles, donde se encuentran las primeras investigaciones sistemáticas al respecto. Entre muchas otras contribuciones, Aristóteles formuló la teoría de la generación espontánea, el principio de no contradicción, las nociones de categoría, sustancia, acto, potencia y primer motor inmóvil. Algunas de sus ideas, que fueron novedosas para la filosofía de su tiempo, hoy forman parte del sentido común de muchas personas. Aristóteles fue discípulo de Platón y de otros pensadores (como Eudoxo) durante los veinte años que estuvo en la Academia de Atenas. Fue maestro de Alejandro Magno en el Reino de Macedonia. En la última etapa de su vida fundó el Liceo en Atenas, donde enseñó hasta un año antes de su muerte.
- Paradigma de la Orientación a objetos
- Esta precisión la pongo porque hay dos formas de desarrollar programas, aplicaciones o sistemas de información, a la buena de Dios - algunos cachondos tecnológicos utilizan el eufemismo "code and fix" - o utilizando metodologías de desarrollo. Yo siempre he sido partidario de un desarrollo metodológico por las razones que suelen venir en los libros de ingeniería de software, que son múltiples y ciertas, y por una razón personal: flaco favor haría a la memoria de mi padre y al dinero que se gastó en mi educación y, a la memoria del dinero que me gasté yo cuando mi padre murió, si fuera un auténtico chapuzas y no aplicara técnicas que me garantizan la calidad de los productos que desarrollo. ¡He dicho!.
- Simula es un lenguaje de programación orientada a objetos (OOP) de 1962. Fue el primero de este tipo que incluyó el concepto de clase. Varios años después de su desarrollo, casi todos los lenguajes modernos comenzaron a utilizar sus principios de orientación a objetos. Así fue como se popularizaron términos como clases, objetos, instancias, herencia, polimorfismo, etc. Simula 67 fue lanzado oficialmente por sus autores Ole Johan Dahl y Kristen Nygaard en mayo de 1967, en la Conferencia de Trabajo en Lenguajes de Simulación IFIO TC 2, en Lysebu cerca de Oslo
- Aquí la palabra ejecutar tiene el sentido de la 6ª acepción del Diccionario de la Real Academia: “6. tr. Inform. Poner en funcionamiento un programa”.
- En ciencias de la computación, y análisis numérico, el pseudocódigo (o falso lenguaje) es una descripción de alto nivel compacta e informal1 del principio operativo de un programa informático u otro algoritmo. Utiliza las convenciones estructurales de un lenguaje de programación real, pero está diseñado para la lectura humana en lugar de la lectura mediante máquina, y con independencia de cualquier otro lenguaje de programación. Normalmente, el pseudocódigo omite detalles que no son esenciales para la comprensión humana del algoritmo.
Bibliografía:
Antonio Escohotado Espinosa
Filosofía y Metodología de las
Ciencias Sociales
UNED 1989
José María Fouce
La Teoría de las Ideas de Platón
José María Fouce
La metafísica aristotélica: la
crítica de la Teoría de las Ideas
Vídeo sobre la Teoría de las Ideas de Platón: