10 ene 2016

Fundamentos de la Programación en C++

Fundamentos de la Programación en C++


Elementos Básicos

char: ocupa un byte en memoria, se suele utilizar para almacenar caracteres, pues el ASCII-E usa exactamente 8 bits para representar un caracter. (-128 a +127 ó 0 a 255).
int: ocupa 4 bytes y es actualmente el tamaño de la palabra de un ordenador de 32 bits, salvo que se esté en posesión de un ordenador de 64 bits con un SO que lo soporte (-2^31 a 2^31-1 ó 0 a 2^32-1).
long ó long int: generalmente ocupa dos palabras (64 bits u 8 bytes) pero depende del ordenador.
float: ocupa una palabra y se usa para representar números reales dado que su rango es mucho mayor, usaremos este tipo para la representación de números reales.
double: ocupa dos palabras y tiene una capacidad mucho mayor que un float.
short: ocupa dos bytes en memoria, lo usaremos exclusivamente cuando vayamos a necesitas grandes cantidades de memoria y nos sobre precisión, si no, utilizaremos o el int o char, por cuestiones de arquitectura del ordenador (-2^15 a 2^15-1 ó 0 a 2^16-1).
unsigned: se usa para especificar que la variable no tiene signo, por lo que "aumenta" su capacidad en cuanto a número positivos.

void: esto no es un tipo de dato en sí mismo, pero se usa para determinar que una función no recibe parámetros o no devuelve un resultado. No pueden existir variables del tipo void.

Estructura General de un programa en C++

Así como un algoritmo tiene una estructura, son casi idénticos solo que en el programa intervienen librerías, funciones, y otras partes más que en un algoritmo no se pueden llegar a usar por complejidad.

Analizado por puntos:
ARCHIVO DE CABECERA

Librerías: indica que se tengan en cuenta las funciones y tipos definidos en la librería que se escoja, por ejemplo tenemos:

#include < nombre de fichero >

podemos ver donde dice: ” nombre de fichero ” va como su nombre lo indica un “fichero cabecera” por lo general en c++ usamos iostream que son las siglas iniciales de: [ input output stream ].

Cada fichero cabecera sirve para indicarle al programa “que funciones podemos usar”, es decir que al colocarle el iostream, tendremos funciones que se nos permitirá usar c0mo el system (“pause”) para dar una pausa al programa que hemos hecho y observar bien los resultados, entre otras; tambien podemos usar recursos como es el cin (para que el usuario/a ingrese datos) y el cout (para mostrarle datos al usuario/a).

Entonces quedamos con una cabecera asi:

#include <iostream.h>


CABECERA DE FUNCION – FUNCION PRINCIPAL

Debajo de la cabecera principal del programa, se coloca la “cabecera de funcion”, ésta funcion es obligatoria en cada programa porque indica el comienzo del programa:

main ( )

Y se requiere de los parentesis despues de la palabra restringida “main“


CUERPO – DESARROLLO

Después de colocar main ( ) es decir nuestro indicador que comienza el programa, ya podemos comenzar con la programación, ya que la programación va en el cuerpo del programa, se debe indicar cual es el cuerpo, ósea los limites. En un programa los limites son marcados por el simbolo “ las llaves “, es decir { }

{
. . . .
. . . . . . .

}

Por ultimo tenemos las sentencias, es decir nuestra programación, lo que vayamos realizando en el cuerpo del programa, lo que va a hacer el programa al compilarlo y ejecutarlo. Todo eso va a ir en el cuerpo es decir DENTRO de los limites que establecimos (las llaves principales del programa)      

Al final tenemos que, la estructura de un programa en c++ es así:

ESTRUCTURA


#include <iostream.h>

main ( )

{

. . . .

. . . . . . .

}

Creación de un programa
A continuación los pasos para la creación de un programa en C++:

Crea un nuevo proyecto,
agrega un nuevo archivo al proyecto,
edita el archivo para agregar código C++,
compila y ejecuta el programa mediante Visual

Ejecución de un programa
Ejemplo de ejecución de un programa

Dim aceptar As Integer
Private Sub Command1_Click()

Text2.Text = UCase(Text1.Text) + (" hola como estas")
Text3 = ""
'esta es la estructura que me mandaste ahora te pido que me
'ayudes a acomodar los bucles ya que no les he podido entender
'entre comentarios he puesto a como yo le he entendido en libro
Dim formulario As Form
Set formulario = fa.frm
fa.Show

' repeat
' Form1
'until text=""

'For aceptar = 1 To Text3.Text < 99
' Print Form1
'Next

'Do
' Form1
'Loop Until Text3 < 99

' Do Until Text3.Text < 99
' aceptar = aceptar + 1
'Loop

End Sub
Private Sub Command2_Click()
mensaje = "¿Esta seguro que desea salir?"
If MsgBox(mensaje, vbYesNo + vbQuestion, "Atención") = vbNo Then
Text1.Text = " "
Text2.Text = " "
Else
End
End If
End Sub

Depuración de un programa
Para ver lo que ocurre cuando se destruye un objeto Cardgame, vea el destructor para la clase Cardgame.

En el menú Ver, haga clic en Vista de clases o haga clic en la ficha Vista de clases en la      ventana Explorador de soluciones.

Expanda el árbol de proyecto game y haga clic en la clase Cardgame.

El área siguiente muestra los miembros y métodos de la clase.

Haga clic con el botón secundario en el destructor ~ Cardgame(void) y haga clic en Ir a definición.

Para disminuir el valor de totalparticipants cuando finaliza el juego de cartas, escriba el código siguiente entre las llaves de apertura y de cierre del destructor Cardgame::~Cardgame:

Copiar

totalparticipants -= players;
cout << players << " players have finished their game.  There are now "
<< totalparticipants << " players in total." << endl;
}

El archivo Cardgame.cpp debe tener un aspecto similar al siguiente tras los cambios:

Copiar

#include "Cardgame.h"
#include <iostream>
using namespace std;
Cardgame::Cardgame(int p)
{
    players = p;
    totalparticipants += p;
    cout << players << " players have started a new game.  There are now "
         << totalparticipants << " players in total." << endl;
}

Cardgame::~Cardgame(void)
{
    totalparticipants -= players;
    cout << players << " players have finished their game.  There are now "
         << totalparticipants << " players in total." << endl;
}

En el menú Generar, haga clic en Generar solución.

En el menú Depuración, haga clic en Iniciar depuración o presione F5 para ejecutar el programa en modo de depuración. El programa se detiene en el primer punto de interrupción.

En el menú Depuración, haga clic en Paso a paso por procedimientos o presione F10 para recorrer paso a paso el programa.

Observe que después de ejecutar cada constructor de Cardgame, el valor de totalparticipants se incrementa. Después de eliminar cada puntero (y llamar al destructor), el valor de totalparticipants se reduce.

Diríjase a la última línea del programa. Justo antes de que se ejecute la instrucción return, totalparticipants es igual a 0. Continúe recorriendo paso a paso el programa hasta que se cierre o, en el menú Depurar, haga clic en Continuar o presione F5 para dejar que el programa se ejecute hasta que se cierre.


