¿Qué es C++?
C++ es un excelente lenguaje de programación orientado a objetos. Está desarrollado sobre la base del lenguaje C, pero es más fácil de aprender y para las personas. Más uso que el lenguaje C, C ++ se usa ampliamente en varios campos de la informática con su mecanismo de lenguaje único. La idea de diseño orientado a objetos es un salto cualitativo basado en el método de programación estructurada original de C++ que encarna perfectamente las diversas características de la orientación a objetos.
Relato de Bjarne Stroustrup sobre el diseño y la evolución de C++
El diseño y la evolución de C++
El lenguaje de programación C++ fue desarrollado por Bjarne Stroustrup en AT&T Bell Laboratories . La versión original de C++ se llamaba "C con clases".
En 1990, con la aparición y el uso generalizado de varias implementaciones de C++ desarrolladas de forma independiente, comenzaron los esfuerzos formales de estandarización de C++. El trabajo de estandarización ha sido llevado a cabo por ANSI (Instituto Nacional Estadounidense de Estándares) e ISO (Organización Internacional de Estandarización), y el estándar internacional para el lenguaje C++ se publicó en 1998.
1 El objetivo de diseño de C++ (objetivo de diseño de C++)
El objetivo de diseño de C++ es hacer que C++ sea tan adaptable y eficiente como el lenguaje C, adecuado para la programación de sistemas y que pueda tener la conveniencia de un lenguaje como Simula en términos de organización de programas (el método de organización de programas admitido por Simula a menudo se denomina estilo de programación orientado a objetos). Se realizó una gran cantidad de trabajo de diseño para permitir que las técnicas de programación de alto nivel tomadas de Simula se aplicaran a la programación de sistemas. Esto significa que los mecanismos de abstracción proporcionados por C++ se pueden aplicar a tareas de programación que requieren alta eficiencia y alta adaptabilidad.
Los objetivos de diseño de C++ anteriores se pueden resumir de la siguiente manera:
[Objetivo de diseño]
l l C++ hace que la programación sea más agradable para los programadores que desean resolver problemas reales. problemas;
l l C++ es un lenguaje de programación de propósito general que:
- es un lenguaje de programación eficiente
- es un lenguaje de programación eficiente
; p>
l l C++ es un lenguaje de programación eficiente;
l l C++ es un lenguaje de programación eficiente:
- es un mejor lenguaje C
- l - es un mejor lenguaje C;
- admite la abstracción de datos;
- admite la programación orientada a objetos
- admite la programación de paradigmas;
No fue hasta finales del diseño de C++ que el soporte para la programación paradigmática se convirtió en un objetivo claro e independiente. Durante gran parte del desarrollo de C++, agrupé la programación paradigmática y las características del lenguaje que soportan la programación paradigmática bajo el título general de "abstracción de datos".
2 Principios de diseño de C++
En [Stroustrup, 1994], las reglas de diseño de C++ se dividen en cuatro aspectos: reglas básicas, reglas basadas en diseño y reglas técnicas del Lenguaje y reglas basadas en programación de bajo nivel.
[Regla General]
l l Cada paso en la evolución y desarrollo de C++ debe deberse a un problema práctico;
l l C++ es un lenguaje, y No es un sistema completo;
l l No existe una búsqueda interminable de la perfección;
l l C++ ya existía "en el momento" y en el momento del diseño.
l l C++ debe ser útil "en el momento" en que existe
l Cada característica del lenguaje debe tener una implementación bien fundamentada y definida
; l Siempre debe haber una solución alternativa;
l l Debe haber un método fácil de entender para admitir cada estilo de programación que se pretende admitir;
l Debe haber una solución fácil Método de comprensión para admitir todos los estilos de programación que se pretende admitir;
l no es obligatorio.
Se puede observar que las últimas tres reglas básicas significan dos cosas: enfatizar herramientas convenientes adecuadas para diversas aplicaciones en el mundo real y dar plena consideración a las habilidades y orientación (preferencias) de los programadores. Desde el principio, C++ estuvo dirigido a programadores que iban a trabajar en proyectos del mundo real. La llamada "perfección" se considera inalcanzable porque los usuarios de C++ son muy diversos en sus necesidades, antecedentes y problemas a resolver. Además, incluso la interpretación de la palabra "perfecto" puede cambiar drásticamente durante la vida útil de un lenguaje de programación de propósito general. Por lo tanto, la retroalimentación de los usuarios y la experiencia adquirida por los implementadores del lenguaje son los factores más importantes en el proceso de desarrollo del lenguaje.
Uno de los objetivos de C++ es proporcionar ideas de diseño y técnicas de programación más accesibles y asequibles, mejorando así aún más la calidad de los programas. La mayoría de estas técnicas se originan en Simula [Dahl, 1970][Dahl, 1972][Birtwistle, 1979] y a menudo se analizan como programación orientada a objetos e ideas de diseño orientadas a objetos. Sin embargo, C++ siempre ha sido diseñado para admitir una variedad de estilos de programación e ideas de diseño. Esto contrasta en cierto modo con la visión general del diseño del lenguaje. En general, el diseño del lenguaje siempre intenta estructurar todos los sistemas en un estilo (o paradigma) de programación obligatorio, único y fuertemente respaldado.
[Reglas técnicas del lenguaje]
l l l No hay conflicto inherente con el sistema de tipos estáticos
l l l Buen soporte tanto para tipos definidos por el usuario como para tipos integrados; en tipos;
l l Diferencias individuales;
l l Un estilo de programación único y unificado.
l l l Comportamiento de posicionamiento ideal
l l l Evite dependencias secuenciales
l l Cuando esté confundido acerca del lenguaje, puede elegir algunas de las funciones que sean más fáciles; dominar;
l l Los problemas de sintaxis (a menudo de forma perversa) pueden causar problemas
l Sin conflictos inherentes
l Buena comprensión de los tipos definidos por el usuario; Tipos compatibles e integrados;
l debilita el uso de preprocesadores.
Por supuesto, estas reglas deben considerarse en contexto con más contexto sobre los objetivos subyacentes. Cabe señalar que los requisitos de "alta compatibilidad con el lenguaje C", "sin pérdida de eficiencia" y "problemas prácticos fáciles de resolver" son opuestos a los requisitos de "seguridad completa de tipos", "generalidad completa" y "abstracción perfecta". ".
C++ toma prestados tipos definidos por el usuario (clases, §4.1) y jerarquías de clases de Simula. Sin embargo, en Simula y muchos lenguajes similares, la compatibilidad con tipos definidos por el usuario es fundamentalmente diferente de la compatibilidad con tipos integrados. Por ejemplo, Simula no permite la asignación de espacio en la pila para tipos definidos por el usuario y solo permite el acceso a estos objetos a través de punteros (llamados referencias en Simula). Por el contrario, a los objetos de tipos integrados solo se les puede asignar espacio en la pila, no en el almacenamiento dinámico, y no se puede acceder a ellos mediante punteros. Esta diferencia en el manejo de tipos integrados frente a tipos definidos por el usuario implica consideraciones estrictas de eficiencia. Por ejemplo, cuando se hace referencia a un objeto asignado en la memoria dinámica, el tiempo de ejecución y la carga de espacio son inaceptables en algunas aplicaciones si el objeto es de un tipo personalizado (como complejo, §4.1). Estos son exactamente los problemas que C++ busca resolver. Al mismo tiempo, las diferencias en el uso determinan que sea imposible manejar de manera uniforme tipos semánticamente cercanos en la programación de paradigmas.
Al mantener un programa más grande, los programadores inevitablemente realizarán modificaciones en el programa basándose en un conocimiento incompleto y solo se centrarán en una pequeña parte del código completo del programa.
Con este fin, C++ proporciona clases (§4), espacios de nombres (§5.2) y control de acceso (§4.1), lo que permite localizar las decisiones de diseño.
En lenguajes basados en compilación única, algunas dependencias secuenciales son inevitables. Por ejemplo, en C++, una variable o función no se puede utilizar hasta que se declare. Sin embargo, las reglas para la denominación de miembros de clase y la resolución de sobrecargas en C++ se desarrollan independientemente del orden de declaración para minimizar la posibilidad de confusión y errores.
[Reglas de soporte de programación de bajo nivel]
l l Usar un enlazador tradicional (torpe);
l l No ser incompatible con C sin ningún motivo;
l l p>
l l no deja espacio para lenguajes de bajo nivel (por debajo de C++);
l l no deja espacio para lenguajes más complejos (por debajo de C++);
l l No Dejar espacio para lenguajes más complejos (por debajo de C++);
l l No dejar espacio para lenguajes más complejos (por debajo de C++);
l
l l No hay espacio de uso para lenguajes de bajo nivel por debajo de C++ (excepto el lenguaje ensamblador
l No necesita pagar por las piezas que hace); no utilizar (regla de carga cero);
l En caso de duda Proporciona un enfoque completamente autónomo.
C++ está diseñado para ser lo más compatible posible con el enfoque de "vínculo de fuentes" de C, siempre y cuando no afecte seriamente su soporte para la verificación estricta de tipos. Aparte de algunas diferencias menores, C++ trata a C [Kernighan, 1978] [Kernighan, 1988] como un subconjunto, y su compatibilidad con C brinda a los programadores de C++ acceso inmediato al lenguaje y al conjunto de herramientas completos. Igualmente importante, ya existe una gran cantidad de libros de texto en lenguaje C de alta calidad, y los programadores de C++ pueden aprovechar la compatibilidad de C++ con el lenguaje C para utilizar directa y efectivamente una gran cantidad de bibliotecas listas para usar. Cuando se tomó la decisión de utilizar C como base para C++, C aún no era tan popular como lo es ahora, por lo que su popularidad era sólo una consideración menor en comparación con la adaptabilidad y eficiencia que ofrecía C.
Sin embargo, la compatibilidad con C también permite que C++ conserve algunos de los defectos sintácticos y semánticos de C. Por ejemplo, la sintaxis de declaración de C no es realmente elegante; sus reglas para conversiones implícitas de tipos integrados están desorganizadas. Otro gran problema es que muchos programadores que pasan de C a C++ no se dan cuenta de que sólo se pueden lograr mejoras significativas en la calidad del código realizando cambios significativos en el estilo de programación.