You are on page 1of 8

Curso Java I Paradigmas

Paradigmas

Conceptos Preliminares

Para empezar, miremos un poco la palabra paradigma.


Llamamos paradigma al conjunto de prácticas, de formas de pensar y de herramientas que se comparten y
que se emplean en un campo del saber durante un momento dado. Se puede decir que es básicamente lo
que nos guía en como hacemos las cosas en una determinada actividad.
A lo largo del tiempo ocurren cambios de paradigmas en distintos ámbitos, que no se dan por capricho,
sino que suponen una evolución (a veces es cierto, otra vez no) en la forma de hacer las cosas para poder
resolver problemas que van surgiendo, para de poder comprender mejor el objeto que sea de estudio.

La música: ¿Podemos decir que la música también sufrió cambios en sus paradigmas?
Sí, pero a diferencia, la música no explica la realidad sino que es arte y una forma de expresión, lo que no
tiene un criterio de medición de correcto o incorrecto, sino es relativo a uno, pero igual, se puede pensar,
a riesgo que un filosofo se enoje (Y MUCHO), que el rock, el jazz, puede ser vistos como paradigmas de
producción musical.
También podemos observar en los deportes por ejemplo: el salto en alto, boxeo, etc. Las posturas, las
formas de ejecutar sus acciones hace medio siglo no son las mismas de ahora. Este cambio de práctica,
podemos concebirlo como un cambio de paradigma.
Nuevamente, no les llama paradigma, porque estas cosas no son ciencias, pero la idea, es la misma…
¡Perdamos miedo a la palabra paradigma!

El paradigma de orientación a objetos en las ciencias de la computación se aplica a la rama de la


programación. A lo largo del tiempo la programación de una computadora adopto diversos paradigmas
acordes a la tecnología existente (hardware), a los problemas que se buscaba resolver mediante el uso de
una computada y al conocimiento que teníamos sobre como modelizar los procesos del mundo real en una
maquina.
Descubrir una nueva tecnología no implica saber usarla. Ejemplo de la vela y la lámpara.
La programación orientación a objetos (en adelanto la escribo como POO para resumir un poco de
espacio) es el producto de la evolución de la forma de programar con la maquina a lo largo del tiempo para
poder producir software que resuelva cada vez problemas cuya naturaleza es más compleja de modelizar.
En base a lo anterior, cabe aclarar que no esto no es un punto de partida desde “0” sino que la POO tiene
paradigmas anteriores sobre las cuales se basa y es necesario estudiarlos un poquito para comprender en
donde estamos parados, o sea, vamos a hacer un poco de historia y repesar algunos conceptos que no
quiero dar por sentado antes de empezar.

Un poco de historia

En un comienzo a las grandes maquinas (literamente, ocupaban cuartos enteros) que se usaban
exclusivamente para el de calculo matemáticos (las hoy en día son las portátiles y prácticas calculadoras)
y la programación se reducía configurar a esa maquina, de una forma muy complicada, para computar
(CALCULAR) el resultado que se buscaba. En general en cálculos de de predicciones meteorologías o
estadísticos. A estas maquinas se las denomino computadoras pues computaban.

Las computadora no siempre fueron electrónicas, el ábaco es la primera computadora de calculo


conocida y es mecánica.

1 de 8
Curso Java I Paradigmas

Con el tiempo, la arquitectura y los componentes electrónicos fueron evolucionando con los desarrollos
tecnológicos y no solo se logro achicar el tamaño de los mismos, sino que aumento su capacidad de
procesamiento, pero además, de a poco, se fue expandiendo la utilidad de la misma, ya no solamente
consistía en computar resultados matemáticos, sino que, de forma general, procesaba grande volúmenes de
información en tiempo reducido.
La computadora de a poco empezó a escaparse del ámbito puramente matemático para adentrarse en el
ámbito de procesamiento de datos generales (Década del 50’).
La computadora es entonces, en la actualidad, una maquina programable que sirve a propósito generales
y puede resolver varios tipos de problemas y la programación es el proceso mediante el cual se prepara
a una computadora para efectuar una determinada tarea.
Para programar en un principio a una maquina, necesitamos un forma de comunicarnos con ella, a dicha
forma de comunicarnos se la denominó lenguaje, haciendo un paralelismo con la realidad. Es decir,
nosotros, entre nosotros, nos comunicamos mediante un lenguaje, bueno con la maquina es la misma
historia.

