contenido del tema - lcc.uma.esjlleivao/metodologia/tema5.pdfmetodología de la programación. curso...

13
Contenido del Tema 5.1.- Programación Modular y desarrollo de Programas 5.2.- Diseño de interfaces. 5.3.- Notación algorítmica. Metodología de la Programación. Curso 2002/03. Pág. 1 Metodología de la Programación. Curso 2002/03. Pág. 2 No usar una metodología de diseño conlleva: • Rigidez e inflexibilidad en los programas • Pérdida excesiva de tiempo en corrección de errores • Documentación insuficiente o nula • Imposibilidad de Reutilización Diseño descendente. Normalmente las componentes que van surgiendo son bastante independientes del algoritmo principal (y unas de otras), en el sentido de que pueden ser diseñadas sin considerar el contexto en el que van a ser usadas.

Upload: vonga

Post on 27-Jun-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

Contenido del Tema

5.1.- Programación Modular y desarrollo deProgramas

5.2.- Diseño de interfaces.

5.3.- Notación algorítmica.

Metodología de la Programación. Curso 2002/03. Pág. 1

Metodología de la Programación. Curso 2002/03. Pág. 2

No usar una metodología de diseño conlleva:• Rigidez e inflexibilidad en los programas• Pérdida excesiva de tiempo en corrección de errores• Documentación insuficiente o nula• Imposibilidad de Reutilización

Diseño descendente.

Normalmente las componentes que van surgiendo son bastanteindependientes del algoritmo principal (y unas de otras), en el sentido deque pueden ser diseñadas sin considerar el contexto en el que van a serusadas.

Metodología de la Programación. Curso 2002/03. Pág. 3

• Módulo es un algoritmo autocontenido, que puede serdiseñado independientemente del contexto en el que va aser usado.

• Los procedimientos y funciones son los mecanismos máscomunes que ofrecen los lenguajes de programación parapermitir esta modularidad. Algunos lenguajes consiguen unnivel superior de modularidad, permitiendo agruparprocedimientos y funciones en entidades mayores.

Metodología de la Programación. Curso 2002/03. Pág. 4

Ventajas:• Simplificación del diseño.• Programación aislada (encapsulamiento).• Conocimiento de lo que hace el subprograma, no cómo lo hace

(Abstracción procedimental o de Operaciones).• Reutilización del módulo en otro contexto.• Simplificación de la comprensión del algoritmo (mantenimiento).• Transportabilidad, agrupando las operaciones dependientes de la

máquina en un módulo.• Trabajo en equipo. Cada programador se encarga de desarrollar un

módulo.• Compilación separada. No es necesario recompilar todo el programa

sino sólo el módulo que se ha modificado.

Metodología de la Programación. Curso 2002/03. Pág. 5

Encapsulamiento:• Si el método para solucionar una tarea T cambia, cualquier

otra tarea Q no se ve afectada.

• Ejemplo: Cambio del algoritmo de ordenación.

Q

T. 1ª implementación

T. 2ª implementación

Llamada a T

Metodología de la Programación. Curso 2002/03. Pág. 6

Especificaciones:• Conjunto de condiciones que deben cumplirse para que se

ejecute un módulo correctamente.

• Ejemplo: Paso del array a ordenar.

Q T

Llamada a T

Q debe saber:

-Lo que hace T.

-En que condiciones loejecuta.

Metodología de la Programación. Curso 2002/03. Pág. 7

Criterios de Modularización.• No existe un algoritmo formal para

descomponer un problema en módulos.• Criterios a seguir:

– Minimizar el acoplamiento (los módulos deben serlo más independientes posible).

– Maximizar la cohesión (relación entre las diferentespartes internas de un módulo).

Metodología de la Programación. Curso 2002/03. Pág. 8

Algoritmo de proceso de nóminas

Calcular Ingresos Calcular RetenciónAntes de Impuestos

Calcular ImpuestoAutonómico

Calcular ImpuestoEstatal

Calcular Impuesto Calcular RetenciónDespués de Impuestos

Procesar Nómina

Ejemplo:

Metodología de la Programación. Curso 2002/03. Pág. 9

Un programa constará de:• El programa principal• Uno o más módulos de biblioteca:

– Una parte de definición pública.

– Una parte de implementación privada.

Metodología de la Programación. Curso 2002/03. Pág. 10

En un módulo se puede declarar:• Constantes. Se pueden declarar en la parte de:

– Definición. Cualquier Módulo o programa la podrá importar y utilizar.– Implementación. Local al Módulo. No es importable. (Las constantes

declaradas en la parte de Definición son visibles en la parte deImplementación).

• Variables. Se pueden declarar en la parte de:– Definición. Cualquier Módulo o programa la podrá importar y utilizar.

Solo es recomendable en casos fuera del ámbito de la asignatura.– Implementación. Local al Módulo. No es importable. Actúa como una

variable global dentro del módulo. No es aconsejable. (Las variablesdeclaradas en la parte de Definición son visibles en la parte deImplementación como variables globales).

Metodología de la Programación. Curso 2002/03. Pág. 11

En un módulo se puede declarar:• Procedimientos y Funciones.

