You are on page 1of 142

Ciclo: III Mdulo: I

Semana: 2
FUNDAMENTOS DE COMPUTACIN E INFORMTICA
ALGORITMOS

TEMA
Virus informtico y lenguajes de programacin
Docente:
Mg. Flix R. Pucuhuayla Revatta

Mg. Flix Pucuhuayla Revatta

Los Virus Informticos


Lenguajes de Programacin

Mg. Flix Pucuhuayla Revatta

1 Historia y evolucin de los virus


informaticos

-Qu es un virus
-1 Virus
-Historia y evolucin

Mg. Flix Pucuhuayla Revatta

Qu es un virus?
Los virus informticos
son programas
diseados
expresamente para
interferir en el
funcionamiento de
una computadora.

Mg. Flix Pucuhuayla Revatta

1 Virus
El primer virus que atac a una
mquina IBM Serie360 (y
reconocido como tal), fue llamado
Creeper, creado en 1972 por
Robert Thomas Morris.

Mg. Flix Pucuhuayla Revatta

Informacin a Proteger
Cual es la informacin ms valiosa que
manejamos?

La informacin asociado a nuestros clientes.


La informacin asociado a nuestras ventas.
La informacin asociada a nuestro personal.
La informacin asociada a nuestros productos.
La informacin asociada a nuestras operaciones.

Mg. Flix Pucuhuayla Revatta

Riesgos?
Pero si nunca paso nada!!.
Esto no real.
Lo que sucede es que hoy sabemos muy poco.

La empresa necesita contar con informacin


sobre la cual tomar decisiones a los efectos
de establecer controles necesarios y eficaces.

Mg. Flix Pucuhuayla Revatta

Amenazas
Pharming

Password cracking
Fraudes informticos

Escalamiento de privilegios

Puertos vulnerables abiertos

Man in the middle

Exploits

Violacin de la privacidad de los empleados

Servicios de log inexistentes o que no son chequeados

Denegacin de servicio

Backups inexistentes
Destruccin de equipamiento

ltimos parches no instalados

Instalaciones default
Desactualizacin

Keylogging

Port scanning

Mg. Flix
Pucuhuayla Revatta
Hacking de
Centrales
Telefnicas

Ms Amenazas!!
Spamming
Violacin de contraseas

Intercepcin y modificacin y violacin de e-mails

Captura de PC desde el exterior

Virus

Incumplimiento de leyes y regulaciones

Mails annimos con agresiones

Interrupcin de los servicios

Ingeniera social

empleados deshonestos

Programas bomba, troyanos


Destruccin de soportes documentales

Acceso clandestino a redes

Robo o extravo de notebooks, palms

Propiedad de la informacin
Robo de informacin
Indisponibilidad de informacin clave
Intercepcin de comunicaciones voz y
wireless
Falsificacin de informacin
Agujeros
de seguridad
Pucuhuayla
Revatta de redes conectadas
para terceros Mg. Flix
Acceso indebido a documentos impresos

Vulnerabilidades Comunes

Inadecuado compromiso de la direccin.


Personal inadecuadamente capacitado y concientizado.
Inadecuada asignacin de responsabilidades.
Ausencia de polticas/ procedimientos.
Ausencia de controles

(fsicos/lgicos)

(disuasivos/preventivos/detectivos/correctiv
os)

Ausencia de reportes de incidentes y vulnerabilidades.


Inadecuado seguimiento y monitoreo de los controles.
Mg. Flix Pucuhuayla Revatta

Historia y evolucin

1949: Se da el primer indicio de


definicion de virus por John Von
Neumann

1959: En los laboratorios AT&T


Bell, se inventa el juego "Guerra
Nuclear.

Mg. Flix Pucuhuayla Revatta

Historia y evolucin

1970: El Creeper es difundido por


la red ARPANET
1974: El virus Rabbit haca una
copia de si mismo lo que causava
el bloqueo del sistema
1980: La red ARPANET es
infectada por un "gusano" y queda
72 horas fuera de servicio
Mg. Flix Pucuhuayla Revatta

Historia y evolucin
1984: El Dr. Fred Cohen incluy
las pautas para el desarrollo de
virus informticos.
1987: Se da el primer caso de
contagio masivo de computadoras

Mg. Flix Pucuhuayla Revatta

Historia y evolucin
A mediados de 1995 se reportaron en
diversas ciudades del mundo la aparicin
de una nueva familia de virus que no
solamente infectaban documentos, sino
que a su vez, sin ser archivos ejecutables
podan auto-copiarse infectando a otros
documentos. Fueron llamados macro
virus, slo infectaban a los archivos de
MS-Word.
Mg. Flix Pucuhuayla Revatta

Historia y evolucin
A principios de 1999 se
empezaron a propagar
masivamente en Internet los virus
anexados a mensajes de correo
2002 surge el primer virus
diseado para atacar archivos
Shockwave Flash de Macromedia
y aparece winux, primer virus para
ejecutables tanto de Windows
Mg. Flix
Pucuhuayla Revatta
como de
Linux.

Historia y evolucin
A partir de ahora podemos considerar que todos
los virus son propagados por internet, llegando
algunos de ellos como el I Love You a causar
grandes daos y llegando incluso a afectar el
pentgono.

Mg. Flix Pucuhuayla Revatta

VIRUS
como se transmiten?
La forma ms comn en que se
transmiten los virus es por dispositivos de
almacenamiento,descarga o ejecucin de
ficheros adjuntos en e-mails.

Mg. Flix Pucuhuayla Revatta

Virus de Arranque o Boot


Infectan la zona de los discos en un
ordenador, el sector de arranque en los
disquetes y discos duros.

Los virus de boot residen en la memoria.


Mientras que la mayora son escritos para
DOS, estos virus no toman en cuenta los
sistemas operativos, as que pueden
infectar cualquier
PC. Revatta
Mg. Flix Pucuhuayla

Virus MacroVirus
Se transmite a travs de los documentos de las
aplicaciones que poseen algn tipo de lenguaje de
macros.
Cuando uno de estos archivos infectado es abierto o
cerrado, el virus toma el control y se copia a la
plantilla.
Los lenguajes de macros como el Visual Basic For
Applications son muy poderosos y poseen capacidades
como para cambiar la configuracin del sistema
operativo, borrar archivos, enviar e-mails, etc.
Mg. Flix Pucuhuayla Revatta

Virus Residentes
Cuando se ponen en marcha, la primera accin
que realizan consiste en comprobar si se
cumplen todas las condiciones para atacar
(fecha, hora,... etc.).
Otros virus residentes se mantienen dentro de la
memoria y esperan a que ocurra algn evento
determinado para de esa forma poder disparar
su accin destructiva. Suelen aadirse al
programa o los programas que infecta,
aadiendo su cdigo al propio cdigo del
Mg. Flix Pucuhuayla Revatta
fichero ejecutable.

Virus Troyano
Un troyano es similar a un virus, es un programa que
busca propagarse y sobre todo a travs de aplicaciones
de Internet como el EMAIL, ICQ y CHAT.
La diferencia bsica de los troyanos con los virus es
que los troyanos estn hechos para permitirles a otras
personas tener acceso al contenido de la PC infectada
Son muy peligrosos, porque pueden capturar y
reenviar datos confidenciales a una direccin externa.

Mg. Flix Pucuhuayla Revatta

Virus Gusanos de Internet


Un gusano de internet es aquel virus
que se permite a travs de la red
reproducirse y de esta forma
destacarse por su gran expansin.
Actualmente la gran mayora de virus
que se encuentran en Internet son
stos.

Mg. Flix Pucuhuayla Revatta

Los Antivirus
Los antivirus son
programas que se
encargan de evitar la
intrusin de
programas dainos
en nuestro
computador.

Mg. Flix Pucuhuayla Revatta

Como funcionan los antivirus

Un antivirus es un programa diseado para prevenir y evitar la


activacin de virus en nuestra computadora, tiene rutinas de
deteccin, eliminacin y reconstruccin de la informacin
afectada.

Vacunar:
La vacuna de los antivirus se queda residente en memoria y
filtra los programas que son ejecutados.

Detectar:
Revisa todos los archivos que tenemos grabados en el disco
duro. Mediante el grupo de codigos virales el antivirus
escanea la informacin para reconocerlos y borrarlos.

Eliminar:
Es la parte del antivirus que desarma la estructura del virus y
las elimina, finalmente repara los archivos daados.
Mg. Flix Pucuhuayla Revatta

Por que la gente los crea?

Algunos virus se crean por el


desafo tecnolgico de crear
una amenaza que sea nica,
no detectable, o simplemente
devastadora para su vctima.
Sin embargo, es discutible que
la mayora de las personas
crean virus por vanidad. El
creador espera que el virus se
propague de tal manera que le
haga famoso. La notoriedad
aumenta cuando el virus es
considerado tal amenaza que
los fabricantes de antivirus
tienen que disear una
solucin.

Mg. Flix Pucuhuayla Revatta

Otras Amenazas
Keyloggers o
registradores de teclas
Ingenieria social es la
prctica de obtener
informacin confidencial
a travs de la
manipulacin. Los
ingenieros sociales
aprovechan la tendencia
natural de la gente a
confiar en su palabra
Mg. Flix Pucuhuayla Revatta

Otras amenazas
'Spam' es la palabra que se
utiliza para calificar el correo
no solicitado enviado por
Internet.
Los programas anti-spam
utilizan tcnicas, tales como
enviar mensajes al
postmaster del dominio del
que procede el spam o borrar
directamente los mensajes
sospechosos de nuestro
servidor de correo para evitar
descargarlos.
Mg. Flix Pucuhuayla Revatta

