You are on page 1of 61

9

Lenguajes de
programación
Fundamentos de Ciencias de la Computación • Aprendizaje Cengage
9.1
objetivos
Después de estudiar este capítulo, el estudiante debe ser capaz de:

• Describir la evolución de los lenguajes de programación de lenguaje de máquina a altas -


lenguajes de alto nivel.

• Entender cómo un programa en un alto - lenguaje de alto nivel se traduce en lenguaje de


máquina.

• Distinguir entre cuatro paradigmas del lenguaje informático.

• Entender el paradigma procedimental y la interacción entre una unidad de


programa y elementos de datos en el paradigma.

• Comprender el objeto - paradigma orientado y la interacción entre una unidad y


objetos de programa en este paradigma.

• Definir paradigma funcional y comprender sus aplicaciones.

• Definir un paradigma de declaración y comprender sus aplicaciones.

• Definir conceptos comunes de procedimiento y en los objetos - lenguajes orientados.

9.2
9.3
9.4
Historia muy largo plazo

9.5
Lenguaje de Programación salón de la fama

9.6
9.7
9

Un lenguaje informático es un conjunto de palabras predefinidas que se


combinan en un programa de acuerdo a reglas predefinidas ( sintaxis ).

Con los años, los lenguajes de programación han evolucionado a partir de

Lenguaje de máquina a lenguajes de alto nivel .

9.8
lenguajes de máquina

En los primeros días de las computadoras, los lenguajes de programación disponibles


solamente eran lenguajes de máquina .
Cada equipo tiene su propio lenguaje de máquina, que era
hecha de corrientes de 0s y 1s .
En el capítulo 5 se demostró que en una computadora hipotética primitiva.
Necesitamos usar once líneas de código para lea dos enteros, añadirlos e imprimir el
resultado . Estas líneas de código, cuando escrito en lenguaje de máquina, hacen
once líneas de código binario, cada uno de 16 bits, como se muestra en la Tabla 9.1.

yo

El único lenguaje entendido por un ordenador es


Lenguaje de máquina.
9.9
9.10
Los lenguajes ensambladores

La próxima evolución en la programación de vino con la idea de


la sustitución de código binario para la instrucción y se dirige con símbolos o
mnemónicos .
Debido a que utilizan símbolos, idiomas se conocen por primera vez como
lenguajes simbólicos.
El conjunto de estas lenguas mnemotécnicos se refirió más adelante a como lenguajes

ensambladores .

El lenguaje ensamblador para nuestro ordenador hipotética para reemplazar el


lenguaje de máquina en la Tabla 9.2 se muestra en el Programa 9.1.

yo

El único lenguaje entendido por un ordenador es


Lenguaje de máquina.

9.11
9.12
Los lenguajes de alto nivel

Trabajar con lenguajes simbólicos también era muy tedioso, porque cada instrucción
de máquina tenía que ser codificados de forma individual .

Para mejorar la eficiencia del programador y para cambiar la centrarse desde


el ordenador al problema resolverse llevó al desarrollo de lenguajes de alto
nivel.

Con los años, varios idiomas, sobre todo BASIC, COBOL, Pascal, Ada, C,
C ++ y Java, se desarrollaron. Programa 9.1 muestra el código para sumar
dos números enteros tal y como aparecería en el lenguaje C ++.

9.13
9.14
9

El programa en un lenguaje de alto nivel se llama el


programa fuente .

El programa traducido en lenguaje de máquina se denomina programa


objeto .

Se utilizan dos métodos para la traducción:


1. compilación
2. interpretación .

9.15
Compilacion

Un compilador traduce normalmente la todo programa fuente


en el programa objeto .

Interpretación

Interpretación se refiere al proceso de traducir cada línea del programa


fuente en la línea correspondiente del programa objeto y la ejecución de la
línea de .

Sin embargo, hay que tener en cuenta dos tendencias en la interpretación: la


utilizada por algunos lenguajes Java y antes de la interpretación utilizado por
Java.

9.16
proceso de traducción

Recopilación e interpretación difieren en que la primera se traduce la código fuente


entera antes de ejecutarlo , Mientras que la segunda se traduce y ejecuta el código
fuente de una línea a la vez . Ambos métodos, sin embargo, siguen el mismo
proceso de traducción se muestra en la Figura 9.1.