– Definición. En esta parte solo se declara la cabecera del algoritmo. Estosalgoritmos podrán ser importados y llamados por cualquier otro módulo oprograma. Se deben especificar todos los parámetros y, en el caso de unafunción, el tipo devuelto.

– Implementación. Por cada cabecera declarada en la parte de definición, sedebe escribir el subalgoritmo correspondiente. Su cabecera debe coincidiren el número y tipo de los parámetros. Además, se pueden declarar otrosalgoritmos, pero estos no podrán ser importados por otros módulos niprogramas. (Estos algoritmos pueden servir para descomponer losEstos algoritmos pueden servir para descomponer losalgoritmos exportablesalgoritmos exportables).

Metodología de la Programación. Curso 2002/03. Pág. 12

En un módulo se puede declarar:

• Tipos.• Definición. Se define el tipo de la misma forma que se ha visto

hasta ahora. Cualquier Módulo puede importarlos y utilizarloscomo si fuesen suyos.

• Implementación. Los tipos declarados en la parte de definiciónson visibles en la de implementación, por tanto no se puedenvolver a declarar.

– En un diseño apropiado, por cada tipo definido en unmódulo se definirán también las operaciones que sepueden realizar con las variables declaradas de ese tipo.

Metodología de la Programación. Curso 2002/03. Pág. 13

Módulos.• Comenzarán con la palabra Módulo seguida del

nombre del módulo.• Tanto el programa principal como los módulos

podrán importar de otros módulos.• Parte de Definición. Visible a los algoritmos que

la importen.• Parte de Implementación. Local al módulo.

Metodología de la Programación. Curso 2002/03. Pág. 14

EJEMPLO:• Programa que calcula el tercer lado de un triángulo.

El módulo Tercer Lado (en este caso el programa principal)utiliza la función GradosARadianes del módulo Conversión

Tercer Lado

Conversión

GradosARadines

Módulo Conversión /* Módulo para pasar de grados a radianes y viceversa */

Definición

FUNC GradosARadianes (↓grados : REAL) : REAL

/* Devuelve el ángulo en radianes*/

FUNC RadianesAGrados (↓radianes : REAL ) : REAL

/* Devuelve el ángulo en grados */

ImplementaciónConstantes

Pi ←←←← 3.1416

FUNC GradosARadianes (↓grados : REAL) : REAL/* Devuelve el ángulo en radianes*/

Inicio

RESULTADO ←←←← grados * Pi / 180.0

Fin

FUNC RadianesAGrados (↓radianes : REAL ) : REAL

/* Devuelve el ángulo en grados */

Inicio

RESULTADO ←←←← 180.0 * radianes / Pi

Fin

Fin // Conversión

Algoritmo TercerLado /* Calcula el tercer lado de un triángulo apartir de los otros dos y del ángulo entre ellos */

Desde Conversión Importa GradosARadianes

Variables

lado1, lado2, lado3, ánguloGrad, ánguloRad : REAL

Inicio

Escribir (“Introduce la longitud de un lado”)

Leer (lado1)

Escribir (“Introduce la longitud del otro lado”)

Leer (lado2)

Escribir (“Introduce el ángulo (en grados) “)

Leer (ánguloGrad)

ánguloRad ←←←← GradosARadianes (ánguloGrad)

lado3 �lado1* lado1 + lado2 * lado2 - 2.0 * lado1 *

lado2 * cos (ánguloRad) /* cos devuelve el coseno del ángulo */

lado3 ←←←←

Escribir (“La longitud del tercer lado es “, lado3)

Fin // TercerLado

lado3

Metodología de la Programación. Curso 2002/03. Pág. 17

• Ejemplo: Tipo de Datos Complejo.• Definición: Tipo de datos capaz de guardar la información de

un numero complejo. NumeroComplejo.• Operaciones:

– Asignación: Toma la parte real y la imaginaria y devuelve un número complejo.FUNC Asignación(↓r, ↓ i:REAL) : NumeroComplejo

– Real: Toma un número complejo y devuelve su parte real.FUNC Real(↓c : NumeroComplejo) : REAL

– Imaginaria: Toma un Numero Complejo y devuelve su parte imaginaria.FUNC Imaginaria(↓c : NumeroComplejo) : REAL

– Suma: Toma dos Números Complejos y devuelve su suma.FUNC Suma(↓c1, ↓c2 : NumeroComplejo) : NumeroComplejo

– Producto: Toma dos Números Complejos y devuelve su producto.FUNC Producto(↓c1, ↓c2 : NumeroComplejo): NumeroComplejo

Metodología de la Programación. Curso 2002/03. Pág. 18

• En el módulo que lo usa basta con laDefinición del Tipo y de sus Operacionespara poder trabajar con él. (No necesitamossaber cómo esta implementado)

Algoritmo SumaComplejos // Lee y suma dos números complejos

Desde Complejos Importa NumeroComplejo, Asignación, Suma, Real,Imaginaria

Variablesc1, c2, resultado : NumeroComplejo

real, imag : REAL

Inicio

Escribir (“Introduzca la parte real y la imaginaria delprimer número”)