El estudio de los lenguajes de


programacin

Mg. Flix Pucuhuayla Revatta

Porqu estudiar lenguajes de


programacin?
La pregunta es cul es la ventaja de estudiar una
variedad de lenguajes diferentes que es poco
probable que uno llegue a utilizar?:
Mejorar la habilidad para desarrollar algoritmos eficaces.
Mejorar el uso del lenguaje de programacin disponible.
Acrecentar el propio vocabulario con construcciones
tiles sobre programacin.
Hacer posible una mejor eleccin del lenguaje de
programacin.
Facilitar el aprendizaje de un nuevo lenguaje.
Facilitar el diseo de un nuevo lenguaje.
Mg. Flix Pucuhuayla Revatta

Breve historia de los lenguajes


de programacin:
Desarrollo de los primeros
lenguajes:
Lenguajes basados en el clculo
numrico (Ejemplo: FORTRAN).
Lenguajes para negocios
(Ejemplo: COBOL).
Lenguajes para Inteligencia
Artificial (Ejemplo: LISP).
Lenguajes para sistemas
(Ejemplo: C).
Mg. Flix Pucuhuayla Revatta

Evolucin de los
Lenguajes de Programacin

Declarativos

Mg. Flix Pucuhuayla Revatta

Evolucin de los
Lenguajes de Programacin
Orientados a Objetos e
Imperativos

Mg. Flix Pucuhuayla Revatta

El papel de los lenguajes de


programacin
Inicialmente los lenguajes se proyectaban para ejecutar programas con
eficiencia. A mediados de los aos sesenta la programacin cambia:

Las mquinas son menos costosas y aumentan los costos de programacin.


Surge la necesidad de trasladar programas de unos sistemas a otros.
El mantenimiento del producto consume mayores recursos de cmputo.
La tarea del lenguaje de alto nivel es la de facilitar el desarrollo de programas
correctos para resolver problemas en alguna rea de aplicacin dada.

Los lenguajes de programacin evolucionan o dejan de usarse.


Influencias que obligan a la revisin del los lenguajes:
Capacidad de las computadoras.
Aplicaciones: Los requerimientos de nuevas reas de aplicacin afectan los
diseos de nuevos lenguajes y las revisiones y ampliaciones de los ms
antiguos.
Mtodos de programacin.
Mtodos de implementacin.
Estudios tericos.
Estandarizacin.
Mg. Flix Pucuhuayla Revatta

Atributos de un buen lenguaje

Claridad, sencillez y unidad (legibilidad): La sintaxis del lenguaje afecta la


facilidad con la que un programa se puede escribir, por a prueba, y ms tarde
entender y modificar.
Ortogonalidad: Capacidad para combinar varias caractersticas de un lenguaje en
todas las combinaciones posibles, de manera que todas ellas tengan significado.
Naturalidad para la aplicacin: La sintaxis del programa debe permitir que la
estructura del programa refleje la estructura lgica subyacente.
Apoyo para la abstraccin: Una parte importante de la tarea del programador es
proyectar las abstracciones adecuadas para la solucin del problema y luego
implementar esas abstracciones empleando las capacidades ms primitivas que
provee el lenguaje de programacin mismo.
Facilidad para verificar programas: La sencillez de la estructura semntica y
sintctica ayuda a simplificar la verificacin de programas.
Entorno de programacin: Facilita el trabajo con un lenguaje tcnicamente dbil
en comparacin con un lenguaje ms fuerte con poco apoyo externo.
Portabilidad de programas
Costo de uso:

1. Costo de ejecucin del programa.


2. Costo de traduccin de programas.
3. Costo de creacin, prueba y uso de programas.
4. Costo de mantenimiento de los programas: costo total del ciclo de vida.
Mg. Flix Pucuhuayla Revatta

Dominios
de
aplicacin
Aplicaciones de los aos sesenta. Durante la dcada de 1960, casi
toda la programacin se poda dividir en cuatro modelos bsicos de
programacin:

De procesamiento de negocios (COBOL).


Cientficos (FORTRAN).
De sistemas (ALGOL, JOVIAL, etc.): Para construir sistemas operativos.
De Inteligencia Artificial (LISP).

Aplicaciones de los aos noventa. La situacin actual tiene ms


dominios de aplicacin:
De procesamiento de negocios (COBOL).
Cientficos (FORTRAN 90).
De sistemas: Con el advenimiento de los microprocesadores baratos que
gobiernan automviles, hornos de microondas, etc., ha aumentado la
necesidad de contar con lenguajes para tiempo real.
Edicin: Los sistemas de procesamiento de texto tienen su propia sintaxis
para mandatos de entrada y archivos de salida. El traductor TEX produce un
programa en el lenguaje PostScript de descripcin de pginas. PostScript se
puede compilar por medir de un procesador adecuado. ste suele ser la
impresora lser que se utiliza para imprimir el documento.
De proceso: Dentro de UNIX, el lenguaje de comandos de usuario se conoce
como shell y a los programas se les llama guiones de shell (parecidos a los
archivos .bat). Estos guiones
se pueden
invocar
Mg. Flix
Pucuhuayla
Revatta siempre que ocurren ciertas
condiciones habilitadoras.

Estandarizacin de los lenguajes


Los estndares son en general de dos clases:
1. Estndares patentados (DE PACTO): Son las definiciones
elaboradas por la compaa que desarrollo el lenguaje y que es su
propietaria.
2. Estndares de consenso (DE FACTO): Se trata de documentos
elaborados por organizaciones con base en un acuerdo entre los
participantes pertinentes. Mtodo principal para asegurar la
uniformidad entre varias implementaciones de un lenguaje. Ejemplo:
ANSI, IEEE, ISO, etc..

Proceso en el desarrollo de normas: Un grupo decide


que un lenguaje requiere una definicin estndar. El
organismo normativo organiza un grupo de trabajo de
voluntarios para desarrollar esa norma. Cuando el grupo de
trabajo llega a un acuerdo sobre su norma, se somete a
votacin por parte de un bloque ms grande de individuos
interesados. Los desacuerdos se resuelven y se produce el
estndar del lenguaje.
Mg. Flix Pucuhuayla Revatta

Uso de estndares en forma eficaz


Es necesario ocuparse de tres cuestiones:
Oportunidad (Cundo estandarizar un lenguaje?): Lo deseable sera
estandarizar un lenguaje lo suficientemente pronto para que exista
suficiente experiencia en el uso del lenguaje, pero no demasiado tarde,
para no alentar muchas implementaciones incompatibles.
Conformidad (Qu significa que un programa se adhiere a un estndar y
que un compilador compila un estndar?): Si existe un estndar para un
lenguaje, se suele hablar de conformidad con respecto a ese estndar. Un
programa es conforme si slo utiliza caractersticas definidas en el
estndar. Un compilador conformable es uno que, cuando se le da un
programa conforme, produce un programa ejecutable que genera la salida
correcta.
Obsolescencia (Cundo envejece un estndar y cmo se modifica?): Los
estndares se tienen que revisar cada 5 aos y ya sea renovarse o
descartarse. Casi todos los estndares requieren compatibilidad hacia
atrs; El nuevo estndar debe incluir versiones ms antiguas del lenguaje.
Esto tiene el problema de que el lenguaje se puede hacer difcil de manejar
a causa de las numerosas construcciones obsoletas.

Una caracterstica es obsolescente si es candidata a ser descartada en la


prxima versin del estndar.
Una caracterstica desaprobada se puede volver obsolescente en el
prximo estndar, por lo cual puede ser descartada despus de dos
Mg. Flix Pucuhuayla Revatta
revisiones.

Efectos de los entornos sobre


los lenguajes
Cuatro clases generales de entornos objetivo
cubre casi todas las aplicaciones de
programacin:
de procesamiento por lotes (batch),
interactivo,
de sistema empotrado, y
de programacin (entorno interactivo).

Cada uno plantea distintos requerimientos


sobre los lenguajes adaptados a esos
entornos.
Mg. Flix Pucuhuayla Revatta

Entornos de procesamiento por


lotes
El ms simple entorno operativo se compone slo de
archivos externos de datos. Un programa toma un cierto
conjunto de archivos de datos como entrada, procesa los
datos y produce un conjunto de archivos de datos de salida.
El nombre de procesamiento por lotes viene porque los
datos de entrada se renen en lotes de archivos y son
procesados en lotes por programas.
Los archivos constituyen la base para casi toda la estructura de E/S.
Un error que termine la ejecucin del programa es aceptable aunque
costoso. No es posible la ayuda externa por parte del usuario para
manejar o corregir errores de inmediato.
Carencia de restricciones de regulacin de tiempo. No hay recursos
para monitorear o afectar directamente la velocidad de ejecucin del
programa.
Mg. Flix Pucuhuayla Revatta

Entornos interactivos
El programa interacta durante su ejecucin directa con un
usuario en una consola de visualizacin, enviando
alternativamente salidas hacia sta y recibiendo entradas
desde el teclado o ratn (procesadores de texto, hojas de
clculo, juegos, etc.).
Las caractersticas de E/S interactivas son diferentes de las
operaciones ordinarias con archivos.
El programa debe ser capaz de gestionar el manejo de errores. La
terminacin del programa como respuesta aun error no es
ordinariamente aceptable (a diferencia del procesamiento por lotes).
Los programas interactivos deben utilizar con frecuencia algn
concepto de restricciones de tiempo.
El concepto de programa principal suele estar ausente. En su lugar,
el programa se compone de un conjunto de subprogramas y el
usuario introduce el programa principal como una serie de
comandos en el terminal.
Mg. Flix Pucuhuayla Revatta

