jueves, 4 de octubre de 2007

Bienvenidos a este tu blog



BIENVENIDOS

En este Blog, encontaras información de la asignatura de Lenguajes de Programación, que corresponde al sexto semestre de Ing. en Computación.
Por el momento, se desarrollará solo el primer capítulo, pero con la colaboración de todos los integrantes de los dos grupos de este semestre 2008-1, se irán completando estos apuntes.

De antemano a todos gracias.




A continuación encontrarán algunas ligas de interés, que tienen información afín a nuestro temario.



“El habla es la representación de la mente, y
la escritura es la representación del habla.”

ARISTÓTELES (384-322 a.C.) filósofo griego

INTRODUCCIÓN

CONCEPTO DE LENGUAJES

“...En términos generales, se puede entender como lenguaje los sistemas de símbolos y signos convencionales que son aceptados y usados individual y socialmente, con el fin de comunicar o expresar sentimientos, ideas, conocimientos , etc., por ejemplo, el lenguaje natural o articulado, el corporal, el artificial o formal, los sistemas de señalamiento, el arte, entre muchos otros tipos...” [1]

“...El lenguaje articulado o natural es la capacidad que de todos los seres humanos desarrollamos para organizar las ideas y comunicarlas de manera simbólica y articulada. El lenguaje, también conocido como lenguaje natural en oposición al artificial, se materializa en las lenguas. La lengua es un sistema, convencional, social, económico y estructural. Representa la combinación arbitraria y convencional de signos que un grupo social o una comunidad a adoptado para interactuar verbalmente...” “...El habla es la experiencia lingüística creativa e individual que cada hablante realiza de su lengua...”[2]

“...El lenguaje artificial o formal es un sistema lingüístico construido por uno o más individuos, sobre la base de lenguas históricamente existentes, con validez y difusión universal, es decir, como posibles instrumentos de comprensión internacional, por encima de los idiomas nacionales...”[3]
En el caso del lenguaje artificial se tiene como ejemplos los lenguajes de programación y el de las Matemáticas, que es el caso que se trata en este trabajo.
Un lenguaje artificial, una de sus principales características, es que es preciso, no se presta a ambigüedades, como lo sería el lenguaje natural como por ejemplo la palabra vino pude interpretarse como verbo y como sustantivo.

En el caso del lenguaje corporal, en la última década del siglo pasado, se ha descubierto una nueva ciencia: el lenguaje del cuerpo, y a su estudio científico ha sido llamado Kinesia. “...El lenguaje del cuerpo y la Kinesia tienen como base las pautas de conducta de la comunicación no verbal...” [4]es en algunos casos que el lenguaje corporal, puede contradecir o reafirmar las comunicaciones verbales.
La Kinesia es aún una ciencia muy nueva, que se encuentra en pleno desarrollo, pero que día a día, va adquiriendo mayor importancia, hay doctos autores que hablan de la Ingeniería de Imagen, basándose en esta ciencia.

“...Tanto individual como socialmente, la finalidad principal del lenguaje es la comunicación. El proceso de comunicación se entiende como el acto que realiza un

(receptor o destinatario)...” “...puede presentarse interferencias o ruido durante el proceso, lo cual puede impedir que la comunicación se realice eficazmente...”2.
Este ruido se puede deber en gran parte a que el redactor o autor de un manuscrito, no logre adaptarse a la comprensibilidad de los lectores.
Existen 2 formas de comunicación:
La oral, es la que se realiza a través de dos procesos, que son: la expresión oral y la comprensión auditiva. Aquí aparecen expresiones kinesica, paralingüísticas (tono, altura, velocidad, pausas de la voz) y proxémicos (la posición y manejo de espacios o distancias, tales como; íntima, personal, social y pública).
La segunda etapa de este trabajo se basa en este tipo de comunicación.
La escrita, es la que se auxilia de un medio visual o gráfico, es más elaborado y lenta que la oral, pero es duradera, fácilmente transportable, el emisor puede estar en otro tiempo y espacio diferente al transmisor y se lleva a cabo a través de dos destrezas: la comprensión lectora y la expresión escrita.
.

2. PROBLEMAS Y MODELOS
Para abordar el tema de aplicaciones financieras de máximos y mínimos, se comentará brevemente sobre los conceptos de problema y modelos.

Problemas
Se utiliza muy comúnmente este concepto de problema, sin embargo existen diferentes concepciones de él, e inclusive hay autores, que niegan su existencia, como a continuación se detalla:

Problema es, cuestión que se trata de resolver por medio de procedimientos científicos y cosa difícil de explicar, definición de diccionarios.
Se afirma que los problemas no existen y que solo son producto de nuestra imaginación, ya que si existieran no se podrían resolver de acuerdo a Ackoff.
Los problemas no existen objetivamente, es algo conceptual y cambia según cada persona y de su forma de conceptualizar la situación, por lo que el proceso de identificación es de diseño y no de descubrimiento según Ackoff y Graham.
Sin embargo se tiene que reconocer su existencia real afirma el mismo Akcoff, “Los problemas se extraen de estados de confusión desestructurados”.
“...aquellas situaciones que se presentan en la dirección o gestión de un sistema como una discrepancia entre lo que se tiene (So) y lo que se desea (S1)...”.
Esto quiere decir que estamos en un estado actual So y queremos llegar a un estado final S1, en donde existen diferencias entre estos dos estados.[5]



Tipos de problemas Según Checkland.
Estructurados, son los enunciados explícitamente, implican la existencia de una teoría o procedimiento de solución.
No estructurados, aquellos difíciles de resolver y no se pueden simplificar.

Dificultades en la formulación y solución de problemas.
Técnica.- la formulación del problema por las técnicas con que cuentan los especialistas, por lo que se pueden ver los problemas distorsionados (a veces muy fáciles o muy difíciles).
Herramental.- en la construcción del modelo matemático, se utilizan las más conocidas, no las más adecuadas, en muchas de las ocasiones.
Incertidumbre.- aún no se conoce completamente lo que se desea.
Problemática.- generalmente se presenta el problema por sus síntomas de inconformidad y se toma en cuenta la relación de causa-efecto.
Complejidad.- considerar la dependencia entre los elementos del sistema y con otros sistemas externos.
Ambigüedad.- puede haber diferentes visiones, perspectivas de la realidad, ya que esta se puede ver de acuerdo al color del cristal con que se mire.

Partes de un problema.
El que decide.- aquel o aquellas personas que se enfrentan al problema.
Variables controlables.- en el estado actual, son aquellos aspectos que pueden controlar quien toma las decisiones, por ejemplo en el sistema de transporte; el color de los vehículos, su capacidad, etc.
Variables no controlables.- En el estado actual, son aspectos que escapan del control de la persona que decide, como por ejemplo los costos de las importaciones de algunos productos debido a que pueden variar su precio internacional, así como la paridad de la moneda en la cual se cotice (caso del petróleo).
Restricciones propias.- son las que se imponen desde dentro o fuera de los 2 tipos de variables anteriormente mencionadas, como sería el tiempo de entrega, costos, etc.
Conjunto y evaluación de soluciones.- esta constituido por la definición de las alternativas y la evaluación de sus posibles éxitos.

Proceso de solución de problemas.
Diferentes autores de Planeación han desarrollado diferentes metodologías, de algunas de ellas se mencionan a continuación sus etapas:
Análisis de la problemática.- para obtener la visualización general de la organización y áreas problemáticas donde se manifiestan los estados de desorden, insatisfacciones, etc.
Identificación del problema y factibilidad.- evaluar si se puede resolver con las técnicas y herramientas matemáticas disponibles.
Construcción del modelo.- elaboración de la función de utilidad, que mide el rendimiento del sistema, a través de variables representativas.
Recolección de datos.- para estimar los valores de las variables del modelo y poder ajustarlo.
Soluciones del modelo.- consisten en la selección del conjunto de variables óptimas, que maximice la función de utilidad.
Implantación de la solución.- es la última etapa de la metodología.

De acuerdo a la metodología de la Planeación Normativa, se tienen los siguientes pasos:
Planteamiento de la situación problemática.
Investigación de lo real.
Formulación de lo deseado.
Evaluación y diagnóstico.

Problemática
“...cuando se trata con problemas, lo que se aprecia son sus efectos-síntomas y las reacciones que éstos provocan en las personas involucradas –insatisfacciones, perplejidad, apuro, etc.-, puesto que los problemas en sí no son necesariamente accesibles de manera inmediata a los sentidos. A este conjunto de manifestaciones del problema, por convención se le denominará problemática...”[6]

La importancia de conocer el problema se podría resumir en la siguiente frase según Ackoff “...se ha observado que es más frecuente no enfocar el problema correcto, que fallar en la solución del problema que se enfoca...”.[7] Por lo cual es importante darle un mayor énfasis a este tema relacionado con el concepto de problemas.

Modelos.
Existen diferentes definiciones, pero tal vez una que es muy sencilla es la siguiente:

“...la palabra modelo en los términos más generales. Se refiere simplemente a nuestra manera de proceder cuando tratamos de comprender las realidades del mundo que nos rodea...”. “...la construcción de modelos considerándola como un modo de pensar acerca del mundo en que vivimos...”[8].

