Metodologías para la Enseñanza Aprendizaje de la Programación

Anuncio
Metodologías para la Enseñanza Aprendizaje de la
Programación Estructurada y Orientada a Objetos
Leobardo LÓPEZ ROMÁN
Departamento de Ingeniería Industrial y de Sistemas, Universidad de Sonora
Hermosillo, Sonora, 83000, México
[email protected]
RESUMEN
El proceso enseñanza aprendizaje de la programación de
computadoras siempre ha sido difícil. No importa cuál se esté
usando como primer lenguaje en la enseñanza, sea FORTRAN,
COBOL, BASIC, PASCAL, C, C++, JAVA, C#, o cualquier
otro. El problema es que los estudiantes no desarrollan lógica o
desarrollan muy poca lógica, escenario que se ha complicado
con la permanente evolución de los paradigmas y la aparición
de nuevos lenguajes de programación. Con la idea de coadyuvar
en el mejoramiento de esta situación, este autor ha desarrollado
y publicado como libro seis metodologías. En este artículo se
hace una presentación general de la metodología de cada uno de
los seis libros, haciendo énfasis en la evolución que han tenido
dichas metodologías.
Palabras Claves: Metodología, Programación Estructurada,
Orientada a Objetos.
1. INTRODUCCIÓN
Desde finales de los setentas y hasta la actualidad, he observado
empíricamente, que muchos estudiantes de programación de
computadoras han estado aprendiendo en forma muy limitada,
porque siempre se cae en darle poca importancia al desarrollo
de la lógica, y se enfocan más a enseñarles el lenguaje, y
aprenden a prueba y error.
La idea de este autor es que lo fundamental al aprender a
programar, es desarrollar la lógica necesaria para solucionar
problemas en forma algorítmica, independientemente de algún
lenguaje; esto es, aprender a diseñar algoritmos o programas
usando un seudolenguaje, y no hacerlo directamente con un
lenguaje.
Teniendo en mente el propósito de coadyuvar en el
mejoramiento de la enseñanza aprendizaje de la programación,
entre los años 1981 y 1994, desarrollé una metodología que
conduce la enseñanza aprendizaje de la programación
estructurada, mediante el uso de un seudolenguaje de diseño de
algoritmos o programas estructurados, enfocado a que los
estudiantes desarrollen la lógica independientemente de algún
lenguaje de programación.
Dicha metodología fue publicada en un libro [1] y ha servido
como base para desarrollar otras cinco metodologías, que han
sido publicadas en los libros [2], [3], [4], [5] y [6]. Todos
publicados en español por la editorial Alfaomega y distribuidos
en los países de habla hispana. En este artículo se hace una
presentación general de la evolución que han tenido dichas
metodologías, como consecuencia de la evolución de los
52
SISTEMAS, CIBERNÉTICA E INFORMÁTICA
paradigmas y
programación.
la
aparición
de
nuevos
lenguajes
de
2. EVOLUCIÓN DE LA PROGRAMACIÓN
El paradigma de programación ha evolucionado, y entre muchos
avances que se han producido, destacan tres grandes pasos: el
primero es cuando se inventó la programación de computadoras
como tal; el segundo paso es cuando se gestó la primera gran
evolución, a la que se le nombró Programación Estructurada; y
el tercer paso, es cuando se generó otra gran evolución, a la que
se le denomina Programación Orientada a Objetos.
2.1 Programación de Computadoras
En la década de los cincuentas se inventó la programación de
computadoras como tal, en esos tiempos sólo existían las
estructuras lógicas de Secuenciación, If y For, que se conocía
como Do en Fortran, y se utilizaban los diagramas de flujo
como técnica de diseño de algoritmos o programas. La
arquitectura general de un programa consistía de un solo
módulo o bloque de instrucciones.
2.2 Programación Estructurada
A finales de la década de los sesentas, surge un movimiento
llamado programación estructurada que vino a añadir nuevas
estructuras, técnicas y conceptos a la programación: se
añadieron las estructuras lógicas DO-UNTIL, DOWHILE y se
formalizaron el IF-THEN, IF-THEN-ELSE y CASE. Se inventó
el módulo, la función y el concepto de parámetros. Se
desarrollaron nuevas técnicas de diseño de algoritmos o
programas: seudocódigo, diagramas Warnier, diagramas
Chapin, Jackson, Diseño estructurado de Yourdon, Top Down
Design (Diseño descendente), entre otras; que vinieron a
desplazar a la tradicional técnica de diagramas de flujo. Fueron
apareciendo nuevos lenguajes: Pascal, C, Cobol estructurado,
Basic estructurado. Se estableció que se debe aprender a
programar utilizando un seudolenguaje, es decir, no enseñar
directamente con un lenguaje. Y se instituyó que se debe usar
un estilo de programación que haga más entendible el algoritmo
y el programa. La arquitectura general de un programa cambió,
y ahora consistía de un conjunto de funciones o módulos
jerarquizados, cada uno formado por un conjunto de
instrucciones.
2.3 Programación Orientada a Objetos
Aunque la programación orientada a objetos (POO) aparece
muchos años antes, es a mediados de los noventas cuando se
generaliza su uso. La POO añade a la programación una nueva
estructura: el objeto, con sus conceptos; objetos, clases,
VOLUMEN 8 - NÚMERO 1 - AÑO 2011
ISSN: 1690-8627
encapsulación, herencia y polimorfismo. Aparecen nuevas
técnicas de diseño: Booch, Rumbaugh, Jacobson, Yourdon,
UML (Unified Modeling Language), entre otras. Se desarrollan
nuevos lenguajes: C++, Java, C#, etcétera. La arquitectura
general de un programa cambió, y ahora consiste de un conjunto
de objetos, cada uno formado por datos y un conjunto de
métodos, equivalentes a módulos o funciones en la
programación estructurada, y a su vez, cada método formado
por un conjunto de instrucciones.
Publicada en el libro [1], donde se presenta una metodología de
la programación estructurada, que conduce el proceso
enseñanza aprendizaje enfocado, a que el estudiante desarrolle
bases lógicas sólidas usando seudocódigo y Top Down Design,
independientemente de un lenguaje de programación.
3. PROBLEMA, CAUSA Y SOLUCIÓN PROPUESTA
En esta metodología, los tipos de datos se representan de la
siguiente forma: Entero, Real, Alfabético, Carácter, Arreglos,
Registros y Archivos.
3.1 Problema
Desde hace treinta años he investigado empíricamente y he
observado que el proceso enseñanza aprendizaje de la
programación de computadoras siempre ha sido difícil. No
importa cuál se esté usando como primer lenguaje en la
enseñanza, sea FORTRAN, COBOL, BASIC, PASCAL, C,
C++, JAVA, C# o cualquier otro. El problema es que los
estudiantes no desarrollan lógica o desarrollan muy poca lógica,
en consecuencia, no aprenden bien a diseñar programas.
3.2 Causa
Aunque se ha escrito mucho, según la experiencia de este autor,
la causa es que por un lado, se ha escrito mucho sobre
metodologías de modelado, de análisis y de diseño pero van
enfocadas en un sentido muy abstracto; y por otro lado, cuándo
aparecen nuevos lenguajes, se escriben manuales de cómo
usarlos, pero van enfocados en un sentido muy concreto, que es
como operar el lenguaje; hasta cierto punto desvinculados, lo
que es el diseño de programas con la codificación de los
mismos, lo que ha generado un vacío, que provoca que los
maestros que enseñan programación, estén desorientados, y en
algunos casos enseñan muy poco o nada de lógica (diseño de
programas), en otros casos enseñan algo de lógica pero en
forma inapropiada e incompleta, y se enfocan más a la
enseñanza de cómo usar el lenguaje sin haber desarrollado bases
lógicas sólidas. En consecuencia, los estudiantes aprenden a
usar lenguajes sin desarrollar la lógica apropiadamente. Es
pertinente aclarar que el problema y la causa expuestos son
aplicables en muchos casos en el contexto donde este autor se
desenvuelve en México y en algunos otros países de habla
hispana; sin embargo, es posible que haya casos en que no
aplican.
3.3 Solución propuesta
Hay algunos autores que han desarrollado metodologías de la
programación que van en el sentido de llenar ese vacío, sin
embargo, según mi apreciación, todavía ha quedado algo de
vacío, es por ello que he desarrollado seis metodologías de la
programación; o una metodología en seis versiones, que
conducen el proceso enseñanza aprendizaje enfocado a que el
estudiante, primero desarrolle bases lógicas sólidas y después,
sobre esas bases, que aprenda el lenguaje de programación. En
el siguiente punto de explican.
4. METODOLOGÍAS DESARROLLADAS
4.1 Programación Estructurada un enfoque algorítmico
ISSN: 1690-8627
SISTEMAS, CIBERNÉTICA E INFORMÁTICA
La idea de usar una metodología en seudocódigo, es que se use
nuestro idioma natural que es el español, conjuntamente con los
elementos y estructuras de los lenguajes de programación, y en
este caso, respetando las palabras reservadas en inglés, de las
estructuras lógicas de control.
La definición de variables se hace mediante el formato:
Definir variables
NOMBRE: Alfabético[30]
HRSTRAB: Entero
CUOTAHR, SUELDO: Real
La lectura o entrada de datos se hace con el formato:
Solicitar Nombre, Horas trabajadas y Cuota por hora
Leer NOMBRE, HRSTRAB, CUOTAHR
La escritura o salida de datos se realiza con el formato:
Imprimir NOMBRE, SUELDO
Las estructuras lógicas de control, se representan.
La selección simple (IF-THEN)
Formato:
IF condición THEN
Acción(es)
ENDIF
La selección doble (IF-THEN-ELSE)
Formato:
IF condición THEN
Acción(es)
ELSE
Acción(es)
ENDIF
La selección múltiple (CASE)
Formato:
CASE (1,2,3,4) SELECTOR
1: Acción(es)
2: Acción(es)
3: Acción(es)
4: Acción(es)
ELSE
Acción(es)
ENDCASE
La repetición REPEAT (DO).
Formato:
REPEAT
Acción(es)
UNTIL Condición
La repetición FOR
Formato:
VOLUMEN 8 - NÚMERO 1 - AÑO 2011
53
FOR CONTADOR=VALORINICIAL,VALORFINAL,INC
Acción(es)
ENDFOR
La repetición DOWHILE
Formato:
DOWHILE Condición
Acción(es)
ENDDO
Ejemplo de aplicación:
Algoritmo FACTORIALES
1. Definir variables
N, I, J, FACTOR, NUM: Entero
2. Solicitar Cantidad de números
3. Leer N
4. FOR J = 1, N
a. Solicitar Número
b. Leer NUM
c. IF NUM = 0 THEN
1. FACTOR = 1
d. ELSE
1. FACTOR = 1
2. FOR I = NUM, 1, -1
a. FACTOR = FACTOR * I
3. ENDFOR
e. ENDIF
f. Imprimir FACTOR
5. ENDFOR
6. Fin
Luego se integra el uso de Top Down Design para descomponer
el problema en una estructura de módulos, y después, cada
módulo se diseña en seudocódigo.
Cabe aclarar que esta metodología se desarrolló en los ochentas
y principios de los noventas, tiempos en que se usaba el
lenguaje Pascal como prototipo para la enseñanza de la
programación estructurada, por lo que, la metodología quedó un
poco influenciada con el estilo que se usaba con dicho lenguaje,
como es el uso de mayúsculas en las estructuras de control y en
los identificadores.
4.2 Programación Estructurada en TURBO PASCAL 7
Publicada en el libro [2], donde se presenta el lenguaje TURBO
PASCAL 7, explicado tomando como base la metodología del
libro anterior. Es un libro que va más allá de ser un manual del
lenguaje, en este libro se enseña a programar usando la
metodología del libro anterior integrada con el lenguaje
TURBO PASCAL 7.
Este libro tiene la misma estructura que el anterior, solo que
aquí se toma como base cada algoritmo desarrollado en dicho
libro, y se va explicando cómo usar el lenguaje TURBO
PASCAL 7, para codificar el programa correspondiente.
3. Leer NUM
4. IF NUM = 0 THEN
a. FACTOR = 1
5. ELSE
a. FACTOR = 1
b. FOR I = NUM, 1, -1
1. FACTOR = FACTOR * I
c. ENDFOR
6. ENDIF
7. Imprimir FACTOR
8. Fin
En este libro se toma como base ese algoritmo y se explica
cómo codificarlo usando el lenguaje TURBO PASCAL 7, y nos
queda el programa:
program FACTORIAL;
uses Crt;
var
NUM, I, FACTOR: Longint;
begin
Clrscr;
Writeln(„CALCULA
EL
FACTORIAL
DE
UN
NUMERO‟);
Writeln;
Write(„TECLEE EL NUMERO: „);
Readln(NUM);
if NUM = 0 then
FACTOR := 1
else
begin
FACTOR := 1;
for I := NUM downto 1 do
FACTOR := FACTOR * I;
end;
Writeln;
Writeln(„FACTORIAL: ‟, FACTOR);
Writeln;
Writeln(„CUALQUIER TECLA PARA CONTINUAR‟);
repeat until KeyPressed;
end.
4.3 Programación Estructurada un enfoque algorítmico
Segunda Edición
Publicada en el libro [3], donde se presenta la metodología de la
programación estructurada, ahora corregida, aumentada y
actualizada para los tiempos en los que se enseñaba C como
primer lenguaje.
A continuación se presenta un ejemplo de cómo se usa la
metodología: primero se diseña el diagrama general de la
solución usando Top Down Design, en la que se definen los
módulos que se requieren para solucionar el problema:
Algoritmo
AYUDA
Por ejemplo, se tiene el algoritmo en seudocódigo diseñado con
la metodología del libro anterior:
Algoritmo FACTORIAL
1. Definir variables
NUM, I, FACTOR: Entero
2. Solicitar Número
Módulo
Sumar
54
VOLUMEN 8 - NÚMERO 1 - AÑO 2011
SISTEMAS, CIBERNÉTICA E INFORMÁTICA
Módulo
Restar
Módulo
Multiplicar
Módulo
Dividir
ISSN: 1690-8627
c. Fin Módulo Restar
Enseguida se diseña el algoritmo en seudocódigo, es decir, se
diseña la lógica de cada uno de los módulos usando
seudocódigo:
Algoritmo AYUDA
Declaraciones globales
Variables
N1, N2, ResuNi, ResuMaq: Entero
Desea: Carácter
Opcion: Entero
1. Módulo Principal
a. DO
1. Imprimir el menú de opciones
4. Módulo Multiplicar
a. DO
1. Solicitar número uno, número dos y resultado
2. Leer N1, N2, ResuNi
3. Calcular ResuMaq = N1 * N2
4. IF ResuMaq = ResuNi THEN
a. Imprimir “La multiplicación está correcta”
5. ELSE
a. Imprimir “La multiplicación está incorrecta”
6. ENDIF
7. Solicitar “Desea multiplicar de nuevo (S/N)?”
8. Leer Desea
b. UNTIL Desea = “N”
c. Fin Módulo Multiplicar
TE PUEDO AYUDAR A:
1. SUMAR
2. RESTAR
3. MULTIPLICAR
4. DIVIDIR
5. FIN
OPCION:
2. Leer Opcion
3. CASE Opcion
1: Llamar Sumar
2: Llamar Restar
3: Llamar Multiplicar
4: Llamar Dividir
4. ENDCASE
b. UNTIL Opcion = 5
c. Fin Módulo Principal
2. Módulo Sumar
a. DO
1. Solicitar número uno, número dos y resultado
2. Leer N1, N2, ResuNi
3. Calcular ResuMaq = N1 + N2
4. IF ResuMaq = ResuNi THEN
a. Imprimir “La suma está correcta”
5. ELSE
a. Imprimir “La suma está incorrecta”
6. ENDIF
7. Solicitar “Desea sumar de nuevo (S/N)?”
8. Leer Desea
b. UNTIL Desea = “N”
c. Fin Módulo Sumar
3. Módulo Restar
a. DO
1. Solicitar número uno, número dos y resultado
2. Leer N1, N2, ResuNi
3. Calcular ResuMaq = N1 - N2
4. IF ResuMaq = ResuNi THEN
a. Imprimir “La resta está correcta”
5. ELSE
a. Imprimir “La resta está incorrecta”
6. ENDIF
7. Preguntar “¿Desea restar de nuevo (S/N)?”
8. Leer Desea
b. UNTIL Desea = “N”
ISSN: 1690-8627
SISTEMAS, CIBERNÉTICA E INFORMÁTICA
5. Módulo Dividir
a. DO
1. Solicitar número uno, número dos y resultado
2. Leer N1, N2, ResuNi
3. Calcular ResuMaq = N1 / N2
4. IF ResuMaq = ResuNi THEN
a. Imprimir “La división está correcta”
5. ELSE
a. Imprimir “La división está incorrecta”
6. ENDIF
7. Solicitar “Desea dividir de nuevo (S/N)?”
8. Leer Desea
b. UNTIL Desea = “N”
c. Fin Módulo Dividir
El estilo de programación en estos tiempos, promovía el uso de
minúsculas combinadas con mayúsculas en los identificadores,
y la estructura general del algoritmo se adapta para que resulte
más natural con la estructura general de un programa en C.
Aunque el lenguaje C promueve el uso de las estructuras lógicas
en minúsculas, la metodología las usa todavía en mayúsculas.
4.4 Programación Estructurada en Lenguaje C
Publicada en el libro [4], donde se presenta el lenguaje C,
explicado tomando como base la metodología del libro anterior.
Es un libro que va más allá de ser un manual del lenguaje, en el
mismo, se enseña a programar usando la metodología del libro
anterior integrada con el lenguaje C.
Este libro tiene la misma estructura que el anterior, solo que
aquí se toma como base cada algoritmo desarrollado en dicho
libro, y se va explicando cómo usar el lenguaje C, para codificar
el programa correspondiente.
Por ejemplo, se tiene el algoritmo en seudocódigo diseñado con
la metodología del libro anterior:
Primero se diseña el diagrama general utilizando diseño
descendente ( Top down design ):
Algoritmo
AREAS
Módulo
Triangulo
Módulo
Cuadrado
Módulo
Rectangulo
VOLUMEN 8 - NÚMERO 1 - AÑO 2011
Módulo
Circulo
55
Enseguida se diseña la lógica usando seudocódigo:
Algoritmo AREAS
1. Módulo Principal
a. Declaraciones
Variables
Opcion: Entero
b. DO
1. Imprimir MENU
AREAS FIGURAS GEOMETRICAS
1. TRIANGULO
2. CUADRADO
3. RECTANGULO
4. CIRCULO
5. FIN
TECLEE OPCION:
2. Leer Opcion
3. CASE Opcion
1: Llamar Triangulo
2: Llamar Cuadrado
3: Llamar Rectangulo
4: Llamar Circulo
4. ENDCASE
c. UNTIL Opcion = 5
d. Fin Módulo Principal
2. Módulo Triangulo
a. Declaraciones
Variables
Base, Altura, AreaTria: Real
b. Solicitar Base, Altura
c. Leer Base, Altura
d. AreaTria = (Base * Altura)/2
e. Imprimir AreaTria
f. Fin Módulo Triangulo
3. Módulo Cuadrado
a. Declaraciones
Variables
Lado, AreaCuad: Real
b. Solicitar Lado
c. Leer Lado
d. AreaCuad = Lado^2
e. Imprimir AreaCuad
f. Fin Módulo Cuadrado
4. Módulo Rectangulo
a. Declaraciones
Variables
AreaRec, Largo, Ancho: Real
b. Solicitar Largo, Ancho
c. Leer Largo, Ancho
d. AreaRec = Largo * Ancho
e. Imprimir AreaRec
f. Fin Módulo Rectangulo
En este libro se toma como base ese algoritmo y se explica
cómo codificarlo usando el lenguaje C, y nos queda el
programa:
/* programa AREAS */
/* C909.C */
# include <stdio.h>
# include <math.h>
void main()
{
/* Declaraciones */
/* Funciones */
void Triangulo();
void Cuadrado();
void Rectangulo();
void Circulo();
/* Variables */
int Opcion;
/* Instrucciones ejecutables */
do
{
printf("\n");
printf("┌────────────────────────┐\n");
printf("│ AREAS FIGURAS GEOMETRICAS │\n");
printf("├────────────────────────┤\n");
printf("│
1. TRIANGULO
│\n");
printf("│
2. CUADRADO
│\n");
printf("│
3. RECTANGULO
│\n");
printf("│
4. CIRCULO
│\n");
printf("│
5. FIN
│\n");
printf("└────────────────────────┘\n");
printf("
TECLEE OPCION: ");
scanf("%d",&Opcion);
switch (Opcion)
{
case 1:
Triangulo();
break;
case 2:
Cuadrado();
break;
case 3:
Rectangulo();
break;
case 4:
Circulo();
break;
}
} while (Opcion!=5);
}/* Fin funcion principal */
void Triangulo()
{
float Base,Altura,AreaTria;
printf("\nCALCULA E IMPRIME EL AREA DE UN
TRIANGULO\n\n");
5. Módulo Circulo
a. Declaraciones
Constantes
PI = 3.1415926536
56
Variables
AreaCirc, Radio: Real
b. Solicitar Radio
c. Leer Radio
d. AreaCirc = PI * Radio^2
e. Imprimir AreaCirc
f. Fin Módulo Circulo
SISTEMAS, CIBERNÉTICA E INFORMÁTICA
VOLUMEN 8 - NÚMERO 1 - AÑO 2011
ISSN: 1690-8627
printf("TECLEE BASE: ");
scanf("%f",&Base);
printf("TECLEE ALTURA: ");
scanf("%f",&Altura);
AreaTria = (Base * Altura) / 2;
printf("\nAREA = %10.2f\n\n",AreaTria);
printf("PRESIONE <Intro> PARA CONTINUAR...");
fflush(stdin);
getchar();
}/* Fin funcion Triangulo */
void Cuadrado()
{
float Lado,AreaCuad;
printf("\nCALCULA E IMPRIME EL AREA DE UN
CUADRADO\n\n");
printf("TECLEE LADO: ");
scanf("%f",&Lado);
AreaCuad = pow(Lado,2);
printf("\nAREA = %10.2f\n\n",AreaCuad);
printf("PRESIONE <Intro> PARA CONTINUAR...");
fflush(stdin);
getchar();
}/* Fin funcion Cuadrado */
void Rectangulo()
{
float AreaRec,Largo,Ancho;
printf("\nCALCULA E IMPRIME EL AREA DE UN
RECTANGULO\n\n");
printf("TECLEE LARGO: ");
scanf("%f",&Largo);
printf("TECLEE ANCHO: ");
scanf("%f",&Ancho);
AreaRec = Largo * Ancho;
printf("\nAREA = %10.2f\n\n",AreaRec);
printf("PRESIONE <Intro> PARA CONTINUAR...");
fflush(stdin);
getchar();
}/* Fin funcion Rectangulo */
void Circulo()
{
const float PI = 3.1415926536;
float AreaCirc,Radio;
printf("\nCALCULA E IMPRIME EL AREA DE UN
CIRCULO\n\n");
printf("TECLEE RADIO: ");
scanf("%f",&Radio);
AreaCirc = PI * pow(Radio,2);
printf("\n");
printf("\nAREA = %10.2f\n\n",AreaCirc);
printf("PRESIONE <Intro> PARA CONTINUAR...");
fflush(stdin);
getchar();
}/* Fin funcion Circulo */
4.5 Metodología de la Programación Orientada a Objetos
Publicada en el libro [5], donde se presenta una metodología de
la programación orientada a objetos, que conduce el proceso
enseñanza aprendizaje, enfocado a que el estudiante desarrolle
bases lógicas sólidas usando seudocódigo, el diagrama de
clases, los conceptos de objetos, clases, herencia, polimorfismo
ISSN: 1690-8627
SISTEMAS, CIBERNÉTICA E INFORMÁTICA
y la arquitectura modelo vista controlador independientemente
de un lenguaje de programación.
A continuación se presenta un ejemplo de cómo se aplica:
primero, se diseña el diagrama de clases, que contiene la
estructura general del programa (algoritmo):
Diagrama de clases
Empleado
# nombreEmp
# deptoEmp
# puestoEmp
EjecutaEmpleado
establecerNombreEmp()
establecerDeptoEmp()
establecerPuestoEmp()
obtenerNombreEmp()
obtenerDeptoEmp()
obtenerPuestoEmp()
EmpPorHoras
EmpAsalariado
horasTrab
cuotaHora
sueldoQnaHoras
sueldoMensual
sueldoQnaAsal
establecerHorasTrab()
establecerCuotaHora()
calcularSueldoQnaHoras()
obtenerSueldoQnaHoras()
establecerSueldoMensual()
calcularSueldoQnaAsal()
obtenerSueldoQnaAsal()
Enseguida se diseña el algoritmo que contiene la lógica que
soluciona el problema usando seudocódigo.
Algoritmo CALCULA SUELDOS DE EMPLEADOS
Clase Empleado
1. Declaraciones
Datos
# nombreEmp: Cadena
# deptoEmp: Cadena
# puestoEmp: Cadena
2. Método establecerNombreEmp(nom: Cadena)
a. nombreEmp = nom
b. Fin Método establecerNombreEmp
3. Método establecerDeptoEmp(dep: Cadena)
a. deptoEmp = dep
b. Fin Método establecerDeptoEmp
4. Método establecerPuestoEmp(pue: Cadena)
a. puestoEmp = pue
b. Fin Método establecerPuestoEmp
5. Método obtenerNombreEmp(): Cadena
a. return nombreEmp
b. Fin Método obtenerNombreEmp
6. Método obtenerDeptoEmp(): Cadena
a. return deptoEmp
VOLUMEN 8 - NÚMERO 1 - AÑO 2011
57
b. Fin Método obtenerDeptoEmp
7. Método obtenerPuestoEmp(): Cadena
a. return puestoEmp
b. Fin Método obtenerPuestoEmp
Fin Clase Empleado
Clase EmpPorHoras hereda de Empleado
1. Declaraciones
Datos
horasTrab: Entero
cuotaHora: Real
sueldoQnaHoras: Real
2. Método establecerHorasTrab(horasTr: Entero)
a. horasTrab = horasTr
b. Fin Método establecerHorasTrab
3. Método establecerCuotaHora(cuotaHr: Real)
a. cuotaHora = cuotaHr
b. Fin Método establecerCuotaHora
4. Método calcularSueldoQnaHoras()
a. sueldoQnaHoras = horasTrab * cuotaHora
b. Fin Método calcularSueldoQnaHoras
5. Método obtenerSueldoQnaHoras(): Real
a. return sueldoQnaHoras
b. Fin Método obtenerSueldoQnaHoras
Fin Clase EmpPorHoras
Clase EmpAsalariado hereda de Empleado
1. Declaraciones
Datos
sueldoMensual: Real
sueldoQnaAsal: Real
2. Método establecerSueldoMensual(sdo: Real)
a. sueldoMensual = sdo
b. Fin Método establecerSueldoMensual
3. Método calcularSueldoQnaAsal()
a. sueldoQnaAsal = sueldoMensual / 2
b. Fin Método calcularSueldoQnaAsal
4. Método obtenerSueldoQnaAsal(): Real
a. return sueldoQnaAsal
b. Fin Método obtenerSueldoQnaAsal
Fin Clase EmpAsalariado
Clase EjecutaEmpleado
1. Método principal
a. Declaraciones
Variables
nomEmp, depto, puesto: Cadena
hrsTra, tipoEmp: Entero
cuoHr, sdoMen: Real
desea: Carácter
b. DO
1. Imprimir Menu y solicitar tipo de empleado
Tipos de empleado
1. Empleado por horas
2. Empleado asalariado
Teclee tipo:
2. Leer tipoEmp
3. Solicitar Nombre, departamento y puesto
4. Leer nomEmp, depto, puesto
5. IF tipoEmp = 1 THEN
a. Declarar, crear e iniciar objeto
EmpPorHoras objEmp = new EmpPorHoras()
b. Solicitar número de horas trabajadas y
cuota por hora
58
SISTEMAS, CIBERNÉTICA E INFORMÁTICA
c. Leer hrsTra, cuoHr
d. Establecer
objEmp.establecerNombreEmp(nomEmp)
objEmp.establecerDeptoEmp(depto)
objEmp.establecerPuestoEmp(puesto)
objEmp.establecerHorasTrab(hrsTra)
objEmp.establecerCuotaHora(cuoHr)
e. Calcular
objEmp.calcularSueldoQnaHoras()
f. Imprimir objEmp.obtenerNombreEmp()
objEmp.obtenerDeptoEmp()
objEmp.obtenerPuestoEmp()
objEmp.obtenerSueldoQnaHoras()
6. ELSE
a. Declarar, crear e iniciar objeto
EmpAsalariado objEmp = new EmpAsalariado()
b. Solicitar sueldo mensual
c. Leer sdoMen
d. Establecer
objEmp.establecerNombreEmp(nomEmp)
objEmp.establecerDeptoEmp(depto)
objEmp.establecerPuestoEmp(puesto)
objEmp.establecerSueldoMensual(sdoMen)
e. Calcular
objEmp.calcularSueldoQnaAsal()
f. Imprimir objEmp.obtenerNombreEmp()
objEmp.obtenerDeptoEmp()
objEmp.obtenerPuestoEmp()
objEmp.obtenerSueldoQnaAsal()
7. ENDIF
8. Preguntar “¿Desea procesar otro empleado(S/N)?”
9. Leer desea
c. WHILE desea = “S”
d. Fin Método principal
Fin Clase EjecutaEmpleado
Fin
4.6 Programación Estructurada y Orientada a
Objetos un enfoque algorítmico Tercera Edición
Publicada en el libro [6], donde se presenta la tercera edición de
la metodología de la programación estructurada, adecuándola a
los tiempos actuales, en que el lenguaje C se ha convertido en la
base de los lenguajes modernos, y luego tomándola como base,
se presenta una evolución hacia la orientada a objetos.
La idea es que al estudiante se le pueda enseñar en un mismo
curso la programación estructurada con un enfoque algorítmico,
y luego tomando como base lo anterior, que se le enseñen los
conceptos básicos que aporta la programación orientada a
objetos y que sea capaz de diseñar algoritmos tanto
estructurados como orientados a objetos. De esta forma se le
preparará para que aprenda cualquier lenguaje estructurado u
orientado a objetos.
La metodología se divide en dos partes: en la primera parte,
que abarca del capítulo uno al nueve, se presenta la metodología
de la programación estructurada usando la técnica Top Down
Design y seudocódigo.
A continuación se presenta un ejemplo, para mostrar una idea
general de cómo se usa la primera parte de la metodología en la
solución de una aplicación.
VOLUMEN 8 - NÚMERO 1 - AÑO 2011
ISSN: 1690-8627
Primero se diseña el diagrama general de la solución usando
Top Down Design:
Algoritmo
MEDIA CON FUNCIONES
Función principal()
Función
leerVector()
Función
calcularMedia()
Función
imprimirVector()
Enseguida se diseña el algoritmo en seudocódigo:
Algoritmo MEDIA CON FUNCIONES
1. Función principal()
a. Declarar
Variables
vector: Arreglo[10] Real
promedio: Real
b. leerVector(vector)
c. promedio = calcularMedia(vector)
d. imprimirVector(vector)
e. Imprimir promedio
f. Fin Función principal
2. Función leerVector(Ref vec: Arreglo[10] Real)
a. Declarar
Variables
n: Entero
b. for n=0; n<=9; n++
1. Solicitar elemento vec[n]
2. Leer vec[n]
c. endfor
d. Fin Función leerVector
3. Función calcularMedia(Ref v: Arreglo[10] Real) Real
a. Declarar
Variables
sumatoria, prom: Real
i: Entero
b. sumatoria = 0
c. for i=0; i<=9; i++
1. sumatoria = sumatoria + v[i]
d. endfor
e. prom = sumatoria / i
f. return prom
g. Fin Función calcularMedia
4. Función imprimirVector(Ref vect: Arreglo[10] Real)
a. Declarar
Variables
x: Entero
b. for x=0; x<=9; x++
1. Imprimir vect[x]
c. endfor
d. Fin Función imprimirVector
Fin
En la segunda parte de la metodología, que abarca del capítulo
diez al trece, es donde se estudian los conceptos de la
programación orientada a objetos, integrándolos con el concepto
ISSN: 1690-8627
SISTEMAS, CIBERNÉTICA E INFORMÁTICA
de diagrama de clases de UML (Unified Modeling Language),
con la arquitectura modelo-vista-controlador, con las estructuras
estudiadas en los primeros nueve capítulos correspondientes a la
programación estructurada y la incorporación de los conceptos
de la programación orientada a objetos en la técnica
seudocódigo, logrando una metodología de la programación que
permite diseñar algoritmos orientados a objetos. Planteando una
evolución de la programación estructurada a la programación
orientada a objetos, enfatizando que la evolución radica en el
diseño arquitectónico del algoritmo o programa, que en la
programación estructurada se hace mediante técnicas como Top
Down Design, y en la programación orientada a objetos se usan
técnicas como el diagrama de clases.
A continuación se presenta un ejemplo, para mostrar una idea
general de cómo se usa la segunda parte de la metodología en la
solución de una aplicación.
La solución se hace en dos partes: en la primera, se diseña el
diagrama de clases, que contiene la estructura general del
algoritmo o programa.
Diagrama de clases
Obrero3
nombreObr
produccion
sueldo
EjecutaObrero3
establecerNombreObr()
establecerProduccion()
calcularSueldo()
obtenerNombreObr()
obtenerProduccion()
obtenerSueldo()
Y después, en la segunda parte, se diseña el algoritmo que
contiene la lógica que soluciona el problema usando
seudocódigo
Algoritmo CALCULA LA PRODUCCION DE OBREROS
Clase Obrero3
1. Declarar
Datos
nombreObr: Cadena
produccion: Entero
sueldo: Real
2. Método establecerNombreObr(nom: Cadena)
a. nombreObr = nom
b. Fin Método establecerNombreObr
3. Método establecerProduccion(prod: Entero)
a. produccion = prod
b. Fin Método establecerProduccion
4. Método calcularSueldo()
a. if produccion <= 500 then
1. sueldo = producción * 20.00
b. endif
c. if (produccion > 500)AND (produccion <= 800) then
1. sueldo = producción * 25.00
d. endif
VOLUMEN 8 - NÚMERO 1 - AÑO 2011
59
e. if produccion > 800 then
1. sueldo = producción * 30.00
f. endif
g. Fin Método calcularSueldo
5. Método obtenerNombreObr() Cadena
a. return nombreObr
b. Fin Método obtenerNombreObr
6. Método obtenerProduccion() Real
a. return produccion
b. Fin Método obtenerProduccion
7. Método obtenerSueldo() Real
a. return sueldo
b. Fin Método obtenerSueldo
Fin Clase Obrero3
Clase EjecutaObrero3
1. Método principal()
a. Declarar
Variables
nombre, obrMayor, obrMenor: Cadena
dia, proDia, totProdObr, totProd,
totObreros, mayorProd, menorProd: Entero
totSueldos: Real
desea: Carácter
b. Imprimir encabezado
c. totObreros = 0
totProd = 0
totSuedos = 0
mayorProd = 0
menorProd = 10000
d. do
1. Declarar, crear e iniciar objeto
Obrero3 objObrero = new Obrero3()
2. Solicitar Nombre
3. Leer nombre
4. totProdObr = 0
5. for dia=1; dia<=6; dia++
a. Solicitar Producción del dia
b. Leer proDia
c. totProdObr = totProdObr + proDia
6. endfor
7. Establecer
objObrero.establecerNombreObr(nombre)
objObrero.establecerProduccion(totProdObr)
8. Calcular objObrero.calcularSueldo()
9. Imprimir objObrero.obtenerNombreObr()
objObrero.obtenerProduccion()
objObrero.obtenerSueldo()
10. if objObrero.obtenerProduccion()>mayorProd then
a. mayorProd = objObrero.obtenerProduccion()
b. obrMayor = objObrero.obtenerNombreObr()
11. endif
12. if objObrero.obtenerProduccion()<menorProd then
a. menorProd = objObrero.obtenerProduccion()
b. obrMenor = objObrero.obtenerNombreObr()
13. endif
14. totObreros = totObreros + 1
totProd = totProd + objObrero.obtenerProduccion()
totSuedos = totSuedos + objObrero.obtenerSueldo()
15. Preguntar “¿Desea procesar otro obrero (S/N)?”
16. Leer desea
60
SISTEMAS, CIBERNÉTICA E INFORMÁTICA
e. while desea == „S‟
f. Imprimir totObreros, totProd, totSueldos,
obrMayor, mayorProd, obrMenor, menorProd
g. Fin Método principal
Fin Clase EjecutaObrero3
Fin
5.
CONCLUSIONES
En la enseñanza de la programación siempre ha existido la
tentación de enseñar el lenguaje lo antes posible, sacrificando el
desarrollo de la lógica, y se cae en enseñar a operar lenguajes y
no a programar; porque programar implica primero diseñar
lógicamente la solución y después, codificar usando un
lenguaje. En consecuencia, se están formando muchos
programadores buenos para codificar usando lenguajes, pero sin
bases lógicas sólidas.
El estudiante primero debe desarrollar las habilidades mentales
lógicas necesarias, aprendiendo una metodología de la
programación apropiada, porque la programación es lógica y
debe ser independiente de algún lenguaje de programación, y
después, sobre esas bases aprender el lenguaje.
Desde 1994 puse a disposición de la comunidad académica una
metodología de la programación, que ha venido evolucionando,
como consecuencia del desarrollo de nuevos lenguajes y el
avance de los paradigmas de programación; primero se
presentaron cuatro versiones de programación estructurada,
luego una versión orientada a objetos, y una última versión,
donde se presentan conjuntamente la estructurada y la orientada
a objetos. Todas las metodologías enfocadas a que los
estudiantes, primero desarrollen bases lógicas sólidas, y
después, sobre esas bases, podrán aprender el lenguaje de
programación.
6. REFERENCIAS
[1] L. López, Programación Estructurada un enfoque
algorítmico, Computec-Alfaomega, México, 1994.
ISBN 970-15-0099-7.
[2] L. López, Programación Estructurada en TURBO
PASCAL 7, Alfaomega, México, 1998.
ISBN 970-15-0075-X.
[3] L. López, Programación Estructurada un enfoque
algorítmico Segunda Edición, Alfaomega, México, 2003.
ISBN 970-15-0856-4.
[4] L. López, Programación Estructurada en Lenguaje C,
Alfaomega, México, 2005. ISBN 970-15-1062-3.
[5] L. López, Metodología de la Programación Orientada a
Objetos, Alfaomega, México, 2006.
ISBN 970-15-1173-5.
[6] L. López, Programación Estructurada y Orientada a
Objetos un enfoque algorítmico Tercera Edición,
Alfaomega, México, 2011. ISBN 978-607-707-211-9.
VOLUMEN 8 - NÚMERO 1 - AÑO 2011
ISSN: 1690-8627
Descargar