Entornos de sistemas incrustados (empotrados)


Un sistema de computadora que se usa para controlar parte de
un sistema ms grande como una planta industrial, una
aeronave, etc., se conoce con el nombre de sistema de
computadora incrustado. El fallo de una aplicacin empotrada
puede poner en peligro la vida. La seguridad de
funcionamiento y correccin son atributos principales.
Suelen operar sin un sistema operativo subyacente y sin archivos de
entorno y dispositivos de E/S usuales. El programa debe interactuar
directamente con la mquina.
El manejo de errores tiene gran importancia. Cada programa debe estar
preparado para manejar todos los errores en forma interna, adoptando
acciones apropiadas para recuperarse y continuar. La interrupcin del
programa no es aceptable y no hay un usuario en el entorno que pueda
proporcionar la correccin interactiva del error.
Operan en tiempo real, donde la respuesta las entradas debe producirse
en intervalos de tiempo restringidos.
Suele ser un sistema distribuido, compuesto por ms de una
computadora.
Una vez iniciadas las tareas,
ejecutan
por lo comn de forma
Mg. Flix se
Pucuhuayla
Revatta
simultnea e indefinida.

Entornos de programacin

Es el entorno en el cual los programas se crean y se ponen a prueba. Consiste en


un conjunto de herramientas (editor, depurador, verificador, generadores de datos
de prueba, etc.) de apoyo y un lenguaje para invocarlas.
Al compilar por separado cada subprograma el compilador necesita informacin
de:
La especificacin del nmero, orden y tipo de parmetros.
La declaracin de tipo de datos.
La definicin de un tipo de datos (para la declaracin local de variables).

Un problema comn, es encontrar, durante el ensamblado del programa final


completo, que varios subprogramas y otras unidades de programa tienen
nombres (de variables) iguales. Mtodos para evitar este problema:
1. Todo nombre compartido debe ser nico. Se deben usar convenciones para la
asignacin de nombres desde un principio.
2. Definir, en el lenguaje, reglas de mbito, para ocultar nombre.
3. Los nombres se pueden conocer agregando explcitamente sus definiciones desde una
biblioteca externa (herencia en POO).

Caractersticas que ayudan a poner a prueba y depurar programas.


1. Caractersticas para rastreo de ejecucin.
2. Puntos de interrupcin. Cuando se alcanza un punto de interrupcin durante la
ejecucin del programa, la misma se interrumpe y el control se traslada al programador
en un terminal.
3. Asertos: expresan relaciones que deben cumplirse entre los valores de las variables en
ese punto del programa.
Mg. Flix Pucuhuayla Revatta

Marcos de ambiente

Un ambiente de apoyo
consiste en servicios
de infraestructura que
se conocen como
marco de ambiente.
Este marco suministra
servicios como un
depsito de datos,
interfaz grfica de
usuario, seguridad y
servicios de
comunicacin. Los
programas se escriben
de modo que utilicen
estos servicios.
Mg. Flix Pucuhuayla Revatta

Mquinas virtuales
Aunque hay muchos rasgos que se podran destacar
como candidatos para formar parte de una definicin del
concepto de mquina virtual (a partir de ahora MV), una
MV se puede definir sencillamente como una capa de
abstraccin que separa el funcionamiento de un
ordenador de su hardware. Adems, las MV se dividen
en abstractas o tericas, como sera la mquina de
Turing (el primer ejemplo de una MV), y concretas o
prcticas (a las que se quiere normalmente se hace
referencia al hablar de MV). En esta seccin se tratarn
las MV concretas que, como se ver, son capas de
software que juegan un papel relevante tanto en el
funcionamiento de los lenguajes compilados como
interpretados.
Mg. Flix Pucuhuayla Revatta

Introduccin al concepto
Las MV se construyeron para simplificar el
proceso del control del hardware de un
ordenador porque extienden y enmascaran la
funcionalidad del hardware a travs de
procedimientos y datos abstractos.
Se pueden identificar dos tipos de MV
concretas:
las que juegan un papel en la preparacin de un
programa para su ejecucin (tiempo de compilacin)
y
las que permiten la ejecucin de dicho programa. La
figura muestra la diferencia entre los dos tipos:
Mg. Flix Pucuhuayla Revatta

El papel de las mquinas virtuales


la compilacin
Mg. Flixen
Pucuhuayla
Revatta y la ejecucin de un programa.

Introduccin al concepto
Las MV suelen aparecer en una jerarqua. Usamos la jerarqua de MV de
compilacin, por ejemplo, cada vez que invocamos el compilador de
C++. Y dos ejemplos muy comunes del papel de una MV en la jerarqua
de MV de ejecucin son PostScript (que define una MV para una
impresora) y MSDOS bajo MS Windows (que define una MV que permite
que antiguos programas de DOS funcionen bajo Windows).
PostScript es una MV que incluye el estado grfico, la ruta actual, el estado
del diccionario y, aunque sea bastante complejo, presenta una visin de alto
nivel de muchos tipos distintos de impresoras, aislando las caractersticas de
las impresoras de las aplicaciones que las usan.

A la hora de implementar un lenguaje de programacin, las estructuras


de datos y algoritmos utilizados en la ejecucin de un programa (es
decir, la sintaxis y semntica de cada estructura) definen las MV
(implcitamente) para este lenguaje. Y las decisiones que toma el
desarrollador afectan tanto a la traduccin como a la ejecucin de los
programas escritos en este lenguaje. Las MV se distinguen entre s
segn tres criterios:
La concepcin de las MV que tiene el desarrollador basada en la definicin
del lenguaje.
Las facilidades disponibles en el hardware del ordenador.
Las decisiones de implementacin tomadas por los desarrolladores.
Mg. Flix Pucuhuayla Revatta

Introduccin al concepto

Aunque se puede escribir un compilador para traducir (o compilar) un


programa escrito en un lenguaje de alto nivel directamente al cdigo
mquina (en el sentido de no depender de ninguna otra pieza en el
sistema para producirlo), no es nada comn hacerlo hoy en da por varias
razones, dos de las cuales son:
Cuando aparezca en el mercado el siguiente procesador (por ejemplo,
Pentium IVdespus de Pentium III), habr que modificar el compilador.
No tiene sentido repetir el proceso de diseo y desarrollo, que es costoso,
cuando ya se ha hecho lo mismo muchas veces antes para otros lenguajes
para una mquina concreta.

Un caso lo constituyen los compiladores C, que ya llevan mucho tiempo en


funcionamiento y son muy eficientes y estables. Por lo tanto, hay varios
lenguajes como C++ (al menos en las primeras versiones) cuyo
compilador tradujo el cdigo fuente de C++ a C para poder luego usar el
compilador C estndar. En general, slo se suele redisear un compilador
nuevo desde cero cuando los ingenieros del lenguaje estn intentando
alcanzar nuevos objetivos para ese lenguaje, en caso de que vayan ms
all que el modelo funcional de los compiladores ya disponibles como, por
ejemplo, es el caso de Java.
Mg. Flix Pucuhuayla Revatta

Jerarquas de mquinas virtuales


La realidad es que el desarrollador de un lenguaje suele implementar las MV (de
compilacin y/o ejecucin) de su lenguaje en trminos de otras MV ya existentes. Y
en el futuro, un programador de aplicaciones utilizar las MV implementadas por el
desarrollador del lenguaje para producir programas que a su vez puedan servir
como MV para otras aplicaciones, etc. La conclusin, como puede verse, es que una
MV no suele existir aislada, sino como parte de una jerarqua de MV. A continuacin
se va a ver el papel de las jerarquas de MV en el tiempo de compilacin y de
ejecucin.
En primer lugar, se va a considerar el papel de la jerarqua de MV en el tiempo de
compilacin. En el caso de C++, como lenguaje de alto nivel que se compila a un
lenguaje tan cerca del nivel de mquina como sea posible, se puede ver que el
proceso de compilacin de un programa de C++ consiste en la interaccin de la
jerarqua de MV mostrada en la figura 2 (aunque puede haber diferencias entre
compiladores de C++; por ejemplo, aqu se supone que es un proceso de
compilacin que usa C como cdigo intermedio). El pre-procesador acepta el cdigo
C++ como fuente y produce otra versin del mismo cdigo C++ con algunas
extensiones e incorporaciones resueltas. El traductor convierte el cdigo fuente C++
estndar a cdigo fuente C. El compilador C acepta este cdigo como fuente y lo
traduce a cdigo ensamblador (una representacin simblica del cdigo mquina).
El ensamblador traduce este cdigo simblico a un cdigo mquina reubicable. Y
por fin, el cargador de libreras acepta este cdigo mquina como entrada y produce
un programa simple ejecutable, compuesto por el cdigo mquina de entrada y
todos los subprogramas necesarios con direcciones de memoria contiguas. Adems
del proceso de compilacin, la traduccin completa de los programas de alto nivel
(previa a su ejecucin) en una forma que corre sobre la mquina, tambin existe otro
Mg. Flix Pucuhuayla
proceso, que se llama interpretacin,
que tieneRevatta
ms que ver con el papel de las MV
en el tiempo de ejecucin que en el tiempo de compilacin.