También existen diferentes tipos de clasificaciones de modelos, una de las más sencillas es la siguiente:
mentales.
simbólicos.
matemáticos.
verbales.
Físicos.
Icónicos
analógicos.
Modelo mental es el de la más pura abstracción; el analógico son elementos de la realidad a escala, para resolver el problema; el icónico, es un modelo en dibujo tridimensional; el verbal casi es una versión escrita de las ideas del modelo y el matemático es la versión simbólica, expresada en el idioma de las matemáticas y puede manejarse como una simulación en computadora del problema.



Dentro de los modelos matemáticos, que son los que se tocan en este trabajo se tienen entre otros los siguientes:
Cuantitativos y cualitativos
Los cuantitativos son aquellos en que los principales símbolos representan números. También se pueden asignar símbolos a las constantes y variables, que a su vez también generalmente representan números.
Este tipo de modelos de los más comunes y útiles en los negocios y en las finanzas.

Los cualitativos tratan las cualidades de componentes de los problemas, como símbolos, que en su mayor parte no son numéricas.
Existen diferentes aplicaciones para este tipo de modelos, como lo es la Teoría de Conjuntos.[9]

Probabilísticas y determinados
Los probabilísticas se basan en las Matemáticas de la Estadística y Probabilidad, donde interviene el concepto como la incertidumbre que generalmente acompañan las observaciones de acontecimientos o eventos reales.
El determinado es que no contiene consideraciones probabilísticas, los factores a considerar son cantidades exactas o determinadas.[10]

Descriptivos y optimizadotes
Los descriptivos son los modelos que se construyen para describir una situación del mundo real en términos matemáticos, con el fin de tener más claridad en la situación del modelo y poderlo reajustar.
El optimizadotes es el modelo que permite mostrar varias soluciones y permite elegir entre varias alternativas, conforme a los criterios que forman parte del modelo. Como por ejemplo maximizar ganancias o minimizar costos.[11]



CONCEPTO DE LENGUAJES DE PROGRAMACIÓN

Un lenguaje de programación es otra forma de comunicación (lenguaje artificial), la cual permite expresar las instrucciones que han de ser ejecutadas en una computadora digital y sirve para comunicar computadoras y humanos o entre humanos y humanos y solo son ideas algorítmicas, ya que no sirven para expresar sentimientos. El Lenguaje de programación consiste en un conjunto de reglas sintácticas (sintaxis) y semánticas (significado) que definen un programa de computadora, así como para un lenguaje natural, tiene su gramática y su semántica.

Un lenguaje de programación hace que un programador pueda especificar de manera exacta: sobre qué datos una computadora debe operar así cómo deben ser estos almacenados, utilizados y transmitidos y, qué acciones se deben tomar bajo una gran gama de circunstancias.

Cada vez más se trata de que un lenguaje de programación llegue a parecerse más al lenguaje humano o natural.

Un programa escrito en un lenguaje de programación necesita pasar por un proceso de compilación, es decir, ser traducido al lenguaje de máquina, o ser interpretado (como es el caso del Dr. Sheme) para que pueda ser ejecutado por una computadora.


Existen diferentes tipos de clasificaciones de los lenguajes de programación, a continuación se mencionan algunos de ellos:


ALTO Y BAJO NIVEL

Los lenguajes pueden ser de alto o bajo nivel. En los de bajo nivel las instrucciones son simples y cercanas al funcionamiento de la máquina real, como pueden ser el código de máquina y el ensamblador. Son mucho más rápidas sus ejecuciones.

Los lenguajes de alto nivel tienen un alto grado de abstracción y esta mas cercano al lenguaje artificial entre los que se tienen C, Pascal Fortran, Algol, etc.

Los programas escritos en algún lenguaje deben ser traducidos al código entendido por la máquina real (de la arquitectura de la máquina multinível) para poder ser ejecutados. Cuando esta traducción se realice en tiempo de diseño o en tiempo de ejecución los lenguajes se llaman compilados o interpretados.
Puede darse el caso como el del Dr Sheme que tenga las dos características.


1.1 HISTORIA DE LOS LENGUAJES DE PROGRAMACIÓN

Hablar de los inicio de los lenguajes de programación, puede no ser tan exacta, ya que se puede remontar desde la época de Blas Pascal, (1642), o a Charles Babbage (1812-1834), hasta loas avances actuales, con el desarrollo de las telecomunicaciones y la electrónica.

Pero a continuación se trata de de resumir los avances más significativos:

Evolución de los Lenguajes de programación (LDP)