Figura 9.1 proceso de traducción del código fuente

9.17
9

Dividimos los lenguajes de programación en cuatro paradigmas:


procesal , orientado a objetos , funcional y declarativo .
Figura 9.2 resume estos.

9.18 Figura 9.2 Categorías de lenguajes de programación


El paradigma procedimental
En el paradigma procedimental (o paradigma imperativo) podemos pensar en un
programa como un agente activo que manipula objetos pasivos. Nos encontramos con
muchos objetos pasivos en nuestra vida diaria: una piedra, un libro, una lámpara, y así
sucesivamente. Un objeto pasivo no puede iniciar una acción por sí mismo, pero puede
recibir acciones de agentes activos.

Un programa en un paradigma procedimental es un agente activo que utiliza objetos pasivos

que nos referimos como datos o elementos de datos. Para manipular una pieza de información, el

agente activo (programa) emite una acción, que se refiere como una procedimiento .

Por ejemplo, pensar en un programa que imprime el contenido de un archivo. El archivo es un

objeto pasivo. Para imprimir el archivo, el programa utiliza un procedimiento, que llamamos de

impresión.
9.19
Figura 9.3 El concepto del paradigma procedimental

9.20
Un programa en este paradigma se compone de tres partes: una parte para la creación de

objetos , un conjunto de llamadas a procedimientos y un conjunto de código para cada


procedimiento .

Mediante la combinación de este código, el programador puede crear nuevos procedimientos.

Figura 9.4 Los componentes de un programa procedimental


9.21
Algunos lenguajes procedimentales

• FORTRAN (fórmula traducción)

• COBOL (Common negocios - Oriented Language)

• Pascal

• do

• Ada

9.22
El paradigma orientado a objetos
Los orientados a objetos con ofertas de paradigma objetos activos en lugar de
objetos pasivos .
Muchos de los objetos activos en nuestra vida cotidiana: un vehículo, una puerta automática,

lavaplatos y así sucesivamente.

La acción a realizar sobre estos objetos están incluidos en el objeto: los


objetos necesitan sólo para recibir la adecuada
estímulo desde el exterior para realizar una de las acciones.

Un archivo en un objeto - paradigma orientado puede ser embalado con todos los
procedimientos - llama métodos en el objeto - paradigma orientado - a realizar por el
archivo: imprimir, copiar, borrar y así sucesivamente. El programa en este
paradigma simplemente envía la solicitud correspondiente al objeto.

9.23
Figura 9.5 El concepto de un paradigma orientado a objetos

9.24
clases
Como muestra la Figura 9.5 muestra, los objetos del mismo tipo (archivos, por ejemplo)
necesitan un conjunto de métodos que muestran cómo un objeto de este tipo reacciona a
los estímulos desde fuera del objeto ' s ‘ territorios ’ . Para crear estos métodos, una
unidad llamada clase se usa (véase el apéndice F).

Figura 9.6 El concepto de un paradigma orientado a objetos


9.25
Clase C ++

pájaro clase {

privada: // miembro de datos


nombre de la cadena, pluma; int 屬性 // 產生 物件 Cathy void
garras; / propiedad main () {
públicas: // funciones miembro Cathy aves;
mosca void () { ... } sueño Cathy.fly ();

void () { ... } vacío comer () 動作 Cathy.sleep ();


/ método Cathy.eat (); }
{ ... }

};
métodos
En general, el formato de los métodos son muy Similar a
funciones utilizado en algunos lenguajes de procedimientos .

Cada método tiene su cabecera, sus variables locales y su declaración .

En otras palabras, podemos afirmar que los lenguajes orientados a objetos son en realidad una

extensión de las lenguas de procedimiento con algunas nuevas ideas y algunas nuevas

características .

El lenguaje C ++, por ejemplo, es una extensión orientada a objetos del


lenguaje C.

9.27
Herencia
En el paradigma orientado a objetos, como en la naturaleza, un objeto puede
heredar de otro objeto. Este concepto se llama
herencia .

Cuando se define una clase general, podemos definir una clase más específica que
hereda algunas de las características de la clase general, pero también tiene algunas
características nuevas .