Jerarquas de mquinas virtuales

Adems de los lenguajes compilados


completamente, hay otros que son compilados
parcialmente en el sentido de que terminan el
proceso de compilacin en un cdigo (o lenguaje)
intermedio, en vez de en cdigo mquina (lenguajes
intermedios).
En segundo lugar, vamos a considerar el papel de la
jerarqua de MV en el tiempo de ejecucin. Se puede
ver un ejemplo en la figura 3. Como se puede ver en
l, lo que se podra llamar una aplicacin Web (unas
pginas Web con elementos interactivos incrustados)
est escrita en HTML y funciona sobre una MV dada
por el navegador Web, que a su vez est
implementado en C o C++. ste corre sobre una MV
compuesta por las libreras de tiempo de ejecucin
que encapsulan el funcionamiento de los
procedimientos (o mtodos) y datos de navegador
Web que, a su vez, utilizan las funciones de la MV
del sistema operativo implementadas en cdigo
mquina. Y los programas que componen esta MV
corren sobre el firmware, un conjunto de programas
de micro-cdigo que controlan
directamente
el
Mg. Flix
Pucuhuayla Revatta
hardware del ordenador.

Jerarquas de mquinas virtuales


Las jerarquas del tipo mostrado en la figura
tienen una estructura muy parecida a una
jerarqua usa, donde cada capa usa la capa
que est directamente debajo. La diferencia es
que una MV puede tener una interfaz hacia
abajo, adems de la interfaz hacia arriba, que
especifica los servicios que requiere de la capa
inferior, pero sin especificar exactamente qu
implementacin de los servicios es necesario.
Un ejemplo sera la jerarqua de MV que
compone el sistema de ventanas X, donde hay
una capa que define el funcionamiento
independientemente de los dispositivos y,
directamente debajo, una capa que define el
funcionamiento en trminos de los dispositivos.
Aqu X depende de la capa que depende de los
dispositivos, no de una implementacin en
concreto de esta capa (por lo tanto, hay
versiones de X para muchos tipos de hardware
donde la nica diferencia es la implementacin
de la capa relacionada con los dispositivos; las
Mg. Flix
Pucuhuayla Revatta
dems capas superiores son
idnticas).

Lenguajes intermedios
Un lenguaje intermedio se puede definir
como una manera de representar
procedimientos y estructuras de datos que
sirva como entrada para una MV en alguna
parte de su jerarqua, entre el lenguaje de
entrada (el nivel ms alto) y el cdigo
ejecutado en la mquina (el nivel ms bajo)
tanto en el tiempo de compilacin como en el
de ejecucin.
Mg. Flix Pucuhuayla Revatta

Lenguajes intermedios
Un lenguaje intermedio se puede definir
como una manera de representar
procedimientos y estructuras de datos que
sirva como entrada para una MV en alguna
parte de su jerarqua, entre el lenguaje de
entrada (el nivel ms alto) y el cdigo
ejecutado en la mquina (el nivel ms bajo)
tanto en el tiempo de compilacin como en el
de ejecucin.
Mg. Flix Pucuhuayla Revatta

Lenguajes intermedios
Para considerar el papel de los lenguajes intermedios y sus
ventajas y desventajas, conviene destacar la diferencia entre
la traduccin de un lenguaje de alto nivel a cdigo mquina
anteriormente a su ejecucin (su compilacin) y su
interpretacin, es decir, la conversin de cada instruccin del
lenguaje a cdigo mquina y su ejecucin, una por una, al
ejecutar el programa. Este proceso se realiza a travs de
una MV de interpretacin que simula un ordenador cuyo
cdigo mquina es el lenguaje de alto nivel que est siendo
interpretado. Y tpicamente, esta MV se construye a travs
de un conjunto de programas de cdigo mquina que
representa los algoritmos y estructuras de datos necesarios
para la ejecucin de las instrucciones del lenguaje de alto
nivel. Hay ventajas y desventajas en cada manera de
convertir los lenguajes de alto nivel a cdigo mquina, que
se pueden resumir as:
Mg. Flix Pucuhuayla Revatta

Lenguajes intermedios

Mg. Flix Pucuhuayla Revatta

Lenguajes intermedios
Estos dos casos representan los dos extremos
porque, como ya se ha visto, existe tambin lo
que se llama la compilacin parcial, que es una
mezcla de los dos enfoques, donde se compila
el lenguaje de alto nivel a un lenguaje
intermedio (ms cerca de las estructuras
presentes en el cdigo mquina que las del
cdigo fuente) y luego se interpreta este
lenguaje al ejecutar el programa.
Como puede imaginarse, esta tcnica combina
las ventajas y desventajas de los dos enfoques
anteriores. Un ejemplo de esta combinacin
existe en el lenguaje de programacin Java y su
entorno.
Mg. Flix Pucuhuayla Revatta

Lenguajes intermedios
Entre otras cosas, Java empez con la idea de liberar al
programador de las dificultades de portar su aplicacin a
nuevas plataformas lo cual, si el programa est muy
vinculado a algn aspecto del sistema operativo donde fue
escrito, podra ser muy difcil.
Se compilar el cdigo fuente de Java a un cdigo byte
(bytecode) antes de ejecutarlo. Y a la hora de correr el
programa, este cdigo, como lenguaje intermedio, sera el
lenguaje de entrada para una MV, que con un conjunto de
libreras (el entorno de ejecucin de Java, Java Runtime o
JRE), la interpretara para su ejecucin.
Por lo tanto, este bytecode podra correr en cualquier
hardware donde haya una versin del JRE disponible. Como
este bytecode est ms cerca del nivel de mquina que de
un lenguaje de alto nivel, los programas corrern ms
rpidamente que los programas completamente
interpretados, aunque ms despacio que los programas
previamente compilados
alPucuhuayla
cdigoRevatta
mquina.
Mg. Flix

Lenguajes intermedios
Como se puede ver en la figura 1, tanto los
programas compilados parcialmente a un
lenguaje intermedio (como Java) como los
programas escritos en lenguajes de alto nivel
que se interpretan (como Lisp) requieren una
MV para interpretar el programa. La principal
ventaja del lenguaje intermedio en este caso
es su proximidad al nivel del cdigo mquina,
en el sentido de que supone menos trabajo a
la hora de ejecutarlo y, por lo tanto, los
programas corren ms rpidamente que los
puramente interpretados.
Mg. Flix Pucuhuayla Revatta

Lenguajes intermedios
Adems del papel de los lenguajes
intermedios en la compilacin parcial, se
puede destacar su papel en la compilacin
estndar. Como ejemplo se puede considerar
C como lenguaje intermedio para un lenguaje
compilado nuevo. Si el autor de un nuevo
lenguaje decide utilizar C, por ejemplo, como
su lenguaje intermedio, slo tendr que
implementar una MV para convertir el cdigo
fuente de su lenguaje a C, ahorrando mucho
trabajo.
Mg. Flix Pucuhuayla Revatta

Lenguajes intermedios
Las ventajas de utilizar un lenguaje tan establecido
como C como lenguaje intermedio son:
La facilidad de portar el lenguaje a una nueva mquina
(slo hay que tener un compilador C disponible all).
La generacin de cdigo mquina es una tarea muy
compleja que requiere un conocimiento profundo de la
arquitectura de la mquina en cuestin y de cada
mquina en que se quiere una versin del lenguaje.
La facilidad de modificar algn rasgo del comportamiento
del lenguaje en alguna mquina en concreto (por ejemplo,
caractersticas de memoria o rendimiento se pueden
aadir libreras C customizadas sin grandes problemas).
Las posibilidades disponibles para mapear estructuras
intermedias del nuevo lenguaje a estructuras de datos de
C.
Mg. Flix Pucuhuayla Revatta

Lenguajes intermedios
Y las desventajas son:
La depuracin es muy difcil porque, entre otras cosas, los
errores que ocurren en el cdigo C no son muy fciles de
localizar en lo que ha escrito el programador originalmente
en el nuevo lenguaje.
Las caractersticas de rendimiento y eficiencia del
lenguaje estn determinadas por el
compilador C.
Habr ocasiones en las que no exista una buena
traduccin entre una estructura en el nuevo lenguaje y las
estructuras de datos en C, por lo que habr una prdida de
eficiencia en el programa resultante (como, por ejemplo,
ocurre en la mayora de las ocasiones en que se compilan
estructuras de Prolog a C slo se puede expresar
iteracin en Prolog utilizando recursin).
Mg. Flix Pucuhuayla Revatta

La mquina virtual de Java como


ejemplo de una MV
La MV de Java es una mquina de pila. Las instrucciones
interpretadas por ella manipulan datos almacenados como
elementos en una pila. El contenido ejecutable de un archivo
de bytecodes contiene un vector de instrucciones bytecode
para cada mtodo. Los bytecodes son instrucciones para la
MV, que tiene algunos registros de variables locales y una
pila para la evaluacin de expresiones.
Las primeras variables locales son inicializadas con los
parmetros actuales. Cada variable local o elemento de la
pila es una palabra que corresponde a un entero de 32 bits,
a un punto flotante o a una referencia a objeto (puntero).
Para puntos flotantes dobles y enteros largos se utilizan dos
huecos de la pila.
Mg. Flix Pucuhuayla Revatta

La mquina virtual de Java como


