Sei sulla pagina 1di 9

UNIVERSIDAD CATLICA DEL NORTE

FACULTAD DE INGENIERA Y CIENCIAS GEOLGICAS DEPARTAMENTO DE INGENIERA DE SISTEMAS Y COMPUTACIN

Lenguajes de Programacin
C /C++

Alumno: Jefferson Williams. Javier Garrido. Osman Cordero

Carrera: Ingeniera de Ejecucin en Computacin e Informtica Profesor: Christian Miranda M.

Introduccin

La llegada de C cambi para siempre la forma en que se manejaban los lenguajes en su poca. Los lenguajes de programacin se creaban generalmente para fines acadmicos o aplicaciones para empresas o entidades financieras las cuales eran complejas en su programacin y poco poderosas en su resultado (por ejemplo Cobol que se escriban un montn de lneas para hacer una simple suma). C fue diseado, implementado y desarrollado por programadores que trabajaban en problemas reales, lo cual lo hizo muy usado por programadores en todos lados y durante los 1980s y parte de los 90s. C++ naci como la evolucin de C (el nombre nace de C mejorado o C+1), donde este lenguaje tomo rasgos de su predecesor y le agreg un sistema donde podra resolver ms fcil problemas de la vida real (programacin orientada a objeto) donde cada objeto podra interactuar con otros y tener funciones entre si. De esta forma se hizo mucho ms fcil poder crear programas ms grandes y complejos.

Historia de C y C++
En 1972 Dennis Ritchie (de los Laboratorios Bell de AT&T) disea C a partir de B de Thompson, aportando un diseo de tipos y estructuras de datos que consiguen una claridad y eficacia en el lenguaje muy superior.

Es un lenguaje que permite realizar una programacin estructurada economizando las expresiones, con abundancia de operadores y tipos de datos, codificando en alto y bajo nivel simultneamente, reemplazando ventajosamente la programacin en ensamblador y permitiendo una utilizacin natural de las funciones primitivas del sistema. Adems, no est orientado a ningn rea en especial y sobre todo consigue un cdigo objeto altamente optimizado que repercute en que los programas sean muy rpidos.

/* "Hola mundo" escrito en C */ #include <stdio.h> void main() { printf( "Hola mundo" ); }

Paralelamente, en 1980 (Mientras aun se tramitaban los estndares ANSI e ISO de C) surge C++ de la mano de Bjarne Stroustrup (tambin de Laboratorios Bell de AT&T). Disea este lenguaje con el objetivo de aadir a C nuevas caractersticas: clases y funciones virtuales (de SIMULA67), tipos genricos y expresiones (de ADA), la posibilidad de declarar variables en cualquier punto del programa (de ALGOL68), y sobre todo, un autntico motor de objetos con herencia mltiple que permite combinar la programacin imperativa de C con la programacin orientada a objetos. Estas nuevas caractersticas mantienen siempre la esencia del lenguaje C: otorgan el control absoluto de la aplicacin al programador, consiguiendo una velocidad muy superior a la ofrecida por otros lenguajes. El siguiente hecho fundamental en la evolucin de C++ es sin duda la incorporacin de la librera STL aos ms tarde, obra de Alexander Stepanov y Adrew Koening. Esta librera de clases con contenedores y algoritmos genricos proporciona a C++ una potencia nica entre los lenguajes de alto nivel. Debido al xito del lenguaje, en 1990 se renen las organizaciones ANSI e ISO para definir un estndar que formalice el lenguaje. El proceso culmina en 1998 con la aprobacin del ANSI C++. /* "Hola mundo" escrito en C++ */ #include <iostream> void main() { std::cout << "Hola mundo"; }

Lenguaje C
Al igual que B, es un lenguaje orientado a la implementacin de Sistemas Operativos, concretamente Unix. C es apreciado por la eficiencia del cdigo que produce y es el lenguaje de programacin ms popular para crear