Así es como decimos que para programar a una computadora necesitamos conocer un lenguaje de
programación que nos permita prepararla para ejecutar la tarea que queremos hacer.

Con un lenguaje la idea es especificar a la maquina como manipular una secuencia de datos a través de
sucesivas instrucciones para producir un resultado.

Paradigma de programación Lineal o “Espagueti”

El primer lenguaje con el se trabajo fue directamente el lenguaje maquina, es decir, el lenguaje que
entiende directamente se redactaban solamente con los famosos 1 y 0 del código binario para que los
circuitos electrónicos de la maquina puedan entender.

Como realmente esto estos programas se volvían inmatenibles, surgió la necesidad de esclarecer la cosas y
trabajar en un lenguaje más entendible, así que fue que en la década del 50’ nació el lenguaje ensamblador,
un lenguaje un poco más entendible por los seres humanos pero que aun así los programas construidos
eran complicados de mantener.

Con este lenguaje aperece un primer nivel de abstracción con respecto de la máquina subyacente y a sus
circuitos electrónicos, ya no se programa directamente sobre el lenguaje maquina sino que había 1 (un)
nivel de indirección, se programa en un lenguaje que se traducía al lenguaje máquina que era el que
entendía esta para ejecutar las instrucciones, dicho lenguaje se llamaba lenguaje de Ensamblador.

Los programas resultantes resultaban ser un choclo o “espagueti” de código que mezclaba los datos y las
instrucciones de forma muy poco clara.

Nuevos paradigmas

A mediados del 60, la relación costos y capacidad de procesamiento había bajado notablemente.

Si la industria automotriz hubiese seguido la misma tendencia que la de las computadores, habríamos
tenido en 1987 un rolls-royce por menos de 5 dólares que consumiría menos de dos gotas de nafta cada
cien kilómetros.

2 de 8
Curso Java I Paradigmas

Dada esta situación la búsqueda de nuevas aplicaciones para equipos tan baratos y disponibles cada vez
para más sectores se incremento radicalmente. Pero con ello también vinieron los fracasos, muchos
proyectos fracasaban durante su construcción o se descontinuaban. Por otro lado, la demanda de software
seguía creciendo a un ritmo para la cual se hacía evidente que la industria no tenía respuesta, había
comenzado la “crisis del software”.
Es por ello que surgen necesidades de encontrar nuevas y mejores técnicas de producción de software, y
así se fueron logrando avances en las distintas áreas que involucra el desarrollo de software: se
desarrollaron nuevas ténicas de análisis de requisitos, proliferaron enfoques metodológicos para el diseño y
la documentación, y para lo que es la programación fueron surgieron nuevos paradigmas sobre los
lenguajes de programación que facilitaran la tarea de desarrollar aplicaciones o sistemas concretos.

Paradigma de programación Estructurada:

Con los primeros lenguajes de programación en alto nivel, surge una fuerte necesidad de estandarizar un
poco la forma de escribir los programas en dichos lenguajes, por lo que surge este primer paradigma que
fomenta.

 Utilizar un estilo disciplinado de escritura y programación.


 Aparición de estructuras para controlar el flujo de ejecución de un programa que no produzcan
confusión o saltos.
 Uso de lenguajes con reglas poco permisivas, ayuda a la detección de errores.
 Sencillez, claridad y elegancia (por sobre eficiencia y optimización).

La idea es proclamarse como una técnica que lleve a programas más entendibles de lo que se venían
haciendo, pudiéndolo así modificar, mantener con menos costo.

Paradigma de Programador Modular

Lo programación modular busca cubrir los baches que deja la programación estructura por sobre todo en
sistemas o aplicaciones de tamaño medio a grande.
La idea consiste en dividir a un programa en un conjunto de módulos o subprogramas autónomos que
fueran indivudalmente programables, verificables y modificables.

En esencia este paradigma plantea lo que el conocido filosofo Descartes habla en su famosa obra “El
Método” de desglosar a un problema en partes, y a cada parte, dividirla nuevamente en partes, hasta
llegar a las partes más elementales (ya indivisibles) que puedan ser comprendidas más fácilmente, para
luego unificar todo y comprender el problema en su totalidad.

