2. Índice
• De la cuna hasta hoy
• Cazando mitos
• Potencia con control
• C++ contra el mundo
• Hábitat natural, hasta debajo de las piedras
• Previsión de futuro
• Enlaces interesantes
4. Situación histórica (años 80)
Sociedad Lenguajes prog. Sist. Operativos
SUN-OS
DOS
CP/M
APPLE
COMMODORE
UNIX
procedimental juventud
FORTRAN
LISP
COBOL
BASIC
PASCAL
C
SIMULA-67
5. Nacimiento de C++
• Bjarne Stroustrup crea C++ en 1983
• Necesitaba una herramienta:
– Para crear una versión distribuida del
kernel de UNIX.
– Compatible con C.
– Para acceder directamente el
hardware.
– Portable y eficiente.
– El nombre fue todo un problema,
hasta que Rick Mascitti sugirió C++
(incremento de C).
Bjarne Stroustrup es Catedrático de
Ciencias de la Computación en la
Universidad A&M de Texas.
Trabajó a la cabeza del departamento
de Investigación en Programación de
los laboratorios Bell de AT&T, desde
su creación hasta finales de 2002.
8. Mito VS Realidad
Mito Realidad Explicación
Es difícil de aprender DEPENDE Lo básico es sencillo, el nivel de dificultad aumenta según
avanzamos.
Es difícil programar con él DEPENDE Igual que antes depende de lo que queramos hacer y de
cómo queremos hacerlo.
No se utiliza en la actualidad FALSO Preguntárselo a Google, Microsoft, la NASA y multitud de
Pymes.
No sirve para aplicaciones de alto nivel FALSO Existen multitud de herramientas e IDE’s para el desarrollo
de UI, plugins, etc.
Tienes que hacerlo todo a mano FALSO Puede que al comienzo fuera verdad, ahora existen
multitud de herramientas y librerías gratuitas listas para
usar.
Es difícil encontrar los errores DEPENDE Normalmente son sencillos, pero los errores con templates
son complicados.
Depende totalmente del compilador FALSO Utilizando los estándares no existen problemas de
compatibilidad.
Hay que controlar todo lo que se hace VERDADERO Hay que tener completo control sobre el desarrollo
realizado
El código generado es muy complejo FALSO Igual que en todos los lenguajes, depende del
programador.
Es necesario conocer C para aprender C++ FALSO No es necesario, ambos son lenguajes independientes
aunque muy relacionados.
9. Problemas reales
• Las características avanzadas del lenguaje
pueden ser complicadas de aprender y utilizar
(templates, herencia compleja, …).
• Hay que tener mucho control de los recursos
utilizados para evitar leaks, pérdida de
referencias y errores.
• El ser un lenguaje multipropósito puede hacerlo
menos indicado para algunas tareas que otros
lenguajes más focalizados.
• El desarrollo multiplataforma con utilidades
avanzadas puede ser tedioso (programación
gráfica, hilos, etc.).
• Los mensajes de error cuando hay templates por
el medio son complejos.
• Las múltiples posibilidades del lenguaje pueden
hacernos perder el rumbo y el estilo.
11. Principales características
• 100% compatible con C.
• Multiparadigma (procedimental, Orientado a
objetos y genérica).
• De propósito general.
• Estandarizado. Revisiones ISO en 1998, 2003 y
2011.
• Multiplataforma.
• Lenguaje de nivel “medio”.
• Compilado.
• Optimizado. Alta performance.
• Gran libertad al usuario para decidir qué
hacer y cómo hacerlo.
• Gran responsabilidad del usuario con lo que
hace.
15. Comparativa entre lenguajes
C++ C Java C# VisualBasic PHP
Compilado Compilado Interpretado Interpretado Interpretado Interpretado
Multiparadigma Procedimental Orientado a Objetos Orientado objetos* Orientado a eventos Multiparadigma
- - SUN Microsoft Microsoft PHP Group
Multipropósito Multipropósito Multipropósito Multipropósito Gestión Web
Multiplataforma Multiplataforma Multiplataforma Multiplataforma* Windows Multiplataforma
- - GNU GPL/Java CP Propietaria* Propietaria Licencia PHP
Tipado fuerte,
estático, inseguro y
nominativo
Tipado débil,
estático
Tipado fuerte y
estático
Tipado estático,
dinámico, fuerte,
seguro, nominal
Tipado fuerte y
estático
Tipado dinámico
Tipos de datos:
• Fuerte: Una variable de un tipo no se puede utilizar cómo si fuera de otro tipo sin hacer una conversión previa.
• Dinámico: El tipo de dato se decide en tiempo de ejecución.
• Inseguro: Uso de tipos de datos puntero.
• Nominativo: La comparación entre variables se realiza teniendo en cuenta el tipo de las mismas.
18. Donde plantearnos el uso de C++
• Desarrollos donde el rendimiento es
importante o crítico.
• Desarrollos científicos en general.
• Desarrollos donde deberos comunicarnos
con el hardware.
• En programación de sistemas.
• Desarrollos de gestión con alta carga de
trabajo e información.
• Desarrollos multiplataforma.
• Librerías y funcionalidad a compartir
entre diversos proyectos y arquitecturas.
• En el aprendizaje de metodología y
programación.
21. El futuro de C++: C++0x
• Reemplaza a la anterior versión del 2003.
• Aprobada en Agosto de 2011.
• La versión definitiva se lleva puliendo desde 2008.
• Principales novedades:
– Incremento del rendimiento y facilitar el trabajo directo con hardware.
– Mejora en el manejo de rvalues.
– Operadores lambda (similares a c#).
– Enumeraciones fuertemente tipadas.
– Mejoras en plantillas.
– STL se completa con utilidades de programación interprocesos.
22. Enlaces de interés
Cultura básica:
• http://es.wikipedia.org/wiki/Bjarne_Stroustrup
• http://es.wikipedia.org/wiki/C%2B%2B
• http://www.dosideas.com/noticias/actualidad/109-entrevista-a-bjarne-stroustrup-creador-de-c.html
• http://codigomaldito.blogspot.com/2004/12/entrevista-bjarne-stroustrup-creador.html
Bibliografía:
• http://www.amazon.co.uk/Lenguaje-programaci%C3%B3n-c-Bjarne-
Stroustrup/dp/847829046X/ref=sr_1_fkmr2_3?ie=UTF8&qid=1321891075&sr=8-3-
fkmr2http://es.wikipedia.org/wiki/C%2B%2B
• http://www.tecnun.es/asignaturas/Informat1/ayudainf/aprendainf/Cpp/basico/cppbasico.pdf
• http://www.tecnun.es/asignaturas/Informat1/ayudainf/aprendainf/Cpp/avanzado/cppavan.pdf