Menú
Está libre
registro
hogar  /  Internet/ Cuándo fue creado c. Adventik es una agencia digital de servicio completo

Cuando fue c. Adventik es una agencia digital de servicio completo

¿Cuál es la razón de este estado del lenguaje C? Históricamente, este lenguaje es inseparable del quirófano. Sistemas Unix, que hoy vive 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. La respuesta a la realización de esta comunidad fue un intento de crear un dispositivo móvil universal. sistema operativo, y esto requería un lenguaje de programación igualmente versátil 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 sistema funciona 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, nuevo nivel por la relación entre simplicidad y capacidad lingüística.

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 ellos, tal vez, debería considerarse la introducción de una especificación estricta de los tipos de funciones, lo que aumentó significativamente la confiabilidad de la interacción entre módulos en C.Todas estas mejoras fueron consagradas en 1989 en el estándar ANSI, 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 de 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 trabajo cómodo 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 la implementación del polimorfismo: el concepto básico de la programación orientada a objetos, según el cual, para realizar el mismo tipo de procesamiento diferentes tipos datos, se puede utilizar el mismo código. 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 dificulta mucho la escritura de 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 oportuna creación de biblioteca estándar clases que implementan 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 inconvenientes más difíciles de C ++, heredado de la sintaxis de C, es que la descripción está disponible para el compilador. 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 nueva versión, deben mantener la compatibilidad binaria con el 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 del 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. , trae una serie de tan importantes oportunidades adicionales y las comodidades que muchos lo usan simplemente como un S.

Sobre modelo de objeto C ++, siempre que su programa no sea muy grande (cientos de miles de líneas), es muy posible usarlo. La reciente tendencia emergente de transición a componentes software solo refuerza 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 cercana a C ++, lo que significa que parece familiar para muchos programadores, 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]); catorce )

  • 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, de acuerdo con el formato especificado por el primer parámetro, los valores de las variables cuyas direcciones son especificadas por los parámetros restantes. 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 para (int N = A.Count () - 1; N> = 0; --N) // Bucle a través 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.

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 la 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 asume 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 a la creación de 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)

Cuando tu reputación trabaja para tu beneficio

Gestión comunitaria

Creación de tono de voz. Procesamiento rápido de comentarios tanto negativos como positivos en nombre de la marca. Gestión de la comunicación según escenarios especificados. Difusión de momentos problemáticos al cliente.

Agentes de influencia

Creación e implementación de "virtuales" en foros y redes sociales. Existe una base de datos de cuentas actualizadas y activas en más de 300 sitios.

Trabajar con reseñas

Escribir, aceptar y publicar reseñas de marcas en las principales plataformas y sitios de reseñas. Procesar y superponer comentarios negativos con positivos. Como resultado, lo negativo se está eliminando gradualmente de los resultados de búsqueda.

Monitoreo de redes sociales

Trabajando con Youscan, IQbuzz, sistemas Brand Analytics. Control de menciones de marca. Identificación de percepciones clave, pronta respuesta a la negatividad. Una herramienta indispensable para monitorear los comentarios de los clientes.

Analítica e investigación

Análisis del campo de la información, investigación de la categoría de producto y principales competidores de la marca. Esta herramienta cubre tareas desde el control de la reputación y el marketing en tiempo real hasta la investigación en profundidad.

SERM

Análisis detallado de los resultados de búsqueda de las palabras clave seleccionadas. Recopilación de menciones del cliente en redes sociales, foros y sitios de noticias. Desarrollo de una estrategia para el manejo de información negativa. El cliente recibe una emisión totalmente controlada en el TOP10.

Historia de la creacion

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. Cuando Stroustrup comenzó a trabajar en Bell Labs a fines de la década de 1970 en problemas de colas (aplicadas al modelado de llamadas telefónicas), descubrió que los intentos de usar los lenguajes de modelado existentes en ese momento eran ineficaces y el uso de lenguajes de máquina altamente eficientes. Era demasiado difícil para su limitada expresividad. Por lo tanto, el lenguaje Simula tiene características que serían muy útiles para desarrollar software de gran tamaño, pero es demasiado lento, y el lenguaje BCPL es lo suficientemente rápido, pero demasiado cercano a los lenguajes de bajo nivel y no es adecuado para desarrollar software de gran tamaño. .

Recordando la experiencia de su disertación, Stroustrup decidió complementar el lenguaje C (sucesor de BCPL) 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). En primer lugar, C agregó clases (con encapsulación), herencia de clases, verificación de tipos sólida, funciones en línea y argumentos predeterminados. Las primeras versiones del lenguaje, originalmente llamadas "C con clases", están disponibles desde 1980.

Mientras desarrollaba C con clases, Stroustrup escribió cfront, un traductor que convierte el código fuente de C con clases en código fuente simple de C. Esto hizo posible trabajar en un nuevo lenguaje y usarlo en la práctica, utilizando la infraestructura UNIX existente para el desarrollo de C. El nuevo lenguaje, inesperadamente para el autor, ganó gran popularidad entre sus colegas y pronto Stroustrup ya no pudo apoyarlo personalmente, respondiendo miles de preguntas.