Bajo la mirada de este paradigma los programas son pensados como el resultado de la ejecución de un
conjunto de operaciones que se pueden descomponer a su vez en otras operaciones, y así hasta llegar las
operaciones elementales o instrucciones.
Este estilo se conoce como descendente, puesto que se va refinando desde lo más complejo hasta lo más
elemental.
En otros casos los subprogramas o módulos sirven para escribir secuencias de acciones que puedan ser re
utilizadas en otros programas, construyendo lo que se conoce como biblioteca de subprogramas o librerías.
Este estilo se lo conoce como ascendente.
Estos estilos no son excluyentes sino que son totalmente complementarios.
Se alienta a que los módulos tengan características que lo hagan de mejor calidad como: Poca cohesión
entre ellos (no estén ligados estrechamente y un cambio en uno no provoque cambios en el otro) y alta

3 de 8
Curso Java I Paradigmas

cohesividad (cada una efectúe una tarea simple y bien definida sin alterar el medio que lo rodea de forma
implícita).
Estos dos paradigmas se mezclan en la programación estructurada y modular o sencillamente
“Procedural” (por estar guiada por procedimientos).

Abstracción

Pero así como estaba encarada la programación estructurada y modular, no se podían resolvía todos los
problemas a mediados del 80’.
Es por eso que la industria del software empieza a seguirle los pasos a otras industrias y construir sus
productos en base a la unión de componentes elaborados previamente.

En la industria automotriz, una fábrica no pretende producir los equipos de audio, de aire acondicionado,
las baterías, las lamparitas o las cubiertas. ¿Por qué hacen esto? Porque comprárselas a los que hacen
estas auto-partes les conviene mucho más, dado que termina siendo más económico y además permite que
cada uno se dedique a lo que mejor sabe hacer).

La idea es utilizar el mecanismo de abstracción para poder construir componentes reutilizables en


múltiples desarrollos de software, este concepto no es excluyente de la programación modular sino, al
contrario, supone una mejora en el uso de la modularidad.
La abstracción se utiliza para la implementación de tipos de datos abstractos (TDA), los tipos de datos
abstractos son aquellos que no están definidos por el lenguaje de forma nativa y se simulan de forma
transparente (como si fueran tipos de datos primitivos) mediante un uso adecuado de una biblioteca de
subprogramas.

Los TDA en la práctica son estructuras de datos más operaciones (algoritmos) que permiten manejar
dichas estructuras.

Los lenguajes de programación modular fueron incorporado soporte para este tipo de abstracción mediante
la posibilidad de definir tipos de datos como unidades o módulos portables.

Ocultamiento de la implementación

La abstracción como mecanismo para crear módulos independientes y portables tal como lo definimos
sugiere fuertemente otra propiedad muy importante: Impedir que se puedan visualizar detalles que no son
importantes para el usuario del modulo (llamado cliente).

En la industria automotriz, nuevamente, a la fábrica de autos, ¿le importa saber los detalles de cómo
funciona por dentro el equipo de música?
En realidad no, solo le interesa que asegure una serie de interfases y conexiones que permitan su
instalación y una sería de características y funcionalidades a prestar, de esta forma el fabricante de auto
y el fabricante de equipo pueden hacer lo que quieran pero ambos garantizan que comparten una
interfase común).

La idea es para el usuario de un módulo concebirlo como una caja negra, de la cual nada se sabe que hay
por dentro, solamente se sabe que es lo que recibe y que es lo que sale, o sea, se sabe lo que hace pero
como lo hace, dejando este detalle de implementación de lado confiando en que su funcionamiento.
En la práctica el ocultamiento de la implementación se materializa en la especificación que señala
concretamente las funciones que el módulo realiza, los parámetros que se utilizan en cada función
(entrada) y el efecto que producen dichas funciones incluyendo los valores que retornan dichas

4 de 8
Curso Java I Paradigmas

operaciones (salida). De esta forma se define una interfase clara entre el usuario del módulo y el creador
del mismo, donde el creador puede hacer lo que quiera dentro de su caja negra mientras siga dando las
mismas prestaciones al usuario y el usuario las use tal como esta especificado.
La gran ventaja es que cada uno puede hacer las modificaciones que le parezcan siempre y cuando
cumplan con el contrato definido en la especificación.