Tipos de Datos:
A toda variable que se use en un programa, se le debe asociar (generalmente al principio del programa) un tipo de dato específico.

Un tipo de dato define todo el posible rango de valores que una variable puede tomar al momento de ejecución del programa y a lo largo de toda la vida útil del propio programa.

Los tipos de datos más comunes en C++ son:

TIPO DATO ESPACIO MEMORIA RANGO

unsigned char 8 bits 0 a 255

char 8 bits -128 a 127

short int 16 bits -32,768 a 32,767

unsigned int 32 bits 0 a 4,294,967,295

int 32 bits -2,147,483,648 a 2,147,483,647

unsigned long 32 bits 0 a 4,294,967,295

enum 16 bits -2,147,483,648 a 2,147,483,647

long 32 bits -2,147,483,648 a 2,147,483,647

float 32 bits 3.4 x 10-38 a 3.4 x 10+38(6 dec)

double 64 bits 1.7 x 10-308 a 1.7*10+308(15 dec)

long double 80 bits 3.4 x 10-4932 a 1.1 x 10+4932

void sin valor

Para manejar cadenas de caracteres (strings), se deberá usar un arreglo de caracteres con el siguiente formato.

Char nomstring[cant de elementos];



Ejemplo

Char nombre[30];

Char ciudad[20];

Para cargar con un dato se usa el siguiente código;

strcpy(carrera,”ing sistemas”);

Variables arreglos de caracteres, tienen que usar sus funciones de manipulación que vienen en la libreria string.h, algunas de estas funciones son: strcpy(), strcat(), strcmp(), strlen(), etc.



Constantes y Variables
Una variable, como su nombre lo indica, es un determinado objeto cuyo valor puede cambiar durante el proceso de una tarea específica. Contrario a una variable, una constante es un determinado objeto cuyo valor no puede ser alterado durante el proceso de una tarea específica. En C, C++ para declarar variables no existe una palabra especial, es decir, las variables se declaran escribiendo el tipo seguido de uno o más identificadores o nombres de variables. Por otro lado, para declarar constantes existe la palabra reservada const., así como la directiva #define.

A continuación se muestran ejemplos de declaración de variables y constantes.



 Variables  
 Constates
 Constantes
 int a;     const int a = 100;
                #define a 100
 float b;     const int a = 100;                  #define b 100




Notas:

A diferencia de las constantes declaradas con la palabra const. los símbolos definidos con #define no ocupan espacio en la memoria del código ejecutable resultante.

El tipo de la variable o constante puede ser cualquiera de los listados en Tipos primitivos, o bien de un tipo definido por el usuario.

Las constantes son usadas a menudo con un doble propósito, el primero es con el fin de hacer más legible el código del programa, es decir, si se tiene (por ejemplo) la constante numérica 3.1416 y esta representa al número pi, entonces podemos hacer declaraciones tales como:

#define pi 3.1416En este caso podremos usar la palabra pi en cualquier parte del programa y el compilador se encargará de cambiar dicho símbolo por 3.1416.

o bien,

const pi = 3.1416;En este otro caso podremos usar la palabra pi en cualquier parte del programa y el compilador se encargará de cambiar dicho símbolo

por una referencia a la constante pi guardada en la memoria.



Entradas y Salidas

Cuando nos referimos a entrada/salida estándar (E/S estándar) queremos decir que los datos o bien se están leyendo del teclado, ó bien se están escribiendo en el monitor de video. Como se utilizan muy frecuentemente se consideran como los dispositivos de E/S por default y no necesitan ser nombrados en las instrucciones de E/S.

En el lenguaje c++ tenemos varias alternativas para ingresar y/o mostrar datos, dependiendo de la librería que vamos a utilizar para desarrollar el programa, entre estas están: iostream.h y sodio.h.


Operaciones y Expresiones
En C#, un operador es un término o un símbolo que acepta como entrada una o más expresiones, u operando, y devuelve un valor. Los operadores que requieren un operando, como el operador de incremento (++) o new, se conocen como operadores unarios. Los operadores que requieren dos operandos, como los operadores aritméticos (+,-,*,/) se conocen como operadores binarios. Un operador, el operador condicional (?:), utiliza tres operandos y es el único operador terciario de C#.
La instrucción de C# siguiente contiene un solo operador unario y un solo operando. El operador de incremento, ++, modifica el valor del operando y:

Expresiones.

Una expresión es una combinación de operadores y operandos de cuya evaluación se obtiene un valor. Los operandos pueden ser nombres que denoten objetos variables o constantes, funciones, literales de cualquier tipo adecuado de acuerdo con los operadores u otras expresiones más simples. La evaluación de una expresión da lugar a un valor de algún tipo, una expresión se dice que es del tipo de su resultado.
Las expresiones se evalúan de acuerdo con la precedencia de los operadores. Ante una secuencia de operadores de igual precedencia, la evaluación se realiza según el orden de escritura, de izquierda a derecha. El orden de evaluación puede modificarse usando paréntesis.

Operadores de máxima prioridad.

Los operadores de máxima prioridad son: el operador de cálculo del valor absoluto, definido para cualquier tipo numérico, T1, el operador de negación lógica, definido para cualquier tipo booleano, modular o array monodimensional de componentes booleanos, T 2, y el operador de exponenciación, definido para cualquier tipo entero, T3, o para cualquier tipo real en coma flotante, T4. Cada uno, de acuerdo con las siguientes especificaciones:

Sobrecarga de operadores.

Ada permite que el programador sobrecargue los operadores del lenguaje, esto es, que pueda redefinirlos dándoles nuevos significados. Para sobrecargar un operador, simplemente hay que definir una función cuyo nombre sea el operador entre comillas y que tenga los parámetros adecuados.


La sobrecarga de operadores es uno de los mecanismos que nos permite ampliar las capacidas de los lenguajes de programación orientados al objeto. En C++, la declaración y definición de una sobrecarga de operador es muy similar a la declaración y definición de una función cualquiera. El ejemplo más sencillo de una sobrecarga de operadores nos lo da el lenguaje mismo, es decir, en una operación aritmética (por ejemplo, una suma ) el compilador determina el tipo de operación requerida de acuerdo con el tipo de datos involucrados. Vamos a suponer que se tienen las variables: int A, B; double X, Y; int R; y las siguientes instrucciones:

R = A + B;
R = A + X;
R = X + Y;
Ahora bien:

en el primer caso el compilador determina que el tipo de operación requerida es una suma de enteros debido a que los dos miembros ( A y B ) de la suma son del tipo entero.
en el segundo caso parece ser que las cosas no son tan claras, ya que en este los miembros involucrados en la suma s on de tipos diferentes, sin embargo el compilador determinará el tipo de operación requerida y depositará en el resultado ( R )el valor resultante redondeado.
en el tercero y último de los casos el compilador determina que el tipo de operación requerida es una suma de reales debido a que los dos miembros ( X e Y ) de la suma son del tipo double. También en este caso el resultado de la suma se redondea antes de ponerlo en R.



