que es un Algoritmo


jueves, 15 de octubre de 2015

Estandares de calidad

ESTÁNDARES DE CALIDAD

A la hora de desarrollar un software se requiere que los analistas, diseñadores y desarrolladores apliquen características y elementos de calidad para que se logren productos a las necesidades del usuario, estas necesidades se comienzan a encontrar un camino de solución a través de la aplicación de elementos de calidad, así se presentan dos de los más valiosos como son la eficiencia y la eficacia

Por tal motivo la ingeniería del software pretende utilizar los recursos computacionales de tal manera que se produzcan soluciones eficientes y eficaces a los problemas informáticos, el éxito de un proyecto involucra elementos como la planeación, la administración y la utilización de metodologías de desarrollo de software.

A través del uso de una metodología se busca lograr el acople de los participantes y la garantía de una determinada calidad. Debe notarse que las metodologías de desarrollo de software sólo constituyen uno de los mecanismos que actualmente se utilizan para alcanzar software de calidad; no debemos dejar de lado aspectos de la dirección de proyectos que también buscan calidad en el proceso de desarrollo y en el producto final.





ASPECTOS BÁSICOS DE CALIDAD DE SOFTWARE

SEGÚN:

ROBERT DUNN presenta la calidad en el software tomando dos puntos de vista: la calidad en el proceso de desarrollo y la calidad en el producto final, estos dos grupos principales los agrupa en los siguiente aspectos de calidad: confiabilidad, utilizabilidad, mantenibilidad, y adaptabilidad.


ROGER PRESSMAN describe similares factores de calidad agrupados en tres grupos: calidad en operación, calidad en revisión y calidad en transición.


OPINIÓN PERSONAL “ESTÁNDARES DE CALIDAD”


Respecto al desarrollo del software considero que como principal estándares de la calidad basado a las características dadas por los autores ya nombrado, sería un software de fácil distribución, portabilidad, confiable y eficaz, ya que la confianza que el usuario pueda observar a la hora de usarlos, la facilidad de uso, rapidez y de agradable interfaces suelen ser uno de los factores importantes que puede tener dicho programa. También hay que nombrar la ausencia de errores que presente un programa y una buena documentación que le permita el usuario interpretar de manera fácil y rápida a la hora de entender las funciones que pueda ofrecer determinado software.

Todo esto puede ser llevado acabo de una buena planificación, compromiso para así alcanzar los objetivos que se adapte a las necesidades del usuario, cabe destacar que dicho proyecto logrará el éxito mientras le sea aplicada su respectiva metodología a determinado programa.

FORMAS DE TRAZABILIZAR UN ALGORITMO

La traza de algoritmo se puede definir como la ejecución manual de forma secuencial de las sentencias que lo componen. Así, la traza del siguiente algoritmo es el valor que van adoptando las variables a medida que se va ejecutando un programa.






TÉCNICAS DE ESCRITURA Y PRUEBAS DE ALGORITMOS Y PROGRAMAS


Técnicas y Escrituras:


Para las representaciones de un algoritmo, antes de ser convertido a lenguaje de programación, se utilizan algunos métodos de representación escrito, grafico o matemática. El lenguaje natural puede no ser suficientemente preciso, permitiendo las ambigüedades, obteniendo una descripción del todo satisfactoria, las formulas propias del lenguaje matemático, son un buen sistema de representación pero no solo suelen ser fáciles de convertir en el programa. Los métodos más conocidos son:

DIAGRAMA LIBRE (DIAGRAMA DE FLUJO): Es quizás la forma de representación más antigua. Algunos autores suelen llamarlos también como diagramas de lógica o flujo gramas.

DIAGRAMAS NASSI-SCHNEIDERMAN O CHAPIN: También conocido como diagramas de chapin, corresponde a uno de los tipos de diagramación estructurada. Las acciones se describen en rectángulos o cajas sucesivas. Se pueden escribir diferente acciones de caja.

PSEUDOCÓDIGO: Es la técnica que permite expresar la solución de un problema mediante un algoritmo escrito en palabras normales de un idioma (por ejemplo, el español), utilizando palabras imperativas. Es común encontrar en pseudocódigo palabras como: inicie, lea, imprima, sume, divida, calcule, finalice. No hay un léxico obligado para el pseudocódigo, pero con el uso frecuente se han establecido algunos estándares.

DATO

Puede significar un número, una letra, un signo ortográfico o cualquier símbolo que represente una cantidad, una medida, una palabra o una descripción. La importancia de los datos está en su capacidad de asociarse dentro de un contexto para convertirse en información. Es decir, por si mismos los datos no tienen capacidad de comunicar un significado y por tanto no pueden afectar el comportamiento de quien los recibe.

Tipos de Datos

Como se describió anteriormente, un dato es un campo que puede convertirse en información.
Existen datos simples (sin estructura) y compuestos (estructurados).
Los datos simples son los siguientes:
· Numéricos (Reales, Enteros)
· Lógicos
· Carácter (Char, String)
Los tipos de datos simples son:







Tipo de datos
Características
Ejemplos

Numéricos Enteros
Los números enteros son los números naturales
1
positivos y negativos que conocemos.
2