Paradigma de Programación Orientada a Objetos

En la programación procedural los algoritmos (secuencias de instrucciones que ejecuta la computadora) se


describen en base a procesos y a los datos por separado.

Por ejemplo: Un subprograma para el manejo de pantallas consistirá en exactamente: procedimientos y


funciones que describen cómo se abre una ventana, cómo se la cierra, cómo se la mueve, cómo se la
limpia, etc. Y por otro lado se guardarán los datos correspondientes (posición de las ventanas, tamaños,
etc.)
• La programación procedural hace énfasis en separar los datos de las operaciones que manipulan estos
datos, modulariza por funciones o procedimientos (se programa directamente lo que hace el sistema
para obtener una solución, VERBOS)
• En la programación orientada a objetos, los datos y las operaciones que manipulan estos datos están
encapsulados en objetos, modulariza por entidades (se programa pensando en las entidades y
relaciones presentes en el dominio del problema para obtener una solución, SUSTANTIVOS)
Notar que ambos modularizan, separan en partes, pero de forma distinta.

La POO encara la resolución de problemas desde otra óptica: la óptica del objeto.

Para el ejemplo anterior ahora tendríamos un objeto pantalla, con sus datos (atributos) y con sus
operaciones (métodos) que ese objeto puede realizar (comportamiento) cada vez que se le envía un cierto
mensaje o solicitud.

Los objetos, a primera vista, puede parecer muy similares a lo que es un tipo de dato abstracto (TDA):
pues se componen de una estructura de datos, que ahorra llamamos atributos, más procedimientos sobre
estos, que ahora tienen el nombre de métodos; los mensajes se podrían pensar como invocaciones a estos
procedimientos.
Con esto se podría llegar pensar que simplemente se ha inventado un nuevo nombre para algo que ya
existía anteriormente.
Esto es alguna medida es cierto, las ideas provienen en gran parte de la modularización, de la abstracción
de datos y del ocultamiento de la implementación, sin embargo la filosofía que introduce este paradigma
es radicalmente diferente a las anteriores.
Esta es la razón del porque cuesta pasar del paradigma estructurado al paradigma de orientación a objetos,
tiene que existir un cambio de mentalidad y enfocar la resolución del problema.

¿Que es un necesariamente objeto?


Es una entidad activa o bloque de un programa.
En este paradigma un programa (que antes se concebía como una secuencia de instrucciones que operan
sobre datos) se concibe como una colección de objetos colaboran entre sí.

Supongamos un sistema corporativo que contiene objetos que representan los empleados de la compañía.
Cada uno de estos objetos tiene datos y comportamientos que describimos a continuación.

5 de 8
Curso Java I Paradigmas

En objeto queda definido por las siguientes propiedades:


• Identidad
• Estado
• Comportamiento

Identidad
Es lo diferencia a un objeto de otros dentro de un mismo tipo.

Siguiendo el ejemplo anterior, cada objeto se corresponde con un único empleado.

Datos y estado
Las propiedades que tiene un objeto se conocen con el término de atributos, el valor de dichos atributos, en
un momento determinado, define su estado.

Siguiendo el ejemplo anterior, los atributos de un objeto empleado pueden ser: Número de Legajo , Fecha
de nacimiento, sexo, posición, antigüedad, etc.

Comportamiento
El comportamiento define lo que un objeto puede hacer.
En el paradigma procedimental, el comportamiento esta definiendo por procedimientos, funciones y
subrutinas del programa.
En el paradigma Orientado a objetos, estos comportamientos están contenidos en métodos de los objetos, y
estos se invocan mediante mensajes.

Supongamos que un comportamiento necesario para el objeto empleado consiste en saber o conocer su
número de legajo, entonces existiría un método para consultarle a dicho objeto el valor de ese atributo.

Colaboración entre objetos


La colaboración entre objetos se da por medio de mensajes entre ellos. Los objetos reaccionan ante los
mensajes activando el comportamiento que se le ha definido.