Al crear C ++, Björn Stroustrup quería
  • 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, incluida la programación procedimental, la abstracción de datos, la programación orientada a objetos y la programación genérica.
  • 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.

La elección de C como base para la creación de un nuevo lenguaje de programación se explica por el hecho de que el lenguaje C:

1. es un lenguaje polivalente, conciso y de nivel relativamente bajo;
2. adecuado para la mayoría de las tareas del sistema;
3. realizado en todas partes y en todo;
4. se acopla al entorno de programación UNIX.

- B. Stroustrup. Lenguaje de programación C ++. Sección 1.6

A pesar de una serie de deficiencias conocidas del lenguaje C, Stroustrup decidió usarlo como base, ya que "C tiene sus propios problemas, pero un lenguaje desarrollado desde cero los tendría, y conocemos los problemas de C". También hizo posible desarrollar rápidamente un compilador prototipo (cfront) que solo traducía los elementos de sintaxis agregados al lenguaje C original.

A medida que se desarrolló C ++, se incluyeron otras características que se superponían a las capacidades de las construcciones de C, en relación con las cuales se planteó repetidamente la cuestión de abandonar la compatibilidad del lenguaje eliminando construcciones obsoletas. Sin embargo, la compatibilidad se ha mantenido por las siguientes razones:

  • preservación del código actual, escrito originalmente en C y portado directamente a C ++;
  • eliminación de la necesidad de volver a capacitar a los programadores que previamente estudiaron C (solo necesitan aprender nuevas herramientas de C ++);
  • eliminación de la confusión entre idiomas cuando se usan juntos ("si se usan dos idiomas juntos, sus diferencias deben ser mínimas o tan grandes que los idiomas no se puedan confundir").