INTRODUCCIÓN A LA PROGRAMACIÓN C++

INTRODUCCIÓN A LA PROGRAMACIÓN C++


CONCEPTO DE LENGUAJE C++
C++ es un lenguaje imperativo orientado a objetos derivado del C. En realidad un super conjunto de C, que nació para añadirle cualidades y características de las que carecía. El resultado es que como su ancestro, sigue muy ligado al hardware subyacente, manteniendo una considerable potencia para programación a bajo nivel, pero se la han añadido elementos que le permiten también un estilo de programación con alto nivel de abstracción. Estrictamente hablando, C no es un subconjunto de C++; de hecho es posible escribir código C que es ilegal en C++. Pero a efectos prácticos, dado el esfuerzo de compatibilidad desplegado en su diseño, puede considerarse que C++ es una extensión del C clásico. La definición "oficial" del lenguaje nos dice que C++ es un lenguaje de propósito general basado en el C, al que se han añadido nuevos tipos de datos, clases, plantillas, mecanismo de excepciones, sistema de espacios de nombres, funciones inline, sobrecarga de operadores, referencias, operadores para manejo de memoria persistente, y algunas utilidades adicionales de librería (en realidad la librería Estándar C es un subconjunto de la librería C++)


HISTORIA C++
El comité para el estándar ANSI C fue formado en 1983 con el objetivo de crear un lenguaje uniforme a partir del C original, desarrollado por Kernighan y Ritchie en 1972, en la ATT. Hasta entonces el estándar lo marcaba el libro escrito en 1978 por estos dos autores1. El lenguaje C++ se comenzó a desarrollar en 1980. Su autor fue Bjarne Stroustrup, también de la ATT. Al comienzo era una extensión del lenguaje C que fue denominada C with classes. Este nuevo lenguaje comenzó a ser utilizado fuera de la ATT en 1983. El nombre C++ es también de ese año, y hace referencia al carácter del operador incremento de C (++). Ante la gran difusión y éxito que iba obteniendo en el mundo de los programadores, la ATT comenzó a estandarizarlo internamente en 1987. En 1989 se formó un comité ANSI (seguido algún tiempo después por un comité ISO) para estandarizarlo a nivel americano e internacional. En la actualidad, el C++ es un lenguaje versátil, potente y general. Su éxito entre los programadores profesionales le ha llevado a ocupar el primer puesto como herramienta de desarrollo de aplicaciones. El C++ mantiene las ventajas del C en cuanto a riqueza de operadores y expresiones, flexibilidad, concisión y eficiencia. Además, ha eliminado algunas de las dificultades y limitaciones del C original. La evolución de C++ ha continuado con la aparición de Java, un lenguaje creado simplificando algunas cosas de C++ y añadiendo otras, que se utiliza para realizar aplicaciones en Internet. Hay que señalar que el C++ ha influido en algunos puntos muy importantes del ANSI C, como por ejemplo en la forma de declarar las funciones, en los punteros a void, etc. En efecto, aunque el C++ es posterior al C, sus primeras versiones son anteriores al ANSI C, y algunas de las mejoras de éste fueron tomadas del C++. C++ es a la vez un lenguaje procedural (orientado a algoritmos) y orientado a objetos. Como lenguaje procedural se asemeja al C y es compatible con él, aunque ya se ha dicho que presenta ciertas ventajas. Como lenguaje orientado a objetos se basa en una filosofía completamente diferente, que exige del programador un completo cambio de mentalidad. Las características propias de la Programación Orientada a Objetos (Object Oriented Programming, u OOP) de C++ son modificaciones mayores que sí que cambian radicalmente su naturaleza.

Ventajas de C++
  • Compila a código intermedio (CIL) independiente del lenguaje en que haya sido escrita la aplicación e independiente de la máquina donde vaya a ejecutarse
  • Recolección de basura automática
  • Eliminación del uso punteros, en C++ no se necesitan
  • No hay que preocuparse por archivos de cabecera ".h"
  • No importa el orden en que hayan sido definidas las clases ni las funciones
  • No hay necesidad de declarar funciones y clases antes de definirlas
  • No existen las dependencias circulares
  • Soporta definición de clases dentro de otras
  • No existen funciones, ni variables globales, todo pertenece a una clase
  • Todos los valores son inicializados antes de ser usados (automáticamente se inicializan al valor estandarizado, o manualmente se pueden inicializar desde constructores estáticos)
  • No se pueden utilizar valores no booleanos (enteros, coma flotante...) para condicionales. Es mucho más limpio y menos propenso a errores
  • Puede ejecutarse en una sandbox restringida




 Versiones Actuales
Bajo Microsoft Windows
  • Embarcadero CodeGear
  • Code::Blocks
  • Dev-C++
  • Visual C++
  • wxDev-C++
  • Zinjai

Bajo DOS
  • Turbo C, reemplazado por C++Builder

Bajo GNU/Linux
  • Code::Blocks
  • NetBeans
  • Eclipse
  • Geany
  • Zinjai
  • Kdevelop

Fundamentos de Programación

Cuando un usuario plantea a un programador un problema que resolver mediante su ordenador, por lo general ese usuario tendrá conocimientos más o menos amplios sobre el dominio del problema, pero no es habitual que tenga conocimientos de informática. Por ejemplo, un contable que necesita un programa para llevar la contabilidad de una empresa será un experto en contabilidad (dominio del problema), pero no tiene por qué ser experto en programación.

Del mismo modo, el informático que va a resolver un determinado problema puede ser un experto programador, pero en principio no tiene por qué conocer el dominio del problema; siguiendo el ejemplo anterior, el informático que hace un programa no tiene por qué ser un experto en contabilidad.

Por ello, al abordar un problema que se quiere resolver mediante un ordenador, el programador necesita de la experiencia del experto del dominio para entender el problema. Al final, si se quiere llegar a una solución satisfactoria es necesario que:

·         El problema esté bien definido con el máximo detalle
·         Las especificaciones de las entradas y salidas del problema, deben ser descritas también en detalle:
·         ¿Qué datos son necesarios para resolver el problema?

·         ¿Qué información debe proporcionar la resolución del problema?


Definición ó Análisis del Programa

Esta etapa suele ser la primera y la más difícil de todo el proceso del ciclo de vida debido a que se encarga del reconocimiento de las fallas o problemas que una organización puede enfrentar.

Tradicionalmente han sido los usuarios y los directivos de las empresas quienes impulsan la mayoría de los proyectos. Por su parte, los analistas están encargados de descubrir mejoras dentro de la organización; por lo tanto el analista debe identificar los problemas, las oportunidades y las normas y objetivos que rigen a la empresa.

Problema es una situación no deseable que impide que la organización pueda alcanzar plenamente sus propósitos metas y objetivos.
Una oportunidad es toda posibilidad de mejorar el sistema o lograr la ausencia de problemas específicos.
Una norma es todo requisito impuesto por la dirección, las instituciones gubernamentales o cualquier influencia externa.

