SlideShare ist ein Scribd-Unternehmen logo
1 von 5
Downloaden Sie, um offline zu lesen
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.

Weitere ähnliche Inhalte

Was ist angesagt?

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
 

Was ist angesagt? (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
 

Ähnlich wie Grupo 201

Ähnlich wie 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++
 

Kürzlich hochgeladen

Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...fcastellanos3
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfAlfredoRamirez953210
 
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsxJuanpm27
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfDaniel Ángel Corral de la Mata, Ph.D.
 
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADOPLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADOMARIBEL DIAZ
 
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADOCUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADOEveliaHernandez8
 
FICHA PL PACO YUNQUE.docx PRIMARIA CUARTO GRADO
FICHA  PL PACO YUNQUE.docx PRIMARIA CUARTO GRADOFICHA  PL PACO YUNQUE.docx PRIMARIA CUARTO GRADO
FICHA PL PACO YUNQUE.docx PRIMARIA CUARTO GRADOMARIBEL DIAZ
 
libro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación iniciallibro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación inicialLorenaSanchez350426
 
describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...DavidBautistaFlores1
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfcoloncopias5
 
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaManejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaLuis Minaya
 
sesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfsesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfpatriciavsquezbecerr
 
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxSecuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxNataliaGonzalez619348
 
DETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIORDETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIORGonella
 
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfFichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfssuser50d1252
 
Fichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdfFichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdfssuser50d1252
 

Kürzlich hochgeladen (20)

VISITA À PROTEÇÃO CIVIL _
VISITA À PROTEÇÃO CIVIL                  _VISITA À PROTEÇÃO CIVIL                  _
VISITA À PROTEÇÃO CIVIL _
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
 
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
 
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADOPLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
 
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADOCUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
 
La luz brilla en la oscuridad. Necesitamos luz
La luz brilla en la oscuridad. Necesitamos luzLa luz brilla en la oscuridad. Necesitamos luz
La luz brilla en la oscuridad. Necesitamos luz
 
FICHA PL PACO YUNQUE.docx PRIMARIA CUARTO GRADO
FICHA  PL PACO YUNQUE.docx PRIMARIA CUARTO GRADOFICHA  PL PACO YUNQUE.docx PRIMARIA CUARTO GRADO
FICHA PL PACO YUNQUE.docx PRIMARIA CUARTO GRADO
 
libro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación iniciallibro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación inicial
 
describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...
 
Aedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptxAedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptx
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
 
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaManejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
 
sesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfsesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdf
 
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxSecuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
 
DETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIORDETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIOR
 
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfFichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
 
Fichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdfFichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdf
 
DIA INTERNACIONAL DAS FLORESTAS .
DIA INTERNACIONAL DAS FLORESTAS         .DIA INTERNACIONAL DAS FLORESTAS         .
DIA INTERNACIONAL DAS FLORESTAS .
 

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.