Está en la página 1de 25

Universidad de Panam

Centro Regional Universitario de San Miguelito


Facultad de Informtica, Electrnica y Comunicacin
Escuela de Informtica

Lic. En Informtica para la Gestin Educativa y Empresarial


Curso: Programacin II
Profesora: Odessa Aranda
Proyecto
Programacin modular y programas Pseint
Grupo: LIE 3-1
Elaborado por:
Rosaura Nez cd. 8-480-931
Katlyn Mojica cd.9-729-486
Shabda Meade cd.8-733-1049

5-12-2016

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT

I. Programacin estructurada y programacin modular.


La programacin modular es un paradigma de programacin que consiste en dividir un
programa en mdulos o subprogramas con el fin de hacerlo ms legible y manejable.
Se presenta histricamente como una evolucin de la programacin estructurada para
solucionar problemas de programacin ms grandes y complejos de lo que esta puede
resolver.
Al aplicar la programacin modular, un problema complejo debe ser dividido en varios
subproblemas ms simples, y estos a su vez en otros subproblemas ms simples. Esto debe
hacerse hasta obtener subproblemas lo suficientemente simples como para poder ser
resueltos fcilmente con algn lenguaje de programacin. Esta tcnica se llama refinamiento
sucesivo, divide y vencers anlisis descendente (Top-Down).

1.1 Definicin y caractersticas de un mdulo


Un mdulo es una porcin de un programa de ordenador. De las varias tareas que debe
realizar un programa para cumplir con su funcin u objetivos, un mdulo realizar,
comnmente, una de dichas tareas (o varias, en algn caso).
En general (no necesariamente relacionado con la programacin), un mdulo recibe como
entrada la salida que haya proporcionado otro mdulo o los datos de entrada
al sistema (programa) si se trata del mdulo principal de ste; y proporcionar una salida
que, a su vez, podr ser utilizada como entrada de otro mdulo o bien contribuir
directamente a la salida final del sistema (programa), si se retorna al mdulo principal.

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT


Particularmente,

en

el

caso

de

la programacin,

los

mdulos suelen

estar (no

necesariamente) organizados jerrquicamente en niveles, de forma que hay un mdulo


principal que realiza las llamadas oportunas a los mdulos de nivel inferior.
Cuando un mdulo es convocado, recibe como entrada los datos proporcionados por otro del
mismo o superior nivel, el que ha hecho la llamada; luego realiza su tarea. A su vez este
mdulo convocado puede llamar a otro u otros mdulos de nivel inferior si fuera necesario;
cuando ellos finalizan sus tareas, devuelven la salida pertinente al mdulo inmediato
llamador, en secuencia reversa. Finalmente se contina con la ejecucin del mdulo
principal.

Caractersticas
Cada uno de los mdulos de un programa idealmente debera cumplir las siguientes
caractersticas:

Tamao relativamente pequeo.- Esto facilita aislar el impacto que pueda tener la
realizacin de un cambio en el programa, bien para corregir un error, o bien por

rediseo del algoritmo correspondiente.


Independencia modular. - Cuanto ms independientes son los mdulos entre s ms
fcil y flexiblemente se trabajar con ellos. Esto implica que para desarrollar un

mdulo no es necesario conocer detalles internos de otros mdulos.


Los mdulos deben tener la mxima cohesin y el mnimo acoplamiento. Es decir,

deben tener la mxima independencia entre ellos.


La salida del mdulo debe ser funcin de la entrada, pero no de ningn estado
interno.

En

la

creacin

de

los

mdulos

deben

cumplirse

tres

aspectos

bsicos: descripcin, rendimiento y diseo.


En la descripcin se definen las funciones y objetivos del programa. Para obtener el
mximo rendimiento se ha de comprobar que el programa realice el proceso
aprovechando al mximo todos los recursos de los que dispone. En cuanto
al diseo, se debe comprobar la estructura que sigue el mdulo, as como la
estructura de los datos y la forma de comunicaciones entre los diversos y diferentes
mdulos.

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT

Conforme se extiende el tamao de los algoritmos, se hace ms difcil su revisin,

actualizacin y/o correccin.


Una poltica comn para solventar este problema consiste en la modularizacin. Esto
significa que el algoritmo se fragmenta en partes llamadas mdulos. En realidad, es
un mtodo de diseo que tiende a dividir el problema, de forma lgica, en partes
perfectamente diferenciadas que pueden ser analizadas, programadas y puestas a

punto independiente.
Realmente la programacin modular es un intento para disear programas, de forma
tal que cualquier funcin lgica pueda ser intercambiada sin afectar a otras partes del
programa.

1.2

Ventajas y desventajas de la programacin modular:

Simplifica el diseo.
Disminuye la complejidad de los algoritmos.
Disminuye el tamao total del programa.
Ahorra en tiempo de programacin porque promueve la reusabilidad del cdigo.
Favorece el trabajo en equipo.
Facilita la depuracin y prueba.
Facilita el mantenimiento.
Permite la estructuracin de libreras especficas.
Desventajas

Separacin de mdulos.
Memoria y tiempo de ejecucin
se obtiene un nico bloque de programa, que cuando se hace demasiado grande
puede resultar problemtico su manejo; esto se resuelve empleando la programacin
modular, definiendo mdulos interdependientes programados y compilados por
separado.

1.3 Metodologa

del diseo

El concepto bsico del diseo modular es muy simple. Consiste en dividir un programa en
mdulos que puedan ser analizados, programados y depurados por separado. La mxima
que rige esta filosofa es: Divide y vencers

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT


La divisin de un problema en mdulos o programas independientes exige que haya un
mdulo que controle o relacione a todos los dems. Es el denominado mdulo base o
principal del problema. En C ste sera main. Todo programa C debe estar constituido por
un mdulo main y posiblemente otra serie de mdulos secundarios.

Realmente, la programacin modular es un intento por disear programas por componentes.


Metodologa descendente: top-down
La metodologa o diseo descendente tambin conocida como diseo top-down consiste en
refinar un mdulo de programa en niveles de menor a mayor complejidad que den solucin
al problema.
Si nos fijamos, consiste en llevar los principios macroscpicos del diseo modular de
programas hasta el interior de que cada mdulo, terminando el proceso al llegar a las
instrucciones simples.
Cuando se considera una solucin modular para cualquier problema, pueden formularse
muchos niveles de abstraccin. En el nivel superior de abstraccin, se establece una
solucin en trminos amplios. En los niveles inferiores de abstraccin se toma una
orientacin ms procedimental. Por ltimo, en el nivel ms bajo de abstraccin, se
establece la solucin de forma que pueda implementarse directamente.
Esencialmente consiste en crear una estructura jerrquica de tipo arbrea, en la que los
niveles superiores prximos a la raz enuncian el problema a groso modo, mientras que
segn vamos descendiendo por la estructura, vamos entrando en mayor detalle, hasta llegar

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT


a las hojas del rbol, que representan las instrucciones simples en que se descompone el
problema.
Ejemplo de diseo top-Down
A continuacin, vamos a desarrollar un ejemplo de esto. Supongamos que debemos
programar un mdulo que controle el flujo de informacin y documentos de un almacn. Lo
primero que hacemos es descomponer la gestin en las tres tareas bsicas del almacn:

compras

manejo diario de existencias

ventas

A continuacin, profundizaramos en las subtareas en que se descomponen las anteriores, y


as sucesivamente hasta llegar al nivel de detalle de una accin concreta:
compras:

manejo:

ventas:

buscar proveedor

almacenamiento

facturacin

conseguir crdito

inventario

reparto

gestionar transporte

etiquetado

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT

existen distintas metodologas: Jackson, Bertini, Warnier, de reconocido prestigio, aunque ya


un poco en desuso. A modo de ilustracin, veremos cmo se representara este ejemplo
utilizando la metodologa Warnier:

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT

II. Mdulos (Funciones)

2.1 Tipos de funciones: internas y creadas por el usuario


