lengua c++

Post on 14-Aug-2015

58 views 0 download

Transcript of lengua c++

Trabajo lenguaje de

programacion c++

Materia tecnicas de

programacion

Alumno Ricardo Axel Garcia

Gomez

C++ es un lenguaje imperativo orientado a objetos derivado del C [1] En realidad

un superconjunto de C que nacioacute para antildeadirle cualidades y caracteriacutesticas de las

que careciacutea El resultado es que como su ancestro sigue muy ligado al hardware

subyacente manteniendo una considerable potencia para programacioacuten a bajo

nivel pero se la han antildeadido elementos que le permiten tambieacuten un estilo de

programacioacuten con alto nivel de abstraccioacuten

Respecto a su antecesor se ha procurando mantener una exquisita compatibilidad

hacia atraacutes por dos razones poder reutilizar la enorme cantidad de

coacutedigo C existente y facilitar una transicioacuten lo maacutes fluida posible a los

programadores de Cclaacutesico de forma que pudieran pasar sus programas a C++ e

ir modificaacutendolos (hacieacutendolos maacutes ++) de forma gradual De hecho los primeros

compiladores C++ lo que haciacutean en realidad era traducir (preprocesar) a C y

compilar despueacutes (las consecuencias se dejan sentir todaviacutea en el lenguaje

Por lo general puede compilarse un programa C bajo C++ pero no a la inversa si el

programa utiliza alguna de las caracteriacutesticas especiales de C++ Algunas

situaciones requieren especial cuidado Por ejemplo si se declara una funcioacuten dos

veces con diferente tipo de argumentos el compilador C invoca un error de Nombre

duplicado mientras que en C++ quizaacutes sea interpretado como una sobrecarga de

la primera funcioacuten (que sea o no legal depende de otras circunstancias)

Como se ha sentildealado C++ no es un lenguaje orientado a objetos puro (en el sentido

en que puede serlo Java por ejemplo) ademaacutes no nacioacute como un ejercicio

acadeacutemico de disentildeo Se trata simplemente del sucesor de un lenguaje de

programacioacuten hecho por programadores (de alto nivel) para programadores lo que

se traduce en un disentildeo pragmaacutetico al que se le han ido antildeadiendo todos los

elementos que la praacutectica 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 ) Estos condicionantes tienen su cara y su cruz en

ocasiones son motivo de ciertos reproches por parte de sus detractores en otras

estas caracteriacutesticas son precisamente una cualidad De hecho en el disentildeo de

la Libreriacutea Estaacutendar C++ 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 programacioacuten extraordinariamente flexible

Aunque C++ introduce nuevas palabras clave y operadores para manejo de clases

algunas de sus extensiones tienen aplicacioacuten fuera del contexto de programacioacuten

con objetos (fuera del aacutembito de las clases) de hecho muchos aspectos

de C++ que pueden ser usados independientemente de las clases

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

tambieacuten puede hacer que ciertos errores sean difiacuteciles de descubrir Respecto

alC++ podriacuteamos decir otro tanto pero hemos de reconocer que su sistema de

deteccioacuten de errores es mucho maacutes robusto que el de C por lo que algunos errores

de este seraacuten raacutepidamente detectados

Desde luego C++ es un lenguaje de programacioacuten extremadamente largo y

complejo cuando nos adentramos en eacutel parece no acabar nunca Justo cuando

aprendemos un significado descubrimos que una mano negra ha antildeadido otras dos

o tres acepciones para la misma palabra Tambieacuten descubrimos que praacutecticamente

no hay una regla sin su correspondiente excepcioacuten Cuando aprendemos que algo

no se puede hacer hay siempre alguacuten 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 eacutexito desde su creacioacuten De

hecho muchos sistemas operativos compiladores e inteacuterpretes han sido escritos

en C++ (el propio Windows y Java) Una de las razones de su eacutexito es ser un

lenguaje de propoacutesito general que se adapta a muacuteltiples situaciones Para

comprobar el eacutexito e importancia de los desarrollos realizados en C++ puede darse

una vuelta por la paacutegina que mantiene el Dr Stroustrup al respecto

Tanto sus fervientes defensores como sus aceacuterrimos detractores han hecho correr

riacuteos 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

justificacioacuten para el disentildeo de otros lenguajes que intentan eliminar sus

inconvenientes al tiempo que mantener sus virtudes y una de sus uacuteltima

incorporaciones las plantillas ha sido origen de un nuevo paradigma de

programacioacuten (metaprogramacioacuten)

En mi opinioacuten cualquier lenguaje de propoacutesito general que como C++ permita tocar

ambos mundos la programacioacuten de bajo nivel y altos niveles de abstraccioacuten

resultaraacute siempre e inevitablemente complejo Ocurre lo mismo con los lenguajes