Por ejemplo, cuando se define un objeto de la GeometricalShapes tipo,


podemos definir una clase llamada rectángulos. Rectángulos son
geométricos formas con adicional
características.

9.28
繼承( Herencia)

humano:
nombre, edad, color de
comer (); dormir();

( 繼承)

ciudadano:
nombre, edad, color, país, ID
comer(); dormir(); pagar impuestos(); casado ();
Polimorfismo
Polimorfismo significa “ muchas formas ” . Polimorfismo en el objeto - paradigma
orientado significa que podemos definir varias operaciones con el mismo nombre que
puede hacer cosas diferentes en clases relacionadas .

Por ejemplo, supongamos que definimos dos clases, rectángulos y círculos,


ambos heredado desde la clase
GeometricalShapes. Se definen dos operaciones tanto en la zona llamada, uno de
los rectángulos y uno en círculos, que calculan el área de un rectángulo o un
círculo. Las dos operaciones tienen el mismo nombre

9.30
多型

• 編譯 時期 多 型 ( 靜態多型)
• la sobrecarga de funciones

• 如何正確呼叫同名的函數? 利用 參數 個數 與 型態

• la sobrecarga de operadores

• 其實 同 la sobrecarga de funciones

• 執行 時期 多 型 ( 或動態多型)
• 如何 正確 呼叫 不同 物件 的 相同 名稱 的 成員 函數
• 利用 繼承 與 多 型
Algunos lenguajes orientados a objetos

• C ++

• Java

9.32
El paradigma funcional
En el paradigma funcional de un programa se considera una
función matemática . En este contexto, una función es un cuadro negro que se asigna una
lista de entradas a una lista de salidas.

Figura 9.7 Una función en un lenguaje funcional


9.33
Por ejemplo, podemos definir una función primitiva llamado primero que extrae el
primer elemento de una lista.
También puede tener una función llamada descanso que extrae todos los elementos excepto
el primero.
Un programa puede definir una función que extrae el tercer elemento de una lista mediante la
combinación de estas dos funciones como se muestra en la Figura 9.8.

Figura 9.8 La extracción del tercer elemento de una lista


9.34
Algunos lenguajes funcionales

• LISP (Programación lista)

• Esquema

9.35
El paradigma declarativo
Un paradigma declarativo utiliza el principio de razonamiento lógico para responder
a las consultas . Se basa en la lógica formal definido por los matemáticos griegos y
más tarde se convirtió en primer orden cálculo de predicados.

El razonamiento lógico se basa en deducción . se dan algunas declaraciones


(hechos) que se supone que es cierto, y el lógico utiliza reglas sólidas de
razonamiento lógico para deducir nuevas declaraciones (hechos).

Por ejemplo, la famosa regla de deducción lógica es:

9.36
El uso de esta regla y los dos hechos siguientes,

podemos deducir un hecho nuevo:

9.37
Prólogo

Uno de los famosos lenguajes declarativos es Prolog (programación de la lógica),


desarrollado por A. Colmerauer en Francia en 1972. Un programa en Prolog se
compone de hechos y reglas. Por ejemplo, los hechos anteriores sobre los seres
humanos pueden expresarse como:

El usuario puede entonces preguntar:

y el programa responderá con sí.

9.38
9-4 conceptos comunes

En esta sección llevamos a cabo una navegación rápida a través de algunos lenguajes

de procedimientos para encontrar conceptos comunes.

Algunos de estos conceptos están también disponibles en la mayoría de los


lenguajes orientados a objetos, ya que, como hemos explicado, un paradigma
orientado a objetos utiliza el paradigma procedimental al crear métodos.

9.39
identificadores

Una característica presente en todos los lenguajes de procedimientos, así como en otros
idiomas, es la identificador - es decir, el nombre de los objetos. Identificadores nos
permiten nombrar objetos en el programa .

Por ejemplo, cada pieza de datos en un ordenador se almacena en una dirección única. Si
no existieran identificadores para representar los datos
ubicaciones simbólicamente, tendríamos que conocer y utilizar los datos
direcciones para manipularlos .

Por lo tanto, simplemente damos nombres de datos y dejar que el compilador de hacer un

seguimiento de dónde se encuentren físicamente.

9.40
Tipos de datos

