Contactos

§1 Información general sobre el idioma. Etapas del diseño del programa. Modelos de ciclo de vida de aplicaciones. Historia del lenguaje C ¿Cuándo se creó el lenguaje con

Lenguaje de programación C ++

Última actualización: 28.08.2017

El lenguaje de programación C ++ es un lenguaje de programación compilado de propósito general, de tipo estático y de alto nivel que es adecuado para construir una amplia variedad de aplicaciones. Hoy en día, C ++ es uno de los lenguajes más populares y extendidos.

Tiene sus raíces en el lenguaje C, que fue desarrollado en 1969-1973 en Bell Labs por el programador Dennis Ritchie. A principios de la década de 1980, el programador danés Bjarne Stroustrup, que estaba en Bell Labs en ese momento, desarrolló C ++ como una extensión del lenguaje C. De hecho, al principio, C ++ simplemente complementó el lenguaje C con algunas capacidades de programación orientadas a objetos. Y así, el propio Stroustrup se refirió inicialmente a ella como "C con clases".

Posteriormente, el nuevo idioma comenzó a ganar popularidad. Se le agregaron nuevas características, lo que lo convirtió no solo en una adición a C, sino en un lenguaje de programación completamente nuevo. Como resultado, "C con clases" pasó a llamarse C ++. Y a partir de entonces, ambos lenguajes empezaron a desarrollarse de forma independiente el uno del otro.

C ++ es un lenguaje poderoso que hereda capacidades de memoria ricas de C. Por lo tanto, C ++ a menudo encuentra su aplicación en la programación del sistema, en particular, al crear sistemas operativos, controladores, diversas utilidades, antivirus, etc. Por cierto, Windows está escrito principalmente en C ++. Pero el uso de este lenguaje no se limita solo a la programación del sistema. C ++ se puede utilizar en programas de cualquier nivel donde la velocidad y el rendimiento son importantes. Se utiliza a menudo para crear aplicaciones gráficas, varios programas de aplicación. También se utiliza especialmente para crear juegos con una visualización rica y rica. Además, recientemente la dirección móvil ha ido ganando impulso, donde C ++ también ha encontrado su aplicación. E incluso en el desarrollo web también es posible utilizar C ++ para crear aplicaciones web o algún tipo de servicios auxiliares que sirvan a aplicaciones web. En general, C ++ es un lenguaje ampliamente utilizado en el que puede crear casi cualquier tipo de programa.

C ++ es un lenguaje compilado, lo que significa que el compilador traduce el código fuente de C ++ en un archivo ejecutable que contiene un conjunto de instrucciones de la máquina. Pero las diferentes plataformas tienen sus propias características, por lo que los programas compilados no pueden simplemente transferirse de una plataforma a otra y ejecutarse allí. Sin embargo, a nivel de código fuente, los programas C ++ son en su mayoría portátiles, a menos que se utilicen algunas funciones específicas del sistema operativo actual. Y la presencia de compiladores, bibliotecas y herramientas de desarrollo para casi todas las plataformas comunes le permite compilar el mismo código fuente C ++ en aplicaciones para estas plataformas.

A diferencia de C, el lenguaje C ++ le permite escribir aplicaciones en un estilo orientado a objetos, representando un programa como una colección de clases y objetos que interactúan. Esto facilita la creación de aplicaciones grandes.

Las principales etapas de desarrollo.

En 1979-80, Bjarne Stroustrup desarrolló una extensión del lenguaje C: "C con clases". En 1983, el lenguaje pasó a llamarse C ++.

En 1985 se publicó la primera versión comercial del lenguaje C ++, así como la primera edición del libro "El lenguaje de programación C ++", que proporcionó la primera descripción de este lenguaje en ausencia de un estándar oficial.

En 1989, se lanzó una nueva versión del lenguaje C ++ 2.0, que incluía varias características nuevas. Después de eso, el idioma se desarrolló con relativa lentitud hasta 2011. Pero al mismo tiempo, en 1998, la ISO (International Organization for Standartization) realizó el primer intento de estandarizar el lenguaje. El primer estándar se denominó ISO / IEC 14882: 1998 o C ++ 98 para abreviar. Posteriormente, en 2003, se publicó una nueva versión del estándar C ++ 03.

En 2011, se publicó el nuevo estándar C ++ 11, que contenía muchas adiciones y enriquecía el lenguaje C ++ con una gran cantidad de nuevas funcionalidades. Después de eso, en 2014, se lanzó una pequeña adición al estándar, también conocida como C ++ 14. Y otro lanzamiento clave del lenguaje está programado para 2017.

Compiladores y entornos de desarrollo

Para desarrollar programas en C ++, necesita un compilador: traduce el código fuente de C ++ en un archivo ejecutable, que luego puede ejecutar. Pero por el momento hay muchos compiladores diferentes. Pueden diferir en varios aspectos, en particular, en la implementación de los estándares. Puede encontrar una lista básica de compiladores para C ++ en Wikipedia. Se recomienda para el desarrollo elegir aquellos compiladores que desarrollen e implementen todos los estándares más recientes. Por lo tanto, a lo largo de este tutorial, se utilizará principalmente el compilador g ++ gratuito desarrollado por el Proyecto GNU.

También puede utilizar IDE como Visual Studio, Netbeans, Eclipse, Qt, etc. para crear programas.

C y UNIX

Lenguaje de programación CON(lea "C") fue creado a principios de los 70 cuando Ken Thompson y Dennis Ritchie de Bell Labs estaban desarrollando el sistema operativo UNDC. Primero crearon la parte del compilador CON, luego lo usó para compilar el resto del compilador CON y finalmente aplicó el compilador resultante para compilar UNIX. El sistema operativo UNIX se distribuyó originalmente en código fuente en CON entre universidades y laboratorios, y el destinatario podría compilar el código fuente en el idioma CON en código máquina con un compilador adecuado CON.