25

146

-456

Numéricos Reales
Los números reales, son los números que tienen parte decimal.
0.56


1.00


25.13


148.45


-456.23

Lógicos o boléanos
Son aquellos datos cuyos únicos valores sólo pueden ser: Verdadero (V) o Falso (F), puede
Nacionalidad = “Venezolano” (S/N)?

encontrarse, Verdadero (True) o Falso (False). Se utiliza para representar las opciones (si/no) a determinadas condiciones.

Carácter o Char
Su valor lo comprenden todos los caracteres alfabéticos, mayúsculas y minúsculas (A – Z), numéricos (0 – 9) y símbolos especiales (#,@,%,&).

“Abril”

Carácter String o cadena
Su valor está representado por un conjunto de caracteres.
“Reporte Anual de Fa-llas Técnicas”

“1º de mayo, Día del

Trabajador”

Operadores
Significado
Ejemplo
Interpretación  El

+
Sumar
Si A =10 y B = 13
Resultado es: 23

-
Restar
A - B
- 3

*
Multiplicar
A * B
130

**
Exponenciación
A ** B
100.000.000.000.000

/
División
A / B
0,76

A los operadores aritméticos podemos darles características de autoincremento (++) y autodecremento (--). El operador de incremento o decremento puede ir delante o detrás de la variable, teniendo diferente significado. Si el operador ++ se coloca después de la variable se denomina postincremento, haciendo que primero se tome el valor y después se incremente la variable.
Operadores Relacionales

Operadores
Significado
Ejemplo
Interpretación

>
Mayor que
Si A =10 y B = 13 A > B
El Resultado es: FALSO

<
Menor que
A < B
VERDADERO

>=
Mayor igual
A> = B
FALSO

<=
Menor igual
A <= B
VERDADERO

=
Igual
A = B
FALSO

<>
Diferente
A <> B
VERDADERO

Información

Es la representación racional de los datos, es decir, es la interconexión de los símbolos de manera racional y ordenada que conectados como una cadena, se convierte en información, que tiene un significado para quien solicita o los procesa y que están a la disposición, otro seria, como un conjunto de datos significativos y pertinentes que describen sucesos o entidades.

Diferencia entre Datos e Información

En resumen, como diferencia se puede decir que Dato es la representación simbólica sin un significado preciso un símbolo sin tratar, mientras que la información es una cadena de símbolos interconectados que representan un mensaje con un contenido determinado emitido por una persona hacia otra, o de un centro de datos hacia el solicitante, la información es, entonces, conocimiento basado en los datos a los cuales, mediante un procesamiento, se les ha dado significado, propósito y utilidad.
Dato e información son dos términos que suelen confundirse. Se consideran datos a toda entrada de información a una computadora. Estos datos pueden ser administrativos, científicos, comerciales, personales, médicos, industriales, direcciones, etc. son elementos primitivos, de los cuales a través del procesamiento se obtiene la información.

Identificadores

Son los nombres que reciben las variables y algunas constantes, suelen constar de varios caracteres alfanuméricos, de los cuales el primero suele ser una letra.

Constante

Es un dato que permanece con un valor, sin cambios, es decir constante, a lo largo del desarrollo del algoritmo o a lo largo de la ejecución del programa.


Se utiliza cuando necesitamos que el valor de determinada variable se mantenga durante la ejecución del programa o hasta tanto se requiera su cambio.

Variable

Es un dato cuyo valor puede variar a lo largo del desarrollo del algoritmo o en el transcurso de la ejecución del programa.

Una variable descrita o declarada de un tipo determinado, sólo podrá contener, valores de ese tipo.
Una variable declarada numérica entera, no podrá contener números reales.

Se utiliza cuando el dato que contiene sufrirá cambios o variará en la medida que cambien los valores que maneje.

Expresiones Lógicas

Las expresiones lógicas se utilizan en los programas cuando se requiere conocer o evaluar si los valores de variables o constantes determinadas cumplen con ciertas condiciones.

De cumplirse o no, permiten un conjunto de instrucciones que pueden o no ejecutarse. Una expresión lógica puede ser verdadera o falsa.

Ejemplo de expresión lógica.

Parte del Algoritmo diseñado para preseleccionar a posibles candidatos presidenciales, tomando como requisito de selección sólo aquellos que, simultáneamente, sean venezolanos y mayores de treinta años.

Una expresión lógica “Y” (AND) es verdadera, si y sólo sí, se cumplen las dos condiciones simples.
Lectura de Datos
Si Nacionalidad = “V” y Edad > 30 Entonces
Status = “Aspirante”
Grabar en archivo de Aspirantes
Fin Si

Ejemplos de expresiones simples
Nombre de la Expresión Valor asignado Explicación o análisis
A = 6 A la variable A se le asigna el valor de 6
B = “DEFINITIVO” A la variable B se le asigna por valor
“DEFINITIVO”
FECHA = dd/mm/aa A la variable FECHA se le asigna una fecha dada.
DÓLAR =2120 A la constante DÓLAR se le asigna el valor de
2120
PAIS =”VENEZUELA” A la constante PAIS se le asigna por valor
“VENEZUELA”

Ejemplos de expresiones compuestas
Nombre de la Expresión Valor asignado Explicación o análisis
A = 6 * 2 A la variable A se le asigna el valor 12,
que resulta de multiplicar 6 por 2.
C = A + B A la variable C se le asigna el valor de
sumar A + B
EDAD = AÑOACTUAL - AÑONAC La variable EDAD obtendrá el resultado
de restarle a la constante AÑOACTUAL
el valor de la variable AÑONAC
SUELDO = DIASTRAB * SDIARIO La variable SUELDO tomará el valor de
multiplicar los días trabajados contenidos en la
variable DIASTRAB por el valor de
salario diario contenido en SDIARIO.

IDENTIFICACIÓN DEL PROBLEMA

Para resolver un problema es necesario el entendimiento completo de que exactamente consiste el problema y que tipo de solución se necesita. Es necesario comprender la naturaleza del problema ya que así se puede llegar a establecer un problema bien definido para obtener una solución satisfactoria.

Es de suma importancia analizar el problema, diagnosticar e identificar requerimientos y necesidades para así determinar las 3 etapas en la construcción de la solución; la entrada, el proceso y la salida.

Para esto, se requiere una metodología que defina cada uno de los pasos que nos llevara a obtener la solución, visto de otro modo, generar un plan de acción eficaz para alcanzar la meta.

Es necesario establecer especificaciones de entrada proceso y salida, en la primera etapa encontramos información de entrada o inicial, que servirá para el análisis del problema.

La segunda etapa o fase es analizar el problema, en esta etapa es conveniente dividir o segregar las tareas necesarias e identificadas que ayudaran a la solución del problema dado. De esta forma se simplificaran y serán más comprensibles para su desarrollo, es recomendable siempre ir de las tareas o actividades más simples a las más complejas. En esta fase se transforma la información de entrada recibida.

La tercera etapa en la programación de algoritmos, consiste en la implantación y puesta en desarrollo del mismo, aquí se obtiene la información y resultado final resultante de las etapas anteriores.

Es necesario seguir una serie de pasos sistemáticos para que el desarrollo posea una buena un óptimo y eficaz resultado. Estos pasos son brindados por los modelos de ciclo de vida, los cuales están constituidos por diferentes etapas:



Modelo de ciclo de vida

Para lograr esto, existen modelos de análisis estructurado que se puede detallar en el siguiente cuadro:




Modelo del análisis estructurado moderno.

La calidad del diseño debe ser una meta para el diseñador. El diseño estructurado ofrece guías para apoyar al diseñador a determinar módulos, y sus interconexiones, que mejor realizarán los requerimientos especificados por el analista. Las dos reglas más importantes son las referentes al acoplamiento y la cohesión.

Según Taylor S. Diseño es el proceso de aplicar distintas técnicas y principios con el propósito de definir un dispositivo, proceso, o sistema, con los suficientes detalles como para permitir su realización física.

Se pueden considerar los objetivos del diseño estructurado de la siguiente forma:

Eficiencia
Mantenibilidad
Modificabilidad
Flexibilidad
Generalidad
Utilidad

Pudiéramos decir que el diseño es la capacidad de producir y aplicar un modelo que sirva como base para su implementación, todo esto bajo metodologías y estándares que gracias a estos se podrá desarrollar dicho modelo bajo criterios para solucionar un problema.

Los métodos de desarrollo de software pueden dividirse en dos grupos: función/dato y orientados a objetos

Orientado a función o dato

Son aquellos métodos en que las funciones o los datos son vistos como entidades independientes, tienen a ser sistemas difíciles de mantener y dependen de la estructura de los datos que usualmente producen programas difíciles de leer o modificar, pero tienen fuerte transformación de datos y usualmente son dependientes los programas de la estructura de los datos.

Orientado a objetos

Se consideran métodos orientados a objetos en donde los cuales, datos y funciones están relacionados, la abstracción de datos, son mapeados a entidades del mundo real, tienden a ser más fáciles de mantener y leer gracias a la construcción de subclases.

Desarrollo de la solución

Una vez que se obtenga la solución tomando en cuenta todas las posibles alternativas se escribe de forma clara y precisa para que pueda ser entendida y revisada. Consiste en definir cada uno de los pasos que nos permitirá llegar a la solución, en pocas palabras, explica claramente cuáles son las acciones para llegar a la meta. Esta serie de pasos se conocen como algoritmos.

Podemos hablar del modelo esencial como la aplicación de la metodología de Análisis Estructurado Moderno de Yourdon. La idea fundamental con la que el modelo esencial es concebido es la de Tecnología Perfecta en la cual no hay restricciones de cantidad de memoria, tamaño del disco o velocidad del procesador. El modelo esencial del sistema indica lo que el sistema debe hacer para satisfacer los requisitos del usuario y debe mencionar el mínimo posible de como el sistema se llevará a cabo.

Dentro de este modelo se encuentra El Modelo del Ambiente: Declaración de los objetivos. Creación de un Diagrama de Contexto y de una Lista de Eventos, describe los estímulos que recibe el sistema y las respuestas generadas por los estímulos. Definición del Diccionario de Datos inicial. Tabla de Estímulo/Respuesta.

También se consigue dentro del modelo esencial al Modelo de Comportamiento: Creación de un diagrama de flujo de datos o DFD, y un ERD por cada uno de los eventos de la Lista de Eventos. Los DFDs por eventos se unen en un único DFD (el Modelo Funcional) y los ERDs por eventos se unen en un único ERD (el Modelo de Datos). Se acostumbra, también, modelar el comportamiento externo del sistema con DTE, árboles de pantallas o menús, etc. La creación simultánea del modelo de datos, modelo funcional y modelo de interfaz o comportamiento externo, ayuda en la validación y completitud del modelo esencial (descubriendo, por ejemplo, eventos no considerados).

Luego de establecer el modelo esencial, se debe considerar las imperfecciones de la tecnología y determinar: la cantidad de procesadores necesarios, las cualidades de estos procesadores, el tamaño de disco necesario de acuerdo al volumen de la información a ser almacenada, etc. Luego se diseña la solución sobre la base de esas restricciones tecnológicas, esto es el modelo de implementación, que se fundamenta en 3 modelos base, el modelo del usuario, modelo de distribución y modelo de programa.

IDENTIFICACIÓN DE LOS DATOS NECESARIOS (ENTRADAS) Y LOS DATOS A OBTENER (SALIDAS).

La entrada, se considera como todos los datos que hay que ingresar para la resolución del problema. Para diseñar un algoritmo o programa se debe comenzar por identificar las tareas más importantes para resolver el problema y disponerlas en el orden en el que han de ser ejecutadas. Los pasos en esta primera descripción pueden requerir una revisión adicional antes de que podamos obtener un algoritmo claro, preciso y completo.

Este método de diseño de algoritmos en etapas, yendo de los conceptos generales a los de detalle, se conoce como método descendente (top-down).

En un algoritmo se deben de considerar tres partes:

Entrada: Información dada al algoritmo.
Proceso: Operaciones o cálculos necesarios para encontrar la solución del problema.
Salida: Respuestas dadas por el algoritmo o resultados finales de los procesos realizados.
Como ejemplo supongamos que desea desarrollar un algoritmo lo primero que debemos hacer es plantearnos las siguientes preguntas:

Especificaciones de entrada
¿Que datos son de entrada?
¿Cuántos datos se introducirán?
¿Cuántos son datos de entrada válidos?

Entendido el problema (que se desea obtener del computador), para resolverlo es preciso analizar:
*Los datos o resultados que se esperan.
*Los datos de entrada que nos suministran.
*El proceso al que se requiere someter esos datos a fin de obtener los resultados esperados.
*Áreas de trabajo, fórmulas y otros recursos necesarios.

Una recomendación muy práctica es el que nos pongamos en el lugar del computador, y analizar que es necesario que me ordenen y en que secuencia, para poder producir los resultados esperados. También da buenos resultados hacer similitudes con la labor de un empleado que hace el mismo trabajo que deseamos programarle al computador.

Especificaciones de salida
¿Cuáles son los datos de salida?
¿Cuántos datos de salida se producirán?
¿Qué formato y precisión tendrán los resultados?

Lista de Eventos

La lista de eventos es una lista narrativa de los estímulos que ocurren en el mundo externo, y al que el sistema debe responder. En pocas palabras al saber que datos de entrada obtendremos podemos hacer una correlación de estimulo respuesta en esta tabla.

La lista de eventos es una simple lista textual de eventos del ambiente a los cuales el sistema debe responder. Al construirla asegúrese de distinguir entre un evento y un flujo relacionado a un evento.

Gracias a esto se pueden establecer diferentes patrones de acción dependiendo de la entrada, se pueden destacar:

Evento de flujo
Se asocia a un flujo de datos; es decir, el sistema percibe la ocurrencia del evento cuando un grupo de datos llega.
Eventos Temporales
Se descargan en un cierto momento, los eventos temporales no se descargan ni son representados por cualquier flujo de datos de entrada.
Eventos de control
Son estímulos externos que ocurren en momentos imprevistos.
Eventos de múltiple respuesta
Hay múltiples transacciones que son activadas por la condición temporal . Dichas transacciones son activadas por un Evento Temporal que precisa de múltiples respuestas.

Diagrama de Contexto

En el diagrama de contexto una única burbuja (proceso) representa el sistema. Los Agentes Externos (o Terminadores) por definición no son parte del sistema y están representados por un cuadro rectangular y se comunican directamente con el sistema a través de los Flujos de Datos o de Control.

Los terminadores representan entidades externas con las cuales el sistema se comunica. Comúnmente un terminador es una persona o un grupo, por ejemplo una organización externa o una agencia gubernamental, o un grupo o departamento que esté dentro de la misma compañía u organización, pero fuera del control del sistema que se está modelando. En algunos casos, el terminador puede ser otro sistema.

Como se está interesado en el desarrollo del modelo esencial del sistema, es importante que se distinga entre fuentes y manipuladores cuando se dibuja a los agentes externos en el diagrama de contexto. Un manipulador es un mecanismo, dispositivo, o el medio físico para transportar datos dentro o fuera del sistema.

Los flujos mostrados en el diagrama de contexto modelan los datos que llegan y dejan el sistema. Estos serán incluidos en este diagrama si son necesarios para determinar un evento del ambiente al que el sistema debe contestar, o si son necesarios (como datos) para que se produzca una respuesta. También pueden mostrarse los flujos de datos en el diagrama del contexto cuando los datos son producidos por el sistema para responder a un evento.

Hay también una clase de flujos que no representan entrada o salida de datos del sistema sino que establecen la necesidad de ejecutar una función dada. Estos flujos se denominan flujos de control y son mostrados con una línea punteada.




Diagrama de Contexto
Se puede comenzar con la lista de eventos o con el diagrama de contexto. Realmente, esto no importa, a medida que los componentes del modelo ambiental son generados se debe confirmar que haya consistencia entre ellos.

DESCRIPCIÓN DE LOS PASOS PARA LLEGAR A LA SOLUCIÓN (PROCESOS).

La siguiente fase que debe enfrentar el analista tiene que ver con el análisis de las necesidades del sistema. De nueva cuenta, herramientas y técnicas especiales auxilian al analista en la determinación de los requerimientos. Una de estas herramientas es el uso de diagramas de flujo de datos para graficar las entradas, los procesos y las salidas de las funciones del negocio en una forma gráfica estructurada. A partir de los diagramas de flujo de datos se desarrolla un diccionario de datos que enlista todos los datos utilizados en el sistema, así como sus respectivas especificaciones.

Durante esta fase el analista de sistemas analiza también las decisiones estructuradas que se hayan tomado. Las decisiones estructuradas son aquellas en las cuales se pueden determinar las condiciones, las alternativas de condición, las acciones y las reglas de acción.

Existen tres métodos principales para el análisis de decisiones estructuradas: español estructurado, tablas y árboles de decisión.

En este punto del ciclo de vida del desarrollo de sistemas, el analista prepara una propuesta de sistemas que sintetiza sus hallazgos, proporciona un análisis de costo/beneficio de las alternativas y ofrece, en su caso, recomendaciones sobre lo que se debe hacer. Si la administración de la empresa considera factible alguna de las recomendaciones, el analista sigue adelante. Cada problema de sistemas es único, y nunca existe sólo una solución correcta. La manera de formular una recomendación o solución depende de las cualidades y la preparación profesional de cada analista.

Creación de diagrama de flujo de datos


Para la creación del DFD básicamente existen dos enfoques: Partición en Eventos McMenam, Yourdon y Enfoque de Análisis Estructurado Clásico DeMarco, Gane.

En el enfoque de partición por eventos para la construcción del DFD preliminar, se agrega una burbuja por cada evento definido en la lista de eventos. Por cada evento, se especifican los flujos (control y datos), agentes externos y depósitos de datos considerado por McMenam como partición de eventos y DeMarco lo llamo enfoque de análisis estructurado.




En el enfoque de análisis estructurado clásico para la construcción del DFD de primer nivel (o nivel 0), el analista (o el grupo de analistas) estudia el diagrama de contexto y crea un DFD de nivel 0 sin una estrategia que lo asista. Sobre la base de su conocimiento del sistema, o del tipo de aplicación, divide en "Burbujas Importantes" (por ejemplo, que representen subsistemas).

El DFD preliminar puede ser representado como un único diseño o por un conjunto de Diagramas separados. Para la construcción del diagrama de flujo de datos preliminar, con un enfoque de partición por eventos, la metodología de análisis estructurado moderna propone la siguientes cuatro etapas:

Se diseña una burbuja (proceso) para cada evento de la Lista de Eventos.
La burbuja recibe un nombre de acuerdo con la respuesta que el sistema debe dar al evento asociado.
Se diseñan los flujos de entrada y salida apropiados de modo que cada burbuja sea capaz de emitir una respuesta necesaria, y se diseñan los depósitos para la comunicación entre las burbujas.
El DFD preliminar resultante es verificado en relación con el Diagrama de Contexto, la Lista de Eventos y el Modelo de Datos para confirmar si esta completo y consistente.

El DFD preliminar se compone de un solo nivel con una burbuja para cada uno de los eventos. Ahora, precisamos subdividirlo en niveles superiores (abstracción). Esto quiere decir que deseamos agrupar los procesos (o burbujas) relacionados en funciones de más alto nivel de abstracción, cada uno representando una burbuja en el diagrama de más alto nivel.






Existen tres reglas que nos ayudan en el proceso de abstracción:

Cada agrupamiento de procesos debe involucrar respuestas estrictamente relacionadas (véase que cada burbuja en el DFD preliminar tiene un nombre relativo a la respuesta de un evento de la lista de eventos). Esto habitualmente significa que los procesos trabajan con datos estrechamente relacionados.
Agrupar procesos que trabajen con los mismos almacenamientos. Así, si usted encontrara un grupo de procesos con flujos para el mismo depósito, sin que otros procesos (que no son del grupo) se refieran a este depósito, entonces puede crear una burbuja, en el nivel más alto, que oculte el depósito.
Se debe notar que la persona que examinara sus diagramas de flujo de datos, será un usuario o un analista de sistemas o un diseñador, que quiere ver todo de una sola vez. Un buen criterio de agregación o agrupamiento no tiene más de siete más o menos dos (7 ± 2) fragmentos de información (considerando como fragmentos de información a los Procesos y los Depósitos de Datos).

El diagrama de flujo de datos describe cómo los datos fluyen a través del sistema, pero no proveen información acerca de estructuras de control o de secuencias de ejecución. La única secuencia que puede ser reconocida en un DFD es la determinada por la necesidad de información. Podemos considerar al diagrama de flujo de datos como un lenguaje gráfico, útil para describir la funcionalidad de un sistema, en un cierto grado de detalle.

El Diccionario de Datos

El diccionario de datos es una herramienta fundamental en el modelamiento de sistemas. Las herramientas gráficas como los diagramas de flujo de datos, los diagramas de entidad-relación, los diagramas de transición de estados, etc., son de mucha importancia para el modelamiento estructural de los sistemas (estructuras funcionales, estructuras de información, estructuras de comportamiento, etc.) y permiten una adecuada interpretación general de las ideas modeladas pero, no son completos. Para contar con una especificación completa es preciso tener una descripción textual de los detalles que no pueden ser especificados en los diagramas.

El diccionario de datos es una lista organizada de todos los elementos de datos pertinentes al sistema (todos los nombres de las componentes de los diagramas), con definiciones precisas y rigurosas para que el usuario y el analista de sistemas puedan conocer todas las entradas, salidas, componentes de depósitos y cálculos intermedios.




Diagrama de flujo de datos
Un proceso representa una componente funcional del sistema. Un proceso transforma, distribuye o genera datos. Por ejemplo, los procesos pueden realizar operaciones aritméticas o lógicas sobre los datos que recibe para producir algún resultado. Respecto a esto, un DFD describe únicamente los nombres y los flujos de entrada y salida, sin aportar ninguna otra información sobre las actividades internas de los procesos. Para describir con mayor detalle, y especificar la funcionalidad por la que es responsable el proceso, se utilizan técnicas de especificación de procesos.


Un depósito de datos es incluido en un DFD para modelar la necesidad de almacenar datos, se utiliza para modelar un conjunto de paquetes de datos en reposo. Un depósito de datos puede representar un archivo en el disco de la computadora o un área de memoria global a los procesos. En la literatura es posible encontrar que este mismo concepto puede recibir otros nombres como por ejemplo: Archivo, Almacenamiento de Datos o Repositorio.




Diagrama de Almacenamiento de datos

Refinamiento y Descomposición de procesos

Un DFD es una herramienta comúnmente utilizada para análisis de arriba hasta abajo, es decir que permite realizar un análisis que va de lo general a lo particular del problema. Los DFDs son utilizados para modelar tanto vistas detalladas como de alto nivel de un sistema o programa por eso es útil el refinamiento de procesos en un DFD. La funcionalidad de un proceso puede llegar a ser tan compleja que para comprenderlo sea necesario detallar sus actividades de manera separada.

Los procesos del DFD pueden ser refinados en otra red de procesos conectados por flujos de datos, constituyendo un DFD de menor nivel de abstracción. Esta forma de especificar un proceso, por medio de otro DFD completo se denomina refinamiento, descomposición o explosión. El problema es definir cuál es el criterio más adecuado para hacer esto y, determinar hasta dónde bajar en la jerarquía de DFDs, es decir cuando parar de realizar explosiones.

na de las formas más sistemáticas de realizar el refinamiento de un proceso es el que propone Mike Adler, con el Álgebra de Descomposición de Procesos. Se aplica un álgebra, definida por un conjunto de operadores, a cada uno de los procesos del DFD por separado. En los procesos que generan dudas con relación a su funcionalidad sirve como una guía para su descomposición, mientras que para los procesos que generan muy pocas dudas con relación a su funcionalidad, puede ser utilizado como un método de validación. Los operadores son aplicados para producir una expresión mínima.

Al desarrollar un sistema, cualquiera fuere su tamaño, es necesario contar en primer término, con una narrativa textual y una declaración concisa de los objetivos del sistema (la funcionalidad que se requiere, es decir lo que se espera que el sistema haga), por supuesto validada con el usuario del sistema.

DESCRIPCIÓN DE LAS OPERACIONES A UTILIZAR (CÁLCULOS)

Dentro de este método de análisis y planteamiento del problema, se llega a obtener una estructura clara y eficaz por medio de una serie de pasos para alcanzar la solución del problema, esto también cuenta con operaciones dentro de los algoritmos que podemos llamar cálculos.

Estos cálculos son determinados durante el proceso de planificación y estructuración del sistema, de manera simple en DFD de nivel bajo y detallada en creación en sí de la escritura y codificación del sistema que contempla la meta planteada.

Estos cálculos están íntimamente conectados con el tipo de dato de entrada que se espera recibir y la salida que nos interesa obtener, todo previamente planificado según el caso, se formulan operaciones precisas ya sean lógicas o aritméticas representadas como instrucciones a seguir.

tipos de datos y operadores


Tipos de datos y Operadores en programación.

Todo sistema de computación es alimentado con datos. La representación de los datos incide en la elaboración de los algoritmos. El sistema de identificación de los datos se denomina “estructura de datos”, y depende de las características de estos.

-Los datos son los siguientes;

a) Datos numéricos:
· Enteros.
· Reales.
· Reales decimales.
· Reales exponenciales.
b) Datos alfanuméricos:
· De carácter.
· De cadena.
c) Datos lógicos:
· Verdadero [True]
· Falso [False]
-Tipos de datos: numéricos

