Especificaciones procedural y funcional

Especificaciones procedural y funcional

de Romina Belen Garcia Camargo -
Número de respuestas: 5

Hola

Al leer el material disponible y mirar el vídeo de OpenFing me quedaron algunas dudas sobre las diferencias de las especificaciones de tipo procedural y funcional. ¿Es correcto suponer que en una sólo se utilizan voids y en la otra se utilizan funciones que devuelven valores de los tipos necesarios? De no ser así, ¿podrían darme alguna definición corta para poder identificarlos correctamente?

Además quería saber si lo que remarcamos en el curso de por qué a veces puede sernos más útil la procedural se basa solo en que a veces nos entra la duda de si nuestros parámetros (listas, pilas, colas) efectivamente cambian en las funciones. ¿Podrían señalarme, de existir, algunos otros motivos por los cuáles elegir entre una u otra?

Muchas gracias,

Romina

En respuesta a Romina Belen Garcia Camargo

Re: Especificaciones procedural y funcional

de Carlos Luna -

Hola Romina.

Tu correo nos había quedado colgado, perdón!. Lo respondo ahora.

En una especificación funcional las operaciones son funciones que retornan elementos, valores o parámetros actualizados/modificados. Por eso en el tipo de las operaciones el retorno es distinto a void. Por ejemplo, al insertar un elemento en una lista, la operación retorna la lista resultado, que suele compartir memoria con la lista parámetro.  

En una especificación procedural las operaciones son procedimientos que modifican parámetros, por referencia. Por eso en el tipo de las operaciones el retorno es void. Por ejemplo, al insertar un elemento en una lista, la operación actualiza la lista parámetro que debería ser pasada por referencia. 

Más allá de los dos estilos mencionados es posible hacer especificaciones híbridas; algo que suele ser una buena opción. Por ejemplo, las operaciones que agregan o borran (modifican) elementos en listas podrían ser declaradas como procedimientos (retorno void y donde la lista se pasa por referencia), mientras que los predicados y algunas operaciones selectoras podrían ser funciones (retorno distinto de void). 

Espero haya quedado claro, sino por favor volvé a escribirnos. 

Saludos, Carlos

 

En respuesta a Carlos Luna

Re: Especificaciones procedural y funcional

de Rafael Agustin Castelli Ottati -

Buenas, tengo la siguiente duda relacionada  (pongo como ejemplo el examen de diciembre 2019) :

El ejercicio es especificar una cola, entonces se opta por una especificacion procedural.  En la solucion la operacion de crear una cola vacia es : void crearCola ( Cola & e ) ;

Si bien es una especificacion procedural, estaria bien plantearlo como Cola crearCola();

En general, la operacion de crear una estructura vacia puede ser siempre una funcion?

En respuesta a Rafael Agustin Castelli Ottati

Re: Especificaciones procedural y funcional

de Nicolás Alejandro Rivoir Malán -

Me sumo a la duda. Yo no entiendo cómo es posible crear una cola pasando una cola por referencia. Leí la solución pero ese aspecto me hace ruido. Supongo que en la prueba esperan que lo hagamos como en las tareas, de todas formas no entiendo lo mencionado anteriormente

En respuesta a Nicolás Alejandro Rivoir Malán

Re: Especificaciones procedural y funcional

de Carlos Luna -

Hola.

Como comenté en otro correo, es mejor que sea una función. 

Como procedimiento puede tener sentido si la cola está indefinida al comienzo y lo que hace el crear es definirla como vacía (sino, se pierde lo que tenía).

En general, toda función f, n aria, puede ser pensada como un procedimiento p, n+1 ario, donde el resultado de la función es un parámetro por referencia (res) del procedimiento :

T f (T1 x1, T2 x2,  ... Tn xn)  <=> void p (T1 x1, T2 x2,  ... Tn xn, T & res) 

Saludos, Carlos