# data[].attributes.body
1. Estructura de un programa
2. Comentarios
3. Identificadores
4. Variables
5. Constantes
6. Palabras Reservadas
7. Tipos de datos
8. Operadores Aritméticos
9. Operadores relacionales
10. Operadores lógicos

# data[].attributes.headline
Clasificación de los lenguajes de programación .

# data[].attributes.subject
Clasificación de los lenguajes de programación .

# data[].attributes.body
Lenguaje maquina: es el lenguaje de programación que entiende la maquina.
Este lenguaje de programación utiliza el alfabeto binario, 0 o el 1.

Lenguaje de bajo nivel (ensambladores): El lenguaje ensamblador fue el primer lenguaje de programación que trato de sustituir el lenguaje maquina por otro lenguaje que fuese mas parecido al de los seres humanos. En este lenguaje se conoce como programa fuente, que traduce las instrucciones a un programa escrito en lenguaje ensamblador por el programador, y el programa objeto es la traducción a lenguaje maquina del programa fuente. Los lenguajes de este tipo pueden crear programas muy rápidos, pero son difíciles de aprender, son específicos de cada procesador(de cada maquina), si nos llevamos el programa a otra computadora sera preciso rescribir el programa desde el comienzo.

Lenguaje de alto nivel: este tipo de lenguajes de programación son independientes de la maquina, los podemos usar en cualquier computador con muy pocas modificaciones o sin ellas, son muy similares al lenguaje humano, pero precisan de un programa interprete o compilador que traduzca este lenguaje de programación de alto nivel a bajo nivel como el lenguaje maquina que la computadora puede entender. Los lenguajes de programación de alto nivel son mas fáciles de aprender por que se usan comandos del lenguaje natural, general mente en ingles.

# data[].attributes.body
La metodología de programación es el enfoque teórico - práctico que hace posible encontrar soluciones a problemas complejos partiendo del análisis y apoyándose en la planificación. Este planteamiento hace posible maximizar la eficiencia del desarrollo del software al ganar en visibilidad y control.

Tipos de metodologías.

Programación estructurada: Metodología descendente. Metodología ascendente.

Programación Orientada a Objetos: Abstracción, Encapsulamiento, Herencia y Polimorfismo.

# data[].attributes.headline
Metodología de programación estructurada.  

# data[].attributes.subject
Metodología de programación estructurada.  

# data[].attributes.body
La programación estructurada es un paradigma de programación basado en utilizar funciones o subrutinas, y únicamente tres estructuras de control:

secuencia: ejecución de una sentencia tras otra.

selección o condicional: ejecución de una sentencia o conjunto de sentencias, según el valor de una variable booleana.

iteración (ciclo o bucle): ejecución de una sentencia o conjunto de sentencias, mientras una variable booleana sea verdadera.

Este paradigma se fundamente en el teorema correspondiente, que establece que toda función computable puede ser implementada en un lenguaje de programación que combine sólo estas tres estructuras lógicas o de control.

La estructura de secuencia es la que se da naturalmente en el lenguaje, ya que por defecto las sentencias son ejecutadas en el orden en que aparecen escritas en el programa.

Para las estructuras condicionales o de selección, Python dispone de la sentencia if, que puede combinarse con sentencias elseif y/o else.

Para los bucles o interacciones existen las estructuras while y for.

Ventajas del paradigma

Entre las ventajas de la programación estructurada sobre el modelo anterior (hoy llamado despectivamente código espagueti), cabe citar las siguientes:

Los programas son más fáciles de entender, pueden ser leídos de forma secuencial y no hay necesidad de tener que rastrear saltos de líneas (GOTO) dentro de los bloques de código para intentar entender la lógica interna.

La estructura de los programas es clara, puesto que las sentencias están más ligadas o relacionadas entre sí.

Se optimiza el esfuerzo en las fases de pruebas y depuración. El seguimiento de los fallos o errores del programa (debugging), y con él su detección y corrección, se facilita enormemente.

Se reducen los costos de mantenimiento. Análogamente a la depuración, durante la fase de mantenimiento, modificar o extender los programas resulta más fácil.

Los programas son más sencillos y más rápidos de confeccionar.

Se incrementa el rendimiento de los programadores.

