deas 2015

Las computadoras son algunas de las herramientas más versátiles que tenemos disponibles hoy en día. Estas son capaces de:
  • Realizar impresionantes hazañas de computación, 
  • Permitir intercambiar información fácilmente, independientemente de su ubicación física.
  • Simplifican muchas tareas diarias y nos permiten automatizar muchos procesos que serian tediosos para realizar de otra manera. 
Sin embargo, las computadoras aún no son inteligentes como nosotros; a estas se les debe decir en términos inequívocos, exactamente lo que se supone que deben hacer y además no olvidemos que sus lenguas nativas son muy diferentes a todo lo que hablamos.
Por lo tanto, hay una tremenda barrera de idiomas entre una persona que desea que una computadora haga algo y la computadora que normalmente requiere instrucciones en su idioma nativo ó "código de máquina", para hacer cualquier cosa. Hasta ahora, las computadoras averiguan lo que deben hacer basándose en programas que creamos, los cuales son conjuntos de instrucciones que la computadora puede entender y seguir.

Visión General de los Programas y los Lenguajes de Programación

Con el fin de comunicar mejor a nuestros ordenadores qué es exactamente lo que queremos que hagan, hemos desarrollado una amplia gama de lenguajes de programación para facilitar el proceso de comunicación.
Dependiendo del tipo de proyecto, hay muchos factores que deben tenerse en cuenta al elegir un lenguaje:

Lenguaje Compilado, interpretado o compilado por JIT:

Los lenguajes compilados son aquellos que se traducen al idioma nativo de la máquina de destino mediante un programa denominado compilador. Esto puede dar como resultado un código muy rápido, especialmente si el compilador es eficaz en la optimización, sin embargo el código resultante puede no tener una portabilidad eficaz  en todos los sistemas operativos y el proceso de compilación puede tomar un tiempo.
Los lenguajes Interpretados son los leídos por un programa llamado intérprete y ejecutados por ese programa. Aunque son tan portátiles como su intérprete y no tienen tiempos de compilación largos, además suelen ser mucho más lentos que un programa compilado equivalente.
Por último los lenguajes compilados just-in-time (o compilados por JIT),  son lenguajes que se compilan rápidamente cuando los programas escritos en ellos necesitan ser ejecutados (normalmente con muy poca compilacion.), lo que ofrece un equilibrio entre rendimiento y portabilidad.

Alto o Bajo Nivel de un Lenguaje: 

Esto se refiere a lo que la naturaleza del lenguaje refleja en el sistema subyacente. En palabras más fáciles el nivel del lenguaje se refiere a la similitud del lenguaje con el idioma nativo de una computadora. Cuanto más alto es el nivel, menos similar es.
Un lenguaje de bajo nivel es generalmente bastante similar al código de máquina y por lo tanto es más adecuado para programas como controladores de dispositivos o programas de alto rendimiento que realmente necesitan acceso al hardware.
Generalmente, el término esta reservado para el propio código de máquina y los lenguajes de ensamblaje, aunque muchos idiomas ofrecen elementos de bajo nivel. Debido a que un lenguaje de bajo nivel está sujeto a todos los matices del hardware al que accede, es difícil entonces ser portable en otras plataformas. Los lenguajes de bajo nivel prácticamente nunca se interpretan, ya que esto generalmente esta en contra de su propósito.
Un lenguaje de alto nivel se centra en conceptos que son fáciles de entender por un humano, como objetos o funciones matemáticas. Por lo general, un lenguaje de alto nível es más fácil de entender que un lenguaje de bajo nivel y usted puede tardar menos tiempo en desarrollarlo en comparación con un lenguaje de bajo nivel. Sin embargo, cabe rescatar que no es imposible mezclar funcionalidades de alto nivel y bajo nivel en un lenguaje.

Sistemas de Tipos:

Un sistema de tipos se refiere a las reglas que deben seguir los diferentes tipos de variables. Algunos lenguajes (incluyendo la mayoria de los lenguajes de ensamblaje) no tienen tipos y por lo tanto esta sección no se aplica a ellos. No en tanto, como la mayoría de lenguajes (incluyendo C++) tienen tipos, esta información es sumamente importante.
Fuerza del tipado: Fuerte ó Débil
Un sistema de tipado fuerte pone restricciones sobre cómo los diferentes tipos de variables se pueden convertir entre sí sin ninguna conversion de declaraciones. Un sistema de tipado fuerte ideal prohibiría "lanzamientos implícitos"  a los tipos que no tienen ningun sentido, tal como un entero a un objeto Fruit, mientras que un sistema de tipado débil trataría de encontrar alguna forma de hacer funcionar el trabajo asignado.
Expresión del tipado: Manifiesto ó Inferido
Eso trata de cómo el compilador/intérprete de un lenguaje infiere los tipos de variable. Muchos lenguajes requieren que los tipos de variables se definan explícitamente y, por tanto, se basan en el tipado manifiesto. Algunos, sin embargo, infieren el tipo de variable basada en los contextos en los que se utiliza, y por lo tanto utilizan el tipado inferido.

Comprobación de Tipado: Estático o Dinámico

Si un lenguaje se escribe de forma estática, entonces el compilador/intérprete hace la comprobación de tipado una vez antes de ejecutar/compilar el programa. Si se selecciona dinámicamente el lenguaje, los tipos se comprueban en tiempo de ejecución.

Seguridad del Tipado: Seguro o Inseguro