En 1983, se agregaron nuevas características al lenguaje, como funciones virtuales, sobrecarga de funciones y operadores, referencias, constantes, control del usuario sobre la administración de memoria libre, verificación de tipos mejorada y un nuevo estilo de comentarios (//). El lenguaje resultante ha dejado de ser solo una versión extendida del clásico C y ha sido renombrado de C con clases a "C ++". Su primer lanzamiento comercial tuvo lugar en octubre de 1985.

El nombre del lenguaje resultante proviene del operador de incremento de sufijo unario de C ++ (aumentando el valor de una variable en uno).

Antes de la estandarización oficial, el lenguaje fue desarrollado principalmente por Stroustrup en respuesta a las solicitudes de la comunidad de programación. La función de descripciones del lenguaje estándar fue realizada por los trabajos publicados en C ++ escritos por Stroustrup (descripción del lenguaje, manual de referencia, etc.).

Historia de los estándares

En 1985, se lanzó la primera edición de The C ++ Programming Language, proporcionando la primera descripción del lenguaje, que fue extremadamente importante debido a la falta de un estándar oficial.


En 1989, se lanzó la versión 2.0 de C ++. Sus nuevas características incluían herencia múltiple, clases abstractas, funciones miembro estáticas, funciones constantes y miembros protegidos. En 1990, se publicó la Guía de referencia comentada de C ++, que más tarde se convirtió en la base del estándar. Las actualizaciones recientes han incluido plantillas, excepciones, espacios de nombres, nuevos elencos y valores booleanos.

La biblioteca estándar de C ++ también ha evolucionado con ella. La primera adición a la biblioteca estándar de C ++ fueron los flujos de E / S, que proporcionan un medio para reemplazar las funciones tradicionales printf y scanf de C. Más recientemente, el desarrollo más significativo de la biblioteca estándar fue la inclusión de la Biblioteca de plantillas estándar.

En 1998, se publicó el estándar de lenguaje ISO / IEC 14882: 1998 (conocido como C ++ 98), desarrollado por el comité de estandarización de C ++ (grupo de trabajo ISO / IEC JTC1 / SC22 / WG21). El estándar C ++ no cubre las convenciones de nomenclatura para objetos, algunos de los detalles del manejo de excepciones y otras características relacionadas con los detalles de implementación, lo que hace que el código objeto generado por diferentes compiladores sea incompatible. Sin embargo, para hacer esto, terceros han creado muchos estándares para arquitecturas y sistemas operativos específicos.

En 2005, se publicó el Informe técnico de la biblioteca 1 (llamado TR1 para abreviar). Si bien no es oficialmente parte del estándar, el informe describe extensiones de la biblioteca estándar que los autores esperaban que se incluyeran en la próxima versión del lenguaje C ++. La compatibilidad con TR1 se está mejorando en casi todos los compiladores de C ++ compatibles.

Desde 2009, se ha trabajado para actualizar el estándar anterior, la versión preliminar del nuevo estándar fue primero C ++ 09, y un año después C ++ 0x, hoy - C ++ 11, que incluía adiciones al núcleo. del idioma y una extensión de la biblioteca estándar, incluida la mayor parte de TR1.

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 Boost, que se dedica, entre otras cosas, a mejorar las capacidades del lenguaje agregándole características de metaprogramación.

Nadie posee los derechos del lenguaje C ++, es gratis. Sin embargo, el documento estándar de idioma en sí (a excepción de los borradores) no está disponible de forma gratuita.

Etiquetas: Historia de la estandarización C, ANSI C, ISO C, C99, C11, ISO / IEC C, C.

Orígenes

C y es un "producto complementario" de la creación del sistema operativo UNIX, que fue desarrollado en Bell Laboratories por Ken Thompson, Denis Ritchie y compañía. Thompson escribió sin ayuda la versión original de UNIX que se ejecutaba en el DEC PDP-7, una de las primeras miniordenadores con solo 8K palabras en la memoria principal (después de todo, era 1969).

Como otros sistemas operativos de la época, UNIX estaba escrito en lenguaje ensamblador. La depuración de programas en lenguaje ensamblador es dolorosa y difícil de mejorar, y UNIX no fue una excepción. Thompson decidió que se necesitaba un lenguaje de alto nivel para desarrollar aún más el sistema operativo y se le ocurrió un lenguaje pequeño B. Thompson tomó como base el lenguaje BCPL, un lenguaje de programación de sistemas desarrollado a mediados de los años 60. BCPL, a su vez, se origina en Algol 60, uno de los idiomas más antiguos (y más influyentes).

Ritchie pronto se unió al proyecto UNIX y comenzó a escribir en B. En 1970 Bell Labs adquirió el PDP-11 para el proyecto. Dado que B estaba listo para ejecutarse en el PDP-11, Thompson reescribió parte de UNIX en B. En 1971, quedó claro que B no era del todo adecuado para el PDP-11, por lo que Ritchie comenzó a crear una versión extendida de B. En primero lo llamó NB (Nuevo B), pero cuando el lenguaje se volvió muy diferente del B, el nombre se cambió a C. En 1973, el lenguaje era lo suficientemente estable como para reescribir UNIX en él. El cambio a C proporcionó un beneficio importante: la portabilidad. Al escribir un compilador de C para cada una de las máquinas en Bell Labs, el equipo de desarrollo podría migrarlos a UNIX.

Estandarización

C siguió evolucionando en los años 70, especialmente de 1977 a 1979, cuando el primer libro sobre C. El lenguaje de programación C, escrito por Brian Kernighan y Denis Ritchie y publicado en 1978, se convirtió en la Biblia de los programadores de C. En ausencia de un estándar oficial, este libro, también conocido como K&R, o el Libro Blanco, como les gusta llamarlo a los fanáticos de C, se ha convertido en el estándar de facto. En los años 70 había pocos programadores en C y la mayoría de ellos eran usuarios de UNIX. Sin embargo, en la década de 1980, C se movió más allá de los estrechos confines del mundo UNIX. Los compiladores de C están disponibles en una variedad de máquinas que ejecutan diferentes sistemas operativos. En particular, Xi comenzó a extenderse en la plataforma IBM PC en rápida evolución.

Junto con el aumento de la popularidad, surgieron problemas. Los programadores que escribieron los nuevos compiladores tomaron como base el lenguaje descrito en K&R. Desafortunadamente, algunas características del lenguaje se describieron vagamente en K&R, por lo que los compiladores a menudo las interpretaron a su discreción. Además, el libro no tenía una distinción clara entre lo que es una característica del lenguaje y lo que es una característica del sistema operativo UNIX. La situación empeoró por el hecho de que después de la publicación de K&R C siguió desarrollándose: se le agregaron nuevas funciones y se eliminaron las antiguas. Pronto surgió una necesidad obvia de una descripción completa, precisa y actualizada del idioma. Sin ese estándar, comenzaron a surgir dialectos del idioma que interferían con la portabilidad, el lado más fuerte del idioma.

El desarrollo del estándar C estadounidense comenzó en 1983 bajo los auspicios del Instituto Nacional Estadounidense de Estándares (ANSI). Después de muchas mejoras, la norma se completó en 1988 y se adoptó formalmente en diciembre de 1989 como norma ANSI X3.159-1989. En 1990, fue aprobado por la Organización Internacional de Normalización (ISO) como el estándar internacional ISO / IEC 9899: 1990. Esta versión del lenguaje se conoce comúnmente como C89 o C90, para no confundirla con la C original, que comúnmente se conoce como K&R C.

El lenguaje sufrió cambios menores en 1995 (los cambios se describen en un documento comúnmente conocido como Enmienda 1). En 1999 se produjeron cambios más significativos cuando se publicó la norma ISO / IEC 9899: 1999. El lenguaje descrito en esta norma se denomina comúnmente C99. Los términos "ANSI C", "ANSI / ISO C" e "ISO C", que alguna vez se usaron para describir C99 debido a la existencia de dos estándares, son ambiguos.

En 2011, junto con la edición C ++, se lanzó el estándar C11. A pesar de la existencia del estándar de 11 años, muchos compiladores aún no son totalmente compatibles con las versiones C99, por lo que el uso del estándar C11 se especificará explícitamente.