UNA tipo de datos define un conjunto de valores y un conjunto de operaciones que se pueden

aplicar a esos valores.

La mayoría de los lenguajes definen dos categorías de tipos de datos: tipos simples y tipos

compuestos .

1. Un tipo simple es un tipo de datos que no se pueden dividir en


tipos de datos más pequeños.

2. Un tipo compuesto es un conjunto de elementos en la que cada


elemento es un tipo simple o un tipo de compuesto.

9.41
Variables

Variables son los nombres de las posiciones de memoria . Cada posición de


memoria en un ordenador tiene una dirección. A pesar de que las direcciones son
utilizadas por el equipo interno, es muy incómodo para el programador utilizar
direcciones.

Un programador puede utilizar una variable, tal como Puntuación, para almacenar el valor entero

de una puntuación recibida en una prueba. Dado que una variable contiene un elemento de

datos, que tiene un tipo.

9.42
Los literales

Un literal es un valor predeterminado utilizado en un programa. Por ejemplo, si


tenemos que calcular el área del círculo cuando el valor del radio se almacena
en la variable r, podemos utilizar la expresión 3.14 × r 2, en el que el valor
aproximado de π
( Pi) se utiliza como un literal.

En la mayoría de los lenguajes de programación que podemos tener entero, real, carácter,

cuerda y literales booleanos.

Para distinguir los caracteres y literales de cadena a partir de los nombres de las variables y
otros objetos, la mayoría de los idiomas requieren que el literales de carácter estar encerrado
entre comillas simples , Tales como 'A', y instrumentos de cuerda para ser encerrado en doble
comillas , Como "Anne".

9.43
constantes

Por esta razón, la mayoría de los lenguajes de programación definen constantes. UNA con
, como una variable, es una ubicación con nombre que puede almacenar un valor, pero el
valor no se puede cambiar después de que ha sido definida al comienzo del programa.

Sin embargo, si queremos utilizar el programa más tarde, podemos cambiar una
sola línea al comienzo del programa, el valor de la constante.

9.44
Entradas y salidas
Casi todos los programas tiene que leer y / o escribir datos. La mayoría de los lenguajes de
programación utilizan una función predefinida para la entrada y salida.

Los datos se introducen por cualquiera de una declaración o una función predefinida, como scan

en el lenguaje C.

Los datos se envían por cualquiera de una declaración o una función predefinida, como print
en el lenguaje C.

9.45
expresiones
Una expresión es una secuencia de operandos y operadores que se reduce a un
solo valor.
Por ejemplo, la siguiente es una expresión con un valor de 13:

Un operador es una ficha específica del idioma que requiere una acción a tomar.
Los operadores más conocidos se han extraído de las matemáticas.

9.46
La Tabla 9.3 muestra algunos operadores aritméticos utilizados en C, C ++ y Java.

9.47
Operadores relacionales comparar los datos para ver si un valor es mayor que,
menor que, o igual a otro valor.
El resultado de aplicar operadores relacionales es un valor booleano (verdadero o falso). C,
C ++ y Java utilizan seis operadores relacionales, como se muestra en la Tabla 9.4:

9.48
Operadores logicos combinar los valores booleanos (verdadero o falso) para obtener un nuevo

valor. El lenguaje C utiliza tres operadores lógicos, como se muestra en la Tabla 9.5:

9.49
declaraciones
Una declaración provoca una acción a realizar por el programa. Que se
traduce directamente en una o más instrucciones ejecutables por ordenador.
Por ejemplo, C, C ++ y Java definen varios tipos de comandos.

Un sentencia de asignación ( a = 10;) asigna un valor a una variable. En


otras palabras, se almacena el valor de la variable, que ya ha sido creada en
la sección de declaración.

UNA declaración compuesta es una unidad de código que consiste en cero o más

declaraciones. También se conoce como un bloque. Una sentencia compuesta permite que

un grupo de instrucciones a ser tratada como una sola entidad.

9.50
programación estructurada recomienda encarecidamente el uso de los tres tipos de
sentencias de control: secuencia , selección y
repetición , como hemos comentado en el capítulo 8.

Figura 9.9 decisiones de dos vías y de múltiples vías