ejemplo de una MV
Los huecos de la pila no estn relacionados con un tipo de
datos, es decir, en algn punto un hueco podra contener un
valor entero y en otro, el mismo hueco podra contener una
referencia a un objeto. Sin embargo, no se puede almacenar
un entero en un hueco y luego recuperarlo reinterpretndolo
como si fuera una referencia a un objeto. An ms, en
cualquier punto del programa, el contenido de cada hueco
est asociado con un nico tipo de datos que puede ser
determinado usando un flujo esttico de datos.
El tipo de datos podra ser no asignado, con lo cual no se
permite leer el valor del hueco. Estas restricciones son parte
del modelo de seguridad de Java y se ven reforzadas por el
verificador de bytecodes.
Mg. Flix Pucuhuayla Revatta

La mquina virtual de Java como


ejemplo de una MV
El cdigo interpretado es generalmente ms lento
que un programa escrito en un lenguaje compilado, y
Java no es distinto en este aspecto. Se han sealado
muchas posibilidades para mejorar el rendimiento de
los intrpretes.
Una muy comn hoy en da es incluir un compilador
relativamente simple en el tiempo de ejecucin de la
MV. Es decir, en vez de interpretar los bytecodes del
programa una y otra vez, se compilan una sola vez
al instante en el interior de la MV, y la
representacin compilada de los mtodos que
corresponden al programa es ejecutada al efectuar
una llamada. Esto es conocido como un compilador
al instante (o JIT, Just
InPucuhuayla
Time).
Mg. Flix
Revatta

Sintaxis y Semntica de los


Lenguajes de Programacin

Sintaxis formal de los lenguajes de


programacin

Mg. Flix Pucuhuayla Revatta

Paradigmas y lenguajes

Descripcin de los paradigmas ms


representativos

Mg. Flix Pucuhuayla Revatta

PARADIGMAS DE PROGRAMACIN
La clasificacin de los lenguajes atendiendo a sus
caractersticas intrnsecas conduce a los llamados
paradigmas de programacin. Un paradigma de
programacin es un modelo de programacin que
engloba a ciertos lenguajes que comparten:
Elementos estructurales: con qu se confeccionan los
programas?
Elementos metodolgicos: cmo se confecciona un programa?

Mg. Flix Pucuhuayla Revatta

Programacin Imperativa o
Procedural: FORTRAN
Es la primera que se desarrolla porque va
determinando las operaciones que hay que
realizar sobre una mquina ideal de Von
Neumann. Desde este punto de vista un
programa es una secuencia de acciones
(instrucciones) que se realizan en un cierto
orden determinado por el flujo del programa.
Las estructuras para el control son
generalmente sentencias condicionales y
bucles. Como un ejemplo ilustrativo veamos el
aspecto de un programa en lenguaje Pascal
que calcula el factorial de un nmero positivo
x:
Mg. Flix Pucuhuayla Revatta

FORTRAN. Historia
Primer lenguaje de alto nivel (1957).
Desarrollado por IBM para el IBM 704.
Estaba orientado a la eficiencia en la
ejecucin.
Definicin estndar del lenguaje en el 66.
Otras versiones:
FORTRAN 77
FORTRAN 90
Mg. Flix Pucuhuayla Revatta

FORTRAN. Ejemplo

PROGRAM TRIVIAL
INTEGER I
I=2
IF(I .GE. 2) CALL PRINTIT
STOP
END
SUBROUTINE PRINTIT
PRINT *,Hola Mundo
RETURN
END

Mg. Flix Pucuhuayla Revatta

FORTRAN. Caractersticas
Tipos de datos:
Numricos (enteros, reales, complejos y doble
precisin).
Booleanos (logical)
Arreglos
Cadenas de caracteres
Archivos

FORTRAN 90 ya es estructurado, y no requiere


sentencias GOTO.
Slo dos mbitos para las variables: local y
global
Mg. Flix Pucuhuayla Revatta

Ejemplo anotado

Mg. Flix Pucuhuayla Revatta

FORTRAN. Objetos de datos


Variables y constantes
FORTRAN no es sensible a maysculas y minsculas. Los
nombre de variables tienen de 6 a 31 caracteres mximo y
deben comenzar por una letra. Los blancos son
significativos.
Declaracin explicita de variables.
Enteras (I-N), el resto reales. (se modifica con IMPLICIT).
Punteros: en los primeros FORTRAN no hay punteros y
todas las variables se almacenan en memoria esttica. En
FORTRAN 90 se declaran INTEGER, POINTER::P.
Para memoria dinmica ALLOCATE y DEALLOCATE
Mg. Flix Pucuhuayla Revatta

FORTRAN. Objetos de datos


Tipos de datos estructurados

Arrays, pueden tener hasta 7 dimensiones y se guardan por


colummnas.
REAL M(20),N(-5:5)
DIMENSION I(20,20) (tipo por nomenclatura implcita)

Cadenas de caracteres, el primer carcter es el 1, el operador //


permite concatenar cadenas.
CHARACTER S*10, T*25

Almacenamiento de datos. Se usa COMMON para datos compartidos


y EQUIVALENCE cuando almacenamos una variable con dos posibles
tipos en la misma posicin de memoria (como union en C). Se usa
DATA para inicializar datos estticos.
DATA X/1.0/,Y/3.1416/,K/20/

Tipos definidos por el usuario, con TYPE <nombre>... END TYPE


<nombre>
Mg. Flix Pucuhuayla Revatta

FORTRAN. Control de secuencia


EL conjunto de estructuras de control es limitado:
Expresiones, prioridad de operadores
Enunciados
Asignacin, cuando se hace entre cadenas hay ajuste
de tamao con blancos o truncamiento.
Condicional. Permite IF <cond> ELSE IF... Para
seleccin mltiple SELECT CASE <expr>
CASE.....CASE DEFAULT.... END SELECT
Iteracin. DO....END DO
Nulo, se usa solo para la etiqueta. CONTINUE.

Control de subprogramas. CALL invoca al


subprograma y RETURN devuelve un valor al
programa llamante.
Construcciones propensas a error: GOTO.
Mg. Flix Pucuhuayla Revatta

FORTRAN. Entrada y Salida


Tipos de archivos:
Secuenciales
De acceso directo

Comandos: READ, WRITE, PRINT, OPEN ,


CLASE, INQUIRE (propiedades o estado del
archivo) REWIND y ENDFILE (para ubicar el
puntero del fichero).
Para el tratamiento de excepciones en las
sentencias READ/WRITE se puede introducir la
posicin de la rutina de dicho tratamiento
(ERR=90).
Mg. Flix Pucuhuayla Revatta

FORTRAN. Subprogramas
Hay tres tipos de subprogramas:
Function, devuelven un solo valor de tipo numrico,
lgico o cadena de caracteres.
Subroutine, devuelve valores a travs de variables no
locales COMMON.
Funcin de enunciado, permite calcular una sola
expresin aritmtica o lgica.
FN(X,Y)=SIN(X)**2-COS(Y)**2

Gestin de almacenamiento.
Las variables son locales o globales (COMMON)
Recursividad: RECURSIVE FUNCTION FACTORIAL(X)
Parmetros de subprograma. Paso por referencia.
Mg. Flix Pucuhuayla Revatta

Abstraccin y encapsulamiento
FORTRAN. Evaluacin del lenguaje
La abstraccin es posible mediante los
subprogramas y el uso de variables COMMON,
aunque su uso es propenso a errores.
FORTRAN sigue siendo utilizado en el mbito
cientfico y es muy eficiente realizando clculos.
La estructura del programa suele ser dificil de entender.
En FORTRAN 90 se incluye la recursividad y la memoria
dinmica.
Las etiquetas de las sentencias ya no son necesarias, ni
el GOTO, pues se ha transformado en un lenguaje
estructurado.
El aspecto de los programas sigue siendo de
procesamiento por lotes
Mg. Flix Pucuhuayla Revatta

Programacin Imperativa o
Procedural: C

Desarrollado por Ritchie y Thompson


en el 72.
Multiuso (inicialmente para sistemas)
Sintaxis compacta

Historia
60 Thompson desarrolla en Bell Multics, se
crea un lenguaje llamado B.
70, el proyecto UNIX avanza y el lenguaje
B se queda pequeo, se comienza a
desarrollar C
82, C es distribuido con Unix y muy usado
en las universidades. ANSI comienza a
desarrollar un estndar
Mg. Flix Pucuhuayla Revatta

Perspectiva del lenguaje C