Si una oportunidad no es usada en su momento, ésta a la larga puede convertirse en un problema ya que esto pudiera implica el no usar situaciones favorables tanto para el analista como para la organización.
Con relación a las normas que se aplican en una organización, éstas representan problemas, pues implican el cambio de actividades o procesos internos dentro del tratamiento de información.

Los problemas se dan a notar de diversas formas; es decir, éstos pueden estar presentes en la organización y tomarse como prácticas normales de trabajo y depende en gran parte del usuario (directivos) poder descubrir estos problemas y del analista para determinarlos. La mayoría de los problemas dentro de las organizaciones se refieren al desempeño (ausentismo, falta de compromiso por parte de los empleados, alta rotación de personal).


Sin olvidar a los clientes o proveedores del sistema ya que ellos ejercen el tipo de retroalimentación que el sistema esté recibiendo. Considere como retroalimentación las quejas o sugerencias que se reciben, así como ventas no consolidadas o canceladas, etc., además del reflejo al momento de medir los resultados contra los objetivos planeados. Estos son síntomas que deben ser tomados en cuenta para iniciar de inmediato el análisis del sistema.

Diseño del Algoritmo
Un algoritmo consiste en una especificación clara y concisa de los pasos necesarios para resolver un determinado problema, pero para poder diseñar algoritmos es necesario disponer de una notación, que llamaremos ‘notación algorítmica’, que permita:

Describir las operaciones puestas en juego (acciones, instrucciones, comandos,...)
Describir los objetos manipulados por el algoritmo (datos/informaciones)
Controlar la realización de las acciones descritas, indicando la forma en que estas se organizan en el tiempo.


Para poder describir cualquier tipo de acción de las que intervienen en un algoritmo, diversos autores proponen el uso de un conjunto de construcciones lógicas (secuencia, decisión e iteración) con las que es posible escribir cualquier programa. Lo que sigue a continuación es la descripción de las diferentes construcciones disponibles para el diseño de algoritmos.

Codificación
En la actualidad los sistemas computarizados están automatizando todo un campo de procesos que en tiempos remotos eran un trabajo pesado y extenuado, gracias a ellos estos procesos se son menos complicados y mas ordenados, pero para obtener buenos resultados se necesita de una buena captura de datos, dado a esto existen diversas técnicas practicas para su control.


Una de estas técnicas para lograr una buena captura de datos es la codificación. Esta consiste en proporcionar códigos numéricos o alfanuméricos a diversos procesos para llevar un seguimiento y control mas profundo de alguna actividad, sin mas que adelantar se presenta a continuación.


Ejecución y Validación de un programa
Tan importante como desarrollar los programas es la labor de evaluarlos. Normalmente son tres los aspectos en los que medimos la calidad de un programa:

Mediante la comprobación debemos asegurarnos que el programa hace lo que debe y funciona correctamente. La comprobación puede realizarse ejecutando el programa con una colección de entradas que cubran un gran abanico de los casos posibles. Otra estrategia, más segura pero más compleja, es la verificación formal, en la que se utilizan la lógica para demostrar matemáticamente propiedades de los programas. Esto es lo que hemos hecho con nuestras soluciones aunque también existen métodos para comprobar que los programas finales siguen fielmente la solución. En nuestro caso la correspondencia entre las soluciones y los programas es bastante obvia ya que los programas son relativamente sencillos, pero puede no serlo cuando aumenta la dificultad del programa y no se ha realizado un correcto refinamiento progresivo.
Con la medición de la eficiencia, se determinan los recursos del computador (tiempo de ejecución y memoria utilizados) necesitados por el programa. Esta medición puede hacerse con técnicas formales, describiendo, mediante funciones matemáticas, la cantidad de tiempo o memoria que el programa va a consumir en su ejecución, lo que recibe el nombre de cálculo de la complejidad. La medida de la eficiencia permite decidir si un programa puede mejorarse, si fuera necesario, o compararlo con otro programa para el mismo problema.

Finalmente, es interesante medir la claridad del programa. El programa debe ser fácil de entender, especialmente para aquellos que no son los programadores directos pero que pueden necesitar mantener o modificar el programa posteriormente. Aunque es posible establecer ciertas medidas formales de la calidad de un programa y existen herramientas automáticas para ello, nos contentaremos con dar ciertas normas que fijan el estilo de programación. En un buen estilo de programación influyen la afortunada elección de nombres significativos para las diferentes entidades del programa, la adecuada estructuración y sangrado, distribución e inclusión de comentarios explicativos de sus unidades o la no utilización de trucos propios del programador. Un cuidado estilo de programación favorece que los programas sean más sencillos de entender, lo que facilita su modificación y mantenimiento.

Programación Estructurada

La programación orientada a objetos se desarrolló para tratar de paliar diversas limitaciones que se encontraban en anteriores enfoques de programación. Para apreciar las ventajas de la POO, es preciso constatar las limitaciones citadas y cómo se producen con los lenguajes de programación tradicionales.

C, Pascal y FORTRAN, y lenguajes similares, se conocen como lenguajes procedimentales (por
procedimientos). Es decir, cada sentencia o instrucción señala al compilador para que realice alguna tarea: obtener una entrada, producir una salida, sumar tres números, dividir por cinco, etc. En resumen, un programa en un lenguaje procedimental es un conjunto de instrucciones o sentencias. En el caso de pequeños programas, estos principios de organización (denominados paradigma) se demuestran eficientes.

El programador sólo tiene que crear esta lista de instrucciones en un lenguaje de programación, compilar en la computadora y ésta, a su vez, ejecuta estas instrucciones.

Cuando los programas se vuelven más grandes, cosa que lógicamente sucede cuando aumenta la complejidad del problema a resolver, la lista de instrucciones aumenta considerablemente, de modo tal que el programador tiene muchas dificultades para controlar ese gran número de instrucciones. Los programadores pueden controlar, de modo normal, unos centenares de líneas de instrucciones. Para resolver este problema los programas se descompusieron en unidades más pequeñas que adoptaron el nombre de funciones (procedimientos, subprogramas o subrutinas en otros lenguajes de programación). De este modo en un programa orientado a procedimientos se divide en funciones, de modo que cada función tiene un propósito bien definido y resuelve una tarea concreta, y se diseña una interfaz claramente definida (el prototipo o cabecera de la función) para su comunicación con otras funciones.

Con el paso de los años, la idea de romper en programa en funciones fue evolucionando y se llegó al agrupamiento de las funciones en otras unidades más grandes llamadas módulos (normalmente, en el caso de C, denominadas archivos o ficheros); sin embargo, el principio seguía siendo el mismo: agrupar componentes que ejecutan listas de instrucciones (sentencias). Esta característica hace que a medida que los programas se hacen más grandes y complejos, el paradigma estructurado comienza a dar señales de debilidad y resultando muy difícil terminar los programas de un modo eficiente. Existen varias razones de la debilidad de los programas estructurados para resolver problemas complejos. Tal vez las dos razones más evidentes son éstas. Primero, las funciones tienen acceso ilimitado a los datos globales. Segundo, las funciones inconexas y datos, fundamentos del paradigma procedimental proporcionan un modelo