Estos se refieren al grado en que un lenguaje prohíbe las operaciones en las variables escritas, que podrían conducir a un comportamiento indefinido o errores. Un lenguaje seguro hará más para asegurar que tales operaciones o conversiones no se produzcan, mientras que un lenguaje inseguro le dará más responsabilidad al usuario en este sentido.

Paradigmas Soportados:

Un paradigma de programación es una metodología o forma de programación que soporta un lenguaje de programacion;
Aquí esta un resumen de algunos paradigmas comunes:
Declarativa: aquí las sentencias que se utilizan, describen el problema que se quiere solucionar; se programa diciendo lo que se quiere resolver a nivel de usuario, pero no las instrucciones necesarias para solucionarlo. Esto último se realizará mediante mecanismos internos de inferencia de información a partir de la descripción realizada.
Funcional: La programación funcional es un subconjunto de la programación declarativa que trata de expresar problemas en términos de ecuaciones y funciones matemáticas. Se sale de su camino para evitar los conceptos de estados y variables mutables que son comunes en lenguajes imperativos.
Imperativo: En la programación imperativa se describe paso a paso un conjunto de instrucciones que deben ejecutarse para variar el estado del programa y hallar la solución, es decir, un algoritmo en el que se describen los pasos necesarios para solucionar el problema.
Generica:  La programación genérica se centra en la escritura de algoritmos de esqueleto en terminos de tipos, que se especificaran cuando el algoritmo se utilize realmente, lo que permite cierta tolerancia a los programadores que desean evitar estrictas reglas de tipificación fuerte. Puede ser un paradigma muy poderoso si esta bien implementado. En palabras más entendibles se dice que es un tipo de programación que está mucho más centrado en algoritmos que en datos. La idea de esta forma de programar pretende generalizar las funciones utilizadas para que puedan usarse en más de una ocasión.
Estructurado: Los lenguajes de programación estructurados tienen como objetivo proporcionar alguna forma de estructura notable a un lenguaje, como el control intuitivo sobre el orden en que se ejecutan las sentencias. Tales lenguajes generalmente desprecian "saltos", como los proporcionados por la declaracion goto en C y C++.
De Procedimiento: Aunque a veces se utiliza como sinónimo de programacion imperativa, un lenguaje de programación de procedimiento tambien puede referirse a un lenguaje de programacion estructurado imperativo que apoya el concepto de procedimientos y subrutinas (tambien conocidas como funciones en C y C++).
Orientado a Objetos: Este es un subconjunto de la programación estrucutrada, que expresa programas en términos de "objetos", que estan diseñados para modelar objetos como en el mundo real. Tal paradigma permite que el código se reutilice de manera extraordinaria y se entienda de manera extremamente fácil.

Estandarización:   

Estandarizar no significa que todas las aplicaciones construidas deban lucir igual, ni siquiera que las secciones de un sitio web por ejemplo deban llamarse de una o de otra manera, significa que las aplicaciones deben construirse en base a normas.
Algunos lenguajes estan estandarizados por el Instituto Americano de Estándares Nacionales (ANSI), algunos están estandarizados por la Organización Internacional de Normalización (ISO) y algunas tienen un estandard informal pero "de facto" que no son mantenidas por nignuna organizacion de estándares.

Características de C++ como lenguaje:

Ahora que toda la teoría necesaria ha sido cubierta, es posible explicar lo que C++ tiene para ofrecer como un lenguaje de programación; C++ es un lenguaje abierto ISO-Estandarizado. Durante un tiempo, C++ no tenía un estándar oficial y fué mantenido por un estándar de facto, sin embargo desde 1998, C++ está estandarizado por un comité de la ISO.
Se puede acceder a su página aquí.
C++ es un lenguaje compilado, es decir se compila directamente al código nativo de una maquina, lo que le permite ser uno de los lenguajes más rápidos del mundo, si está optimizado.
C++ es un lenguaje fuertemente tipado e inseguro; esto quiere decir que el lenguaje espera que el programador sepa lo que él o ella está haciendo, pero permite cantidades increíbles de control como resultado.
C++ apoya al tipado manifiesto e inferido; a partir del último estándar de C++; este admite escritura tanto manifiesta como inferida, permitiendo flexibilidad y un medio de evitar la verbosidad donde se desee.
C++ soporta la comprobación estática y dinámica del tipo. C++ permite que las conversiones de tipo se comprueben en tiempo de compilacion o en tiempo de ejecución, ofreciendo de nuevo otro grado de flexibilidad. Sin embargo, la mayoria de las comprobaciones de tipo C++ son estáticas.
C++ ofrece muchas opciones de paradigmas. C++ ofrece un soporte notable para los paradigmas de programacion de procedimientos, genéricos y orientados a objetos, con muchos otros paradigmas pósibles.
C++ es portátil: como uno de los idiomas más utilizados del mundo y como un lenguaje abierto, C++ tiene una amplia gama de compiladores que se ejecutan en muchas plataformas diferentes que lo apoyan. El Código que utiliza exclusivamente la biblioteca estándar de C++ se ejecutará en muchas plataformas con pocos o ningun cambio.
C++ es compatible con C: C++ es compatible con casi todo el código C. C++ puede utilizar C con pocas modificaciones del código de las bibliotecas.
C++ tiene un soporte increíble de bibliotecas: una búsqueda de biblioteca en el popular sitio web de gestion de proyectos SourceForge producirá más de 3000 resultados para bibliotecas C++. Puede encontrar un enlace a los resultados de busqueda aqui.
Con estos conceptos bien aprendidos y entendidos conseguimos comenzar de forma más provechosa nuestra caminada hacia el aprendizaje de este maravilloso lenguaje! 

Publicar un comentario

Con la tecnología de Blogger.