La programacin en C se compone de:
El lenguaje C, con un limitado n de estructuras
de control. No hay primitivas si no se usan las
libreras.
El preprocesador de C (#), estos enunciados no
forman parte del lenguaje C y son
preprocesados antes de la compilacin.
Los supuestos de interfaz C (.h), lor archivos
header informan al usuario de las funciones
incluidad en una biblioteca.
Las bibliotecas de C. Archivos obj o lib
conteniendo la
de las funciones.
Mg. implementacin
Flix Pucuhuayla Revatta

Ejemplo anotado

Mg. Flix Pucuhuayla Revatta

Objetos de datos
Tipos de datos primitivos
Los nombres de variables no pueden comenzar con
dgito. Sensible a may-min.
Los datos son enteros (char, short, long),
enumerados (enum) o float. Los punteros se declaran
con el tipo seguido de *.
No hay booleanos.

Tipos de datos estructurados


Arrays, comienzan en 0 y se guardan por filas.
Tipos definidos por el usuario. Struct { }.
Union, es una definicin de tipo si tcticamente con
un struct, pero todos los componentes ocupan la
misma memoria.
Mg. Flix Pucuhuayla Revatta

Representacin de almacenamiento
Los tipos de C emplean bsicamente la
representacin hardware de sus datos.
Una variable de tipo array es tambin el
puntero al primer elemento del array que
comienza con el ndice 0.
Es posible inicializar cualquier variable
declarada estticamente.

Mg. Flix Pucuhuayla Revatta

Control de secuencia
Expresiones.Se emplea notacin infija.
Coerciones, pueden ser forzadas haciendo una cast
unaria antes de un valor.
A + (int)b

Enunciados. Pueden ser bloques de


sentencias entre llaves.
Condicional, if...then...else...;
Condicinal mltiple,
switch...{case....case...default...;}
Iterativos: while, do , for.
Transferencia del control: brak, continue, goto,
return.
De preprocesador: #define, #include, #ifdef,
#if...#undef...#else

C no tiene enunciados E/S, estn en stdio.h.


Mg. Flix Pucuhuayla Revatta

Subprogramas y Gestin de
almacenamiento
main() es la funcin de entrada al programa
principal.
Cada funcin tiene asociado un registro de
activacin, que la invoca cuando es llamada.
No hay anidamiento de funciones, por lo que las
variables son globales o locales. Las globales
deben ser declaradas por extern, para que sea
vistas por otros mdulos. extern int i, j, k;
Las funciones de C slo toman argumentos por
valor. Para simular paso por referencia hay que
pasar el puntero por valor.
Mg. Flix Pucuhuayla Revatta

Abstraccin y encapsulamiento
El lenguaje da facilidades para la
definicin de tipos, pero no
implementa el ocultamiento de la
informacin, de manera que si se
tiene acceso a un struct, tambien
se acceder a todos sus
componentes.
El uso de bibliotecas con
interfaces header tambin permite
Mg. Flix Pucuhuayla Revatta
la abstraccin.

Evaluacin del lenguaje


C es muy potente y popular:
Flexible
Eficiente
Disponible (se distribuye con Unix)
Portatil

Pero C tambin permite una


programacin descuidada y
propensa a errores.
Mg. Flix Pucuhuayla Revatta

Lenguajes funcionales: LISP


60. McCarthy en el MIT
Muy usado en IA
En LISP la recursin se emplea a
menudo como estructura de
control, lo que resta eficiencia a
las ejecuciones.
La ltimas versiones de LISP
incluyen un recolector de basura
Mg. Flix Pucuhuayla Revatta

Hola Mundo en LISP

Mg. Flix Pucuhuayla Revatta

Perspectiva del lenguaje


Interactivo (usualmente)
Los datos en LISP son muy restringidos:
tomos literales (smbolos)
tomos numricos

La estructura de datos bsica es la lista. Incluye


primitivas para su manipulacin.
Los comentarios comienzan por ;
Los parmetros de funcin van todos por valor o por
referencia segn la clasificacin de la funcin.
LISP es interpretado y usa una estructura de gestin de
almacenamiento en montculo con recoleccin de
basura como almacenamiento primario para datos y
programas.
Mg. Flix Pucuhuayla Revatta

Ejemplo anotado

Mg. Flix Pucuhuayla Revatta

Objetos de datos
Tipos de datos primitivos: tomos. Cada tomo
tiene una lista de propiedades asociada, accesible
a travs del puntero que almacena el nombre del
tomo.
No se distinguen may-min para identificadores

Tipos de datos estructurado: listas. Tienen


asociado un puntero al primer elemento (car) y otro
al elemento siguiente (cdr). Una lista vaca apunta
a nil.
Para la asignacin se utiliza setq(x val).
Representacin y almacenamiento.
Cada descriptor de un objeto de datos proporciona tipo y atributos.
En los datos estructurados (listas) se tienen slo punteros a primero
y a siguiente.
Mg. Flix Pucuhuayla Revatta

Control de secuencia

El traductor LISP es una funcin read() que


toma el fuente del fichero y lo interpreta.
La ejecucin del programa consiste en la
evaluacin de las funciones contenidas en el
mismo.
Expresiones:
Condicional
Operaciones sobre tomos (en preorden): +, -, *, /
Operaciones sobre listas: cons, car, cdr, list, replace,
null, equal.
Operaciones sobre propiedades: put, get.
Enunciados: prog() para ejecucin secuencial.
Entrada y salida: open(), read(), print().
Definicin de funciones:
defun, define.
Mg. Flix Pucuhuayla Revatta

Gestin de subprogramas
Tres clases de funciones:
Funcin interpretada, en forma de
estructura de listas. Primitivas eval y
apply.
Funcin compilada, compiladas en
un bloque de cdigo mquina que
puede ser ejecutado por el interprete
del hardware.
Macro, se declara con define. Es
simplemente una funcin ordinaria
en LISP. Puede ser interpretada y
Mg. Flix Pucuhuayla Revatta
compilada.

Gestin de almacenamiento
La memoria se estructura en forma de montculo, que
maneja unidades de una palabra de tamao fijo usando
una lista de espacios libres y un recolector de basura.
Entorno de referencia:
Local, es el que se da en las listas, como asociaciones de tomos
relacionados de una determinada manera.
Global o comn, se consigue mediante asociacin de un tomo
con una propiedad del mismo que contiene un puntero al datos
referenciado. Se usa set y setq.

Paso de parmetros:
Transmisin por valor, consiste en evaluar las expresiones de una
lista de parmetros y transmitir los valores resultantes.
Transmisin por nombre, transmitir las expresiones de la lista de
parmetros sin evaluar, y dejar que la funcin llamada los evalue
usando eval. En funciones macro la transmisin por nombre es la
norma. Para funciones lambda se puede especificar la transmisin
por nombre usando nlambda, en lugar de lambda.
Mg. Flix Pucuhuayla Revatta

Funciones en LISP I
Funciones normales, son las que se suelen incluir en las
implementaciones de LISP (ver manual en cada caso).
Funciones de lista, para manipulacin de listas:

car L, devuelve el primer elemento de L.


cdr L, devuelve la cola (lista - primero).
cons x y, devuelve uan lista formada por x e y.
list x y z, devuelve la lista (x y z).
quote x, no se evala x

Predicados

atom x, devuelve True si x es un tomo.


numberp x, devuelve True si x es un nmero
greaterp x y, devuelve True si x>y
lessp x y, devuelve True si x<y
null x, devuelve True si x es nulo
and x y, devuelve x and y
or x y, devuelve x or y
not x, devuelve not x
eq x y, devuelve TrueMg.
si Flix
x=yPucuhuayla Revatta

Funciones en LISP I
Funciones aritmticas:
+, -, *, y /.
rem x y, devuelve el mdulo x/y (remainder).

Funciones de entrada y salida


load nombrearchivo, lee el archivo a memoria
print x, imprime el elemento x
open nombrearchivo, abre un archivo y devuelve
una puntero al mismo
read, lee del terminal un tomo
help, proporciona ayuda
trace, traza la funcin
Mg. Flix Pucuhuayla Revatta
bye, termina LISP

Abstraccin y encapsulamiento
LISP, en origen, no incluye
caractersticas de abstraccin de datos.
CLOS fue una ampliacin de LISP con
orientacin de objetos. Caractersticas:

Herencia mltiple
Funciones genricas
Metaclases y metaobjetos
Tcnica de creacin e inicializacin de
objetos que permite control del proceso por
parte del usuario.

Mg. Flix Pucuhuayla Revatta

Evaluacin del lenguaje


LISP ha evolucionado durante ms de 30
aos y desarrollado para inteligencia
artificial, pero no es adecuado para
aplicaciones convencionales.
Las versiones compiladas son algo ms
eficientes.

Mg. Flix Pucuhuayla Revatta

Programacin lgica: PROLOG


PROLOG est orientado a la resolucin de
problemas mediante el clculo de predicados,
basado en:
Preguntas a la base de datos
Pruebas matemticas

El programa PROLOG especifca cmo debe


ser la solucin, en vez de dar el algoritmo para
su resolucin. La solucin se obtiene mediante
bsqueda aplicando la lgica de predicados.
Mg. Flix Pucuhuayla Revatta

Historia
Coulmerauer (1970) desarroll un
lenguaje para hacer deducciones
de texto
Se aplica un mecanismo de
resolucin sobre predicados
especiales, clusulas de Horn,
llamado unificacin.
La difusin del lenguaje se
produce en los 80, pero de forma
muy limitada debido a la falta de
Mg. Flix Pucuhuayla Revatta
aplicaciones
en dicho lenguaje.

Hola mundo, en PROLOG

Mg. Flix Pucuhuayla Revatta

Perspectiva del lenguaje


El programa prolog se compone de unos hechos
(datos) y un conjunto de reglas, es decir, relaciones
entre objetos de la base de datos.
La ejecucin del programa cargado en memoria
consiste en realizar una pregunta de forma
interactiva: el interprete generar por inferencia los
resultados que se deducen a partir del contenido de
la base de datos.
PROLOG tiene una sintaxis y semntica simples.
Slo busca relaciones entre los objetos creados, las
variables y las listas, que son sus estructuras
bsicas.
Comentarios entre /* */
Mg. Flix Pucuhuayla Revatta

Ejemplo anotado

Mg. Flix Pucuhuayla Revatta

Objetos de datos
Tipos de datos primitivos: variables y constantes:
Enteros
Reales
Caracteres
Los identificadores con minscula representan hechos,
los que van con mayscula variables.
El alcance de una variable es la regla donde aparece.

Tipos de datos estructurados:


tomos: constantes y variables de cadena
Listas, representadas entre [ ]

Tipos definidos por el usuario. Las reglas para


definir relaciones
pueden actuar como tipos de
Mg. Flix Pucuhuayla Revatta
usuario.

Representacin de almacenamiento
Las reglas y hechos son almacenadas en
memoria como listas enlazadas.
La ejecucin de prolog consiste en una
bsqueda en profundidad de un rbol
conteniendo todas las posibles soluciones.
Para cada una de ellas se evaluar su
correccin. La bsqueda se puede hacer
ms eficiente mediante la poda del rbol
de bsqueda (corte).
Mg. Flix Pucuhuayla Revatta

Control de secuencia
El orden de evaluacin es secuencial
Expresiones, operaciones aritmticas y
operadores relacionales. Not().
Enunciados
Hechos, relaciones que se expresan en una
consulta. Son tuplas con un nombre de predicado y
unos argumentos.
Reglas, implicaiones que se expresan en una
operacin consult
Preguntas, sucesin de trminos que finalizan con
un punto.
Cortes, (!), fuerza el retroceso en la bsqueda. Esto
puede impedir que se encuentren ciertas
soluciones, pero puede hacer ms eficiente la
bsqueda.

Entrada y salida, nl y write.


Mg. Flix Pucuhuayla Revatta

Subprogramas y gestin de almacenamiento

PROLOG tiene dos modos:


Modo consulta, se introducen nuevas relaciones (hechos) en el almacenamiento
dinmico de la base de datos.
Modos pregunta, se ejecuta un intrprete basado en pilas para evaluar las preguntas
del usuario.

Alcance de las variables:


Ambiente local de referencia, todas las variables son locales a la regla en que estn
definidas. La unificacin hace interaccionar nombres locales de una regla con los de
otras reglas.
Ambiente comn de referencia, todos los datos son compartidos.
Paso de parmetros, la unificacin proporciona el paso de parmetros entre reglas.

Funciones normales, van integradas en el lenguaje:


Consult(nommbrearchivo)
Fail, siempre fracasa
See(nombrearchivo), lee las entradas de un archivo y las incorpora al conjunto de
reglas.
Write(trmino)
Tell(trmino), reorienta la salida del write al archivo
Told, cierra el archivo anterior
Nl, salto de lnea
Atom(X), devuleve cierto si X es un tomo
Var(X), devuelve cierto si X es una variable
Integer(X), devuelve ciertoMg.
si X
es Pucuhuayla
un entero Revatta
Flix
Trace, activa la depuracin del programa

Abstraccin y encapsulamiento
PROLOG no proporciona estas
capacidades.

Mg. Flix Pucuhuayla Revatta

Evaluacin del lenguaje


PROLOG va bien para problemas de
relaciones, p.e. Tratamiento del
lenguaje natural, y consulta de bases
de datos.
A pesar de que es posible desarrollar
programas sin especificar el algoritmo
de resolucin a veces hay que echar
mano de otro tipo de programacin
para hacer los programas ms
eficientes, y a menudo se emplea el
corte para limitar el espacio de
bsqueda.
Mg. Flix Pucuhuayla Revatta

Paradigmas y lenguajes

El paradigma de la programacin orientada a


objetos (POO)

Mg. Flix Pucuhuayla Revatta

PROG. ORIENTADA A OBJETO


Ver Apuntes sobre la POO

Mg. Flix Pucuhuayla Revatta

HERENCIA
Con frecuencia la informacin se pasa entre
componentes de programa de manera implcita,
a este traspaso de informacin le llamamos
herencia.
La herencia consiste en la recepcin en un
componente de programa de propiedades o
caractersticas de otro componente de acuerdo
con la relacin especial que existe entre ambos
componentes.
Las reglas de alcance de variables son una
forma de herencia.
La herencia mltiple se da cuando una clase
tienen varias superclases de las que hereda.
Mg. Flix Pucuhuayla Revatta

Clases derivadas
La herencia se implementa en los lenguajes orientados
a objetos a travs de clases derivadas, que heredan
propiedades y mtodos de sus superclases.
La visibilidad de los objetos heredados depende de la
forma en que se declaran:
PRIVATE
PUBLIC
PROTECTED

Implementacin: En la clase derivada los nombre


derivados de la superclase se agregan al espacio.
Si en la definicin hay una funcin constructora, hay que incluir
en la declaracin una llamada a dicha funcin.
El objeto guarda la referencia de los apuntadores a todas las
propiedades y mtodos, a esto se llama enfoque con base en
copia de la herencia (usado en C++).
Mg. Flix Pucuhuayla Revatta

Mtodos
La herencia de mtodos para crear
objetos nuevos proporciona un poder
adicional que va ms all del simple
encapsulamiento.
En las clases derivadas, cuando se
quiere cambiar uno de los mtodos hay
dos posibilidades:
Redefinir el mtodo en la clase derivada
Usar una funcin virtual, que se enlaza
dinmicamente en el momento de llamada
del subprograma.

Mg. Flix Pucuhuayla Revatta

Clases abstractas
Se usa cuando la superclase define una especie de
plantilla para las subclases, aunque no permite que se
declaren objetos en esta definicin. Esto requiere que
todos los objetos que requieren esta clase se definan de
una subclase derivada.
No se puede crear ningn objeto que tenga funciones
virtuales nulas, del tipo:
Virtual void NombreDeTipo()=0;

HERENCIA MIXIN. Tambin se llama herencia de


incorporacin, en la que solo se define la diferencia entre
la clase base y la clase derivada. Las diferencia se define
en una clase delta:
Deltaclass ModPila {}
Class PilaNueva = class PilaElem + deltaclass ModPila
La ventaja es que las clase delta se pueden adicionar a cualquier
clase.
Mg. Flix Pucuhuayla Revatta

Objetos y mensajes
El lenguaje Smalltalk presenta 3 caractersticas:
Definicin de clase. Define la estructura interna y los
mtodos que se pueden usar para crear y manipular
objetos.
Ejemplarizacin de objetos. Se crean objetos
especficos para cada definicin de clase.
Paso de mensajes. Los mtodos se pasan como
mensajes a un objeto para llevar a cabo una accin.
Tipos:
Un mensaje unario es un mtodo sin parmetros.
El mensaje binario se usa, principalmente, para operadores
aritmticos.
Los mensajes de palabra clave se usan para hacer
asignaciones de valor, por ejemplo, en un array:
X_Array new: 10
X at:3 put:42
Mg. Flix Pucuhuayla Revatta

Herencia de clases
Si se enva un mensaje a un
objeto con un mtodo que no est
definido en su clase se pasa a la
clase progenitora, y as
sucesivamente.
En los mtodos de palabra clave el
parmetro se nombra de forma
explcita en la declaracin del
mtodo
Mg. Flix Pucuhuayla Revatta

Conceptos de abstraccin
El encapsulamiento es un mecanismo divide y vencers
para proporcionar control sobre el programa en
desarrollo.
La abstraccin y la herencia puede ser usada para
impedir al programador ver el contenido de los objetos
de datos que no convenga. La herencia,
fundamentalmente, es un mecanismo para pasar
informacin entre objetos en clases relacionadas.
Permite:
Especializacin, para que los objetos derivados contengan
caractersiticas de otros objetos.
Descomposicin, permite separar una abstraccin en sus
componentes. Lo contrario es la agregacin.
Ejemplarizacin, es el proceso de crear ocurrencias de una
clase (se trata de un proceso de copia).
Individualizacin, objetos similares se agrupan con otros para
propsitos comunes. Es lo contrario de agrupamiento.
Mg. Flix Pucuhuayla Revatta

POLIMORFISMO
El polimorfismo es la capacidad de
un solo operador o nombre de
subprograma para referirse a
varias definiciones en funcin del
contexto, es decir, de los tipos de
daos de los argumentos y del
resultado.

Mg. Flix Pucuhuayla Revatta

Paradigmas y lenguajes

La programacin centrada en la red

Mg. Flix Pucuhuayla Revatta

Mecanismos de los LP

Tipos, declaraciones y control

Mg. Flix Pucuhuayla Revatta

Control de secuencia
Las estructuras para el control de la secuencia
son de 3 tipos:
Estructuras que se usan en expresiones: precedencia
y parntesis.
Estructuras que se usan en enunciados:
condicionales e iterativos.
Estructuras que se usan en subprogramas: llamadas
a subprogramas.

Estructuras de control explcitas, son las que el


programador usa de forma optativa; mientras
que las implcitas son las que el lenguaje define.
Mg. Flix Pucuhuayla Revatta

Secuenciamiento en expresiones
La evaluacin de expresiones depende de las
prioridades y de los parntesis. Se puede
representar la evaluacin en una estructura de
rbol. Tres rdenes:
Prefijo (polaca prefija), el operador antecede a los n
operandos.
Se puede evaluar en un solo examen de la expresin
Se puede usar para cualquier nmero de operandos
Traduccin a cdigo fcil y almacenamiento en pila

Postfija, el operador sigue a sus operandos.


Ventajas parecidas a la prefija.
Infija, slo es adecuada para dos operandos.
Requiere reglas de precedencia y parntesis. La
evaluacin suele ser de izquierda a derecha, pero en
la potenciacin es al revs.
Mg. Flix Pucuhuayla Revatta

Representacin de expresiones en
tiempo de ejecucin
Es necesario traducir las expresiones a
una forma ejecutable:
Secuencias de cdigo mquina, que deben
hacer uso de localizaciones absolutas de
los datos y registros para guardar datos
intermedios.
Estructuras de rbol, luego se ejecutan
usando intrpretes software.
Formas prefija y postfija, pueden ser
ejecutadas almacenndolas en la pila de
forma fcil.
Mg. Flix Pucuhuayla Revatta

Evaluacin de expresiones en rbol


Se pueden presentar algunos problemas:
Reglas de validacin uniforme.
Impaciente. Consiste en evaluar todos los operandos que
cuelgan de un operador para luego realizar la operacin.
Frecuente y conceptualmente sencilla.
Perezosa. No evaluar la operacin, sino pasar los operandos sin
evaluar hasta que no quede otro remedio. Se pueden ahorrar
operaciones, pero es difcil de implementar.

Efectos colaterales, si un operando aparece varias


veces en una expresin, pero del momento dela primera
evaluacin a la segunda cambia su valor por un efecto
colateral, no se puede ahorrar su clculo.
Condiciones de error, determinadas operaciones en la
secuencia de clculo pueden fallar (divisin por 0).
Expresiones booleanas en cortocircuito. Una evaluacin
impaciente de expresiones booleanas puede conducir a
Mg. Flix
Pucuhuayla
Revatta
un error no previsto
por
el programador.

Secuenciamiento con expresiones


no aritmticas
Este tipo de operaciones son muy utilizadas en lenguajes
lgicos:
Concordancia de patrones
Reescritura de trminos (reglas de produccin)
Unificacin, que consiste, ante una consulta (predicado
conteniendo variables), en la sustitucin de variables para
concordar patrones congruentes con las reglas y hechos de la base
de datos.

En la implementacion de la unificacin en PROLOG las


pilas desempean un papel importante. Adems, para el
recorrido del rbol de bsqueda se emplea el
RETROCESO, salvo que se encuentre la funcin ! (corte),
que hace que se produzca siempre fracaso al retroceder a
la ltima solucin plausible.
Mg. Flix Pucuhuayla Revatta

Control de secuencia mediante


enunciados
Asignaciones a objetos de datos. El valor de los datos
puede variar la secuencia.
Enunciado de asignacin. Suele ser un operador binario que
asigna a la variable izquierda el resultado de evaluar la derecha.
Enunciado de entrada. Leer datos desde un terminal u otro
perifrico.
Otras operaciones de asignacin. La ms usada es la
transmisin de parmetros.

Formas de control de secuencia:


Composicin o secuencia
Alternancia
Iteracin

Control explcito de secuencia: GOTO


Otras sentencias (ya estructuradas): BRAK y CONTINUE.
Mg. Flix Pucuhuayla Revatta

Control de secuencia estructurado


Enunciados compuestos. Serie de enunciados
que se pueden tratar como un solo enunciado
(bloques).
Enunciados condicionales, expresan alternancia
de dos o ms enunciados:
If
Case

Enunciados de iteracin, es le mecanismo


bsico para la repeticin de un proceso:

Repeticin simple: perform (FORTRAN)


Repeticin mientras: while.
Repeticin mientras con contador: for
Repeticin indefinida: loop
Mg. Flix Pucuhuayla Revatta

El problema del control de


secuencia estructurado.
La estructura puede ir complicndose por:
Enunciado de iteracin con salidas mltiples.
Condiciones excepcionales (errores y su
tratamiento)

Programas primos, tienen:


Un solo arco de entrada
Un solo arco de salida
Unas sola ruta del arco de entrada a cada nodo, y
de cada nodo al arco de salida

El teorema de la estructura (Jacobini)


establece que todos los programas se pueden
reescribir usando los enunciados de la
programacin estructurada.
Mg. Flix Pucuhuayla Revatta

Control de secuencia en los


subprogramas: Llamada/Regreso simple
Tienen el mismo efecto que si se copia el cdigo
del subprograma en la llamada call (regla de
copia):
Los subprogramas no pueden ser recursivos
Se requieren enunciados call explcitos
Los subprogramas se deben ejecutar por completo
en cada llamada
Transferencia inmediata del control en el punto de
llamada
Secuencia nica de ejecucin
Mg. Flix Pucuhuayla Revatta

Control de secuencia en los


subprogramas: Subprograma simple
Llamada/Regreso
Es posible el control sobre los datos:
Transmisin de parmetros
Variables locales
Variables globales

Para la implementacin es necesario:


La definicin del subprograma, esttica e invariable.
Un registro de activacin, cambiante, que almacena:
Datos locales
Parmetros
Otros elementos de datos:
Apuntador a la instruccin presente (CIP)
Apuntador del ambiente presente (CEP). El ambiente de
referencia es el registro de activacin.
Flix Pucuhuayla Revatta
Direccin deMg.
retorno

Control de secuencia en los


subprogramas: Subprogramas recursivos
La recursividad es un procedimiento para el
control de secuencia consistente en que un
programa se llama a s mismo, de manera que
se crea una segunda activacin del subprograma
durante el tiempo de vida de la primera
activacin.
Implementacin:
No es conceptualmente distinto del caso anterior, slo
es necesario disponer de espacio para los registros de
activacin de las llamadas recursivas (pila).
Mg. Flix Pucuhuayla Revatta

Atributos del control de datos

Es necesario, durante la ejecucin, conocer el significado o valor de


cada identificador que aparece en el programa.
Nombres, sirven para asociar un identificador a un dato. Clases:

De variables
De parmetros formales
De subprogramas
Para tipos definidos
Para constantes definidas
De enunciados
De excepciones
Para operaciones primitas
Para constantes de literales

Un nombre compuesto corresponde a una estructura de datos.


Segn el ambiente de referencia, cada ASOCIACIN representa la
pareja de un identificador y su objeto de datos.

Mg. Flix Pucuhuayla Revatta

Ambientes de referencia
Ambiente local de referencia:
Parmetros formales
Variables locales
Subprogramas definidos

Ambiente no local de referencia, son


identificadores que se pueden usar desde el
subprograma, pero no se crean en l.
Ambiente global de referencia, es la parte del
ambiente no local. Una variable local oculta a
la global del mismo nombre.
Ambiente predefinido de referencia. Algunos
identificadores son predefinidos por el
lenguaje
Mg. Flix Pucuhuayla Revatta

Alcance esttico y dinmico


El alcance esttico de un
identificador para una asociacin
es el conjunto de activaciones de
subprograma en las cuales la
asociacin es visible.
Una regla de alcance dinmico
define las asociaciones en el curso
dinmico de activaciones de
subprogramas.
Mg. Flix Pucuhuayla Revatta

Datos compartidos en subprogramas


Los objetos de daots suelen ser
compartidos para la comunicacin con y
entre los distintos subprogramas.
Enfoques:
Ambientes comunes explcitos
Ambientes no explcitos con base a alcance
dinmico
Alcances esttico
herencia
Mg. Flix Pucuhuayla Revatta

Parmetros y transmisin de parmetros


Los parmetros y resultados transmitidos de
manera explcita son el mtodo principal para
compartir datos entre subprogramas.
Parmetro real, es una clase de objeto de datos
dentro de un subprograma que aparece declarado
en el encabezamiento.
El parmetro real es el objeto de datos que se
comparte con el subprograma llamado.
El establecimiento de correspondencia entre el
parmetro real y el formal puede ser:
Correspondencia de posicin (lo ms frecuente)
Correspondencia por nombre explcito, ambos
parmetros se aparean en la llamada:
Sub(Y => B, X => 27)
Mg. Flix Pucuhuayla Revatta

Mtodos para transmitir parmetros


Llamada por nombre, se copia.
Llamada por referencia, se pasa el puntero al
parmetro real.
Llamada por valor resultado, se copia y
caundo finaliza se escribe el valor resultado
sobre el parmetro real.
Llamada por valor constante, el parmetro real
se pasa al formal como valor constante, no se
puede modificar.
Llamada por resultado, se usa slo para
transferir un resultado de regreso al programa.
No importa su valor inicial.
Mg. Flix Pucuhuayla Revatta

Semntica de la transmisin
Independientemente de la la implementacin
los parmetros pueden ser:
De entrada (IN)
De salida (OUT)
De entrada/salida (IN/OUT)

Lo normal es que los parmetros con tipos


elementales de datos admitan las 3
posibilidades, y que los tipos de datos
compuestos (arrays y registros) se pasen
por referencia.
Mg. Flix Pucuhuayla Revatta

Subprogramas como parmetros


Para transmitir un subprograma como parmetro al
subprograma que se llama hay que tener en
cuenta que:
El parmetro real es el nombre del subprograma que se
transmite
El parmetro formal especifica el tipo de subprograma
Procedure Q(x:integer, function R(y,z:integer):integer)
Problemas asociados con los parmetros de
subprograma:
Verificacin esttica de tipos, pues en la llamada se debe hacer
esta comprobacin.
Referencias no locales (variables libres), es decir variables que
no tienen enlaces dentro de la definicin del subprograma.
Son necesarias reglas de asociacin ms reciente para
referencias no locales.
Mg. Flix Pucuhuayla Revatta

Ambientes comunes explcitos


Un ambiente comn para compartir objetos de
datos es la forma ms sencilla de compartir
datos entre subprogramas.
Bloque COMMON, de fortran
Paquetes en ADA.
Clases en C++ y SmallTalk, aunque no es su
principal objetivo

Es necesario definir el alcance y la proteccin


para los ambientes comunes explcitos
Mg. Flix Pucuhuayla Revatta

You might also like