pobre del mundo real.

Surgimiento de la programación Estructurada
A fines de los años sesenta. Un famoso Teorema de Dijkstra, demostrado por Edsger Dijkstra en los años sesenta, demuestra que todo programa puede escribirse utilizando únicamente las tres instrucciones de control siguientes:
Secuencial de instrucciones.
Instrucción condicional.
Iteración, o bucle de instrucciones.


Solamente con estas tres estructuras se puede hacer un programa informático.

Secuencias Estructuradas

Estructura secuencial

   La estructura secuencial es aquella en la que una acción (instrucción) sigue a otra en secuencia. Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente y así sucesivamente hasta el fin del proceso.

Ejemplo:

INPUT x
   INPUT y
   auxiliar= x
   x= y
   y= auxiliar
   PRINT x
   PRINT y

Esta secuencia de instrucciones permuta los valores de x e y, con ayuda de una variable auxiliar, intermedia.

1º Se guarda una copia del valor de x en auxiliar.
2º Se guarda el valor de y en x, perdiendo su valor anterior, pero se mantiene una copia del contenido en auxiliar.
3º Se copia a y el valor de auxiliar, que es el valor inicial de x.
El resultado es el intercambio de los valores entre x e y, en tres operaciones secuenciales
Estructura selectiva o de selección

   La estructura selectiva permite que la ejecución del programa se bifurque a una instrucción (o conjunto) u otra/s, según un criterio o condición lógica establecida, sólo uno de los caminos en la bifurcación será el tomado para ejecutarse.

Ejemplo:

#include<iostream.h>
#include<dos.h>
#include<conio.h>
int main ( )
{

textbackground(3) ; // sirve para asignar color al fondo de pantalla
clrscr() ;
textcolor(2) ; // sirve para asignar color al texto
clrscr() ;
int num;
    cout<<"Dame un numero al azar no mayor a 30" << endl;
cin>>num;
if ( num > 30 )
cout<<"Número invalido";
if ( num > 1 ) && (num < 30)
cout<<"Bien acertaste el rango";
getch();
return 0;

}

Estructura Iterativa

Un bucle iterativo o iteración de una secuencia de instrucciones, hace que se repitan mientras se cumpla una condición, en un principio el número de iteraciones no tiene porque estar determinado.

Ejemplo:

a:= 0
b:= 7
mientras  b > a hacer
        Escribir a
        a:= a + 1
mientras

Esta instrucción tiene tres palabras reservadas mientras, hacer y fmientras.

mientras: señala el comienzo del bucle y después de esta palabra se espera lacondición de repetición, si la condición es cierta se pasa al cuerpo del bucle, sino al final de la instrucción mientras.
hacer : señala el final de la condición, lo que esté después será el cuerpo del bucle.
fmientras: señala el final del cuerpo del bucle y de la instrucción mientras. El bucle mientras, se repite mientras la condición sea cierta, esta condición se comprueba al principio por lo que el cuerpo del bucle puede que no se ejecute nunca, cuando la condición es falsa en un principio, o que se repita tantas veces como sea necesario, mientras la condición sea cierta.

Anidamiento

El cuerpo de cualquier estructura puede ser una instrucción simple u otra estructura, que a su vez puede anidar a otra.

Ejemplo:

si a > b entonces
     auxiliar:=a
      a:= b
      b:= auxiliar

si_no
    nada
fsi

    escribir a y b


Ventajas de la programación estructurada

  • Los programas quedan mejor documentados internamente.
  • Los programas son más fáciles de entender. Un programa estructurado puede ser leído en secuencia, de arriba hacia abajo, sin necesidad de estar saltando de un sitio a otro en la lógica, lo cual es típico de otros estilos de programación. La estructura del programa es más clara puesto que las instrucciones están más ligadas o relacionadas entre sí, por lo que es más fácil comprender lo que hace cada función.
  • Aumento de la productividad del programador.
  • Se facilita la utilización de las otras técnicas para el mejoramiento de la productividad en programación.
  • Reducción de los costos de mantenimiento.
  • Reducción del esfuerzo en las pruebas. El programa se puede tener listo para producción normal en un tiempo menor del tradicional; por otro lado, el seguimiento de las fallas ("debugging") se facilita debido a la lógica más visible, de tal forma que los errores se pueden detectar y corregir más fácilmente.
  • Programas más sencillos y más rápidos.



Inconvenientes de la programación estructurada

El principal inconveniente de este método de programación, es que se obtiene un único bloque de programa, que cuando se hace demasiado grande puede resultar problemático su manejo, esto se resuelve empleando la programación modular, definiendo módulos interdependientes programados y compilados por separado, cada uno de los cuales ha podido ser desarrollado con programación estructurada.


Programación Orientada a Objetos
La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa los objetos en sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, abstracción, polimorfismo y encapsulamiento. Su uso se popularizó a principios de la década de los años 1990. En la actualidad, existe variedad de lenguajes de programación que soportan la orientación a objetos.

Ø  Introducción:

Los objetos son entidades que tienen un determinado estado, comportamiento (método) e identidad:

El estado está compuesto de datos o informaciones, será uno o varios atributos a los que se habrán asignado unos valores concretos (datos).
El comportamiento está definido por los métodos o mensajes a los que sabe responder dicho objeto, es decir, qué operaciones se pueden realizar con él.
La identidad es una propiedad de un objeto que lo diferencia del resto, dicho con otras palabras, es su identificador (concepto análogo al de identificador de una variable o una constante).
Un objeto contiene toda la información que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos. A su vez, los objetos disponen de mecanismos de interacción llamados métodos, que favorecen la comunicación entre ellos. Esta comunicación favorece a su vez el cambio de estado en los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las que no se separa el estado y el comportamiento.

Los métodos (comportamiento) y atributos (estado) están estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de métodos para poder tratar los atributos con los que cuenta. El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a alguno de ellos. Hacerlo podría producir el hábito erróneo de crear clases contenedoras de información por un lado y clases con métodos que manejen a las primeras por el otro. De esta manera se estaría realizando una programación estructurada camuflada en un lenguaje de programación orientado a objetos.

La POO difiere de la programación estructurada tradicional, en la que los datos y los procedimientos están separados y sin relación, ya que lo único que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La programación estructurada anima al programador a pensar sobre todo en términos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan. En la programación estructurada solo se escriben funciones que procesan datos. Los programadores que emplean POO, en cambio, primero definen objetos para luego enviarles mensajes solicitándoles que realicen sus métodos por sí mismos.

Ø  Conceptos Básicos:

La programación orientada a objetos es una forma de programar que trata de encontrar una solución a estos problemas. Introduce nuevos conceptos, que superan y amplían conceptos antiguos ya conocidos. Entre ellos destacan los siguientes:

Clase: definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciación es la lectura de estas definiciones y la creación de un objeto a partir de ellas.
Herencia: (por ejemplo, herencia de la clase C a la clase D) Es la facilidad mediante la cual la clase D hereda en ella cada uno de los atributos y operaciones de C, como si esos atributos y operaciones hubiesen sido definidos por la misma D. Por lo tanto, puede usar los mismos métodos y variables públicas declaradas en C. Los componentes registrados como "privados" (private) también se heredan, pero como no pertenecen a la clase, se mantienen escondidos al programador y sólo pueden ser accedidos a través de otros métodos públicos. Esto es así para mantener hegemónico el ideal de OOP.

