Buscar en este blog
viernes, 14 de junio de 2024
Inicio
jueves, 14 de marzo de 2024
OOo Basic
Modelos de programación
Programación imperativa vs. programación estructurada.
Aunque sin entrar en explicaciones teóricas complejas, sobre las que el lector puede encontrar buenos textos en la web o consultar la bibliografía especializada, me interesa para el desarrollo de nuestros conocimientos de programación, iniciar esta sección sobre los modelos de programación, hablando, aunque sea brevemente, de dos modelos básicos de programación: la lineal (o imperativa) y la estructurada (también modular). Estas denominaciones pueden no ser estrictas desde la perspectiva de la teoría y la historia de los modelos de programación, pero es útil a mi objetivo, ya que permitirá diferenciar dos estrategias básicas (las dos de mayor uso en este blog).
Las tres estrategias básicas de la programación son la linealidad o sucesión lineal, la bifurcación y la iteración. Con ellas se construyen los algoritmos que son, en lo fundamental, combinaciones más o menos complejas y más o menos extensa de estas tres estrategias, si bien, según el modelo de programación, primarán unas u otras. Por ejemplo, en la programación imperativa es fundamental el uso de la estrategia lineal.
En efecto, la programación imperativa, que yo voy a asimilar al concepto de linealidad (de ahí lo de programación lineal), es el modelo de programación más antiguo, según el cual un programa es una secuencia de instrucciones sucesivas. Integra también el uso de ciclos o bucles y condicionales, pero se caracteriza por el uso (a veces profusamente) de la instrucción GoTo.
Mediante GoTo (también GOTO) se redirige el programa a una posición determinada de la secuencia de instrucciones, en función de determinadas condiciones. Este modo de proceder es fuente de que lo que en principio se enuncia como simple, termine por convertirse en complejo, y sobre todo dificulta el seguimiento del programa.
Es el modelo de programación que subyace a los lenguajes Basic iniciales y hoy en día no se practica como tal modelo, debido a las dificultades de gestión y mantenimiento que genera el uso de GoTo y por requerir largas secuencias de instrucciones.
Como alternativa, surgió el modelo de programación estructurada (década de 1960), una de cuyas evoluciones a posteriori fue el modelo de programación modular.
Al contrario de la programación imperativa, en la programación estructurada no se hace uso de la sentencia GoTo, optando por el uso de subrutinas ejecutadas (eso sí) secuencialmente, y privilegiando el uso de las estructuras de control (condicionales, ciclos e iteraciones o ciclos con condición inicial)
Una evolución (según algunos autores) de la programación estructurada es la programación modular que se caracteriza por subdividir un programa en módulos o subprogramas a los que se recurre en función del desarrollo del algoritmo, lo que la diferencia de la programación estructurada, que mantiene el principio de linealidad en es uso de las subrutinas. Una ventaja añadida del modelo modular es la posibilidad de reutilizar código (módulos) en función de necesidades, lo que reduce la extensión del programa final.
Después de esta breve introducción, me interesa justificar su utilidad de cara a que entendamos el proceso de diferenciación que paulatinamente vamos a ver desarrollada cuando nos iniciemos, por ejemplo, en el conocimiento de los procedimientos de trabajo que vamos a desarrollar sobre OOo Basic.
También será de interés a la hora de analizar cómo trabajar de forma más funcional con el código que genera Grabar macro y nuestra conversión del mismo en subrutinas o en funciones diferenciadas.
Lo que no voy a hacer, en este caso, es ejemplificar en PSeInt estos dos (a grandes rasgos) modelos de programación: lineal vs. estructurada-modular (que es la diferenciación que realmente nos interesa) porque nos aporta poco desde esta perspectiva y porque lo tendremos que trabajar con cierta profundidad en los contextos que antes señalé.
miércoles, 13 de marzo de 2024
Inicio
La programación como recurso para los SEO
sábado, 15 de julio de 2023
OOo Basic. Script
Macros. Programación modular
jueves, 2 de febrero de 2023
Contenidos. Modelos de programación.
POO. Conceptos básicos.
Para empezar, desde la perspectiva con la que estamos trabajando, podemos decir que la programación orientada a objetos (POO) es un desarrollo de la programación funcional en la que "empaquetamos" juntos (en una clase) una serie de variables que contienen datos relevantes sobre ese algo con el que queremos trabajar (atributos) y una serie de funciones, que ahora llamamos métodos y que representa el comportamiento típico e igualmente relevante de ese algo. Ese algo es la concreción de la clase y se llama objeto, que no es otra cosa que una instancia de la clase.
La POO se acerca al modo en que funcionan las cosas en la realidad, lo que facilita el desarrollo de programas sostenibles y fáciles de mantener, compuesto por piezas simples y reutilizables que interaccionan entre si.
Además, al igual que sucede con la programación funcional, son pertinentes los conceptos de abstracción y encapsulamiento, ambos complementarios entre sí. Esta pertinencia refuerza la idea de que la POO está emparentada con la programación funcional:
- Abstracción: Es posible utilizar una clase sin conocer cómo está implementada, siempre que sepamos cómo hacerla funcionar, lo que consigue mediante un contrato o conjunto de instrucciones.
- Encapsulamiento: Este desconocimiento hace que la clase funciones como una caja negra, de modo que ignorar cómo está constituida no afecta a nuestra capacidad de utilizarla.
- Por herencia entendemos que una clase puede provenir de una super clase (clase o nivel de abstracción superior) o ser base para la creación de clases derivadas, secundarias o subclases. Entre la superclase, la clase y las subclases existe una relación que denominamos herencia por la cual las clases derivadas heredan las características de las clases de las que proceden.
- Finalmente, el polimorfismo (múltiples formas) permite que una característica (definida en la superclase) se concrete de forma diferente en cada una de las clases derivadas.
jueves, 26 de enero de 2023
Ooo Basic
Modelos de programación
Aunque esto pueda parecer muy abstracto, en realidad es una forma muy común de proceder cuando nos encontramos con problemas complejos. El famoso "vamos por partes..." no es más que la vulgarización de esta filosofía de trabajo.
Desde el punto de vista de la programación (que es lo que nos ocupa), el siguiente esquema representa el procedimiento de trabajo que supone aplicar el modelo o paradigma funcional.
- De arriba a abajo
- O de abajo a arriba
- Simplifica la resolución de problemas complejos.
- Facilita la comprensión del algoritmo
- Simplifica la realización de pruebas y la depuración del código
- Permite reutilizar código
- Reduce el tiempo de escritura del programa
- Genera programas más fáciles de mantener y de modificar
- Facilita trabajar en grupo y la propia organización de este modo de trabajo.
def factorial(n):
if n==0:return 1else:return n * factorial(n-1) # En este punto se produce la reutilización de la función
dentro de la misma función (recursividad)
def main():n=eval(input("Introduce un entero positivo para calcular su factorial: "))print("El factorial de ", n , " es ", factorial(n))main()
lunes, 7 de noviembre de 2022
OOo Basic
Modelos de programación
Programación modular
Cuando un programa, una aplicación o como sea pertinente o preferible llamarlo, es de cierta complejidad, ésta se refleja en su extensión en número de líneas, pero y también, en su complejidad. Dentro de estos dos parámetros podemos incluir la repetición de una serie de líneas de código con funcionalidad específica que se pueden identificar como unidades de acción.
Cuando tomamos estas unidades de acción como objeto de análisis y trabajo, y las aislamos del desarrollo del script principal y los llamamos desde éste, pasamos de trabajar siguiendo un modelo lineal de programación a un modelo modular. Este modelo supone una simplificación de los procedimientos de trabajo y una economía de tiempo, y es posible porque estos segmentos de código pueden ser llamados desde el algoritmo principal tantas veces como sea necesario, ahorrando así su repetición.
El modelo modular no rompe la lógica del modelo lineal, simplemente hace más eficiente nuestro algoritmo, más sostenible y más robusto. Además, esos segmentos pueden ser reutilizados en otros programas o aplicaciones, lo que incrementa nuestra eficiencia a la hora de desarrollar proyectos.
En líneas generales, el comportamiento de estos módulos que llamaremos funciones, en sentido general, por cumplir una función específica, presentan estos comportamientos:
- En este esquema he representado el script principal y dos funciones que son empleadas por dicho script. La fecha verde representa el discurrir del algoritmo, que, como se puede ver, sigue un proceso lineal (de arriba abajo), tal y como representan esas flechas .
- La función Secundario A toma el control del flujo en el momento en que es llamada (en ese momento es A quien determina qué hace nuestro algoritmo), finaliza su cometido y devuelve (por decirlo de alguna manera) el control al script principal, que reanuda el control del desarrollo del algoritmo
- La función Secundario B es llamada (utilizada) por el script principal, se ejecuta y devuelve al script principal el resultado de su propio procesamiento, pero no toma el control del desarrollo del algoritmo, que sigue siendo responsabilidad del script principal.