Supongamos que queremos calcular cuanto le tenemos que pagar a un empleado de una compañía, para
eso tenemos un objeto “calculador de sueldos” que exhibe un comportamiento de poder calcular el
sueldo para una determinado empleado. Por lo tanto este objeto tendrá que obtener, entre otras cosas, el
número de legajo, la antigüedad, etc. del empleado al cual se le este liquidando el sueldo.
Decimos así que el objeto calculador le estará en algún momento enviando un mensaje al objeto
empleado pidiéndole sus datos.

De dicha delicada interacción entre objetos se obtiene la resolución a los problemas que intenta resolver el
programa, es por eso, que el objeto de estudio a medida que aprendamos, además de aprender JAVA, será
como orquestar estas relaciones entre objetos para construir una aplicación que no solo resuelva el
problema, sino que también utilice un adecuado diseño y modelo de objetos.

Clase
Una clase responde a la idea de concepto, entendido como una noción compartida que se aplica a
determinados objetos en forma consciente. Un concepto puede no tener instancias directas, como el
concepto de “Animal” (no existe una entidad real o abstracta que responda solamente a “Animal”, dado
que es una categoría) pero no puede haber objetos que no respondan a un concepto. Así surge la noción de
clase.

6 de 8
Curso Java I Paradigmas

Cada objeto particular de una clase es una instancia.


Una clase es como un molde desde el cual crean los objetos. Dado que todos los objetos de una clase
poseen la misma estructura y el mismo comportamiento, la declaración tiene siempre la descripción de la
estructura interna (atributos) y del comportamientos (métodos) comunes de la misma.
Notemos la diferencia fundamental entre un objeto y una clase:
• Un objeto es algo concreto, aunque pueda ser tanto real como abstracto.
• Una clase es una abstracción de un concepto que engloba a determinados los objetos.

Por ejemplo: País, idioma, elefante, libro, taza, auto y empleado son clases.
Bolivia, castellano (abstracto), dumbo, el eternauta, la taza que rompí ayer sin querer, el auto de patente
RAD-025 y Roberto, son objetos, instancias de las correspondientes clases.

Otro ejemplo consistiría en mirar una base de datos, en forma de planilla, en donde la definición de la
tabla en sí misma (campos, descripción y tipos de datos) sería la clase y los objetos serían las filas de la
misma tabla.

Ventajas

• Reducir la brecha entre el mundo de los problemas y el mundo de los modelos


La POO fomenta hacer un modelo del problema a resolver y describir soluciones en término
específicos de cada problema. (Otros se basan en su visión particular o se abstraen solamente del
lenguaje máquina subyacente). El vocabulario y las palabras empleadas son más cercanas al mundo
real que al mundo computacional.
• Aumentar el nivel de complejidad de los sistemas
Puede construirse sistemas de mayor complejidad, al ocultarla bajo la simplicidad de los objetos. (Sí,
pero es elemental un buen diseño)
• Fomentar la reutilización de código, al trabajar con componentes reutilizable.
• Adecuado a la programación en ambientes de interfases gráfica y eventos.
En estos ambientes el usuario tienen toda una gama de accione posibles a realizar y la aplicación debe
estar preparada para responder a estos eventos previstos. La alternativa de objetos permite céntranos
mejor en los mensajes y respuestas que en los procesos q ue antes se ejecutaban en forma
secuencial.
• Mayor facilidad para mantener y expandir
Dado que las clases tienen mecanismos que permiten establecer relaciones que permiten la expansión y
escalabilidad.

Desventajas

• Usar la POO no garantiza obtener 100% beneficios.


• Gran inversión de capital, tiempo y esfuerzo en: Educación, capacitación, práctica.
• Requiere entrenar ampliamente la capacidad de abstracción e imaginación, cosas que no vienen o se
aprenden libros. Existe un factor artístico.
• Lleva tiempo aplicarla correctamente y requiere:
o Programadores muy curiosos, tenaces, competitivos, progresistas.
o Implica dedicarse más a Planear, Analizar y Diseñar antes de Programar
• Los programas pequeños pueden resultar más complicados que otros de mayor envergadura y pueden
tener menor performance.

7 de 8
Curso Java I Paradigmas

Otros paradigmas

Existen otros paradigmas orientados a resolver problemas por vías de la programación. Entre ellos:
• Paradigma declarativo
• Paradigma funcional
• Paradigma Orientado a Aspectos

8 de 8

You might also like