Download los lenguajes de programación son como un

Document related concepts

Haxe wikipedia , lookup

Programación funcional wikipedia , lookup

Rust (lenguaje de programación) wikipedia , lookup

J (lenguaje de programación) wikipedia , lookup

Racket (lenguaje de programación) wikipedia , lookup

Transcript
1. QUE ES UN LENGUAJE DE PROGRAMACIÓN.
Un lenguaje de programación es un lenguaje inventado para controlar una
máquina, (normalmente, un ordenador). Hay muchísimos, de toda clase de
tipos y características, inventados para facilitar el abordaje de distintos
problemas, el mantenimiento del software, su reutilización, mejorar la
productividad, etc.
los lenguajes de programación son como un lenguaje cualquiera, pero
simplificado y con ciertas normas, para poder transmitir nuestros deseos a la
computadora.
Para que un conjunto de circuitos desempeñen una tarea determinada y nos dé
el resultado que nosotros esperamos, nuestro lenguaje deberá ser traducido en
lenguaje binario cuyo alfabeto es el 0 y el 1, mediante las herramientas
desarrolladas para llevar para llevar a cabo esta tarea, las cuales reciben el
nombre de traductores.
2. CLASIFICACION DE LOS LENGUAJES DE PROGRAMACION
Los lenguajes de programación se pueden clasificar según varios criterios.
Se han encontrado doce en total:
1. Nivel de abstracción.
2. Propósito.
3. Evolución histórica.
4. Manera de ejecutarse.
5. Manera de abordar la tarea a realizar
6. Paradigma de programación.
7. Lugar de ejecución.
8. Concurrencia.
9. Interactividad.
10. Realización visual.
11. Determinismo y productividad.
Hay que tener en cuenta también, que en la práctica, la mayoría de lenguajes
no pueden ser puramente clasificados en una categoría, pues surgen
incorporando ideas de otros lenguajes y de otras filosofías de programación,
pero no importa al establecer las clasificaciones, pues el auténtico objetivo de
las mismas es mostrar los rangos, las posibilidades y tipos de lenguajes que
hay.
1. Nivel de abstracción.
Según el nivel de abstracción, o sea, según el grado de cercanía a la máquina:
LENGUAJES
DE MAQUINA
BAJO NIVEL
NIVEL MEDIO
ALTO NIVEL
LENGUAJE MAQUINA: Es el único que entiende directamente la
computadora, utiliza el alfabeto binario que consta de los dos únicos símbolos 0
y 1, denominados bits (abreviatura inglesa de dígitos binarios). Fue el primer
lenguaje utilizado en la programación de computadoras, pero dejó de utilizarse
por su dificultad y complicación, siendo sustituido por otros lenguajes más
fáciles de aprender y utilizar, que además reducen la posibilidad de cometer
errores.
EJEMPLO
0000
1000
0011
0111
1110
0001
1001
1010
0100
1001
1010
1001
1001
0111
0010
0001
1010
1100
0000
0000
01 A1
89 9A
3A 9C
74 70
E9 20
LENGUAJES DE BAJO NIVEL:
Los lenguajes de bajo nivel son mas fáciles de utilizar que los lenguajes
máquina, pero, al igual que ellos, dependen de la máquina en particular. El
lenguaje de bajo nivel por excelencia es el ensamblador. Las instrucciones en
lenguaje ensamblador son instrucciones conocidas como nemotécnicos. Por
ejemplo, nemotécnicos típicos de operaciones aritméticas son: en inglés, ADD,
SUB, DIV, etc.; en español, SUM,RES,DIV,etc. Una instrucción típica de suma
sería:
ADD M, N, P
Esta instrucción podría significar “sumar el número contenido en la posición de
memoria M al número almacenado en la posición de memoria N y situar el
resultado en la posición de memoria P”. Evidentemente es mucho más sencillo
recordar la instrucción anterior con un nemotécnico que su equivalente en
código máquina”.
0110 1001 1010 1011
Un programa escrito en lenguaje ensamblador no puede ser ejecutado
directamente por la computadora en esto se diferencia esencialmente del
lenguaje máquina, sino que requiere una fase de traducción al lenguaje
máquina.
El programa original escrito en lenguaje ensamblador se denomina programa
fuente y el programa traducido en lenguaje máquina se conoce como programa
objeto, ya directamente entendible por la computadora.
El traductor de programas fuente a objeto es un programa llamado
ensamblador, existente en casi todos los computadores.
Programa fuente en Programa Ensamblador Programa objeto
ensamblador (assembly) (assembler)
código máquina.
en
No se debe confundir el programa ensamblador, encargado de efectuar la
traducción del programa fuente escrito a lenguaje máquina, con el lenguaje
ensamblador, lenguaje de programación con una estructura y gramática
definidas.
Ventajas del lenguaje ensamblador.
Los lenguajes ensambladores presentan la ventaja frente a los lenguajes
máquina de su mayor facilidad de codificación y, en general, su velocidad de
cálculo.
Desventajas del lenguaje ensamblador.
Los inconvenientes más notables de los lenguajes ensambladores son:

Dependencia total de la máquina lo que impide la transportabilidad de los
programas. El lenguaje ensamblador del PC es distinto del lenguaje
ensamblador del Apple Macintosh.

La formación de los programadores es más compleja que la correspondiente a
los programadores de alto nivel, ya que no sólo las técnicas de programación,
sino también el conocimiento del interior de la máquina.
Hoy día los lenguajes ensambladores tienen sus aplicaciones mas reducidas
en la programación de aplicaciones y se centran en aplicaciones de tiempo
real, control de procesos y de dispositivos electrónicos, etc.
LENGUAJES DE NIVEL MEDIO:
Un lenguaje de programación de medio nivel se
los lenguajes de alto nivel y los lenguajes de bajo nivel.
encuentra
entre
Suelen ser clasificados de alto nivel, pero permiten ciertos manejos de bajo
nivel. Son precisos para ciertas aplicaciones como la creación de sistemas
operativos, ya que permiten un manejo abstracto (independiente de la
máquina, a diferencia del lenguaje ensamblador), pero sin perder mucho del
poder y eficiencia que tienen los lenguajes de bajo nivel.
Una característica distintiva, por ejemplo, que convierte al lenguaje de
programación C en un lenguaje de medio nivel y al lenguaje de
programación Pascal en un lenguaje de alto nivel, es que en el primero es
posible manejar las letras como si fueran números (en Pascal no), por el
contrario, en Pascal es posible concatenar las cadenas de caracteres con el
operador suma y copiarlas con la asignación (en C es el usuario el
responsable de llamar a las funciones correspondientes).
Una de las características más peculiares del lenguaje de programación C
es el uso de apuntadores, los cuales son muy útiles en la implementación
de algoritmos como listas enlazadas, tablas hash y algoritmos de
búsqueda y ordenamiento que para otros lenguajes de programación (como
en el lenguaje de programación Java, por ejemplo) suelen ser un poco más
complicados de implementar.
Lenguajes de alto nivel:
Un lenguaje de alto nivel permite al programador escribir las instrucciones
de un programa utilizando palabras o expresiones sintácticas muy similares al
inglés. Por ejemplo, en C se pueden usar palabras tales
como: case, if, for, while, etc. para construir con ellas instrucciones como:
if( numero > 0 ) printf( "El número es positivo" )
que traducido al castellano viene a decir que: si numero es mayor que cero,
entonces, escribir por pantalla el mensaje: "El número es positivo".
Ésta es la razón por la que a estos lenguajes se les considera de alto nivel,
porque se pueden utilizar palabras de muy fácil comprensión para el
programador. En contraposición, los lenguajes de bajo nivel son aquellos que
están más cerca del "entendimiento" de la máquina. Otros lenguajes de alto
nivel
son:
Ada,
BASIC,
COBOL,
FORTRAN,
Pascal,
etc.
Otra carácterística importante de los lenguajes de alto nivel es que, para la
mayoría de las instrucciones de estos lenguajes, se necesitarían varias
instrucciones en un lenguaje ensamblador para indicar lo mismo. De igual
forma que, la mayoría de las instrucciones de un lenguaje ensamblador,
también agrupa a varias instrucciones de un lenguaje máquina.
2 .Propósito.
Según el propósito, es decir, el tipo de problemas a tratar con ellos:
Lenguajes de propósito general: Aptos para todo tipo de tareas:
Ejemplo: C.
Lenguajes de propósito específico: Hechos para un objetivo muy
concreto. Ejemplo: Csound (para crear ficheros de audio).
Lenguajes de programación de sistemas: Diseñados para realizar
sistemas operativos o drivers. Ejemplo: C.
Lenguajes de script: Para realizar tareas varias de control y
auxiliares. Antiguamente eran los llamados lenguajes de
procesamiento por lotes (batch) o JCL (“Job Control Languages”). Se
subdividen en varias clases (de shell, de GUI, de programación web,
etc.). Ejemplos: bash (shell), mIRC script, JavaScript (programación
web).
3 Evolución histórica.
Con el paso del tiempo, se va incrementando el nivel de abstracción, pero en
la práctica, los de una generación no terminan de sustituir a los de la anterior:
Lenguajes de primera generación (1GL): Código máquina.
Lenguajes de segunda generación (2GL): Lenguajes ensamblador.
Lenguajes de tercera generación (3GL): La mayoría de los lenguajes
modernos, diseñados para facilitar la programación a los humanos.
Ejemplos: C, Java.
Lenguajes de cuarta generación (4GL): Diseñados con un propósito
concreto, o sea, para abordar un tipo concreto de problemas.
Ejemplos:NATURAL, Mathematica.
Lenguajes de quinta generación (5GL): La intención es que el
programador establezca el qué problema ha de ser resuelto y las
condiciones a reunir, y la máquina lo resuelve. Se usan en inteligencia
artificial. Ejemplo: Prolog.
4. Manera de ejecutarse.
Según la manera de ejecutarse:
Lenguajes compilados: Un programa traductor traduce el código del
programa (código fuente) en código máquina (código objeto). Otro
programa, el enlazador, unirá los ficheros de código objeto del
programa principal con los de las librerías para producir el programa
ejecutable. Ejemplo: C.
Lenguajes interpretados: Un programa (intérprete), ejecuta las
instrucciones del programa de manera directa. Ejemplo: Lisp.
También los hay mixtos, como Java, que primero pasan por una fase de
compilación en la que el código fuente se transforma en “bytecode”, y
este “bytecode” puede ser ejecutado luego (interpretado) en
ordenadores con distintas arquitecturas (procesadores) que tengan
todos instalados la misma“máquina virtual” Java.
5. Manera de abordar la tarea a realizar.
Según la manera de abordar la tarea a realizar, pueden ser:
Lenguajes imperativos: Indican cómo hay que hacer la tarea, es decir,
expresan los pasos a realizar. Ejemplo: C.
Lenguajes declarativos: Indican qué hay que hacer. Ejemplos: Lisp,
Prolog. Otros ejemplos de lenguajes declarativos, pero que no son
lenguajes de programación, son HTML (para describir páginas web)
oSQL (para consultar bases de datos).
6. Paradigma de programación.
El paradigma de programación es el estilo de programación empleado.
Algunos lenguajes soportan varios paradigmas, y otros sólo uno. Se puede
decir que históricamente han ido apareciendo para facilitar la tarea de
programar según el tipo de problema a abordar, o para facilitar el
mantenimiento del software, o por otra cuestión similar, por lo que todos
corresponden a lenguajes de alto nivel (o nivel medio), estando los lenguajes
ensambladores “atados” a la arquitectura de su procesador correspondiente.
Los principales son:
Lenguajes de programación procedural: Divide el problema en partes
más pequeñas, que serán realizadas por subprogramas (subrutinas,
funciones, procedimientos), que se llaman unas a otras para ser
ejecutadas. Ejemplos: C, Pascal.
Lenguajes de programación orientada a objetos: Crean un sistema
de clases y objetos siguiendo el ejemplo del mundo real, en el que unos
objetos realizan acciones y se comunican con otros objetos.
Ejemplos:C++, Java.
Lenguajes de programación funcional: La tarea se realiza evaluando
funciones, (como en Matemáticas), de manera recursiva. Ejemplo: Lisp.
Lenguajes de programación lógica: La tarea a realizar se expresa
empleando lógica formal matemática. Expresa qué computar. Ejemplo:
Prolog.
Hay muchos paradigmas de programación: Programación
programación reflexiva, programación orientada a procesos, etc.
genérica,
7. Lugar de ejecución.
En sistemas distribuidos, según dónde se ejecute:
Lenguajes de servidor: Se ejecutan en el servidor. Ejemplo: PHP es
el más utilizado en servidores web.
Lenguajes de cliente: Se ejecutan en el cliente. Ejemplo: JavaScript
en navegadores web.
8. Concurrencia.
Según admitan o no concurrencia de procesos, esto es, la ejecución simultánea
de varios procesos lanzados por el programa:
Lenguajes concurrentes. Ejemplo: Ada.
Lenguajes no concurrentes. Ejemplo: C
9. Interactividad.
Según la interactividad del programa con el usuario u otros programas:
Lenguajes orientados a sucesos: El flujo del programa es controlado
por la interacción con el usuario o por mensajes de otros
programas/sistema operativo, como editores de texto, interfaces
gráficos de usuario (GUI) o kernels. Ejemplo: VisualBasic, lenguajes
de programación declarativos.
Lenguajes no orientados a sucesos: El flujo del programa no
depende de sucesos exteriores, sino que se conoce de antemano,
siendo los procesos batch el ejemplo más claro (actualizaciones de
bases de datos, colas de impresión de documentos, etc.). Ejemplos:
Lenguajes de programación imperativos.
10. Realización visual.
Según la realización visual o no del programa:
Lenguajes de programación visual: El programa se realiza moviendo
bloques de construcción de programas (objetos visuales) en un interfaz
adecuado para ello. No confundir con entornos de programación visual,
como Microsoft Visual Studio y sus lenguajes de programación
textuales (como Visual C#). Ejemplo: Mindscript.
Lenguajes de programación textual: El código del programa se realiza
escribiéndolo. Ejemplos: C, Java, Lisp.
11. Determinismo.
Según se pueda predecir o no el siguiente estado del programa a partir del
estado actual:
Lenguajes deterministas. Ejemplos: Todos los anteriores.
Lenguajes probabilísticos o no deterministas: Sirven para explorar
grandes espacios de búsqueda, (como gramáticas), y en la
investigación teórica de hipercomputación. Ejemplo: mutt (generador
de texto aleatorio).
12. Productividad.
Según se caractericen por tener virtudes útiles o productivas, u oscuras y
enrevesadas:
Lenguajes útiles o productivos: Sus virtudes en cuanto a eficiencia,
sencillez, claridad, productividad, etc., motiva que sean utilizados en
empresas, administraciones públicas y/o en la enseñanza. Ejemplos:
Cualquier lenguaje de uso habitual (C, Java, C++, Lisp, Python,
Ruby,).
Lenguajes esotéricos o exóticos: Inventados con la intención de ser
los más raros, oscuros, difíciles, simples y/o retorcidos de los
lenguajes, para diversión y entretenimiento de frikis programadores. A
veces exploran nuevas ideas en programación. Ejemplo: Brainfuck.
3. QUE ES EL LENGUAJE C + +
C++ es un lenguaje de programación diseñado a mediados de los años 1980
por Bjarne Stroustrup. La intención de su creación fue el extender al
exitoso lenguaje de programación C con mecanismos que permitan la
manipulación de objetos. En ese sentido, desde el punto de vista de
los lenguajes orientados a objetos, el C++ es un lenguaje híbrido.
Posteriormente se añadieron facilidades de programación genérica, que se
sumó a los otros dos paradigmas que ya estaban admitidos (programación
estructurada y la programación orientada a objetos). Por esto se suele decir
que el C++ es un lenguaje de programación multiparadigma.
Actualmente existe un estándar, denominado ISO C++, al que se han adherido
la mayoría de los fabricantes de compiladores más modernos. Existen también
algunos intérpretes, tales como ROOT.
Una particularidad del C++ es la posibilidad de redefinir los operadores, y de
poder crear nuevos tipos que se comporten como tipos fundamentales.
El nombre C++ fue propuesto por Rick Mascitti en el año 1983, cuando el
lenguaje fue utilizado por primera vez fuera de un laboratorio científico. Antes
se había usado el nombre "C con clases". En C++, la expresión "C++" significa
"incremento de C" y se refiere a que C++ es una extensión de C.
4. CARACTERÍSTICAS DEL LENGUAJE C++
Las principales características del Lenguaje C son:
Tiene un conjunto completo de instrucciones de control
Permite la agrupación de instrucciones.
Incluye el concepto de puntero (variable que contiene la
dirección de otra variable).
Los argumentos de las funciones se transfieren por su
valor.
E/S no forma parte del lenguaje, sino que se proporciona a través
de una biblioteca de funciones.
Permite la separación de un programa en módulos que admiten
compilación independiente.
Originalmente el Lenguaje C estuvo muy ligado al sistema operativo
UNIX como se había mencionado antes que, en su mayor parte,
está escrito en C. Más adelante se comenzó a utilizar en otros
sistemas operativos para programar editores, compiladores, etc.
Aunque se le conoce como un lenguaje de programación de
sistemas, no se adapta mal al resto de aplicaciones. De hecho, hoy
en día un alto porcentaje de software para ordenadores personales
está escrito en Lenguaje C. Por ejemplo, el sistema operativo MSDOS.
Algunas de las características más importantes que definen el
lenguaje y que han permitido que sea tan popular, como lenguaje
de programación son:
Tamaño pequeño.
Uso extensivo de llamadas a funciones.
Comandos breves (poco tecleo).
Lenguaje estructurado.
Programación de bajo nivel (nivel bit)
Implementación de apuntadores uso extensivo de
apuntadores para la memoria, arreglos, estructuras y
funciones
Las diversas razones por la cual se ha convertido en un
lenguaje de uso profesional son:
El uso de constructores de alto nivel
El poder manejar actividades de bajo-nivel.
El generar programas eficientes.
La posibilidad de poder ser compilado en una variedad
de computadoras, con pocos cambios (portabilidad).
Un punto en contra es que tiene una detección pobre de
errores, lo cual en ocasiones es problemático para los
principiantes
5. TIPOS DE DATOS
C++ tiene los siguientes tipos fundamentales:
Caracteres: char (también es un entero), wchar_t
Enteros: short, int, long, long long
Números en coma flotante: float, double, long double
Booleanos: bool
Vacío: void
El modificador unsigned se puede aplicar a enteros para obtener números sin
signo (por omisión los enteros contienen signo), con lo que se consigue un
rango mayor de números naturales.
Tamaños asociados
Tamaños de tipos primitivos bajo i386 (GCC)
Tipo
Número de Bits
char
8
short
16
int
32
float
32
double
64
Según
la
máquina
y el
compilador que se utilice los
tipos primitivos pueden ocupar
un determinado tamaño en
memoria. La siguiente lista
ilustra el número de bits que
ocupan los distintos tipos primitivos en la arquitectura x86.
Otras arquitecturas pueden requerir distintos tamaños de tipos de datos
primitivos. C++ no dice nada acerca de cuál es el número de bits en un byte, ni
del tamaño de estos tipos; más bien, ofrece solamente las siguientes "garantías
de tipos":


Un tipo char tiene el tamaño mínimo en bytes asignable por la máquina, y
todos los bits de este espacio deben ser "accesibles".
El tamaño reconocido de char es de 1. Es decir, sizeof(char) siempre
devuelve 1.

Un tipo short tiene al menos el mismo tamaño que un tipo char.
 Un tipo long tiene al menos el doble tamaño en bytes que un tipo short.
 Un tipo int tiene un tamaño entre el de short y el de long, ambos inclusive,
preferentemente el tamaño de un apuntador de memoria de la máquina.
 Un tipo unsigned tiene el mismo tamaño que su versión signed.
Wchar_t
Para la versión del estándar que se publicó en 1998, se decidió añadir el tipo
de dato wchar_t, que permite el uso de caracteres UNICODE, a diferencia del
tradicional char, que contempla simplemente al código de caracteres ASCII
extendido. A su vez, se ha definido para la mayoría de las funciones y clases,
tanto de C como de C++, una versión para trabajar con wchar_t, donde
usualmente se prefija el carácter w al nombre de la función (en ocasiones el
carácter es un infijo). Por ejemplo:



strcpy - wstrcpy
std::string - std::wstring
std::cout - std::wcout
Cabe resaltar que en C se define wchar_t como:
typedef unsigned short wchar_t;
Mientras que en C++ es en sí mismo un tipo de dato.
La palabra reservada "void"
La palabra reservada void define en C++ el concepto de no existencia o no
atribución de un tipo en una variable o declaración. Como tal, puede ser usada
para destacar que una función no recibe parámetros, como en:
int funcion (void);
Aunque la tendencia actual es la de no colocar la palabra "void".
Además se utiliza para determinar que una función no retorna un valor, como
en:
void funcion (int parametro);
Cabe destacar que void no es un tipo. Una función como la declarada
anteriormente no puede retornar un valor por medio de return: la palabra clave
va sola. No es posible una declaración del tipo:
void t; //Está mal
En este sentido, void se comporta de forma ligeramente diferente a como lo
hace en C, especialmente en cuanto a su significado en declaraciones y
prototipos de funciones.
Sin embargo, la forma especial void * indica que el tipo de datos es un puntero.
Por ejemplo:
void *memoria;
Indica que memoria es un puntero a alguna parte, donde se guarda información
de algún tipo. El programador es responsable de definir estos "algún",
eliminando toda ambigüedad. Una ventaja de la declaración "void *" es que
puede representar a la vez varios tipos de datos, dependiendo de la operación
de cast escogida. La memoria que hemos apuntado en alguna parte, en el
ejemplo anterior, bien podría almacenar un entero, un flotante, una cadena de
texto o un programa, o combinaciones de éstos. Es responsabilidad del
programador recordar qué tipo de datos hay y garantizar el acceso adecuado.
6. ESTRUCTURA DE UN PROGRAMA EN C + +.
Mediante el siguiente ejemplo de explicara la estructura base de cualquier
programa en C++.
/* Esta cabecera permite usar los objetos que encapsulan los
descriptores stdout
y stdin: cout(<<) y cin(>>)*/
#include <iostream>
using namespace std;
int main()
{
cout << " Hola Mundo " << endl;
return 0;
}
Explicación:
Cuando se escriben programas es muy útil agregar comentarios que ayuden a
explicar lo que realiza un programa, en C++ se escribe de la siguiente manera
/* Este es un comentario al estilo C */
Al usar la directiva #include estamos diciéndole al compilador que busque e
interprete todos los elementos definidos en el archivo que acompaña la
directiva (en este caso, iostream).
Para evitar sobrescribir los elementos ya definidos al ponerles igual nombre, se
crearon los espacios de nombres o namespace del singular en inglés. En este
caso hay un espacio de nombres llamado std, que es donde se incluyen las
definiciones de todas las funciones y clases que conforman
la biblioteca estándar de C++.
Al incluir la sentencia using namespace std le estamos diciendo al compilador
que usaremos el espacio de nombres std por lo que no tendremos que incluirlo
cuando usemos elementos de este espacio de nombres, como pueden ser los
objetos cout y cin, que representan el flujo de salida estándar (típicamente la
pantalla o una ventana de texto) y el flujo de entrada estándar (típicamente el
teclado).
La definición de funciones es igual que en C, salvo por la característica de que
si main no va a recoger argumentos, no tenemos por qué ponérselos, a
diferencia de C, donde había que ponerlos explícitamente, aunque no se fueran
a usar. Queda solo comentar que el símbolo << se conoce como operador de
inserción, y grosso modo está enviando a cout lo que queremos mostrar por
pantalla para que lo pinte, en este caso la cadena "Hola mundo". El mismo
operador << se puede usar varias veces en la misma sentencia, de forma que
gracias a esta característica podremos concatenar el objeto endl al final, cuyo
resultado será imprimir un retorno de línea.
Despues de colocar main ( ) es decir nuestro indicador que comienza el
programa, ya podemos comenzar con la programacion, ya que la programacion
va en el cuerpo del programa, se debe indicar cual es el cuerpo, osea los
limites. En un programa los limites son marcados por el simbolo “las llaves “,
es decir { }
{
....
.......
}
Por último 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
Variables y constantes
DECLARACIÓN DE VARIABLES Y CONSTANTES
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 declarán
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
Constantes
Constantes
int a;
const int a =
100;
#define a
100
float b;
const float b
= 100;
#define b
100
Nota:
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 numerica 3.1416 y esta representa al número pi,
entonces podemos hacer declaraciones tales como:
#define
pi
3.1416
En este caso podremos usar la palabra pi en cualquier parte del
programa y el compilador se encargará de cambiar dicho simbolo 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.
7. QUE ES UNA LIBRERÍA,CUALES ON LAS MASCOMUNES
C++ no llega al nivel de simplicidad de su antecesor C, pero al igual que aquél,
tampoco dispone de utilidades o funciones para entrada o salida
implementadas en el propio lenguaje, de modo que estas y otras muchas,
como manejo de cadenas de caracteres (strings), manejo de ficheros,
funciones matemáticas Etc. son implementadas en forma de librerías
externas.
Una librería es un conjunto de recursos (algoritmos) prefabricados, que
pueden ser utilizados por el programador para realizar determinadas
operaciones. Las declaraciones de las funciones utilizadas en estas librerías,
junto con algunas macros y constantes predefinidas que facilitan su utilización,
se agrupan en ficheros de nombres conocidos que suelen encontrarse en sitios
predefinidos. Por ejemplo, en los sistemas UNIX, en /usr/include. Estos
ficheros se suelen llamar "de cabecera", porque es tradición utilizar las
primeras líneas del programa para poner las directivas#include que los incluirá
en el fuente durante la fase de preprocesado .
Clases de librerías
Los compiladores C++ incluyen un amplio repertorio de clases, funciones y
macros que permiten realizar una amplia variedad de tareas, incluyendo
entradas/salidas de bajo y alto nivel; manipulación de cadenas alfanuméricas y
ficheros; control de procesos (incluyendo multiproceso); manejo de memoria;
cálculos matemáticos y un largo etcétera.
Este repertorio de recursos es denominado colectivamente como "Rutinas de
librería"; "Librerías de ejecución" RTL ("Runtime Librarys") o simplemente
"Librerías". Puede decirse que el lenguaje aislado (tal cual) no tiene
prácticamente ninguna utilidad sin la concurrencia de estas utilidades. El
Estándar C++ las clasifica según su utilidad:










Soporte del lenguaje
Diagnóstico
Utilidades generales
Cadenas alfanuméricas ("Strings")
Localización
Contenedores
Iteradores
Algoritmos
Cálculo numérico
Entrada/Salida
Librería Estándar C++
Para poner un poco de orden, el Estándar C++ define la denominada Librería
Estándar que debe acompañar a cada implementación del compilador que se
adhiera al estándar. Es decir: la norma determina cuales son, como se llaman y
como se utiliza este conjunto de algoritmos que deben acompañar (como
mínimo) a cada implementación del compilador que quiera llamarse "Estándar".
La última versión, ISO/IEC 14882 del año 1998, especifica que se compone de
32 ficheros de cabecera de nombres fijos y conocidos agrupados según la
funcionalidad de los algoritmos. Son los siguientes:
Ficheros
<algorithm>
<bitset>
Funcionalidad/funciones
Parte de la STL que describe los algoritmos.
Parte de la STL relativa a contenedores tipo bitset . Set de
valores booleanos.
<complex>
Parte de la librería numérica de la STL relativa a los complejos.
<deque>
Parte de la STL relativa a contenedores tipo deque; un tipo de
colas: "Double-ended-queue".
<exception> Parte de la librería de diagnóstico relativa al manejo de
excepciones.
<fstream>
Flujos hacia/desde ficheros.
<functional> Parte de la STL relativa a Objetos-función.
<iomanip>
Manipuladores.
<ios>
Supreclases para manejo de flujos de E/S.
<iosfwd>
Contiene declaraciones adelantadas de todas las plantillas de
flujos y sus typedefs estándar. Por ejemplo ostream.
<iostream>
Parte del a STL que contiene los algoritmos estándar de E/S.
<istream>
Algoritmos estándar de flujos de entrada.
<iterator>
Parte de la STL relacionada con iteradores , un tipo de puntero
que permite utilizar los algoritmos de la Librería con las
estructuras de datos representadas por los contenedores.
<limits>
Descripción de propiedades dependientes de la implementación
que afectan a los tipos fundamentales.
<list>
Parte de la STL relativa a contenedores tipo list ; listas
doblemente enlazadas
<locale>
Parte de la STL relativa a la internacionalización.
<map>
Parte de la STL relativa a contenedores tipo map.
<memory>
Utilidades relativas a la gestión de memoria, incluyendo
asignadores y punteros inteligentes.
<new>
Manejo de memoria dinámica
<numeric>
Parte de la librería numérica de la STL relativa a operaciones
numéricas.
<ostream>
Algoritmos estándar para los flujos de salida.
<queue>
Parte de la STL relativa a contenedores tipo queue ; colas de
objetos .
<set>
Parte de la STL relativa a contenedores tipo set.
<sstream>
Flujos hacia/desde cadenas alfanuméricas.
<stack>
Parte de la STL relativa a contenedores tipo stack ; pilas de
objetos .
<stdexcept>
Parte de la STL relativa a las clases de las que derivan los
objetos lanzados por las excepciones ocasionadas en los
algoritmos de la propia STL y otras expresiones. Estas clases
son utilizadas para reportar errores detectados durante
runtime. Los usuarios también pueden utilizar excepciones
para reportar errores en sus propios programas.
<streambuf> Parte de la STL relativa al Almacenamiento de flujos de E/S
("Stream buffers"). Define los tipos que controlan la capa de
transporte.
<string>
Parte de la STL relativa a contenedores tipo string ; una
generalización de las cadenas alfanuméricas para albergar
cadenas de objetos.
<typeinfo>
Mecanismo de identificación de tipos en tiempo de ejecución.
<utility>
Parte de la STL que contiene elementos auxiliares como
operadores y pares (pairs).
<valarray>
Parte de la librería numérica de la STL relativa a manejo de
matrices numéricas ()
<vector>
Parte de la STL relativa a los contenedores tipo vector; una
generalización de las matrices unidimensionales C/C++.
Es digno de mención que aunque generalmente las librerías no aportan
ninguna característica al lenguaje (se supone que son utilidades auxiliares que
no forman parte del lenguaje propiamente dicho), una pequeña porción de la
Librería Estándar C++ sí aporta características que se consideran
pertenecientes a este, de forma que deben estar presentes los ficheros de
cabecera correspondientes si se desea usarlas. En concreto se refieren a los
siguientes elementos:




Operadores new, new[], delete y delete.
Clase type_info que corresponde al mecanismo RTTI de identificación
de tipos en tiempo de ejecución representado por el operador typeid.
Rutinas de inicio y terminación.
Las excepciones estándar lanzadas por los algoritmos anteriores.