Objeto: entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos) los mismos que consecuentemente reaccionan a eventos. Se corresponde con los objetos reales del mundo que nos rodea, o a objetos internos del sistema (del programa). Es una instancia a una clase.
Método: Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena tras la recepción de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un método puede producir un cambio en las propiedades del objeto, o la generación de un "evento" con un nuevo mensaje para otro objeto del sistema.

Evento: Es un suceso en el sistema (tal como una interacción del usuario con la máquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. También se puede definir como evento, a la reacción que puede desencadenar un objeto, es decir la acción que genera.

Mensaje: una comunicación dirigida a un objeto, que le ordena que ejecute uno de sus métodos con ciertos parámetros asociados al evento que lo generó.
Propiedad o atributo: contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos), que hace los datos visibles desde fuera del objeto y esto se define como sus características predeterminadas, y cuyo valor puede ser alterado por la ejecución de algún método.

Estado interno: es una variable que se declara privada, que puede ser únicamente accedida y alterada por un método del objeto, y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos). No es visible al programador que maneja una instancia de la clase.

Componentes de un objeto: atributos, identidad, relaciones y métodos.

Identificación de un objeto: un objeto se representa por medio de una tabla o entidad que esté compuesta por sus atributos y funciones correspondientes.


En comparación con un lenguaje imperativo, una "variable", no es más que un contenedor interno del atributo del objeto o de un estado interno, así como la "función" es un procedimiento interno del método del objeto.





20 sept 2015

PROGRAMACIÓN DE LA MATERIA ESTRUCTURA DE DATOS

CONTENIDO
EVALUACION
FECHA
INTRODUCCION A LA PROGRAMACION
Composición video: Importancia de la Programación
12-16/10/2015
HISTORIA DE LA PROGRAMACION
Discusión grupal
19-23/10/2015
UNIDAD 1: PROGRAMAS DE COMPUTADORA

Desarrollo de Cuestionario Investigación del Tema

26-30/10/2015
Examen Escrito
2-6/11/2015
UNIDAD 2: CONCEPTOS DE DISEÑO ESTRUCTURADO

Boceto para las diapositivas
9-13/11/2015
Diapositivas en Power Point
16-20/11/2015
Exposición Final
30-4/12/2015
UNIDAD 3: PROGRAMACIÓN ESTRUCTURADA



UNIDAD 4: PROCEDIMIENTOS Y FUNCIONES


UNIDAD 5: ESTRUCTURA DE DATOS: ARREGLOS



UNIDAD 6: REPRESENTACION DE DATOS



UNIDAD 7: ENTRADA Y SALIDA



18 sept 2015

HISTORIA DEL SOFTWARE