La distribución del código fuente ha hecho que el sistema operativo UNIX sea único; el programador podría cambiar el sistema operativo y el código fuente podría trasladarse de una plataforma de hardware a otra. Hoy en día, el estándar POSIX define un conjunto estándar de llamadas al sistema UNIX disponibles en CON para ser implementado en versiones de UNIX que son compatibles con POSIX. C fue el tercer idioma que Thomson y Ritchie desarrollaron durante la creación de UNIX; los dos primeros fueron, por supuesto, A y V.

Lenguaje ensamblador móvil C

En comparación con el idioma anterior: BCPL, idioma CON se ha mejorado agregando tipos de datos de longitudes específicas. Por ejemplo, el tipo de datos int podría usarse para crear una variable con un número específico de bits (generalmente 16), mientras que el tipo de datos largo podría usarse para crear una variable entera con un gran número de bits (generalmente 32). A diferencia de otros lenguajes de alto nivel, CON podría trabajar con direcciones de memoria directamente usando punteros y referencias. En la medida en CON conservó la capacidad de acceder directamente al hardware, a menudo se lo conoce como un lenguaje de nivel medio o en broma como "lenguaje ensamblador móvil".

С - lenguaje de programación estructurado

Con respecto a la gramática y la sintaxis, entonces CON es un lenguaje de programación estructurado. Mientras que muchos programadores modernos piensan en términos de clases y objetos, los programadores en CON Piense en términos de procedimientos y funciones. V CON puede definir sus propios tipos de datos abstractos utilizando la palabra clave struct. De manera similar, puede describir sus propios tipos de enteros (enumeraciones) y dar otros nombres a los tipos de datos existentes utilizando la palabra clave typedef. En este sentido CON es un lenguaje estructurado con las semillas de la programación orientada a objetos.

Estandarización del lenguaje C

Uso generalizado del idioma. C en diferentes tipos de computadoras (a veces llamadas plataformas de hardware) ha llevado, desafortunadamente, a muchas variaciones del lenguaje. Eran similares, pero incompatibles entre sí. Este fue un problema importante para los desarrolladores de software que necesitaban escribir programas compatibles que pudieran ejecutarse en múltiples plataformas. Quedó claro que se necesitaba una versión estándar. C... En 1983. ANSI (American National Standards Committee) formó un comité técnico X3J11 para crear un estándar de lenguaje C(para "proporcionar una definición del lenguaje inequívoca e independiente de la máquina"). En 1989 se aprobó la norma. ANSI se ha asociado con ISO (Organización Internacional de Estándares) para estandarizar C internacionalmente; En 1990 se publicó una norma conjunta denominada ANSI / ISO 9899: 1990. Este estándar aún se está mejorando y es compatible con la mayoría de las empresas de desarrollo de compiladores.

El nacimiento de C ++

Björn Stroustrup desató el potencial orientado a objetos CON transfiriendo las capacidades de las clases Simula 67 v CON... Inicialmente, el nuevo idioma llevaba el nombre "C con clases" y solo entonces comenzó a llamarse C ++... Idioma C ++ Alcanzó popularidad cuando se desarrolló en Bell Labs, y luego se transfirió a otras industrias y corporaciones. Hoy en día es uno de los lenguajes de programación más populares (y respetados) del mundo. C ++ hereda tanto el lado bueno como el malo CON.

Revelaciones de Bjorn Stroustrup

Bjorn Stroustrup: "Se me ocurrió C ++, escribió su definición original e hizo la primera implementación. Elegí y formulé criterios de diseño. C ++, desarrolló sus principales características y fue responsable del destino de las propuestas para ampliar el lenguaje en el comité de estandarización C ++", - escribe el autor del lenguaje de programación más popular. -" Idioma C ++ le debe mucho al idioma C y el idioma C sigue siendo un subconjunto Lenguaje C ++(pero C ++ corrige varios defectos importantes en el sistema de tipos C). También ahorré fondos C que son lo suficientemente de bajo nivel para manejar las tareas más críticas del sistema. Idioma C debe mucho a su predecesor, BCPL; por cierto, el estilo de comentario // fue tomado en C ++ de BCPL. El idioma fue otra fuente importante de inspiración. Simula67... Se tomó prestado el concepto de clases (con clases derivadas y funciones virtuales). Los medios para sobrecargar a los operadores y la capacidad de colocar anuncios en cualquier lugar donde se pueda escribir una instrucción recuerdan Algol68. "

Por qué C ++

Nombre C ++ inventado por Rick Massitti. El nombre indica la naturaleza evolutiva de la transición a él desde C... "++" es una operación de incremento en C... Nombre un poco más corto C + es un error de sintaxis; además, ya se ha utilizado como nombre de un idioma completamente diferente. Conocedores de la semántica C encuentra eso C ++ peor que ++ C... Nombres D el lenguaje no lo entendió, porque es una extensión de C y no intenta curar problemas descartando varias características.

Por qué se necesitaba C ++

Inicialmente Lenguaje de programación C ++ fue diseñado para que el autor y sus amigos no tengan que programar en ensamblador, C u otros lenguajes modernos de alto nivel. Su objetivo principal era hacer que la escritura de buenos programas fuera más fácil y agradable para el programador individual. Plan de Desarrollo C ++ nunca estuvo en papel; diseño, documentación e implementación se movieron al mismo tiempo. Por supuesto, la interfaz externa C ++ fue escrito en C ++... El Proyecto C ++ y el Comité de Desarrollo C ++ nunca existieron. Entonces C ++ ha evolucionado y sigue evolucionando en todas las direcciones para hacer frente a las complejidades que enfrentan los usuarios, así como en el curso de las discusiones entre el autor y sus amigos y colegas.

C ++ orientado a objetos reales