Son aquellos que se utilizan para realizar operaciones aritméticas.

Enteros; corresponden a números “completos”, o sea que no tienen parte decimal, pueden ser negativos, positivos o cero. Ejemplo: La edad de una persona (39), el total de estudiantes en un grupo (36).

Reales; son aquellos números que poseen punto decimal. Pueden ser negativos, positivos o cero.
Reales decimales; son los que constan de una parte entera y una decimal (en algunos casos se puede omitir la parte entera o la decimal). Ejemplo: La nota de un estudiante (4.7), el porcentaje de algún impuesto (0.16).

Reales exponenciales (de punto flotante); son aquellos números que se expresan en función de potencias de 10; esta expresión es conocida como notación científica. Ejemplo: -2.85E03; 0.735E-4; 0.58E-1

-Tipos de datos: alfanuméricos
Corresponden al conjunto de caracteres alfabéticos, numéricos, y/o especiales; con ellos no se efectúan operaciones matemáticas.

Carácter; cuándo se hace referencia a un solo carácter, y debe encerrarse entre apostrofes (‘ ‘). Ej: Sexo de una persona (‘M’ o ‘F’), estado civil (‘S’, ‘C’, ‘V’).

Cadena; Cuándo se hace referencia a más de un carácter, siempre debe encerrarse entre comillas (“ “). Ej: código de un estudiante (“2041220”), nombre de una persona (“Víctor Hugo Torres”), dirección donde reside una persona (“Calle 100 # 50 - 20), número telefónico (“3002125820”).

-Tipos de datos: lógicos
Son aquellos datos que solo pueden tomar dos valores:
1. Valor verdadero – true
2. Valor falso – false

*Tipos de datos que se manejan en pseudocódigo:

· Carácter: Cuando solo queremos un solo carácter de un dato y se encierra entre apostrofes (‘ ‘).
· Boolean: Cuando requerimos de una respuesta TRUE o FALSE (datos lógicos).
· Cadena: Datos alfanuméricos que no se calculan como el nombre, teléfono, etc..
· Real: Cuando vamos a utilizar números con punto decimal.
· Entero: Números positivos o negativos sin punto decimal.
Operadores

Un operador es un símbolo que se utiliza para manipular datos.
Los operadores se clasifican en:
– Aritméticos.
– Relacionales.
– Lógicos.

Operadores: Aritméticos:

+ Suma
- Resta
* Multiplicación
/ División (div)
% Módulo o residuo (Mod)
^ ó ** Potencia
= Asignación

Operadores: Relacionales

> Mayor que
< Menor que
(=) == Igual a
(<>) != Diferente de
>= Mayor o igual que
<= Menor o igual que

Operadores: Lógicos

(*) && Conjunción (y)
(+) | | Disyunción (o)
(~) ! Negación (no)

Operadores



¡Operador?

Que es un operador: es un elemento de programa que se aplica a uno o varios operandos en una expresión o
instrucción. 
Los operadores que toman un operando, como el operador de incremento (++) o new, se conocen como operadores unarios. Los operadores que toman dos operandos, como los operadores aritméticos (+,-,*,/) se conocen como operadores binarios. Un operador, el operador condicional (?:), toma tres operandos y es el único operador ternario de C#.
La instrucción de C# siguiente contiene un solo operador unario y un único operando. El operador de incremento, ++, modifica el valor del operando y.
y++;


La instrucción de C# siguiente contiene dos operadores binarios, cada uno con dos operandos. El operador de asignaciones, =, tiene la variable de entero y y la expresión 2 + 3 como operandos. La propia expresión 2 + 3 está compuesta del operador de suma y dos operandos, 2 y 3.
y = 2 + 3;

Operadores, evaluación y prioridad de operadores 


Un operando puede ser una expresión válida que se compone de código de una longitud indeterminada y puede incluir un número cualquiera de subexpresiones. En una expresión que contiene varios operadores, el orden de aplicación de estos viene determinado por la prioridad de operador, la asociatividad y los paréntesis.
Cada operador tiene una prioridad definida. En una expresión que contiene varios operadores con distintos niveles de prioridad, la prioridad de los operadores determina el orden en que estos se evalúan. Por ejemplo, la instrucción siguiente asigna 3 a n1.
n1 = 11 - 2 * 4;
La multiplicación se ejecuta en primer lugar porque tiene prioridad sobre la resta.
En la tabla siguiente se separan los operadores en categorías en función del tipo de operación que realizan. Las categorías se muestran en orden de prioridad.
Operadores principales
Expresión
Descripción
x.y
x?.y
Acceso a miembros
Acceso a miembros condicional
f(x)
Invocación de método y delegado
a[x]
a?[x]
Acceso a matriz e indizador
Acceso a matriz e indizador condicional
x++
Postincremento
x--
Postdecremento
new T(...)
Creación de objetos y delegados
new T(...){...}
Creación de objetos con inicializador. Consulte Inicializadores de objeto y de colección (Guía de programación de C#).
new {...}
Inicializador de objeto anónimo. Consulte Tipos anónimos (Guía de programación de C#).
new T[...]
Creación de matriz. Consulte Matrices (Guía de programación de C#).
typeof(T)
Obtener el objeto System.Type para T
Evaluar expresión en contexto comprobado
Evaluar expresión en contexto no comprobado
default (T)
Obtener valor predeterminado de tipo T
Función anónima (método anónimo)
Operadores unarios
Expresión
Descripción
+x
Identidad
-x
Negación
!x
Negación lógica
~x
Negación bit a bit
++x
Preincremento
--x
Predecremento
(T)x
Convertir x explícitamente en tipo T
Operadores multiplicativos
Expresión
Descripción
*
Multiplicación
/
División
%
Resto
Operadores de suma
Expresión
Descripción
+ y
Suma, concatenación de cadenas, combinación de delegados
- y
Resta, eliminación de delegados
Operadores de desplazamiento
Expresión
Descripción
<< y
Desplazamiento a la izquierda
>> y
Desplazamiento a la derecha
Operadores relacionales y de tipo
Expresión
Descripción
< y
Menor que
> y
Mayor que
<= y
Menor o igual que
>= y
Mayor o igual que
is T
Devuelve true si x es T; de lo contrario, false
as T
Devuelve x escrito como T, o NULL si x no es T
Operadores de igualdad
Expresión
Descripción
== y
Igual
!= y
No igual
Operadores lógicos, condicionales y NULL
Categoría
Expresión
Descripción
AND lógico
& y
AND bit a bit entero, AND lógico booleano
XOR lógico
^ y
XOR bit a bit entero, XOR lógico booleano
OR lógico
| s
OR bit a bit entero, OR lógico booleano
AND condicional
&& y
Evalúa y solo si x es true
OR condicional
|| y
Evalúa y solo si x es false
Uso combinado de NULL
?? y
Se evalúa como y si x es NULL; de lo contrario, se evalúa como x
Condicional
?: y : z
Se evalúa como y si x es true y como z si x es false
Operadores de asignación y anónimos
Expresión
Descripción
=
Asignación
x op= y
Asignación compuesta. Admite estos operadores: +=-=*=/=%=&=|=!=<<=>>=
(T x) => y
Función anónima (expresión lambda)

Asociatividad 


Cuando dos o más operadores con la misma prioridad están presentes en una expresión, se evalúan según su asociatividad. Los operadores asociativos a la izquierda se evalúan, por orden, de izquierda a derecha. Por ejemplo, x * y / z se evalúa como (x * y) / z. Los operadores asociativos a la derecha se evalúan, por orden, de derecha a izquierda. Por ejemplo, el operador de asignación es asociativo a la derecha. De lo contrario, el código siguiente produciría un error.
int a, b, c;
c = 1;
// The following two lines are equivalent.
a = b = c;
a = (b = c);

// The following line, which forces left associativity, causes an error.
//(a = b) = c;
Otro ejemplo sería el operador ternario (?:), que es asociativo a la derecha. La mayoría de los operadores binarios son asociativos a la izquierda.
Independientemente de que los operadores de una expresión sean asociativos a la izquierda o a la derecha, los operandos de cada expresión se evalúan primero, de izquierda a derecha. En los siguientes ejemplos se muestra el orden de evaluación de los operadores y los operandos.
Instrucción
Orden de evaluación
a = b
a, b, =
a = b + c
a, b, c, +, =
a = b + c * d
a, b, c, d, *, +, =
a = b * c + d
a, b, c, *, d, +, =
a = b - c + d
a, b, c, -, d, +, =
a += b -= c
a, b, c, -=, +=

Agregar paréntesis 


Se puede cambiar el orden impuesto por la prioridad de operador y la asociatividad mediante el uso de paréntesis. Por ejemplo, 2 + 3 * 2 suele evaluarse como 8, porque los operadores de multiplicación tienen prioridad sobre los operadores de suma. Sin embargo, si se escribe la expresión como (2 + 3) * 2, la suma se evalúa antes que la multiplicación y el resultado es 10. En los siguientes ejemplos se muestra el orden de evaluación en las expresiones entre paréntesis. Como en ejemplos anteriores, los operandos se evalúan antes de aplicarse el operador.
Instrucción
Orden de evaluación
a = (b + c) * d
a, b, c, +, d, *, =
a = b - (c + d)
a, b, c, d, +, -, =
a = (b + c) * (d - e)
a, b, c, +, d, e, -, *, =

Sobrecarga de operadores 


Se puede cambiar el comportamiento de los operadores para las clases y structs personalizados. Este proceso se conoce comosobrecarga de operadores. Para obtener más información, vea Operadores sobrecargables (Guía de programación de C#).