Uploaded by Victor Meza

División de tecnologías para la integración ciber

advertisement
División de tecnologías para la integración ciber-humana
Departamento de ciencias computacionales
Tarea 1
Paradigmas de programación, proceso de abstracción
Meza Diaz Víctor Uriel
POO 2023A - D04 - L & MI - 11 A 1 PM
Mariscal Lugo Luis Felipe
EVOLUCION EN LOS PARADIGMAS PARA CREAR SOWFWARE
La programación es un campo en constante evolución, y a lo largo del tiempo, se han
desarrollado varios paradigmas de programación con el objetivo de mejorar la eficiencia y
la facilidad de uso de los programas. En este ensayo se explorará la evolución de algunos
de los principales paradigmas de programación a lo largo de la historia.
El primer paradigma de programación que surgió fue el de programación estructurada. Este
enfoque se enfocó en la organización lógica del código y la eliminación del uso de salto
incondicional. Esto permitió a los desarrolladores escribir programas más fáciles de leer y
entender, y también ayudó a reducir los errores de programación.
El siguiente paso en la evolución de los paradigmas de programación fue el de
programación orientada a objetos (POO). Este enfoque se enfocó en la encapsulación de
datos y funciones dentro de una entidad llamada "objeto". Esto permitió a los
desarrolladores crear programas más fáciles de mantener y reutilizar, ya que los objetos
podían ser reutilizados en otros programas.
En los últimos años, el paradigma funcional ha ganado popularidad. Este enfoque se enfoca
en la abstracción de los procesos de un programa en funciones matemáticas. Esto permite
a los desarrolladores crear programas más fáciles de probar y mantener, ya que las
funciones son puras y no tienen efectos secundarios. Además, el uso de programación
funcional permite el manejo de operaciones concurrentes de forma más eficiente.
Además de los paradigmas mencionados anteriormente, existen otros enfoques de
programación que también han ganado popularidad a lo largo del tiempo. Uno de ellos es
el paradigma de programación lógica, en el cual se utilizan técnicas de lógica matemática
para representar y resolver problemas. Este paradigma se utiliza principalmente en
aplicaciones de inteligencia artificial y sistemas expertos.
Otro paradigma es la programación basada en eventos, en la cual el programa reacciona a
eventos externos en lugar de seguir un flujo de ejecución predefinido. Este enfoque se utiliza
principalmente en aplicaciones de tiempo real y sistemas distribuidos.
Además, en los últimos años ha habido un aumento en el uso de la programación reactiva,
que se enfoca en la construcción de sistemas escalables y altamente confiables mediante
la programación de sistemas que son capaces de reaccionar automáticamente a los
cambios en el estado del sistema. Este enfoque se utiliza principalmente en aplicaciones
web y móviles, donde es importante mantener una interfaz de usuario fluida y reaccionar
rápidamente a los cambios en el estado de la aplicación.
En resumen, la evolución de los paradigmas de programación ha sido un proceso continuo
que ha llevado a la creación de enfoques más eficientes y fáciles de usar para la
construcción de programas. Cada paradigma tiene sus propias ventajas y desventajas, y
muchos desarrolladores utilizan una combinación de varios paradigmas para crear
programas robustos y eficientes. A medida que la tecnología continúa evolucionando, es
probable que surjan nuevos paradigmas de programación que ofrezcan soluciones a
problemas aún no resueltos.
Además de los paradigmas mencionados anteriormente, hay otro enfoque de programación
que ha ganado popularidad en los últimos años, el paradigma de programación reactiva.
Este enfoque se enfoca en la construcción de sistemas escalables y altamente confiables
mediante la programación de sistemas que son capaces de reaccionar automáticamente a
los cambios en el estado del sistema. Este enfoque se basa en la idea de que los sistemas
deben ser capaces de manejar cambios en el estado de forma eficiente y escalable, y se
utiliza principalmente en aplicaciones web y móviles, donde es importante mantener una
interfaz de usuario fluida y reaccionar rápidamente a los cambios en el estado de la
aplicación.
Otro enfoque que ha ganado popularidad en los últimos años es el paradigma de
programación orientada a microservicios. Este enfoque se basa en la idea de que los
sistemas deben ser construidos como un conjunto de servicios independientes que se
comunican entre sí mediante una interfaz estandarizada. Esto permite a los desarrolladores
crear sistemas altamente escalables y fáciles de mantener, ya que cada servicio puede ser
desarrollado, probado y desplegado de forma independiente.
existe también el paradigma de programación funcional. Este enfoque se basa en la idea
de que los programas deben ser construidos como un conjunto de funciones matemáticas
puras, es decir, funciones que no tienen efectos secundarios y siempre devuelven el mismo
resultado dado el mismo input. Este enfoque promueve la inmutabilidad de los datos y la
composición de funciones, lo que permite construir programas más predecibles y fáciles de
probar.
Otro enfoque que ha ganado popularidad en los últimos años es el paradigma de
programación declarativo. Este enfoque se enfoca en describir qué se quiere lograr en lugar
de cómo se quiere hacerlo. Los lenguajes de programación declarativos, como SQL o
XSLT, son utilizados para definir reglas y relaciones entre diferentes elementos, en lugar
de dar instrucciones explícitas sobre cómo se deben manipular estos elementos.
En conclusión, la evolución de los paradigmas de programación ha sido esencial para el
desarrollo de software. A lo largo de la historia, se han desarrollado diferentes enfoques
para abordar los problemas de programación, cada uno con sus propias ventajas y
desventajas. Los paradigmas imperativos y estructurados, como el lenguaje de
programación C, se enfocan en dar instrucciones detalladas sobre cómo se deben
manipular los datos. Los paradigmas orientados a objetos, como Java o C++, se enfocan
en la creación de objetos y la encapsulación de datos. El paradigma de programación
funcional se basa en la idea de que los programas deben ser construidos como un conjunto
de funciones matemáticas puras. El paradigma declarativo se enfoca en describir qué se
quiere lograr en lugar de cómo se quiere hacerlo.
Cada uno de estos paradigmas tiene sus propias ventajas y desventajas, y muchos
desarrolladores utilizan una combinación de varios paradigmas para crear programas
robustos y eficientes. Es importante que los desarrolladores estén familiarizados con los
diferentes paradigmas de programación y sus características para poder elegir el que mejor
se adapte a las necesidades del proyecto. A medida que la tecnología continúa
evolucionando, es probable que surjan nuevos paradigmas de programación que ofrezcan
soluciones a problemas aún no resueltos. Es importante tener en cuenta que la evolución
de los paradigmas de programación no es un proceso estático, sino continuo y en constante
cambio, y es necesario estar al tanto de las nuevas tendencias y herramientas para poder
aprovecharlas al máximo. En resumen, la evolución de los paradigmas de programación ha
sido fundamental para el desarrollo de software y es esencial para crear sistemas eficientes
y escalables.
LA ABSTRACCION EN LA PROGRAMACION
La abstracción más que una palabra elegante de programación es un concepto que
aplicamos en nuestra vida diaria. Especialmente útil y necesaria en la programación,
aunque un poco complejo de entender al principio y aplicarlo adecuadamente. Si no sabes
qué es y cómo se relaciona con la programación, puede que te interese esta publicación.
Los humanos dependemos tanto de la abstracción que, virtualmente, nuestra vida cotidiana
se basa en ella. Damos por hechas muchas cosas a nuestro alrededor, abstrayéndonos de
su funcionamiento interno; simplemente conociendo qué hace, qué necesita para hacerlo
pero no cómo lo hace.
Piensa un poco y analiza con cuantos objetos interactúas diariamente de los cuales no
tienes idea de cómo funcionan y la verdad, no tienes que saberlo. La mayoría de nuestras
investigaciones científicas se basan en conclusiones de trabajos de otras personas, donde
se da por hecho que algo funciona como dice que funciona, y trabajan sobre esas
conclusiones sin tener que empezar todo desde cero. Esta es una buena manera de
avanzar reusando el trabajo existente, abstrayéndonos de los detalles internos lo que nos
permite funcionar en un nivel más alto.
¿Te has preguntado cómo funciona un televisor? Pues si lo pensamos un poco, le damos
energía eléctrica, alguna señal y esperamos que nos muestre imágenes. Ahí estamos
abstrayendo muchos detalles. ¿Sabes cómo funciona la pantalla del televisor? ¿Sabes
cómo se representan los colores en la pantalla del televisor?
No necesitas saber cómo funciona algo para usarlo
El concepto de Caja Negra
Este término se usa como analogía para hacer referencia a componentes o sistemas de los
cuales no se conocen los detalles internos de su funcionamiento.
Básicamente, llamamos caja negra a aquellas cosas que le hemos aplicado la abstracción,
es decir, no queremos saber sus detalles internos, solamente como interactuar con ese
algo. Para eso, debemos saber qué necesita para funcionar y cuál es el resultado que
genera (entrada y salida).
Así como en los ejemplos anteriores, vemos muchas cosas como “cajas negras”: un
televisor, un auto, una máquina de helados, una calculadora, un restaurante, el cuerpo
humano, y muchísimas cosas más.
Este concepto es esencial para los programadores porque, basados en él, podemos
reutilizar programas y códigos de otras personas simplemente conociendo su entrada y los
resultados que produce.
La abstracción como técnica para analizar problemas
Imaginemos a un pintor de paredes que debe cotizar cuanto cobrar por pintar una casa.
Este seguramente abstrae los detalles de una casa cuando está analizando lo que debe
hacer. Al pintor no le interesa el estado del suelo, ni el estado del techo, o de las puertas.
Al pintor solo le interesa el estado de las paredes. En su mente, el objeto que está
analizando deja de ser una casa completa y se convierte en puras paredes y se enfoca en
analizar eso solamente.
Lo mismo ocurre con el plomero. A él no le interesa nada más que las tuberías, el material
del cual están hechas, su ubicación, etc. Entonces deja de pensar en las cosas irrelevantes
para su problema inmediato y se enfoca únicamente en ese problema específico.
En estos casos, ellos saben bien en qué deben enfocarse. Ellos llevan años en su negocio
y saben bien qué ignorar y qué no. Su experiencia juega un papel importante.
En la programación, muchas veces no es sencillo saber que es relevante y que no lo es.
La programación es multi-disciplinaria
Como ya mencioné en otra publicación. La programación es, básicamente, resolver
problemas. Los programadores aprenden a (o aspiran) resolver problemas de la manera
más eficiente. Sin embargo, no pueden pretender saber todo acerca de todas las carreras
que existen y todas las áreas de conocimiento.
Para llevar con éxito un proyecto complejo, que cumpla con la necesidad del cliente y su
negocio, es necesario aprender un poco de ese negocio; de esa disciplina. Si trabajas en
un sistema de contabilidad, pues el programador debe entender un poco de contabilidad.
Si trabajas en un sistema de ventas, entonces el programar debe entender un poco de
logística e inventario.
Nuestra suposición es que, en principio, no vamos a saber más que nuestro cliente de su
negocio. Después de todo, es posible que ellos hayan estudiado una carrera para eso, o
tenga muchos años de experiencia en el área. Incluso si tú, como programador, también
has tenido experiencia en esa área, puede que ese cliente maneje procesos particular de
los cuales tú no conoces nada. Así que vamos a trabajar sobre esa suposición: Nuestro
cliente sabe más de su negocio que nosotros.
Para poder resolver un problema, primero debemos entenderlo. Si no lo entendemos, no
vamos a hallar la solución. Si al área de conocimiento resulta totalmente ajena a nosotros
(i.e. podemos no saber absolutamente nada del tema), aplicar la abstracción nos ayudara
a entender mejor el problema, al enfocarnos únicamente en los detalles que son relevantes
para ese problema o partes de ese problema.
Un problema complejo puede ser dividido en varios problemas más simples. Estos, a su
vez, pueden ser divididos en otros más pequeños, hasta que tengamos un conjunto de
problemas relativamente triviales o cuya solución sea fácil de hallar.
¿Quieres una tienda online? Bien, ¿Cómo está compuesta la tienda? ¿Qué productos
tienes? ¿Qué categorías de productos? ¿Qué descuentos ofreces?. Todas estas preguntas
rompen un problema más grande como el de una tienda online, en problemas más
pequeños y manejables. Estos problemas más pequeños los podría romper aún más,
abstrayéndome de los otros problemas, momentáneamente, para enfocarme en una sola
cosa a la vez.
La abstracción como herramienta para el modelado
El modelado en la programación es esencial para ayudar a resolver problemas,
representando partes o componentes de ese problema. Lo que se trata de modelar o
representar en el programa es el funcionamiento de estas partes. Siguiendo el ejemplo de
la tienda online, un carrito de compras en un sitio web es una representación de un carrito
de compras real, es decir, cumple una funciona similar al llevar los artículos que deseamos
comprar. Sin embargo, no es un carro de compras real; no es físico; y realmente no estás
llevando un carro de compras en tus manos. Es simplemente una representación o modelo.
En este orden de ideas, podríamos decir que un modelo es la representación de un objeto
real o un concepto abstracto (como una cuenta contable) del mundo real, perteneciente al
dominio o área de conocimiento del cual queremos automatizar los procesos y que le hemos
aplicado el proceso de abstracción, es decir, al modelar algo realmente estamos eliminando
detalles que no son relevantes.
Una auto de juguete es básicamente un modelo. Se ignoraron detalles del auto real para
hacer ese juguete. Detalles como, por ejemplo, un motor funcional, o tanque de
combustible, entre muchos otros. Entonces no podemos decir que ese juguete es auto real,
y simplemente es una representación “abstracta” del auto.
¿Abstracta? “Gabo, no es abstracta porque el juguete tiene forma de el auto real”. Pues hay
diferentes niveles de abstracción. Podemos decir que en el momento en que ignoramos
detalles de un objeto, ya estamos creando una representación abstracta (sin algunos
detalles) de ese objeto. El nivel de abstracción dependerá que tantos detalles removamos
en nuestro modelo.
Consideremos un traje y tratemos de aplicar distintos niveles de abstracción. Empezando,
tenemos dos extremos: un extremo con el nivel mínimo de abstracción (ninguna
abstracción) donde encontramos al objeto real con absolutamente todos los detalles.
Mientras, en el otro extremo tenemos el nivel máximo de abstracción donde removemos
todos los detalles y nos queda absolutamente nada, solo un vacío. (Si yo ofrezco un traje
transparente y lo vendo, pues efectivamente, es un traje para quien lo quiera ver de esa
forma).
Dentro de estos dos extremos hay muchísimos niveles. Yo podría ignorar el color, ignorar
el material, ignorar la forma, entre muchas otros detalles. Mi nivel de abstracción puede ser
totalmente diferente al de alguien más. De hecho, es extremadamente común que dos
personas hallen soluciones diferentes al mismo problemas porque, entre otras cosas,
aplicaron un nivel diferente de abstracción y es aquí donde la buena comunicación juega
un papel importante para que todos se puedan entender.
¿Qué sucede si omito demasiados detalles al resolver un problema? Si esto sucede, tu
solución puede tener huecos y no funcionar para situaciones específicas.
¿Qué sucede si omito pocos detalles? Entonces tu solución puede resultar mucho más
compleja de lo que debería ser, aumentando costos en tiempo, dinero, mantenimiento, etc.
Encontrar el nivel de abstracción adecuado no es trivial. En mi opinión, es algo que viene
teniendo una buena preparación y conocimientos sólidos como bases, y la experiencia de
trabajar en diferentes proyectos con diferentes personas, evaluando sus puntos de vista y
objetivamente evaluando cada uno de los enfoques.
Bibliografía
La Abstracción en la programación. (s/f). Esgabo.dev. Recuperado el 29 de enero de 2023,
de https://esgabo.dev/blog/la-abstraccion-en-la-programacion/
Evolución de los paradigmas de la programación. (2013, agosto 13). Alexander.
https://alexanderyasno.wordpress.com/evolucion-de-los-paradigmas-de-la-programacion/
Download