Integradas
Las siguientes funciones integradas no deterministas se pueden usar en funciones TransactSQL definidas por el usuario.

CURRENT_TIMESTAMP

@@MAX_CONNECTIONS

GET_TRANSMISSION_STATUS

@@PACK_RECEIVED

GETDATE

@@PACK_SENT

GETUTCDATE

@@PACKET_ERRORS

@@CONNECTIONS

@@TIMETICKS

@@CPU_BUSY

@@TOTAL_ERRORS

@@DBTS

@@TOTAL_READ

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT

@@IDLE

@@TOTAL_WRITE

@@IO_BUSY
Las siguientes funciones integradas no deterministas no se pueden usar en funciones
Transact-SQL definidas por el usuario.

NEWID

RAND

NEWSEQUENTIALID

TEXTPTR

Funciones creadas por el usuario


Funcin escalar
Las funciones escalares definidas por el usuario devuelven un nico valor de datos del tipo
definido en la clusula RETURNS. En una funcin escalar insertada no hay cuerpo de la
funcin; el valor escalar es el resultado de una sola instruccin. Para una funcin escalar de
varias instrucciones, el cuerpo de la funcin, definido en un bloque BEGIN...END, contiene
una serie de instrucciones de Transact-SQL que devuelven el nico valor. El tipo devuelto
puede ser de cualquier tipo de datos excepto text, ntext, image, cursory timestamp.
Ejemplos.

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT

Funciones con valores de tabla


Las funciones con valores de tabla definidas por el usuario devuelven un tipo de datos table.
Las funciones insertadas con valores de tabla no tienen cuerpo; la tabla es el conjunto de
resultados de una sola instruccin SELECT. Ejemplos.
Funciones del sistema
SQL Server proporciona numerosas funciones del sistema que se pueden usar para realizar
diversas operaciones. No se pueden modificar. Para obtener ms informacin, vea
Funciones integradas (Transact-SQL), Funciones almacenadas del sistema (Transact-SQL) y
Funciones y vistas de administracin dinmica (Transact-SQL).
NOTA: Las funciones Transact-SQL definidas por el usuario en consultas solo se pueden
ejecutar en un nico subproceso (plan de ejecucin en serie).
2.2 Componentes
2.2.1 Declaracin
Declaracin son aquellas en donde se escriben las variables que se usarn y los tipos de
datos de cada una.
Ejemplo en C:
Inst numero1, numero2;
float numero3;
Esto declara dos variables que contendrn nmeros enteros y una tercera como flotante.

Las componentes ms elementales de las variables de tipo Matriz son, por lo tanto, nmeros
reales. La siguiente declaracin es una forma alternativa de declaracin del tipo Matriz:
TYPE Matriz = ARRAY [1..100] of ARRAY [1..100] of Real; Adems, es posible abreviar an

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT


ms la declaracin del tipo Matriz, de la forma siguiente: TYPE Matriz = ARRAY
[1..100,1..100] of Real; La declaracin de un vector bidimensional, en su forma ms
abreviada, tiene la siguiente forma general: TYPE NombreTipo = ARRAY [Indice1, Indice2]
OF TipoBase; donde NombreTipo es el nombre del nuevo tipo que se est definiendo,
TipoBase es el tipo de los elementos individuales del vector bidimensional.
Sirva como ejemplo la siguiente declaracin que permite representar un tablero de ajedrez:
CONST

Tam

8;

MaxNum

100;

TYPE

Lado

1..Tam;

Piezas

(peon,torre,caballo,alfil,dama,rey,vacia); Tablero = ARRAY [Lado,Lado] OF Piezas; Partida =