V Lenguaje C ++ Los principios de la programación orientada a objetos son totalmente compatibles, incluidos los tres pilares sobre los que se asienta: encapsulación, herencia y polimorfismo. Encapsulación en C ++ apoyado a través de la creación de tipos de datos no estándar (personalizados) llamados clases. Idioma C ++ apoya la herencia. Esto significa que puede declarar un nuevo tipo de datos (clase), que es una extensión del existente.

Sin embargo Lenguaje de programación C ++ correctamente llamado una continuación CON y cualquier programa viable en el idioma CON será compatible con el compilador C ++, al pasar de CON A C ++ Se ha dado un salto muy significativo. Idioma C ++ se benefició de su afinidad con el lenguaje CON A lo largo de los años, muchos programadores han descubierto que para aprovechar al máximo los beneficios Lenguaje C ++, necesitan renunciar a algunos de sus conocimientos previos y adquirir otros nuevos, a saber: aprender una nueva forma de conceptualización y resolución de problemas de programación. Antes de empezar a dominar C ++, Stroustrup y la mayoría de los programadores que utilizan C ++ considerar el aprendizaje de idiomas CON Opcional.

Lenguaje de programación C ++ Actualmente considerado el idioma dominante utilizado para desarrollar productos comerciales, el 90% de los juegos están escritos en C ++ utilizando DirectX.

Literatura

Fuentes:

  • H.M.Deitel, P.J.Deitel "Cómo programar en C ++"
  • Bjarne Stroustrup "El lenguaje de programación C ++. 3ª edición".
  • Simon Robinson, Ollie Cornes, Jay Glynn, et al. "C # para profesionales"
  • Jess Liberty "Aprende C ++ por tu cuenta en 21 días"
  • Stanislav Gornakov "Lecciones de programación DirectX, C ++"

C ++ (lee C-plus-plus) es un lenguaje de programación de propósito general compilado y tipado estáticamente en el que puede crear programas de cualquier complejidad.
Durante más de 20 años, este lenguaje ha estado entre los tres lenguajes de programación más populares y demandados. (Puede verificar esto visitando el sitio web de TIOBE).
El lenguaje se originó a principios de la década de 1980, cuando el empleado de Bell Labs, Björn Stroustrup, ideó una serie de mejoras en el lenguaje C para satisfacer sus propias necesidades.

Bjarne Stroustrup: el creador del lenguaje C ++

Stroustrup decidió complementar el lenguaje C con las capacidades del lenguaje Simula. C, como lenguaje base del sistema UNIX en el que se ejecutan las computadoras Bell, es rápido, rico en funciones y portátil. Stroustrup agregó la capacidad de trabajar con clases y objetos. Como resultado, los problemas prácticos de modelado resultaron estar disponibles para resolver tanto en términos de tiempo de desarrollo (gracias al uso de clases similares a Simula) como en términos de tiempo de cálculo (gracias a la velocidad de C).
Así lo dice el propio desarrollador del lenguaje:



En 1998, un comité de estandarización publicó el primer estándar de lenguaje, conocido como C ++ 98. C ++ continúa evolucionando para cumplir con los requisitos modernos. Uno de los grupos que desarrolla el lenguaje C ++ y envía sugerencias para mejorarlo al Comité de Estandarización de C ++ es Aumentar, que se dedica, entre otras cosas, a mejorar las capacidades del lenguaje añadiéndole funciones de metaprogramación. El último estándar se lanzó en 2017 y se llama C ++ 17... El próximo estándar no tardará en llegar y aparecerá como se esperaba en 2020.
Nadie posee los derechos del lenguaje C ++, es gratis. En marzo de 2016, se creó un grupo de trabajo WG21 C ++ en Rusia. El grupo se organizó para recopilar propuestas para el estándar C ++, enviarlas al comité y defenderlas en las reuniones generales de la Organización Internacional de Normalización.
C ++ es un lenguaje de múltiples paradigmas (de la palabra paradigma - el estilo de escribir programas de computadora), que incluye una amplia gama de diferentes estilos y tecnologías de programación. A menudo se lo conoce como un lenguaje orientado a objetos, pero estrictamente hablando no lo es. En el proceso de trabajo, el desarrollador gana absoluta libertad en la elección de herramientas para que el problema resuelto con tal o cual enfoque se resuelva de la manera más eficiente posible. En otras palabras, C ++ no obliga al programador a ceñirse a un solo estilo de desarrollo de programas (por ejemplo, orientado a objetos).
C ++ tiene una biblioteca estándar rica que incluye contenedores y algoritmos comunes, E / S, expresiones regulares, soporte para múltiples subprocesos y más. C ++ influyó en muchos lenguajes de programación, incluidos: Java, C #, D. Dado que C ++ pertenece a una familia de lenguajes basados ​​en la sintaxis del lenguaje C, puede dominar fácilmente otros lenguajes de programación de esta familia. : JavaScript, PHP, Perl, Objective-C y muchos otros. ... otros, incluido el propio idioma de los padres - C. ()
Durante su existencia, el lenguaje C ++ ha arraigado mitos estables que se refutan fácilmente (ver aquí: Parte 1 y Parte 2)

Historia del idioma y lanzamiento de estándares.

1983

El creador del lenguaje - Bjorn Stroustrup, Empleado de Bell Labs, presentó una versión inicial de C ++ ("C con clases")

1985

Primer lanzamiento comercial de C ++, el lenguaje toma su nombre moderno

1986

Primera edición de The C ++ Programming Language, un libro sobre C ++ escrito por Björn Stroustrup

1998

Ratificó el estándar internacional para el lenguaje C ++: ISO / IEC 14882: 1998 "Estándar para el lenguaje de programación C ++"

2003
2005

Publicado el Informe técnico de la biblioteca 1 (TR1). Si bien no es oficialmente parte del estándar, el informe describe extensiones a la biblioteca estándar que deberían incluirse en la próxima versión del lenguaje C ++.