Leer (real, imag)

c1 ← Asignación (real, imag)Escribir (“Introduzca la parte real y la imaginaria del

segundo número”)

Leer (real, imag)

c2 ← Asignación (real, imag)

resultado ← Suma (c1, c2)Escribir (“El resultado es: “)

Escribir (Real (resultado), “+“,Imaginaria (Resultado), “i”)

Fin

Algoritmo ArrayComplejos /* Multiplica una array de complejos */

Desde Complejos Importa NumeroComplejo, Asignación, Producto, Real,Imaginaria

Constantes

TamañoVector ←←←← 1000

Tipos

VectorComplejos = ARRAY [1..TamañoVector] DE NumeroComplejo

Variables

vComplejos: VectorComplejos

resultado : NumeroComplejo

índice : NATURAL

Inicio

Leer_Vector (vComplejos) (* Lee el vector de Complejos *)

resultado ← Asignación (1.0, 0.0)

PARA índice ← 1 HASTA TamañoVector HACER

resultado ← Producto (resultado, vComplejos[índice ])

FINPARA

Escribir (“El resultado es: “)

Escribir (Real (resultado), “+ “, Imaginaria (Resultado), “i”)

Fin

Metodología de la Programación. Curso 2002/03. Pág. 21

• Nivel de Implementación.– Definimos un módulo donde se implementan

sus operaciones.

Módulo Complejos /* Implementación del tipo NumeroComplejo */DefiniciónTipos

NumeroComplejo = REGISTROparte_real, parte_imag : R

FINNREGISTRO

FUNC Producto(↓c1, ↓c2 : NumeroComplejo): NumeroComplejoFUNC Asignación(↓r, ↓ i:REAL) : NumeroComplejo

// Toma la parte real y la imaginaria y devuelve un número complejo.FUNC Real(↓c : NumeroComplejo) : REAL

/* Toma un número complejo y devuelve su parte real. */FUNC Imaginaria(↓c : NumeroComplejo) : REAL

/* Toma un Numero Complejo y devuelve su parte imaginaria.*/FUNC Suma(↓c1, ↓c2 : NumeroComplejo) : NumeroComplejo

/* Toma dos Números Complejos y devuelve su suma */FUNC Producto(↓c1, ↓c2 : NumeroComplejo): NumeroComplejo

/* Toma dos Números Complejos y devuelve su producto. */ImplementaciónFUNC Asignación(↓ r, ↓ i:REAL) : NumeroComplejoVariables

c : NumeroComplejoInicio

c.parte_real := rc.parte_imag := iRESULTADO ←←←← c

Fin

FUNC Real(↓ c : NumeroComplejo): REAL /* Toma un número complejo y devuelve su parte real. */Inicio

RESULTADO ←←←← c.parte_realFin

FUNC Imaginaria(↓c : NumeroComplejo) : REAL /* Toma un número complejo y devuelve su parte imaginaria. */

InicioRESULTADO ←←←← c.parte_imag

Fin

FUNC Suma(↓c1, ↓c2 : NumeroComplejo) : NumeroComplejo /* Toma dos Números Complejos y devuelve su suma */

Variablesres : NumeroComplejo

Iniciores.parte_real ←←←← c1.parte_real + c2.parte_realres.parte_imag ←←←← c1.parte_imag + c2.parte_imagRESULTADO ←←←← res

Fin

FUNC Producto(↓c1, ↓c2 : NumeroComplejo): NumeroComplejo/* Toma dos Números Complejos y devuelve su producto. */

Variablesres : NumeroComplejo

Iniciores.parte_real ←←←← c1.parte_real * c2.parte_real -

c1.parte_imag * c2.parte_imagres.parte_imag ←←←← c1.parte_real * c2.parte_imag +

c1.parte_imag * c2.parte_realRESULTADO ←←←← res

Fin

Fin /* Módulo Complejos */

Metodología de la Programación. Curso 2002/03. Pág. 24

• La implementación se separa de la utilización.• La implementación del tipo se puede hacer de

muchas formas:– NumeroComplejo = ARRAY [1..2] DE REAL

– NumeroComplejo = REGISTRO

Módulo, Argumento : REAL

FINREGISTRO

• Un cambio en la implementación no debe suponercambios en la utilización.

Metodología de la Programación. Curso 2002/03. Pág. 25

•• EjercicioEjercicio: Realizar la implementación deNumeroComplejo como un registro dondese guarda módulo y argumento. Elalgoritmo de multiplicación del vector decomplejos será más eficiente sin haber sidomodificado.

Metodología de la Programación. Curso 2002/03. Pág. 26

• MODULA - 2. Desarrollo de Software. C. Galán.Paraninfo. 1987

• Algoritmos + Estructuras de datos = Programas.Wirth N Ed. Ed del Castillo.

• Fundamentos de programación. Algoritmos yestructuras de datos. L. Joyanes. McGraw-Hill. 1996

• PASCAL y Estructuras de datos. N. Dale & S. Lilly.McGraw-Hill. 1992

• Walls and mirrors. Modula-2 edition. Hellman,Veroff.. Ed. Benjamin/Cummings Series. 1988.