ARRAY [1..MaxNum] OF Tablero; VAR Tab1,Tab2 : Tablero; Piez1 : Piezas; Juego : Partida;
Ntese que un tablero se define como un vector bidimensional de elementos que son piezas
(donde se ha incluido la casilla vaca), y toda una partida se ha representado como un vector
de tableros (los correspondientes a las jugadas sucesivas). Como se ve, es posible
generalizar la declaracin anterior a vectores de tres o ms dimensiones, denominados ndimensionales, siendo en este caso TipoBase tambin un vector; as la siguiente declaracin
muestra la forma general, ms abreviada, de definir vectores de tres dimensiones: TYPE
NombreTipo = ARRAY [Indice1,Indice2,Indice3] OF TipoBase;
2.2.2 Argumentos
Representa el valor que se proporciona a un parmetro del procedimiento cuando se llama al
procedimiento. El cdigo de llamada proporciona los argumentos cuando llama al
procedimiento. La parte de la llamada del procedimiento que especifica los argumentos se
denomina lista de argumentos.
En la siguiente ilustracin se muestra un cdigo que llama al
procedimiento safeSquareRoot desde dos lugares diferentes. La primera llamada transfiere
el valor de la variable x (4.0) al parmetro number y el valor devuelto en root (2.0) se asigna
a la variable y. La segunda llamada transfiere el valor literal 9.0 a number y asigna el valor
devuelto (3.0) a la variable

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT

Pasar un argumento a un parmetro

2.2.3 Parmetros
Un parmetro es un valor que la funcin espera recibir cuando sea llamada (invocada), a fin
de ejecutar acciones en base al mismo. Una funcin puede esperar uno o ms parmetros
(que irn separados por una coma) o ninguno.
def mi_funcion(nombre, apellido):
# Algoritmo
Los parmetros, se indican entre los parntesis, a modo de variables, a fin de poder
utilizarlos como tales, dentro de la misma funcin.
Los parmetros que una funcin espera, sern utilizados por sta, dentro de su algoritmo, a
modo de variables de mbito local. Es decir, que los parmetros sern variables locales, a
las cules solo la funcin podr acceder:
def mi_funcion(nombre, apellido):

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT


nombre_completo = nombre, apellido
print nombre_completo
Si quisiramos acceder a esas variables locales, fuera de la funcin, obtendramos un error:
def mi_funcion(nombre, apellido):
nombre_completo = nombre, apellido
print nombre_completo

# Retornar el error: NameError: name 'nombre' is not defined


print nombre
Al llamar a una funcin, siempre se le deben pasar sus argumentos en el mismo orden
en el que los espera. Pero esto puede evitarse, haciendo uso del paso de argumentos
como keywords (ver ms abajo: "Keywords como parmetros").
2.2.3.1 Parmetros por omisin
En Python, tambin es posible, asignar valores por defecto a los parmetros de las
funciones. Esto significa, que la funcin podr ser llamada con menos argumentos de los
que espera:
def saludar(nombre, mensaje='Hola'):
print mensaje, nombre
saludar('Pepe Grillo') # Imprime: Hola Pepe Grillo
PEP 8: Funciones A la definicin de una funcin la deben anteceder dos lneas en blanco.
Al asignar parmetros por omisin, no debe dejarse espacios en blanco ni antes ni despus
del signo =.

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT


2.2.3.2. Keywords como parmetros
En Python, tambin es posible llamar a una funcin, pasndole los argumentos esperados,
como pares de claves=valor:
def saludar(nombre, mensaje='Hola'):
print mensaje, nombre

saludar(mensaje="Buen da", nombre="Juancho")


2.2.3.3. Parmetros arbitrarios
Al igual que en otros lenguajes de alto nivel, es posible que una funcin, espere recibir un
nmero arbitrario -desconocido- de argumentos. Estos argumentos, llegarn a la funcin en
forma de tupla.
Para definir argumentos arbitrarios en una funcin, se antecede al parmetro un asterisco
(*):
def recorrer_parametros_arbitrarios(parametro_fijo, *arbitrarios):
print parametro_fijo
# Los parmetros arbitrarios se corren como tuplas
for argumento in arbitrarios:
print argumento
recorrer_parametros_arbitrarios('Fixed', 'arbitrario 1', 'arbitrario 2', 'arbitrario 3')
Si una funcin espera recibir parmetros fijos y arbitrarios, los arbitrarios siempre deben
suceder a los fijos.
Es posible tambin, obtener parmetros arbitrarios como pares de clave=valor. En estos
casos, al nombre del parmetro deben precederlo dos astericos (**):

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT


def recorrer_parametros_arbitrarios(parametro_fijo, *arbitrarios, **kwords):
print parametro_fijo
for argumento in arbitrarios:
print argumento

# Los argumentos arbitrarios tipo clave, se recorren como los diccionarios


for clave in kwords:
print "El valor de", clave, "es", kwords[clave]
recorrer_parametros_arbitrarios("Fixed", "arbitrario 1", "arbitrario 2", "arbitrario 3",
clave1="valor uno", clave2="valor dos")
2.2.3.4. Desempaquetado de parmetros
Puede ocurrir adems, una situacin inversa a la anterior. Es decir, que la funcin espere
una lista fija de parmetros, pero que stos, en vez de estar disponibles de forma separada,
se encuentren contenidos en una lista o tupla. En este caso, el signo asterisco (*) deber
preceder al nombre de la lista o tupla que es pasada como parmetro durante la llamada a la
funcin:
def calcular(importe, descuento):
return importe - (importe * descuento / 100)
datos = [1500, 10]
print calcular(*datos)
El mismo caso puede darse cuando los valores a ser pasados como parmetros a una
funcin, se encuentren disponibles en un diccionario. Aqu, debern pasarse a la funcin,
precedidos de dos asteriscos (**):

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT


def calcular(importe, descuento):
return importe - (importe * descuento / 100)
datos = {"descuento": 10, "importe": 1500}
print calcular(**datos)
2.3 Invocacin y retorno del valor de la funcin
Una funcin, no es ejecutada hasta tanto no sea invocada. Para invocar una funcin,
simplemente se la llama por su nombre:
def mi_funcion():
print "Hola Mundo"
funcion()
Cuando una funcin, haga un retorno de datos, stos, pueden ser asignados a una variable:
def funcion():
return "Hola Mundo"
frase = funcion()
print frase

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT

III. Programacin con Pseint


3.1 Definicin de PSeInt:
PSeInt es un software libre educativo multiplataforma dirigido a personas que se inician
en la programacin.
Descripcin: PSeInt es la abreviatura de PSeudo Intrprete, una herramienta educativa
utilizada principalmente por estudiantes para aprender los fundamentos de la
programacin y el desarrollo de la lgica. Es un software muy popular de su tipo y es
ampliamente utilizado en universidades de Latinoamrica y Espaa. Utiliza pseudocdigo
para la solucin de algoritmos.
Propsitos: PSeInt est pensado para asistir a los estudiantes que se inician en la
construccin de programas o algoritmos computacionales. El pseudocdigo se suele
utilizar como primer contacto para introducir conceptos bsicos como el uso de
estructuras de control, expresiones, variables, etc. sin tener que lidiar con las
particularidades de la sintaxis de un lenguaje real. Este software pretende facilitarle al
principiante la tarea de escribir algoritmos en este pseudolenguaje presentando un
conjunto de ayudas y asistencias, y brindarle adems algunas herramientas adicionales
que le ayuden a encontrar errores y comprender la lgica de los algoritmos.
Caractersticas:

Lenguaje Autocompletado

Ayudas Emergentes

Plantillas de Comandos

Soporta procedimientos y funciones

Indentado Inteligente

Exportacin a otros lenguajes (C, C++, C#, Java, PHP, JavaScript, Visual Basic .NET,

Python, Matlab)

Graficado, creacin y edicin de diagramas de flujo

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT

Editor con coloreado de sintaxis

Foro oficial de PSeInt

Software multiplataforma2

Pantalla del programa pseint


Pantalla de Inicio: Al iniciar la aplicacin nos muestra la estructura bsica desde donde
comenzaremos a escribir nuestro cdigo. Pantalla de Inicio: Al iniciar la aplicacin nos
muestra la estructura bsica desde donde comenzaremos a escribir nuestro cdigo.

Es muy importante, aunque no obligatorio, documentar el cdigo (Comentar algunas lneas)