2011

El lanzamiento de un nuevo estándar: C ++ 11 o ISO / IEC 14882: 2011; el nuevo estándar incluía adiciones al núcleo del lenguaje y una extensión de la biblioteca estándar, incluida la mayor parte de TR1

2014

El lanzamiento del estándar C ++ 14 ("Estándar internacional ISO / IEC 14882: 2014 (E) Lenguaje de programación C ++"); Se puede pensar en C ++ 14 como una pequeña extensión de C ++ 11, que contiene principalmente correcciones de errores y mejoras menores

2017

Lanzamiento de nuevo estándar: C ++ 1z (C ++ 17). Este estándar ha introducido muchos cambios y adiciones. Por ejemplo, el STD incluye bibliotecas del estándar C11, un sistema de archivos basado en boost :: filesystem, la mayor parte de la biblioteca experimental TS I.

2020

C ++ 20 es el nombre no oficial del estándar ISO / IEC para el lenguaje de programación C ++, que se espera después de C ++ 17. Borrador de la norma N4800.

Filosofía C ++

En The Design and Evolution of C ++ (2007), Björne Stroustrup describe los principios que siguió en el diseño de C ++ (abreviado):

  • Obtenga un lenguaje genérico con tipos de datos estáticos, eficiencia y portabilidad del lenguaje C.
  • Admite muchos estilos de programación de forma directa y completa.
  • Déle al programador la libertad de elegir, incluso si le da la oportunidad de elegir el programa equivocado.
  • Mantenga la compatibilidad con C tanto como sea posible, haciendo así posible una transición fácil desde la programación en C.
  • Evite la confusión entre C y C ++: cualquier construcción permitida en ambos lenguajes debe significar lo mismo en cada uno de ellos y conducir al mismo comportamiento del programa.
  • Evite las funciones que dependen de la plataforma o no son genéricas.
  • No pague por lo que no se utiliza: ninguna herramienta de lenguaje debería degradar el rendimiento de los programas que no la utilizan.
  • No requiera un entorno de programación demasiado complicado.

C y C ++

La sintaxis de C ++ se hereda del lenguaje C. Aunque, formalmente, uno de los principios de C ++ sigue siendo la preservación de la compatibilidad con el lenguaje C, de hecho, los grupos para la estandarización de estos lenguajes no interactúan, y los cambios que hacen no solo no se correlacionan, sino que a menudo se contradicen fundamentalmente ideológicamente. Por ejemplo, los elementos que los nuevos estándares C agregan al núcleo son elementos de la biblioteca estándar en el estándar C ++ y están completamente ausentes en el núcleo, por ejemplo, arreglos dinámicos, arreglos con límites fijos, instalaciones de procesamiento paralelo. Sería muy beneficioso combinar el desarrollo de los dos lenguajes, dijo Stroustrup, pero es poco probable que sea políticamente factible. Por lo tanto, la compatibilidad práctica entre C y C ++ se irá perdiendo gradualmente.
En este ejemplo, dependiendo del compilador utilizado, generará "C ++" o "C":

Programa 9.1

#incluir int main () (printf ("% s \ n", (sizeof ("a") == sizeof (char))? "C ++": "C"); return 0;)

Esto se debe al hecho de que las constantes de caracteres en C son de tipo int, y en C ++ son de tipo char, pero los tamaños de estos tipos son diferentes.

Modelos de ciclo de vida de aplicaciones

Ciclo vital El software es un período de tiempo que comienza desde el momento en que se toma una decisión sobre la necesidad de crear un producto de software y finaliza en el momento de su retiro completo. Este ciclo es el proceso de construcción y desarrollo de software (software). Hay varios modelos de ciclo de vida.
Modelo en cascada ciclo de vida (ing. modelo de cascada) fue propuesto en 1970 por Winston Royce. Proporciona la ejecución secuencial de todas las etapas del proyecto en un orden estrictamente fijo. La transición a la siguiente etapa significa la finalización completa del trabajo en la etapa anterior. Los requisitos, determinados en la etapa de formación de requisitos, están estrictamente documentados en forma de especificaciones técnicas y se fijan durante todo el período de desarrollo del proyecto. Cada etapa finaliza con el lanzamiento de un conjunto completo de documentación suficiente para que otro equipo de desarrollo continúe con el desarrollo.
Etapas del proyecto según el modelo de cascada:

  1. Formación de requisitos;
  2. Diseño;
  3. Implementación;
  4. Pruebas;
  5. Implementación;
  6. Operación y mantenimiento.

En un modelo en cascada, la transición de una fase del proyecto a otra supone la total corrección del resultado de la fase anterior. En proyectos grandes, esto es casi imposible de lograr. Por lo tanto, este modelo solo es adecuado para desarrollar un proyecto pequeño. (El propio W. Royce no se adhirió a este modelo y utilizó un modelo iterativo).
Modelo iterativo
Una alternativa al modelo de cascada es el modelo de desarrollo iterativo e incremental (IID) obtenido de T. Gilb en los años 70. el nombre del modelo evolutivo. El modelo IID implica dividir el ciclo de vida del proyecto en una serie de iteraciones, cada una de las cuales se asemeja a un "mini-proyecto", que incluye todos los procesos de desarrollo aplicados para crear piezas de funcionalidad más pequeñas en comparación con el proyecto en su conjunto. El objetivo de cada iteración es obtener una versión funcional del sistema de software que incluye la funcionalidad definida por el contenido integrado de todas las iteraciones anteriores y actuales. El resultado de la iteración final contiene toda la funcionalidad requerida del producto. Así, con la finalización de cada iteración, el producto recibe un incremento - un incremento - en sus capacidades, que, por tanto, se desarrollan evolutivamente.


Varias versiones del enfoque iterativo se implementan en la mayoría de las metodologías de desarrollo modernas:

Proceso de desarrollo: proceso unificado racional (RUP)

Proceso unificado racional (RUP)(Lean Unified Process) es una metodología de desarrollo de software respaldada por Rational Software (IBM). La metodología proporciona recomendaciones para todas las etapas del desarrollo: desde el modelado de negocios hasta las pruebas y la puesta en servicio del programa terminado. El lenguaje de modelado unificado (UML) se utiliza como lenguaje de modelado.
El ciclo de vida completo del desarrollo del producto consta de cuatro fases, cada una de las cuales incluye una o más iteraciones.

  • Etapa inicial (inicio)
  • Determine el alcance del proyecto y la cantidad de recursos necesarios. Se identifican los requisitos básicos, las limitaciones y la funcionalidad clave del producto. Se evalúan los riesgos. Planificación de acciones. Al final de la fase inicial, se evalúa la consecución del Hito del Objetivo del Ciclo de Vida, que presupone un acuerdo entre las partes interesadas sobre la continuación del proyecto.

  • Elaboración
  • Documentar los requisitos. Diseño, implementación y testeo de una arquitectura ejecutable. Aclaración de términos y costo. Reducir los mayores riesgos. La finalización satisfactoria de la fase de desarrollo significa alcanzar el hito de la arquitectura del ciclo de vida.

  • Construcción
  • En la fase "Construir", se implementa la mayor parte de la funcionalidad del producto: el diseño de la aplicación está completo, el código fuente está escrito. La fase de construcción finaliza con la primera versión externa del sistema y un hito de capacidad operativa inicial.

  • Transición
  • En la fase de "Implementación", la versión final del producto se crea y se transfiere del desarrollador al cliente. Esto incluye un programa de prueba beta, capacitación de usuarios y determinación de la calidad del producto. Si la calidad no cumple las expectativas de los usuarios o los criterios establecidos en la fase de Inicio, se repite de nuevo la fase de Implementación. Cumplir todos los objetivos significa alcanzar el hito del lanzamiento del producto y completar el ciclo de desarrollo completo.



"Tecnologías de la información. Ingeniería de sistemas y software. Procesos del ciclo de vida del software ”. Esta norma fue adoptada por la Agencia Federal de Regulación Técnica y Metrología de la Federación de Rusia y es similar a la norma internacional ISO / IEC 12207: 2008. Este estándar establece un marco general para los procesos del ciclo de vida del software que se pueden guiar en la industria del software. La norma no ofrece un modelo de ciclo de vida específico. Sus disposiciones son comunes a todos los modelos, métodos y tecnologías de ciclo de vida para la creación de software. Describe la estructura de los procesos del ciclo de vida sin especificar cómo implementar o realizar las actividades y tareas incluidas en estos procesos.

Presentación de la lección
Temas de mensajes
  • Fundación de Software Libre (FSF)
  • Licencias de software gratuitas
  • FreeSoftware y código abierto
  • Historia del desarrollo de lenguajes de programación
  • La historia de C. C y C ++
  • Historia
  • Crítica de C ++
  • Historia de UNIX
  • Modelo de ciclo de vida del software en espiral
  • UML (Lenguaje de modelado unificado inglés)
  • Marco de soluciones de Microsoft
  • IDE para programación C / C ++ en Windows
  • Compiladores de C / C ++
  • Crear una aplicación de consola en Windows
Preguntas
  1. ¿Por qué no se aplica el modelo en cascada de desarrollo de software a grandes proyectos?
  2. ¿Cuál es la diferencia entre los modelos de desarrollo en cascada e iterativos?
  3. Enumere las etapas del desarrollo de software en la metodología Rational Unified Process (RUP)

C ++ es un lenguaje de programación de propósito general compilado que combina las propiedades de los lenguajes de programación de alto y bajo nivel. En comparación con su predecesor, el lenguaje de programación C, se presta mayor atención a la compatibilidad con la programación genérica y orientada a objetos. El nombre lenguaje de programación C ++ proviene del lenguaje de programación C, en el que el operador unario ++ denota el incremento de una variable.

El lenguaje de programación C ++ se usa ampliamente para el desarrollo de software. A saber, la creación de una variedad de programas de aplicación, el desarrollo de sistemas operativos, controladores de dispositivos, así como videojuegos y mucho más. Fue creado a principios de la década de 1980 por Björn Stroustrup. Se le ocurrió una serie de mejoras en el lenguaje de programación C para su propio uso. aquellos. originalmente no se planeó crear el lenguaje de programación C ++.

Soporta paradigmas de programación tales como programación procedimental, programación orientada a objetos, programación genérica, proporciona modularidad, compilación separada, manejo de excepciones, abstracción de datos, declaración de tipos (clases) de objetos, funciones virtuales.

El nombre del lenguaje resultante proviene del operador de incremento de sufijo unario de C ++ (aumentando el valor de una variable en uno). No se usó el nombre C + porque es un error de sintaxis en C y, además, el nombre fue reemplazado por otro idioma. El lenguaje tampoco se denominó D porque "es una extensión de C y no intenta solucionar problemas eliminando elementos de C".

Ventajas del idioma:

1. Escalabilidad. En el lenguaje C ++, los programas se desarrollan para una amplia variedad de plataformas y sistemas.

2. Capacidad para trabajar a bajo nivel con memoria, direcciones, puertos.

3. La capacidad de crear algoritmos generalizados para diferentes tipos de datos, su especialización y cálculos de compilación mediante plantillas.

4. Multiplataforma. Los compiladores están disponibles para una gran cantidad de plataformas, en el lenguaje C ++ desarrollan programas para una amplia variedad de plataformas y sistemas.

5. Eficiencia. El lenguaje está diseñado para dar al programador el máximo control sobre todos los aspectos de la estructura y el orden de ejecución del programa.

Desventajas del idioma:

1. La presencia de muchas características que violan los principios de seguridad de tipos conduce al hecho de que un error sutil puede infiltrarse fácilmente en los programas C ++.

2. Pobre apoyo a la modularidad. La conexión de una interfaz de módulo externo mediante la inserción del preprocesador de un archivo de encabezado (#include) ralentiza seriamente la compilación cuando se conecta una gran cantidad de módulos.

3. El lenguaje C ++ es difícil de aprender y compilar.

4. Algunas conversiones de tipos no son intuitivas. En particular, las operaciones con números sin firmar y sin firmar producen resultados sin firmar.

5. Algunos consideran que la falta de un sistema integrado de recolección de basura es una desventaja de C ++. Por otro lado, C ++ tiene suficientes herramientas para casi eliminar el uso de punteros peligrosos; no hay problemas fundamentales en la implementación y uso de la recolección de basura (a nivel de bibliotecas, no del lenguaje). La falta de recolección de basura incorporada permite al usuario elegir su propia estrategia de administración de recursos.

¿Cuál es la razón de este estado del lenguaje C? Históricamente, este lenguaje es inseparable del sistema operativo Unix, que hoy está viviendo su renacimiento. Los años 60 fueron la era de la formación de sistemas operativos y lenguajes de programación de alto nivel. Durante ese período, el sistema operativo y los compiladores se desarrollaron de forma independiente para cada tipo de computadora y, a menudo, incluso sus propios lenguajes de programación (recuerde, por ejemplo, PL / I). Al mismo tiempo, los problemas comunes que surgen de esto ya se han hecho evidentes. Un intento de crear un sistema operativo móvil universal fue la respuesta a la realización de esta comunidad, y esto requirió un lenguaje de programación igualmente universal y móvil. C se convirtió en uno de esos lenguajes y Unix se convirtió en el primer sistema operativo en estar escrito casi en su totalidad en un lenguaje de alto nivel.

La estrecha relación con Unix le dio a C un campo de prueba que ningún otro idioma tenía en ese momento. La programación de sistemas se consideró el más desafiante de la industria en ese momento. En su mayor parte, dependían tanto de la máquina que muchos no pensaban en absoluto en su solución de manera diferente que en ensamblador. Los lenguajes de alto nivel estaban destinados a la programación de aplicaciones y solo implementaron de manera muy limitada las funciones necesarias para el trabajo del sistema y, a menudo, solo para un cierto tipo de máquina.

El lenguaje C se creó desde el principio para que fuera posible escribir tareas del sistema en él. Los creadores de C no desarrollaron un modelo abstracto del ejecutor del lenguaje, sino que simplemente implementaron en él aquellas capacidades que eran más necesarias en la práctica de la programación de sistemas. Estos fueron, en primer lugar, los medios de trabajo directo con la memoria, las estructuras de control estructural y la organización modular del programa. Y, de hecho, no se incluyó nada más en el idioma. Todo lo demás quedó relegado a la biblioteca en tiempo de ejecución. Por lo tanto, los malvados a veces se refieren al lenguaje C como un ensamblador estructurado. Pero no importa lo que conversaron, el enfoque resultó ser muy exitoso. Gracias a él, se alcanzó un nuevo nivel en términos de la relación entre la simplicidad y las capacidades del lenguaje.

Sin embargo, hay otro factor que ha determinado el éxito del idioma. Los creadores dividieron muy hábilmente las propiedades independientes y dependientes de la máquina. Gracias a esto, la mayoría de los programas se pueden escribir universalmente; su rendimiento no depende de la arquitectura del procesador y la memoria. Pocas de las mismas partes del código que dependen del hardware se pueden localizar en módulos separados. Y utilizando el preprocesador, puede crear módulos que, cuando se compilan en diferentes plataformas, generarán el código correspondiente dependiente de la máquina.

La sintaxis del lenguaje C ha causado mucha controversia Las técnicas de abreviatura utilizadas en él pueden hacer que el programa sea completamente ilegible si se usa en exceso. Pero, como dijo Dijkstra, los medios no tienen la culpa de que se utilicen de forma analfabeta. De hecho, las abreviaturas sintácticas propuestas en C corresponden a las situaciones estereotipadas más habituales en la práctica. Si las abreviaturas se consideran modismos para la representación expresiva y compacta de tales situaciones, entonces los beneficios de ellas se vuelven incondicionales y obvios.

Entonces, C surgió como un lenguaje de programación de sistema universal. Pero no se quedó dentro de este marco. A finales de los años 80, el lenguaje C, después de haber empujado a Fortran como líder, ganó una popularidad masiva entre los programadores de todo el mundo y comenzó a usarse en una amplia variedad de tareas aplicadas. La difusión de Unix (y por tanto de C) en el entorno universitario, donde se formó una nueva generación de programadores, jugó un papel importante aquí.

Como todos los lenguajes, C se mejoró gradualmente, pero la mayoría de las mejoras no fueron de naturaleza radical. El más significativo de estos, tal vez, debería considerarse la introducción de una especificación estricta de los tipos de funciones, que aumentó significativamente la confiabilidad de la interacción entre módulos en C.Todas estas mejoras fueron consagradas en el estándar ANSI en 1989, que todavía define el lenguaje C.

Pero si todo está tan despejado, ¿por qué todavía se usan todos los demás idiomas, lo que respalda su existencia? El talón de Aquiles del lenguaje C fue que resultó ser de un nivel demasiado bajo para las tareas que se pusieron en la agenda de los 90. Además, este problema tiene dos aspectos. Por un lado, se incorporaron herramientas de nivel demasiado bajo en el lenguaje; en primer lugar, está trabajando con memoria y aritmética de direcciones. No en vano, el cambio en la profundidad de bits de los procesadores es muy doloroso para muchos programas C. Por otro lado, C carece de instalaciones de alto nivel: tipos y objetos de datos abstractos, polimorfismo, manejo de excepciones. Como resultado, en los programas C, la técnica de implementación de la tarea a menudo domina sobre su contenido.

Los primeros intentos de corregir estas deficiencias comenzaron a principios de los años ochenta. Incluso entonces, Bjarne Stroustrup de AT&T Bell Labs comenzó a desarrollar una extensión del lenguaje C con el nombre en clave. El estilo del desarrollo fue bastante consistente con el espíritu con el que se creó el lenguaje C en sí: se introdujeron ciertas posibilidades en él para hacer más conveniente el trabajo de personas y grupos específicos. El primer traductor comercial de un nuevo lenguaje llamado C ++ apareció en 1983. Fue un preprocesador que tradujo el programa al código C. Sin embargo, el nacimiento real del lenguaje puede considerarse el lanzamiento del libro de Stroustrup en 1985. Fue a partir de este momento que C ++ comenzó a ganar popularidad en todo el mundo.

La principal innovación en C ++ es el mecanismo de clases, que permite definir y utilizar nuevos tipos de datos. El programador describe la representación interna de un objeto de clase y un conjunto de métodos de función para acceder a esta representación. Uno de los objetivos más preciados en la creación de C ++ fue el deseo de aumentar el porcentaje de reutilización del código ya escrito. El concepto de clases sugirió un mecanismo de herencia para esto. La herencia le permite crear nuevas clases (derivadas) con representación extendida y métodos modificados sin afectar el código compilado de las clases originales (base). Al mismo tiempo, la herencia proporciona uno de los mecanismos para implementar el polimorfismo: el concepto básico de programación orientada a objetos, según el cual el mismo código puede usarse para realizar el mismo tipo de procesamiento de diferentes tipos de datos. En realidad, el polimorfismo también es uno de los métodos para garantizar la reutilización del código.

La introducción de clases no agota todas las innovaciones del lenguaje C ++. Implementa un mecanismo de manejo de excepciones estructurado en toda regla, cuya ausencia en C hizo que fuera mucho más difícil escribir programas confiables, el mecanismo de creación de plantillas es un mecanismo sofisticado de macrogeneración profundamente incrustado en el lenguaje, lo que abre otro camino hacia la reutilización del código. y mucho más.

Así, la línea general de desarrollo del lenguaje tuvo como objetivo ampliar sus capacidades introduciendo nuevas construcciones de alto nivel manteniendo en la mayor medida posible la compatibilidad total con las operaciones ANSI C., de modo que el programador realmente deje de trabajar directamente con la memoria y el sistema. entidades dependientes. Sin embargo, el lenguaje no contiene mecanismos que obliguen al desarrollador a estructurar el programa correctamente, y los autores no han emitido recomendaciones sistemáticas sobre el uso de sus construcciones bastante sofisticadas. No se ocuparon de la creación oportuna de una biblioteca de clases estándar que implemente las estructuras de datos más comunes.

Todo esto llevó al hecho de que muchos desarrolladores se vieron obligados a explorar los laberintos de la semántica del lenguaje por sí mismos y buscar de forma independiente modismos que funcionen con éxito. Entonces, por ejemplo, en la primera etapa del desarrollo del lenguaje, muchos creadores de bibliotecas de clases buscaron construir una jerarquía de clases única con un Objeto de clase base común. Esta idea fue tomada de Smalltalk, uno de los lenguajes orientados a objetos más famosos. Sin embargo, resultó ser completamente inviable en C ++: las jerarquías de bibliotecas de clases cuidadosamente pensadas eran inflexibles y el trabajo de las clases no era obvio. Para que las bibliotecas de clases sean utilizables, deben enviarse en código fuente.

La aparición de las clases de plantilla refutó completamente esta dirección de desarrollo. Comenzaron a usar la herencia solo en aquellos casos en los que se requería generar una versión especializada de una clase existente. Las bibliotecas comenzaron a estar compuestas por clases separadas y pequeñas jerarquías no relacionadas. Sin embargo, a lo largo del camino, la reutilización de código comenzó a disminuir, ya que C ++ no puede usar clases polimórficas de jerarquías independientes. El uso generalizado de plantillas conduce a un aumento inaceptable en la cantidad de código compilado; no olvidemos que las plantillas se implementan mediante métodos de generación de macros.

Uno de los mayores inconvenientes de C ++, heredado de la sintaxis de C, es que el compilador tiene acceso a una descripción de la estructura interna de todas las clases utilizadas. Como consecuencia, un cambio en la estructura interna de la representación de una clase de biblioteca conduce a la necesidad de volver a compilar todos los programas donde se utiliza esta biblioteca. Esto limita enormemente a los desarrolladores de bibliotecas en términos de su modernización, porque al lanzar una nueva versión, deben mantener la compatibilidad binaria con la anterior. Es este problema el que hace que muchos expertos crean que C ++ no es adecuado para ejecutar proyectos grandes y supergrandes.

Y, sin embargo, a pesar de las deficiencias enumeradas e incluso la falta de disponibilidad del estándar de lenguaje (¡esto es después de más de quince años de uso!), C ++ sigue siendo uno de los lenguajes de programación más populares. Su punto fuerte es, ante todo, la compatibilidad casi total con el lenguaje C. Gracias a ello, los programadores de C ++ tienen acceso a todos los desarrollos realizados en C. Al mismo tiempo, C ++, incluso sin el uso de clases. , introduce en C una serie de características y comodidades adicionales tan importantes que muchos lo utilizan simplemente como una C. mejorada ...

En lo que respecta al modelo de objetos de C ++, siempre que su programa no sea muy grande (cientos de miles de líneas), puede usarlo. La reciente tendencia hacia el software de componentes solo fortalece la posición de C ++. Al desarrollar componentes individuales, los inconvenientes de C ++ aún no aparecen, y la vinculación de componentes en un sistema de trabajo ya no se realiza a nivel de lenguaje, sino a nivel de sistema operativo.

A la luz de todo lo que se ha dicho, las perspectivas para C ++ no parecen sombrías. Aunque el monopolio del mercado de lenguajes de programación no brilla para él. Quizás, solo podemos decir con confianza que este lenguaje no sobrevivirá a otra modernización-extensión. No es de extrañar, cuando apareció Java, se le prestó tanta atención. El lenguaje, que tiene una sintaxis similar a C ++, lo que significa que a muchos programadores les parece familiar, se ha librado de las deficiencias más atroces de C ++, heredado de los años 70. Sin embargo, Java no parece estar a la altura del rol que algunos le han confiado.

El papel especial de los lenguajes C / C ++ en la programación moderna hace que sea casi insignificante proporcionar direcciones específicas en Internet donde pueda encontrar materiales sobre ellos. Simplemente hay demasiados lugares como este. Sin embargo, si está interesado en aprender más sobre la evolución de C ++, comience con un pequeño artículo. http://citforum.syzran.ru/programming/prg96/76.shtml.

Alexander Sergeev, [correo electrónico protegido]
Artículo de la revista BYTE / Rusia, marzo de 2000

Para demostrar claramente el uso de los lenguajes descritos en la práctica, elegimos un problema en el que se requería ingresar una serie de números enteros de la entrada estándar o de un archivo, y luego generar solo los impares, y al revés pedido. Esta es una de las tareas más simples, que esencialmente requiere trabajar con matrices, bucles, ramificaciones y E / S para resolverla, y también le permite demostrar llamadas a subrutinas. Además, es visible y se percibe fácilmente.

Listado 1.C

1 #incluir / * Conectar funciones de entrada-salida * / 2 3 void main (void) 4 (5 int М; / * Matriz de 10 enteros, contar desde 0 * / 6 int N; 7 para (N = 0; N<10; ++N) /* Вводим не более 10 чисел */ 8 if (EOF == scanf ("%d, M+N)) 9 break; /* Если конец файла, прерываем цикл */ 10 11 for (-N; N>= 0; --N) / * Ir a través de la matriz al revés * / 12 if (M [N]% 2) / * ordenar e imprimir los impares * / 13 printf ("% d \ n", M [N]); 14)

  • Línea 3. En C / C ++, la ejecución del programa siempre comienza con la función principal.
  • Líneas 7 y 11. En el encabezado del ciclo, la configuración inicial, la condición de continuación y la regla para volver a calcular el parámetro del ciclo se especifican con punto y coma. Operaciones ++ y -/- - la más famosa de las abreviaturas del lenguaje C, que significa el aumento y la disminución de una variable, es decir, aumentar y disminuir su valor en uno.
  • Línea 8. Función scanf ingresa, según el formato especificado por el primer parámetro, los valores de las variables cuyas direcciones son especificadas por el resto de parámetros. Aquí, la dirección donde se ingresa el valor se calcula usando aritmética de direcciones, a la dirección de la ubicación de la matriz METRO compensado por norte elementos. El mismo efecto se puede obtener escribiendo & M [N].
  • Línea 12. Operación % calcula el resto de la división. Condición del operador Si se considera cumplido si el valor numérico de la expresión es distinto de cero.
  • Línea 13. Función printf- la impresión por formato funciona de la misma manera scanf, pero en lugar de direcciones, se le pasan valores para que se muestren.
1 #incluir 2 3 plantilla class Array 4 (5 public: Array (T Size = 1): M (nuevo T), N (Size), n (0) () 6 Array (void) (eliminar M;) 7 T Count (void) const ( return n;) 8 T operator (int i) const (return M [i];) 9 void Add (T Data); 10 private: 11 T * M; // Dirección de la memoria asignada 12 int N, n; // N - asignado; n - usado 13); 14 15 plantilla matriz vacía :: Add (T Data) 16 (if (N-n) // Si todos asignados 17 (int * P = new T; // se usa espacio, asigne más 18 para (int i = 0; i A; // Matriz de enteros de tamaño variable 28 while (1) // Bucle sin fin 29 (int N; 30 cin >> N; // cin - flujo de entrada estándar 31 if (cin.eof ()) break; // Salir del bucle al final del archivo 32 A.Add (N); // Agrega el número ingresado a la matriz 33) 34 for (int N = A.Count () - 1; N> = 0; --N) // Recorre la matriz 35 si (A [N]% 2) 36 cout<y libera memoria
  • Líneas 3-13. La clase de plantilla está declarada Formación con parámetro T... Es una matriz de objetos de tamaño variable como T... Por supuesto, en nuestra tarea no es necesario utilizar una clase de plantilla. Sin embargo, queríamos demostrar cómo se crea una estructura de datos polimórfica en C ++ que puede funcionar con cualquier tipo de elemento.
  • Línea 5. Constructor de clases. Inicializa la representación del objeto. Por ejemplo, en el campo METRO se ingresa la dirección del bloque de memoria ordenado por la operación nueva T.
  • Línea 8. Un ejemplo de sobrecarga de una operación. Función operador se llamará cuando aparezcan corchetes a la derecha del objeto de clase Formación.
  • Línea 9. Esta función es la principal en la implementación. Agrega elementos a la matriz, expandiéndola según sea necesario. Dado que es más complejo que los demás, su definición se toma de la descripción de la clase. Las funciones descritas en el cuerpo de la clase se implementan en C ++ no llamando, sino mediante sustitución en línea. Esto acelera el programa, aunque aumenta su tamaño.
  • Líneas 15-24. Definición de función Arrau :: Agregar (T)(por cierto, este es su nombre completo).
  • Línea 27. Creamos un objeto de tipo Formación... Templet Aggau parametrizado por tipo En t.


¿Te gustó el artículo? Compártelo