1.2 ELEMENTOS DE LOS LENGUAJES DE PROGRAMACIÓN
Introducción
Todo lenguaje de programación tiene una serie de elementos que le permiten utilizar diferentes tipos de datos y manipularlos por medio de abstracciones y es a través de ellas que se logran definir instrucciones, para producir un algoritmo previamente diseñado para solucionar algún problema utilizando una computadora digital, entre los elementos esenciales de un lenguaje de programación se tienen:
Operadores
Declaraciones
Constantes
Variables
Funciones de Biblioteca
1.- Operadores
Se componen de dos tipos; los lógicos y los aritméticos.
Entre los lógicos están el AND, el OR, el XOR y el NOT.
Y los aritméticos están:
Menos unario
exponenciación
División
Multiplicación
Suma
Resta
2. Declaraciones
Las instrucciones de un programa se dividen en ejecutables y no ejecutables, las declaraciones caen en el campo de las no ejecutables, pero dan a la computadora la información necesaria sobre las características de las variables, tales como de que tipo son (compuesta o simples por ejemplo).
3. Constantes
Son localidades de memoria, donde sus valores son inicialiados al principio de la ejecución del programa y no son modificadas durante su ejecución. Pudiendo ser del tipo Enteras, Reales, Alfanuméricas, etc.

4. Variables
También son localidades de memoria, pero que pueden ir cambiando su contenido en el transcurso de la ejecución de un programa y también pueden ser del tipo Enteras, Reales, Alfanuméricas, etc.

5. Funciones de Biblioteca
Son subprocesos programados, identificado con un nombre, seguido de paréntesis y pudiendo llegar a tener argumentos, se deben de escribir tal como se definen y no se puede alterar su sintaxis.



1.3.- Entorno de programación
Siguiendo la terminología anterior, es el banco de trabajo del programador
Da soporte a las actividades de la fase de codificación (preparación del código y prueba de unidades)
Los mismos productos sirven también para el diseño detallado y para las pruebas de integración.
Se sitúa, por tanto, en la parte central del ciclo de desarrollo
Funciones de un Entorno de Programación
Como se ha dicho, la misión de un Entorno de Programación es dar soporte a la preparación de programas, es decir, a las actividades de codificación y pruebas.
Las tareas esenciales de la fase de codificación son:
Edición (creación y modificación) del código fuente
Proceso/ejecución del programa
Interpretación directa (código fuente)
Compilación (código máquina) - montaje - ejecución
Compilación (código intermedio) - interpretación
Otras funciones:
Examinar (hojear) el código fuente
Analizar consistencia, calidad, etc.
Ejecutar en modo depuración
Ejecución automática de pruebas
Control de versiones
Generar documentación, reformar código
Tipos de Entornos de Programación
Un entorno de programación puede estar concebido y organizado de maneras muy diferentes. A continuación se mencionan algunas de ellas.
En las primeras etapas de la informática la preparación de programas se realizaba mediante una cadena de operaciones tales como la que se muestra en la figura para un lenguaje procesado mediante compilador. Cada una de las herramientas debía invocarse manualmente por separado. En estas condiciones no puede hablarse propiamente de un entorno de programación
El editor es un editor de texto simple
El compilador traduce cada fichero de código fuente a código objeto
El montador (linker / builder / loader) combina varios ficheros objeto para generar un fichero ejecutable
El depurador maneja información en términos de lenguaje de máquina

