Programación estructurada
Un lenguaje de programación puede ser una potente herramienta en manos de un programador adiestrado. Pero las herramientas por sí solas no son garantía de calidad; los mejores programadores disponen de técnicas específicas para obtener el máximo rendimiento de sus programas. En la corta historia de la programación de computadoras, los informáticos han desarrollado nuevas metodologías que han conseguido hacer más productivos a los programadores y más fiables a los programas.
Por ejemplo, los informáticos de finales de los 60 reconocían que la mayoría de los programas FORTRAN y BASIC estaban repletos de sentencias GoTo, las cuales transfieren el control a otras partes del código. La estructura lógica de un programa con sentencias
GoTo puede llegar a parecerse a una intrincada red de araña. Cuanto mayor es ese programa, mayor es el laberinto lógico y la posibilidad de cometer errores. Cada rama de un programa representa un cabo suelto que el programador debe pasar por alto.
En un intento por superar estos problemas, los informáticos desarrollaron la programación estructurada, una técnica para hacer más productivo y sencillo el proceso de programación. Un programa estructurado no depende de sentencias GoTo para controlar su flujo de ejecución. En lugar de ello, está construido a base de pequeños programas, llamados módulos o subprogramas, los cuales a su vez también están construidos a partir de otros módulos más pequeños. El programador combina estos
subprogramas mediante las tres estructuras de control básicas: secuencia, repetición y selección. Un programa está bien estructurado si cumple las siguientes reglas:
• Esta construido sobre la base de módulos lógicamente coherentes.
• Los módulos están ordenados jerárquicamente.
• Es sencillo y fácil de leer.
Pascal y Ada fueron diseñados para fomentar la programación estructurada y disuadir del «código spaghetti». El éxito de estos lenguajes indujo a los informáticos a desarrollar versiones de Basic y ORTRAN que siguieran los patrones de la programación
estructurada.
La evolución de Basic
El lenguaje de programación Basic ha pasado por tres fases en su evolución. Estos ejemplos muestran el modo en el que el proceso de programación ha cambiado durante las tres últimas décadas. Los dos primeros son listados completos del programa para acertar el número (el algoritmo desarrollado anteriormente); el tercer ejemplo es el esbozo de un programa para jugar a una tragaperras.
1. Basic de los primeros días. El programa con las
líneas numeradas está escrito en una versión simple
de Basic (el único tipo disponible en los primeros
días). Las sentencias son ejecutadas por
orden numérico a menos que una sentencia GoTo transfiera
el control a otra parte del programa.
10 REM INITIALIZE
20 RANDOMIZE
30 PRINT “ACIERTA EL NÚMERO”
40 PRINT “ESTOY PENSANDO EN UN NÚMERO COMPRENDIDO ENTRE 1 Y 100.”
50 PRINT “INTENTA ACERTARLO”
60 LET C = 0
70 LET N = INT(RND(1) * 100)
80 INPUT “¿CUÁL ES TU APUESTA?”;G
90 IF G = N THEN PRINT “¡ENHORABUENA! HAS ACERTADO”
100 IF G < N THEN PRINT “EL NÚMERO INTRODUCIDO ES MENOR QUE EL QUE BUSCO.
INTÉNTALO OTRA VEZ”
110 IF G > N THEN PRINT “EL NÚMERO INTRODUCIDO ES MAYOR QUE EL QUE BUSCO.
INTÉNTALO OTRA VEZ”
120 LET C = C + 1
130 IF C = 7 THEN GOTO 180
140 IF G <> N THEN GOTO 80
150 IF G <> N THEN PRINT “¡HAS GASTADO TUS SIETE INTENTOS! EL NÚMERO QUE TENÍAS
QUE ACERTAR ERA” ;N
160 END
2. Basic estructurado. El siguiente programa modular
está escrito en QuickBASIC, una versión
más moderna del lenguaje que dispone de ciertas
características de programación estructurada.
El programa principal se ha reducido a un
puñado de sentencias al comienzo del listado
(tras la sentencia DECLARE); estas sentencias
muestran la lógica general del programa. A medida
que se ejecuta, el programa principal utiliza
sentencias CALL para transferir el control a
cada uno de los tres subprogramas, los cuales
se encargan del inicio del juego, de cada uno de
los turnos y del final del mismo.
10 REM INITIALIZEREM El juego de acertar el número
REM escrito por Rajeev Pandey
DECLARE SUB StartGame (Counter!, Number!)
DECLARE SUB Turn (Counter!, Guess!, Number!)
DECLARE SUB EndGame (Number!)
CALL StartGame(Counter, Number)
DO
CALL Turn(Counter, Guess, Number)
LOOP UNTIL (Guess = Number) OR (Counter = 7)
IF Guess <> Number THEN
CALL EndGame(Number)
END IF
SUB EndGame (Number)
PRINT “¡Has gastado tus 7 intentos!”
PRINT “El número que tenías que acertar era”; Number
END SUB
SUB StartGame (Counter, Number)
PRINT “¡Bienvenido al juego de acertar el número. Estoy pensado
en un número”
PRINT “comprendido entre 1 y 100 y tienes que acertarlo.”
Counter = 0
RANDOMIZE TIMER
Number = INT(RND(1) * 100)
END SUB
SUB Turn (Counter, Guess, Number)
INPUT “¿Cuál es tu apuesta?”; Guess
IF Guess = Number THEN
PRINT “¡Enhorabuena! Has acertado.”
ELSE
IF Guess < Number THEN
PRINT “El número introducido es menor que el que busco.
Inténtalo otra vez.”
ELSE
PRINT “El número introducido es mayor que el que busco.
Inténtalo otra vez.”
END IF
END IF
Counter = Counter + 1
END SUB
3. Visual Basic. La imagen muestra un ejemplo
del popular Visual Basic de Microsoft, un moderno
entorno de programación que incluye
muchas de las ideas y herramientas de la programación
orientada a objetos.
Programación orientada a objetos
La programación estructurada representó un enorme paso hacia delante para los programadores; les permitió producir programas mejores y más fiables en menos tiempo.
Pero ésta no fue la última palabra en lo referente a la programación; en la actualidad, la OOP (Programación orientada a objetos, Object-Oriented Programming)
ha capturado la atención de la comunidad desarrolladora de software. Este tipo de programación
se utilizó por primera vez en la década de los 70 a través de un lenguaje llamado Smalltalk. En la OOP, un programa no es sólo una colección de sentencias
paso a paso o de procedimientos; es una colección de objetos. Estos elementos contienen datos e instrucciones y pueden enviar y recibir mensajes. Por ejemplo, un botón de una aplicación multimedia podría ser un objeto que contuviera una descripción del aspecto de dicho botón y un script que dijera lo que debe hacer cuando reciba un clic del ratón desde el sistema operativo. Este objeto botón puede ser reutilizado fácilmente en otros programas porque contiene todo lo necesario para operar.
Con la tecnología OOP, los programadores pueden construir programas a partir de objetos prefabricados del mismo modo que los albañiles pueden fabricar una casa a partir de muros prefabricados. La OOP también facilita el uso de características de un programa en otros, de modo que los programadores no tengan que empezar de cero con cada nuevo programa. Un objeto que ordena alfabéticamente las direcciones de una base de datos para un mailing también puede utilizarse en un programa que ordene las reservas de un hotel.
Smalltalk aún sigue utilizándose para la programación OOP, aunque cada vez son más los lenguajes que incluyen esta tecnología. C++, que utilizamos en un ejemplo anterior, es un popular dialecto de C que soporta programación orientada a objetos.
C++ no contiene objetos visuales como iconos. En apariencia, se parece a cualquier otro lenguaje. Pero su naturaleza orientada al objeto permite que los programadores escriban programas alrededor de objetos lógicos en lugar de procedimientos. Java tiene más diseño OOP que C++.
Las herramientas y técnicas orientadas al objeto se han vuelto algo corriente en bases de datos, programas de creación multimedia y otros entornos software. Esta programación está especialmente adaptada para programas con mucha carga interactiva (como sistemas operativos gráficos y juegos) y programas que imiten o reflejen alguna parte dinámica del mundo real (como simulaciones y sistemas de control de tráfico aéreo). Muchos expertos creen que la OOP es el futuro.
Programación orientada a objetos
El paradigma de la programación estructurada sigue la visión clásica de los datos como material en bruto que
se procesan en una cadena de montaje.
Todos los programas informáticos procesan datos de una forma o de otra.
Pero internamente, la programación orientada a objetos rechaza la metáfora de la línea de montaje.
El dogma fundamental de la OOP es que el software debe estar diseñado utilizando las mismas técnicas que emplean las personas para comprender y categorizar el mundo que los rodea.
En OOP, un programa se diseña para estar compuesto por objetos, cada uno de ellos con sus propias características o atributos (llamadas propiedades) y las acciones que puede realizar (llamadas métodos).
Cada objeto tiene una cara «pública»: las propiedades y métodos que otros objetos pueden ver y con los que pueden interactuar. Los objetos también tienen métodos privados para su uso interno.
En OOP, los datos están todos juntos, o encapsulados, con los métodos y propiedades del objeto. Cada uno de ellos puede mantener su propio almacén de datos.
La OOP también cuenta con la idea de la categorización jerárquica de objetos, lo que permite que los programadores puedan crear nuevos objetos que deriven de otros que ya estén definidos. El nuevo objeto puede heredar las propiedades
y métodos del objeto del que desciende, además de poder definir otras propiedades y métodos en caso de ser necesario.
Las personas han utilizado las jerarquías durante siglos para comprender el mundo físico y biológico.
¿Cómo se puede poner todo esto en práctica para, digamos, un sistema operativo gráfico? Por ejemplo, podría existir un objeto «ventana» genérico, entre cuyas propiedades se incluyese su tamaño, posición, color, etc., y los métodos que contuviesen las instrucciones de lo que se debe hacer cuando se redimensiona o cierra esa ventana. De ésta puede derivar otra ventana más específica que, por ejemplo, dispusiera de barras de desplazamiento.
Programación visual
Muchas personas encuentran más fácil trabajar con imágenes en lugar de con palabras.
Las herramientas de programación visual permiten a los programadores crear grandes secciones de sus programas arrastrando imágenes y apuntando a objetos en pantalla, lo que elimina una gran parte del tedioso proceso de codificar al modo tradicional.
HyperCard de Apple fue probablemente el primer ejemplo de un entorno de programación visual. HyperCard incluía un lenguaje de programación llamado Hyper- Talk, aunque un programador no necesitaba conocer este lenguaje para crear aplicaciones
productivas.
En la actualidad, el Visual Basic de Microsoft es utilizado ampliamente por profesionales y fanáticos de la programación debido a su propuesta de programación visual. Visual J++ aplica una estructura similar pero con el lenguaje Java. Las herramientas
de programación visual actuales no han conseguido aún transformar el proceso de programación en una tarea visual; los programadores todavía tienen que saber
codificar para llevar a cabo operaciones más complejas. Pero estas herramientas pueden ahorrar horas de tiempo de codificación, sobre todo cuando se crean interfaces de usuario, la cubierta gráfica que interactúa con los usuarios. Debido a que pueden simplificar muchas de las complicadas tareas del proceso de programación, los lenguajes visuales han conseguido acercar este arte a los no programadores.
Lenguajes para los usuarios
Algunos lenguajes están diseñados para los no-programadores. No son tan potentes y versátiles como las herramientas profesionales pero cumplen con las necesidades más modestas de sus usuarios.
Lenguajes de macro
Muchos lenguajes orientados al usuario están proyectados para que sus usuarios potenciales puedan crear programas, llamados macros, que automaticen tareas repetitivas.
Los lenguajes de macro orientados al usuario (también conocidos como lenguajes de script) están incluidos en muchas aplicaciones, utilidades y sistemas operativos. A través de estas macros, el usuario de una hoja de cálculo puede construir un programa para crear automáticamente informes mensuales que localicen datos contenidos en otras hojas de cálculo, los inserten en una hoja nueva y calculen los resultados mediante
fórmulas contenidas en los ficheros de meses anteriores. A través de un lenguaje de script de un sistema operativo, un usuario podría automatizar el proceso de backup de todos los documentos creados durante la última semana.
Algunos lenguajes de macro requieren que usted diseñe y teclee el código a mano, del mismo modo que si estuviera codificando en Basic. De hecho, Microsoft Office incluye una variación de tipo script de Visual Basic llamado VBA (Visual Basic para aplicaciones, Visual Basic for Applications). Otro tipo de generadores de macros «observa » mientras el usuario ejecuta una secuencia de comandos y acciones, y los registra para convertirlos después en una macro. El usuario puede entonces examinar y editar la macro para llevar a cabo las acciones necesarias en determinadas circunstancias.
Un lenguaje de programación puede ser una potente herramienta en manos de un programador adiestrado. Pero las herramientas por sí solas no son garantía de calidad; los mejores programadores disponen de técnicas específicas para obtener el máximo rendimiento de sus programas. En la corta historia de la programación de computadoras, los informáticos han desarrollado nuevas metodologías que han conseguido hacer más productivos a los programadores y más fiables a los programas.
Por ejemplo, los informáticos de finales de los 60 reconocían que la mayoría de los programas FORTRAN y BASIC estaban repletos de sentencias GoTo, las cuales transfieren el control a otras partes del código. La estructura lógica de un programa con sentencias
GoTo puede llegar a parecerse a una intrincada red de araña. Cuanto mayor es ese programa, mayor es el laberinto lógico y la posibilidad de cometer errores. Cada rama de un programa representa un cabo suelto que el programador debe pasar por alto.
En un intento por superar estos problemas, los informáticos desarrollaron la programación estructurada, una técnica para hacer más productivo y sencillo el proceso de programación. Un programa estructurado no depende de sentencias GoTo para controlar su flujo de ejecución. En lugar de ello, está construido a base de pequeños programas, llamados módulos o subprogramas, los cuales a su vez también están construidos a partir de otros módulos más pequeños. El programador combina estos
subprogramas mediante las tres estructuras de control básicas: secuencia, repetición y selección. Un programa está bien estructurado si cumple las siguientes reglas:
• Esta construido sobre la base de módulos lógicamente coherentes.
• Los módulos están ordenados jerárquicamente.
• Es sencillo y fácil de leer.
Pascal y Ada fueron diseñados para fomentar la programación estructurada y disuadir del «código spaghetti». El éxito de estos lenguajes indujo a los informáticos a desarrollar versiones de Basic y ORTRAN que siguieran los patrones de la programación
estructurada.
La evolución de Basic
El lenguaje de programación Basic ha pasado por tres fases en su evolución. Estos ejemplos muestran el modo en el que el proceso de programación ha cambiado durante las tres últimas décadas. Los dos primeros son listados completos del programa para acertar el número (el algoritmo desarrollado anteriormente); el tercer ejemplo es el esbozo de un programa para jugar a una tragaperras.
1. Basic de los primeros días. El programa con las
líneas numeradas está escrito en una versión simple
de Basic (el único tipo disponible en los primeros
días). Las sentencias son ejecutadas por
orden numérico a menos que una sentencia GoTo transfiera
el control a otra parte del programa.
10 REM INITIALIZE
20 RANDOMIZE
30 PRINT “ACIERTA EL NÚMERO”
40 PRINT “ESTOY PENSANDO EN UN NÚMERO COMPRENDIDO ENTRE 1 Y 100.”
50 PRINT “INTENTA ACERTARLO”
60 LET C = 0
70 LET N = INT(RND(1) * 100)
80 INPUT “¿CUÁL ES TU APUESTA?”;G
90 IF G = N THEN PRINT “¡ENHORABUENA! HAS ACERTADO”
100 IF G < N THEN PRINT “EL NÚMERO INTRODUCIDO ES MENOR QUE EL QUE BUSCO.
INTÉNTALO OTRA VEZ”
110 IF G > N THEN PRINT “EL NÚMERO INTRODUCIDO ES MAYOR QUE EL QUE BUSCO.
INTÉNTALO OTRA VEZ”
120 LET C = C + 1
130 IF C = 7 THEN GOTO 180
140 IF G <> N THEN GOTO 80
150 IF G <> N THEN PRINT “¡HAS GASTADO TUS SIETE INTENTOS! EL NÚMERO QUE TENÍAS
QUE ACERTAR ERA” ;N
160 END
2. Basic estructurado. El siguiente programa modular
está escrito en QuickBASIC, una versión
más moderna del lenguaje que dispone de ciertas
características de programación estructurada.
El programa principal se ha reducido a un
puñado de sentencias al comienzo del listado
(tras la sentencia DECLARE); estas sentencias
muestran la lógica general del programa. A medida
que se ejecuta, el programa principal utiliza
sentencias CALL para transferir el control a
cada uno de los tres subprogramas, los cuales
se encargan del inicio del juego, de cada uno de
los turnos y del final del mismo.
10 REM INITIALIZEREM El juego de acertar el número
REM escrito por Rajeev Pandey
DECLARE SUB StartGame (Counter!, Number!)
DECLARE SUB Turn (Counter!, Guess!, Number!)
DECLARE SUB EndGame (Number!)
CALL StartGame(Counter, Number)
DO
CALL Turn(Counter, Guess, Number)
LOOP UNTIL (Guess = Number) OR (Counter = 7)
IF Guess <> Number THEN
CALL EndGame(Number)
END IF
SUB EndGame (Number)
PRINT “¡Has gastado tus 7 intentos!”
PRINT “El número que tenías que acertar era”; Number
END SUB
SUB StartGame (Counter, Number)
PRINT “¡Bienvenido al juego de acertar el número. Estoy pensado
en un número”
PRINT “comprendido entre 1 y 100 y tienes que acertarlo.”
Counter = 0
RANDOMIZE TIMER
Number = INT(RND(1) * 100)
END SUB
SUB Turn (Counter, Guess, Number)
INPUT “¿Cuál es tu apuesta?”; Guess
IF Guess = Number THEN
PRINT “¡Enhorabuena! Has acertado.”
ELSE
IF Guess < Number THEN
PRINT “El número introducido es menor que el que busco.
Inténtalo otra vez.”
ELSE
PRINT “El número introducido es mayor que el que busco.
Inténtalo otra vez.”
END IF
END IF
Counter = Counter + 1
END SUB
3. Visual Basic. La imagen muestra un ejemplo
del popular Visual Basic de Microsoft, un moderno
entorno de programación que incluye
muchas de las ideas y herramientas de la programación
orientada a objetos.
Programación orientada a objetos
La programación estructurada representó un enorme paso hacia delante para los programadores; les permitió producir programas mejores y más fiables en menos tiempo.
Pero ésta no fue la última palabra en lo referente a la programación; en la actualidad, la OOP (Programación orientada a objetos, Object-Oriented Programming)
ha capturado la atención de la comunidad desarrolladora de software. Este tipo de programación
se utilizó por primera vez en la década de los 70 a través de un lenguaje llamado Smalltalk. En la OOP, un programa no es sólo una colección de sentencias
paso a paso o de procedimientos; es una colección de objetos. Estos elementos contienen datos e instrucciones y pueden enviar y recibir mensajes. Por ejemplo, un botón de una aplicación multimedia podría ser un objeto que contuviera una descripción del aspecto de dicho botón y un script que dijera lo que debe hacer cuando reciba un clic del ratón desde el sistema operativo. Este objeto botón puede ser reutilizado fácilmente en otros programas porque contiene todo lo necesario para operar.
Con la tecnología OOP, los programadores pueden construir programas a partir de objetos prefabricados del mismo modo que los albañiles pueden fabricar una casa a partir de muros prefabricados. La OOP también facilita el uso de características de un programa en otros, de modo que los programadores no tengan que empezar de cero con cada nuevo programa. Un objeto que ordena alfabéticamente las direcciones de una base de datos para un mailing también puede utilizarse en un programa que ordene las reservas de un hotel.
Smalltalk aún sigue utilizándose para la programación OOP, aunque cada vez son más los lenguajes que incluyen esta tecnología. C++, que utilizamos en un ejemplo anterior, es un popular dialecto de C que soporta programación orientada a objetos.
C++ no contiene objetos visuales como iconos. En apariencia, se parece a cualquier otro lenguaje. Pero su naturaleza orientada al objeto permite que los programadores escriban programas alrededor de objetos lógicos en lugar de procedimientos. Java tiene más diseño OOP que C++.
Las herramientas y técnicas orientadas al objeto se han vuelto algo corriente en bases de datos, programas de creación multimedia y otros entornos software. Esta programación está especialmente adaptada para programas con mucha carga interactiva (como sistemas operativos gráficos y juegos) y programas que imiten o reflejen alguna parte dinámica del mundo real (como simulaciones y sistemas de control de tráfico aéreo). Muchos expertos creen que la OOP es el futuro.
Programación orientada a objetos
El paradigma de la programación estructurada sigue la visión clásica de los datos como material en bruto que
se procesan en una cadena de montaje.
Todos los programas informáticos procesan datos de una forma o de otra.
Pero internamente, la programación orientada a objetos rechaza la metáfora de la línea de montaje.
El dogma fundamental de la OOP es que el software debe estar diseñado utilizando las mismas técnicas que emplean las personas para comprender y categorizar el mundo que los rodea.
En OOP, un programa se diseña para estar compuesto por objetos, cada uno de ellos con sus propias características o atributos (llamadas propiedades) y las acciones que puede realizar (llamadas métodos).
Cada objeto tiene una cara «pública»: las propiedades y métodos que otros objetos pueden ver y con los que pueden interactuar. Los objetos también tienen métodos privados para su uso interno.
En OOP, los datos están todos juntos, o encapsulados, con los métodos y propiedades del objeto. Cada uno de ellos puede mantener su propio almacén de datos.
La OOP también cuenta con la idea de la categorización jerárquica de objetos, lo que permite que los programadores puedan crear nuevos objetos que deriven de otros que ya estén definidos. El nuevo objeto puede heredar las propiedades
y métodos del objeto del que desciende, además de poder definir otras propiedades y métodos en caso de ser necesario.
Las personas han utilizado las jerarquías durante siglos para comprender el mundo físico y biológico.
¿Cómo se puede poner todo esto en práctica para, digamos, un sistema operativo gráfico? Por ejemplo, podría existir un objeto «ventana» genérico, entre cuyas propiedades se incluyese su tamaño, posición, color, etc., y los métodos que contuviesen las instrucciones de lo que se debe hacer cuando se redimensiona o cierra esa ventana. De ésta puede derivar otra ventana más específica que, por ejemplo, dispusiera de barras de desplazamiento.
Programación visual
Muchas personas encuentran más fácil trabajar con imágenes en lugar de con palabras.
Las herramientas de programación visual permiten a los programadores crear grandes secciones de sus programas arrastrando imágenes y apuntando a objetos en pantalla, lo que elimina una gran parte del tedioso proceso de codificar al modo tradicional.
HyperCard de Apple fue probablemente el primer ejemplo de un entorno de programación visual. HyperCard incluía un lenguaje de programación llamado Hyper- Talk, aunque un programador no necesitaba conocer este lenguaje para crear aplicaciones
productivas.
En la actualidad, el Visual Basic de Microsoft es utilizado ampliamente por profesionales y fanáticos de la programación debido a su propuesta de programación visual. Visual J++ aplica una estructura similar pero con el lenguaje Java. Las herramientas
de programación visual actuales no han conseguido aún transformar el proceso de programación en una tarea visual; los programadores todavía tienen que saber
codificar para llevar a cabo operaciones más complejas. Pero estas herramientas pueden ahorrar horas de tiempo de codificación, sobre todo cuando se crean interfaces de usuario, la cubierta gráfica que interactúa con los usuarios. Debido a que pueden simplificar muchas de las complicadas tareas del proceso de programación, los lenguajes visuales han conseguido acercar este arte a los no programadores.
Lenguajes para los usuarios
Algunos lenguajes están diseñados para los no-programadores. No son tan potentes y versátiles como las herramientas profesionales pero cumplen con las necesidades más modestas de sus usuarios.
Lenguajes de macro
Muchos lenguajes orientados al usuario están proyectados para que sus usuarios potenciales puedan crear programas, llamados macros, que automaticen tareas repetitivas.
Los lenguajes de macro orientados al usuario (también conocidos como lenguajes de script) están incluidos en muchas aplicaciones, utilidades y sistemas operativos. A través de estas macros, el usuario de una hoja de cálculo puede construir un programa para crear automáticamente informes mensuales que localicen datos contenidos en otras hojas de cálculo, los inserten en una hoja nueva y calculen los resultados mediante
fórmulas contenidas en los ficheros de meses anteriores. A través de un lenguaje de script de un sistema operativo, un usuario podría automatizar el proceso de backup de todos los documentos creados durante la última semana.
Algunos lenguajes de macro requieren que usted diseñe y teclee el código a mano, del mismo modo que si estuviera codificando en Basic. De hecho, Microsoft Office incluye una variación de tipo script de Visual Basic llamado VBA (Visual Basic para aplicaciones, Visual Basic for Applications). Otro tipo de generadores de macros «observa » mientras el usuario ejecuta una secuencia de comandos y acciones, y los registra para convertirlos después en una macro. El usuario puede entonces examinar y editar la macro para llevar a cabo las acciones necesarias en determinadas circunstancias.




No hay comentarios:
Publicar un comentario