En la programación descendente primero se define el módulo principal y después las restantes llamadas a módulos específicos. Cuando se lleva a cabo un diseño descendente es lógico pensar en algún tipo de jerarquía. Cuando esto ocurre es frecuente que la planeación resultante culmine con un diagrama de diseño estructurado.  Este último es diferente del diagrama de flujo convencional   ya que el diagrama de diseño estructurado es más general y señala el sentido de orden, responsabilidad y control que existe en el código de un programa. En este diagrama cada módulo está representado por un rectángulo que contiene un número, el cual indica la posición del módulo dentro del esquema jerárquico del programa. El único módulo que puede existir con un nivel de jerarquía cero es el módulo principal del programa. Después puede tenerse hasta tres módulos de nivel-1.  Estos módulos reflejan las tareas de entrada, salida y procesamiento de información llevadas a cabo por el programa. El procesamiento asociado con operaciones de I/O de información puede estar contenido en un módulo de nivel-1. Ejemplo del diagrama.

La técnica BOTTOM UP es conocida también como ascendente, la diferencia entre el bottom up y el top down es que los módulos son enumerados de forma diferente. En el bottom up se enumeran primero los módulos inferiores hasta llegar al módulo superior.

La diferencia del tipo de diseño ascendente y descendente solo se puede dar a la hora de la programación. Porque en el momento de dibujar la estructura del problema, en las dos formas el diseño queda igual, solamente que los módulos son enumerados en forma diferente, pero esto se hace pensando ya en cómo se va a comenzar a programar. En el diseño ascendente primero se programan los módulos que se encuentran más abajo de la estructura, hasta llegar al primer módulo dibujado.

# data[].attributes.headline
Evolución de lenguaje de programación.  

# data[].attributes.subject
Evolución de lenguaje de programación.  

# data[].attributes.headline
Lista Cronológica de la evolución de lenguaje de programación.    

# data[].attributes.subject
Lista Cronológica de la evolución de lenguaje de programación.    

# data[].attributes.headline
metodología de programación orientada a objetos

# data[].attributes.subject
metodología de programación orientada a objetos

# data[].attributes.body
Características de la POO

Existe un acuerdo acerca de qué características contempla la "orientación a objetos". Las características siguientes son las más importantes:

-Abstracción

Denota las características esenciales de un objeto, donde se capturan sus comportamientos. Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar cómo se implementan estas características. Los procesos, las funciones o los métodos pueden también ser abstraídos, y, cuando lo están, una variedad de técnicas son requeridas para ampliar una abstracción. El proceso de abstracción permite seleccionar las características relevantes dentro de un conjunto e identificar comportamientos comunes para definir nuevos tipos de entidades en el mundo real. La abstracción es clave en el proceso de análisis y diseño orientado a objetos, ya que mediante ella podemos llegar a armar un conjunto de clases que permitan modelar la realidad o el problema que se quiere atacar.

-Encapsulamiento

Significa reunir todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.

-Modularidad

Se denomina modularidad a la propiedad que permite subdividir una aplicación en partes más pequeñas (llamadas módulos), cada una de las cuales debe ser tan independiente como sea posible de la aplicación en sí y de las restantes partes. Estos módulos se pueden compilar por separado, pero tienen conexiones con otros módulos. Al igual que la encapsulación, los lenguajes soportan la modularidad de diversas formas.

-Principio de ocultación

Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica cómo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificación por quien no tenga derecho a acceder a ellas; solamente los propios métodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos no puedan cambiar el estado interno de un objeto de manera inesperada, eliminando efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstracción. La aplicación entera se reduce a un agregado o rompecabezas de objetos.

-Polimorfismo

Comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre; al llamarlos por ese nombre se utilizará el comportamiento correspondiente al objeto que se esté usando. O, dicho de otro modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocación de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en "tiempo de ejecución", esta última característica se llama asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en "tiempo de compilación") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++.

-Herencia

Las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento, permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes. Estos pueden compartir (y extender) su comportamiento sin tener que volver a implementarlo. Esto suele hacerse habitualmente agrupando los objetos en clases y estas en árboles o enrejados que reflejan un comportamiento común. Cuando un objeto hereda de más de una clase se dice que hay herencia múltiple.

-Recolección de basura

La recolección de basura o garbage collection es la técnica por la cual el entorno de objetos se encarga de destruir automáticamente, y por tanto desvincular la memoria asociada, los objetos que hayan quedado sin ninguna referencia a ellos. Esto significa que el programador no debe preocuparse por la asignación o liberación de memoria, ya que el entorno la asignará al crear un nuevo objeto y la liberará cuando nadie lo esté usando. En la mayoría de los lenguajes híbridos que se extendieron para soportar el Paradigma de Programación Orientada a Objetos como C++ u Object Pascal, esta característica no existe y la memoria debe desasignarse expresamente