naturales que son tambieacuten extraordinariamente complejos (esto lo saben bien los

gramaacuteticos) Cualquier comunicacioacuten entre humanos presupone una ingente

cantidad de conocimientos y suposiciones previas entre los interlocutores A pesar

de lo cual la comunicacioacuten exacta y sin ambiguumledades entre dos personas no

resulta faacutecil

Lo mismo que en su ancestro en el disentildeo del C++ primoacute sobre todo la velocidad

de ejecucioacuten del coacutedigo Tanto uno como otro representan los ejecutables maacutes

raacutepidos que se pueden construir para una maacutequina y circunstancias

determinadas En este sentido la uacutenica alternativa de mejora es la codificacioacuten

manual el pulido de determinadas rutinas (o de todo el coacutedigo) 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 intriacutensecamente raacutepido y de que los

compiladores modernos son bastante inteligentes en este sentido (adoptan

automaacuteticamente las decisiones que resultan en el coacutedigo de ejecucioacuten maacutes

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

numeacuterica En especial en los contadores de bucles Las operaciones con

enteros son del orden de 10 a 20 veces maacutes raacutepidas que las de nuacutemeros en

coma flotante

Use operadores incremento y decremento ++--

Use variables de registro en especial en los bucles criacuteticos sobre todo si son

anidados

Use aritmeacutetica de punteros frente a subiacutendices de matrices

En problemas de computacioacuten numeacuterica recuerde que el caacutelculo de funciones

trascendentes es por lo general muy lento

Use referencias para argumentos y valores devueltos en funciones antes

que objetos por valor

C++ es un lenguaje imperativo orientado a objetos derivado del C [1] En realidad

un superconjunto de C que nacioacute para antildeadirle cualidades y caracteriacutesticas de las

que careciacutea El resultado es que como su ancestro sigue muy ligado al hardware

subyacente manteniendo una considerable potencia para programacioacuten a bajo

nivel pero se la han antildeadido elementos que le permiten tambieacuten un estilo de

programacioacuten con alto nivel de abstraccioacuten

Respecto a su antecesor se ha procurando mantener una exquisita compatibilidad

hacia atraacutes por dos razones poder reutilizar la enorme cantidad de

coacutedigo C existente y facilitar una transicioacuten lo maacutes fluida posible a los

programadores de Cclaacutesico de forma que pudieran pasar sus programas a C++ e

ir modificaacutendolos (hacieacutendolos maacutes ++) de forma gradual De hecho los primeros

compiladores C++ lo que haciacutean en realidad era traducir (preprocesar) a C y

compilar despueacutes (las consecuencias se dejan sentir todaviacutea en el lenguaje

Por lo general puede compilarse un programa C bajo C++ pero no a la inversa si el

programa utiliza alguna de las caracteriacutesticas especiales de C++ Algunas

situaciones requieren especial cuidado Por ejemplo si se declara una funcioacuten dos

veces con diferente tipo de argumentos el compilador C invoca un error de Nombre

duplicado mientras que en C++ quizaacutes sea interpretado como una sobrecarga de

la primera funcioacuten (que sea o no legal depende de otras circunstancias)

Como se ha sentildealado C++ no es un lenguaje orientado a objetos puro (en el sentido

en que puede serlo Java por ejemplo) ademaacutes no nacioacute como un ejercicio

acadeacutemico de disentildeo Se trata simplemente del sucesor de un lenguaje de

programacioacuten hecho por programadores (de alto nivel) para programadores lo que

se traduce en un disentildeo pragmaacutetico al que se le han ido antildeadiendo todos los

elementos que la praacutectica 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 ) Estos condicionantes tienen su cara y su cruz en

ocasiones son motivo de ciertos reproches por parte de sus detractores en otras

estas caracteriacutesticas son precisamente una cualidad De hecho en el disentildeo de

la Libreriacutea Estaacutendar C++ 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 programacioacuten extraordinariamente flexible

Aunque C++ introduce nuevas palabras clave y operadores para manejo de clases

algunas de sus extensiones tienen aplicacioacuten fuera del contexto de programacioacuten

con objetos (fuera del aacutembito de las clases) de hecho muchos aspectos

de C++ que pueden ser usados independientemente de las clases

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

tambieacuten puede hacer que ciertos errores sean difiacuteciles de descubrir Respecto

alC++ podriacuteamos decir otro tanto pero hemos de reconocer que su sistema de

deteccioacuten de errores es mucho maacutes robusto que el de C por lo que algunos errores

de este seraacuten raacutepidamente detectados

Desde luego C++ es un lenguaje de programacioacuten extremadamente largo y

complejo cuando nos adentramos en eacutel parece no acabar nunca Justo cuando

aprendemos un significado descubrimos que una mano negra ha antildeadido otras dos

o tres acepciones para la misma palabra Tambieacuten descubrimos que praacutecticamente

no hay una regla sin su correspondiente excepcioacuten Cuando aprendemos que algo

no se puede hacer hay siempre alguacuten 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 eacutexito desde su creacioacuten De

hecho muchos sistemas operativos compiladores e inteacuterpretes han sido escritos

en C++ (el propio Windows y Java) Una de las razones de su eacutexito es ser un

lenguaje de propoacutesito general que se adapta a muacuteltiples situaciones Para

comprobar el eacutexito e importancia de los desarrollos realizados en C++ puede darse

una vuelta por la paacutegina que mantiene el Dr Stroustrup al respecto

Tanto sus fervientes defensores como sus aceacuterrimos detractores han hecho correr

riacuteos 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

justificacioacuten para el disentildeo de otros lenguajes que intentan eliminar sus

inconvenientes al tiempo que mantener sus virtudes y una de sus uacuteltima

incorporaciones las plantillas ha sido origen de un nuevo paradigma de

programacioacuten (metaprogramacioacuten)

En mi opinioacuten cualquier lenguaje de propoacutesito general que como C++ permita tocar

ambos mundos la programacioacuten de bajo nivel y altos niveles de abstraccioacuten

resultaraacute siempre e inevitablemente complejo Ocurre lo mismo con los lenguajes

naturales que son tambieacuten extraordinariamente complejos (esto lo saben bien los

gramaacuteticos) Cualquier comunicacioacuten entre humanos presupone una ingente

cantidad de conocimientos y suposiciones previas entre los interlocutores A pesar

de lo cual la comunicacioacuten exacta y sin ambiguumledades entre dos personas no

resulta faacutecil

Lo mismo que en su ancestro en el disentildeo del C++ primoacute sobre todo la velocidad

de ejecucioacuten del coacutedigo Tanto uno como otro representan los ejecutables maacutes

raacutepidos que se pueden construir para una maacutequina y circunstancias

determinadas En este sentido la uacutenica alternativa de mejora es la codificacioacuten

manual el pulido de determinadas rutinas (o de todo el coacutedigo) 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 intriacutensecamente raacutepido y de que los

compiladores modernos son bastante inteligentes en este sentido (adoptan

automaacuteticamente las decisiones que resultan en el coacutedigo de ejecucioacuten maacutes

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

numeacuterica En especial en los contadores de bucles Las operaciones con

enteros son del orden de 10 a 20 veces maacutes raacutepidas que las de nuacutemeros en

coma flotante

Use operadores incremento y decremento ++--

Use variables de registro en especial en los bucles criacuteticos sobre todo si son

anidados

Use aritmeacutetica de punteros frente a subiacutendices de matrices

En problemas de computacioacuten numeacuterica recuerde que el caacutelculo de funciones

trascendentes es por lo general muy lento

Use referencias para argumentos y valores devueltos en funciones antes

que objetos por valor

la Libreriacutea Estaacutendar C++ 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 programacioacuten extraordinariamente flexible

Aunque C++ introduce nuevas palabras clave y operadores para manejo de clases

algunas de sus extensiones tienen aplicacioacuten fuera del contexto de programacioacuten

con objetos (fuera del aacutembito de las clases) de hecho muchos aspectos

de C++ que pueden ser usados independientemente de las clases

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

tambieacuten puede hacer que ciertos errores sean difiacuteciles de descubrir Respecto

alC++ podriacuteamos decir otro tanto pero hemos de reconocer que su sistema de

deteccioacuten de errores es mucho maacutes robusto que el de C por lo que algunos errores

de este seraacuten raacutepidamente detectados

Desde luego C++ es un lenguaje de programacioacuten extremadamente largo y

complejo cuando nos adentramos en eacutel parece no acabar nunca Justo cuando

aprendemos un significado descubrimos que una mano negra ha antildeadido otras dos

o tres acepciones para la misma palabra Tambieacuten descubrimos que praacutecticamente

no hay una regla sin su correspondiente excepcioacuten Cuando aprendemos que algo

no se puede hacer hay siempre alguacuten 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 eacutexito desde su creacioacuten De

hecho muchos sistemas operativos compiladores e inteacuterpretes han sido escritos

en C++ (el propio Windows y Java) Una de las razones de su eacutexito es ser un

lenguaje de propoacutesito general que se adapta a muacuteltiples situaciones Para

comprobar el eacutexito e importancia de los desarrollos realizados en C++ puede darse

una vuelta por la paacutegina que mantiene el Dr Stroustrup al respecto

Tanto sus fervientes defensores como sus aceacuterrimos detractores han hecho correr

riacuteos 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

justificacioacuten para el disentildeo de otros lenguajes que intentan eliminar sus

inconvenientes al tiempo que mantener sus virtudes y una de sus uacuteltima

incorporaciones las plantillas ha sido origen de un nuevo paradigma de

programacioacuten (metaprogramacioacuten)

En mi opinioacuten cualquier lenguaje de propoacutesito general que como C++ permita tocar

ambos mundos la programacioacuten de bajo nivel y altos niveles de abstraccioacuten

resultaraacute siempre e inevitablemente complejo Ocurre lo mismo con los lenguajes

naturales que son tambieacuten extraordinariamente complejos (esto lo saben bien los

gramaacuteticos) Cualquier comunicacioacuten entre humanos presupone una ingente

cantidad de conocimientos y suposiciones previas entre los interlocutores A pesar

de lo cual la comunicacioacuten exacta y sin ambiguumledades entre dos personas no

resulta faacutecil

Lo mismo que en su ancestro en el disentildeo del C++ primoacute sobre todo la velocidad

de ejecucioacuten del coacutedigo Tanto uno como otro representan los ejecutables maacutes

raacutepidos que se pueden construir para una maacutequina y circunstancias

determinadas En este sentido la uacutenica alternativa de mejora es la codificacioacuten

manual el pulido de determinadas rutinas (o de todo el coacutedigo) 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 intriacutensecamente raacutepido y de que los

compiladores modernos son bastante inteligentes en este sentido (adoptan

automaacuteticamente las decisiones que resultan en el coacutedigo de ejecucioacuten maacutes

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

numeacuterica En especial en los contadores de bucles Las operaciones con

enteros son del orden de 10 a 20 veces maacutes raacutepidas que las de nuacutemeros en

coma flotante

Use operadores incremento y decremento ++--

Use variables de registro en especial en los bucles criacuteticos sobre todo si son

anidados

Use aritmeacutetica de punteros frente a subiacutendices de matrices

En problemas de computacioacuten numeacuterica recuerde que el caacutelculo de funciones

trascendentes es por lo general muy lento

Use referencias para argumentos y valores devueltos en funciones antes

que objetos por valor

Tanto sus fervientes defensores como sus aceacuterrimos detractores han hecho correr

riacuteos 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

justificacioacuten para el disentildeo de otros lenguajes que intentan eliminar sus

inconvenientes al tiempo que mantener sus virtudes y una de sus uacuteltima

incorporaciones las plantillas ha sido origen de un nuevo paradigma de

programacioacuten (metaprogramacioacuten)

En mi opinioacuten cualquier lenguaje de propoacutesito general que como C++ permita tocar

ambos mundos la programacioacuten de bajo nivel y altos niveles de abstraccioacuten

resultaraacute siempre e inevitablemente complejo Ocurre lo mismo con los lenguajes

naturales que son tambieacuten extraordinariamente complejos (esto lo saben bien los

gramaacuteticos) Cualquier comunicacioacuten entre humanos presupone una ingente

cantidad de conocimientos y suposiciones previas entre los interlocutores A pesar

de lo cual la comunicacioacuten exacta y sin ambiguumledades entre dos personas no

resulta faacutecil

Lo mismo que en su ancestro en el disentildeo del C++ primoacute sobre todo la velocidad

de ejecucioacuten del coacutedigo Tanto uno como otro representan los ejecutables maacutes

raacutepidos que se pueden construir para una maacutequina y circunstancias

determinadas En este sentido la uacutenica alternativa de mejora es la codificacioacuten

manual el pulido de determinadas rutinas (o de todo el coacutedigo) 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 intriacutensecamente raacutepido y de que los

compiladores modernos son bastante inteligentes en este sentido (adoptan

automaacuteticamente las decisiones que resultan en el coacutedigo de ejecucioacuten maacutes

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

numeacuterica En especial en los contadores de bucles Las operaciones con

enteros son del orden de 10 a 20 veces maacutes raacutepidas que las de nuacutemeros en

coma flotante

Use operadores incremento y decremento ++--

Use variables de registro en especial en los bucles criacuteticos sobre todo si son

anidados

Use aritmeacutetica de punteros frente a subiacutendices de matrices

En problemas de computacioacuten numeacuterica recuerde que el caacutelculo de funciones

trascendentes es por lo general muy lento

Use referencias para argumentos y valores devueltos en funciones antes

que objetos por valor

Use enteros (int) con preferencia sobre cualquier otro tipo de variable

numeacuterica En especial en los contadores de bucles Las operaciones con

enteros son del orden de 10 a 20 veces maacutes raacutepidas que las de nuacutemeros en

coma flotante

Use operadores incremento y decremento ++--

Use variables de registro en especial en los bucles criacuteticos sobre todo si son

anidados

Use aritmeacutetica de punteros frente a subiacutendices de matrices

En problemas de computacioacuten numeacuterica recuerde que el caacutelculo de funciones

trascendentes es por lo general muy lento

Use referencias para argumentos y valores devueltos en funciones antes

que objetos por valor