SlideShare una empresa de Scribd logo
1 de 5
Descargar para leer sin conexión
Carrera : Informatica
C++ es un lenguaje imperativo orientado a objetos derivado del C [1]. En realidad
un superconjunto de C, que nació para añadirle cualidades y características de las
que carecía. El resultado es que como su ancestro, sigue muy ligado al hardware
subyacente, manteniendo una considerable potencia para programación a bajo
nivel, pero se la han añadido elementos que le permiten también un estilo de
programación con alto nivel de abstracción.
Nota: estrictamente hablando, C no es un subconjunto de C++; de hecho es
posible escribir código C que es ilegal en C++. Pero a efectos prácticos, dado el
esfuerzo de compatibilidad desplegado en su diseño, puede considerarse que C++
es una extensión del C clásico. La definición "oficial" del lenguaje nos dice que
C++ es un lenguaje de propósito general basado en el C, al que se han añadido
nuevos tipos de datos, clases, plantillas, mecanismo de excepciones, sistema de
espacios de nombres, funciones inline, sobrecarga de operadores, referencias,
operadores para manejo de memoria persistente, y algunas utilidades adicionales
de librería (en realidad la librería Estándar C es un subconjunto de la librería
C++).
Respecto a su antecesor, se ha procurando mantener una exquisita compatibilidad
hacia atrás por dos razones [2]: poder reutilizar la enorme cantidad de
código C existente, y facilitar una transición lo más fluida posible a los
programadores de Cclásico, de forma que pudieran pasar sus programas a C++ e
ir modificándolos (haciéndolos más "++") de forma gradual. De hecho, los primeros
compiladores C++ lo que hacían en realidad era traducir (preprocesar) a C y
compilar después [3] (las consecuencias se dejan sentir todavía en el
lenguaje 1.4.2).
Por lo general puede compilarse un programa C bajo C++, pero no a la inversa si
el programa utiliza alguna de las características especiales de C++. Algunas
situaciones requieren especial cuidado. Por ejemplo, si se declara una función dos
veces con diferente tipo de argumentos, el compilador C invoca un error de
"Nombre duplicado", mientras que en C++ quizás sea interpretado como una
sobrecarga de la primera función (que sea o no legal depende de otras
circunstancias).
Como se ha señalado, C++ no es un lenguaje orientado a objetos puro (en el
sentido en que puede serlo Java por ejemplo), además no nació como un ejercicio
académico de diseño. Se trata simplemente del sucesor de un lenguaje de
programación hecho por programadores (de alto nivel) para programadores, lo que
se traduce en un diseño pragmático al que se le han ido añadiendo todos los
elementos que la práctica aconsejaba como necesarios, con independencia de su
belleza o purismo conceptual ("Perfection, in some language theoretical sense, is
not an aim of C++. Utility is" [6]). Estos condicionantes tienen su cara y su
cruz; en ocasiones son motivo de ciertos "reproches" por parte de sus
detractores, en otras, estas características son precisamente una cualidad. De
hecho, en el diseño de la Librería Estándar C++ ( 5.1) se ha usado ampliamente
esta dualidad (ser mezcla de un lenguaje tradicional con elementos de POO), lo
que ha permitido un modelo muy avanzado de programación extraordinariamente
flexible (programación genérica).
Aunque C++ introduce nuevas palabras clave y operadores para manejo de
clases, algunas de sus extensiones tienen aplicación fuera del contexto de
programación con objetos (fuera del ámbito de las clases), de hecho, muchos
aspectos de C++ que pueden ser usados independientemente de las clases [5].
Del C se ha dicho: "Por naturaleza, el lenguaje C es permisivo e intenta hacer algo
razonable con lo que se haya escrito. Aunque normalmente esto es una virtud,
también puede hacer que ciertos errores sean difíciles de descubrir"
( Shildt). Respecto alC++ podríamos decir otro tanto, pero hemos de reconocer
que su sistema de detección de errores es mucho más robusto que el de C, por lo
que algunos errores de este serán rápidamente detectados.
Desde luego, C++ es un lenguaje de programación extremadamente largo y
complejo; cuando nos adentramos en él parece no acabar nunca. Justo cuando
aprendemos un significado descubrimos que una mano negra ha añadido otras
dos o tres acepciones para la misma palabra. También descubrimos que
prácticamente no hay una regla sin su correspondiente excepción. Cuando
aprendemos que algo no se puede hacer, hay siempre algún truco escondido para
hacerlo, y cuando nos dicen que es un lenguaje fuertemente tipado ("Strong type
checking"), resulta completamente falso.
A pesar de todo, ha experimentado un extraordinario éxito desde su creación. De
hecho, muchos sistemas operativos [4], compiladores e intérpretes han sido
escritos en C++ (el propio Windows y Java). Una de las razones de su éxito es
ser un lenguaje de propósito general que se adapta a múltiples situaciones. Para
comprobar el éxito e importancia de los desarrollos realizados en C++ puede
darse una vuelta por la página que mantiene el Dr. .
Tanto sus fervientes defensores como sus acérrimos detractores han hecho correr
ríos de tinta ensalzando sus cualidades o subrayando sus miserias, aunque todo
el mundo parece estar de acuerdo en que es largo y complejo. Ha servido de
justificación para el diseño de otros lenguajes que intentan eliminar sus
inconvenientes al tiempo que mantener sus virtudes (C# y Java por ejemplo), y
una de sus última incorporaciones, las plantillas ( 4.12), ha sido origen de un
nuevo paradigma de programación (metaprogramación).
En mi opinión, cualquier lenguaje de propósito general que como C++, permita
tocar ambos mundos, la programación de bajo nivel y altos niveles de abstracción,
resultará siempre e inevitablemente complejo. Ocurre lo mismo con los lenguajes
naturales que son también extraordinariamente complejos (esto lo saben bien los
gramáticos). Cualquier comunicación entre humanos presupone una ingente
cantidad de conocimientos y suposiciones previas entre los interlocutores. A
pesar de lo cual, la comunicación exacta y sin ambigüedades entre dos personas
no resulta fácil.
§2 Consejos para mejorar el rendimiento
Lo mismo que en su ancestro, en el diseño del C++ primó sobre todo la velocidad
de ejecución del código [4]. Tanto uno como otro representan los ejecutables más
rápidos que se pueden construir para una máquina y circunstancias
determinadas. En este sentido, la única alternativa de mejora es la codificación
manual, el "pulido" de determinadas rutinas (o de todo el código) en
ensamblador, aunque evidentemente esto es impracticable para aplicaciones
medianamente grandes, a no ser que se disponga de todos los recursos y tiempo
del mundo.
Con todo, a pesar de ser un lenguaje intrínsecamente rápido, y de que los
compiladores modernos son bastante "inteligentes" en este sentido (adoptan
automáticamente las decisiones que resultan en el código de ejecución más
eficiente), es mucho lo que puede hacer el programador para favorecer esta
rapidez con solo adoptar algunas sencillas precauciones. Estos son los consejos:
 Use enteros (int) con preferencia sobre cualquier otro tipo de variable
numérica. En especial en los contadores de bucles. Las operaciones con
enteros son del orden de 10 a 20 veces más rápidas que las de números en
coma flotante.
 Use operadores incremento y decremento ++/-- ( 4.9.1)
 Use variables de registro, en especial en los bucles críticos, sobre todo si
son anidados ( 4.1.8b).
 Use aritmética de punteros frente a subíndices de matrices ( 4.2.2).
 En problemas de computación numérica recuerde que el cálculo de
funciones trascendentes es por lo general muy lento.
 Use referencias para argumentos y valores devueltos en funciones, antes
que objetos "por valor" ( 4.2.3)
 Al definir clases utilice al mínimo las funciones virtuales ( 1.4.4; 4.11.8a),
así como los punteros a funciones-miembro ( 4.2.1g)
o Tenga en cuenta lo señalado respecto al rendimiento al tratar de:
o Sustituciones inline en funciones definidas por el usuario ( 4.4.6b)
 Preste atención al modo de uso de aquellas funciones de librería que se
presentan en dos versiones ( 5.1 Funciones y macros)
Los compiladores modernos permiten fijar que criterio de optimización será
dominante: La velocidad de ejecución o el tamaño. Tanto Borland C++ ( 1.4.3)
como MS Visual C++ utilizan la misma convención de llamada para este propósito
(opciones -O2 o-O1 respectivamente). Por su parte, GNU gcc dispone de varias
opciones de optimización. En particular, la opción -Os adopta las medidas
tendentes a reducir el tamaño del código resultante.

Más contenido relacionado

La actualidad más candente

Reporte de visual c#(jose gonzalo estrada lopez)
Reporte de visual c#(jose gonzalo estrada lopez)Reporte de visual c#(jose gonzalo estrada lopez)
Reporte de visual c#(jose gonzalo estrada lopez)josegonzalo130
 
Curso de programacion en c++ prev
Curso de programacion en c++ prevCurso de programacion en c++ prev
Curso de programacion en c++ prevjtk1
 
Mi lenguaje de programación de preferencia es C++
Mi lenguaje de programación de preferencia es C++Mi lenguaje de programación de preferencia es C++
Mi lenguaje de programación de preferencia es C++N_Alejandrino
 
c++ introduccion
c++ introduccionc++ introduccion
c++ introduccionjennipaola
 
Programacion c# vbnet
Programacion c# vbnetProgramacion c# vbnet
Programacion c# vbnetKevin Reaño
 
Historia de c++
Historia de c++Historia de c++
Historia de c++edwin562
 
Users c#guia total del programador
Users c#guia total del programadorUsers c#guia total del programador
Users c#guia total del programadorSantos Rivera Luján
 
Historia de c++
Historia de c++Historia de c++
Historia de c++edwin562
 
Quasi - Introducción al Lenguaje C
Quasi - Introducción al Lenguaje CQuasi - Introducción al Lenguaje C
Quasi - Introducción al Lenguaje Cdegarden
 
Características de c sharp
Características de c sharpCaracterísticas de c sharp
Características de c sharpuccvirtual
 

La actualidad más candente (20)

Reporte de visual c#(jose gonzalo estrada lopez)
Reporte de visual c#(jose gonzalo estrada lopez)Reporte de visual c#(jose gonzalo estrada lopez)
Reporte de visual c#(jose gonzalo estrada lopez)
 
ACTIVIDAD DE INVESTIGACION
ACTIVIDAD DE INVESTIGACIONACTIVIDAD DE INVESTIGACION
ACTIVIDAD DE INVESTIGACION
 
Como usar el lenguaje c++
Como usar el lenguaje c++Como usar el lenguaje c++
Como usar el lenguaje c++
 
Curso de programacion en c++ prev
Curso de programacion en c++ prevCurso de programacion en c++ prev
Curso de programacion en c++ prev
 
Introduccion a Visual C Sharp
Introduccion a Visual C SharpIntroduccion a Visual C Sharp
Introduccion a Visual C Sharp
 
1. introducción a c#
1.  introducción a c#1.  introducción a c#
1. introducción a c#
 
Mi lenguaje de programación de preferencia es C++
Mi lenguaje de programación de preferencia es C++Mi lenguaje de programación de preferencia es C++
Mi lenguaje de programación de preferencia es C++
 
C(++) programacion en c y c++
C(++)   programacion en c y c++C(++)   programacion en c y c++
C(++) programacion en c y c++
 
c++ introduccion
c++ introduccionc++ introduccion
c++ introduccion
 
Lenguaje c++
Lenguaje c++Lenguaje c++
Lenguaje c++
 
Manual de c/c++
Manual de c/c++Manual de c/c++
Manual de c/c++
 
Lenguaje de-programacion-c++
Lenguaje de-programacion-c++Lenguaje de-programacion-c++
Lenguaje de-programacion-c++
 
Programacion c# vbnet
Programacion c# vbnetProgramacion c# vbnet
Programacion c# vbnet
 
Informe lpi
Informe lpiInforme lpi
Informe lpi
 
Historia de c++
Historia de c++Historia de c++
Historia de c++
 
Users c#guia total del programador
Users c#guia total del programadorUsers c#guia total del programador
Users c#guia total del programador
 
Historia de c++
Historia de c++Historia de c++
Historia de c++
 
Quasi - Introducción al Lenguaje C
Quasi - Introducción al Lenguaje CQuasi - Introducción al Lenguaje C
Quasi - Introducción al Lenguaje C
 
Características de c sharp
Características de c sharpCaracterísticas de c sharp
Características de c sharp
 
Aprendiendo Lenguaje C
Aprendiendo Lenguaje CAprendiendo Lenguaje C
Aprendiendo Lenguaje C
 

Similar a Grupo 201

Similar a Grupo 201 (20)

lengua c++
lengua c++lengua c++
lengua c++
 
C# documento de texto junto con mapa conceptual
C# documento de texto junto con mapa conceptualC# documento de texto junto con mapa conceptual
C# documento de texto junto con mapa conceptual
 
Unidad3 130504163038-phpapp02 (1)
Unidad3 130504163038-phpapp02 (1)Unidad3 130504163038-phpapp02 (1)
Unidad3 130504163038-phpapp02 (1)
 
Lenguaje c
Lenguaje cLenguaje c
Lenguaje c
 
Santaella u5 Lenguaje C++
Santaella u5 Lenguaje C++Santaella u5 Lenguaje C++
Santaella u5 Lenguaje C++
 
331985319 santaella u5-lenguajedeprogramacionc
331985319 santaella u5-lenguajedeprogramacionc331985319 santaella u5-lenguajedeprogramacionc
331985319 santaella u5-lenguajedeprogramacionc
 
Unidad 5 Lenguaje de Programacion C y C++
Unidad 5 Lenguaje de Programacion C y C++Unidad 5 Lenguaje de Programacion C y C++
Unidad 5 Lenguaje de Programacion C y C++
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
3
33
3
 
Unidad 3 margie
Unidad 3 margieUnidad 3 margie
Unidad 3 margie
 
2154086 curso-c-c-con-clase
2154086 curso-c-c-con-clase2154086 curso-c-c-con-clase
2154086 curso-c-c-con-clase
 
Cursocpp
CursocppCursocpp
Cursocpp
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Lenguajes de programacion
Lenguajes de programacionLenguajes de programacion
Lenguajes de programacion
 
Informatica
InformaticaInformatica
Informatica
 
Pul123
Pul123Pul123
Pul123
 
Historia del C++ y JAVA
Historia del C++ y JAVAHistoria del C++ y JAVA
Historia del C++ y JAVA
 
Lenguaje c1
Lenguaje c1Lenguaje c1
Lenguaje c1
 
Curso c++
Curso c++Curso c++
Curso c++
 

Último

SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónLourdes Feria
 
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfEjercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfMaritzaRetamozoVera
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfFrancisco158360
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdfDemetrio Ccesa Rayme
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSjlorentemartos
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADauxsoporte
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxYadi Campos
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Carlos Muñoz
 
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptxTECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptxKarlaMassielMartinez
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Alejandrino Halire Ccahuana
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 
plan de capacitacion docente AIP 2024 clllll.pdf
plan de capacitacion docente  AIP 2024          clllll.pdfplan de capacitacion docente  AIP 2024          clllll.pdf
plan de capacitacion docente AIP 2024 clllll.pdfenelcielosiempre
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAJAVIER SOLIS NOYOLA
 
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñoproyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñotapirjackluis
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arteRaquel Martín Contreras
 

Último (20)

SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfEjercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
 
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdfTema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 
Neurociencias para Educadores NE24 Ccesa007.pdf
Neurociencias para Educadores  NE24  Ccesa007.pdfNeurociencias para Educadores  NE24  Ccesa007.pdf
Neurociencias para Educadores NE24 Ccesa007.pdf
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
 
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptxTECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
plan de capacitacion docente AIP 2024 clllll.pdf
plan de capacitacion docente  AIP 2024          clllll.pdfplan de capacitacion docente  AIP 2024          clllll.pdf
plan de capacitacion docente AIP 2024 clllll.pdf
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
 
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñoproyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arte
 

Grupo 201

  • 2. C++ es un lenguaje imperativo orientado a objetos derivado del C [1]. En realidad un superconjunto de C, que nació para añadirle cualidades y características de las que carecía. El resultado es que como su ancestro, sigue muy ligado al hardware subyacente, manteniendo una considerable potencia para programación a bajo nivel, pero se la han añadido elementos que le permiten también un estilo de programación con alto nivel de abstracción. Nota: estrictamente hablando, C no es un subconjunto de C++; de hecho es posible escribir código C que es ilegal en C++. Pero a efectos prácticos, dado el esfuerzo de compatibilidad desplegado en su diseño, puede considerarse que C++ es una extensión del C clásico. La definición "oficial" del lenguaje nos dice que C++ es un lenguaje de propósito general basado en el C, al que se han añadido nuevos tipos de datos, clases, plantillas, mecanismo de excepciones, sistema de espacios de nombres, funciones inline, sobrecarga de operadores, referencias, operadores para manejo de memoria persistente, y algunas utilidades adicionales de librería (en realidad la librería Estándar C es un subconjunto de la librería C++). Respecto a su antecesor, se ha procurando mantener una exquisita compatibilidad hacia atrás por dos razones [2]: poder reutilizar la enorme cantidad de código C existente, y facilitar una transición lo más fluida posible a los programadores de Cclásico, de forma que pudieran pasar sus programas a C++ e ir modificándolos (haciéndolos más "++") de forma gradual. De hecho, los primeros compiladores C++ lo que hacían en realidad era traducir (preprocesar) a C y compilar después [3] (las consecuencias se dejan sentir todavía en el lenguaje 1.4.2). Por lo general puede compilarse un programa C bajo C++, pero no a la inversa si el programa utiliza alguna de las características especiales de C++. Algunas situaciones requieren especial cuidado. Por ejemplo, si se declara una función dos veces con diferente tipo de argumentos, el compilador C invoca un error de "Nombre duplicado", mientras que en C++ quizás sea interpretado como una sobrecarga de la primera función (que sea o no legal depende de otras circunstancias). Como se ha señalado, C++ no es un lenguaje orientado a objetos puro (en el sentido en que puede serlo Java por ejemplo), además no nació como un ejercicio académico de diseño. Se trata simplemente del sucesor de un lenguaje de programación hecho por programadores (de alto nivel) para programadores, lo que se traduce en un diseño pragmático al que se le han ido añadiendo todos los elementos que la práctica aconsejaba como necesarios, con independencia de su belleza o purismo conceptual ("Perfection, in some language theoretical sense, is not an aim of C++. Utility is" [6]). Estos condicionantes tienen su cara y su cruz; en ocasiones son motivo de ciertos "reproches" por parte de sus
  • 3. detractores, en otras, estas características son precisamente una cualidad. De hecho, en el diseño de la Librería Estándar C++ ( 5.1) se ha usado ampliamente esta dualidad (ser mezcla de un lenguaje tradicional con elementos de POO), lo que ha permitido un modelo muy avanzado de programación extraordinariamente flexible (programación genérica). Aunque C++ introduce nuevas palabras clave y operadores para manejo de clases, algunas de sus extensiones tienen aplicación fuera del contexto de programación con objetos (fuera del ámbito de las clases), de hecho, muchos aspectos de C++ que pueden ser usados independientemente de las clases [5]. Del C se ha dicho: "Por naturaleza, el lenguaje C es permisivo e intenta hacer algo razonable con lo que se haya escrito. Aunque normalmente esto es una virtud, también puede hacer que ciertos errores sean difíciles de descubrir" ( Shildt). Respecto alC++ podríamos decir otro tanto, pero hemos de reconocer que su sistema de detección de errores es mucho más robusto que el de C, por lo que algunos errores de este serán rápidamente detectados. Desde luego, C++ es un lenguaje de programación extremadamente largo y complejo; cuando nos adentramos en él parece no acabar nunca. Justo cuando aprendemos un significado descubrimos que una mano negra ha añadido otras dos o tres acepciones para la misma palabra. También descubrimos que prácticamente no hay una regla sin su correspondiente excepción. Cuando aprendemos que algo no se puede hacer, hay siempre algún truco escondido para hacerlo, y cuando nos dicen que es un lenguaje fuertemente tipado ("Strong type checking"), resulta completamente falso. A pesar de todo, ha experimentado un extraordinario éxito desde su creación. De hecho, muchos sistemas operativos [4], compiladores e intérpretes han sido escritos en C++ (el propio Windows y Java). Una de las razones de su éxito es ser un lenguaje de propósito general que se adapta a múltiples situaciones. Para comprobar el éxito e importancia de los desarrollos realizados en C++ puede darse una vuelta por la página que mantiene el Dr. . Tanto sus fervientes defensores como sus acérrimos detractores han hecho correr ríos de tinta ensalzando sus cualidades o subrayando sus miserias, aunque todo el mundo parece estar de acuerdo en que es largo y complejo. Ha servido de justificación para el diseño de otros lenguajes que intentan eliminar sus inconvenientes al tiempo que mantener sus virtudes (C# y Java por ejemplo), y una de sus última incorporaciones, las plantillas ( 4.12), ha sido origen de un nuevo paradigma de programación (metaprogramación). En mi opinión, cualquier lenguaje de propósito general que como C++, permita tocar ambos mundos, la programación de bajo nivel y altos niveles de abstracción, resultará siempre e inevitablemente complejo. Ocurre lo mismo con los lenguajes
  • 4. naturales que son también extraordinariamente complejos (esto lo saben bien los gramáticos). Cualquier comunicación entre humanos presupone una ingente cantidad de conocimientos y suposiciones previas entre los interlocutores. A pesar de lo cual, la comunicación exacta y sin ambigüedades entre dos personas no resulta fácil. §2 Consejos para mejorar el rendimiento Lo mismo que en su ancestro, en el diseño del C++ primó sobre todo la velocidad de ejecución del código [4]. Tanto uno como otro representan los ejecutables más rápidos que se pueden construir para una máquina y circunstancias determinadas. En este sentido, la única alternativa de mejora es la codificación manual, el "pulido" de determinadas rutinas (o de todo el código) en ensamblador, aunque evidentemente esto es impracticable para aplicaciones medianamente grandes, a no ser que se disponga de todos los recursos y tiempo del mundo. Con todo, a pesar de ser un lenguaje intrínsecamente rápido, y de que los compiladores modernos son bastante "inteligentes" en este sentido (adoptan automáticamente las decisiones que resultan en el código de ejecución más eficiente), es mucho lo que puede hacer el programador para favorecer esta rapidez con solo adoptar algunas sencillas precauciones. Estos son los consejos:  Use enteros (int) con preferencia sobre cualquier otro tipo de variable numérica. En especial en los contadores de bucles. Las operaciones con enteros son del orden de 10 a 20 veces más rápidas que las de números en coma flotante.  Use operadores incremento y decremento ++/-- ( 4.9.1)  Use variables de registro, en especial en los bucles críticos, sobre todo si son anidados ( 4.1.8b).  Use aritmética de punteros frente a subíndices de matrices ( 4.2.2).  En problemas de computación numérica recuerde que el cálculo de funciones trascendentes es por lo general muy lento.  Use referencias para argumentos y valores devueltos en funciones, antes que objetos "por valor" ( 4.2.3)  Al definir clases utilice al mínimo las funciones virtuales ( 1.4.4; 4.11.8a), así como los punteros a funciones-miembro ( 4.2.1g) o Tenga en cuenta lo señalado respecto al rendimiento al tratar de: o Sustituciones inline en funciones definidas por el usuario ( 4.4.6b)
  • 5.  Preste atención al modo de uso de aquellas funciones de librería que se presentan en dos versiones ( 5.1 Funciones y macros) Los compiladores modernos permiten fijar que criterio de optimización será dominante: La velocidad de ejecución o el tamaño. Tanto Borland C++ ( 1.4.3) como MS Visual C++ utilizan la misma convención de llamada para este propósito (opciones -O2 o-O1 respectivamente). Por su parte, GNU gcc dispone de varias opciones de optimización. En particular, la opción -Os adopta las medidas tendentes a reducir el tamaño del código resultante.