HISTORIA DEL SOFTWARE
INTRODUCCIÓN
Durante nuestra carrera como estudiantes hemos sido testigos de los grandes y sorprendentes avances que la tecnología ha desarrollado en los últimos años. El estudiar la especialidad de Técnico Medio en Informática nos ha mantenido mucho más cerca de este desarrollo.
Estos avances han sido muy rápidos en la realidad, pero no podemos hablar de que nacen de la noche a la mañana, cada uno de ellos refleja una investigación de mucho tiempo. Estas nuevas tecnologías nos demuestran con hechos y resultados lo importante que son para en la actualidad; a su vez se van convirtiendo en un estándar para poder competir en el mundo real.
Un factor que ha sido relevante en este desarrollo de tecnologías ha sido el Software, ya que ha facilitado y agilizado varios procesos que ya se manejaban con anterioridad. Además que se ha convertido en una característica primordial que deben tener las Organizaciones para poder convertirse en una de las mejores a nivel mundial.
Este trabajo nos presenta como empezó, desarrolló y que rumbos toma el Software actualmente.
PRIMERA ERA
Durante los primeros años de la era de la computadora, el software se contemplaba como un añadido. Desde entonces el campo se ha desarrollado tremendamente. La programación de computadoras era un “arte de andar por casa” para el que existían pocos métodos sistemáticos. El desarrollo del software se realizaba virtualmente sin ninguna planificación, hasta que los planes comenzaron a descalabrarse y los costos a correr. Los programadores trataban de hacer las cosas bien, y con un esfuerzo heroico, a menudo salían con éxito. Los problemas a ser resueltos eran principalmente de una naturaleza técnica, el énfasis estaba en expresar algoritmos conocidos eficazmente en algún lenguaje de programación.
En estos primeros años lo normal era que el hardware fuera de propósito general. Por otra parte, el software se diseña a medida para cada aplicación y tenía una distribución relativamente pequeña. El software como producto estaba en su infancia. La mayoría del software se desarrollaba y era utilizado por la misma persona un organización. La misma persona lo escribía , lo ejecutaba y, si fallaba, lo depuraba. Debido a que la movilidad en el trabajo era baja, los ejecutivos estaban seguros de que esa persona estará allí cuando se encontrara algún error. Debido a este entorno personalizado del software, el diseño era un proceso implícito, realizado en la mente de alguien, y la documentación normalmente no existía.
A lo largo de los primeros años aprendimos mucho sobre la implementación de sistemas informáticos, pero relativamente poco sobre la ingeniería de las computadoras. Sin embargo, en honor de la verdad, debemos reconocer que durante esa era se desarrollaron muchos sistemas informáticos excepcionales. Algunos de ellos todavía se siguen utilizando hoy y, por sus características, siguen siendo admirados con toda justicia.
SEGUNDA ERA
La segunda era en la evolución de los sistemas de computadora se extienden desde la mitad de la década de los sesenta hasta finales de los setenta. La multiprogramación y los sistemas multiusuario introdujeron nuevos conceptos de interacción hombre - máquina. Las técnicas interactivas abrieron un nuevo mundo de aplicaciones y nuevos niveles de sofisticación del hardware y del software. Los sistemas de tiempo real podían recoger, analizar y transformar datos de múltiples fuentes, controlando así los procesos y produciendo salidas en milisegundos en lugar de en minutos. Los avances en los dispositivos de almacenamiento en línea condujeron a la primera generación de sistemas de gestión de bases de datos.
La segunda era se caracterizó también por el establecimiento del software ya se desarrollaba para tener una amplia distribución en un mercado multidisciplinario. Los programas se distribuían para computadoras grandes y para minicomputadoras, a cientos e incluso a miles de usuarios. Los patronos de la industria, del gobierno y de la universidad se aprestaban a “desarrollar el mejor paquete de software” y ganar así mucho dinero.
Conforme crecía el número de sistemas informáticos, comenzaron a extenderse as bibliotecas de software de computadora. Las casas desarrollaban proyectos en los que se producían programas de decenas de miles de sentencias fuente. Los productos de software comprados al exterior incorporaban cientos de miles de nuevas sentencias. Una nube negra apareció en el horizonte. Todos esos programas, todas esas sentencias fuente tenían que ser corregidos cuando se detectaban fallos, modificados cuando cambiaban los requisitos de los usuarios o adaptados a nuevos dispositivos hardware que se hubieran adquirido. Esta actividades se llamaron colectivamente mantenimiento del software. El esfuerzo gastado en el mantenimiento del software comenzó a absorber recursos en una medida alarmante.
Aún peor, la naturaleza personalizada de muchos programas los hacía virtualmente imposibles de mantener. Había comenzado una crisis del “software”
TERCERA ERA
La tercera era en la evolución de los sistemas de computadora comenzó a mediados de los años setenta y continuó más allá de una década. El sistema distribuido, múltiples computadoras, cada una ejecutando funciones concurrentemente y comunicándose con alguna otra, incrementó notablemente la complejidad de los sistemas informáticos. Las redes de área local y de área global, las comunicaciones digitales de alto ancho de banda y creciente demanda de acceso “instantáneo” a los datos, supusieron una fuente presión sobre los desarrolladores del software. Aún más, los sistemas y el software que lo permitían continuaron residiendo dentro de la industria y de la academia. El uso personal era extraño.
La conclusión de la tercera era se caracterizó por la llegada y amplio uso de los microprocesadores. El microprocesador ha producido un extenso grupo de productos inteligentes, desde productos inteligentes, desde automóviles hasta hornos microondas, desde robots industriales a equipos de diagnóstico de suero sanguíneo, pero ninguno ha sido más importante que la computadora personal. En menos de una década, las computadoras llegarán a ser fácilmente accesibles al público.
CUARTA ERA
La cuarta era de la evolución de sistemas informáticos se aleja de las computadoras individuales y da los programas de computadoras, dirigiéndose al impacto colectivo de las computadoras individuales y de los programas de computadoras, dirigiéndose al impacto colectivo de las computadoras y del software. Potentes máquinas personales controladas por sistemas operativos sofisticados, en redes globales y locales, acompañadas por aplicaciones de software avanzadas se han convertido en la norma. Las arquitecturas informáticas están cambiando de entornos centralizados de grandes computadoras a entornos descentralizados cliente/servidor. Las redes de información en todo el mundo proporcionan una infraestructura que iguala a expertos y políticos en pensar sobre una “superautopista de información” y una “conexión del ciberespacio”. De hecho internet se puede observar como un “software” al que pueden acceder usuarios individuales.
La industria del software ya es la cuna de la economía del mundo. Las decisiones tomadas por gigantes de la industria tales como Microsoft arriesgan billones de dólares. A medida que la cuarta generación progresa, han comenzado a surgir nuevas tecnologías. Las tecnologías orientadas a objetos están desplazando rápidamente los enfoques de desarrollo de software más convencionales en muchas áreas de aplicaciones. Aunque las predicciones de las computadoras de “quinta generación”” continúan eludiéndonos, “las técnicas de cuarta generación” para el desarrollo del software están cambiando en forma en que la comunidad del software construye programas informáticos. Los sistemas expertos y el software de inteligencia artificial han salido del laboratorio para entrar en aplicaciones prácticas de una gran variedad de problemas del mundo real. El software de redes neuronales artificiales junto con la aplicación de lógica difusa ha abierto posibilidades excitantes para el reconocimiento de patrones y habilidades de procesamiento de información de carácter humano. La programación de realidad virtual y los sistemas multimedia ofrecen formas radicalmente diferentes de comunicar información al usuario final. “Los algoritmos genéricos” ofrecen el potencial para el software que reside dentro de las computadoras biológicas masivamente en paralelo.
Sin embargo, un conjunto de problemas relacionados con el software ha persistido a través de la evolución de los sistemas basados en computadora, y estos problemas continúan aumentado.
APORTACIONES AL CAMPO
Durante el desarrollo del tema, nos hemos percatado del problema que existió en algún momento respecto a que no se llevaba una planificación para un buen desarrollo del software. Esto trajo consecuencias que repercutieron en las Organizaciones.
Muchas de estas consecuencias originaron pérdidas millonarias en diferentes Empresas como el caso de una Aerolínea Internacional de los Estados Unidos de América, que tuvo el problema de que al momento de que un pasajero pretendía hacer su reservación de vuelo, el Sistema de Información mostraba que los asientos se encontraban ocupados, mientras que físicamente el vuelo contaba con demasiados asientos libres. Esto origino una pérdida de $50 millones de dólares.
A la vez se presentaron casos en los cuales las pérdidas eran iguales o mayores materialmente hablando. Las transacciones financieras de aquél entonces se empezaron a llevar por medio de Software Especializado. Pero también tuvo errores, ya que al enviar facturas de pago, su total de pago presentaba $0.00, lo cual originó bastantes pérdidas.
Pero no sólo existieron pérdidas materiales en los malos desarrollos de Software de aquellos días. Una computadora que se usaba para el servicio militar de los Estados Unidos de América, reportó una alarma acerca de la Unión Soviética de Repúblicas Socialistas había iniciado un ataque de proyectiles nucleares en contra de ese país. Esto origino una gran movilización para contrarrestar el ataque, se alistaron a los bombarderos atómicos norteamericanos, pero al día siguiente a través de un periódico se daba la noticia que todo había sido un error en el Software de la computadora.
Otra de las consecuencias en donde si hubo pérdidas humanas, fue en un caso en Inglaterra, en donde se enjuiciaba a una mujer de 54 años de edad por asesinar a su hija. Esto fue debido a un mensaje de un sistema informatizado hizo de la compañía de Seguro Social, informaba a la mujer que ella estaba gravemente enferma, se le decía que padecía una forma incurable de sífilis, además de que había infectado a sus dos hijos. En pánico, ella estranguló a su hija de 15 años e intento matar a su hijo de 13, el muchacho escapó y consiguió ayuda para después impedir que su madre se suicidará. Finalmente el juez culpó el error de la computadora y no consideró a la mujer responsable de sus acciones.
Como nos podemos dar cuenta estas consecuencias fueron de gran gravedad. En los primeros dos casos se atacó hacia los recursos financieros de grandes empresas a nivel internacional. En los siguientes casos aparte de afectar materialmente a la Sociedad, se pierde una vida humana por un error en el Software acerca de un padecimiento. Es así como se observa los diferentes tipos de consecuencias que se originaban por un mal desarrollo de Software.
Con este tipo de casos nos hemos percatado de la importancia que tiene una planeación acerca del desarrollo del Software. En aquel entonces el programador no se adentraba hacia las repercusiones que pudiera tener el Software que estaba creando, y ante la falta de documentación para la enseñanza de la creación de Software, los programadores aprendían solamente practicando.
Actualmente, nosotros como desarrolladores de Software, al momento de diseñarlo debemos de darnos cuenta de varias cosas para no tener ese tipo de errores que existieron con anterioridad. Además de otras cosas creemos que entre lo más importante que debemos saber es:
  • ¿Hacia quién va dirigido el SW?
  • ¿Quienes serán los usuarios?
  • ¿Qué tipo de información les será proporcionada?
  • La facilidad de acceso.
