Este documento proporciona información sobre diagramas de flujo, programación y el lenguaje C++. Explica conceptos clave como diagramas de flujo, sus características, tipos y simbología. También describe brevemente la historia y objetivos de la programación así como conceptos de C++ como tipos de datos, compilación, clases y más.
3. DIAGRAMA DE FLUJO «CONCEPTO»
El diagrama de flujo es la representación gráfica
del algoritmo o proceso. Se utiliza en disciplinas
como la programación, la economía, los procesos
industriales y la psicología cognitiva. Estos
diagramas utilizan símbolos con significados bien
definidos que representan los pasos del algoritmo,
y representan el flujo de ejecución mediante
flechas que conectan los puntos de inicio y de fin
de proceso.
4. CARACTERÍSTICAS
Un diagrama de flujo siempre tiene un único punto de inicio y un único punto de término.
Las siguientes son acciones previas a la realización del diagrama de flujo:
Identificar las ideas principales a ser incluidas en el diagrama de flujo. Deben estar presentes el
dueño o responsable del proceso, los dueños o responsables del proceso anterior y posterior y de
otros procesos interrelacionados, otras partes interesadas.
Definir qué se espera obtener del diagrama de flujo.
Identificar quién lo empleará y cómo.
Establecer el nivel de detalle requerido.
Determinar los límites del proceso a describir.
Los pasos a seguir para construir el diagrama de flujo son:
Establecer el alcance del proceso a describir. De esta manera quedará fijado el comienzo y el final
del diagrama. Frecuentemente el comienzo es la salida del proceso previo y el final la entrada al
proceso siguiente.
Identificar y listar las principales actividades/subprocesos que están incluidos en el proceso a
describir y su orden cronológico.
Si el nivel de detalle definido incluye actividades menores, listarlas también.
Identificar y listar los puntos de decisión.
Construir el diagrama respetando la secuencia cronológica y asignando los correspondientes
símbolos.
Asignar un título al diagrama y verificar que esté completo y describa con exactitud el proceso
elegido.
5. VENTAJAS DE LOS DIAGRAMAS DE FLUJO
Favorecen la comprensión del proceso al mostrarlo como un dibujo. El
cerebro humano reconoce muy fácilmente los dibujos. Un buen
diagrama de flujo reemplaza varias páginas de texto.
Permiten identificar los problemas y las oportunidades de mejora del
proceso. Se identifican los pasos, los flujos de los re-procesos, los
conflictos de autoridad, las responsabilidades, los cuellos de botella, y
los puntos de decisión.
Muestran las interfaces cliente-proveedor y las transacciones que en
ellas se realizan, facilitando a los empleados el análisis de las mismas.
Son una excelente herramienta para capacitar a los nuevos empleados
y también a los que desarrollan la tarea, cuando se realizan mejoras en
el proceso.
Al igual que el pseudocódigo, el diagrama de flujo con fines de análisis
de algoritmos de programación puede ser ejecutado en un
ordenador, con un Ide como Free DFD.
6. TIPOS DE DIAGRAMAS DE FLUJO
Formato vertical: En él, el flujo o la secuencia de las operaciones, va de arriba hacia abajo. Es
una lista ordenada de las operaciones de un proceso con toda la información que se
considere necesaria, según su propósito.
Formato horizontal: En él, el flujo o la secuencia de las operaciones, va de izquierda a
derecha.
Formato panorámico: El proceso entero está representado en una sola carta y puede
apreciarse de una sola mirada mucho más rápido que leyendo el texto, lo que facilita su
comprensión, aún para personas no familiarizadas. Registra no solo en línea vertical, sino
también horizontal, distintas acciones simultáneas y la participación de más de un puesto o
departamento que el formato vertical no registra.
Formato Arquitectónico: Describe el itinerario de ruta de una forma o persona sobre el plano
arquitectónico del área de trabajo. El primero de los flujogramas es eminentemente
descriptivo, mientras que los utilizados son fundamentalmente representativos.
7. SIMBOLOGÍA Y SIGNIFICADO
Óvalo o Elipse: Inicio y término (Abre y/o cierra el diagrama).
Rectángulo: Actividad (Representa la ejecución de una o más actividades o
procedimientos).
Rombo: Decisión (Formula una pregunta o cuestión).
Círculo: Conector (Representa el enlace de actividades con otra dentro de un
procedimiento).
Triángulo boca abajo: Archivo definitivo (Guarda un documento en forma permanente).
Triángulo boca arriba: Archivo temporal (Proporciona un tiempo para el almacenamiento
del documento).
9. HISTORIA
La paternidad del diagrama de flujo es en principio algo difusa. El método
estructurado para documentar graficamente un proceso como un flujo de
pasos sucesivo y alternativos, el "proceso de diagrama de flujo", fue
expuesto por Frank Gilbreth, en la Sociedad Americana de Ingenieros
Mecánicos (ASME), en 1921, bajo el enunciado de "Proceso de Gráficas-
Primeros pasos para encontrar el mejor modo".
En la década de 1970 la popularidad de los diagramas de flujo como
método propio de la informática disminuyó, con el nuevo hardware y los
nuevos lenguajes de programación de tercera generación. Y por otra parte
se convirtieron en instrumentos comunes en el mundo empresarial. Son
una expresión concisa, legible y práctica de algoritmos. Actualmente se
aplican en muchos campos del conocimiento, especialmente como
simplificación y expresión lógica de procesos, etc.
12. CONCEPTO
La programación es el proceso de diseñar, codificar, depurar y mantener
el código fuente de programas computacionales. El código fuente es escrito en
un lenguaje de programación. El propósito de la programación es crear programas
que exhiban un comportamiento deseado. El proceso de escribir código requiere
frecuentemente conocimientos en varias áreas distintas, además del dominio del
lenguaje a utilizar, algoritmos especializados y lógica formal. Programar no
involucra necesariamente otras tareas tales como el análisis y diseño de la
aplicación (pero sí el diseño del código), aunque sí suelen estar fusionadas en el
desarrollo de pequeñas aplicaciones.
13. HISTORIA
Para crear un programa, y que la computadora interprete y ejecute las instrucciones escritas en
él, debe usarse un Lenguaje de programación.
En sus inicios las computadoras interpretaban sólo instrucciones en un lenguaje específico, del
más bajo nivel, conocido como código máquina, siendo éste excesivamente complicado para
programar. De hecho sólo consiste en cadenas de números 1 y 0 (Sistema binario).
Para facilitar el trabajo de programación, los primeros científicos que trabajaban en el área
decidieron reemplazar las instrucciones, secuencias de unos y ceros, por palabras o letras
provenientes del inglés; codificándolas así y creando un lenguaje de mayor nivel, que se conoce
como Assembly o lenguaje ensamblador. Por ejemplo, para sumar se usa la letra A de la palabra
inglesa add (sumar). En realidad escribir en lenguaje ensamblador es básicamente lo mismo que
hacerlo en lenguaje máquina, pero las letras y palabras son bastante más fáciles de recordar y
entender que secuencias de números binarios.
14. LÉXICO Y PROGRAMACIÓN
La programación se rige por reglas y un conjunto más o menos reducido de
órdenes, expresiones, instrucciones y comandos que tienden a asemejarse a una
lengua natural acotada (en inglés); y que además tienen la particularidad de una
reducida ambigüedad. Cuanto menos ambiguo es un lenguaje de
programación, se dice, es más potente. Bajo esta premisa, y en el extremo, el
lenguaje más potente existente es el binario, con ambigüedad nula (lo cual lleva
a pensar así del lenguaje ensamblador).
En los lenguajes de programación de alto nivel se distinguen diversos elementos
entre los que se incluyen el léxico propio del lenguaje y las reglas semánticas y
sintácticas.
15. PROGRAMAS Y ALGORITMOS
Se han propuesto diversas técnicas de programación
cuyo objetivo es mejorar tanto el proceso de creación
de software como su mantenimiento. Entre ellas, se
pueden mencionar las siguientes:
Programación estructurada
Programación modular
Programación orientada a objetos (POO)
Programación declarativa
16. COMPILACIÓN
Normalmente la creación de un programa ejecutable (un típico.exe para Microsoft
Windows o DOS) conlleva dos pasos. El primer paso se llama compilación
(propiamente dicho) y traduce el código fuente escrito en un lenguaje de programación
almacenado en un archivo a código en bajo nivel (normalmente en código objeto, no
directamente a lenguaje máquina). El segundo paso se llama enlazado en el cual se
enlaza el código de bajo nivel generado de todos los ficheros y subprogramas que se
han mandado compilar y se añade el código de las funciones que hay en las
bibliotecas del compilador para que el ejecutable pueda comunicarse directamente
con el sistema operativo, traduciendo así finalmente el código objeto a código
máquina, y generando un módulo ejecutable.
17. PROGRAMACIÓN E INGENIERÍA DEL SOFTWARE
El proceso de creación de software, desde el punto de vista de la ingeniería, incluye los
siguientes pasos:
Reconocer la necesidad de un programa para solucionar un problema o identificar la
posibilidad de automatización de una tarea.
Recoger los requisitos del programa. Debe quedar claro qué es lo que debe hacer el
programa y para qué se necesita.
Realizar el análisis de los requisitos del programa. Debe quedar claro cómo debe realizar el
programa las cosas que debe hacer. Las pruebas que comprueben la validez del programa
se pueden especificar en esta fase.
Diseñar la arquitectura del programa. Se debe descomponer el programa en partes de
complejidad abordable.
Implementar el programa. Consiste en realizar un diseño detallado, especificando
completamente todo el funcionamiento del programa, tras lo cual la codificación
(programación propiamente dicha) debería resultar inmediata.
18. REFERENCIAS HISTÓRICAS
La primera programadora de computadora conocida fue Ada Lovelace,
hija de Anabella Milbanke Byron y Lord Byron. Anabella introdujo en las
matemáticas a Ada quien, después de conocer aCharles Babbage,
tradujo y amplió una descripción de su máquina analítica. Incluso aunque
Babbage nunca completó la construcción de cualquiera de sus
máquinas, el trabajo que Ada realizó con éstas le hizo ganarse el título
de primera programadora de computadoras del mundo. El nombre
del lenguaje de programación Ada fue escogido como homenaje a esta
programadora.
No olvidemos que este proceso está aplicado a todos los métodos
científicos que actualmente se practican.
19. OBJETIVOS DE LA PROGRAMACIÓN
Es muy importante que el programa sea lo más claro y legible posible, para
facilitar así su desarrollo y posterior mantenimiento. Al elaborar un programa se
debe intentar que su estructura sea sencilla y coherente, así como cuidar el estilo
en la edición; de esta forma se ve facilitado el trabajo del programador, tanto en la
fase de creación como en las fases posteriores de corrección de
errores, ampliaciones, modificaciones, etc. Fases que pueden ser realizadas
incluso por otro programador, con lo cual la claridad es aún más necesaria para
que otros programadores puedan continuar el trabajo fácilmente. Algunos
programadores llegan incluso a utilizar Arte ASCII para delimitar secciones de
código. Otros, por diversión o para impedir un análisis cómodo a otros
programadores, recurren al uso de código ofuscado.
22. CONCEPTO
C++ es un lenguaje de programación diseñado a mediados
de los años 1980 por Bjarne Stroustrup. La intención de su
creación fue el extender al exitoso lenguaje de programación
C con mecanismos que permitan la manipulación de objetos.
En ese sentido, desde el punto de vista de los lenguajes
orientados a objetos, el C++ es un lenguaje híbrido.
23. TIPOS DE DATOS
C++ tiene los siguientes tipos fundamentales:
Caracteres: char (también es un entero), wchar_t
Enteros: short, int, long, long long
Números en coma flotante: float, double, long double
Booleanos: bool
Vacío: void
El modificador unsigned se puede aplicar a enteros para obtener números sin signo
(por omisión los enteros contienen signo), con lo que se consigue un rango mayor de
números naturales.
24. TAMAÑOS ASOCIADOS
Otras arquitecturas pueden requerir distintos tamaños de tipos de datos primitivos. C++
no dice nada acerca de cuál es el número de bits en un byte, ni del tamaño de estos
tipos; más bien, ofrece solamente las siguientes "garantías de tipos":
De acuerdo al estándar C99, un tipo char debe ocupar exactamente un byte compuesto
de un mínimo de 8 bits independientemente de la arquitectura de la máquina.
El tamaño reconocido de char es de 1. Es decir, sizeof(char) siempre devuelve 1.
Un tipo short tiene al menos el mismo tamaño que un tipo char.
Un tipo long tiene al menos el doble tamaño en bytes que un tipo short.
Un tipo int tiene un tamaño entre el de short y el de long, ambos inclusive,
preferentemente el tamaño de un apuntador de memoria de la máquina.
Un tipo unsigned tiene el mismo tamaño que su versión signed.
25. LA PALABRA RESERVADA "VOID"
La palabra reservada void define en C++ el
concepto de no existencia o no atribución de un
tipo en una variable o declaración. Como tal, puede
ser usada para destacar que una función no recibe
parámetros, como en:
int funcion (void);
26. PRINCIPIOS
La primera es la forma por omisión de un programa que no recibe parámetros ni
argumentos. La segunda forma tiene dos parámetros: argc, un número que describe el
número de argumentos del programa (incluyendo el nombre del programa mismo), y argv,
un puntero a un array de punteros, de argc elementos, donde el elemento argv[i] representa
el i-ésimo argumento entregado al programa. En el tercer caso se añade la posibilidad de
poder acceder a las variables de entorno de ejecución de la misma forma que se accede a
los argumentos del programa, pero reflejados sobre la variable env.
El tipo de retorno de main es int. Al finalizar la función main, debe incluirse el valor de
retorno (por ejemplo, return 0;, aunque el estándar prevé solamente dos posibles valores
de retorno: EXIT_SUCCESS y EXIT_ERROR, definidas en el archivo cstddef), o salir por
medio de la función exit. Alternativamente puede dejarse en blanco, en cuyo caso el
compilador es responsable de agregar la salida adecuada.
27. EL CONCEPTO DE CLASE
Los objetos en C++ son abstraídos mediante una clase. Según el paradigma de la
programación orientada a objetos un objeto consta de:
Identidad, que lo diferencía de otros objetos (Nombre que llevara la clase a la que
pertenece dicho objeto).
Métodos o funciones miembro
Atributos o variables miembro
Un ejemplo de clase que podemos tomar es la clase perro. Cada perro comparte unas
características (atributos). Su número de patas, el color de su pelaje o su tamaño son
algunos de sus atributos. Las funciones que lo hagan ladrar, cambiar su comportamiento...
esas son las funciones de la clase.
28. HERENCIA SIMPLE
La herencia en C++ es un mecanismo de abstracción creado para poder facilitar y
mejorar el diseño de las clases de un programa. Con ella se pueden crear nuevas
clases a partir de clases ya hechas, siempre y cuando tengan un tipo de relación
especial.
En la herencia, las clases derivadas "heredan" los datos y las funciones miembro de
las clases base, pudiendo las clases derivadas redefinir estos comportamientos
(polimorfismo) y añadir comportamientos nuevos propios de las clases derivadas. Para
no romper el principio de encapsulamiento (ocultar datos cuyo conocimiento no es
necesario para el uso de las clases), se proporciona un nuevo modo de visibilidad de
los datos/funciones: "protected". Cualquier cosa que tenga visibilidad protected se
comportará como pública en la clase Base y en las que componen la jerarquía de
herencia, y como privada en las clases que NO sean de la jerarquía de la herencia.
29. SOBRECARGA DE OPERADORES
Dado que estos operadores son definidos para un tipo de datos definido por el usuario, éste es
libre de asignarles cualquiera semántica que desee. Sin embargo, se considera de primera
importancia que las semánticas sean tan parecidas al comportamiento natural de los operadores
como para que el uso de los operadores sobrecargados sea intuitivo. Por ejemplo, el uso del
operador unario - debiera cambiar el "signo" de un "valor".
Los operadores sobrecargados no dejan de ser funciones, por lo que pueden devolver un valor,
si este valor es del tipo de datos con el que trabaja el operador, permite el encadenamiento de
sentencias. Por ejemplo, si tenemos 3 variables A,B y C de un tipo T y sobrecargamos el
operador = para que trabaje con el tipo de datos T, hay dos opciones: si el operador no devuelve
nada una sentencia como "A=B=C;" (sin las comillas) daría error, pero si se devuelve un tipo de
datos T al implementar el operador, permitiría concatenar cuantos elementos se quisieran,
permitiendo algo como "A=B=C=D=...;"