Un entorno de programación propiamente dicho combina herramientas como éstas, mejoradas y mejor integradas. A veces se nombra con las siglas IDE (Integrated Development Environment). Los componentes cuya evolución ha sido más aparente son los que realizan la interacción con el usuario:
El editor ya no es un simple editor de texto, sino que tiene una clara orientación al lenguaje de programación usado (reconoce y maneja determinados elementos sintácticos)
El depurador no presenta información en términos del lenguaje de máquina, sino del lenguaje fuente
El editor está bien integrado con las demás herramientas (se posiciona directamente en los puntos del código fuente en los que hay errores de compilación, o que se están ejecutando con el depurador en un momento dado.
No es fácil establecer una clasificación dentro de la variedad de entornos de programación existentes. En algún momento se describieron las siguientes clases de entornos, no excluyentes:
Entornos centrados en un lenguaje
Entornos orientados a estructura
Entornos colección de herramientas
Entornos centrados en un lenguaje
Presentan las siguientes características generales:
Son específicos para un lenguaje de programación en particular
Están fuertemente integrados. Aparecen como un todo homogéneo
Se presentan como una herramienta única
El editor tiene una fuerte orientación al lenguaje
Son relativamente cómodos o fáciles de usar
A veces son poco flexibles en lo referente a la interoperación con otros productos o a la ampliación de sus funciones
Se basan en representar el código fuente como texto
Podemos encontrar ejemplos de estos entornos para todo tipo de lenguajes
Lenguajes funcionales con interpretación directa
(Inter)Lisp, Haskell, etc.
Lenguajes compilados a código de máquina nativo
Delphi, Visual C++, AdaGide/GNAT, GPS, etc.
Lenguaje ejecutados sobre máquina virtual
Java (Visual Age, Eclipse), C# (Visual Studio .NET)
Ejemplos especiales:
Entornos Ada (Stoneman, Cais, Asis)
Entornos Smalltalk
Entornos Oberon, Component Pascal
Entornos orientados a estructura
Podrían considerarse incluidos en la clase anterior, ya que suelen ser específicos para un lenguaje de programación, pero están concebidos de manera diferente:
El editor de código fuente no es un editor de texto, sino un editor de estructura (editor sintáctico)
Se basan en representar internamente el código fuente como una estructura:
Árbol de sintaxis abstracta: AST
La presentación externa del código es en forma de texto
Plantillas (elementos sintácticos no terminales)
Texto simple (elementos terminales - a veces "frases" para expresiones)
Compilación incremental (en algunos casos)
Para desarrollo personal, no en equipo
Ejemplos:
The Cornell Program Synthesizer (subconjunto de PL/I)
Mentor (Pascal)
Alice Pascal
Gandalf (intenta ser un entorno de desarrollo completo, para todo el ciclo de vida)
Estos entornos estuvieron de moda en los años 80. Los desarrollos fueron fundamentalmente académicos, y quedaron en desuso. En la actualidad los lenguajes de marcado (XML) pueden ser una buena forma de representar la estructura del código fuente con vistas a su manipulación. Existen editores y procesadores XML que podrían ser la base de nuevos entornos de programación orientados a estructura.
Entornos basados en combinación de herramientas
Consisten en una combinación de diversas herramientas capaces de interoperar entre ellas de alguna manera. Se denominan entornos toolkit. Presentan las siguientes características:
Presentan integración débil
Son un conjunto de elementos relativamente heterogéneos
Son fáciles de ampliar o adaptar mediante nuevas herramientas
Pueden ser construidos en parte por el propio usuario (programador): éste es más o menos el estilo UNIX original
Ofrecen poco control de uso de cada herramienta
El elemento frontal (front-end) para interacción con el usuario suele ser un editor configurable, con llamadas a herramientas externas. A veces estos editores configurables se designan también con las siglas IDE (que debería reservarse para el entorno completo)
Ejemplos de editores configurables
Emacs, Vim, Gvim
Med, SciTE, jEdit
Eclipse (algo más que un editor)

[1] Cuairán Ruidíaz María y Amelia Guadalupe Fiel Rivera, Notas del curso de Orientación para la elaboración de textos didácticos de Ingeniería. 2ª edición, México, Facultad de Ingeniería UNAM, 2004, págs. 7 y 8

[2] idem
[3] idem
[4]Fast Julius, El lenguaje del cuerpo, 13ª edición, Barcelona España, Kairós, 1996, p. 7.


[5] Fuentes Zenón Arturo y Silvia O. Perales Rivera, Seminario y taller de metodología. Cuadernos de Planeación y Sistemas No. 2 Diagnostico: Bases Conceptuales, Metodologías y Técnicas. [s.e.], México, Facultad de Ingeniería División de Estudios de Posgrado UNAM, 1989, p. 5

[6] Fuentes Zenón Arturo y Silvia O. Perales Rivera, Seminario y taller de metodología. Cuadernos de Planeación y Sistemas No. 2 Diagnostico: Bases Conceptuales, Metodologías y Técnicas. [s.e.], México, Facultad de Ingeniería División de Estudios de Posgrado UNAM, 1989, p. 7

[7] Ackoff Rusesell L., El arte de resolver problemas, 3ª. Reimpresión, México, Limusa, 1987 págs. 25-26 Cit. En turo y Silvia O. Perales Rivera, Seminario y taller de metodología. Cuadernos de Planeación y Sistemas No. 2 Diagnostico: Bases Conceptuales, Metodologías y Técnicas. [s.e.], México, Facultad de Ingeniería División de Estudios de Posgrado UNAM, 1989, p. 2

[8] Springer Clifford H., Robert E. Herlin y Robert I. Beggs, Métodos avanzados y Modelos. 1ª edición en español, México, UTEHA (Unión Tipográfica Editorial Hispano-Americana), 1972, p. 4

[9] Idem p. 12.
[10] Idem págs. 12-13
[11] Idem págs. 13-14.