para que nos permita rpidamente identificar qu partes del mismo hace qu cosa, ya que a
medida que se avance en el desarrollo y aumente considerablemente la cantidad de lneas,
se har ms difcil encontrar en cul de ellas se encuentra la sentencia que hace algo
especfico.
Esto se consigue utilizando la doble barra "//"

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT

Estructuras de Control
Los ejemplos que se muestran en esta seccin corresponde al mismo programa, pero
construido en los tres ciclos While (Mientras), Repeat (Repetir) y For (Para).
La Estructura Repetitiva Mientras (While)
El while es una estructura que se ejecuta mientras la pregunta de control obtiene una
respuesta verdadera, cuando la respuesta a la pregunta de control es falsa esta abandona el
ciclo. Este tipo de estructura es recomendable cuando dentro del programa se desconoce el
momento en que se va abandonar el ciclo. Por ejemplo, si necesitamos realizar un programa
que solicite nmeros y los sume hasta que el usuario ingrese un nmero negativo, como no
se sabe en qu momento el usuario ingresar un valor negativo, la estructura recomendable
es el While (Mientras). La caracterstica principal del While es que este primero pregunta y
despus hace.

La Estructura Repetitiva Repetir (Do While)


Funciona de igual manera que el While (Mientras), la gran diferencia es que primero hace y
despus pregunta, y en lugar de abandonar su ejecucin al obtener una respuesta falsa en
la pregunta de control, lo hace al momento de obtener una verdadera.

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT

La Estructura Repetitiva Para (For)


Es una estructura repetitiva que se emplea cuando se conoce cuantos giros debe realizar el
ciclo, por ejemplo, si se realiza un algoritmo que le solicite al usuario cuantos nmeros va a
sumar, el algoritmo conocera la cantidad de giros a partir de la cantidad de nmeros
ingresados por el usuario.

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT

3.2 Programas

3.2.1 Ejemplos de programas en PSeint y coloque el diagrama de flujo de cada uno.

A. Programa que permita escribir en pantalla los 100 primeros nmeros pares.

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT

B. Programa que permita elevar un nmero entero ingresado por teclado, a una potencia
dada.

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT

C. Uso del operador de mdulo (MOD o %)

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT


Webgrafa

Autor: Colaboradores de Wikipedia, editor: La enciclopedia libre.


Ttulo del documento: Programacin Modular
Fecha de creacin: 3 de marzo de 2006
Fecha de acceso: 29 de noviembre de 2016
Direccin electrnica: https://es.wikipedia.org/wiki/Programaci%C3%B3n_modular
https://es.wikipedia.org/wiki/M%C3%B3dulo_(inform%C3%A1tica)
Autora: Pilar Gonzlez Augusto
Ttulo del documento: Programacin y Lenguaje C (UTP: Mdulo 10)
Fecha de creacin:
Fecha de acceso: 29 de noviembre 2016
Direccin Electrnica:
http://www.iesjuandelacierva.com/paginade/fupro/apuntes/ut10.htm
Autor: Williams Ricardo
Ttulo del documento: Programacin Modular
Fecha de creacin: sbado 18 de agosto de 2012.
Fecha de acceso: 29 de noviembre de 2016
Direccin electrnica: http://progmodular.blogspot.com/search?updated-min=2012-0101T00:00:00-08:00&updated-max=2013-01-01T00:00:00-08:00&max-results=5
http://dcb.fi-c.unam.mx/users/miguelegc/tutoriales/tutorialcd/mnj_d_mdls_1.html
http://www.desarrolloweb.com/faq/programacion-estructurada-modular.html

Tema2
https://msdn.microsoft.com/es-es/library/ms191007.aspx

http://librosweb.es/libro/python/capitulo_3.html
ultima modificacin: 29 de mayo 2015
fecha de acceso: 29 de noviembre de 2016

PROGRAMACIN MODULAR Y PROGRAMAS PSEINT


http://users.dsic.upv.es/asignaturas/eui/ad2/pract1.pdf
Tema3
http://diagramas-de-flujo.blogspot.com/
Viernes 26 de abril 2013

También podría gustarte