Está en la página 1de 179

1

INDICE
RESUMEN 6
INTRODUCCIN
CAPITULO I : VISION GENERAL DEL PROBLEMA
1.1 Planteamiento del Problema 7
1.1.1 Seleccin 7
1.1.1.1 General 7
1.1.1.2 Especfica 8
1.1.2 Planteamiento 9
1.1.2.1 Implicancias 9
1.1.2.2 Limitantes 9
1.1.2.3 Resumen 10
1.1.2.4 Objetivos y Alcances 11
1.2 Importancia y Justificacin 11
1.3 Marco Terico 13
1.3.1 Hiptesis 13
MARCO TEORICO
CAPITUL0 II: LENGUAJES DE PROGRAMACIN
2.1 Antecedentes de los lenguajes de programacin 15
2.2 Definicin de lenguaje de programacin 17
2.3 Abstracciones en los lenguajes de programacin 19
2.4 Paradigmas de lenguajes de programacin 19
CAPITULO III: TEORA DE LENGUAJES
3.1 Antecedentes de teora de lenguajes 27
3.2 Historia y criterios de diseo 27
3.3 Principios de diseo de los lenguajes 28
3.3.1 Eficiencia 28
2
3.3.2 Regularidad 28
3.3.3 Principios adicionales sobre diseo de los lenguajes 29
3.3.3.1 Simplicidad 29
3.3.3.2 Expresividad 30
3.3.3.3 Extensibilidad 30
3.4 Sintaxis 30
3.4.1 Introduccin a la compilacin 31
3.4.1.1 Analizador lxico 32
3.4.1.2 Analizador sintctico 34
3.4.1.3 Anlisis semntico 35
3.4.1.4 Generacin de cdigo intermedio 36
3.4.1.5 Optimador de cdigo 36
3.4.1.6 Generacin de cdigo 36
3.5 Semntica bsica 37
3.5.1 Atributos, ligaduras y funciones semnticas 37
3.5.2 Declaraciones, bloques y alcance 38
3.5.3 La tabla de smbolos 40
3.5.4 Resolucin y sobrecarga de nombres 44
3.5.4.1 Sobrecarga de funciones 44
3.5.4.2 Sobrecarga de operadores 45
3.5.4.3 Asignacin, tiempo de vida y el entorno 46
3.5.4.4 Variables y constantes 47
3.6 Tipos de datos 48
3.6.1 Tipos de datos e informacin de tipos 48
3.6.2 Tipos simples 49
3.6.3 Constructores de tipo 49
3.7 Expresiones y enunciados 50
3.7.1 Introduccin 51
3.7.2 Expresiones 51
3.7.3 Exactitud 52
3.7.4 Llamadas de funcin 52
3.7.5 Enunciados y guardias condicionales 53
3.7.6 Manejo de excepciones 54
3.7.7 Efectos secundarios 55
3.8 Procedimientos y ambientes 56
3.8.1 Funciones y procedimientos 56
3.8.1.1 Mecanismos de paso de parmetros 57
3
3.9 Tipos de datos abstractos y mdulos 59
3.9.1 Clases 60
3.9.1.1 Tipos de acceso 61
3.9.1.2 Objetos 6
3.9.2 Listas enlazadas 62
3.9.3 Pilas 64
3.9.4 Colas 66
3.9.5 Mdulos 68
3.10 Programacin orientada a objetos 70
3.10.1 Beneficios fundamentales 70
3.10.2 Tres conceptos fundamentales apoyan estas ventajas 70
3.10.3 Clases y mtodos 71
3.10.4 Herencia 71
3.10.5 Ligadura dinmica 72
3.10.6 Herencia mltiple 72
3.10.7 Polimorfismo 73
3.10.8 C++ 73
3.10.9 C++ herencia mltiple 74
3.11 Programacin lgica 75
3.11.1 Lgica de predicados 75
3.11.2 Clculo de predicados 77
3.11.3 Visual prolog 81
3.12 Programacin algebraica 84
CAPITULO IV: MEJOR SOFTWARE
4.1 Paradigmas de lenguaje 85
4.2 Principios de diseo de los lenguajes 89
4.2.1 Eficiencia 89
4.2.2 Regularidad 90
4.2.2.1 Generalidad 90
4.2.2.2 Ortogonalidad 91
4.2.2.3 Uniformidad 92
4.2.3 Principios adicionales sobre diseo de los lenguajes 94
4.2.3.1 Extensibilidad 94
4
4.3 Semntica bsica 95
4.3.1 Sobrecarga de funciones 95
4.3.2 Sobrecarga de operadores 96
4.4 Tipos de datos 100
4.4.1 Tipos de datos 100
4.4.2 Tipos enumerados 101
4.4.3 Constructores de tipo 102
4.4.3.1 Arreglos y funciones 102
4.4.3.2 Punteros 104
4.5 Expresiones y enunciados 105
4.5.1 Enunciados if 105
4.5.2 Enunciados case 106
4.5.3 Enunciados while 108
4.5.4 Enunciados for 109
4.5.5 Excepciones en java 110
4.6 Procedimientos y ambientes 112
4.6.1 Funciones sin pase de parmetros 112
4.6.2 Funciones con pase de parametros por valor 113
4.6.3 Funciones con pase de parametros por referencia 113
4.7 Tipos de datos abstractos y modulos 114
4.7.1 Clases 114
4.7.2 Listas enlazadas 116
4.7.4 Colas 117
4.8 Programacin orientada a objetos 119
4.8.1 Herencia 119
4.8.2 Herencia multiple 125
4.8.3 Constructores 126
4.8.4 Constructores mltiples 128
4.9 Programacion lgica 129
4.10 Programacion algebraica 135
MATERIALES Y METODOS 139
RESULTADOS 141
Contrastacin de resultados 142
Tipos abstractos de datos 145
5
DISCUSIN 147
REFERENCIALES 149
APNDICE 152
APNDICE NRO 1 :Syllabus del curso de Lenguaje de Programacin I 153
APNDICE NRO 2 :Syllabus del curso de Base de Datos 159
APNDICE NRO 3 :Syllabus del curso de Lenguaje de Programacin II 166
APNDICE NRO 4 :Syllabus del curso de Teora de Lenguajes de
Programacin 170
ANEXOS 175
Lenguajes algebraicos: SQL 176.
6
RESUMEN
Estudio comparativo de los lenguajes de programacin, segn la forma de
sus instrucciones.
Esta investigacin es un apoyo a la Ingeniera del Software, porque ayuda
al anlisis comparativo de los diferentes tipos de lenguajes de
programacin segn la forma de sus instrucciones: imperativos,
Declarativos (lgicos, funcionales, algebraicos), Lenguajes orientados a
objetos), se analiza sus caractersticas y su uso de acuerdo a estas
caractersticas.
En el captulo I se realiza una visin general del problema a analizar,
donde se plantean una serie de interrogantes, preliminares a la realizacin
de la investigacin.
En el captulo II y III aportan los principios de diseo de los lenguajes de
programacin, sintaxis, temas semnticos, tipos de datos abstractos, y los
paradigmas de los lenguajes.
En el captulo IV, se demuestra a travs de programas escritos en
diferentes lenguajes de programacin: C+, JAVA, PROLOG, SQL, cada
una de las caractersticas analizadas en el captulo III. El resultado
permitir un mejor conocimiento de estos paradigmas de programacin,
que nos lleva a la conclusin de que todos son muy importantes en el
momento actual, ya que todos se complementan, segn la utilidad que le
demos: comercial, cientfica, inteligencia artificial, mecatrnica,
automatizacin.
Esta investigacin se llev a cabo durante el dictado por la suscrita de los
cursos: Lenguaje de Programacin I, Base de Datos, Lenguaje de
Programacin II, Algoritmos y Estructura de Datos a nivel Universitario, y
las conclusiones obtenidas pueden ser utilizados por cualquier investigador
de dichos lenguajes de programacin o de alguna rama de la ingeniera del
software.
7
INTRODUCCIN
CAPITULO I
VISION GENERAL DEL PROBLEMA
1.1 PLANTEAMIENTO DEL PROBLEMA
1.1.1 SELECCIN
1.1.1.1 GENERAL
Estudio comparativo de los lenguajes de programacin, segn la forma de
sus instrucciones.
A travs del tiempo, desde el ao 1950 cuando aparece el primer Lenguaje
de Programacin, con el nombre de Assembler, hemos sido testigos de
cmo estos han evolucionado, y las diversas finalidades con las cuales
estos han sido creados, unos ms orientados a la mquina como el
Assembler; en otros el criterio de diseo era la eficiencia en ejecucin,
como en el Fortran; Cobol intent mejorar la legibilidad; otros con fines
didcticos como el Pascal; otros con fines comerciales como el Visual
Basic; Algunos para la creacin de software (compiladores, sistemas
operativos, gestores de Bases de Datos) como el C++; Tambin algunos
otros lenguajes de tipo declarativo para la creacin de sistemas expertos
como Visual Prolog, Lisp; otros orientados a internet como Java; entre
otras finalidades.
Pero tambin vemos un crecimiento de los Lenguajes de Programacin,
desde otro ngulo, de acuerdo a la forma de sus instrucciones.
Qu diferencias existen entre estos paradigmas?, Qu finalidad o
utilidad tiene cada uno de ellos?, Qu diferencia existen por la forma de
sus instrucciones?, Qu principios se cumplen y cules no?. Es la
motivacin para emprender el siguiente trabajo de investigacin,
estrechamente ligado a los Cursos de Lenguaje de Programacin I y Base
de Datos, que tengo a mi cargo en la Escuela de Ingeniera de Sistemas
de la Universidad Nacional del Callao.
8
1.1.1.2 ESPECFICA
Estudio comparativo de los lenguajes de programacin, segn la forma de
sus instrucciones.
Segn la forma de sus instrucciones los lenguajes se pueden clasificar en:
Lenguajes imperativos o procedimentales: Fueron escritos para ser
usados en la mquina de Von Neumann, se refiere a una ejecucin
secuencial y al uso de variables de asignacin, variables que
representan variables de memoria, y asignacin que permite que el
programa opere sobre dichos valores. Ejemplo: Cobol, Fortran, C,
Pascal, Eiffel, Java.
Lenguajes declarativos: Todo lo que se necesita en un programa
declarativo es el enunciado de las propiedades del cmputo. Las
propiedades se declaran, pero no se especifica una secuencia de
ejecucin.
Lenguajes Lgicos: se basa en la lgica simblica. Un programa
est formado por un conjunto de enunciados que describen lo que
es verdad con respecto a un resultado deseado. Ejemplo: Prolog.
Lenguajes Funcionales: se basa en la nocin abstracta de una
funcin, se parecen a las matemticas, tal como se plantea en el
clculo lambda. Se conocen tambin como lenguajes aplicativos.
Este paradigma no involucra una idea de variable o asignacin de
variable. Tambin las operaciones repetitivas se expresan mediante
funciones recursivas y no mediante bucles. Ejemplo: Lisp, Haskell,
Ada.
Lenguajes Algebraicos: es un de acceso a bases de datos
relacionales que permite especificar diversos tipos de operaciones
en stas. Una de sus caractersticas es el manejo del lgebra y el
clculo relacional permitiendo efectuar consultas con el fin de
recuperar ,de una forma sencilla, informacin de inters de una
base de datos, as como tambin hacer cambios sobre ella.
Ejemplo: SQL.
Lenguajes orientados a objetos:
Los lenguajes que usan este paradigma han tenido mucho xito, pues
les permiten a los programadores escribir cdigo reutilizable y ampliable
que opera imitando al mundo real, permitiendo que los programadores
9
utilicen su intuicin natural con respecto al mundo para comprender el
comportamiento de un programa y construir cdigo apropiado. Este
paradigma se ha convertido en el nuevo estndar.
Lenguajes basados en objetos: (clases, TAD): Visual basic.
Lenguajes orientados a objetos: (herencia, polimorfismo): C++,
Java, smalltalk.
Debemos tener en cuenta que existen principios sobre diseos de los
lenguajes, se consideran 2 grupos:
Eficiencia
Regularidad
Dentro de los principios de eficiencia tenemos: cdigo, traduccin,
capacidad de implementacin, eficiencia de programacin.
Asimismo, dentro de los principios de Regularidad tenemos: Generalidad,
ortogonalidad, uniformidad.
Esta investigacin pretende analizar todas estas variables y ponerlas en
prctica para observar su influencia en la ingeniera del software.
1.1.2 PLANTEAMIENTO
1.1.2.1 IMPLICANCIAS
La ejecucin de la presente investigacin, tendr las siguientes
implicancias:
a.- CIENTFICA
La hiptesis demostrada y comprobada, explicar la influencia de
las variables analizadas en los lenguajes de programacin.
b.- TCNICA
Comprobar los beneficios y desventajas de los diferentes
Lenguajes de Programacin, en la construccin de los diferentes
tipos de software, y la comprobacin de su eficiencia, profundizar
en el mejor conocimiento de dichos lenguajes.
1.1.2.2 LIMITANTES
Las limitantes establecidas para el siguiente proyecto son:
10
a.- TERICA
Para ejecutar la presente investigacin, se har uso de las teoras
cientficas que a continuacin se indican:
Teora de lenguajes de Programacin y Construccin de Software
de Base.
b.- TEMPORAL
El estudio es del tipo longitudinal. Su ejecucin se inicia el 1er mes
despus de aprobado el proyecto y termina 24 meses despus.
c.- ESPACIAL
La investigacin ser realizada en una Computadora Personal, y en los
laboratorios de la FIIS de la UNAC.
1.1.2.3 RESUMEN
En resumen el planteamiento del problema sera el siguiente:
1.- Cules son los aportes de los Lenguajes Imperativos, Declarativos y
Orientados a objetos?
2.- En qu grado los Lenguajes de Programacin cumplen con los
principios de diseo de Eficiencia?
3.- En qu grado los Lenguajes de Programacin cumplen con los
principios de diseo de Regularidad?
4.- Qu caractersticas y qu finalidad tienen cada uno de los Lenguajes
Imperativos, Declarativos y Orientados a objetos?
5.- Qu Ventajas tienen cada uno de los Lenguajes Imperativos,
Declarativos y Orientados a objetos?
6.- Qu desventajas tienen cada uno de los Lenguajes Imperativos,
Declarativos y Orientados a objetos?
7.- Cmo deberan ser los lenguajes de Programacin del futuro?
8.- Cules son las diferencias en cuanto a requerimientos de Plataformas
de Sistemas Operativos entre dichos Lenguajes de Programacin?
11
1.1.2.4 OBJETIVOS Y ALCANCES
OBJETIVOS
La evolucin continua y rpida de los Lenguajes de Programacin, obliga
cada cierto tiempo a realizar un reajuste en los Lenguajes. A evaluar los
principios de Diseo que soporta cada uno, visualizar las nuevas
tendencias. Correspondera a un tipo de investigacin bsica.
a. GENERALES
Apoyar al dictado de los cursos de Lenguaje de Programacin I y Base
de Datos a mi cargo, en la Universidad Nacional del Callao.
b. ESPECFICOS
De acuerdo a las definiciones anteriores, esta investigacin permitir:
Profundizar en la Investigacin de los diferentes tipos de paradigmas de
programacin.
Investigar las diferencias y semejanzas que existen entre los diferentes
lenguajes de programacin a nivel de diseo.
Evaluar la utilidad y beneficio de cada uno de los Lenguajes de
programacin.
ALCANCES
El tipo de Investigacin ser realizar los cursos a mi cargo, utilizando estos
lenguajes de programacin, para poder analizar sus efectos en la
Ingeniera del software.
El sector que se ver beneficiado con los resultados de esta investigacin
son: los alumnos de la Facultad de Ingeniera Industrial y de Sistemas de
la UNAC.
1.2 IMPORTANCIA Y JUSTIFICACION
La ejecucin del presente trabajo de investigacin, se justifica por su:
a. NATURALEZA
No existe un camino o mtodo para discernir cundo reemplazar una
tecnologa por otra, muchas veces es la moda, de ah la importancia de
12
realizar un estudio al respecto, para que con elementos de juicio podamos
comparar punto por punto los diferentes tipos de Lenguajes de
Programacin de acuerdo al paradigma de programacin al que
pertenecen.
b. MAGNITUD
Este objeto de estudio, se justifica porque afecta a los alumnos de la
Facultad de Ingeniera Industrial y de Sistemas de la UNAC. Pues si estos
estn mejor capacitados tendrn mejores perspectivas laborales.
c. VULNERABILIDAD
El problema de investigacin es vulnerable porque es posible analizar cada
punto de la construccin de un software de base, ya que utilizo estos
Lenguajes de programacin en el dictado de cursos en la FIIS, por lo cual
se dan las condiciones favorables para realizar la investigacin. Una vez
que ha sido demostrado los resultados de esta relacin tendrn amplia
generalizacin.
d. TERICA
Este proyecto por corresponder a las ciencias bsicas, requiere de
justificacin terica. Este proyecto permitir ampliar el marco terico de los
elementos de construccin de un software de base, nuevos enunciados
podrn demostrarse.
e. TCNICA Y CIENTIFICAS
Para ejecutar la presente investigacin, se har uso de las tecnologas que
a continuacin se indican:
Lenguajes de Programacin Imperativos
Lenguajes de Programacin Declarativos
Lenguajes de Programacin Orientados a objetos
Teora de Lenguajes de Programacin
13
1.3 MARCO TEORICO
1.3.1 HIPTESIS
Si se toma en cuenta los Lenguajes de Programacin y se les compara de
acuerdo al tipo de instruccin con el que son diseados, habr una mayor
argumento de discernimiento a cual elegir para la construccin de
software
Operacionalizacin
Variable Independiente: Variable V
Variable W
Variables Dependientes:Variable Z
Para demostrar esta hiptesis, la operacionalizamos, obtenindose las
variables y los indicadores que a continuacin se indican:
Variable V= Lenguajes de Programacin
Indicadores:
Antecedentes v1
Conceptos v2
Caractersticas v3
Clasificacin v4
Lenguajes de Programacin imperativos v5
Lenguajes de Programacin Declarativos v6
Lenguajes de Programacin Orientados a Objetos v7
Variable W= Teora de Lenguajes
Indicadores:
Antecedentes w1
Conceptos w2
Principios de diseo de los lenguajes w3
Sintaxis w4
Semntica Bsica w5
Tipos de datos w6
14
Expresiones y enunciados w7
Procedimientos y ambientes w8
Tipos de datos abstractos y mdulo w9
Variable Z = Mejor Software
Indicadores:
Antecedentes z1
Por cumplimiento de Principios de diseo z2
de los lenguajes
Contrastacin de Resultados z3
15
MARCO TEORICO
CAPITULO II
LENGUAJES DE PROGRAMACIN
2.1 ANTECEDENTES DE LOS LENGUAJES DE PROGRAMACIN
Durante el florecimiento griego de las Matemticas, se tuvo el concepto de
algoritmo, que es el antecedente de los Lenguajes de Programacin, como
una secuencia de pasos lgicos para resolver un problema.
Las primeras computadoras fueron construidas en el ao 1940 por John
Von Neumann.
A principios de los aos 50, aparecen las computadoras digitales de uso
general. Los primeros programas fueron escritos en cdigos de mquina.
Originndose el lenguaje ASSEMBLER, que es muy dependiente de la
mquina, conocido como un Lenguaje de bajo nivel..
Entre 1954 y 1957 fue desarrollado el FORTRAN por un equipo de IBM,
con uso cientfico. La supervivencia del Fortran se debe, parcialmente, a
que los compiladores son muy eficientes, y producen cdigo muy rpido.
Entre sus caractersticas tenemos la implementacin de los siguientes
conceptos: Arreglo o matriz, if ramificado.
Entre 1959 y 1960 aparece el COBOL, que fue desarrollado por el
Departamento de Defensa de Estados Unidos, tuvo un uso comercial:
Bancos, Empresas. En Cobol resulta difcil de programar los algoritmos
complejos.
Las caractersticas en las que Cobol fue pionero son: uso de estructura de
registro, la separacin de las estructuras de datos de la seccin de
ejecucin.
En 1960, se crea el Lenguaje ALGOL60, con el objetivo de proporcionar un
lenguaje para la descripcin de los algoritmos. La mayora de los lenguajes
imperativos actuales son derivados de Algol: Pascal, C y Ada.
Algol60 introdujo conceptos como: bloques de inicio y fin, declaraciones de
tipo para las variables, recursin y paso de parmetros por valor.
16
Al mismo tiempo que se creaban estos 3 lenguajes se estaban
desarrollando otros lenguajes con base en el concepto matemtico de
Funcin. Dos ejemplos importantes son LISP y APL.
A fines de los aos 50 se disea el Lisp por John McCarthy, introdujo el
concepto recoleccin de basura, es decir recuperacin automtica de la
memoria no utilizada, que es muy diferente a la arquitectura de Von
Neumann, por lo que se desarroll una mquina para ejecutar programas
LISP.
En los aos 60 se produce una explosin de lenguajes de programacin:
ALGOL, BASIC, CLIP, MATHLAB, PL/1, UNICODE.etc.
El lenguaje Basic, diseado en 1964, fue creado con el objetivo de ser un
lenguaje simple para los nuevos sistemas de tiempo compartido.
En 1971 se cre el PASCAL, como un lenguaje pequeo, simple,
estructurado que se pretenda utilizar en la enseanza de la
programacin.
A principios de 1972, se desarroll el PROLOG, como un ejemplo de la
programacin lgica.
En 1972, Dennins Ritchie dise en los laboratorios Bell, el lenguaje C. el
xito de C se debe en parte a la popularidad del sistema operativo Unix.
En los aos 80 se desarroll el ADA, sigue en uso, pues es un lenguaje
importante e influyente debido a su cuidadoso diseo.
A partir de 1980 se desarroll el C++ en los laboratorios Bell. Se le han
agregado una enorme cantidad de Bibliotecas, ha sido transportado
virtualmente a todas las plataformas. Se ha convertido en un lenguaje muy
grande, difcil de implementar.
En 1995 apareci JAVA, lenguaje orientado a objetos, para aplicaciones de
internet y de redes. Tiene la ventaja de ser relativamente simple,
limpiamente diseado y provisto de una gran biblioteca de herramientas
para ventanas.
En los aos 90 aparece el lenguaje funcional HASKELL.
La tendencia ser a que los lenguajes de programacin deben ser
principalmente declarativos y no imperativos.
Es muy importante para el xito de un Lenguaje de programacin la
necesidad de una biblioteca, escrita de manera independiente al sistema
bien integrada en el lenguaje mismo. Java sin el API (conjunto de
bibliotecas) hubiera sido simplemente otro lenguaje.
17
C++ tambin tiene una biblioteca con herramientas, aunque no los
sistemas de ventanas y de redes de JAVA.
2.2 DEFINICIN DE LENGUAJE DE PROGRAMACIN
Es un sistema notacional para describir computaciones en una forma
legible tanto para la mquina como para el ser humano.
Computacin: se define usando el concepto de mquina de Turing. (tiene
variables enteras y aritmticas, y ejecuta enunciados en forma secuencial,
incluyendo enunciados de asignacin, seleccin (if) o lazo (while))
La computacin incluye todo tipo de operaciones de computadora
Un lenguaje de programacin es un idioma artificial diseado para
expresar computaciones que pueden ser llevadas a cabo por mquinas
como las computadoras. Pueden usarse para crear programas que
controlen el comportamiento fsico y lgico de una mquina, para
expresar algoritmos con precisin, o como modo de comunicacin humana.
Est formado por un conjunto de smbolos y reglas sintcticas y
semnticas que definen su estructura y el significado de sus elementos y
expresiones. Al proceso por el cual se escribe, se prueba, se depura, se
compila y se mantiene el cdigo fuente de un programa informtico se le
llama programacin.
Un programa se escribe en un lenguaje de programacin y las operaciones
que conducen a expresar un algoritmo en forma de programa se llaman
programacin o cdigo fuente.
En la realidad la computadora no entiende directamente los lenguajes de
programacin sino que se requiere un programa que traduzca el cdigo
fuente a otro lenguaje que s entiende la mquina directamente, pero muy
complejo para las personas; este lenguaje se conoce como lenguaje
mquina y el cdigo correspondiente cdigo mquina. Los programas que
traducen el cdigo fuente escrito en un lenguaje de programacin, tal como
C++, a cdigo mquina se denominan traductores.
Un traductor puede ser: Un intrprete, que se encarga de ejecutar un
programa directamente como Basic o un compilador que transforma un
programa escrito en otro para su ejecucin: C, Ada, Java
18
Figura 2.1 Diagrama que muestra la transformacin de un Programa
Fuente a un Programa Ejecutable. Fuente: Autor
La definicin del lenguaje se puede dividir en 2 partes:
Sintaxis (estructura)
Semntica (significado)
Sintaxis:
Ejemplo:
<enunciado if> ::= if (<expresin>) <enunciado> [else <enunciado>]
Semntica:
Es ms difcil de describir con precisin.
Ejemplo:
Un enunciado if es ejecutado, primero, evaluando su expresin, la misma
que debe tener tipo aritmtico o apuntador, incluyendo todos los efectos
colaterales, y si se compara diferente de 0, el enunciado que sigue a la
expresin es ejecutada. Si existe una parte else, y la expresin es 0, el
enunciado que sigue al else es ejecutado.
19
Los lenguajes de programacin constan de:
Un conjunto finito de smbolos, a partir del cual se define el lxico o
vocabulario del lenguaje.
Un conjunto finito de reglas, la gramtica del lenguaje, para la
construccin de las sentencias correctas del lenguaje. (Sintaxis).
Semntica, que asocia un significado (la accin que debe llevarse a
cabo) a cada posible construccin del lenguaje.
2.3 ABSTRACCIONES EN LOS LENGUAJES DE PROGRAMACIN
Las abstracciones de los lenguajes de programacin se agrupan en 2
clases generales:
Abstraccin de datos: Bsicas, estructuradas, unitarias
Abstraccin de control: Bsicas, estructuradas, unitarias
8
Abstracciones:
Simple Structured Unit
Data int,
char
class,
struct
file,
package,
API,
ADT
Control goto,
=
if { }
else { },
while { },
procedure
file,
package,
API,
ADT
Figura 2.2.- Muestra abstracciones bsicas, estructuradas y unitarias de
Datos y de Control. Fuente: Autor
2.4 PARADIGMAS DE LENGUAJES DE PROGRAMACIN
Los paradigmas de Lenguajes ms conocidos son:
1.- PARADIGMA IMPERATIVO
Lenguaje tradicional y de ejecucin secuencial. Caracterizado por uso de
variables, asignacin, y lazos. Utilizan el modelo de Von Neumann.
20
Algunos ejemplos de lenguajes imperativos son: BASIC, C, C++, Java,
Clipper, Dbase, Pascal, C# y Perl.
2.- PARADIGMA DECLARATIVO
Se les conoce como lenguajes declarativos en ciencias computacionales
aquellos lenguajes de programacin en los cuales se le indica a la
computadora que es lo que se desea obtener o que es lo que se est
buscando, por ejemplo: Obtener los nombres de todos los empleados que
tengan ms de 32 aos. Algunos ejemplos de lenguajes declarativos son el
Datatrieve, SQL y las expresiones regulares.
El Structured Query Language (Lenguaje Estructurado de Consultas). Es
un lenguaje declarativo que ana caractersticas del lgebra y el Clculo
Relacional que nos permite lanzar consultas contra una Base de Datos
para recuperar informacin de nuestro inters, almacenada en ella.
Ejemplos de consultas SQL:
SELECT Nombre From Tabl_fich_personales where Edad >=18;
Muestra el Campo "Nombre" de todos los individuos mayores de 18 aos
de la tabla "Tabl_fich_personales"
Los lenguajes declarativos estn basados en la definicin de funciones o
relaciones. No utilizan instrucciones de asignacin (sus variables no
almacenan valores). Son los ms fciles de utilizar (no se requieren
conocimientos especficos de informtica), estn muy prximos al hombre.
Se suelen denominar tambin lenguajes de rdenes, ya que los programas
estn formados por sentencias que ordenan qu es lo que se quiere
hacer, no teniendo el programador que indicar a la computadora el
proceso detallado (el algoritmo) de cmo hacerlo.
En este grupo se incluyen ciertos lenguajes especializados en funciones
tales como recuperacin de la informacin en bases de datos (NATURAL e
IMS), anlisis de circuitos electrnicos (SPICE), y realizacin de clculos
estadsticos (BMDP, SPSS, SAS, etc.).
Se dividen en lenguajes funcionales y lgicos.
21
2.1.- PARADIGMA FUNCIONAL
No tienen ningn control secuencial; toda la accin es a travs de la
evaluacin de una funcin, en particular recursin. Se basa en la nocin
abstracta de una funcin.
Los lenguajes funcionales son un tipo de lenguajes declarativos, en los que
los programas estn formados por una serie de definiciones de funciones.
Ejemplos de estos lenguajes son el LISP y el SCHEME. Se suelen aplicar
a problemas de Inteligencia Artificial.
2.2.- PARADIGMA LGICO
Las aserciones son los datos bsicos; la inferencia lgica es el control
bsico. Ninguna operacin secuencial. Se basa en la lgica simblica.
Los lenguajes lgicos son el otro tipo de lenguajes declarativos, y en ellos
los programas estn formados por una serie de definiciones de predicados.
Tambin se les denomina lenguajes de programacin lgica, y el mayor
exponente es el lenguaje PROLOG. Se aplican sobre todo en la resolucin
de problemas de Inteligencia Artificial.
2.3.- PARADIGMA ALGEBRAICO
Accesan a Base de Datos relacionales. Manejan el clculo y el Algebra
Relacional. Permiten a base de consultas accesar a grandes volmenes de
informacin. Ejemplo: SQL 2005, ORACLE, DB2
3.- PARADIGMA DE LA ORIENTACIN A OBJETOS
Utilizan cdigo reutilizable, extensin del paradigma imperativo: java, C++
La programacin orientada a objetos, tal vez el paradigma de
programacin ms utilizado en el mundo del desarrollo de software en el
siglo XXI.
Al contrario que la programacin procedimental que enfatiza en los
algoritmos, la POO enfatiza en los datos.
La idea fundamental de los lenguajes orientados a objetos es combinar en
una nica unidad o mdulo, tanto los datos como las funciones que operan
sobre esos datos. Tal unidad se llama un objeto.
No se puede acceder a los datos directamente, sino a travs de los
mtodos. Los datos son ocultos, de modo que estn protegidos de
alteraciones accidentales. Los datos y las funciones se dice que estn
encapsulados en una nica entidad. El encapsulamiento de datos y la
22
ocultacin de los datos son trminos clave en la descripcin de lenguajes
orientados a objetos.
Existen diversas caractersticas ligadas a la orientacin a objetos. Todas
las propiedades que se suelen considerar, no son exclusivas de este
paradigma, ya que pueden existir en otros paradigmas, pero en su
conjunto definen claramente los lenguajes orientados a objetos. Estas
propiedades son:
Abstraccin (tipos abstractos de datos y clases).
Encapsulado de datos.
Ocultacin de datos.
Herencia.
Polimorfismo.
C++ soporta todas las caractersticas anteriores que definen la orientacin
a objetos, C++ no es un lenguaje orientado a objetos puro. C++ soporta
orientacin a objetos pero es compatible con C y permite que programas
C++ se escriban sin utilizar caractersticas orientadas a objetos.
Abstraccin
El trmino abstraccin que se suele utilizar en programacin se refiere al
hecho de diferenciar entre las propiedades externas de una entidad y los
detalles de la composicin interna de dicha entidad.
Mediante la abstraccin se disean y fabrican estos sistemas complejos en
primer lugar y, posteriormente, los componentes ms pequeos de los
cuales estn compuestos.
La abstraccin posee diversos grados de complejidad que se denominan
niveles de abstraccin que ayudan a estructurar la complejidad intrnseca
que poseen los sistemas del mundo real.
Aplicando la abstraccin se es capaz de construir, analizar y gestionar
sistemas de computadoras complejos y grandes que no se podran disear
si se tratara de modelar a un nivel detallado.
El primer concepto en el mundo de la orientacin a objetos naci con los
tipos abstractos de datos (TAD). Un tipo abstracto de datos describe no
slo los atributos de un objeto, sino tambin su comportamiento (las
operaciones). Esto puede incluir tambin una descripcin de los estados
que puede alcanzar un objeto.
Diferentes modelos de abstraccin del trmino coche (carro).
23
Un coche (carro) es la combinacin (o composicin) de diferentes partes,
tales como motor, carrocera, cuatro ruedas, cinco puertas, etc.
Un coche (carro) es un concepto comn para diferentes tipos de coches.
Pueden clasificarse por el nombre del fabricante (Audi, BMW, SEAT,
Toyota, Chrisler...), por su categora (turismo, deportivo, todoterreno...), por
el carburante que utilizan (gasolina, gasoil, gas, hbrido).
La abstraccin coche se utilizar siempre que la marca, la categora o el
carburante no sean significativos. As, un carro (coche) se utilizar para
transportar personas o ir de Lima a Caete.
Encapsulacin y ocultacin de datos
El encapsulado o encapsulacin de datos es el proceso de agrupar datos y
operaciones relacionadas bajo la misma unidad de programacin.
En el caso de los objetos que poseen las mismas caractersticas y
comportamiento se agrupan en clases.
El diseo de un programa orientado a objetos contiene, al menos, los
siguientes pasos:
1. Identificar los objetos del sistema.
2. Agrupar en clases a todos objetos que tengan caractersticas y
comportamiento comunes.
3. Identificar los datos y operaciones de cada una de las clases.
4. Identificar las relaciones que pueden existir entre las clases.
En general, una clase define qu datos se utilizan para representar un
objeto y las operaciones que se pueden ejecutar sobre esos datos.
En el sentido estricto de programacin, una clase es un tipo de datos.
Diferentes variables se pueden crear de este tipo. En programacin
orientada a objetos, stas se llaman instancias. Las instancias son, por
consiguiente, la realizacin de los objetos descritos en una clase.
El diseo de clases fiables y tiles puede ser una tarea difcil.
Afortunadamente, los lenguajes POO facilitan la tarea ya que incorporan
clases existentes en su propia programacin.
Objetos
Un objeto es algo que se visualiza, se utiliza y juega un rol o papel. Un
carro puede ser ensamblado de partes tales como un motor, una
carrocera, unas puertas o puede ser descrito utilizando propiedades tales
como su velocidad, su kilometraje o su fabricante.
24
Un objeto no necesariamente ha de realizar algo concreto o tangible.
Puede ser totalmente abstracto y tambin puede describir un proceso. Por
ejemplo, un partido de baloncesto o de ajedrez puede ser descrito como un
objeto. Los atributos de este objeto pueden ser los jugadores, el
entrenador, la puntuacin y el tiempo transcurrido de partido.
Un objeto se puede definir desde el punto de vista conceptual como una
entidad individual de un sistema y que se caracteriza por un estado y un
comportamiento. Desde el punto de vista de implementacin un objeto es
una entidad que posee un conjunto de datos y un conjunto de operaciones
(funciones o mtodos).
Clases
En POO los objetos son miembros de clases. En esencia, una clase es un
tipo de datos que contiene datos y funciones.
Una clase es, por consiguiente, una descripcin de un nmero de objetos
similares. El alumno Prez, Garca o Quispe son miembros u objetos de la
clase Alumnos.
Una clase se representa en UML mediante un rectngulo que contiene en
una banda con el nombre de la clase y opcionalmente otras dos bandas
con el nombre de sus atributos y de sus operaciones o mtodos
Generalizacin y especializacin: herencia
La generalizacin es la propiedad que permite compartir informacin entre
dos entidades evitando la redundancia. En el comportamiento de objetos
existen con frecuencia propiedades que son comunes en diferentes objetos
y esta propiedad se denomina generalizacin.
Por ejemplo, mquinas lavadoras, frigorficos, hornos de microondas,
tostadoras, lavavajillas, etc., son todos electrodomsticos (aparatos del
hogar). En el mundo de la orientacin a objetos, cada uno de estos
aparatos es una subclase de la clase Electrodomstico y a su vez
Electrodomstico es una superclase de todas las otras clases (mquinas,
lavadoras, frigorficos, hornos de microondas, tostadoras, lavavajillas,...). El
proceso inverso de la generalizacin por el cual se definen nuevas clases a
partir de otras ya existentes se denomina especializacin.
En orientacin a objetos, el mecanismo que implementa la propiedad de
generalizacin se denomina herencia. La herencia permite definir nuevas
clases a partir de otras clases ya existentes, de modo que presentan las
25
mismas caractersticas y comportamiento de stas, as como otras
adicionales.
El principio de la divisin o clasificacin es que cada subclase comparte
caractersticas comunes con la clase de la que procede o se deriva. Los
carros, motos, camiones y buses tiene ruedas, motores y carroceras; son
las caractersticas que definen a un vehculo. Adems de las
caractersticas comunes con los otros miembros de la clase, cada subclase
tiene sus propias caractersticas. Por ejemplo los camiones tienen una
cabina independiente de la caja que transporta la carga; los buses tienen
un gran nmero de asientos independientes para los viajeros que ha de
transportar, etc.
En C++ la clase original se denomina clase base y las clases que se
derivan de ella se denominan clases derivadas y siempre son una
especializacin de su clase base. A la inversa, la clase base es la
generalizacin de la clase derivada.
9
ARCHIVO
Nombre
Tamao
Fecha
Copia()
Borra()
Renombra()
DOCUMENTO
Formato
Exhibe()
Imprime()
PROGRAMA
Sistema Operativo
Ejecuta()
Figura 2.3.- Ejemplo de una clase Base y sus clases derivadas. Fuente:
Autor
Reusabilidad
Una vez que una clase ha sido escrita, creada y depurada, se puede
distribuir a otros programadores para utilizarla en sus propios programas.
Esta propiedad se llama reusabilidad.
En C++, el concepto de herencia proporciona una extensin o ampliacin
al concepto de reusabilidad. Un programador puede considerar una clase
existente y sin modificarla, aadir competencias y propiedades adicionales
a ella. Esto se consigue derivando una nueva clase de una ya existente. La
26
nueva clase heredar las caractersticas de la clase antigua, pero es libre
de aadir nuevas caractersticas propias.
Polimorfismo
Polimorfismo es la propiedad de que un operador o una funcin acten de
modo diferente en funcin del objeto sobre el que se aplican. En la
prctica, el polimorfismo significa la capacidad de una operacin de ser
interpretada slo por el propio objeto que lo invoca.
La propiedad de polimorfismo es aquella en que una operacin tiene el
mismo nombre en diferentes clases, pero se ejecuta de diferentes formas
en cada clase. As, por ejemplo, la operacin de abrir se puede dar en
diferentes clases: abrir un archivo, abrir una cuenta corriente en un banco,
abrir un libro, etc. En cada caso se ejecuta una operacin diferente aunque
tiene el mismo nombre en todos ellos abrir.
Otro ejemplo a considerar y relativo al operador + aplicado a nmeros
enteros o racionales o matrices, en un caso la suma e una operacin
simple, mientras que en el caso de los nmeros racionales, ser necesario
seguir un mtodo especfico para obtener un resultado que tambin ser
un nmero racional, lo cual tambin sucede con la suma de matrices.
A la +, se le permite la posibilidad de operar sobre nuevos tipos de datos,
se dice entonces que el operador est sobrecargado. La sobrecarga es un
tipo de polimorfismo.
27
CAPITULO III
TEORA DE LENGUAJES
3.1 ANTECEDENTES DE TEORA DE LENGUAJES
Se puede lograr uniformidad del diseo, cuando el lenguaje es diseado
por un solo individuo o pocos individuos. Ejemplo: Pascal, C, C++, APL,
LISP. Tambin han tenido xito los lenguajes diseados por comits:
COBOL, ADA, ALGOL.
En la mayora de los lenguajes exitosos, las metas particulares de diseo
se tenan a la vista durante el proceso de diseo:
FORTRAN: eficiencia de la ejecucin
COBOL: legibilidad parecida al ingls
ALGOL60: Lenguaje estructurado en bloques para la descripcin de
los algoritmos
PASCAL: Lenguaje instruccional
C++: Un mayor grado de abstraccin
3.2 HISTORIA Y CRITERIOS DE DISEO
Al inicio de los lenguajes de programacin, el criterio de diseo primordial
era: eficiencia en la ejecucin.
FORTRAN fue diseado para que se pareciera lo ms posible al cdigo de
mquina que necesitaba ser generado. La capacidad de escritura qued
relegada.
COBOL intent mejorar la legibilidad, pero hizo que los programas sean
demasiado largos.
Sin embargo, la generalidad puede incrementar la complejidad, porque es
ms difcil de comprender.
En los aos 70 y principios de los 80 se lleg a un mayor nfasis en la
simplicidad y en la abstraccin, con: PASCAL, C, MODULA-2, ADA.
El desarrollo de mayor importancia en los ltimos 15 aos ha sido el xito
prctico de los lenguajes O-O Smalltalk, C++ y JAVA.
28
Las metas de diseo de mayor xito han sido la correspondencia de los
mecanismos de abstraccin con las necesidades de las tareas de
programacin del mundo real, el uso de bibliotecas, tcnicas orientadas a
objetos para incrementar la flexiblidad y reutilizacin de cdigo.
3.3 PRINCIPIOS DE DISEO DE LOS LENGUAJES
El diseo de los lenguajes es difcil, y el xito es difcil de predecir:
Ejemplo: Pascal fue un xito, Modula-2 un fracaso.
Algol60 un xito, Algol68 un fracaso.
Lenguaje FORTRAN un xito, PL/I un fracaso.
Sin embargo, hubo algunos objetivos bsicos o principios que han sido
importantes a travs de los aos, y esto puede contribuir al xito.
3.3.1 EFICIENCIA
En primer lugar el diseo del lenguaje debe ser tal que un traductor pueda
generar un cdigo ejecutable eficiente.
Un segundo tipo de eficiencia es la eficiencia de traduccin.
La capacidad de implementacin o la eficiencia con la que se puede
escribir un traductor.
Otra vertiente de la eficiencia es la eficiencia de la programacin. Lo
conciso de la sintaxis y evitar detalles innecesarios como las
declaraciones de variable tambin se consideran importantes en este tipo
de eficiencia. (LISP, PROLOG), pero esto compromete otros principios
como la legibilidad, eficiencia de ejecucin y la confiabilidad.
La eficiencia con la cual se puede crear software depende de la legibilidad
y de la capacidad de darle mantenimiento.
3.3.2 REGULARIDAD
Expresa lo bien que estn integradas las caractersticas de un lenguaje.
Se divide en 3 conceptos:
Generalidad
Ortogonalidad
Uniformidad
29
GENERALIDAD
Un lenguaje tiene generalidad cuando elimina casos especiales en la
disponibilidad y uso de los constructores.
Ejemplo: en C, no es posible comparar directamente 2 estructuras o
arreglos utilizando el operador de igualdad == sino que deben ser
comparados elemento por elemento, por lo que el operador de igualdad
carece de generalidad.
ORTOGONALIDAD
Significa que los constructores del lenguaje se pueden combinar en
cualquier forma significativa y que la interaccin de los constructores no
deben generar comportamientos inesperados.
Ejemplo: de carencia de ortogonalidad:
En C y C++ los valores de todos los tipos de datos, excepto los tipos de
arreglos, pueden ser devueltos de una funcin.
UNIFORMIDAD
Significa que cosas similares deben verse de manera similar y tener
significados similares y a la inversa.
Ejemplo: de no uniformidad:
En C++ es necesario, despus de la definicin de clase, pero est
prohibido despus de una definicin de funcin:
Class A { }; // se necesita
Int f ( ) { } // no se necesita ;
Apariencia similar y resultados diferentes:
Ejemplo: los operadores & y &&
3.3.3 PRINCIPIOS ADICIONALES SOBRE DISEO DE LOS LENGUAJES
Todo debera hacerse tan simple como sea posible, pero no ms simple
Einstein
3.3.3.1 SIMPLICIDAD
Fue una de las metas principales de diseo de Pascal, tambin es una
caracterstica de C.
30
Tampoco tener pocos constructores bsicos es simplicidad: LISP y
PROLOG slo tienen unos cuantos constructores bsicos pero dependen
de un ambiente de ejecucin complejo.
C se puede considera como el de mayor xito hacia la simplicidad, pero
tiene mal manejo de cadenas.
3.3.3.2 EXPRESIVIDAD
La expresividad es la facilidad con la cual un lenguaje puede expresar
procesos y estructuras complejas.
Ejemplo: los lenguajes orientados a objetos, pueden mejorar la capacidad
de los programadores para la escritura de un cdigo que imita sus diseos.
3.3.3.3 EXTENSIBILIDAD
Es el principio que indica que debera existir algn mecanismo general
para que el usuario pueda agregar caractersticas a un lenguaje.
Ejemplo: definir nuevos tipos de datos, agregar nuevas funciones de una
biblioteca. Estas caractersticas las tiene sobretodo el Lenguaje Java y
C++.
3.4 SINTAXIS
La sintaxis es la estructura de un lenguaje, por ejemplo: la forma que cada
programa o el archivo de cdigo original deben tomar.
En los aos 50 Noam Chomsky desarroll la idea de gramticas libres de
contexto, y John Backus, y Peter Naur, desarrollaron un sistema notacional
para la descripcin de estas gramticas y se utiliz por primera vez para
describir la sintaxis del Algol60.
La sintaxis incluye la definicin de las palabras, que pueden llamar su
estructura lxica.
31
S|stema para procesam|ento de un |engua[e
LsLrucLura del programa fuenLe
programa fuenLe
programa ob[eLo en lengua[e ensamblador
Cdlgo de mqulnarelocallzable
blblloLeca
archlvos ob[eLos relocallzables
Cdlgo de mqulna absoluLo
preprocesador
Compllador
Lnsamblador
LdlLor de carga y enlace
2
Figura 3.1.- Sistema para procesamiento de un lenguaje. Fuente: Internet
3.4.1 INTRODUCCIN A LA COMPILACIN
Un compilador es un programa que lee un programa escrito en un
lenguaje de programacin y lo traduce a un programa equivalente en otro
lenguaje, el lenguaje objeto
Aho
La escritura de compiladores comprende:
Lenguajes de programacin
La arquitectura de computadores
La teora de lenguajes
Los algoritmos
La ingeniera del software
32
Anatom|a de un comp||ador
Analizador Sintctico (Parser)
Generador de Cdigo
Optimizador de Cdigo
Analizador Semntico
Analizador Lxico (Scanner)
Parse Tree
Programa (character stream)
Token stream
Intermediate Representation
Optmized Intermediate Representation
Assembly code
A
n

l
i
s
i
s
S

n
t
e
s
i
s
6
Figura 3.2 Muestra la Anatoma de un compilador. Fuente: internet
En la compilacin hay 2 partes: anlisis y sntesis.
La parte de anlisis divide al programa fuente en sus elementos
componentes.
La parte de sntesis construye el programa objeto deseado a partir de la
representacin intermedia.
3.4.1.1 ANALIZADOR LXICO
Es un anlisis a nivel de caracteres, su misin es reconocer los
componentes lxicos o tokens, enviando al analizador sintctico los tokens
y sus atributos.
Los tokens pueden ser definidos usando tanto reglas de gramtica o
expresiones regulares
Qu hacemos en procesamiento de lenguaje natural?
Primero tokenizamos
Ejemplo:
Holacomoestantodos
Se convierte en:
Hola como estn todos
33
Figura 3.3 Ejemplos de tokens. Fuente Autor
Los tokens se clasifican en varias clases:
Palabras Reservadas
Literales o constantes
Smbolos especiales
Identificadores
En algunos lenguajes los identificadores tienen un tamao mximo fijo,
pero en los ms recientes tienen una longitud arbitraria.
Ejemplo:
posicin := inicial + velocidad * 60
id1 := id2 + id3 * 60
Se agrupan en los componentes lxicos:
o El identificador posicin
o El smbolo de asignacin :=
o El identificador inicial
o El signo de suma
o El identificador velocidad
o El signo de multiplicacin
o El nmero 60
Los Analizadores Lxicos deben.
Particionar el texto del programa de entrada en una subsecuencia
de caracteres correspondientes a tokens
asignarle los atributos correspondientes a los tokens
eliminar espacios en blanco y comentarios
33
Figura 3.3 Ejemplos de tokens. Fuente Autor
Los tokens se clasifican en varias clases:
Palabras Reservadas
Literales o constantes
Smbolos especiales
Identificadores
En algunos lenguajes los identificadores tienen un tamao mximo fijo,
pero en los ms recientes tienen una longitud arbitraria.
Ejemplo:
posicin := inicial + velocidad * 60
id1 := id2 + id3 * 60
Se agrupan en los componentes lxicos:
o El identificador posicin
o El smbolo de asignacin :=
o El identificador inicial
o El signo de suma
o El identificador velocidad
o El signo de multiplicacin
o El nmero 60
Los Analizadores Lxicos deben.
Particionar el texto del programa de entrada en una subsecuencia
de caracteres correspondientes a tokens
asignarle los atributos correspondientes a los tokens
eliminar espacios en blanco y comentarios
33
Figura 3.3 Ejemplos de tokens. Fuente Autor
Los tokens se clasifican en varias clases:
Palabras Reservadas
Literales o constantes
Smbolos especiales
Identificadores
En algunos lenguajes los identificadores tienen un tamao mximo fijo,
pero en los ms recientes tienen una longitud arbitraria.
Ejemplo:
posicin := inicial + velocidad * 60
id1 := id2 + id3 * 60
Se agrupan en los componentes lxicos:
o El identificador posicin
o El smbolo de asignacin :=
o El identificador inicial
o El signo de suma
o El identificador velocidad
o El signo de multiplicacin
o El nmero 60
Los Analizadores Lxicos deben.
Particionar el texto del programa de entrada en una subsecuencia
de caracteres correspondientes a tokens
asignarle los atributos correspondientes a los tokens
eliminar espacios en blanco y comentarios
34
3.4.1.2 ANALIZADOR SINTCTICO
Es un anlisis jerrquico. Implica agrupar los componentes lxicos del
programa fuente en frases gramaticales que el compilador utiliza para
sintetizar la salida.
Generalmente las frases gramaticales del programa fuente se representan
mediante un rbol.
La estructura jerrquica de un programa normalmente se expresa
utilizando reglas recursivas.
Arbol slnLcLlco para:
poslclon := lnlclal + velocldad * 60
:=
pos|c|n +
|n|c|a| *
ve|oc|dad 60
61
Figura 3.4 Muestra el rbol sintctico para una expresin. Fuente Autor.
Arbol slnLcLlco para:
poslclon := lnlclal + velocldad * 60
:=
|d1 +
|d2 *
|d3 60
62
Figura 3.5 Muestra el rbol sintctico para una expresin con nombre de
identificador. Fuente Autor.
35
LnLrada y Sallda de un arser
-
( )
123.3 23.6
+
minus_op
left_paren_op
num(123.3)
plus_op
num(23.6)
right_paren_op
Token Stream Arbol de Parseo
Entrada: - (123.3 + 23.6)
A
n
a
l
i
z
a
d
o
r

S
i
n
t

c
t
i
c
o
(
P
a
r
s
e
r
)
64
Figura 3.6 Muestra un ejemplo de entrada y salida de un Parser. Fuente
Internet
3.4.1.3 ANALISIS SEMANTICO
Revisa el programa fuente para tratar de encontrar errores semnticos.
Semntica es el conjunto de reglas que especifican el significado de
cualquier sentencia sintticamente correcta y escrita en un determinado
lenguaje.
Un componente importante del anlisis semntico es la verificacin de
tipos.
L| an||s|s semnt|co |nserta una
convers|n de entero a rea|
:=
pos|c|n +
|n|c|a| *
ve|oc|dad entarea|
60
66
Figura 3.7 El anlisis semntico inserta una conversin de entero a real.
Fuente Autor.
36
3.4.1.4 GENERACIN DE CDIGO INTERMEDIO
Despus de los anlisis sintctico y semntico, algunos compiladores
generan una representacin intermedia explicita del programa fuente.
La representacin intermedia puede tener diversas formas.
Ejemplo: cdigo de 3 direcciones, que es una secuencia de instrucciones,
cada una de las cuales tiene como mximo 3 operandos.
Temp1 := entareal(60)
Temp2 := id3 * temp1
Temp3 := id2 + temp2
id1:= temp3
3.4.1.5 OPTIMADOR DE CDIGO
Trata de mejorar el cdigo intermedio, de modo que resulte un cdigo de
mquina ms rpido de ejecutar.
temp1 := id3 * 60.0
id1 := id2 + temp1
3.4.1.6 GENERACIN DE CDIGO
La fase final de un compilador es la generacin de cdigo objeto, que por
lo general consiste en cdigo de mquina relocalizable o cdigo
ensamblador.
MOVF id3, R2
MULF #60.0, R2
MOVF id2, R1
ADDF R2, R1
MOVF R1, id1
El primero y segundo operando de cada instruccin especifican una fuente
y un destino, respectivamente. La F de cada instruccin indica que las
instrucciones trabajan con nmeros de punto flotante
37
3.5 SEMNTICA BSICA
La especificacin de la semntica de un lenguaje de programacin es una
tarea ms difcil que la especificacin de su sintaxis.
Existen varias formas de especificar la semntica.
1.- Mediante un Manual de referencia de Lenguaje
2.- Mediante un traductor definidor
3.- Mediante una definicin formal
3.5.1 ATRIBUTOS, LIGADURAS Y FUNCIONES SEMNTICAS
IDENTIFICADORES: Se trata de describir las reglas que determinan el
significado de cada uno de los nombres utilizados.
Ejemplo en C:
const int n=5;
int x;
Double f(int n)
{

}
Las declaraciones no son los nicos constructores del lenguaje que
pueden asociar atributos a los nombres.
Ejemplo: x=2;
LIGADURA: Es el proceso de asignacin de atributo a un nombre.
Un atributo se puede clasificar de acuerdo con el tiempo en que se est
calculando y vinculando con un nombre durante el proceso de traduccin/
ejecucin.
Los tiempos de ligadura pueden clasificarse en:
o La ligadura esttica ocurre antes de la ejecucin.
o La ligadura dinmica ocurre durante la ejecucin.
Los tiempos de ligadura pueden depender del traductor. Ejemplo: los
intrpretes, traducen y ejecutan el cdigo en forma simultnea (ligadura
dinmica).
Ejemplo: x = 2, vincula el valor 2 dinmicamente con x cuando el
enunciado de asignacin es ejecutado.
Ejemplo: const int n=2; el valor 2 est vinculado estticamente al nombre n.
38
3.5.2 DECLARACIONES, BLOQUES Y ALCANCE
DECLARACIONES
Ejemplo: la declaracin en C:
int x;
Establece explcitamente el tipo de datos de x utilizando la palabra clave
int.
Ejemplo. De declaracin implcita:
En BASIC, las variables que terminan en % son enteras, las variables que
terminan con $ son cadenas.
BLOQUES
Es una secuencia de declaraciones seguidas por una secuencia de
enunciados, y rodeados de {..}.
Ejemplo:
void p (void)
{ double r,z; /*el bloque de p */
.
{int x, y; /* otro, bloque, anidado */
x=2;
y=0;
x +=1;
}
..
}
Declaraciones locales: son declaraciones asociadas con un bloque
especfico. Ejemplo: r y z son locales en p
Declaraciones no locales: son las declaraciones en bloque que rodean.
Ejemplo: r y z no son locales desde el interior del segundo bloque.
Ejemplo: En C una definicin struct est compuesta de declaraciones de
variables locales en su interior.
Struct A
{ int x; /* local a A*/
double y;
double z;
}
39
ueclaraclones, bloques y alcance
(i) ini x;
(:) void p(void)
() clai y; y
(() .. p
() ] ] p ]
(6) void q (void) x
(y) double z;
(S) . z q
(q) ]] q ]
(io)
(ii) ini w|ioj;
(i:) .. W main
(i) ]
10
Figura 3.8 Ejemplo de declaraciones, bloques y alcance. Muestra el
alcance de cada variable, en cada bloque. Fuente Autor.
ueclaraclones, bloques y alcance
(i) ini x;
(:) void p (void)
() clai x;
(() x= 'a'; ]asigna al clai x ]
() .
(6) ]
(y) main()
(S) x = :; ] asigna al global x ]
(q) .
(io) ]
La declaiacin de x en p iiene piecedencia sobie la
vaiiable global x. el enieio global x no puede sei
accesado desde p
11
Figura 3.9 Muestra como la variable x, tiene definicin local y global. Sin
embargo, en el bloque donde es local, tiene precedencia sobre la variable
global. Fuente Autor.
40
ueclaraclones, bloques y alcance
(i) ini x;
(:) void p (void)
() clai x;
(() x= 'a'; ]asigna al clai x ]
() ::x=(:; ] asigna al global ini x]
(6) ]
(y) main()
(S) x = :; ] asigna al global x ]
(q) .
(io) ]
12
Figura 3.10 En C++ el operador de resolucin de alcance ::(doble 2 puntos)
puede utilizarse para tener acceso a una variable global dentro de la
misma funcin. Fuente Autor.
3.5.3 LA TABLA DE SMBOLOS
La tabla de smbolos es como un diccionario variable; debe darle apoyo a
la insercin, bsqueda y cancelacin de nombres con sus atributos
asociados, representando las vinculaciones en declaraciones.
El mantenimiento de informacin de alcance en un lenguaje con alcance
lxico y estructura de bloques requiere que las declaraciones sean
procesadas en forma de pila.
La tabla de smbolos es un conjunto de nombres, cada uno de los cuales
tiene una pila de declaraciones asociadas con ellos, de manera que la
declaracin en la parte superior de la pila es aquella cuyo alcance
actualmente est activo.
Este proceso conserva la informacin apropiada de alcance.
Estructura de la tabla de smbolos usando alcance esttico
Siempre que la tabla de smbolos sea manejada por un compilador y que
las ligaduras de las declaraciones sean todas estticas.
41
La Labla de slmbolos
(i) ini x;
(:) clai y;
() void p(void)
(() double x;
() ..
(6) ini y|ioj;
(y) ..
(S) ]
(q) ..
(io) ]
(ii) void q (void)
(i:) ini y;
(i) .
(i() ]
(i)
(i6) clai x;
(iy) .
(iS) ]
15
Figura 3.11 Muestra diferentes tipos de variables, locales y globales.
Fuente Autor.
La iabla de simbolos
linea
x
y
p
Double
Local de p
Clai
global
Ini
global
Void
funcin
Nombie
ligaduias
16
Figura 3.12 Muestra la prioridad de las ligaduras en la lnea 5. Fuente
Autor.
42
La Labla de slmbolos
llnea 7
x
y
p
Double
Local de p
Ini aiiay
Local del
bloque
anidado de p
Ini
global
Void
funcin
clai
global
Nombie
ligaduias
17
Figura 3.13 Muestra la prioridad de las ligaduras en la lnea 7. Fuente
Autor
La Labla de slmbolos
llnea 10
x
y
p
Ini
global
Ini
Local de q
Void
funcin
ligaduias
Nombie
Clai
global
q
Void
funcin
20
Figura 3.14 Muestra la prioridad de las ligaduras en la lnea 10. Fuente
Autor
43
La Labla de slmbolos
llnea 13
x
y
p
Ini
global
Ini
Local de q
Void
funcin
ligaduias
Nombie
Clai
global
q
Void
funcin
19
Figura 3.15 Muestra la prioridad de las ligaduras en la lnea 13. Fuente
Autor
La Labla de slmbolos
llnea 14
x
y
p
Ini
global
Void
funcin
ligaduias
Nombie
Clai
global
q
Void
funcin
20
Figura 3.16 Muestra la prioridad de las ligaduras en la lnea 14. Fuente
Autor
44
La Labla de slmbolos
llnea 17
x
y
p
Ini
global
Void
funcin
ligaduias
Nombie
Clai
global
q
Void
funcin
Clai
Local de main
main
ini
funcin
21
Figura 3.17 Muestra la prioridad de las ligaduras en la lnea 17. Fuente
Autor
3.5.4 RESOLUCIN Y SOBRECARGA DE NOMBRES
Hasta dnde un mismo nombre puede utilizarse para referirse a cosas
distintas dentro de un programa?. A primera vista podra conducir a
confusiones y a falta de confiabilidad.
Un objeto polimrfico es aquel que es capaz de tener 2 o ms formas. Es
la capacidad de realizar una misma tarea pero de muchas formas distintas.
Permite usar un nombre para varios propsitos relacionados pero
ligeramente diferentes. Estas seran las ventajas de la sobrecarga de
funciones y de operadores.
3.5.4.1 SOBRECARGA DE FUNCIONES
Es el proceso de definir 2 ms funciones, con el mismo nombre, que
difieren nicamente en el tipo de resultado y en los parmetros.
Mejora la legibilidad de los programas, permitiendo el uso de funciones con
nombres similares para las mismas operaciones, las que difieren slo en el
tipo de datos con los cuales trabajan.
Los tipos de argumentos determinan qu funcin miembro se utilizarn
realmente.
45
3.5.4.2 SOBRECARGA DE OPERADORES
En C++ podemos sumar con el operador + dos enteros, dos reales. Etc.
Ejemplo: 2+4 sin embargo, no son vlidas estas operaciones:
(2 + j4) + (-5-j10)
hola + mundo
2 3 + 6 5
1 0 10 7
1 + 3
6 5
La sobrecarga de operadores es el proceso de asignacin de 2 ms
operaciones al mismo operador, con el fin de que trabaje con diferentes
tipos de objetos. Ejemplo: aadir una cadena a otra y que el compilador
entienda correctamente la operacin o sumar dos nmeros racionales.
En esencia lo que se busca es que los tipos de datos, tales como (String,
Fecha, Complejo. Etc) puedan ser tratados como si fueran tipos de datos
simples.
La sobrecarga de operadores no es automtica, el programador debe
escribir funciones que realicen las operaciones deseadas.
Cuando se sobrecarga un operador, el programa tiene que usarlo de una
manera consistente con el uso normal del mismo.
Para sobrecargar un operador se debe definir qu operacin significa con
relacin a la clase a la que se aplica.
El operador de asignacin es el que se sobrecarga con mayor frecuencia.
Por lo general se utiliza para asignar un objeto a otro objeto de la misma
clase. Si no se define, aun as se permite la asignacin vlida en algunos
casos. (no vlido para objetos con punteros asignados dinmicamente) .
Cuando se sobrecarga un operador para una clase, normalmente se
declarar dentro de la clase como friend, para proporcionarle al operador
el acceso a las estructuras miembro de la clase.
Un operador sobrecargado puede ser una funcin no miembro
(normalmente una funcin friend).
46
Ejemplo:
class vector{double x,y;
// ...
friend vector operator +(vector &v1,vector &v2);
};
vector operator +(vector &v1,vector &v2 )
{return vector( v1.x + v2.x , v1.y + v2.y);
}
Un operador sobrecargado puede ser tambin una funcin miembro.
Ejemplo:
class vector{double x,y;
// ...
vector operator +(vector v);
};
vector vector::operator +(vector v)
{return vector( x + v.x , y + v.y);
}
3.5.4.3 ASIGNACIN, TIEMPO DE VIDA Y EL ENTORNO
Dependiendo del lenguaje, el entorno se puede construir estticamente (en
tiempo de carga), dinmicamente (en tiempo de ejecucin, o una mezcla
de ambos).
Un lenguaje que utiliza un entorno completamente dinmico es LISP.
Los lenguajes que usan ambos: C, C++, JAVA.
No todos los nombres en un programa estn vinculados con localizaciones.
Ejemplo: constantes.
Las declaraciones se utilizan para construir el entorno as como la tabla de
smbolos.
En un lenguaje con estructura de bloques las variables globales se asignan
estticamente.
Las variables locales, sin embargo, se asignan dinmicamente cuando la
ejecucin llega al bloque en cuestin.
47
3.5.4.4 VARIABLES Y CONSTANTES
Variables
Una variable es un objeto cuyo valor almacenado puede cambiar durante
la ejecucin.
Una variable se especifica por sus atributos, que incluyen su nombre, su
localizacin, su valor, tipo de datos, tamao. Etc.
La forma principal en que una variable cambia su valor es a travs del
enunciado de asignacin x = e
En C:
Int X;
&x es un puntero hacia x y * &x es de nuevo x mismo.
La mezcla de referencias y de valores, el uso de & hacen que C sea
vulnerable.
Constantes
Una constante es una identidad del lenguaje que tiene un valor fijo durante
la ejecucin de un programa, se diferencia de la variable en que no tiene
un atributo de localizacin, sino solamente un valor. Esto no quiere decir
que una constante no se almacena en la memoria.
varlables y ConsLanLes
=include <sidio.l>
=include <iime.l>
consi ini a= :; consianies en iiempo de
consi ini b= :y+::; compilacin
] cdigo de C ilegal]
consi ini c = (ini) iime (o); consianie esiaiica ( en iiempo
de caiga)
ini f(ini x)
consi ini d = x + i; consianie dinamica
ieiuin b+c;
]
35
Figura 3.18 Muestra diferentes tipos de constantes. Fuente Autor.
48
3.6 TIPOS DE DATOS
Algoritmos +estructura de datos =programa
Tipos de datos e informacin de tipos
Tipos simples
Constructores de tipos
Conversin de tipos
Un tipo de datos es un conjunto de valores, junto con un conjunto de
operaciones sobre dichos valores y con ciertas propiedades.
La mayora de los lenguajes de programacin incluyen un conjunto de
simples entidades de datos, como enteros, reales y booleanos, as como
mecanismos para construir nuevas entidades de datos a partir de los
anteriores.
JAVA, y ADA tienen como parte de sus estndares, requisitos muy severos
para todas las operaciones aritmticas como un intento de reducir al
mnimo las dependencias de la mquina.
Razones para verificar tipos esttica (en tiempo de traduccin)
1. Eficiencia de ejecucin.- la informacin de tipos estticos permite a los
compiladores asignar memoria con eficiencia y generara cdigo de
mquina que manipula los datos eficientemente.
2.- Eficiencia de traduccin.- un compilador puede utilizar los tipos
estticos a fin de reducir la cantidad de cdigo que necesita compilar.
3.- Capacidad de escritura.- muchos errores estndar de programacin son
detectados rpidamente.
4.- Mejora la seguridad, la confiabilidad y la legibilidad.
5.- mejora el desarrollo de los programas grandes al verificar la
consistencia y correccin de la interfaz.
3.6.1 TIPOS DE DATOS E INFORMACIN DE TIPOS
int x; //C, asigna el tipo de datos int a la variable x
const PI = 3.14159; // PASCAL, asocia de manera implcita un tipo con
un nombre, le da a PI el tipo de datos real.
Todos los errores de tipo se detectan en tiempo de traduccin.
C se considera un lenguaje dbilmente tipificado.
49
Lenguajes sin tipificacin: la verificacin de seguridad se lleva a cabo en
tiempo de ejecucin. Ejemplo: LISP.
Constructores de tipo
Son tipos ms complejos, basndose en los tipos bsicos (int, double,
char).
Ejemplo: ARREGLO
Int a[10]
3.6.2 TIPOS SIMPLES
Tipos enumerados
Son conjuntos cuyos elementos se denominan y se listan de manera
explcita. Ejemplo: en C
enum Color {Red, Green, Blue}
Los valores son tomados como nombres de enteros y automticamente se
les asignan los valores 0, 1. etc.
Los lenguajes de la familia C (C, C++, JAVA) no tienen tipos de subrango.
3.6.3 CONSTRUCTORES DE TIPO
Entre los constructores de tipo tenemos.
Producto cartesiano
Unin
Subconjuntos
Arreglos y funciones
Tipos punteros y recursivos
Arreglos y funciones
En C, C++ y JAVA el conjunto de ndices siempre es un rango de enteros
positivos comenzando en cero. Ejemplo:
const int size = 5;
int x[size]; /* incorrecto en C, correcto en C++
int x[size * size]; /* incorrecto en C, correcto en C++
Cualquier intento de definir dinmicamente el tamao de un arreglo es
incorrecto (C, C++).
Los arreglos de JAVA siempre se asignan dinmicamente y el tamao de
un arreglo puede especificarse en forma totalmente dinmica.
50
Los arreglos multidimensionales tambin son posibles en C, C++ y JAVA.
Ejemplo:
int x[10][20]; /* cdigo C*/
int [] [] x = new int [10] [20]; //cdigo JAVA
En los arreglos multidimensionales en C, C++, el tamao del arreglo no es
parte del mismo, y no es pasado a las funciones.
Si un parmetro es un arreglo multidimensional, entonces el tamao de
todas las dimensiones, a excepcin de la primera, debe especificarse en
la declaracin del parmetro, Ejemplo:
Int array_max (int a [] [20], int size)
Esto no es problema en JAVA, dado que el tamao del arreglo es llevado
dinmicamente con el valor del mismo.
Los lenguajes funcionales no contienen un tipo de arreglo, ya que los
arreglos estn especficamente diseados para la programacin
imperativa.
Punteros
Son variables que contienen una direccin de memoria, la cual puede
corresponder a la direccin de otra variable, de una funcin, de una
estructura o una direccin especfica de la memoria del computador.
Tipo de dato * puntero
Ejemplo:
char * pcadena // puntero a un carcter
int * pentero // puntero a un entero
float *preal // puntero a un real
3.7 EXPRESIONES Y ENUNCIADOS
Figura 3.19 Muestra una alternativa simple. Fuente Autor.
51
3.7.1 INTRODUCCIN
Control es el estudio general de la semntica de rutas de ejecucin a
travs del cdigo: que es ejecutado, cuando, y en qu orden.
Aqu estudiamos cuestiones de control ms localizadas en expresiones y
sentencias, y el manejo de excepciones.
La programacin estructurada condujo a una enorme mejora en la
legibilidad y confiabilidad de los programas.
3.7.2 EXPRESIONES
Las expresiones son ejecutadas por sus valores (pero pueden tener
efectos secundarios), y pueden o no ser secuenciales.
Las expresiones se parecen a las matemticas. Desafortunadamente,
cuando hay efectos colaterales, las expresiones pueden comportarse en
formas muy diferentes a sus contrapartes matemticas.
La semntica de las expresiones con efectos colaterales tiene un
componente de control importante: la forma en la que se evalan estas
expresiones, incluyendo el orden en el cual las subexpresiones se
calculan, puede tener un efecto importante sobre su significado.
Ejemplo:
3 + 4 * 5
Si la evaluacin de una expresin no provoca efectos colaterales, sta
dar el mismo resultado, independientemente del orden en que se evalen
las subexpresiones.
En su forma ms pura, las expresiones no implican cuestiones de control:
las subexpresiones pueden ser evaluadas en orden arbitrario, y el orden
no afecta el resultado. Los programas funcionales tratan de alcanzar este
objetivo para todos los programas.
Desde luego, siempre deben haber unas pocas expresiones que pueden
modificar el proceso de ejecucin/ evaluacin: expresiones if-then-else ,
operadores booleanos corto-circuito, expresiones case/switch.
Si los argumentos de la llamada a p, son evaluados de izquierda a
derecha, el programa imprimir 4. Si los argumentos son evaluados de
derecha a izquierda, el programa imprimir 3. Esto se debe a que una
52
llamada a la funcin f tiene un efecto colateral: modifica el valor de la
variable global x.
3.7.3 EXACTITUD
Una orden de evaluacin para expresiones es estricta si todas las
subexpresiones de una expresin son evaluadas, si realmente ellas son
necesarias para determinar el valor del resultado, no exacto de otra
manera. La aritmtica es casi siempre estricta.
Cada lenguaje tiene al menos unas expresiones no estrictas (?:, **, || en
Java).
3.7.4 LLAMADAS DE FUNCIN
Obedece a reglas de evaluacin parecida a expresiones.
Applicative orden: evala todos los argumentos (de la izquierda a la
derecha?), luego llama al procedimiento.
Orden normal: pasa en las representaciones inevaluadas de los
argumentos. Slo evala cuando es necesario.
La representacin de valor de argumento tambin hace una diferencia
(valor o referencia?)
Pase de parmetros por valor
Las llamadas a funciones siempre se hacen pasando el valor de los
argumentos
Las modificaciones de la copia no afectan el valor original de los
argumentos. Se copia el valor del argumento.
Directivas /*T, T1, T2, T3 son tipos de variables
T F(T1 P1, T2 P2, T3P3) /* F es el nombre de la funcin
declaraciones globales
void main ( )
{
declaraciones locales
..
v=F( A1,A2,A3); /*A1, A2, A3 son argumentos */

}
T F(T1 P1, T2 P2, T3 P3); /* P1, P2, P3 son parametros formales*/
53
{declaraciones locales
.........
return valor
}
Figura 3.20 Muestra un esquema de funcionamiento de una funcin con
pase de parmetros por valor. Fuente Autor.
Pase de parmetros por referencia
Se copian las direcciones de memoria que ocupan las variables. Cualquier
cambio hecho a los parmetros, afecta el argumento
Se transfiere las direcciones de memoria de los argumentos, no el valor.
3.7.5 ENUNCIADOS Y GUARDIAS CONDICIONALES
Las sentencias son ejecutadas nicamente por sus efectos secundarios, y
ellas deben ser secuenciales. (if, while, do, for, switch)
La forma ms tpica del control estructurado es la ejecucin de un grupo de
enunciados slo bajo ciertas condiciones. Esto incluye llevar a cabo una
prueba booleana o lgica antes de entrar a una secuencia de enunciados.
El enunciado if es la forma ms comn de este tipo de construcciones.
Enunciados if
enunciado if -> (expresin) enunciado [else enunciado]
Ejemplo:
If (x > 0) y=1/x;
else
{x = 2;
y= 1/z;
}
Ejemplo: En C una sentencia else siempre se refiere al if precedente ms
prximo que no tenga ya asociada una sentencia else.
if (x)
If (y) cout<<1; else asociado con If (y)
Else cout<<2;
Otro ejemplo:
if (x) {
If (y) cout<<1; } else asociado con If (x)
else cout<<2;
54
Esta ambigedad se conoce como el problema del else ambiguo, pues la
sintaxis no nos indica si un else, despus de 2 enunciados if, debe
asociarse con el primero o el segundo if.
C resuelve el problemas mediante la siguiente regla: el else se asociar
con el if anterior ms cercano que no tenga ya una parte else.
Esto viola la legibilidad del diseo.
Enunciados case y switch
Estos enunciados son un tipo de condicionales mltiples, donde la
comparacin del case se realiza slo con una letra o nmero.
Ciclos y variaciones sobre while
Las computadoras se inventaron para facilitar y acelerar la tarea de llevar a
cabo operaciones repetitivas.
A menudo, tambin es conveniente salir del ciclo en uno o ms de los
puntos intermedios. Por esta razn C, java incluye 2 opciones: puede
utilizarse un enunciado break dentro de un ciclo para salir por completo
del ciclo; y un enunciado continue que se salta el resto del cuerpo del ciclo
y contina en la siguiente evaluacin de la expresin de control.
Enunciados While
Ejecuta a cabo operaciones repetitivas, especialmente empleando
arreglos.
While (1)
{
If () break;
}
Enunciados For
Tpicamente se emplea el for- loop en situaciones donde deseamos que
haya un ndice en todo un conjunto de valores del primero al ltimo, como
cuando se procesan los elementos de un arreglo:
for (i=0; i < size; i++)
Sum += a[i];
3.7.6 MANEJO DE EXCEPCIONES
Hasta ahora todos los mecanismos de control que hemos revisado han
sido explcitos. Existen situaciones, en donde la transferencia de control es
implcita: la transferencia queda establecida en un punto del programa
distinto al lugar donde toma lugar la transferencia real.
55
Ejemplo: el manejo de excepciones: una excepcin es cualquier evento
inesperado o poco frecuente.
Los casos tpicos de excepciones son los errores en tiempo de ejecucin
(subndices de arreglos fuera de rango o divisin entre cero, falla de
entrada de datos.)
Los principales lenguajes tienen manejo de excepciones (C++, Java, Ada,
ML, Common Lisp).
En C++ y Java los manejadores de excepciones estn asociados con
bloques try catch, que pueden aparecer en cualquier lugar donde puede
haber un enunciado.
3.7.7 EFECTOS SECUNDARIOS
Un efecto secundario es cualquier cambio observable en la memoria,
entrada o salida.
Un programa sin cualquier efecto secundario es intil.
Los efectos secundarios arriesgan el orden de evaluacin:
Class Order
{static int x=1;
Public static int getX()
{return x++; }
Public static void main(String[] args)
{System.out.println (x+getX());}
}
Esto imprime 2, pero el correspondiente programa en C, por lo general
imprimir 3!
La transparencia de referencia limita los efectos secundarios.
56
3.8 PROCEDIMIENTOS Y AMBIENTES
Figura 3.21 Muestra un esquema de procedimientos para parmetros por
valor. Fuente Autor
3.8.1 FUNCIONES Y PROCEDIMIENTOS
Las funciones deben producir un nico valor y no tener efectos colaterales
en tanto que los procedimientos no producen valores y operan con base en
producir efectos colaterales.
Los procedimientos surgieron cuando escaseaba la memoria, como una
forma de dividir un programa en pequeas partes compiladas.
Un procedimiento es un mecanismo en un lenguaje de programacin para
abstraer un grupo de acciones o cuerpo del procedimiento.
Ejemplo:
void swap(float &x, float &y)
{float z;
z=x;
x=y;
y=z;
}
57
3.8.1.1 MECANISMOS DE PASO DE PARMETROS
Las diferentes rdenes de evaluacin de los argumentos pueden tener
efectos colaterales.
Analizaremos los siguientes mecanismos:
Paso por valor
Paso por referencia
PASE DE PARMETROS POR VALOR
Las llamadas a funciones siempre se hacen pasando el valor de los
argumentos.
Las modificaciones de la copia no afectan el valor original de los
argumentos.
Se copia el valor del argumento.
Directivas /*T, T1, T2, T3 son tipos de variables
T F(T1 P1, T2 P2, T3P3) /* F es el nombre de la funcin
declaraciones globales
void main ( )
{
declaraciones locales
..
v=F( A1,A2,A3); /*A1, A2, A3 son argumentos */

}
T F(T1 P1, T2 P2, T3 P3); /* P1, P2, P3 son parmetros formales*/
declaraciones locales
{.........
return valor
}
PASE DE PARMETROS POR REFERENCIA
Con este mecanismo un argumento debe ser en principio una variable con
una direccin asignada. En vez de pasar el valor de la variable, el paso por
referencia pasa la ubicacin de la variable de modo que el parmetro se
convierte en un alias para el argumento, y cualquier cambio que se le haga
a ste lo sufre tambin el argumento.
58
TRES PARTES PRINCIPALES DE UN AMBIENTE DE TIEMPO DE
EJECUCIN:
El rea esttica asignada en tiempo de carga/arranque. Ejemplos:
variables globales/estticas y tiempo de carga constantes.
El rea de pila para los datos de tiempo de ejecucin que obedece a un
last-in-first-out. Ejemplos: declaraciones anidadas y temporales.
El montn o el rea dinmicamente asignada para datos, "totalmente
dinmicos" por ejemplo: los datos que no obedecen una regla de LIFO.
Ejemplos: los objetos en Java, listas en Scheme.
PROCEDIMIENTOS/FUNCIONES Y EL AMBIENTE
Los Datos locales en un procedimiento/funcin son tpicamente asignados
en un rea contigua del ambiente, llamado un registro de activacin o
marco (activacin" significa usado durante una llamada):
Figura 3.22 Muestra un esquema de asignacin de espacios en memoria.
Fuente: internet
LENGUAJES Y AMBIENTES
Los lenguajes se diferencian sobre donde los registros de activacin deben
entrar en el ambiente:
- lenguajes Funcionales (Scheme, ML) y algunos lenguajes OO
(Smalltalk) son orientados por pilas: todos (o casi todos) los datos,
incluyendo registros de activacin, son asignados dinmicamente.
La mayor parte de lenguajes estn en medio: los datos pueden ir en todas
partes y los registros de activacin van en la pila.
ASIGNACIN SIMPLE A BASE DE PILAS
Las declaraciones anidadas son aadidas a la pila como sus bloques de
cdigo son ingresados, y removidos como sus bloques de cdigo son
terminados.
58
TRES PARTES PRINCIPALES DE UN AMBIENTE DE TIEMPO DE
EJECUCIN:
El rea esttica asignada en tiempo de carga/arranque. Ejemplos:
variables globales/estticas y tiempo de carga constantes.
El rea de pila para los datos de tiempo de ejecucin que obedece a un
last-in-first-out. Ejemplos: declaraciones anidadas y temporales.
El montn o el rea dinmicamente asignada para datos, "totalmente
dinmicos" por ejemplo: los datos que no obedecen una regla de LIFO.
Ejemplos: los objetos en Java, listas en Scheme.
PROCEDIMIENTOS/FUNCIONES Y EL AMBIENTE
Los Datos locales en un procedimiento/funcin son tpicamente asignados
en un rea contigua del ambiente, llamado un registro de activacin o
marco (activacin" significa usado durante una llamada):
Figura 3.22 Muestra un esquema de asignacin de espacios en memoria.
Fuente: internet
LENGUAJES Y AMBIENTES
Los lenguajes se diferencian sobre donde los registros de activacin deben
entrar en el ambiente:
- lenguajes Funcionales (Scheme, ML) y algunos lenguajes OO
(Smalltalk) son orientados por pilas: todos (o casi todos) los datos,
incluyendo registros de activacin, son asignados dinmicamente.
La mayor parte de lenguajes estn en medio: los datos pueden ir en todas
partes y los registros de activacin van en la pila.
ASIGNACIN SIMPLE A BASE DE PILAS
Las declaraciones anidadas son aadidas a la pila como sus bloques de
cdigo son ingresados, y removidos como sus bloques de cdigo son
terminados.
58
TRES PARTES PRINCIPALES DE UN AMBIENTE DE TIEMPO DE
EJECUCIN:
El rea esttica asignada en tiempo de carga/arranque. Ejemplos:
variables globales/estticas y tiempo de carga constantes.
El rea de pila para los datos de tiempo de ejecucin que obedece a un
last-in-first-out. Ejemplos: declaraciones anidadas y temporales.
El montn o el rea dinmicamente asignada para datos, "totalmente
dinmicos" por ejemplo: los datos que no obedecen una regla de LIFO.
Ejemplos: los objetos en Java, listas en Scheme.
PROCEDIMIENTOS/FUNCIONES Y EL AMBIENTE
Los Datos locales en un procedimiento/funcin son tpicamente asignados
en un rea contigua del ambiente, llamado un registro de activacin o
marco (activacin" significa usado durante una llamada):
Figura 3.22 Muestra un esquema de asignacin de espacios en memoria.
Fuente: internet
LENGUAJES Y AMBIENTES
Los lenguajes se diferencian sobre donde los registros de activacin deben
entrar en el ambiente:
- lenguajes Funcionales (Scheme, ML) y algunos lenguajes OO
(Smalltalk) son orientados por pilas: todos (o casi todos) los datos,
incluyendo registros de activacin, son asignados dinmicamente.
La mayor parte de lenguajes estn en medio: los datos pueden ir en todas
partes y los registros de activacin van en la pila.
ASIGNACIN SIMPLE A BASE DE PILAS
Las declaraciones anidadas son aadidas a la pila como sus bloques de
cdigo son ingresados, y removidos como sus bloques de cdigo son
terminados.
59
Ejemplo: Pila at Point 1:
{ int x; int y;
{int z;
}
{ int w;
// Point 1
}
}
Figura 3.23 Muestra una asignacin simple a base de pilas. Fuente:
internet
3.9 TIPOS DE DATOS ABSTRACTOS Y MDULOS
TDA est caracterizado por un conjunto de operaciones (procedimientos y
funciones) denominados usualmente su interfaz pblica y representan el
comportamiento del TDA; mientras que la implementacin privada del TDA
est oculta al programa cliente que lo usa.
Un TDA es un conjunto de operaciones que exponen y/o modifican el
estado de una informacin internamente almacenada.
Es un tipo de dato creado por el programador. Suele llamarse clase y la
variables de esa clase suelen llamarse objeto.
Es un mecanismo de un lenguaje de programacin diseado para imitar las
propiedades abstractas de un tipo empotrado tanto como sea posible.
Debe incluir una especificacin de las operaciones que pueden ser
aplicadas a los datos.
Debe ocultar los detalles de puesta en prctica del cdigo de cliente.
A veces llamado encapsulation & information hiding.
Un TDA tpico por su sencillez es la pila (stack). El concepto de pila es el
de un montn de informacin (del mismo tipo) a la que se puede acceder
slo por el sitio por dnde se introduce, o sea, que slo se puede extraer
el objeto que se acaba de aadir. Esta limitacin, sin embargo, la hace
mucho ms simple an de ser implementada, luego una pila basta que
59
Ejemplo: Pila at Point 1:
{ int x; int y;
{int z;
}
{ int w;
// Point 1
}
}
Figura 3.23 Muestra una asignacin simple a base de pilas. Fuente:
internet
3.9 TIPOS DE DATOS ABSTRACTOS Y MDULOS
TDA est caracterizado por un conjunto de operaciones (procedimientos y
funciones) denominados usualmente su interfaz pblica y representan el
comportamiento del TDA; mientras que la implementacin privada del TDA
est oculta al programa cliente que lo usa.
Un TDA es un conjunto de operaciones que exponen y/o modifican el
estado de una informacin internamente almacenada.
Es un tipo de dato creado por el programador. Suele llamarse clase y la
variables de esa clase suelen llamarse objeto.
Es un mecanismo de un lenguaje de programacin diseado para imitar las
propiedades abstractas de un tipo empotrado tanto como sea posible.
Debe incluir una especificacin de las operaciones que pueden ser
aplicadas a los datos.
Debe ocultar los detalles de puesta en prctica del cdigo de cliente.
A veces llamado encapsulation & information hiding.
Un TDA tpico por su sencillez es la pila (stack). El concepto de pila es el
de un montn de informacin (del mismo tipo) a la que se puede acceder
slo por el sitio por dnde se introduce, o sea, que slo se puede extraer
el objeto que se acaba de aadir. Esta limitacin, sin embargo, la hace
mucho ms simple an de ser implementada, luego una pila basta que
59
Ejemplo: Pila at Point 1:
{ int x; int y;
{int z;
}
{ int w;
// Point 1
}
}
Figura 3.23 Muestra una asignacin simple a base de pilas. Fuente:
internet
3.9 TIPOS DE DATOS ABSTRACTOS Y MDULOS
TDA est caracterizado por un conjunto de operaciones (procedimientos y
funciones) denominados usualmente su interfaz pblica y representan el
comportamiento del TDA; mientras que la implementacin privada del TDA
est oculta al programa cliente que lo usa.
Un TDA es un conjunto de operaciones que exponen y/o modifican el
estado de una informacin internamente almacenada.
Es un tipo de dato creado por el programador. Suele llamarse clase y la
variables de esa clase suelen llamarse objeto.
Es un mecanismo de un lenguaje de programacin diseado para imitar las
propiedades abstractas de un tipo empotrado tanto como sea posible.
Debe incluir una especificacin de las operaciones que pueden ser
aplicadas a los datos.
Debe ocultar los detalles de puesta en prctica del cdigo de cliente.
A veces llamado encapsulation & information hiding.
Un TDA tpico por su sencillez es la pila (stack). El concepto de pila es el
de un montn de informacin (del mismo tipo) a la que se puede acceder
slo por el sitio por dnde se introduce, o sea, que slo se puede extraer
el objeto que se acaba de aadir. Esta limitacin, sin embargo, la hace
mucho ms simple an de ser implementada, luego una pila basta que
60
tenga las operaciones de apilar y desapilar para estar totalmente
controlada y llegar, mediante estas operaciones, a ser posible construir
cualquier instancia de la misma.
Siempre debemos distinguir entre la implementacin de un TDA y su
especificacin. Uno es el qu y el otro el cmo debe hacerlo. Cuando nos
preocupamos de la implementacin estamos hablando de una estructura
de datos no de un TDA.
Una especificacin debe ser formal. Por ejemplo, una especificacin
informal del tipo pila podra ser:
Una pila es una coleccin de elementos o datos (tems) de un mismo tipo
puestos de forma que el primero que se extraiga sea temporalmente el
ltimo que se aadi y subsiguientes extracciones sean por orden los
ltimos aadidos. Se llama head, top, cima o cabeza al elemento que
acabo de aadir que es adems el nico que puede ser extrado.
Figura 3.24 Muestra un TDA, con mtodos y atributos. Fuente: autor
3.9.1 CLASES
Agrupa en una sola entidad tanto datos como funciones que manipulan
dichos datos.
Por defecto todos los elementos definidos en una clase son privados
(PRIVATE).
Proporciona una plantilla con la que el programa puede crear objetos
similares.
Sintxis:
class nombre_clase
{datos y funciones privados
61
public:
datos y funciones pblicos
}
void nombre_clase::nombre_funcion1()
{...
....
}
Ejemplo:
class triangulo{
private:
int lado1;
int lado2;
int lado3;
public:
void inicializa();
void mostrar();
};
void triangulo::inicializa()
{
cout<<"lado1:";cin>>lado1;
cout<<"lado2:";cin>>lado2;
cout<<"lado3:";cin>>lado3;
};
3.9.1.1 TIPOS DE ACCESO
Private
Cuando los miembros slo son accesibles por los miembros de la misma
clase.
Public
Los miembros son accesibles desde cualquier parte del programa.
Protected
Se comportan como privados, pero los miembros son accesibles por los
miembros de las clases derivadas.
62
3.9.1.2 OBJETOS
Es una instancia de una clase. Ejemplo: Ud. es un objeto de la clase
alumno.
Es la variable cuyo tipo de dato es una clase.
Es a travs de los objetos que las funciones cobran vida, producindose
los mensajes.
Sintxis
void main()
{nombre_clase nombre_objeto;
nombre_objeto.nombre_funcin1();
nombre_objeto.nombre_funcin2();
}
3.9.2 LISTAS ENLAZADAS
Estructuras dinmicas de datos a travs de punteros, permiten que se
pueda adquirir posiciones de memoria a medida que se necesitan y
liberarlas cuando ya no se requieren.
Almacenan elementos de una lista lineal en posiciones de memoria que no
son contiguas.
Cada elemento contiene la direccin del siguiente elemento de la lista.
Figura 3.25 Muestra la estructura de un nodo de una lista enlazada.
Fuente: autor
Primitivas de acceso:
Primero: es un elemento de p, es el primer lugar de la lista.
63
ltimo: es el ltimo elemento de la lista o Nill.
Valor(p): valor (p) nos entrega el valor existente en la posicin p.
Sgte(p): si p es un lugar diferente de ltimo, sgte(p) nos entrega el puntero
al sgte elemento de la lista.
Asgsig(p,j) : si j es un puntero cualquiera, p es un lugar diferente de
ltimo, asgsig(p,j) permite asignar un sgte a p, tal que sgte(p) = j.
Asgval(p,val): asigna el valor val al lugar p.
Ejemplo:
L|stas en|azadas
18
10
ADAN 20
CLSA8 30
8AuL 40
SlLvlA *
10
20
30
40
VALOR (10) =
SGTE(10) =
VALOR(SGTE(10))=
PRIMERO=
VALOR(30)=
VALOR(SGTE(30))=
SGTE(40)=
ASGSIG(30, 40)
ASGVAL(30, RAUL)
Figura 3.26 Una lista enlazada, usando las primitivas de acceso. Fuente:
Autor
Recorrido de una lista
Inicio
P primero
Repetir mientras p <> nil
Hacer
escribir valor (p)
p sgte(p)
F-hacer
Fin
Clculo del Nro de elementos de una lista
Inicio
N 0
64
P primero
Repetir mientras p <> nil
Hacer
N N + 1
p sgte(p)
F-hacer
Escribir N de elementos es: , N
Fin
Clculo del N de ocurrencias de un elemento dado en una lista
Inicio
Leer val
P primero
num 0
Repetir mientras p <> nil
Hacer
si ( valor (p) = val) entonces
num num + 1
f.si
p sgte(p)
F-hacer
Escribir N de ocurrencias de val es: , num
Fin
3. 9.3 PILAS
Tipo especial de lista lineal, en la que la insercin y borrado de nuevos
elementos se realiza slo por un extremo llamado tope o cima
Tienen un comportamiento: LI-FO : (last in first out)
Bsicamente poseen dos operaciones primarias:
Push: inserta la data en el tope de la pila
Pop: remueve la data del tope de la pila
65
Figura 3.27 Muestra un ejemplo de pilas de documentos.
Fuente: Autor
Para representar una pila se puede utilizar un arreglo unidimensional.
Primitivas de pilas
P= cima puntero de la pila
Vacia: Funcin booleana pila vacia
Push: sub-programa para aadir elementos
Pop: sub-programa para eliminar elementos
Longmax: longitud mxima de la pila
S(i) : elemento isimo de la pila S
X: elemento a aadir o quitar de la pila
Aadir datos
Inicio
Si (p = longmax) entonces
escribir pila llena
Sino
p p + 1
s(p) X
F-si
Fin
Quitar datos
Inicio
Si (p = 0) entonces
escribir pila vacia
Sino
X s(p)
66
p p - 1
F-si
Fin
3. 9.4 COLAS
Tipo de estructura lineal de datos, similar a las pilas, en las que las
eliminaciones se realizan al principio de las colas y las inserciones se
realizan en el otro estremo
Son estructuras de datos de tipo FIFO (First in-First out)
Las colas son herramientas de programacin como las pilas.
Figura 3.28 Muestra un ejemplo de cola para ingresar al cine. Fuente:
Autor
Diseo de colas
Frente: primer elemento o inicio de la cola
Final: ltimo elemento o fin de la cola
X: elemento a insertar o eliminar
MAX: es el mximo nmero de elementos
Operaciones primarias:
Encolar: agrega un nuevo dato al final de la cola
Desencolar: elimina un dato del principio de la cola
67
Co|as - Cperac|ones
Figura 3.29 Muestra un ejemplo de cola para insertar un elemento. Fuente:
Autor
C o | a s - C p e ra c | o n e s
Figura 3.30 Muestra un ejemplo de cola para eliminar un elemento. Fuente:
Autor
Inserta cola (cola, Max, frente, final, X)
//inserta X al final de la cola, frente y final son los punteros que indican el
//inicio y fin de la cola, Max es el mximo nmero de elementos.
Inicio
Si (final < Max) entonces
Final final + 1
Cola [ final] X
Si (final = 1) entonces {se insert el primer elemento de la cola}
Frente 1
Fin_si
Sino
Escribir desbordamiento
Fin-si
Fin
68
Elimina(cola, frente, final, X)
//elimina el primer elemento de la cola y lo almacena en X,
//frente y final son los punteros que indican respectivamente el inicio y fin
de la cola.
Inicio
Si frente <> 0 entonces {verifica que la cola no est vaca}
X cola [frente]
Si (frente = final) entonces { si hay 1 solo elemento}
Frente 0
Final 0
Sino
Frente frente + 1
Fin-si
Sino
Escribir sub-desbordamiento
Fin-si
fin
3. 9.5 MDULOS
Un mdulo es una unidad de programa con un interfaz pblico y una
implementacin privada; todos los servicios que estn disponibles de un
mdulo son descritos en su interfaz pblico y son exportados a otros
mdulos, y todos los servicios que son necesarios por un mdulo deben
ser importados de otros mdulos.
As, un mdulo ofrece servicios generales, que pueden incluir tipos y
operaciones sobre aquellos tipos, pero no son restringidos a estos.
Los mdulos tienen propiedades agradables:
Un mdulo puede ser (re) usado de cualquier modo que su interfaz pblico
lo permite.
Una puesta en prctica de mdulo puede cambiarse sin afectar el
comportamiento de otros mdulos.
Los mdulos son el mecanismo principal usado para descomponer
programas grandes. Ejemplo: un compilador:
Un mecanismo TAD est limitado a la definicin de un tipo solo y
operaciones sobre aquel tipo. Esto es inadecuado para estructurar
programas grandes.
69
Orientacin a Objetos o clases son ms dinmicos y verstiles que
mecanismos TAD.
As, los lenguajes por lo general ofrecen un constructor ms general - el
mdulo - que es til para estructurar programas grandes.
Figura 3.31 Muestra un ejemplo de Mdulo para disear un compilador.
Fuente: Autor
Los mdulos por lo general ofrecen una ventaja adicional: los nombres
dentro de un mdulo no se oponen con nombres en otros mdulos.
Los mdulos por lo general tienen una relacin cercana a compilacin
separada (aunque esto sea a menudo difcil de hacer exacto en una
especificacin).
Los lenguajes que tienen mecanismos de mdulos comprensivos son:
Ada, donde les llaman paquetes (para no ser confundido con
paquetes Java)
ML, donde les llaman estructuras
Los Lenguajes que tienen mecanismos dbiles con algunas propiedades
parecidas a mdulos son:
C ++, donde les llaman namespaces
Java, donde les llaman paquetes
Lenguajes sin el mecanismo de mdulo:
C (pero los mdulos pueden ser imitados usando la compilacin
separada)
Pascal
70
3.10 PROGRAMACIN ORIENTADA A OBJETOS
Figura 3.32 Muestra las caractersticas de la Programacin orientada a
objetos. Fuente: Autor
3.10.1 BENEFICIOS FUNDAMENTALES
Los objetos dan el control ms dinmico de la inicializacin y el
comportamiento exacto de funciones que cambian o reportan datos.
Los objetos tambin permiten la redefinicin de comportamientos,
incluyendo la extensin, que permite la reutilizacin de cdigo significativa.
La redefinicin de comportamientos puede trabajar dinmicamente, de
modo que an la recompilacin de cdigo existente sea innecesaria. (
algunos lenguajes, como Smalltalk, permiten al comportamiento cambiarse
an durante la ejecucin).
3.10.2 TRES CONCEPTOS FUNDAMENTALES APOYAN ESTAS
VENTAJAS
Clases y mtodos
la clase es un mecanismo TAD que adems ofrece buen control de
inicializacin (constructores).
La Herencia
Una clase puede ampliar otra clase (llega a ser una subclase), permitiendo
as a la reutilizacin de todo (o algunos) del cdigo antes escrito.
La ligadura Dinmica
Una variable de una clase puede contener un objeto de una subclase, y
todo el comportamiento modificado por la subclase automticamente se
aplica.
71
3.10.3 CLASES Y MTODOS
Una clase diferencia el acceso pblico del privado. Los datos son casi
siempre privados. Los mtodos y constructores son por lo general pblicos.
La implementacin, sin embargo, es visible en el cdigo fuente (Java).
Los constructores asignan la memoria dinmicamente. La memoria es
liberada por un recolector de basura (Java).
Los mtodos se parecen a funciones, pero deben ser llamados desde un
objeto: x.f () en vez de f (x).
Cada mtodo tiene un parmetro implcito (this en Java).
El nfasis sobre x ms bien que la f en x.f () es importante: x consigue
"decidir" lo que la f quiere decir.
3.10.4 HERENCIA
Proceso por el cual un objeto puede adquirir las propiedades de otro
objeto.
Consiste en crear una clase base y luego una clase derivada capaz de
heredar a todos los miembros de la clase base: datos y mtodos.
Una clase derivada puede, a su vez, ser una clase base, dando lugar a una
jerarqua de clases.
Una clase derivada puede acceder a los miembros public y protected de la
clase base, como si fueran miembros de ella. No pueden tener acceso a
los miembros prvate.
Una clase derivada puede aadir sus propios datos y funciones.
La herencia es una forma de reutilizacin del software en la que se crean
nuevas clases ya existentes por medio de la absorcin de sus atributos y
comportamientos. La herencia cumple la ley transitiva.
72
10
Ejemplo: Barco
BARCO
largo
Capacidad
peso
barco()
mostrarbarco()
MERCANTE
turbina
PESCA
motor
pesca()
Mostrarpesca() mostrarmercante()
mercante()
Figura 3.33 Muestra las caractersticas de la herencia Fuente: Autor
3.10.5 LIGADURA DINMICA
En un lenguaje orientado a objetos, una de las caractersticas principales
que distinguen a las clases de los mdulos o paquetes en lenguajes como
Ada o ML es la naturaleza dinmica de las clases en contraste con la
naturaleza esttica de los mdulos.
Se basa en el hecho de que a los objetos de una clase se les asigna
almacenamiento de una forma totalmente dinmica, por lo general en un
montn.
Dependiendo del lenguaje de que se trate, esta asignacin dinmica de los
objetos puede quedar bajo el control manual del programador.
(como ocurre en las operaciones New y delete de C++), o puede quedar
totalmente automatizada (mayora de Lenguajes funcionales).
Java usa un hbrido (usa New, pero no delete), en su lugar, los objetos son
recuperados automticamente, ya sea al salir de sus alcances o mediante
alguna forma de recoleccin de basura.
.
3.10.6 HERENCIA MLTIPLE
Nos permite combinar las interfaces pblicas de dos clases diferentes en
una sola subclase.
Java no lo tiene pero tiene herencia de interfaz mltiple que es casi igual
de poderoso, y mucho ms fcil de implementar.
73
Un interfaz en Java es una clase sin ninguna implementacin (no hay
ningn constructor y todos los mtodos son implcitamente pblicos).
3.10.7 POLIMORFISMO
La sobrecarga, o de otra manera el polimorfismo ad_hoc, donde diferentes
funciones o declaraciones de mtodo comparten el mismo nombre y se
elimina la ambigedad mediante el uso de los tipos de los parmetros en
cada declaracin. La sobrecarga est disponible en C++, java, Haskell y
Ada, pero no en C ni en ML.
3.10.8 C++
Un complejo, lenguaje multiparadigma. Tiene casi siempre cada rasgo
concebible. Algunos de sus problemas son heredados de C.
Los programas pueden ser muy rpidos y concisos.
Una diferencia fundamental entre C++ y la mayora de los dems lenguajes
orientados a objetos, incluyendo JAVA, es que los objetos no son
automticamente apuntadores.
Para la programacin orientada a objetos, los problemas vienen de (no por
orden de importancia):
-Herencia mltiple
-Sobrecarga de operadores
-La Carencia de recoleccin de basura
-La Interaccin con plantillas
-Enfocado en la velocidad de ejecucin
-La Inadecuada biblioteca estndar
En C++, la inicializacin de los objetos se efecta como en Java mediante
constructores que tienen el mismo nombre que la clase.
A diferencia de JAVA, C++ no tiene un recolector de basura incorporado,
por lo que C++ tambin tiene destructores.
constructores
Los constructores, como los destructores, deben ser miembros de clase
pblicos.
Sirven para inicializar los datos de los objetos (por defecto).
Es una funcin que se ejecuta automticamente cada vez que se crea un
objeto de una clase especfica.
74
Pueden aceptar argumentos, no est precedida por la palabra void, usa el
mismo nombre que la clase.
Una clase puede tener varios constructores, un constructor puede estar
sobrecargado.
Destructor
Un destructor es una funcin miembro de una clase, que se utiliza para
eliminar un objeto de esa clase.
los programas no pueden pasar parmetros a una funcin destructora.
La destructora tiene el mismo nombre que la clase, no es del tipo void, va
precedida por una tilde (~) y tampoco produce un valor.
Un destructor se utiliza generalmente para liberar la memoria asignada
dinmicamente.
Los objetos creados con el operador new son destruidos por el operador
delete. Un destructor no puede estar sobrecargado.
3.10.9 C++ HERENCIA MLTIPLE
A diferencia de Java (y la mayor parte de Smalltalks), C ++ tiene herencia
mltiple, que causa complicaciones significativas.
Herencia Mltiple puede tomar dos formas: herencia repetida y herencia
compartida.
La herencia compartida es por lo general lo que queremos, los casos de
una superclase que tienen dos rutas de acceso son en realidad la misma
instancia:
Figura 3.34 Muestra la herencia compartida. Fuente: Autor
El defecto en C ++ es la herencia repetida.
La herencia repetida quiere decir que caminos diferentes se refieren a los
objetos diferentes de la misma superclase.
A
B C
D
75
Figura 3.35 Muestra la herencia repetida. Fuente: Autor
C++: nerenc|a M|t|p|e
LIBRO
DISCO
PAQUETE
38
Figura 3.36 Muestra la herencia mltiple. Fuente: Autor
3.11 PROGRAMACIN LGICA
Usa un juego de aserciones lgicas (por ejemplo: las declaraciones que
son verdaderas o falsas), como un programa (los hechos).
La ejecucin es iniciada segn una pregunta o el objetivo, que el sistema
intenta demostrar que es verdadero o falso, basado en el juego de
existencia de aserciones.
Por esta razn, a veces llaman bases de datos deductivas a los sistemas
de programacin lgica.
3.11.1 LGICA DE PREDICADOS
Figura 3.37 Muestra la estructura de un sistema experto. Fuente: Autor
A
B C
D
A
76
La lgica de predicados est basada en la idea de que las sentencias
realmente expresan relaciones entre objetos, as como tambin cualidades
y atributos de tales objetos. Los objetos pueden ser personas, objetos
fsicos, o conceptos. Tales cualidades, relaciones o atributos, se
denominan predicados. Los objetos se conocen como argumentos o
trminos del predicado
Con el lenguaje de programacin PROLOG se dispone de un lenguaje con
el que fcilmente se llevan a cabo el clculo de predicados.
Donde el predicado es una expresin que tiene el siguiente formato
general.
Figura 3.38 Muestra la estructura de un predicado. Fuente: Autor
Donde el nombre del predicado identifica a la relacin que existe entre los
argumentos, entre parntesis o bien identifica a la propiedad o
caractersticas que tienen los argumentos en el parntesis, o bien
identifica al nombre de la clase a la que pertenecen los argumentos.
Ejemplo:
Son_verde (limn,chile_serrrano)
Verde (limn, manzana)
Ladra(perro)
Mujer(ana)
mamiferos (x)=> sangre_caliente(x)
El clculo de predicados est formado por un conjunto de predicados
concatenados a travs de las operaciones lgicas:
Operaciones lgicas
^ : = AND
v : = OR
~ : = NOT
=> : = Implicacin
V : = Para todo
E : = Existe
77
Jerarqua de las Operaciones Lgicas (orden de mayor a menor)
1. Se ejecutan ( )
2. ~ : not
3. ^ : and
4. v : or
5. => : Implicacin (Entonces)
Operaciones Relacionadas con el Clculo de Predicados
1. La Asociatividad
A v (B V C) = (A v B) v C
A ^ (B ^ C) = (A ^ B) ^ C
2. La Distributividad
A ^ (B v C) = (A^ B) v (A ^ C)
A v (B ^ C) = (A v B ) ^ (A v C)
3. Leyes de Morgan.
~ (A v B) = ~ A ^ ~ B
~ (A ^ B) = ~ A v ~B
Ejemplo de enunciados lgicos
Un caballo es un mamfero
Un ser humano es un mamfero
Los mamferos tienen 4 patas y ningn brazo, o 2 patas y 2 brazos.
Un caballo no tiene brazos
En el clculo de predicados:
mamfero (caballo)
mamfero (humano)
para todo x, mamfero (x) -> patas (x,4) y brazos (x, 0) o patas(x, 2) y
brazos (x,2)
brazos (caballo,o)
3.11.2 CLCULO DE PREDICADOS
Utiliza los elementos siguientes:
Constantes. Por lo general nmeros o nombres.
Predicados. Son los nombres para las funciones que son verdaderas o
falsos, por ejemplo las funciones Booleanas en un programa. Los
78
predicados pueden tomar varios argumentos. En los ejemplos, mamfero
es predicado.
Funciones. El clculo de predicado de primer orden distingue entre las
funciones que son verdaderas o falsas, estos son los predicados, y todas
las dems funciones, que representan valores no booleanos.
Las variables que significan cantidades an no especificadas. En los
ejemplos, x es variable.
Connectores. Operaciones y, o, y not; implicacin ->" y equivalencia <->"
(derivable de los tres anteriores).
Cuantificadores. Estas son las operaciones que introducen variables: "
para todo " - el cuantificador universal, " y existe " - el cuantificador
existencial.
Smbolos de puntuacin: parntesis izquierdos y derechos, la coma, y el
perodo.
Ejemplo 1:
Se presenta 2 hechos y 2 reglas dadas.
Lenguaje Natural Calculo de Predicados
Los dos primeros enunciados sonhechos:
1. David yMariason matrimonio(david, maria)
matrimonio
2. Mariavive en vive_en(maria, chiclayo)
Chiclayo
Figura 3.39 Muestra ejemplos de 2 hechos y 2 reglas. Fuente: Autor
79
1) matr|mon|o(dav|d,mar|a)
2) v|ve_en(mar|a.ch|c|ayo)
3) matr|mon|o(k1,k2)->casados(k1,k2)
4) casados(k3,k4) y v|ve_en(k4,kS) ->
v|ve_en(k3,kS)
Supos|c|n dav|d v|ve en Ch|c|ayo
Figura 3.40 Muestra ejemplos de predicados y nuevas conclusiones.
Fuente: Autor
Los enunciados tres y cuatro son reglas generales de conclusiones.
3. Cuando dos personas(X1,X2) matrimonio(x1,x2).-
Son matrimonio, estn casados. casados(x1,x2)
4. Cuando dos personas X3 y casados(x3,x4) y
X4 estn casadas y la persona vive_en(x4,x5)
X4 vive en el lugar X5, entonces la persona X3 tambin vive en
vive_en(x3,x5) X5.
Basados en estos enunciados formales puede demostrarse la suposicin
de que David vive en Chiclayo, aunque esta suposicin hasta ahora no
exista como suposicin.
Forma de escritura como predicados:
vive_en(david, chiclayo)
Esta suposicin estar probada cuando:
En la parte de la conclusin de una regla se encuentre la relacin vive_en
con dos variables, cuyo contenido pueda ser David y Chiclayo, y cuando
en la parte de condiciones de la misma regla se hayan cumplido todas las
condiciones que llevan a esta conclusin.
Ahora se comprueba la validez de las dos condiciones para la
permisibilidad de la conclusin en la regla 4.
Primera condicin de la regla 4:
casados (X3,X4) verdadero?
Condicin de la regla 3:
matrimonio(X1,X2) verdadero?
80
Esta condicin se cumple por el hecho1
Por lo tanto, la conclusin tambin es correcta:
Es necesario ahora la exactitud de la segunda condicin:
vive_en(X4,X5)
Vive_en(david,chiclayo)
Ya que X4 ha sido unido al smbolo Maria, por el segundo enunciado se
asigna a X5 el smbolo Chiclayo.
Ejemplo 2:
Dado las siguientes hechos expresarlo en la representacin de predicados
A John le gusta toda clase de comida
Las manzanas son comida.
El pollo es comida.
Cualquier cosa que uno coma y no lo mate es comida.
Bill come cacahuate.
Sue come lo mismo que Bill.
Plantear la regla que responda a la pregunta Qu comida come Sue?.
Solucin:
Se tiene los siguientes predicados
Es (manzana,comida).
Es (pollo,comida).
Come(bill,cacahuate).
Las reglas a definir son:
uno_come_y_no_mata(X):- es(X,comida).
lo_mismo_come(sue,X):- come(bill,X).
le_gusta_john(X):- es(X,comida).
Qu comida comeSue?.
Sue come cacahuate
Ejemplo 3:
Dada las siguientes hechos expresarlo en la representacin de predicados
Ana y Roberto son matrimonio
Roberto es el padre de Maria y Alberto
Alberto es el padre de Jos
81
Establecer el conjunto de reglas que se pueden generar con los hechos
dados
Solucin:
Se tiene los siguientes predicados:
son_matrimonio(ana,roberto)
padre(roberto,maria)
padre(roberto,alberto)
padre(Alberto,jose)
Las reglas que se pueden establecer son:
hijo(X,Y) :- padre(Y,X).
madre(X,Z):- son_matrimonio(X,Y), padre(Y,Z).
abuelo(X,Z) :- padre(X,Y), padre(Y,Z).
abuela(X,Z) :- madre(X,Y), padre(Y,Z).
hermano(Y,Z) :- padre(X,Y), padre(X,Z).
hermana(Y,Z) :- padre(X,Y), padre(X,Z).
tia(X,Z):- hermana(X,Y),padre(Y,Z).
3.11.3 VISUAL PROLOG
El Visual Prolog es un lenguaje de quinta generacin que nos permite
construir aplicaciones poderosas tales como: sistemas expertos, bases de
conocimiento personalizadas, interfaces de lenguaje natural y sistemas de
gestin de informacin inteligentes.
El Visual Prolog es un lenguaje declarativo. Esto significa que dado los
hechos y las reglas necesarios puede usar razonamiento deductivo para
resolver problemas de programacin.
El programador de Prolog slo debe dar una descripcin del problema (la
meta) y las reglas bsicas para resolverlo y el sistema Prolog determinar
como encontrar la solucin.
En qu puede usted usar Visual Prolog?
Producir prototipos virtualmente para cualquier programa de aplicacin.
Controlar y monitorizar procesos industriales.
Implantacin de bases de datos dinmicas.
Traduccin de lenguajes.
Construir interfaces en lenguajes naturales para el software existente.
Construir sistemas expertos.
Construir paquetes de manipulacin simblica.
82
Prueba de teoremas y paquetes de inteligencia artificial.
Estructura de un programa en Prolog
Domains
/*sentencias de dominio,se declara cualquier dominio
que se est usando */
predicates
/* sentencias de predicados */
clauses
/* clusulas (hechos y reglas) parte principal del programa*/
goal
/* metas que se van a desarrollar
submeta_1, submeta_2, etc */
La estructura de un programa en prolog
Domains
Contiene los dominios definidos por el usuario en base a los tipos de datos
que maneja el Lenguaje Prolog.
Predicates
Contiene la definicin de los predicados que se van a usar.
Clauses
Contiene una coleccin de hechos y reglas.
Las sentencias en prolog son: hechos y reglas
Los hechos es lo que ya se conoce. Son las afirmaciones que no estn
expresadas como implicaciones y representan conocimientos especficos
sobre casos particulares.
El conjunto de afirmaciones se conoce a menudo con el nombre de
memoria de trabajo o base de afirmaciones.
Ejemplo:
bill gusta cindy
Cindy gusta bill
Bill gusta perros
En Prolog:
gusta(bill, cindy) % a bill le gusta cindy
83
gusta(cindy, bill) % a cindy le gusta bill
gusta(bill, perros) % a bill le gustan los perros.
Reglas
Son las afirmaciones que tienen forma de implicacin y expresan
conocimiento general sobre un dominio.
Es lo que se puede inferir de los hechos. Las reglas nacen de los hechos.
Ejemplo:
Tio(X,A):- Hombre(A),
Padres(X,P),
Hermano(P,A).
%El to de X es A si A es hombre y uno de los padres de X es P y el
hermano de P es A.
Le_justa(bill, X):- le_gusta(tom,X). % a bill le gusta cualquier cosa que a
tom le gusta.
father(A,B):-son(B,A). % el padre de A es B si el hijo de B es A
tio(X,A):-madre(X,P), %el tio de X es A si la madre de X es P y
hermano(P,A). %el hermano de P es A
Goal
Es lo que se desea evaluar o las metas que se van a desarrollar.
Ejemplo:
le_gusta(who, tenis). % a quin le gusta el tenis.
le_gusta(juan,vino). %le_gusta a juan el vino
hermano(fay,alan). %El hermano de fay es alan?
Dominios y predicados
Se debe especificar los dominios en los cuales los objetos en una relacin
permanecen.
Tipos de dominios
Char Carcter cerrado entre apstrofe
Integer nmeros enteros
Real nmeros con signo opcional seguido de algunos dgitos luego
opcionalmente un punto decimal.
String Cualquier secuencia de caracteres escrito entre comillas
Symbol Una secuencia de letras, nmeros y carcter de subrayado
84
Ejecucin en prolog
La mayora de los sistemas se ejecutan como intrpretes.
Un programa prolog incluye un juego de clusulas que se almacenan en
una base de datos de clusulas. Luego se pueden introducir las metas ya
sea desde un archivo o desde el teclado para empezar la ejecucin.
3.12 PROGRAMACION ALGEBRAICA
Estos lenguajes accesan a Base de Datos Relacionales como SQL
SERVER 2005, ORACLE. Manejan el algebra y el clculo Relacional.
Efectan consultas para recuperar informacin.
Permite a base de consultas accesar a grandes volmenes de informacin
La mayor parte de los SGBD relacionales que se encuentran en el
mercado cuentan con una interfaz de lenguaje declarativo de alto nivel, de
modo que el usuario slo tenga que especificar cul es el resultado
deseado, dejando que el SGBD se encargue de la optimizacin efectiva y
de las decisiones sobre cmo se ejecutar la consulta.
SQL es un lenguaje de base de datos completo; cuenta con enunciados de
definicin, consulta y actualizacin de datos. As pues, es tanto un DDL
como un DML.
Entre las caractersticas del Microsoft SQL server tenemos:
Soporte de transacciones.
Escalabilidad, estabilidad y seguridad.
Soporta procedimientos almacenados.
Incluye tambin un potente entorno grfico de administracin, que
permite el uso de comandos DDL y DML grficamente.
Permite trabajar en modo cliente-servidor, donde la informacin y datos
se alojan en el servidor y los terminales o clientes de la red slo acceden a
la informacin.
Adems permite administrar informacin de otros servidores de datos.
85
CAPITULO IV
MEJOR SOFTWARE
4.1 PARADIGMAS DE LENGUAJE
A continuacin presentamos 2 problemas resueltos con diferentes
paradigmas de programacin: C++, Java y Visual Prolog.
Ejemplo N 1: A continuacin presentamos una funcin que calcula el
nmero de dgitos (decimales) en un entero.
En C++:
#include <iostream.h>
int numdigits(int x);
void main()
{
int numero;
cout<<"\n Ingrese un nmero entero:";
cin>>numero;
cout<<"\n El nmero de digitos es:"<<numdigits(numero);
}
int numdigits(int x)
{int t=x, n=1;
while (t>=10)
{n++;
t=t/10;
}
return n;
}
Al ejecutar:
En Java:
/*
* Crea una clase Numdig
*/
package lenguaje1;
Ingrese un nmero entero:
566
El nmero de dgitos es: 3
86
import biblioteca.*;
public class Numdig {
int numero;
public void ingresar() {
numero=LE.leerInt("Ingrese entero");
}
public void calcular(){
int t=numero, n=1;
while (t>=10)
{n++;
t=t/10;
}
LE.mostrarInformacion("Nmero de dgitos:"+ n);
}
public static void main(String args[]){
Numdig obj = new
Numdig();
obj.ingresar();
obj.calcular();
}
}
Al ejecutar:
En Visual Prolog:
predicates
nondeterm numdigits(integer, integer)
clauses
numdigits(N,1):-
N<10.
numdigits(N,F):-
N>=10,
N1=N/10,
numdigits(N1,F1),
F=F1 + 1.
goal
Entrada
Ingrese entero: 566
Aceptar Cancelar
Informacin
Nmero de dgitos: 3
Aceptar
87
numdigits(566,F).
Al ejecutar:
Ejemplo N 2: definir una funcin que calcule el mximo comn
divisor de 2 nmeros naturales positivos, utilizando el algoritmo de
Euclides.
En C++:
#include<iostream.h>
long mcd(long max, long min);
void main()
{ long x,y,max,min;
cout<<"\n Programa en C++ para hallar el mximo comn divisor de dos
";
cout<<"\n nmeros naturales positivos\n\n";
cout<<"\n Ingrese primer nmero: ";
cin>> x;
cout<<"\n Ingrese segundo nmero: ";
cin>> y;
if ((x>y) ||(x==y))
{max=x; min=y;}
if (x<y)
{max=y; min=x;}
cout<<"\n El mximo comn divisor de "<<max<<" y "<<min<<" es: "<<
mcd(max,min);
}
long mcd(long max, long min)
{ long mcd=0;
while (min>0)
{
mcd=min;
min=max%min;
max=mcd;
}
return mcd;
}
Al ejecutar:
Programa en C++ para hallar el mximo
comn divisor de dos nmeros naturales
positivos.
Ingrese primer nmero: 12
Ingrese segundo nmero: 10
El mximo comn divisor de12 y 10 es: 2
F=3
1 solution
88
En Java:
package mcd;
/**
*
* @author mproleon
*/
import biblioteca.*;
import java.awt.Color;
public class mcd {
long max,min;
public mcd(long x,long y){
if((x>y)||(x==y)) {max=x;min=y;}
else {max=y;min=x;}
}
public void calcular(){long mcd=0,a=max,b=min;
while (min>0)
{mcd=min;
min=max%min;
max=mcd;
}
LE.mostrarInformacion("El mximo comn divisor de "+a+" y "+b+"\nes: " +
mcd);
}
public static void main(String args[]){long x,y;
LE.mostrarInformacion("NetBeans IDE 6.0", "M.C.D.", "Programa en
Java"+ "\npara hallar el mximo comn divisor"+
"\nde dos nmeros naturales positivos", "Iniciar",Color.ORANGE);
x=LE.leerInt("Ingrese primer nmero: ");
y=LE.leerInt("Ingrese segundo nmero: ");
MCD obj= new MCD(x,y);
obj.calcular();
}
}
Al ejecutar:
Ingrese primer nmero: 12
Aceptar Cancelar
Ingrese primer nmero: 10
Aceptar Cancelar
89
En Visual Prolog:
predicates
nondeterm mcd(long,long,long)
clauses
mcd(X,0,X).
mcd(0,Y,Y).
mcd(X,X,X).
mcd(X,Y,MCD):-
X>Y,
Y<>0,
Y1=X mod Y,
mcd(Y,Y1,MCD).
mcd(X,Y,MCD):-
Y>X,
X<>0,
Y1=Y mod X,
mcd(X,Y1,MCD).
goal
mcd(12,10,MCD).
Al ejecutar:
Conclusin: Observamos que un mismo problema se puede resolver con
diferentes lenguajes de programacin: C++, Java, Visual Prolog., pero
siempre hay un Lenguaje ms adecuado de acuerdo al problema.
4.2 PRINCIPIOS DE DISEO DE LOS LENGUAJES
4.2.1 EFICIENCIA
Ejemplo N 3: Programa en Visual Prolog, que halla el factorial de un
nmero
Domains
numero = integer
predicates
nondeterm factorial(numero, numero).
El mximo comn divisor de 12
y 10 es 2
Aceptar
MCD = 2
1 solution
90
clauses
factorial(0,1).
factorial(N,F) :- N > 0,
N1 = N - 1,
factorial(N1,F1),
F = N*F1.
goal
write("Ingrese el valor que desea hallar el factorial :"),
readint(N),
factorial(N,F).
Al ejecutar:
Observamos, en este programa ejecutado en Visual Prolog no se declaran
las variables: N, F, N1, F1 en una aparente eficiencia de este Lenguaje de
Programacin, no es necesario definir variables.
4.2.2 REGULARIDAD
4.2.2.1 GENERALIDAD
Ejemplo N 4: Programa en C++, que compara si son iguales 2
cadenas de igual longitud
/* cadigual compara 2 cadenas de igual longitud*/
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>
#define MAXIMO 80
void main()
{
clrscr();
char cad[MAXIMO], cad1[MAXIMO];
int sw=0, len, i=1;
cout<<"\ningrese cadena 1:";gets(cad);
cout<<"\ningrese cadena 2:";gets(cad1);
cout<<"\nla cadena 1 es:";puts(cad);
cout<<"\nla cadena 2 es:"; puts(cad1);
/* compara*/
len=strlen(cad);
do{
Ingrese el valor que desea hallar el factorial: 5
N=5, F=120
1 solution
91
if (cad[i] == cad1[i] )
i++;
else
sw=1;
i=len;
}while(i<len );
if (sw==1)
cout<<"\nlas cadenas no son iguales";
else
cout<<"\nlas cadenas son iguales";
}
Al ejecutar:
Observamos, en este programa ejecutado en C++, que no es posible
comparar 2 arreglos con el operador =, sino que hay que hacerlo elemento
por elemento, por lo tanto no cumple con el principio de Generalidad para
el caso de arreglos.
4.2.2.2 ORTOGONALIDAD
Ejemplo N 5: Programa en C++, que cuenta el nmero de palabras en
una cadena
/* cadenA18 */
/* Cuenta el numero de palabras en una cadena*/
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define MAXIMO 80
int palabras(char cad[80]);
void main()
{
clrscr();
char s[MAXIMO];
cout<<"\ningrese cadena :";
gets(s);
cout<<"\nla cadena es:";
puts(s);
Ingrese cadena1: hola
Ingrese cadena2: peru
La cadena1 es hola
La cadena2 es peru
Las cadenas no son iguales
92
cout<<"\nel numero de palabras es :"<<palabras(s);
getch();
}
int palabras(char cad[80])
{
int len,p=0,sw=0,i=0;
char ch = ;
len=strlen(cad);
do{
while(cad[i] != ch)
{i++;
sw=1;
}
if(sw==1)
{p++; sw=0;}
while(cad[i]== ch)
i++;
}while(i<len );
return p;
}
Al ejecutar:
En este programa ejecutado en C++, observamos que slo se pueden
enviar arreglos dentro de una funcin, pero estos no pueden ser devueltos
por la funcin, lo cual es un comportamiento inesperado.
4.2.2.3 UNIFORMIDAD
Ejemplo N 6: crear la clase triangulo con constructores y
destructores, tendiendo como datos los lados, y un mtodo que
calcule el rea y el permetro, en C++.
// crear la clase triangulo con constructores y destructores
#include<iostream.h>
#include<string.h>
#include<conio.h>
#include<math.h>
class triangulo{
private:
Ingrese cadena1: hola mundo
La cadena es hola mundo
El nmero de palabras es: 2
93
int lado1;
int lado2;
int lado3;
public:
triangulo(int lad1, int lad2, int lad3);
~triangulo(void);
void mostrar();
};
triangulo::triangulo(int lad1, int lad2, int lad3)
{
lado1=lad1;
lado2=lad2;
lado3=lad3;
}
triangulo::~triangulo(void)
{
cout<<"\n\ndestructor"<<lado1<<","<<lado2<<","<<lado3<<endl;
}
void triangulo::mostrar()
{
float area,p,sp;
p=lado1+lado2+lado3;
sp=p/2;
area=sqrt(sp*(sp-lado1)*(sp-lado2)*(sp-lado3));
cout<<"\n Area:"<<area;
cout<<"\n Perimetro:"<<p;
};
void main()
{triangulo x(6,6,6);
x.mostrar();
getch();
}
Al ejecutar:
Observamos que en C++, no se cumple el principio de uniformidad cuando
definimos clases y funciones, ya que para clases es necesario el punto y
coma y para definir funciones no.
Class A { }; // se necesita
Int f ( ) { } // no se necesita ;
rea: 15.5885
Permetro: 18
94
4.2.3 PRINCIPIOS ADICIONALES SOBRE DISEO DE LOS LENGUAJES
4.2.3.1 EXTENSIBILIDAD
Ejemplo N 7: Realizar un programa en java, que cree la clase
Cuadrado, teniendo como dato el lado y un mtodo que calcule el
rea y el permetro.
package lenguaje1;
import biblioteca.*;
public class cuadrado {
int lado;
public cuadrado(int l){
lado = l;
}
public void calcular(){
int area;
int perimetro;
area=lado*lado;
perimetro=4*lado;
LE.mostrarInformacion("El rea del cuadrado es: "+area);
LE.mostrarInformacion("El perimetro del cuadrado es: "+perimetro);
}
public static void main (String args[]){
int l;
l=LE.leerInt("Ingrese lado del cuadrado: ");
cuadrado obj = new cuadrado(l);
obj.calcular();
}
}
Al ejecutar:
En este programa escrito en Java, vemos que este Lenguaje permite
adicionar nuevas bibliotecas, en este caso hemos incorporado la biblioteca,
llamada igualmente, que nos permite el manejo sencillo de la entrada de
Ingrese lado del cuadrado: 6
Aceptar Cancelar
El rea del cuadrado es: 36
Aceptar
El permetro del cuadrado es: 24
Aceptar
95
datos (con cuadros de texto) y hacer el programa ms simple que si
usamos solo la biblioteca JDK.
import biblioteca.*;
Este crecimiento es conocido como extensibilidad porque permite agregar
caractersticas a un Lenguaje.
4.3 SEMANTICA BASICA
4.3.1 SOBRECARGA DE FUNCIONES
Ejemplo N 8: Realizar un programa en C++ que realice la suma de
arreglos de tipo entero y arreglos de tipo real. Usando sobrecarga de
funciones.
float suma_arreglo(float *arreglo, int numero_de_elementos)
{ float suma = 0.0;
for (int i = 0; i < numero_de_elementos; i++)
suma += arreglo[i];
return(suma);
}
long suma_arreglo(int *arreglo, int numero_de_elementos)
{ long suma = 0L;
for (int i = 0; i < numero_de_elementos; i++)
suma += arreglo[i];
return(suma);
}
void main(void)
{ int arreglo_entero[5] = {1, 2, 3, 4, 5};
float arreglo_flotante[5] = {1.1, 2.2, 3.3, 4.4, 5.5};
cout << "Arreglo de valores de numeros enteros: "
<<suma_arreglo(arreglo_entero, 5) << endl;
cout << "Arreglo de valores de numeros flotantes: "
<<suma_arreglo(arreglo_flotante, 5) << endl; }
Al ejecutar:
En este caso hay 2 funciones suma que realizan la suma de arreglos
enteros y reales, ambas funciones se llaman suma_arreglo, sin embargo
observamos algunas diferencias:
Arreglo de valores de nmeros enteros: 15
Arreglo de valores de nmeros flotantes: 16.5
96
1.- Vemos que las funciones tienen diferentes tipos de datos de retorno.
2.- Adems los argumentos de los arreglos tienen diferentes nombres y los
parmetros son variables de tipo puntero a arreglos de diferentes tipos de
datos.
Todo esto ayuda al compilador a determinar cul de las funciones:
suma_arreglo va a utilizar.
4.3.2 SOBRECARGA DE OPERADORES
Ejemplo N 9: Programa en C++, que suma nmeros racionales
usando funciones miembro
/* Operador +,- sobrecargado para racionales usando funciones miembro
racional.cpp*/
#include <iostream.h>
class racional
{ float num, den;
public:
racional(float a= 0,float b=0)
{ num=a; den=b;
}
void leer(); //introducir un racional
void escribir();//visualizar
racional operator +(racional r);
racional operator -(racional r);
};
// lee un racional
void racional::leer()
{
cout << "\nNumerador : "; cin >>num;
cout << "Denominador : "; cin >>den;
}
void racional::escribir()
{
cout << "racional = " <<num << "/ ";
cout << den<<endl;
}
// Suma de racionales
racional racional::operator+(racional r)
{
return racional((r.den*num)+ (den*r.num), den*r.den);
}
// Resta de racionales
racional racional::operator-(racional r)
{
97
return racional((r.den*num) - (den*r.num),den*r.den);
}
void main()
{ racional a,b,c,d;
a.leer();
b.leer();
c=a+b;
d=a-b;
cout<<"\n Suma ";
c.escribir();
cout<<"\n Resta ";
d.escribir();
}
Al ejecutar:
En este programa vemos que el procedimiento para realizar la suma de
nmeros racionales, es diferente a la suma de enteros, pues los racionales
tienen otro comportamiento, que se refleja en el desarrollo de la funcin.
Ejemplo N 10: en este programa en C++, de Sobrecarga de
Operadores, sumamos vectores usando funciones amigas.
#include <iostream.h>
class vector
{
double x, y;
public:
vector(double a= 0,double b=0)
{ x=a; y=b;
}
void leer();
void escribir();
friend vector operator +( vector &v1, vector &v2);
friend vector operator -( vector &v1, vector &v2);
};
void vector::leer()
{
cout << "\neje x : "; cin >>x;
cout << "eje y : "; cin >>y;
}
Numerador : 2
Denominador : 3
Numerador : 1
Denominador : 5
Suma racional = 13/ 15
Resta racional = 7/ 15
98
void vector::escribir()
{
cout << "vector = (" <<x << ", ";
cout << y<< ")" << endl;
}
vector operator +(vector &v1, vector &v2)
{
return vector(v1.x + v2.x,v1.y + v2.y);
}
vector operator -( vector &v1, vector &v2)
{
return vector(v1.x - v2.x,v1.y - v2.y);
}
void main()
{ vector a,b,c,d;
a.leer();
b.leer();
c=a+b;
d=a-b;
c.escribir();
d.escribir();
}
Al ejecutar:
En este programa vemos que la suma de vectores se realiza segn la
definicin de suma de 2 vectores (suma de primeras componentes y suma
de segundas componentes); en este caso se realiza usando funciones
amigas, donde por ejemplo en la expresin:
c=a+b
a y b son vectores, el primer operando a es recibido en el primer parmetro
de la funcin amiga &v1 y b es recibido en el segundo parmetro de la
funcin amiga &v2, producindose la suma de los 2 vectores.
Eje X: 2
Eje Y: 3
Eje X: 5
Eje Y: 1
a + b = (7,4)
a b = (-3,2)
99
Ejemplo N 11: en este programa en C++, sumamos vectores usando
funciones miembro.
// Operador suma sobrecargado para vectores usando funciones miembro
#include <iostream.h>
class vector
{
double x, y;
public:
vector(double a= 0,double b=0)//constructor
{ x=a; y=b;
}
void leer();
void escribir();
vector operator +(vector v);
vector operator -(vector v);
};
void vector::leer()
{
cout << "\neje x : "; cin >>x;
cout << "eje y : "; cin >>y;
}
void vector::escribir()
{
cout << "vector = (" <<x << ", ";
cout << y<< ")" << endl;
}
// Suma de vectores
vector vector::operator+(vector v)
{
return vector(x + v.x, y + v.y);
}
// Resta de vectores
vector vector::operator-(vector v)
{
return vector(x-v.x , y-v.y);
}
void main()
{ vector a,b,c,d;
a.leer();
b.leer();
c=a+b;
d=a-b;
c.escribir();
d.escribir();
}
100
Al ejecutar:
En este programa vemos que la suma de vectores se realiza segn la
definicin de suma de 2 vectores (suma de primeras componentes y
segundas componentes); en este caso se realiza usando funciones
miembro, donde por ejemplo en la expresin:
c=a+b
a y b son vectores, el primer operando a es un argumento implcito (a
cuyas variables miembro x e y se accede directamente) , mientras que el
segundo operando b debe ser pasado como argumento explcito, y se
acceder a sus variables miembro a travs del nombre y el operador
punto (.), Por lo tanto a+ b es equivalente a: x + v.x , y + v.y.
4.4 TIPOS DE DATOS
4.4.1 TIPOS DE DATOS
Ejemplo N 12: en este programa en C++, usamos variables de tipo
esttica, haciendo llamadas a la funcin muestra.
/*func4 ejemplo de variable esttica*/
#include<iostream.h>
void muestra();
void main()
{
int n;
for (n=1;n<4;n++)
{
cout<<"Llamada "<<n<<" a funcion muestra:"<<endl;
muestra();}
}
void muestra()
{ int a=0;
static int b=0;
a=a+1;
b=b+1;
cout<<"a="<<a<<" b="<<b<<endl;
Eje X: 2
Eje Y: 3
Eje X: 5
Eje Y: 1
a + b = (7,4)
a b = (-3,2)
101
}
Al ejecutar:
En este programa observamos que: como b es una variable static,
mantiene su valor y no es limpiada, a diferencia de la variable a que por
ser variable local automtica se limpia en cada llamada a la funcin
muestra. El tipo de dato static permite al compilador asignar memoria con
eficiencia, mejorando la seguridad, confiabilidad y legibilidad.
4.4.2 TIPOS ENUMERADOS
Ejemplo N 13: Programa en C++, que trabaja con datos enumerados
para color
#include <stdio.h>
enum Color {Red,Green,Blue};
enum NewColor {NewRed = 3, NewGreen = 2, NewBlue = 2};
main()
{ enum Color x = Green; /* x is actually 1 */
enum NewColor y = NewBlue; /* y is actually 2 */
x++; /* x is now 2, or Blue */
y--; /* y is now 1 -- not even in the enum
*/
printf("%d\n",x); /* prints 2 */
printf("%d\n",y); /* prints 1 */
return 0; }
Al ejecutar:
En este programa de datos enumerados, al color se le asigna un nmero, y
es tratada como una variable entera. En este caso sus elementos se listan
de manera explcita.
Llamada 1 a funcin muestra:
a=1 b=1
Llamada 2 a funcin muestra:
a=1 b=2
Llamada 3 a funcin muestra:
a=1 b=3
2
1
102
4.4.3 CONSTRUCTORES DE TIPO
4.4.3.1 ARREGLOS Y FUNCIONES
Ejemplo N 14: Programa que crea un arreglo en java y calcula la
mayor edad, la menor edad y la edad promedio.
package lenguaje1;
import biblioteca.*;
public class PrgEdad{
public static void main(String args[]){
int edad[]= new int[10]; // declaracin e inicializacin
int suma=0; //acumulador
int min=0,max=0;
double prom;
String msg=;
// ingreso del vector
for(int i=0;i<10;i++){
edad[i]=LE.leerInt("Ingrese edad:");
}
// recorriendo el vector
for(int i=0;i<10;i++){
suma=suma+edad[i];
if(i==0){
max=edad[i];
min=edad[i];
}
else{
if(edad[i]>max)
max=edad[i];
if(edad[i]<min)
min=edad[i]; }
}
prom=(double) suma/10;
msg+="La suma de las edades es: "+suma;
msg+="\nLa edad maxima es :"+max;
msg+="\nLa edad minima es :"+min;
msg+="\nLa edad promedio es :"+prom;
LE.mostrarInformacion(msg);
}
}
103
Al ejecutar:
21
Observamos que los arreglos de Java siempre se asignan dinmicamente
y el tamao de un arreglo puede especificarse en forma totalmente
dinmica. Adems los ndices son siempre enteros positivos comenzando
en cero
Ejemplo N 15: Programa que crea un arreglo bidimensional en C++,
para calcular la poblacin Nacional de un Pas de 5 Departamentos y
3 distritos por cada Departamento.
#include <conio.h>
#include <iostream.h>
main()
{
int i,j;
long int depart[5][3],pob_dep,pob_tot;
for(i=0;i<5;i++)
{
cout<<"\nDepartamento N "<<(i+1)<<endl;
for(j=0;j<3;j++)
{
cout<<"Poblacin de Provincia N "<<(j+1)<<":";
cin>>depart[i][j];
}
}
pob_tot=0;
for(i=0;i<5;i++)
{
cout<<"\nPoblacin del Departamento N "<<(i+1)<<":";
pob_dep=0;
for(j=0;j<3;j++)
{
104
pob_dep+=depart[i][j];
}
cout<<pob_dep;
pob_tot+=pob_dep;
}
cout<<"\nPoblacin Nacional: "<<pob_tot;
getch();
return 0;
}
Al ejecutar:
En este programa de arreglo bidimensional en C++, un arreglo se define
como un dato esttico, donde se debe asignar el tamao del arreglo, antes
de ejecutar el programa, lo cual separar memoria de acuerdo al tipo de
dato y tamao del arreglo, adems deben guardarse en memoria de
manera consecutiva todos los elementos del arreglo. Adems en C++ no
se puede definir el tamao dinmicamente.
4.4.3.2 PUNTEROS
Ejemplo N 16: Programa que muestra el uso de punteros en C++
//punte9 :mostrar el uso de punteros
#include <stdio.h>
#include <conio.h>
main()
105
{
clrscr();
int i,j,k,m;
int *p;
j=3;
p=&j; //p almacena la direccin de j;
k=*p; //k recibe el valor almacenado en p, es decir 3
i=*p * j; // i=3*3
m=*p * *p; //m=3*3
printf(" i=%d j=%d k=%d m=%d\n",i,j,k,m);
getch();
return 0;
}
Al ejecutar:
En este programa se muestra el uso de punteros, se definen variables de
este tipo, a las que luego se les asigna la direccin de una variable, y luego
mostramos el contenido de la variable puntero, los punteros existen en
C++, pero originan algunos problemas como la visualizacin de la
informacin, en cambio Java no permite punteros, por eso que java es ms
seguro que C++.
4.5 EXPRESIONES Y ENUNCIADOS
4.5.1 ENUNCIADOS IF
Ejemplo N 17: Programa en C++, que realiza la categorizacin de un
estudiante, segn su promedio ponderado.
#include <iostream.h>
void main()
{
float p;
cout<<"CATEGORIZACION DE UN ESTUDIANTE"<<endl;
cout<<"Ingrese el promedio ponderado:";
cin>>p;
if (0<=p && p < 5)
cout<<"categoria D";
else if (5<=p && p < 10)
cout<<"categoria C";
else if (10<=p && p < 15)
cout<<"categoria B";
else if (15<=p && p <=20)
cout<<"categoria A";
else
i= 9 j= 3 k=3 n=9
106
cout<<"Promedio invalido";
}
Al ejecutar:
Este programa utiliza un if anidado, para resolver el problema.
4.5.2 ENUNCIADOS CASE
Ejemplo N 18: Programa en C++, que realiza lo siguiente: Una
empresa ha puesto en oferta tres productos A,B,C cada uno de ellos
en tres calidades diferentes C1,C2, y C3. El costo de cada producto
segn su calidad se da en la tabla:
C1 C2 C3
A 23.50 21.00 19.50
B 32.00 30.00 28.50
C 52.50 61.00 49.00
Adicionalmente la empresa ofrece un descuento del 10% para
compras mayores de S/. 500. Disee un programa que ingrese el
cdigo y la calidad del producto y determine e imprima el monto total
de la compra, el monto del descuento y el monto a pagar.
#include <iostream.h>
#include <ctype.h>
#include <conio.h>
void main()
{
int unidades, calidad;
float precio, montoPag, montoDes, montoCom;
char codigo;
//Ingreso de datos
clrscr();
cout<<"Venta de Productos en Oferta"<<endl;
cout<<" Codigo del producto (A,B,C) ?: ";
cin>>codigo;
codigo = toupper(codigo);
CATEGORIZACIN DE UN
ESTUDIANTE
Ingrese el promedio ponderado: 17
Categora A
107
cout <<" Calidad del producto (1/2/3) ?: ";
cin>>calidad;
cout<<"Numero de unidades compradas ? : ";
cin>>unidades;
//seleccion del precio
switch(codigo)
{
case A :
switch(calidad)
{
case 1: precio =23.50;break;
case 2: precio =21.00;break;
case 3: precio =19.50;break;
}
break;
case B :
switch(calidad)
{
case 1: precio =32.00;break;
case 2: precio =30.00;break;
case 3: precio =28.50;break;
}
break;
case C :
switch(calidad)
{
case 1: precio =52.50;break;
case 2: precio =51.00;break;
case 3: precio =49.00;break;
}
break;
}
//calculo de los montos
montoCom = unidades*precio;
montoDes = 0;
if(montoCom > 500)
montoDes = 0.10 * montoCom;
montoPag = montoCom - montoDes;
//salida de los resultados
cout<<"\nMonto de la Compra : "<<montoCom;
cout<<"\nMonto del descuento : "<<montoDes;
cout<<"\nMonto a Pagar : "<<montoPag;
getch();
}
108
Al ejecutar:
Cuando dada una condicin existen muchas alternativas.
La estructura de decisin mltiple evaluar una expresin que podr tomar
n valores distintos 1,2,3...n, segn que elija uno de estos valores en la
condicin, se realizar slo una de las n acciones.
4.5.3 ENUNCIADOS WHILE
Ejemplo N 19: Programa en C++, que solicite varios nmeros y
calcula y visualcela media. Use -999 como fin de proceso.
#include <iostream.h>
void main()
{
int conta, suma, num;
float media;
conta = 0;
suma = 0;
cout<<"\nIngrese numero:";
cin>>num;
while (num != -999)
{
suma =suma+num;
conta=conta+1;
cout<<"\nIngrese numero:";
cin>>num;
}
media=float(suma) / float(conta);
cout<<"\n la media es:"<<media;
}
109
Al ejecutar:
En este programa usamos una iterativa condicionada, para poder salir de
este ciclo, c incluye la opcin break para salir por completo y un enunciado
continue que ignora una instancia y contina evaluando la expresin.
4.5.4 ENUNCIADOS FOR
Ejemplo N 20: Este programa en C++, utiliza un for, para mostrar los
nmeros enteros entre 50 y 100.
#include <iostream.h>
void main()
{
int i;
for(i=50; i<=100; i++)
cout<<"\t"<<i;
}
110
Al ejecutar:
La sentencia for, se ejecuta desde un valor inicial hasta un valor final,
segn un incremento automtico. Es la sentencia ideal para procesar
arreglos.
4.5.5 EXCEPCIONES EN JAVA
Ejemplo N 21: Este programa en Java, muestra algunas excepciones
al dividir por cero.
class ExcDemo3 {
public static void main(String args[]) {
int numer[] = { 4, 8, 16, 32, 64, 128 };
int denom[] = { 2, 0, 4, 4, 0, 8 };
for(int i=0; i<numer.length; i++) {
try {
System.out.println(numer[i] + " / " +
denom[i] + " is " +
numer[i]/denom[i]);
}
catch (ArithmeticException exc) {
// atrapa la exception
System.out.println("No puede dividir por cero!");
}
}
}
}
111
Al ejecutar:
En este programa en Java, vemos que el bloque Try..catch, no permite
dividir por cero. Las excepciones evala cualquier evento inesperado,
como por ejemplo: dividir por cero; que generalmente se dan en tiempo de
ejecucin.
Ejemplo N 22: Este programa en Java, muestra algunas excepciones
cuando se genera un ndice fuera del lmite.
Manejo de excepciones 2 (java)
class ExcDemo2 {
public static void main(String args[]) {
int nums[] = new int[4];
try {
System.out.println("Antes de generar la excepcion.");
// Genera un ndice fuera del lmite.
nums[7] = 10;
System.out.println("Esto no ser mostrado");
}
catch (ArrayIndexOutOfBoundsException exc) {
// atrapa la excepcion
System.out.println("Indice fuera de limite!");
}
System.out.println("Despues de atrapar la declaracin.");
}
Al ejecutar:
Al ejecutar:
En este programa en Java, vemos que el bloque Try..catch, no permite
ndices fuera de rango.
4 / 2 is 2
No puede dividir por cero!
16 / 4 is 4
32 / 4 is 8
No puede dividir por cero!
128 / 8 is 16
Press any key to continue...
Antes de generar la excepcin.
Indice fuera de limite!
Despues de atrapar la
declaracin.
BUILD SUCCES
112
4.6 PROCEDIMIENTOS Y AMBIENTES
4.6.1 FUNCIONES SIN PASE DE PARAMETROS
Ejemplo N 23: Programa en C++, que utiliza funciones sin pases de
parmetros, para calcular el rea de la esfera.
/* func2-utiliza funciones sin pases de parmetros */
#include<conio.h>
#include<math.h>
#include<iostream.h>
float r,a; /* variables globales*/
void ingreso();
void salida();
//funcion principal
void main()
{
ingreso();
salida();
}
/*rutinas*/
void ingreso()
{
cout<<"Ingrese radio de la esfera: ";
cin>>r;
a=4*M_PI*r*r;
}
void salida()
{
cout<<"el area de la esfera es:"<<a<<endl;
}
Al ejecutar:
En un programa sin pase de parmetros, lo que se realiza es una serie de
rdenes y divide el programa en pequeas partes, que son reportadas al
programa principal, quin lleva el control, pero no se est obligado a
retornar nada. Los procedmientos surgieron cuando escaseaba la
memoria.
En C++ se usa la funcin void( ), que es la excepcin de las funciones,
porque no est obligada a retornar nada.
Ingrese radio de la esfera: 2
el area de la esfera es: 50.26
113
4.6.2 FUNCIONES CON PASE DE PARAMETROS POR VALOR
Ejemplo N 24: Programa en C++, que calcula el rea del rectngulo,
utilizando una funcin con pase de parmetros por valor.
#include <iostream.h>
#include <conio.h>
#include<iomanip.h>
float area (float x, float y);
void main()
{float base,altura,r;
cout<<"\nIngrese base y altura:";
cin>>base>>altura;
r=area(base,altura);
cout<<"el rea del rectngulo es: "<<setprecision(2)<<r;
getch();}
/* funcin rea */
float area(float x, float y)
{return(x*y);}
/* funcin rea */
float area(float x, float y)
{return(x*y);}
Al ejecutar:
En un programa con pase de parmetros, lo que se realiza es una serie de
rdenes, que son ejecutadas por la funcin, que requiere parmetros, para
resolver el problema, una vez resuelto el problema se retorna el valor
solucin, el cual es nico, por definicin de funcin.
Los argumentos que pasan por valor son copiados en otras variables o
parmetros y cualquier cambio en los parmetros no afectan a los
argumentos.
4.6.3 FUNCIONES CON PASE DE PARAMETROS POR REFERENCIA
Ejemplo N 25: Programa en C++, que calcula el rea y permetro de
un rectngulo, utilizando una funcin con pase de parmetros por
referencia.
#include <stdio.h>
Ingrese base y altura: 2 3
el rea del rectngulo es: 6
114
#include <conio.h>
#include <iostream.h>
void rectangulo(float ancho, float alto, float &area, float &perim);
void main()
{ float Area, perimetro, Ancho, Alto;
clrscr();
cout<<area y perimetro de un rectangulo\n;
cout<<\nIngrese el ancho:; cin>>Ancho;
cout<<\nIngrese la altura:; cin>>Alto;
rectangulo(Ancho, Alto, Area, perimetro);
cout<<El area es:<<Area<< y perimetro es:<<perimetro;
getch();}
/*el retorno es void porque no vamos a retornar nada*/
void rectangulo(float ancho, float alto, float &area, float &perim)
{area=ancho*alto;perim= 2*(ancho + alto);}
Al ejecutar:
En un programa con pase de parmetros por Referencia, lo que se realiza
es una serie de rdenes, que son ejecutadas por la funcin, que requiere
parmetros que pasan por referencia, para resolver el problema, una vez
resuelto el problema si se us una funcin tipo void () no est obligada a
retornar nada, y los argumentos que pasan por referencia son
automticamente actualizados, porque lo que se ha copiado es la direccin
en memoria de la variable. Se copian las direcciones de los argumentos
que pasan por referencia y cualquier cambio en los parmetros modifican a
los argumentos.
4.7 TIPOS DE DATOS ABSTRACTOS Y MODULOS
4.7.1 CLASES
Ejemplo N 26: Programa en C++, que calcula rea y permetro de un
tringulo, usando mtodos sin pase de parmetros para inicializar los
objetos.
area y perimetro de un rectangulo
Ingrese el ancho: 2
Ingrese la altura: 3
El area es: 6 y perimetro es; 10
115
#include <iostream.h>
class triangulo{
int lado1, lado2, lado3;
public:
void inicializa();
void mostrar();
};
void triangulo::inicializa()
{
cout<<"lado1:";cin>>lado1;
cout<<"lado2:";cin>>lado2;
cout<<"lado3:";cin>>lado3;
};
void triangulo::mostrar()
{
float area,p,sp;
p=lado1+lado2+lado3; sp=p/2;
area=sqrt(sp*(sp-lado1)*(sp-lado2)*(sp-lado3));
cout<<"\n Area:"<<area<<" Perimetro:"<<p;
};
void main()
{triangulo x;
x.inicializa();
x.mostrar();}
Al ejecutar:
En este programa se utiliza el concepto de clases, se define la clase
tringulo con sus datos y mtodos, los mtodos son funciones sin pase de
parmetros para inicializar un objeto. Una clase es un tipo de TAD que
encapsula en una sola estructura los datos y los mtodos.
Ejemplo N 27: Programa en C++, que calcula rea y permetro de un
tringulo, usando mtodos con pase de parmetros para inicializar
los objetos.
#include<iostream.h>
#include<math.h>
class triangulo{
private:
int lado1;
Lado1:3
Lado2:3
Lado3:2
Area: 2.82843
Permetro: 8
116
int lado2;
int lado3;
public:
void inicializa(int l1, int l2, int l3);
void mostrar();
};
void triangulo::inicializa(int l1, int l2, int l3)
{
lado1 = l1;
lado2 = l2;
lado3 = l3;
};
void triangulo::mostrar()
{
float area,p,sp;
p=lado1+lado2+lado3;
sp=p/2;
area=sqrt(sp*(sp-lado1)*(sp-lado2)*(sp-lado3));
cout<<"\n Area:"<<area;
cout<<"\n Perimetro:"<<p;
};
void main()
{triangulo x;
x.inicializa(2,2,2);
x.mostrar();
}
Al ejecutar:
En este programa se utiliza el concepto de clases, se define la clase
tringulo con sus datos y mtodos, los mtodos son funciones con pase de
parmetros para inicializar un objeto.
4.7.2 LISTAS ENLAZADAS
Ejemplo N 28: Algoritmo que tome una lista enlazada de enteros e
invierta el orden de sus nodos.
inicio
Sw=0
P primero
I 1
Repetir mientras (p <> nill)
Hacer
C[i] p
Area: 1.73205
Permetro: 6
117
B[i] valor (p)
P sgte(p)
I i + 1
Fin-hacer
Repetir con i desde i hasta 1 decremento 1
Hacer
Si (sw = 0) entonces
Primero C[i]
P primero
sw 1
fin_si
asgsval ( C[i], B[i])
si (i <> 1) entonces
assgsig(C[i], C[i-1])
sino
assgsig(C[i], *)
fin_si
fin_hacer
fin
En este algoritmo una lista enlazada es invertida, en el orden de sus
nodos. Las listas enlazadas son estructuras dinmicas de memoria que
permite adquirir y liberar memoria en tiempo de ejecucin.
4.7.4 COLAS
Ejemplo N 29: Programa en C++, que inicializa 2 colas, usando
mtodo constructor, e inserta y elimina elementos.
/* cola2-demuestra el paso de argumentos a las funciones
constructoras*/
#include <iostream.h>
#include <conio.h>
// esto crea la clase cola
class cola {
int c[100];
int ppio, fin;
int quien;//guarda el numero de la cola ID
118
public:
cola(int id);//constructor
~cola(void);//destructor
void meter(int i);
int sacar(void);
};
//Esta es la funcion constructora
cola::cola(int id)
{
fin=ppio=0;
quien=id;
cout<<"cola "<<quien<<" incializada\n";
}
//Esta es la funcion destructora
cola::~cola(void)
{
cout<<"cola "<<quien<<" destruida\n";
}
void cola::meter(int i)
{
if (ppio==100){
cout <<"la cola esta llena";
return;
}
ppio++;
c[ppio]=i;
}
int cola::sacar(void)
{
if(fin==ppio) {
cout <<" la cola esta vacia";
return 0;
}
fin++;
return c[fin];
}
//programa principal
main(void)
{
cola a(1), b(2);// crea dos objetos cola
a.meter(10);
b.meter(19);
a.meter(20);
b.meter(1);
cout <<a.sacar() <<" " ;
cout <<a.sacar() <<" " ;
cout <<b.sacar() <<" " ;
cout <<b.sacar() <<"\n" ;
119
getch();
return 0;
}
Al ejecutar:
Programa que crea 2 colas, y utiliza los mtodos de insercin y
eliminacin de elementos, usando un comportamiento FIFO, primero en
entrar, primero en salir. Tambin son estructuras dinmicas.
4.8 PROGRAMACIN ORIENTADA A OBJETOS
4.8.1 HERENCIA
Ejemplo N 30: Programa en C++, que utiliza el concepto de herencia
para crear la clase barco.
#include <iostream.h>
#include <stdio.h>
class barco{
float largo; float capacidad; float peso; float velocidad;
public: barco();
void mostrarbarco();
};
class mercante:public barco{
char turbina[18];
public: mercante();
void mostrarmercante();};
class pesca:public barco{
char motor[18];
public: pesca();
void mostrarpesca();
};
barco::barco()
{ cout<<"\nIngresar largo en metros: ";cin>>largo;
cout<<"\nIngresar capacidad de personas : ";cin>>capacidad;
cout<<"\nIngresar peso en Kg: ";cin>>peso;
cout<<"\nIngresar velocidad en m/h : ";cin>>velocidad;
};
void barco:: mostrarbarco()
{ cout<<"\nlongitud del barco: "<<largo<<"m";
Cola 1 inicializada
Cola 1 inicializada
10 20 19 1
120
cout<<"\ncapacidad del barco: "<<capacidad<<"personas";
cout<<"\npeso del barco: "<<peso<<"Kg";
cout<<"\nvelocidad del barco: "<<velocidad<<"m/h";
}
mercante::mercante():barco()
{ cout<<"\nIngresar turbina del barco: ";
gets(turbina);
}
void mercante::mostrarmercante()
{ mostrarbarco();
cout<<"\nla turbina del barco es:";
cout<<turbina;
}
pesca::pesca():barco()
{ cout<<"\nIngrese motor: ";gets(motor);
}
void pesca::mostrarpesca()
{ mostrarbarco();
cout<<"\nEl motor del barco es:";
cout<<motor;
}
void main()
{ cout<<"\nIngrese datos del barco";
barco titanic;
cout<<"\nIngrese datos del barco mercante";
mercante n1;
cout<<"\nIngrese datos del barco de pesca";
pesca n2;
cout<<"\n\n\nMostrando datos de:";
cout<<"\n\nBarco: ";
titanic.mostrarbarco();
cout<<"\n\n\nBarco mercante: ";
n1.mostrarmercante();
cout<<"\n\nBarco de pesca: ";
n2.mostrarpesca();
}
121
Al ejecutar:
En este programa, se comprueba el concepto de herencia, donde las
clases derivadas: mercante y pesca, heredan de la clase base barco. Las
clases derivadas mercante y pesca heredan todos los datos y mtodos de
la clase base barco, pero tambin incorporan sus propios mtodos y datos.
La herencia permite la reutilizacin del software.
Ejemplo N 31:
Usando Herencia, crear la clase base Empleado, que recopila y
proporciona informacin del nombre, direccin, fecha de nacimiento, titulo-
puesto, salario.
Se crean dos clases derivadas similares. Una de ellas mantiene
informacin sobre el Ingeniero, mientras que la otra mantiene informacin
de la Secretaria.
La clase derivada: Ingeniero, recopila y proporciona informacin adems
de las que proporciona su clase base Empleado de: especialidad.
La clase derivada: Secretaria, recopila y proporciona informacin adems
de las que proporciona su clase base Empleado de: velocidad_tipeo.
Crear los objetos de las clases derivadas, usando constructores, y una
funcin mostrar(), tanto para la clase base, como para las clases
Barco
longitud del barco: 12 metros
capacidad del barco: 50 pasajeros
peso del barco: 1000 kg
velocidad del barco: 20 m/h
Barco Mercante
longitud del barco: 15 metros
capacidad del barco: 50 pasajeros
peso del barco: 1500 kg
velocidad del barco: 30 m/h
turbina: 2
Barco de pesca
longitud del barco: 5 metros
capacidad del barco: 5 pasajeros
peso del barco: 500 kg
velocidad del barco: 15 m/h
motor: Diesel
122
derivadas, que simplemente muestren todos los elementos de dichas
clases.
Empleado
Char nombre [60]
Char Domicilio [60]
char Fech_nacim [20]
char titulo_puesto [15]
float salario
Empleado
mostrar_empleado()
Ingeniero Secretaria
Char especialidad [20] int velocidad_tipeo
Ingeniero Secretaria
Mostrar_Ingeniero() Mostrar_Secretaria()
Figura 4.1 Representacin grfica de la clase empleado. Fuente: autor
// Programa empleado.h
#ifndef EMPLEADO_H
#define EMPLEADO_H
#include<iostream.h>
class empleado{ char nombre [60];
char domicilio [60];
char fechanac [20] ;
char titulo [15] ;
float salario;
public:
empleado(){
cout<<"\nIngresar Nombre....................: ";cin>>nombre;
cout<<"\nIngrese Domicilio..................: ";cin>>domicilio;
cout<<"\nIngresar Fecha de Nacimiento.......: ";cin>>fechanac;
cout<<"\nIngresar Ttulo-Puesto.............: ";cin>>titulo;
cout<<"\nIngresar Salario...................: ";cin>>salario;
};
void mostrarempleado(){
cout<<"\nNombre.............................: "<<nombre;
cout<<"\nDomicilio..........................: "<<domicilio;
cout<<"\nFecha de Nacimiento................: "<<fechanac;
cout<<"\nTtulo-Puesto......................: "<<titulo;
cout<<"\nSalario............................: "<<salario;
};
};
123
#endif
// Programa ingenier.h
#ifndef INGENIER_H
#define INGENIER_H
#include<iostream.h>
#include "empleado.h"
class ingeniero:public empleado{ char especialidad[20];
public: ingeniero(){
cout<<"\nIngresar Especialidad..............: ";cin>>especialidad;
};
void mostraringeniero(){
mostrarempleado();
cout<<"\nEspecialidad.......................: "<<especialidad;
};
};
#endif
// Programa secretar.h
#ifndef SECRETAR_H
#define SECRETAR_H
#include<iostream.h>
#include "empleado.h"
class secretaria:public empleado{int velocidad ;
public: secretaria(){
cout<<"\nIngresar Velocidad de Tipeo........: ";cin>>velocidad;
};
void mostrarsecretaria(){ mostrarempleado();
cout<<"\nVelocidad de Tipeo.................: "<<velocidad;
};
};
#endif
// Programa total_h
#ifndef TOTAL_H
#define TOTAL_H
#include "secretar.h"
#include "ingenier.h"
#endif
// Programa trabajo.cpp
#include<iostream.h>
#include "total.h"
124
void main()
{ cout<<"\nIngrese datos del Empleado";
empleado c1;
cout<<"\nIngrese datos del Ingeniero";
ingeniero a1;
cout<<"\nIngrese datos de la Seretaria";
secretaria n2;
cout<<"\n\n\nMostrando datos de:";
cout<<"\n\nEmpleado: ";
c1.mostrarempleado();
cout<<"\n\n\nIngeniero: ";
a1.mostraringeniero();
cout<<"\n\nSecretaria: ";
n2.mostrarsecretaria();
}
Al ejecutar:
En este programa en C++, se hace uso de libreras, para compilar las
clases derivadas y la clase base por separado, asimismo el programa
principal tambin es compilado por separado. Se utiliza el concepto de
Herencia: clase Base y clases Derivadas.
125
4.8.2 HERENCIA MULTIPLE
Ejemplo N 32: Programa en C++, que crea la clase derivada paquete
que hereda de las clases bases: disco y libro.
#include <iostream.h>
class libro {
public:
libro(char *titulo, char *autor, int paginas);
void mostrar_libro(void);
private:
char titulo[64];
char autor[64];
int paginas;};
class disco {
public:
disco(float capacidad);
void mostrar_disco(void);
private:
float capacidad;
class paquete : public libro, public disco {
public:
paquete(char *titulo, char *autor,
int paginas, float capacidad, float precio);
void mostrar_paquete(void);
private:
float precio;
};
//constructor de libros
libro::libro(char *titulo, char *autor, int paginas)
{ strcpy(libro::titulo, titulo);
strcpy(libro::autor, autor);
libro::paginas = paginas; }
void libro::mostrar_libro(void)
{ cout << "Titulo: " << titulo << endl;
cout << "Autor: " << autor << endl;
cout << "Paginas: " << paginas << endl; }
//constructor de disco
disco::disco(float capacidad)
{ disco::capacidad = capacidad; }
void disco::mostrar_disco(void)
{ cout << "Capacidad: " << capacidad << "Mb" << endl; }
//constructor de paquete
paquete::paquete(char *titulo, char *autor, int paginas,
float capacidad, float precio) : libro(titulo, autor, paginas),
disco(capacidad)
{ paquete::precio = precio; }
126
//paquete hereda de libro y disco
void paquete::mostrar_paquete(void)
{ mostrar_libro();
mostrar_disco();
cout << setprecision(2) << "Precio: $"
<< precio << endl; }
void main(void)
{ paquete este_libro("1001 Consejos Sobre C/C++,"Jamsa", 896, 1.44,
39.95);
este_libro.mostrar_paquete();
};
Al ejecutar:
En este programa, observamos que la clase paquete hereda de sus clases
bases disco y libo, es decir hereda de 2 clases bases, pero adems la
clase paquete tiene sus propios datos y mtodos.
En este ejemplo se combinan las interfaces pblicas de dos clases
diferentes en una sola subclase.
4.8.3 CONSTRUCTORES
Ejemplo N 33: Programa en C++, que crea una clase tringulo, y
calcula el rea y el permetro, usando como dato los lados y
constructores sin pase de parmetros.
#include <iostream.h>
class triangulo{
private:
int lado1, int lado2, int lado3;
public:
triangulo();
~triangulo(void);
void mostrar();
};
triangulo::triangulo()
{cout<<"lado1:";cin>>lado1;
cout<<"lado2:";cin>>lado2;
Ttulo: 1001 consejos sobre C/C++
Autor: Jamsa
Pginas: 896
Capacidad: 1.44 MB
Precio: $40
127
cout<<"lado3:";cin>>lado3;
};
triangulo::~triangulo(void)
{cout<<"\n\ndestructor de triangulo<<endl;
};
void triangulo::mostrar()
{float area,p,sp;
p=lado1+lado2+lado3; sp=p/2;
area=sqrt(sp*(sp-lado1)*(sp-lado2)*(sp-lado3));
cout<<"\n Area:"<<area<<" Perimetro:"<<p;
};
void main()
{triangulo x;
x.mostrar();}
Al ejecutar:
En este programa se inicializan los objetos usando mtodos constructores,
en este caso un mtodo con un constructor sin pase de parmetros, el
constructor inicializa los objetos automticamente, no necesitan ser
invocados. Usamos constructores que es una de las ventajas en C++ para
inicializar objetos.
Ejemplo N 34: Programa en C++, que crea una clase tringulo, y
calcula el rea y el permetro, usando como dato los lados y
constructores con pase de parmetros.
#include <iostream.h>
class triangulo{
int lado1, lado2, lado3;
public:
triangulo(int lad1, int lad2, int lad3);
~triangulo(void);
void mostrar();
};
triangulo::triangulo(int lad1, int lad2, int lad3)
Lado1:3
Lado2:3
Lado3:2
Area: 2.82843
Permetro: 8
Destructor de triangulo de lados: 3,3,2
128
{lado1=lad1; lado2=lad2; lado3=lad3; };
triangulo::~triangulo(void)
{
cout<<"destructor de triangulo de
lados:"<<lado1<<","<<lado2<<","<<lado3;
};
void triangulo::mostrar()
{float area,p,sp;
p=lado1+lado2+lado3; sp=p/2;
area=sqrt(sp*(sp-lado1)*(sp-lado2)*(sp-lado3));
cout<<"\n Area:"<<area<<" Perimetro;"<<p;
};
void main()
{triangulo x(6,6,6);
x.mostrar();
Al ejecutar:
En este programa se inicializan los objetos usando mtodos constructores,
en este caso un mtodo con un constructor con pase de parmetros, el
constructor inicializa los objetos automticamente, no necesitan ser
invocados.
4.8.4 CONSTRUCTORES MLTIPLES
Ejemplo N 35: Programa en C++, que tiene 2 constructores con el
mismo nombre, para inicializar un tipo de dato cadena.
#include <iostream.h>
class mensaje {
char mensaje_secreto[64];
public:
mensaje(char *mensaje_del_usuario);
mensaje(void);
void mostrar_mensaje(void);
};
mensaje::mensaje(char *mensaje_del_usuario)
{ strcpy(mensaje_secreto, mensaje_del_usuario);
}
mensaje::mensaje(void)
{ strcpy(mensaje_secreto, "Hola mundo");
Area: 15.5885
Permetro: 18
Destructor de triangulo de lados: 6,6,6
129
}
void mensaje::mostrar_mensaje(void)
{ cout << "El mensaje es " << mensaje_secreto << endl;
}
void main(void)
{ mensaje saludo;
mensaje libro("Exito con C++");
saludo.mostrar_mensaje();
libro.mostrar_mensaje(); }
Al ejecutar:
En este programa se utiliza constructores mltiples, uno con pase de
parmetros y otro sin pase de parmetros, el compilador selecciona el
constructor a usar de acuerdo a este criterio.
4.9 PROGRAMACION LOGICA
Ejemplo N 36: Usted est iniciando una noche tranquila cuando un
viejo amigo le llama y le dice que viene a cenar. Por lo cual usted
inmediatamente comienza a hacer los preparativos correspondientes
y usted posee un Sistema Experto para seleccionar las bebidas.
Las Reglas que identifican a su Experto en bebidas son las siguientes:
B1 If es Ao Nuevo
THEN un vino es lo indicado.
B2 If un vino caro es el indicado AND el plato principal es Carne
Roja(Steak)
THEN seleccionnar Chateau Earl of Bartoville Red.
B3 If un vino barato es el indicado AND plato principal es Pollo AND el
invitado no es bien visto
THEN seleccione Honest Henrys Apple Wine.
B4 If un vino barato es el indicado AND plato principal desconocido
THEN seleccionar Toe Lokes Roses.
B5 If cerveza es lo indicado AND el plato principal es Mexicano
THEN seleccionar xx.
El mensaje es hola mundo
El mensaje es xito con C++
130
B6 If cerveza es lo indicado THEN seleccionar Tecate.
B7 If el invitado es escrupuloso con los alimentos
THEN seleccionar Glop.
B8 If el invitado es escrupuloso AND no se sirven zanahorias
THEN seleccionar Jugo de Zanahoria.
B9 If vino es lo indicado AND la visita debe de ser impresionada
THEN un vino caro es lo indicado.
B10 If un vino es lo indicado
THEN un vino barato es lo indicado.
B11 If el invitado es sofisticado
THEN vino es lo indicado.
B12 If el plato principal es mexicano
THEN cerveza es lo indicado.
B13 If el invitado es indeseable AND el plato principal es comprado ala
Abastecedora el Buen Morir
THEN cerveza es lo indicado.
B14 If el Plato principal no importa es cualquier cosa
THEN seleccione agua.
Asumiendo que se dan los siguientes hechos como sabidos:
1. El plato principal es comprado a la Abastecedora el Buen Morir.
2. El plato principal es Mexicano.
3. El invitado es indeseable (no bien visto)
4. Es Ao Nuevo.
5. El plato principal es Pollo.
Problema. Mostrar la secuencia en que las Reglas son usadas y diga
cuando son disparadas.
Respuesta
Con el dato 4 se dispara regla 1.
7. El vino es lo indicado.
Con el dato 7 se dispara regla 10.
8. Un vino barato es lo indicado.
Con el dato 3,6,8 se dispara regla 3.
9. Seleccionar Honest Henrys
Con el dato 2 se dispara regla 12.
10. Cerveza es lo indicado.
Con el dato 10, 2 se dispara regla 5.
11. xx
Con el dato 10 se dispara regla 6.
2. Tecate
131
Con el dato 1, 3 se dispara regla 13.
3.Cerveza es lo indicado
En este caso, vemos como dado un conjunto de hechos conocidos, sel
disparan nuevas reglas. Y as sucesivamente hasta llegar a una
conclusin.
Ejemplo N 37: Programa en visual prolog, que ejecuta algunas metas
por rangos (<, >)
/*PROGRAMA 2 Dominios y predicados
carros.pro*/
DOMAINS
marca,color=symbol
antiguedad,precio=integer
kilometraje=real
PREDICATES
nondeterm carro(marca,kilometraje,antiguedad,color,precio)
CLAUSES
carro(chrysler,130000,3,rojo,12000).
carro(ford,9000,4,plomo,25000).
carro(datsun,8000,1,rojo,30000).
carro(volkswagen,7000,2,rojo,25000).
GOAL
%carro(Fabricante,Kilometraje,Aos_usados,Color,25000).
% carros que cuestan menos de 25000
%carro(Fabricante,Kilometraje,Aos_usados,Color,Costo), Costo < 25000.
% variables annimas
carro(_,Kilometraje,Aos_usados,_,Costo), Costo < 30000.
Al Ejecutar:
Ejemplo 4
Este programa muestra variables annimas, que son escritas con un
simple carcter subrayado _. Es una variable que no nos interesa
visualizar y que son usadas en hechos, metas.
Kilometraje=130000, Aos_usados=3,
Costo=12000
Kilometraje=9000, Aos_usados=4,
Costo=25000
Kilometraje=7000, Aos_usados=2,
Costo=25000
3 Solutions
132
Ejemplo N 38: Programa en visual prolog, que muestra los nmeros
que se encuentran entre A y B, usando Recursividad.
domains
numero = integer
predicates
nondeterm esta_entre(numero,numero)
clauses
esta_entre(A,B):- A=B, write(A),nl.
esta_entre(A,B):- A<B,
M = A +1,
write(A),nl, esta_entre(M,B).
goal
esta_entre(10,16).
Al ejecutar:
En este programa se muestra los nmeros del 10 al 16, usando una
funcin recursiva. Una funcin recursiva es una funcin que se llama a si
misma, hasta que alcanza un caso base, donde se retorna.
Ejemplo N 39. Programa en visual prolog, que ejecuta la regla a quin
le gusta el tenis.
%PROGRAMA3: alumno.pro Metas
/*Programa 1*/
DOMAINS
persona,actividad=symbol
PREDICATES
le_gusta(persona,actividad)
CLAUSES
% hechos
le_gusta(hellen,tenis).
le_gusta(hellen,computacion).
le_gusta(john,futbol).
10
11
12
13
14
15
16
yes
133
le_gusta(tom,beisbol).
le_gusta(eric,natacion).
le_gusta(mark,tenis).
% reglas
le_gusta(bill,X):-le_gusta(tom,X).
GOAL
%le gusta a hellen el tenis
%le_gusta(hellen,tenis).
%le gusta a bill el beisbol?
%le_gusta(bill,beisbol).
%Qu le gusta a hellen?
%le_gusta(hellen,X).
%A quin le gusta el tenis?
le_gusta(Who,tenis).
Al ejecutar:
En este programa en Visual Prolog, se ejecuta la regla: a quin le gusta el
tenis, y al ejecutar nos responde que son hellen y mark.
Ejemplo N 40: Este programa en visual prolog demuestra cmo
puede usar not para identificar un estudiante de honor:
Uno cuyo promedio de grado (GPA) es al menos 3.5 y que no est en
prueba
DOMAINS
name = symbol
GPA = real
PREDICATES
nondeterm honor_student(name)
nondeterm student(name, gpa)
probation(name)
CLAUSES
honor_student(Name):-
student(Name, GPA),
GPA>=3.5,
not(probation(Name)).
student("Betty Blue", 3.5).
student("David Smith", 2.0).
student("John Johnson", 3.7).
probation("Betty Blue").
Who = hellen
Who = mark
2 solutions
134
probation("David Smith").
GOAL
honor_student("John Johnson").
Al ejecutar:
En este programa a la pregunta si John Johnson es un estudiante de
honor, la respuesta es yes.
Ejemplo N 41: Este programa en visual prolog muestra las Reglas
para sacar dinero de un cajero automtico.
DOMAINS
estado=symbol
PREDICATES
tarjeta_verificada(estado)
fecha_expirada(estado)
nip_correcto(estado)
intentos_excedidos(estado)
balance_suficiente(estado)
limite_excedido(estado)
pago_autorizado(estado,estado,estado,estado,estado,estado,estado)
CLAUSES
tarjeta_verificada(A):-A="si".
fecha_expirada(B):-B="no".
nip_correcto(C):-C="si".
intentos_excedidos(D):-D="no".
balance_suficiente(E):-E="si".
limite_excedido(F):-F="no".
pago_autorizado(A,B,C,D,E,F,Mensaje):- tarjeta_verificada(A),
fecha_expirada(B),
nip_correcto(C),
intentos_excedidos(D),
balance_suficiente(E),
limite_excedido(F),
Mensaje="Pago autorizado".
GOAL
write("\n\t\tC A J E R O A U T O M A T I C O"),
write("\nReglas para sacar dinero de un cajero automtico"),nl,nl,
write("\nIngrese tarjeta_verificada (si/no) : "),readln(A),
write("\nIngrese Fecha_expirada (si/no) : "),readln(B),
write("\nIngrese nip_correcto (si/no) : "),readln(C),
write("\nIngrese intentos_excedidos (si/no) : "),readln(D),
write("\nIngrese balance_suficiente (si/no) : "),readln(E),
write("\nIngrese limite_excedido (si/no) : "),readln(F),
yes
135
write("\n p e n s a n d o..."),nl,
pago_autorizado(A,B,C,D,E,F,Mensaje).
Al ejecutar:
En este programa en Visual Prolog, se deben conocer previamente las
reglas necesarias para sacar dinero de un cajero automtico, este
conocimiento lo proporciona el experto en Bancos, y a partir de este
conocimiento se crea una Base de Conocimientos.
4.10 PROGRAMACION ALGEBRAICA
Ejemplo 42:
Cree un procedimiento almacenado paexamen_final que reciba 3
parmetos (@cod_curso, @cod_alumno, @ciclo) y que al ejecutarse
de cmo resultado el reporte que se muestra.
Exec pa_examen_final c0004, a0001, 2007-10
C A J E R O A U T O M A T I C O
Reglas para sacar dinero de un cajero automtico
Ingrese tarjeta_verificada (si/no): si
Ingrese Fecha_expirada (si/no): no
Ingrese nip_correcto (si/no) : si
Ingrese intentos_excedidos (si/no) : no
Ingrese balance_suficiente (si/no) : si
Ingrese limite_excedido (si/no) : no
p e n s a n d o
A=5, B=no, C=si, D=no, E=si, F=no, Mensaje= Pago
autorizado.
136
**************************************************************************************
Sistemas UNAC
=============
Nombre y Apellidos: juan rojas diaz
Nombre de sede : sede central
Ciclo : 2009-07
Nombre del Curso : ms sql server 2005
Notas p1 p2 p3 p4 : 17 16 15 14
Nota mnima : 14
Nota Ex.Final : 18
Promedio : 16
Nota final : 17
Condicin : <<< Aprobado >>>
**************************************************************************************
a) Promedio = (p1 + p2 + p3 + p4 Pminima) / 3
b) Nota Final = (promedio + Ex.Final) /2
c) Si Nota Final >= 14
Condicin = Aprobado
Sino
Condicin = Deaprobado
--PROBLEMA 2
CREATE procedure pa_examen_final
@cod_curso char(8),
@cod_alumno char(8),
@ciclo char(7)
as
begin
declare @nombre_alumno varchar(20)
declare @paterno varchar(20)
declare @materno varchar(20)
declare @sede varchar(45)
declare @nombre_curso varchar(45)
declare @practica1 float
declare @practica2 float
declare @practica3 float
declare @practica4 float
declare @notaminima float
declare @examen_final float
declare @promedio decimal(10,1)
declare @nota_final decimal(10,1)
declare @condicion varchar(12)
--SI NO EXISTE EL REGISTRO CON LOS PARAMETROS DADOS NOS
IMPRIMIRA UN MENSAJE
if not exists
(select a.nombre,a.paterno,a.materno,c.nombre,
b.ciclo,b.practica1,b.practica2,b.practica3,
b.practica4,b.examenFinal,s.nombre
from alumno a ,alu_curso b,curso c,recibo r,sede s
where
a.codalumno = b.codalumno
and b.codcurso = c.codcurso
and r.codsede = s.codsede
137
and (b.ciclo = @ciclo and b.codalumno = @cod_alumno and b.codcurso =
@cod_curso)
)
begin
print NO HAY DATOS DEL ALUMNO SOLICITADO
return
end
select @nombre_alumno =
a.nombre,@paterno=a.paterno,@materno=a.materno,@nombre_curso=c.nombre,
@ciclo =
b.ciclo,@practica1=b.practica1,@practica2=b.practica2,@practica3=b.practica3,
@practica4 = b.practica4,@examen_final = b.examenFinal,@sede = s.nombre
from alumno a ,alu_curso b,curso c,recibo r,sede s
where
a.codalumno = b.codalumno
and b.codcurso = c.codcurso
and r.codsede = s.codsede
and b.ciclo = @ciclo and b.codalumno = @cod_alumno and b.codcurso =
@cod_curso
--MENOR
declare @menor int
set @menor = @practica1
if @practica2 < @menor
set @menor = @practica2
if @practica3 < @menor
set @menor = @practica3
if @practica4 < @menor
set @menor = @practica4
set @promedio = (@practica1 +@practica2 +@practica3 +@practica4 -@menor)/3
set @nota_final = (@promedio + @examen_final)/2
if @nota_final >=14
set @condicion = Aprobado
else
set @condicion = Desaprobado
print ********************************************************************
print Sistemas
print ========
print Nombre y Apellido : + @nombre_alumno + +@paterno + + @materno
print Nombre de Sede : +@sede
print Ciclo : + @ciclo
print Nombre del Curso : + @nombre_curso
print Notas p1 p2 p3 p4 : + str(@practica1) + + str(@practica2) +
+str(@practica3) + + str(@practica4)
print Nota minima : + str(@menor)
print Nota Ex final : + convert(varchar,@examen_final)
print Promedio : + convert(varchar,@promedio)
print Nota Final : + convert(varchar,@nota_final)
print Condicion : <<< + @condicion + >>>
print *********************************************************************
end
--------------------------------------------------------------------------------
--COMPROBAMOS
exec pa_examen_final c0004,a0001,2007-10
--------------------------------------------------------------------------------
138
Al ejecutar:
En este problema de procedimientos almacenados en SQL SERVER 2005,
se emite un listado dado una serie de condiciones, el SQL permite el
manejo de grandes volmenes de informacin, donde los procedimientos
almacenados ejecutan bloques repetitivos, donde se usa una
programacin bsica.
139
MATERIALES Y METODOS
Esta investigacin realiza un estudio comparativo de los lenguajes de
programacin, segn la forma de sus instrucciones fue realizada utilizando
fundamentalmente la informacin recopilada durante 14 aos de dictado
del curso de Lenguaje de Programacin C++, 10 aos de dictado del curso
de Base de Datos, 2 aos de dictado del curso de Lenguaje de
Programacin Java, 10 aos de dictado del curso de Algoritmos y
Estructuras de Datos a nivel de Pre-Grado Universitario; investigaciones
realizadas para sustentar una Maestra en Computacin acerca de los
Sistemas Expertos, en el dictado de Propedeticos acerca de Inteligencia
Artificial y en el dictado de un curso de PostGrado sobre Teora de
Lenguajes.
Tambin se ha utilizado el conocimiento y la experiencia adquirida durante
12 aos, como Analista-Programadora de Sistemas en la Contralora
General de La Repblica, utilizando otros lenguajes de programacin
como: COBOL, BASIC, RPG 400 y Base de Datos Origin, pero que sin
embargo, guardan una filosofa y origen comn, existiendo diferencias
entre uno y otro lenguaje, lo cual me ha proporcionado una formacin
informtica y computacional.
Asmismo se ha recogido informacin recopilada en los siguientes cursos
de programacin:
1.- Lenguaje de Programacin C++ (Universidad Nacional de Ingeniera -
1995).
2.- Lenguaje de Programacin Visual Age por Java (IBM del Per 1999)
3.- Lenguaje de Programacin Java (Universidad Nacional Mayor de San
Marcos-2002).
4.- Base de Datos SQL Server 2005 (Universidad Nacional de Ingeniera
2009)
Tambin tenemos como materiales utilizados: los textos mencionados en
referenciales, separatas de diferentes autores, informacin recogida en
Internet, intercambio de informacin con otros Profesores de los Lenguajes
de Programacin investigados.
En cuanto al mtodo utilizado tenemos:
Mtodo inductivo, ya que hemos hecho una transicin de lo particular a lo
general, se ha usado la generalizacin inductiva, porque la investigacin se
140
basa en hechos reales. Como el mtodo es inductivo la generalizacin se
apoya en una induccin previa y slo tiene un valor de probabilidad.
El investigador necesit la contemplacin de muchos casos aislados. La
comparacin inductiva, en la enseanza, puede lograrse con muy pocos y
escogidos ejemplos. La habilidad del maestro radica en esta seleccin. La
serie de observaciones y de experimentos se ha llevado a cabo sobre
casos bien escogidos, adecuados al propsito de lograr la evidencia.
.
141
RESULTADOS
142
143
144
145
146
147
DISCUSIN
1.- Es destacable la importancia que tienen los lenguajes de programacin
que hacen posible la evolucin del software de base, los sistemas
comerciales, la inteligencia artificial, la automatizacin.
Si bien las estructuras estticas han existido siempre en los lenguajes de
programacin; la aparicin de las estructuras dinmicas que son
caractersticas de los Lenguajes ms nuevos, ha permitido el avance en la
programacin de los sistemas Operativos.
2.- Java actualmente, por su relacin con internet, es considerado como
un lenguaje de vanguardia, y el cual debemos profundizar ms en el futuro.
Es uno de los lenguajes de aplicacin general ms importantes del mundo.
Java es un lenguaje que le falta mucho por crecer. La ola del futuro son los
multimedia. La gente desea transmitir imgenes y las quiere en color,
desea transmitir voces, sonidos y audio. Java tiene un contenido
dinmico, que an falta explorar y explotar.
3.- Java ha eliminado las caractersticas menos elegantes, ms complejas
y ms propensas a errores (punteros, plantillas, sobrecarga de
operadores, herencia mltiple etc.) y ha incorporado caractersticas como:
cadenas, grficos, componentes, excepciones, multimedia, archivos,
trabajos con redes cliente/servidor basadas en Internet. Debemos pues
reforzar estas ltimas caractersticas de Java, por la importancia que tiene
hoy en internet.
4.- Al programar en Java no se parte de cero. Cualquier aplicacin que se
desarrolle se apoya en un gran nmero de clases preexistentes. Algunas
de ellas las ha podido hacer el propio Usuario, otras puede ser
comerciales, pero siempre hay un nmero muy importante de clases que
forman parte del propio lenguaje. (API o Application Programming Interface
de Java). Java incorpora en el propio lenguaje muchos aspectos que en
cualquier otro lenguaje son extensiones propiedad de empresas de
software. Es por eso que muchos expertos opinan que Java es el lenguaje
ideal para aprender la informtica moderna.
148
5.- En los aos 80 el lenguaje de programacin Pascal fue el lenguaje
indicado para una programacin inicial, posteriormente fue desplazado por
el lenguaje de programacin C++ y los alumnos agradecieron que se les
enseara un Lenguaje comercial. Ahora tambin se deber empezar a
hacer este trnsito a Java, porque ofrece ms ventajas.
Inicialmente se podra ensear las partes comunes a C++, Applets y
grficos en un curso inicial de Lenguaje de Programacin I y la parte
multimedia, archivos y Bases de Datos en un curso de Lenguaje de
Programacin II.
6.- El lenguaje C++, busca alcanzar las caractersticas de Java, como el
uso de Bibliotecas, para mejorar la programacin, asimismo quiere
alcanzar la interfaz grfica de Java, C++ siempre est tratando de alcanzar
la perfomance de Java. Sin embargo no se puede descartar el C++ ya que
este es utilizado en inteligencia artificial, programacin de autmatas,
electrnica, motivo por el cual es el Lenguaje adecuado para programar en
la carrera de Ingeniera Electrnica y Mecatrnica.
7.- El Lenguaje Visual Prolog es un Lenguaje declarativo, que es usado
para programar principalmente Sistemas Expertos, esta rea del
conocimiento no ha tenido muchos avances en los ltimos aos. Cre
muchas expectativas pero falta mucho por investigar, ya que es difcil tratar
de emular el comportamiento del ser humano.
8.- A partir de 1980, el modelo relacional ha tenido un auge espectacular,
gracias al desarrollo tecnolgico, han ido apareciendo productos
comerciales que corren en las ms diversas plataformas con rendimientos
aceptables: ORACLE, SQL, DB2, SYBASE. Sin embargo el despegue de
los SGBD se da recin cuando aparecen y son programables las
plataformas mencionadas, antes no se desarroll el modelo relacional por
problemas con la programacin del Modelo Relacional.
9.- Los lenguajes Funcionales utilizan el concepto de Recursividad y su
uso es en el campo cientfico, estos Lenguajes son menos uitlizados.
149
REFERENCIALES
Lenguaje de Programacin C++
1.- CEVALLOS SIERRA, FRANCISCO JAVIER. Curso de Programacin
C++ Programacin Orientada a Objetos, Madrid: Editorial RA-MA, primera
edicin, 1991.
2.- DEITEL Y DEITEL. Cmo Programar en C++, Mxico: Editorial
Prentice-Hall, segunda edicin, 1999.
3.- JAMSA, KRIS. C++ Programacin exitosa, Mxico: Editorial Alfaomega,
primera edicin, 1994.
4.- JOYANES AGUILAR, LUIS. Programacin en C++ - Algoritmos,
estructuras de datos y objetos, Madrid: Editorial McGraw-
Hill/Interamericana de Espaa, primera edicin, 2000.
5.- KONG, MAYNARD. Lenguaje de Programacin C, Per: Fondo Editorial
de la Pontificia Universidad Catlica del Per, segunda edicin, 1989.
6.- PAPPAS, CHRIS/ MURRAY, WILLIAM. Manual de Borland C++ 4.0,
Madrid: Editorial Osborne/ McGraw- Hill, cuarta edicin, 1994.
7.- SCHILDT, HERBERT. Turbo C/C++ Manual de Referencia, Madrid:
Editorial Mc Graw-Hill, primera edicin, 1992.
8.- VASQUEZ PARAGULLA, JULIO. Gua de Programacin C++, Per:
segunda edicin, 1999.
9.- http://www.elrincondelc.com/cursoc/cursoc.html
10.- Direccin de internet de: Aprenda C++ como si estuviera en primero.
150
Lenguaje de Programacin Java
1.- DEITEL Y DEITEL. Cmo Programar en Java, Mxico: Editorial
Prentice-Hall, primera edicin, 1998.
2.- FROUFE QUINTAS, AGUSTN. Java 2 Manual de Usuario y Tutorial,
Mxico: Editorial Alfaomega, segunda edicin, 2000.
3.- LEMAY, LAURA/ CADENHEAD ROGERS. Aprendiendo Java 2 en 21
das, Mxico: Editorial Prentice-Hall, primera edicin, 1999.
4.- SCHILDT, HERBERT. Fundamentos de Programacin en Java 2,
Colombia: Editorial Mc Graw-Hill, primera edicin, 2001.
5.- VASQUEZ PARAGULLA, JULIO. Gua de Programacin Visual Age for
Java, Per: primera edicin, 2001.
6.- http://java.programacion.net
7.- Direccin de internet de: Aprenda java como si estuviera en primero.
8.- Separatas del curso OOP con Java, de IBM del Per.
Lenguaje de Programacin Visual Prolog
1.- PHILLIP R. ROBINSON. Aplique Turbo Prolog, Espaa: Editorial
Osborne/McGraw-Hill, Primera Edicin, 1988.
2.- SCHILDT, HERBERT. Turbo Prolog Programacin avanzada. Espaa:
Editorial McGraw-Hill/Interamericana de Espaa, S.A., Primera Edicin,
1988.
3.- J.McALLISTER. Inteligencia artificial y Prolog en microcomputadoras.
Mxico: Alfaomega Grupo Editor, S.A., Primera Edicin, 1999.
151
Teora de Lenguajes
1.- LOUDEN, KENNETH. Lenguajes de Programacin. Mxico. Editorial
Thomson, 2da edicin, 2003.
2.- GRIES, DAVID. The Science of Programming. USA. Editorial Springer-
Verlag, 2da edicin, 1986.
3.- RAVI STHI. Lenguajes de Programacin, Conceptos y constructores.
USA. Editorial Addison Wesley, 2da edicin, 1992.
SQL
1. DELGADO ALBERT. Microsoft SQL Server 2000. Mxico, Edi Prentice
Hall, 2000.
2. Manual de SQL Server 2005 Implementacin. Universidad Nacional de
Ingeniera. Per. 2009. 123 pginas.
152
APNDICES
153
APENDICE NRO 1
UNIVERSIDAD NACIONAL DEL CALLAO
Facultad de Ingeniera Industrial y de Sistemas
Escuela Profesional de Ingeniera de Sistemas
SYLLABUS
1.- INFORMACIN GENERAL
1.1 Nombre de la Asignatura : LENGUAJE DE PROGRAMACIN I
Nro : 15
Cdigo del Curso : PC0033
1.2 Carcter : Obligatorio
1.3 Pre-requisito : Algoritmos y Estructuras de
Datos
Introd.. a la Ingeniera de
Sistemas
1.4 Nmero de Crditos : 4
Horas Semanales :
Teora : 2 hrs.
Prcticas : 4 hrs.
1.5 Ciclo Acadmico : III
1.6 Semestre Acadm ico : 2010-II
1.7 Duracin : 17 semanas
1.8 Profesora : Mg. Bertila Garca Daz
2.- SUMILLA
Proporcionar al estudiante los fundamentos de programacin en un
lenguaje de programacin estructurada, estudiar la sintaxis de las
principales estructuras de control del lenguaje C, de modo sistemtico y
riguroso, desarrollar proyectos de programacin. Programacin orientada
a objetos. Paralelo de C++ y JAVA.
Unidades de aprendizaje: I. Programacin en un lenguaje imperativo: C.
II. Programacin en un lenguaje orientado a objetos: C++
3.- OBJETIVO GENERAL
Que el estudiante adquiera conocimientos de Programacin Estructurada,
comprenda y maneje los conceptos inherentes a la metodologa orientada
a objetos.
4.- COMPETENCIAS
Realiza programas en un Lenguaje de Programacin y los manipula
para obtener resultados, resolver problemas comerciales y exponerlos en
clase.
Explica las diferentes tendencias en programacin y programa usando
dichas tendencias para registrarlas.
154
5.- PROGRAMACIN DE LOS CONTENIDOS
UNIDAD I: PROGRAMACIN EN UN LENGUAJE IMPERATIVO: C
CONTENIDOS PROCEDIMENTALES
Demostrar la utilidad de la programacin imperativa para solucin de
problemas matemticos y comerciales.
CONTENIDOS ACTITUDINALES
Exponer dichos programas para un aprendizaje colaborativo.
CONTENIDOS CONCEPTUALES
Repaso de algoritmos
Sentencias bsicas
Funciones
Arreglos
Funciones de cadena
Punteros
PRIMERA SEMANA
Sesin 1:
Repaso de Diagramas de flujos de datos y Algoritmos. Variables y
constantes.
Elementos bsicos de un programa: bucles, contadores, acumuladores,
decisin, interruptores.
Fuente: DEITEL Y DEITEL (1999):C++ cmo programar, Mxico, Editorial
Prentice Hall.
SEGUNDA SEMANA
Sesin 2:
Estructura de un Programa en C: Tipo de Datos. Operadores: matemticos,
de relacin, lgicos, asignacin.
Fuente: DEITEL Y DEITEL (1999):C++ cmo programar, Mxico, Editorial
Prentice Hall.
TERCERA SEMANA
Sesin 3:
Instalacin del C, Librerias, Formas de compilar y ejecutar un programa.
Rastreo o debug, Programa fuente, objeto, ejecutable.
Sentencias de control. Estructuras de Control selectivas: IF, SWITCH.
Fuente: DEITEL Y DEITEL ( 1999): C++ cmo programar, Mxico,
Editorial Prentice Hall.
CUARTA SEMANA
Sesin 4:
Sentencias de control. Estructuras de Control repetitivas: WHILE, FOR,
BREAK,
CONTINUE. Resumen en NetBeans 6.8.
Fuente: DEITEL Y DEITEL ( 1999): C++ cmo programar, Mxico,
Editorial Prentice Hall.
QUINTA SEMANA
Sesin 5:
155
Programacin Modular y Estructurada.
Funciones sin pase de parmetros. Variables locales y globales.
Funciones con pase de Parmetros; llamadas por valor y por referencia
Fuente: JOYANES AGUILAR, Luis. (2000): Programacin en C++ -
Algoritmos, estructuras de datos y objetos. Madrid, Editorial McGraw-
Hill/Interamericana de Espaa.
SEXTA SEMANA
Sesin 6:
Arreglos Unidimensionales. Recorrido, Mtodo de la Burbuja. Resumen en
NetBeans 6.0.
Fuente: JOYANES AGUILAR, Luis. (2000): Programacin en C++ -
Algoritmos, estructuras de datos y objetos. Madrid, Editorial McGraw-
Hill/Interamericana de Espaa.
STIMA SEMANA
Sesin 7:
Arreglos bidimensionales. Recorrido por filas y columnas.
Fuente: JOYANES AGUILAR, Luis. (2000): Programacin en C++ -
Algoritmos, estructuras de datos y objetos. Madrid, Editorial McGraw-
Hill/Interamericana de Espaa.
OCTAVA SEMANA
Sesin 8:
EXAMEN PARCIAL
NOVENA SEMANA
Sesin 9:
Arreglos de estructuras, Funciones de Cadena.
Fuente: JOYANES AGUILAR, Luis. (2000): Programacin en C++ -
Algoritmos, estructuras de datos y objetos. Madrid, Editorial McGraw-
Hill/Interamericana de Espaa.
DCIMA SEMANA
Sesin 10:
Punteros; aritmtica de punteros: Puntero a variables, Punteros a cadenas,
Punteros a estructuras.
UNIDAD II: PROGRAMACIN EN UN LENGUAJE ORIENTADO A
OBJETOS: C++
CONTENIDOS PROCEDIMENTALES
Demostrar la utilidad de la programacin orientada a objetos para
solucin de problemas matemticos y comerciales.
CONTENIDOS ACTITUDINALES
Exponer dichos programas para un aprendizaje colaborativo.
CONTENIDOS CONCEPTUALES
Definicin de clases y objetos
Constructores y Destructores.
Herencia
Funciones Static
156
Polimorfismo
ONCEAVA SEMANA
Sesin 11:
Introduccin a la metodologa Orientada a Objetos (MOO). Clases y
Objetos.
Fuente: JAMSA Kris (1994) C++ Programacin exitosa. Mxico, Edi.
Alfaomega.
DOCEAVA SEMANA
Sesin 12:
Constructores y Destructores. Resumen en Net Beans 6.8.
Fuente: DEITEL Y DEITEL (1998) Cmo programar en Java, Mxico,
Editorial Prentice Hall.
TRECEAVA SEMANA
Sesin 13:
Herencia, Herencia mltiple.
Fuente: JAMSA Kris (1994) C++ Programacin exitosa. Mxico, Edi.
Alfaomega.
CATORCEAVA SEMANA
Sesin 14:
Puntero this, funciones friends, datos y funciones Static.
Fuente: DEITEL Y DEITEL (1998) Cmo programar en Java, Mxico,
Editorial Prentice Hall.
QUINCEAVA SEMANA
Sesin 15:
Polimorfismo: Sobrecarga de Funciones, Sobrecarga de Operadores.
Fuente: Coleccin Aprenda .., como si estuviera en primero, Aprenda C++
como si estuviera en primero.
DIECISEISAVA SEMANA
Sesin 16:
EXAMEN FINAL
DIECISIETEAVA SEMANA
Sesin 17:
EXAMEN SUSTITUTORIO
6.- CRITERIOS DE EVALUACION:
Promedio de trabajos - prctica (PP) Peso 01
Examen Parcial (EP) Peso 01
Examen Final (EF) Peso 01
Examen Sustitutorio
Nota Final (NF) = ( PP + EP + EF) /3
157
7.- METODOLOGA
La metodologa empleada, ser activa, que favorezca la participacin del
alumno, complementando con la prctica de la Induccin especficamente
en la resolucin de problemas.
Se estimular el inters por la investigacin cientfica.
La programacin del curso considera, para el cumplimiento de los objetivos
las siguientes tcnicas de trabajo:
Exposicin y dilogo
Desarrollo de Prcticas dirigidas en el Laboratorio
Desarrollo de Prcticas calificadas por el alumno
Investigacin en el Laboratorio
Exposicin de un trabajo final
8.- BIBLIOGRAFIA
8.1 BIBLIOGRAFIA BSICA
DEITEL Y DEITEL C++ cmo programar, Mxico, Prentice Hall, Segunda
Edicin, 1999.
JOYANES AGUILAR, LUIS. Programacin en C++ - Algoritmos, estructuras
de datos y objetos, Madrid: Editorial McGraw- Hill/Interamericana de
Espaa, primera edicin, 2000.
DEITEL Y DEITEL. Cmo Programar en Java, Mxico: Editorial
Prentice-Hall, primera edicin, 1998.
8.2 BIBLIOGRAFIA COMPLEMENTARIA
CEVALLOS, FCO JAVIER C++
Edi. RA-MA, Madrid, 1991
JAMSA KRIS C++ Programacin exitosa
Edi. Alfaomega, Mxico,1994
KONG, MAYNARD Lenguaje de Programacin C
Fondo Editorial Pontificia Univ. Catlica del Per, 1989
PAPPAS, CHRIS H. Manual de Borland C++ 4.0
MURRAY, WILLIAM Edi. Osborne/ McGraw-Hill, 1994
VASQUEZ P. , JULIO Gua de Programacin en C++
2da Edicin, 1999, Per
SCHILDT, HELBERT Turbo C/ C++ Manual de Referencia
Edi. McGraw-Hill , 1992.
FROUFE QUINTAS, AGUSTN. Java 2 Manual de Usuario y Tutorial
Editorial Alfaomega, segunda edicin, 2000, Mxico
LEMAY, LAURA/ CADENHEAD ROGERS. Aprendiendo Java 2 en 21 das
Editorial Prentice-Hall, primera edicin, 1999, Mxico:
158
SCHILDT, HERBERT. Fundamentos de Programacin en Java 2
Editorial Mc Graw-Hill, primera edicin, 2001, Colombia.
8.3 BIBLIOGRAFIA VIRTUAL
http://www.elrincondelc.com/cursoc/cursoc.html
http://www.prenhall.com/deitel
Direccin de internet de: Aprenda C++ como si estuviera en
primero
Direccin de internet de: Aprenda Leng. ANSI C como si estuviera
en primero
Direccin de internet de: Aprenda java como si estuviera en primero
http://java.programacion.net
http://www.taringa.net
Buscador de libros en internet
9.- REQUERIMIENTOS DE EQUIPOS Y AYUDAS
Distribucin de Guas de Prcticas dirigidas y calificadas
Sofwtare: TURBO C++ PARA WINDOWS 4.5, NET BEANS 6.8
Un CD o USB para trabajos
Laboratorio equipado con computadoras
Proyector Multimedia
159
APNDICE NRO 2
UNIVERSIDAD NACIONAL DEL CALLAO
Facultad de Ingeniera Industrial y de Sistemas
Escuela Profesional de Ingeniera de Sistemas
SYLLABUS
1.- INFORMACION GENERAL
1.1 Nombre de la Asignatur : Base de Datos
Nro : 43
Cdigo del Curso : PCO83
1.2 Carcter : Obligatorio
1.3 Pre-requisito : Lenguaje de Programacin III
1.4 Nmero de crditos : 04
Horas semanales : Ses(06):
Teora : 02 Hrs.
Prctica : 02 Hrs.
Laboratorio : 02 Hrs.
1.5 Ciclo Acadmico : Octavo Ciclo
1.6 Semestre Acadmico : 2010-II
1.7 Duracin : 17 semanas
1.8 Profesora : Mg Bertila Garca Daz
2.-SUMILLA
Proporcionar al estudiante los elementos bsicos del procesamiento de
datos. Modelamiento de las bases de datos. . Modelo Relacional, lgebra
Relacional. Optimizacin de consultas a bases de datos (SQL).
Normalizacin. Datawarehouse y Bases de Datos distribuidas.
Unidades de aprendizaje:
I. Arquitectura para sistemas de Bases de Datos
II. Modelamiento de las Bases de Datos
III. Modelo Relacional y Algebra Relacional
IV. SQL
V. Normalizacin
VI. Datawarehouse y Bases de Datos distribuidas
3.-OBJETIVO GENERAL:
Conocer las tcnicas de Diseo que permitan disear una Base de Datos
en todos sus aspectos.
4.-COMPETENCIAS
Comprende la organizacin de los sistemas de Gestin de Bases de
Datos, sus caractersticas y perspectivas futuras.
Domina una Metodologa de Diseo de Base de Datos.
Disea Bases de Datos usando el modelo relacional.
Crea Bases de Datos usando el SGBD SQL, realiza consultas, passwords.
Etc.
Disea Bases de Datos a partir de Documentos.
Comprende la importancia del Datawarehouse en la toma de decisiones.
160
5.-PROGRAMACIN DE LOS CONTENIDOS
UNIDAD I: ARQUITECTURA PARA SISTEMAS DE BASES DE DATOS
CONTENIDOS PROCEDIMENTALES
Describe los diferentes niveles de la arquitectura de las Bases de Datos.
CONTENIDOS ACTITUDINALES
Distingue los diferentes niveles de la arquitectura de las Bases de
Datos.
CONTENIDOS CONCEPTUALES
PRIMERA SEMANA
Introduccin a los Sistemas de Bases de Datos. Diferencia entre archivos y
Bases de Datos. Definicin de Bases de Datos.
Arquitectura de un Sistema de Bases de Datos.
Fuente: Elmasri/ Navathe (2002): Fundamentos de Sistemas de Bases de
Datos, USA, Edi. Prentice Hall.
UNIDAD II: MODELADO DE DATOS CON EL ENFOQUE ENTIDAD-
RELACION
CONTENIDOS PROCEDIMENTALES
Esboza modelos entidad- relacin
CONTENIDOS ACTITUDINALES
Expone diferentes ejemplos de modelos entidad- relacin
CONTENIDOS CONCEPTUALES
SEGUNDA SEMANA
Enfoque de modelo de Datos Entidad-Relacin, Guas para determinacin
de Entidades, Atributos, Relacionamientos.
Fuente: Elmasri/ Navathe (2002): Fundamentos de Sistemas de Bases de
Datos, USA, Edi. Prentice Hall.
Laboratorio Nro 1: Prctica de Modelamiento N 1
TERCERA SEMANA
Asociaciones bsicas del Modelamiento de datos: Uno a uno, Uno a
muchos, muchos a muchos.
Controles de Negocios: opcional, mandatoria; Casos prcticos de
Modelamiento Entidad-Relacin.
Fuente: Elmasri/ Navathe (2002): Fundamentos de Sistemas de Bases de
Datos, USA, Edi. Prentice Hall.
Laboratorio Nro 2: Prctica de Modelamiento N 2 - Prctica N 3 de
Erwin
CUARTA SEMANA
Extensiones al modelo E-R: Clasificacin, Generalizacin, Agregacin.
Casos Prcticos de Modelamiento.
Fuente: Elmasri/ Navathe (2002): Fundamentos de Sistemas de Bases de
Datos, USA, Edi. Prentice Hall.
161
Laboratorio Nro 3: Prctica de Modelamiento N 2 - Prctica N 4 de Ing.
Delantera y Reversa.
UNIDAD III: MODELO RELACIONAL Y ALGEBRA RELACIONAL
CONTENIDOS PROCEDIMENTALES
Modifica el Modelo Entidad Relacin al modelo Relacional
CONTENIDOS ACTITUDINALES
Transforma el Modelo Entidad Relacin al modelo Relacional.
CONTENIDOS CONCEPTUALES
QUINTA SEMANA
Modelo Relacional: Conceptos, relaciones, dominios, tuplas, claves
primarias y forneas, reglas de integridad, arquitectura relacional.
Fuente: Elmasri/ Navathe (2002): Fundamentos de Sistemas de Bases de
Datos, USA, Edi. Prentice Hall.
Laboratorio Nro 4: Prctica N 5 de Modelo Relacional en Access.
SEXTA SEMANA
Modelo Relacional: Algebra Relacional. Operaciones con algebra relacional
Fuente: Elmasri/ Navathe (2002): Fundamentos de Sistemas de Bases de
Datos, USA, Edi. Prentice Hall.
Laboratorio Nro 5: Prctica N 5b de Algebra Relacional.
Primera Prctica calificada de ERWIN
SETIMA SEMANA
Conversin del Modelo Entidad- Relacin al Modelo Relacional.
Fuente: Elmasri/ Navathe (2002): Fundamentos de Sistemas de Bases de
Datos, USA, Edi. Prentice Hall.
Laboratorio Nro 6: Prctica N 5c de Conversin del Modelo Entidad-
Relacin al Modelo Relacional.
Exposicin del Avance del Modelo Entidad- Relacin
OCTAVA SEMANA
EXAMEN PARCIAL.
UNIDAD IV: SQL
CONTENIDOS PROCEDIMENTALES
Administra una Base de datos en un SGBD como SQL server 2005.
CONTENIDOS ACTITUDINALES
Ejemplifica una Base de datos en un SGBD como SQL server 2005.
CONTENIDOS CONCEPTUALES
NOVENA SEMANA
Introduccin al SQL (structured query language), caractersticas, definicin
de tablas, reglas de Integridad, manipulacin de datos y desarrollo de
Aplicaciones.
Fuente: Elmasri/ Navathe (2002): Fundamentos de Sistemas de Bases de
Datos, USA, Edi. Prentice Hall.
Laboratorio Nro 7: Prctica N 6 Introduccin al SQL.
162
DECIMA SEMANA
Sistema Relacional: Vistas, SQL embebido. DDL(data definition language),.
Fuente: Elmasri/ Navathe (2002): Fundamentos de Sistemas de Bases de
Datos, USA, Edi. Prentice Hall.
Laboratorio Nro 8: Prctica N 7 SQL DDL
ONCEAVA SEMANA
SQL. DML (data manipulation language), DCL (data control language).
Laboratorio con SQL SQL2000.
Fuente: Elmasri/ Navathe (2002): Fundamentos de Sistemas de Bases de
Datos, USA, Edi. Prentice Hall.
Laboratorio Nro 9: Prctica N 8 SQL DDL (Compaa)
Prctica N 9 SQL DML (Compaa)
UNIDAD V: NORMALIZACION
CONTENIDOS PROCEDIMENTALES
Esboza el modelo fsico a partir de un documento.
CONTENIDOS ACTITUDINALES
Disea el modelo fsico a partir de un documento.
CONTENIDOS CONCEPTUALES
DOCEAVA SEMANA
Normalizacin: Conceptos, Primera forma normal, Segunda Forma Normal,
Tercera Forma Normal, Ejemplos de Aplicaciones.
Fuente: Finkelstein,Clive (1990): An Introduction to information
Engineering, USA, Edi. Addison-Wesley Publishing Company,
Laboratorio Nro 10: Prctica N 10 SQL - DML.
Prctica N 12 Normalizacin
TRECEAVA SEMANA
Cuarta Formal Normal. Ejemplos de Aplicaciones.
Fuente: Finkelstein,Clive (1990): An Introduction to information
Engineering, USA, Edi. Addison-Wesley Publishing Company,
Laboratorio Nro 11: Prctica N 11 SQL - DCL.
Prctica N 12 Normalizacin
UNIDAD VI: DATAWAREHOUSE Y BASES DE DATOS DISTRIBUIDAS
CONTENIDOS PROCEDIMENTALES
Esboza la importancia del Business Intelligence en la toma de
decisiones de una empresa, asimismo de las Bases de Datos
distribuidas.
CONTENIDOS ACTITUDINALES
Comunica la importancia del Business Intelligence en la toma de
decisiones de una empresa, asimismo de las Bases de Datos
distribuidas.
163
CONTENIDOS CONCEPTUALES
CATORCEAVA SEMANA
Fundamentos, Diseo y Construccin, Uso del Datawarehouse, Minera de
Datos
Fuente: Harjinder S.Gill y Prakash C. Rao (1996): Data warehousing, USA,
Edi Prentice Hall Hispanoamericana.
Segunda Prctica calificada de SQL
QUINCEAVA SEMANA
Sistemas distribuidos; Bases de datos distribuidas: integridad,
recuperacin, concurrencia.
Sistemas Cliente/Servidor, caractersticas, ventajas, desventajas.
Fuente: Elmasri/ Navathe (2002): Fundamentos de Sistemas de Bases de
Datos, USA, Edi. Prentice Hall.
DIECISEISAVA SEMANA
EXAMEN FINAL.
DIECISIETEAVA SEMANA
EXAMEN SUSTITUTORIO.
6.- CRITERIOS DE EVALUACION:
N1: Nota de Primer parcial (Primera Parte)
N2: Una nota de Trabajos Prcticos
N3: Una nota de Examen Final
Examen Sustitutorio al Examen ms bajo
Promedio General = (N1 + N2 + N3)/3
La nota final aprobatoria es 11 y las fechas de examen son improrrogables.
7.- METODOLOGIA
La metodologa empleada, ser activa, que favorezca la participacin del
alumno, Se estimular el inters por la investigacin cientfica.
La programacin del curso considera, para el cumplimiento de los
objetivos las siguientes tcnicas de trabajo:
Exposicin y dilogo
Exposicin sobre el avance del proyecto final
Discusin en Pequeos Grupos
Prcticas dirigidas en el Laboratorio de Computacin.
Investigacin en el Laboratorio de Computacin
Prcticas Calificadas, como preparacin a los respectivos
exmenes
8.- BIBLIOGRAFIA
8.1 BIBLIOGRAFIA BASICA
* Sistemas de Bases de Datos, ($$)
Elmasri/Navathe Edi. Addison-Wesley Iberoamericana, S.A. 1997
164
* Fundamentos de Sistemas de Bases de Datos,
Elmasri/Navathe Edi. Prentice Hall, 2002
* An Introduction to information Engineering,
Finkelstein,Clive Edi. Addison-Wesley Publishing Company, 1990
8.2 BIBLIOGRAFA COMPLEMENTARIA
* Introduccin a los sistemas de Bases de Datos,
Date C.J.Edi. Addison-Wesley Iberoamericana, 1981
* Bases de Datos desde Chen hasta Codd con Oracle ,
LuqueRuiz, Irene-GomezNieto, MiguelAngel Edi. AlfaOmega-Rama,
2002
* Diseo y Administracin de Bases de Datos,
Gary W. Hansen, James V. Hansen Edi. Prentice Hall, 1997
* Fundamentos y Modelos de Bases de Datos
Adoracin de Miguel y Mario Piattini Edi. Alfaomega, 1999, Mxico
* Diseo Conceptual de Bases de Datos
Batini-Ceri-Navathe Edi. Addison -Wesley Iberoamericana S.A.1992
* Sistemas Gestores de Bases de Datos
Gregorio Cabrera Snchez Edi. Paraninfo, 2001, Madrid, Espaa
* Modelamiento de Datos con Erwin 3.5
Ing. Gesvin Romero Moreno, 1era Edicin. Edi. Megabyte, 2001, Per
* Modelando con Base de Datos, Erwin 3.5
Richard Surez Barzola, 1era Edicin. Edi. Ritisa Graff S.R.L., 2002, Per
* Microsoft SQL Server 2005 Implementacin
Manual de Sistemas UNI
* Data warehousing
Harjinder S.Gill y Prakash C. Rao Edi Prentice Hall Hispanoamericana,
1996
* Fundamentos de Bases de Datos ($$)
Abraham Silberschatz, Henry Korth, Edi Mc Graw Hill, 2002
* B.D. con SQL server 2000. Transact SQL ($$)
Jorge Moratalla, Edi Grupo Eidos, 2001
($$): libros electrnicos en el CD de BD
8.3 BIBLIOGRAFA VIRTUAL
* Documentos de Internet, relacionados al tema
http://www.uhu.es/jacinto_mata /*Universidad de Huelva*/
165
9.- MATERIAL EDUCATIVO
Distribucin de copias y separatas
Pizarra para la teora y Laboratorio
1 CD o USB para trabajos
Software ERWIN 7.0
Software SQL SERVER 2005
Laboratorio equipado con computadoras y Muebles
166
APNDICE NRO 3
UNIVERSIDAD TECNOLOGICA DEL PERU
Facultad de Ingeniera Electrnica y Mecatrnica
Escuela Profesional de Ingeniera Electrnica
SYLLABUS
1.- DATOS GENERALES
1.1 Curso : LENGUAJE DE PROGRAMACIN II
1.2 Ciclo Acadmico : IV
1.3 Carrera : Ingeniera Electrnica
1.4 Total de Horas : Teora 2 hrs. Semanales
Prcticas 2 hrs. Semanales
1.5 Total Crditos : 3
1.6 Profesora : Mg. Bertila Garca Daz
2.- OBJETIVOS GENERALES
El presente curso desarrollar los conceptos fundamentales del Lenguaje
Java, con la finalidad de proporcionarle al estudiante una herramienta de
programacin orientada a objetos, para el desarrollo de aplicaciones de
propsito general as como desarrollo de aplicaciones y Applets para
Internet.
3.- OBJETIVOS ESPECFICOS
3.1 Dar a conocer al estudiante los temas fundamentales del lenguaje de
Programacin Java.
3.2 Desarrollo de programas para la solucin de problemas de propsito
general orientadas a objetos.
3.3 Creacin y manipulacin de Applets para construir aplicaciones en
Internet.
3.4 Desarrollo de aplicaciones en ambientes grficos y multimedia.
4.- METODO DE ENSEANZA - APRENDIZAJE
La metodologa empleada, ser activa, que favorezca la participacin del
alumno, complementando con la prctica de la Induccin especficamente
en la resolucin de problemas.
Se estimular el inters por la investigacin cientfica.
La programacin del curso considera, para el cumplimiento de los objetivos
las siguientes tcnicas de trabajo:
Exposicin y dilogo
Desarrollo de Prcticas dirigidas en el Laboratorio
Desarrollo de Prcticas calificadas por el alumno
Investigacin en el Laboratorio
Exposicin de un trabajo final
5.-SISTEMA DE EVALUACION:
4 Laboratorios calificados
167
1 trabajo final
Examen Parcial
Examen Final
Examen Sustitutorio
6.- REQUERIMIENTOS DE EQUIPOS Y AYUDAS
Distribucin de Guas de Prcticas dirigidas y calificadas
Pizarra para la teora y Laboratorio
Sofwtare: JCREATOR
Un Diskette para trabajos
Laboratorio equipado con computadoras
7.- BIBLIOGRAFIA
7.1 DEITEL Y DEITEL. Cmo Programar en Java, Mxico: Editorial
Prentice-Hall, primera edicin, 1998.
7.2 FROUFE QUINTAS, AGUSTN. Java 2 Manual de Usuario y Tutorial,
Mxico: Editorial Alfaomega, segunda edicin, 2000.
7.3 LEMAY, LAURA/ CADENHEAD ROGERS. Aprendiendo Java 2 en 21
das, Mxico: Editorial Prentice-Hall, primera edicin, 1999.
7.4 SCHILDT, HERBERT. Fundamentos de Programacin en Java 2,
Colombia: Editorial Mc Graw-Hill, primera edicin, 2001.
7.5 VASQUEZ PARAGULLA, JULIO. Gua de Programacin Visual Age for
Java, Per: primera edicin, 2001.
7.6 http://java.programacion.net
7.7 direccin de internet de: Aprenda java como si estuviera en primero.
7.8 Separatas del curso OOP con Java, de IBM del Per.
8.- PROGRAMA SEMANAL (observe el formato del cuadro No 1)
CUADRO No 1.- PROGRAMA SEMANAL
SEM. HS TEMA
1 4 Introduccin General.
Qu es Java?, Caractersticas principales, principios de
la programacin orientada a objetos, una primera
aplicacin en Java, compilacin y ejecucin de un
programa.
2 4 Elementos del Lenguaje Java.
Variables y tipos de datos simples, declaracin y
asignacin de valores a variables, operaciones
aritmticas, operaciones lgicas, relaciones de
comparacin.
168
3 4 Instrucciones de control.
Tipos de instrucciones de control, instruccin if, switch,
instruccin for, while, do while, break, continue.
4 2 Prctica calificada
5 4 Creacin de clases.
Creacin de variables de clase y de instancias, creacin
de mtodos, creacin de aplicaciones.
6 4 Mtodos.
Mtodos sin parmetros, con parmetros. Mtodos
constructores, destructores. Sobrecarga de mtodos.
7 4 Arreglos.
Declaracin de Arreglos, arreglos unidimensionales,
arreglos bidimensionales, cadenas, arreglos de cadenas.
8 4 Prctica calificada
9 4 Applets.
Iniciar y terminar un applet, la clase Label, la clase
TextFfield; eventos, Mtodo action() ; Algunos mtodos
de la clase applet; creacin de applets, inclusin de
applets en un navegador.
10 4 Examen Parcial
11 4 Manejo de colores, fuentes y grficos.
La clase Graphics, dibujo y rellenos, textos y fuentes,
colores.
12 4 Componentes bsicos de una interfaz grfica.
Rtulos, botones para pulsar, campos de texto, botones
de opcin, casillas de verificacin, botones de radio,
listas.
13 4 Componentes avanzados.
reas de texto, lienzos, barras de desplazamiento,
marcos, mens.
14 4 Prctica calificada
15 4 Excepciones.
Manejo de Excepciones, mtodos para manipular
Excepciones, cuando usar Excepciones y cuando no.
16 4 Multihilos.
La clase Threads, mtodos de la clase Threads, creacin
de Threads.
17 4 Multimedia: imgenes.
169
Animaciones en java, mtodos de la clase Image,
recuperacin y uso de imgenes, creacin de
animaciones con imgenes.
18 4 Multimedia: sonidos.
carga y reproduccin de clips de audio, mapas de
imgenes
19 4 Funciones de las clases.
Clases y mtodos abstractos, manipulacin de paquetes,
interfaces.
20 4 Examen Final
170
APENDICE N 4
UNIVERSIDAD NACIONAL DEL CALLAO
FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
SECCIN DE POSTGRADO
SILABO
TEORIA DE LENGUAJE DE PROGRAMACION
1. DATOS GENERALES
1.1 Seccin : Maestra
1.2 Mencin : Ingeniera de Sistemas
1.3 Semestre Acadmico : 2008-II:
1.4 Ciclo de Estudio : Primero
1.5 Nmero de crditos : 06
Teora : 04 Hrs.
Prctica : 02 Hrs.
1.6 Profesor Responsable Mg. Bertila Garca Daz
2. SUMILLA
Lenguajes formales. Tipos de lenguajes de programacin y conceptos
sobre lenguajes imperativos. Lenguajes formales. Tipos de lenguajes.
Lenguajes lgicos.
Conceptos sobre lenguajes imperativos: variables, estructura de datos,
estructuras de control, paso de parmetros, abstraccin de datos.
Programacin orientada a objetos.
3. OBJETIVO GENERAL
Conocer mejor el lenguaje que se utiliza habitualmente y la posibilidad de
comparar entre distintos lenguajes de programacin, mejorando la
seleccin de un lenguaje.
Ser capaz de manipular y simplificar proposiciones y predicados para el
desarrollo de programas.
171
4. PROGRAMACIN DE LOS CONTENIDOS
UNIDAD I: LENGUAJES FORMALES
PRIMERA SEMANA
Sesin 1:
1.1 Introduccin
1.2 Lenguajes de Programacin
1.3 Antecedentes e Historia
SEGUNDA SEMANA
Sesin 2:
2.1 Clasificacin de los lenguajes de programacin
2.1.1 Segn su grado de independencia de la mquina
2.1.2 Segn la forma de sus instrucciones
2.1.3 Por generaciones
2.2 Principios de diseo de los lenguajes: Eficiencia, Regularidad.
TERCERA SEMANA
Sesin 3:
3.1 Ventajas de los lenguajes de alto nivel
3.2 Inconvenientes de los lenguajes de alto nivel
3.3 Sintaxis: gramticas libres de contexto, ambigedad, asociatividad,
precedencia.
UNIDAD II: LENGUAJES IMPERATIVOS
CUARTA SEMANA
Sesin 4:
4.1 Antecedentes y caractersticas.
4.2 Ejemplos de Lenguajes imperativos o procedurales: C, Pascal, Fortran,
Cobol.
4.3 Semntica Bsica: atributos, ligaduras, declaraciones, bloques,
asignacin, tiempo de vida, variables y constantes.
QUINTA SEMANA
Sesin 5:
5.1 Tipos de datos: simples, constructores de tipos.
5.2 Expresiones y enunciados: enunciados condicionales, ciclos y
variaciones sobre while, manejo de excepciones.
SEXTA SEMANA
Sesin 6:
6.1 Procedimientos: semntica de los procedimientos, mecanismos de
paso de parmetros, asignacin de procedimientos.
SEPTIMA SEMANA
Sesin 7:
7.1 Gestin de memoria dinmica en tiempo de ejecucin.
7.2 Adecuacin al paradigma de orientacin a objetos.
OCTAVA SEMANA
Sesin 8:
Primer examen parcial.
Presentacin del Primer trabajo final.
172
UNIDAD III: LENGUAJES LGICOS
NOVENA SEMANA
Sesin 9.-
9.1 Definicin de lenguajes declarativos o lgicos
9.2 Introduccin
9.3 Tipos de lenguajes declarativos
DCIMA SEMANA
Sesin 10.:
10.1 Lenguajes funcionales
10.2 Lenguajes lgicos
10.3 Introduccin al Visual Prolog
ONCEAVA SEMANA
Sesin 11:
11.1 Caractersticas del Visual Prolog
11.2 Elementos del Visual Prolog
11.3 Ejercicios con Visual Prolog
DOCEAVA SEMANA
Sesin 12:
12.1 Hechos, objetos y relaciones
12.2 Reglas
12.3 Dominios, aritmtica y recursividad
12.4 Problemas que se presentan con la programacin lgica
UNIDAD IV: LENGUAJES ORIENTADOS A OBJETOS
TRECEAVA SEMANA
Sesin 13:
13.1 Introduccin
13.2 Lenguajes basados en objetos: Visual Basic
13.3 Lenguajes orientados a objetos: C++, Java
13.4 Tipos de datos abstractos
CATORCEAVA SEMANA
Sesin 14:
14.1 Objetos, Clases y mtodos
14.2 Gestin de memoria automtica
14.3 Herencia
QUINCEAVA SEMANA
Sesin 15:
15.1 Polimorfismo
15.2 Enlace dinmico
15.3 Herencia mltiple
DIECISEISAVA SEMANA
Sesin 16:
Examen final
DIECISIETEAVA SEMANA
Sesin 17:
Presentacin y exposicin del segundo trabajo.
173
5. METODOLOGA
Exposiciones en clase a cargo del Profesor.
Formacin de grupos de trabajo para control de lecturas y creacin de
mapas mentales.
Trabajos de investigacin grupal.
REQUERIMIENTOS DE EQUIPOS Y AYUDAS
Distribucin de Lecturas y Guas de Prcticas.
Sofwtare: TURBO C PARA WINDOWS 4.5, NET BEANS 6.0, VISUAL
PROLOG.
Un CD o USB para trabajos
Laboratorio equipado con computadoras
6. CRITERIOS DE EVALUACIN
Los pesos de las evaluaciones son:
Tarea Acadmica : TA
Examen Parcial : EP
Examen Final : EF
Promedio Final = (EP + (2 * TA) + EF)/3
7. BIBLIOGRAFA BASICA
LOUDEN, KENNETH Lenguajes de Programacin
Editorial Thomson, 2da edicin, 2003,
Mxico.
GRIES, DAVID The Science of Programming
Editorial Springer-Verlag, 2da edicin,
1986, USA
BIBLIOGRAFA COMPLEMENTARIA
AHO, ALFRED Compiladores: Principios, tcnicas y Herramientas
Editorial Addison Wesley, 2da edicin, 2008
BIRD, RICHARD Introduccin a la programacin funcional con Haskell
Editorial Prentice Hall, 2da edicin, 2000, Espaa
DEITEL Y DEITEL, C++ cmo programar
Editorial Prentice Hall, Mxico, 1999, Segunda Edicin.
JOYANES AGUILAR, LUIS. Programacin en C++ - Algoritmos,
estructuras de datos y objetos, Madrid: Editorial McGraw-
Hill/Interamericana de Espaa, primera edicin, 2000.
DEITEL Y DEITEL. Cmo Programar en Java, Mxico: Editorial
Prentice-Hall, primera edicin, 1998.
174
PHILLIP R. ROBINSON. Aplique Turbo Prolog, Espaa: Editorial
Osborne/McGraw-Hill, Primera Edicin, 1988.
SCHILDT, HERBERT. Turbo Prolog Programacin avanzada. Espaa:
Editorial McGraw-Hill/Interamericana de Espaa, S.A., Primera Edicin,
1988.
J.McALLISTER. Inteligencia artificial y Prolog en microcomputadoras.
Mxico: Alfaomega Grupo Editor, S.A., Primera Edicin, 1999.
BIBLIOGRAFIA VIRTUAL
http://www.elrincondelc.com/cursoc/cursoc.html
http://www.prenhall.com/deitel
Direccin de internet de: Aprenda C++ como si estuviera en primero
Direccin de internet de: Aprenda Leng. ANSI C como si estuviera en
primero
Direccin de internet de: Aprenda java como si estuviera en primero
http://java.programacion.net
Revistas Cientficas arbitradas: http://redalyc.uaemex.mx
175
ANEXOS
176
ANEXO NRO 1
LENGUAJES ALGEBRAICOS: SQL
CONSULTAS ANIDADAS Y COMPARACIONES DE CONJUNTOS
10.- /* C4 Preparar una lista con todos los nmeros de los proyectos en los que
participa un empleado de apellido Vizcarra, sea como trabajador o como Gerente
del departamento que controla el proyecto*/
select distinct numerop
from proyecto
where numerop in(select numerop
from proyecto, departamento, empleado
where numd=numerod and nssgte=nss and apellido=Vizcarra)
or
numerop in (select nump
from empleado_proyecto, empleado
where nsse=nss and apellido=Vizcarra)
Numerop
1
2
3
10
20
11.- /*C5 Obtener los nombres de los empleados cuyo salario es mayor que el de
todos los empleados del departamento 5*/
select apellido,nombrep
from empleado
where salario > all(select salario from empleado where nd=5)
apellido nombrep
Botello Jaime
Valdes Jazmin
12.- /* cc3 obtener el nombre de todos los empleados que tienen un dependiente
con el mismo sexo que el empleado*/
select e.nombrep, e.apellido
from empleado e
where e.nss in (select nsse
from dependiente
where nsse=e.nss and sexo=e.sexo)
nombrep apellido
Jos Silva
Federico Vizcarra
13.- /* cc4 obtener el nombre de todos los empleados que tienen un dependiente
con el mismo sexo que el empleado*/
select e.nombrep, e.apellido
from empleado e, dependiente d
where e.nss = d.nsse and e.sexo=d.sexo and e.nombrep=d.nombre_dependiente
nombrep apellido
Jos Silva
177
Federico Vizcarra
La funcion EXITS
14.- /* cc5 obtener el nombre de todos los empleados que tienen un dependiente
con el mismo sexo que el empleado*/
select e.nombrep, e.apellido
from empleado e
where exists (select *
from dependiente
where nsse=e.nss and sexo=e.sexo)
nombrep apellido
Jos Silva
Federico Vizcarra
15.- /*cc6 Obtener los nombres de los empleados que no tienen dependientes*/
select nombrep, apellido
from empleado
where not exists (select *
from dependiente
where nss=nsse)
nombrep apellido
Josefa Esparza
Ramn Nieto
Jaime Botello
Ahmed Jabbar
Alicia Zapata
16.- /*cc7 listar los nombres de los gerentes que tienen por lo menos un
dependiente*/
select nombrep, apellido
from empleado
where exists (select *
from dependiente
where nss=nsse)
and
exists (select *
from departamento
where nss=nssgte)
nombrep apellido
Federico Vizcarra
Jazmin Valdes
CONJUNTOS EXPLICITOS Y VALORES NULOS
17.- /*C12 Obtener el numero de seguro social de todos los empleados
que trabajan en los proyectos 1,2 o 3*/
select distinct nsse
from empleado_proyecto
where nump in(1,2,3)
123456789
178
333445555
453453453
666884444
FUNCIONES AGREGADAS Y AGRUPACIN
19.- /*C14 Obtener la suma de los salarios de todos los empleados, el salario
mximo, el salario mnimo y el salario medio*/
select sum(salario) as SUMA, max(salario)as MAXIMO, min(salario)AS MINIMO,
avg(salario) AS PROMEDIO
from empleado
SUMA MAXIMO MINIMO PROMEDIO
281000.00 55000.00 25000.00 35125.000000
20.- /*cc9 Obtener la suma de los salarios de todos los empleados del
departamento Investigacin , el salario mximo, el salario mnimo y el salario
medio*/
select sum(salario) as SUMA, max(salario)as MAXIMO, min(salario)AS MINIMO,
avg(salario) AS PROMEDIO
from empleado, departamento
where nd=numerod and nombred=Investigacin
SUMA MAXIMO MINIMO PROMEDIO
133000.00 40000.00 25000.00 33250.000000
21.- /*c15 Obtener el total de empleados de la CIA*/
select count(*) as TOTAL
from empleado
TOTAL
8
22.- /*C16 Obtener el nmero de empleados del dpto de Investigacin*/
select count(*) as TotInvest
from empleado,departamento
where nd=numerod and nombred=Investigacin
TotInvest
4
23.- /* cc10 contar el nmero de valores de salario distintos de la base de datos*/
select count (distinct salario) as Salarios_distintos
from empleado
Salarios_distintos
6
24.- /*cc11 obtener los nombres de todos los empleados que tienen 2 o ms
dependientes*/
select apellido, nombrep
from empleado
where (select count(*)
from dependiente
179
where nss=nsse) >= 2
apellido nombrep
Silva Jos
Vizcarra Federico
25.- /*C19 para cada dpto, obtener el nro de dpto, nro de empleados deldpto
y su salario medio*/
select nd,count(*) as numero,avg(salario) as promedio
from empleado
group by nd;
nd numeropromedio
1 1 55000.000000
4 3 31000.000000
5 4 33250.000000
26.- /*C20 para c/proyecto, obtener el numero y el nombre del proyecto; as como
el numero de empleados que trabajan en l*/
select numerop, nombrepr, count(*)as numero_empleados
from proyecto, empleado_proyecto
where numerop=nump
group by numerop,nombrepr
numerop nombrepr numero_empleados
1 ProductoX 2
2 ProductoY 3
3 ProductoZ 2
10 Automatizacin 3
20 Reorganizacin 3
30 Nuevasprestaciones 3
27.- /*C21 para cada proyecto en el que trabajan ms de 2 empleados, obtener el
numero y el nombre del proyecto, as como el numero de empleados que trabajan
en el*/
select numerop, nombrepr, count(*)as numero_empleados
from proyecto, empleado_proyecto
where numerop=nump
group by numerop,nombrepr
having count(*) > 2
numerop nombrepr numero_empleados
2 ProductoY 3
10 Automatizacin 3
20 Reorganizacin 3
30 Nuevasprestaciones 3