esto, entre muchas otras cosas más. Pero ante todo siempre debemos adoptar la postura de todos los tipos de usuarios que vayan a trabajar con el Software, ya que así podremos observar si los resultados que se obtienen son los que se requieren, es decir todo en base a una buena planeación.
Sin embargo, no es del todo satisfactorio dejar las cosas simplemente en las etapas de planeación. Después de que los programas estén terminados deben recibir mantenimiento, y los esfuerzos de mantenimiento normalmente sobrepasan el esfuerzo gastado en el diseño y programación original.
Parte importante de este aspecto es la documentación. Se deben documentar el Software y los procedimientos para que estén codificados en un formato que pueda ser fácilmente accesado. La documentación permite que los usuarios, programadores y analistas observen el sistema, Software y procedimientos sin tener que interactuar con él.
Después de ver todos los avances podemos observar que no sólo se cambia una manera de trabajar, sino que se cambia la forma de conceptualizar la vida, ¿Quién vive ya sin la ayuda de una computadora que agilice procesos?, y en caso drástico podemos ver que se cambian las costumbres y cultura de la Sociedad Actual.
CONCLUSIONES
A manera de conclusión, queremos finalizar con una semblanza ágil y rápida que nos permitirá observar los aspectos más relevantes que a nuestro juicio han marcado con hechos la Evolución del Software.
ERA
AÑOS
CARACTERÍSTICAS
1950 - 1965
  • Se trabajaba con la idea de “Codificar y Corregir”.
  • No existía un planteamiento previo.
  • No existía documentación de ningún tipo.
  • Existencia de pocos métodos formales y pocos creyentes en ellos.
  • Desarrollo a base de prueba y error.
1965 - 1972
  • Se busca simplificar código.
  • Aparición de Multiprogramación y Sistemas Multiusuarios.
  • Sistemas de Tiempo Real apoyan la toma de decisiones.
  • Aparición de Software como producto. (Casas de Software).
  • INICIO DE LA CRISIS DEL SOFTWARE.
  • Se buscan procedimientos para el desarrollo del Software.
1972 - 1989
  • Nuevo Concepto: Sistemas Distribuidos.
  • Complejidad en los Sistemas de Información.
  • Aparecen: Redes de área local y global, y Comunicadores Digitales.
  • Amplio Uso de Microprocesadores.
1989 - ¿?
  • Impacto Colectivo de Software.
  • Aparecen: Redes de Información, Tecnologías Orientadas a Objetos.
  • Aparecen: Redes Neuronales, Sistemas Expertos y SW de Inteligencia Artificial.
  • La información como valor preponderante dentro de las Organizaciones.
Creemos de suma relevancia el mencionar algunas de los lenguajes de programación que fueron utilizados en sus respectivas eras. Esto nos ayudará a comprender mejor el objetivo que se perseguía en cada una de ellas.
ERA
LENGUAJES
CARACTERÍSTICAS
  • Fortran
  • Basic
  • Logo
  • Cobol
  • Fue el primer y principal lenguaje Científico.
  • Diseñado por IBM.
  • Utilizado también para aplicaciones comerciales.
  • Desarrollado como lenguaje de tiempo compartido.
  • Traza elementos gráficos estableciendo la geometría de lápiz.
  • Ampliamente usado en programación en minicomputadores.
  • Pascal
  • Prolog
  • Mumps
  • Lisp
  • Lenguaje Académico.
  • Sus características son copiadas por otros lenguajes.
  • Éxito comercial a través de Borland.
  • Desarrollado en Francia, 1973.
  • Aplicaciones en Inteligencia Artificial (IA).
  • Sistema de Multiprogramación.
  • Incluye su propia base de datos.
  • Utilizado en aplicaciones médicas.
  • Sintaxis muy diferente de los demás lenguajes.
  • Programa aplicaciones en IA.
  • C, C++
  • Modula-2
  • dBase
  • Desarrollado en los ochentas.
  • Se utiliza en aplicaciones comerciales.
  • C++, se utiliza para la tecnología orientada a objetos.
  • Versión mejorada de Pascal.
  • Desarrollada en 1979.
  • Lenguaje estándar para aplicaciones comerciales.
  • Ramas colaterales: Clipper, FoxBase.
  • Visual C++
  • Visual Basic
  • Desarrollado por Microsoft.
  • Principalmente orientado a la tecnología de objetos.
  • Se utiliza para aplicaciones comerciales.
  • Principalmente para aplicaciones comerciales.
  • Versión cotizada, ya que permite interactuar con tablas de manejadores de bases de datos y lenguaje SQL.
En estos días se habla de una nueva plataforma desarrollada por Microsoft: La plataforma .NET, que permitirá a los desarrolladores crear aplicaciones extensas e incluso sistemas de componentes y servicios con gran capacidad para operar entre sí.
Este tipo de aplicaciones se pueden limitar a una organización, pero ésa no es la idea general, ya que los muchos analistas son de la opinión de que hay gran necesidad de aplicaciones que puedan existir en un ambiente distribuido basado en Internet.
Pero creemos que como normalmente sucede sobre todo con el Software de Sistemas, algunas áreas no están terminadas, y aunque la nueva plataforma ofrezca características modernas y sencillas, utilizarlas dependerá si Microsoft logra que los principales negocios acepten cambiar a esta nueva forma de crear soluciones.
A continuación se presenta una lista de algunas personas que hicieron contribuciones significativas en la creación y crecimiento de la industria de productos de software
  • Charles Bachman. Inventó la tecnología del banco de datos en los inicios de los sesentas.
  • John Backus. FORTRAN desarrollado para IBM (1954)
  • Bob Bemer. Uno de los diseñadores de COBOL y el ASCII normal para IBM (años sesenta); inventor de la sucesión del Escape, el mecanismo universal para toda la computadora.
  • Larry Constantine. Inventa los datos que fluyen en los diagramas, presentan primero en papel, los conceptos de un plan estructurado en 1968.
  • Peter Cunningham. Funda una de las primeras empresas de investigación de mercado para enfocar el software y comienza a comercializar los productos del software en 1974.
  • Tom DeMarco. El pionero en utilizar una metodología de caso, el autor, y consultor en los años setenta.
  • Wilfred J. Dixon. Empezó distribuyendo el software estadístico en 1962.
  • Frank Dodge. Co - fundó McCormack & el Regate qué vendió el primer software de contabilidad en 1969.
  • Larry Ellison. Dejó camino abierto para los DBMS.
  • Dave Ferguson. Logró vender el primer producto de software con éxito contra un programa de IBM.
  • Ken Orr. Crea la metodología de caso desarrollada en los años setenta.

La mayoría de estas personas aquí nombradas, trabajaron sobre algún aspecto del Software con el que aún se trabaja, pero en otros casos, este tipo de avances dieron pie a nuevas investigaciones que han contribuido al desarrollo del mismo, es decir, que han servido como base para descubrir nuevas fisonomías del Software con el que actualmente se trabaja.