software de sistemas, aunque tambin se utiliza para crear aplicaciones, como por ejemplo OpenOffice, cuyo principal lenguaje de programacin es C. Ideologa Uno de los objetivos de diseo del lenguaje C es que slo sean necesarias unas pocas instrucciones en lenguaje mquina para traducir cada elemento del lenguaje, sin que haga falta un soporte intenso en tiempo de ejecucin. Es muy posible escribir C a bajo nivel de abstraccin; de hecho, C se us como intermediario entre diferentes lenguajes. Propiedades Un ncleo del lenguaje simple, con funcionalidades aadidas importantes, como funciones matemticas y de manejo de archivos, proporcionadas por bibliotecas. Es un lenguaje muy flexible que permite programar con mltiples estilos. Uno de los ms empleados es el estructurado "no llevado al extremo" (permitiendo ciertas licencias de ruptura). Un sistema de tipos que impide operaciones sin sentido. Usa un lenguaje de pre procesado, el preprocesador de C, para tareas como definir macros e incluir mltiples archivos de cdigo fuente. Acceso a memoria de bajo nivel mediante el uso de punteros. Interrupciones al procesador con uniones. Un conjunto reducido de palabras clave. Por defecto, el paso de parmetros a una funcin se realiza por valor. El paso por referencia se consigue pasando explcitamente a las funciones las direcciones de memoria de dichos parmetros. Punteros a funciones y variables estticas, que permiten una forma rudimentaria de encapsulado y polimorfismo. Tipos de datos agregados (struct) que permiten que datos relacionados (como un empleado, que tiene un id, un nombre y un salario) se combinen y se manipulen como un todo (en una nica variable "empleado").

Carencias Recoleccin de basura nativa, sin embargo se encuentran a tal efecto bibliotecas como la "libgc" desarrollada por Sun Microsystems, o el Recolector de basura de Boehm. Soporte para programacin orientada a objetos, aunque la implementacin original de C++ fue un preprocesador que traduca cdigo fuente de C++ a C. Encapsulacin. Funciones anidadas, aunque GCC tiene esta caracterstica como extensin. Polimorfismo en tiempo de cdigo en forma de sobrecarga, sobrecarga de operadores y slo dispone de un soporte rudimentario para la programacin genrica. Soporte nativo para programacin multi hilo y redes de computadores.

Desventajas

El mantenimiento tambin es ms difcil y costoso que con lenguajes de ms alto nivel. El cdigo en C se presta a sentencias cortas y enrevesadas de difcil interpretacin. Aunque el lenguaje admite cdigo escrito de forma fcilmente legible, si no se siguen normas en el equipo de programacin algunos programadores pueden acabar escribiendo cdigo difcil de leer. Esto complica la revisin y el mantenimiento. C no dispone de sistemas de control automticos y la seguridad depende casi exclusivamente de la experiencia del programador. La mayor parte de los problemas de seguridad en los sistemas informticos actuales deriva de haber sido realizados en C. El fallo de seguridad clsico consiste en que algunas entradas de informacin al programa no se comprueban en longitud. Si un atacante introduce datos lo bastante grandes puede provocar la sobre escritura de cdigo en la pila del programa e incluso llegar a forzar la ejecucin de cdigo pernicioso. Por estas razones, los directores de desarrollo han de sopesar la ventaja en eficiencia de un buen programa en C frente a la mayor duracin del trabajo y los riesgos de seguridad y estabilidad. Proceso de compilacin La compilacin de un programa C se realiza en varias fases que normalmente son automatizadas y ocultadas por los entornos de desarrollo:

1. Pre procesado consistente en modificar el cdigo fuente en C segn una serie de instrucciones
(denominadas directivas de pre procesado) simplificando de esta forma el trabajo del compilador. Por ejemplo, una de las acciones ms importantes es la modificacin de las inclusiones (#include) por las declaraciones reales existentes en el archivo indicado. 2. Compilacin que genera el cdigo objeto a partir del cdigo ya pre procesado. 3. Enlazado que une los cdigos objeto de los distintos mdulos y bibliotecas externas (como las bibliotecas del sistema) para generar el programa ejecutable final. Aplicabilidad De la misma forma, es muy usado en aplicaciones cientficas (para experimentos informticos, fsicos, qumicos, matemticos, entre otros, parte de ellos conocidos como modelos y simuladores), industriales (industria robtica, ciberntica, sistemas de informacin y base de datos para la industria petrolera y petroqumica. Predominan tambin todo lo que se refiere a simulacin de mquinas de manufactura), simulaciones de vuelo (es la ms delicada, ya que se tienen que usar demasiados recursos tanto de hardware como de software para desarrollar aplicaciones que permitan simular el vuelo real de una aeronave. Se aplica por tanto, en diversas reas desconocidas por gran parte de los usuarios noveles.

Lenguaje C++

Caractersticas: C++ tiene varias caractersticas que otros lenguajes de programacin no tienen. Las ms destacadas son: Programacin orientada a objetos: La posibilidad de orientar la programacin a objetos permite al programador disear aplicaciones desde un punto de vista ms cercano a la vida real. Adems, permite la reutilizacin del cdigo de una manera ms lgica y productiva. Portabilidad: Un cdigo escrito en C++ puede ser compilado en casi todo tipo de ordenadores y sistemas operativos sin hacer apenas cambios. Brevedad: El cdigo escrito en C++ es muy corto en comparacin con otros lenguajes, sobretodo porque en este lenguaje es preferible el uso de caracteres especiales que las "palabras clave". programacin modular: Un cuerpo de aplicacin en C++ puede estar hecho con varios ficheros de cdigo fuente que son compilados por separado y despus unidos. Adems, esta caracterstica permite unir cdigo en C++ con cdigo producido en otros lenguajes de programacin como Ensamblador o el propio C Velocidad: El cdigo resultante de una compilacin en C++ es muy eficiente, gracias a su capacidad de actuar como lenguaje de alto y bajo nivel y a la reducida medida del lenguaje. Conceptos en C++ Adems destaca la programacin orientada a objetos (POO), que permite descomponer un problema en subgrupos relacionados. Cada subgrupo pasa a ser un objeto auto contenido que contiene sus propias instrucciones y datos que le relacionan con ese objeto. Todos los lenguajes POO comparten tres caractersticas: Encapsulacin, Polimorfismo y Herencia. C++ ha ido evolucionando y ha contribuido con la aparicin de Java, simplificando instrucciones de C++, aadiendo nuevas y apareciendo nuevas funcionalidades para realizar aplicaciones utilizables desde Internet. El Concepto de Clase Los objetos en C++ son abstrados mediante una Clase. Segn el paradigma de la programacin orientada a objetos un objeto consta de: - Mtodos o funciones - Atributos o Variables Miembro Un ejemplo de clase que podemos tomar es la clase perro. Cada perro comparte unas caractersticas (atributos). Su nmero de patas, el color de su pelaje o su tamao son algunos de sus atributos. Las funciones que lo hagan ladrar, cambiar su comportamiento... esas son las funciones de la clase. Ademas de eso C++ permite la implementacion de Structs, que se pueden definir como clases sin metodos, que solo sirven de almacenadores de caracteristicas. Diferencias entre C y C++ Aunque C++ es un superconjunto de C, existen algunas diferencias entre los dos. En primer lugar, en C cuando una funcin no toma parmetros, su prototipo tiene la palabra void. Sin embargo en C++ void no es necesario(opcional). Prototipo en C: char f1(void); Prototipo en C++: char f1(); Ademas, otra diferencia entre C y C++ es que en un programa de C++ todas las funciones deben estar en forma de prototipo, en C los prototipos se recomiendan, pero son opcionales. Tambin si una funcin de C++ es declarada para devolver un valor obligatoriamente la sentencia return debe devolver un valor, en C no es necesario que se devuelva. Otra diferencia es el lugar donde se declaran las variables locales. En C, deben ser declaradas solo al principio del bloque, mientras que en C++ las variables se pueden declarar en cualquier punto. Aunque es conveniente realizarlo siempre al comienzo de la funcin.

Diferencias de Tipos respecto de C En C++, cualquier tipo de datos que sea declarado completo (fully qualified, en ingls) se convierte en un tipo de datos nico. Las condiciones para que un tipo de datos T sea declarado completo son a grandes rasgos las siguientes: Es posible al momento de compilacin conocer el espacio asociado al tipo de datos (es decir, el compilador debe conocer el resultado de sizeof(T)). T Tiene al menos un constructor, y un destructor, bien declarados. Si T es un tipo compuesto, o es una clase derivada, o es la especificacin de una plantilla, o cualquier combinacin de las anteriores, entonces las dos condiciones establecidas previamente deben aplicar para cada tipo de dato constituyente.

En general, esto significa que cualquier tipo de datos definido haciendo uso de las cabeceras completas, es un tipo de datos completo. En particular, y, a diferencia de lo que ocurra en C, los tipos definidos por medio de struct o enum son tipos completos. Como ejemplo son los tipos enumerados. Los tipos enumerados, son tipos de datos nicos en C++. El tipo de datos bool, igualmente, pasa a ser un tipo de datos nico, mientras que en C funcionaba en algunos casos como un alias para alguna clase de dato de tipo entero. Desventajas de C++ Algunas desventajas que presenta el lenguaje estan encapsuladas en lo siguiente: Punteros: C y C++ permiten la declaracin y uso de punteros, que pueden ser utilizados en cualquier lugar. Esta tremenda flexibilidad resulta muy til, pero tambin es la causa de que podamos colgar todo el sistema. La intencin principal en el uso de los punteros es comunicarnos ms directamente con el hardware, haciendo que el cdigo se acelere. Desafortunadamente, este modelo de tan bajo nivel hace que perdamos robustez y seguridad en la programacin y hace muy difciles tareas como la liberacin automtica de memoria, la defragmentacin de memoria, o realizar programacin distribuida de forma clara y eficiente. Referencias en C++: Las referencias se incorporaron a C++ en un intento de manejar punteros de C de forma ms limpia y segura. Sin embargo, como no elimina los punteros, la verdad es que su propsito lo consigue a medias. Es ms, podramos decir que con las referencias C++, el lenguaje se vuelve ms complicado y no es ms poderoso que antes. Las referencias deben ser inicializadas cuando se declaran y no se pueden alterar posteriormente. Esto permite incrementar la eficiencia en tiempo de ejecucin sobre la solucin basada en punteros, pero es ms por las deficiencias de los punteros que por las ventajas de las referencias. Ventajas de C++ Sobrecarga de Operadores: La sobrecarga de operadores es una forma de hacer polimorfismo. Es posible definir el comportamiento de un operador del lenguaje para que trabaje con tipos de datos definidos por el usuario. No todos los operadores de C++ son factibles de sobrecargar, y, entre aquellos que pueden ser sobrecargados, se deben cumplir condiciones especiales. En particular, los operadores sizeof y :: no son sobrecargables. No es posible en C++ crear un operador nuevo. Biblioteca Estndar de Plantillas (STL, Standard Template Library): Los lenguajes de programacin suelen tener una serie de bibliotecas de funciones integradas para la manipulacin de datos a nivel ms bsico. En C++, adems de poder usar las bibliotecas de C, se puede usar la nativa STL (Standard Template Library), propia del lenguaje. Proporciona una serie plantillas (templates) que permiten efectuar operaciones sobre el almacenado de datos, procesado y flujos de entrada/salida.

Excepciones: C++ permite la existencia de excepciones, las cuales son una metodologa de flujo de ejecucin basada en la prueba del cdigo deseado (try) seguida por la intercepcin de ciertas condiciones bajo un flujo de programa adicional (catch). La declaracin de estas condiciones se hace "arrojando" (throw) sentencias especiales que son capturadas por el flujo catch correspondiente. En el ejemplo anterior, se hace el intento de acceder al caracter nmero 99 de la cadena "Hola Mundo", el cual no existe. El tipo de datos std::string arroja en estos casos, en la llamada a la funcin "at", una excepcin, del tipo std::out_of_range, derivado de std::exception. El bloque catch "atrapar" la excepcin arrojada como una variable X, para la cual el mtodo what() muestra un mensaje con la causa del error (en nuestro caso, un mensaje similar a "Index Out of Range"). Es buena idea al crear nuevas excepciones derivarlas de std::exception ya que es el bloque catch que muchos programadores colocan por omisin. Si una excepcin se propaga sin ser atrapada por un bloque catch, y llegara hasta el punto de terminacin del programa, se produce la terminacin abrupta de ste ("abort"). Herencia: En la herencia, las clases derivadas "heredan" los datos y las funciones miembro de las clases base, pudiendo las clases derivadas redefinir estos comportamientos (polimorfismo) y aadir comportamientos nuevos propios de las clases derivadas. Para no romper el principio de encapsulamiento (ocultar datos cuyo conocimiento no es necesario para el uso de las clases), se proporciona un nuevo modo de visibilidad de los datos/funciones: "protected". Cualquier cosa que tenga visibilidad protected se comportar como pblica en la clase Base y en las que componen la jerarqua de herencia, y como privada en las clases que no sean de la jerarqua de la herencia. Existen varios tipos de herencia entre clases en el lenguaje de programacin C++. Estos son: Herencia Simple: La herencia en C++ es un mecanismo de abstraccin creado para poder facilitar y mejorar el diseo de las clases de un programa. Con ella se pueden crear nuevas clases a partir de clases ya hechas, siempre y cuando tengan un tipo de relacin especial. Herencia Mltiple: La herencia mltiple es el mecanismo que permite al programador hacer clases derivadas a partir, no de una sola clase base, sino de varias. Para entender esto mejor, pongamos un ejemplo: Cuando ves a quien te atiende en una tienda, como persona que es, podrs suponer que puede hablar, comer, andar, pero, por otro lado, como empleado que es, tambin podrs suponer que tiene un jefe, que puede cobrarte dinero por la compra, que puede devolverte el cambio, etc. Si esto lo trasladamos a la programacin sera herencia mltiple (clase empleado_tienda):

C++0x C++0x es el nombre no oficial del nuevo estandar para el lenguaje de programacion C++. Se planea que remplace el estandar actual (ISO/IEC 14882), que fue publicado en 1998 y actulizado en 2003; estas versiones preliminares son conocidas como C++98 y C++03. El nuevo estandar incluira adiciones al nucleo del lenguaje y extendera la biblioteca estandar. El mas reciente bosquejo pulicado, fue en Junio de 2009.

Conclusin

La capacidad de C/c++ para trabajar como un lenguaje de alto nivel, unida a su ventaja de poder hacerlo a bajo nivel cuando lo necesitemos, nos brinda una posibilidad de la que carecen otros lenguajes; es ms podemos utilizar rutinas en ensamblador dentro del propio cdigo fuente en C/C++. Pero lo anterior tampoco es totalmente exclusivo de C (Turbo Pascal, por ejemplo, puede hacerlo). Sin embargo, cuando compilamos el programa y comparamos el rendimiento de un programa realizado en C (necesidades de memoria, velocidad, tamao del ejecutable, etc.) con otros lenguajes volvemos a ver que se trata de una excelente herramienta para programar.

Potrebbero piacerti anche