9.51
Figura 9.10 Hay tres tipos de repetición
9.52
subprogramas
Esto es útil porque el subprograma hace que la programación más estructural: un
subprograma para llevar a cabo una tarea específica se puede escribir una vez, sino
muchas veces llamado , Al igual que los procedimientos predefinidos en el lenguaje de
programación.

Figura 9.11 El concepto de un subprograma


9.53
En un lenguaje de procedimientos, un subprograma, al igual que el programa principal, puede

llamar a los procedimientos predefinidos para operar con objetos locales.

Estos objetos locales o las variables locales se crean cada vez que el subprograma
se llama y se destruye cuando el control vuelve desde el subprograma. Los objetos
locales pertenecen a los subprogramas ( puntuación de la vida ).

La mayoría de las veces el programa principal requiere un subprograma para actuar


sobre un objeto o conjunto de objetos creados por el programa principal. En este caso,
el uso del programa y subprograma
parámetros .
Estos se conocen como parámetros actuales en el programa principal y los
parámetros formales en el subprograma.
9.54
Paso por valor
En pase parámetro por valor, el programa principal y el subprograma crean
dos objetos diferentes (variables).

El objeto creado en el programa pertenece al programa y el objeto


creado en el subprograma pertenece al subprograma.

Dado que el territorio es diferente, los objetos correspondientes pueden tener los
mismos o diferentes nombres. La comunicación entre el programa principal y el
subprograma es de un solo sentido, desde el programa principal para el subprograma.

9.55
ejemplo 9.1

Cada vez que el programa principal quiere imprimir un valor, se lo envía al subprograma
para ser impreso. El programa principal tiene su propia variable X, el subprograma tiene
su propia variable A. Lo que se envía desde el programa principal al subprograma es el
valor de la variable
X.

Figura 9.12 Un ejemplo de paso por valor


9.56
Ejemplo 9.2

En el Ejemplo 9.1, ya que el programa principal sólo envía un valor al subprograma, no se


necesita tener una variable para este fin: el programa principal apenas puede enviar un
valor literal al subprograma. En otras palabras, el programa principal puede llamar al
subprograma como impresión (X) o de impresión (5).

ejemplo 9.3
Una analogía de paso por valor en la vida real es cuando un amigo quiere pedir
prestado y leer un libro valioso que anotó. Puesto que el libro es precioso,
posiblemente fuera de impresión, se hace una copia del libro y pasarlo a su amigo.
Cualquier daño a la copia, por tanto, no afecta a la original.

9.57
Ejemplo 9.4

Supóngase que el programa principal tiene dos variables X e Y que necesitan


intercambiar sus valores. El programa principal pasa el valor de X e Y para el
subprograma, que se almacenan en dos variables A y B. El subprograma de intercambio
utiliza una variable local T (temporal) y intercambia los dos valores en A y B, pero los
valores originales en X e y siguen siendo los mismos: no se intercambian.

Figura 9.13 Un ejemplo en el que paso por valor no funciona


9.58
Pasar por referencia
Pasar por referencia fue ideado para permitir a un subprograma
cambiar el valor de una variable en el programa principal. En pase por referencia, la
variable, que en realidad es una ubicación en la memoria, es compartida por el
programa principal y el subprograma. La misma variable puede tener diferentes
nombres en el programa principal y el subprograma, pero ambos nombres se
refieren a la misma variable.

Metafóricamente, podemos pensar pase por referencia como una caja con dos
puertas: uno se abre en el programa principal, el otro se abre en el subprograma.
El programa principal puede dejar un valor en este cuadro para el subprograma, el
subprograma puede cambiar el valor original y dejar un nuevo valor para el
programa en el mismo.

9.59
Ejemplo 9.5

Si utilizamos el mismo subprograma de intercambio pero vamos pueden pasar las variables
por referencia, los dos valores en X e Y son realmente intercambiados.

Figura 9.14 Un ejemplo de pase por referencia


9.60
volviendo valores
Un subprograma puede ser diseñado para devolver un valor o valores. Esta es la forma en
que los procedimientos predefinidos están diseñados. Cuando usamos la expresión C ← A +
B, que en realidad llamar a un add procedimiento (A, B) que devuelve un valor que debe ser
almacenado en la variable C.

9.61

You might also like