lp12

51
1 Lenguajes de programación Abdiel E. Cáceres González Instituto Tecnológico de Monterrey Campus Ciudad de México Verano 2004 Tower of Babel by Gustav Dore 1986

Upload: abadon-widmore

Post on 06-Nov-2015

212 views

Category:

Documents


0 download

DESCRIPTION

Lennguajes de programacion

TRANSCRIPT

  • 1Lenguajesde

    programacinAbdiel E. Cceres GonzlezInstituto Tecnolgico de Monterrey

    Campus Ciudad de MxicoVerano 2004

    Tower of Babel by Gustav Dore 1986

  • 2Algo de Historia del Smalltalk

    El concepto de programacin orientada a objetos tiene sus races en Simula 67, pero se desarroll completamente en la evolucin del lenguaje Smalltalk.

    La programacin orientada a los datos se enfoca en el uso de tipos de datos abstractos. En este paradigma, la denicin estructural y la implementacin de los procesos se ocultan de las unidades del programa que las usan.

    Enfocarse en los datos es lo opuesto del enfoque procedural tradicional que se enfoca precisamente en los procesos y su implementacin en subprogramas.

  • 3Algo de Historia del Smalltalk

    El paradigma de programacin orientada a los datos fue popular en los 1980s, y est bien ilustrado en las facilidades de abstraccin de datos proporcionadas por Modula-2 y Ada.

    Una restriccin fundamental de los tipos de datos abstractos es que, una vez denidos, no pueden ser convenientemente modicados para aplicaciones ligeramente diferentes. Tampoco hay manera de colectar las caractersticas comunes de una familia de tipos cercanamente relacionados.

    Los lenguajes para programacin orientada a objetos extienen la abstraccin de datos con el mecanismo de herencia para poder proporcionar estas capacidades. Ni Ada ni Modula-2 proporcionan mecanismos de herencia.

  • 4Algo de Historia del Smalltalk

    La herencia comenz, de forma limitada, en Simula 67, cuyas clases pueden ser denidas en jerarquas. En los lenguajes de tipos estticos tales como Simula 67 y C++, la herencia es una generalizacin de la idea de subtipos.

    En Ada, un subtipo del tipo interno INTEGER hereda todas las operaciones de INTEGER. La herencia permite que tanto las clases internas como las denidas por el usuario puedan heredar las caractersticas de las clases existentes.

    El resultado es que los nuevos programas suelen construirse como variaciones de las unidades existentes, que en este caso son las clases. Esto proporciona una tcnica efectiva para reuso de software.

  • 5Algo de Historia del Smalltalk

    El principal responsable del desarrollo de Smalltalk fue Alan Kay.

  • 6Algo de Historia del Smalltalk

    Cuando Kay era un estudiante de doctorado en la Universidad de Utah, a nes de los 1960s, se convenci de que algn da sera posible poner el poder de lo que en ese entonces era una computadora de $1 milln de dlares, en una notebook.

  • 7Algo de Historia del Smalltalk

    Kay profetiz que la idea de una computadora en cada hogar se volvera una realidad en unos aos ms y pens que los lenguajes de programacin de la poca resultaran inecientes debido a que estaban dirigidos a usuarios con una formacin ms tcnica.

    Su idea fue proporcionar un ambiente altamente interactivo y usar grcos sosticados para proporcionar una interfaz ms amigable con el usuario.

  • 8Algo de Historia del Smalltalk

    Kay se vio notablemente inuenciado en el diseo de Smalltalk en lenguajes tales como FLEX (un lenguaje que l mismo ayud a disear), LOGO (un lenguaje diseado por Seymour Papert en el MIT para ensear a los nios a programar) y Simula 67 (el primer lenguaje orientado a objetos, que estaba basado en Algol 60).

    Seymour Papert

  • 9Algo de Historia del Smalltalk

    El lenguaje de programacin FLEX todava estaba muy orientado a los especialistas, por lo que Kay decidi tomar algunas ideas de LOGO para hacerlo ms fcil de usar. As naci Smalltalk.

    El concepto original de Kay era un sistema al que l denomin Dynabook, el cual se basaba en el paradigma del escritorio tpico, en el cual comnmente hay varios papeles, algunos de los cuales estn parcialmente cubiertos.

    La hoja que se encuentra hasta arriba suele ser el foco de atencin, mientras que las dems estn temporalmente fuera de foco. Por lo tanto, la pantalla del Dynabook modelara precisamente esta escena, usando el concepto de ventanas de pantalla.

  • 10

    Algo de Historia del Smalltalk

    El usuario interactuara con este dispositivo a travs de un teclado y tocando la pantalla con sus dedos. Tambin se pretenda que el Dynabook se pudiera conectar a un estreo, de manera que pudiese usarse para generar msica.

    Tambin se podra conectar a las lneas de comunicacin, a n de proporcionar acceso a bancos de datos compartidos de gran tamao. Es decir, que el Dynabook estara conectado en red.

    Despus de que el diseo preliminar del Dynabook le vali obtener el doctorado en computacin a Alan Kay, su meta pas a ser el ver construida esta mquina.

  • 11

    Algo de Historia del Smalltalk

    Kay se present a solicitar trabajo en el Xerox Palo Alto Research Center (Xerox PARC). Ah present sus ideas sobre el Dynabook, y stas le valieron ser contratado. Con su incorporacin, naci el Learning Research Group de Xerox.

  • 12

    Algo de Historia del Smalltalk

    La primera tarea del grupo fue disear un lenguaje que apoyara la idea del paradigma de programacin propuesto por Kay. Adems, el grupo implementara dicho lenguaje en la mejor computadora personal disponible en aquel entonces.

  • 13

    Algo de Historia del Smalltalk

    Estos esfuerzos produjeron un Dynabook temporal, el cual consista en hardware de la computadora Alto, de Xerox, y en software del Smalltalk-72.

  • 14

    Algo de Historia del Smalltalk

    Juntos, se convirtieron en una herramienta de investigacin que condujo a nuevos desarrollos y a depurar el software y hardware disponibles.

    En 1973, estuvo disponible un Dynabook temporal del tamao de un escritorio. Ambos se usaron en diversos experimentos computacionales que involucraron a ms de 250 nios (de entre 6 y 15 aos de edad) y a 50 adultos.

  • 15

    Algo de Historia del Smalltalk

    A la par de estos experimentos se produjeron nuevos desarrollos que condujeron al Smalltalk-74, Smalltalk-76, Smalltalk-78 y, nalmente, Smalltalk-80. Esta ltima versin es la que discutiremos en este curso.

  • 16

    Algo de Historia del Smalltalk

    Una pantalla tpica del Dynabook muestra una cierta cantidad de ventanas, que son reminiscencia de papeles dispersos sobre un escritorio.

    Estas ventanas contienen muchos tipos de informacin, incluyendo programas en Smalltalk, salida de programas, correo, documentos en edicin, informacin de depuracin, mens, directorios, diagramas, dibujos, e informacin de estatus (p.ej., la fecha y la hora).

    Los usuarios enfocan su atencin a una ventana especca apuntando a ella con un cierto dispositivo (normalmente un ratn o el dedo del usuario).

  • 17

    Organizacin Estructural

    Esto permite a los usuarios trabajar en muchas cosas diferentes a la vez puesto que pueden suspender su actividad en una ventana y continuar otra actividad distinta en otra simplemente moviendo el apuntador de una a otra ventana.

    Smalltalk maneja las ventanas de manera que su uso resulte conveniente. Por ejemplo, si el usuario toca una ventana, entonces se le coloca en la parte superior de otras ventanas que pudieron haber estado ocultndola parcialmente. Las ventanas pueden tambin moverse alrededor de la pantalla usando el ratn.

    Smalltalk es un lenguaje altamente interactivo y se implementa como intrprete. Aunque mucha de la comunicacin con el usuario se realiza a travs del ratn, es posible escribir comandos a ejecutarse en una ventana de dilogo.

  • 18

    Organizacin Estructural

    Hay dos formas primarias de denir cosas en Smalltalk. La primera asocia un nombre a un objeto. Por ejemplo:

    x 5y x - 2

    asocia x al objeto 5 & y al objeto 3.

  • 19

    Organizacin Estructural

    La otra forma de denir cosas es a travs de la denicin de clases. Las clases son similares a los paquetes en Ada.

    El usuario solicita la evaluacin de una expresin escribiendo una expresin tal como x*5.

  • 20

    Organizacin Estructural

    El dilogo sera el siguiente:

    x*5

    25

    Smalltalk interpreta esta accin como si se enviara el mensaje *5 al objeto x.

  • 21

    Organizacin Estructural

    Las unidades de programa en Smalltalk son los objetos. Los objetos son estructuras que encapsulan datos locales y un conjunto de operaciones llamadas mtodos, las cuales estn disponibles a otros objetos.

    Un mtodo especica la reaccin del objeto cuando recibe el mensaje en particular que corresponde a ese mtodo. El mundo de Smalltalk est poblado solamente de objetos, desde constantes enteras hasta grandes sistemas de software de enorme complejidad.

  • 22

    Organizacin Estructural

    Algunas de las ideas fundamentales de Smalltalk son las siguientes:

    1) Los objetos tienen un comportamiento.

    2) Se puede hacer que los objetos hagan cosas mediante el envo de mensajes.

    3) Las operaciones repetitivas se pueden simplicar usando estructuras de control.

  • 23

    Organizacin Estructural

    Todo el cmputo en Smalltalk se realiza mediante la misma tcnica uniforme (siguiendo el Principio de Regularidad): enviar un mensaje a un objeto para invocar uno de sus mtodos.

  • 24

    Organizacin Estructural

    La rplica a un mensaje es un objeto que retorna la informacin solicitada, o simplemente notica al remitente que el procesamiento solicitado ha sido completado.

    La diferencia fundamental entre un mensaje y la invocacin a un subprograma es la siguiente: Se enva un mensaje a un objeto de datos, el cual es luego procesado mediante cdigo asociado con el objeto; una invocacin a subprograma usualmente enva los datos a ser procesados a una unidad de cdigo del subprograma.

  • 25

    Organizacin Estructural

    Desde el punto de vista de la simulacin, Smalltalk es una simulacin de colecciones de computadoras (objetos) que se comunican entre s (a travs de mensajes).

    Cada objeto es una abstraccin de una computadora en el sentido de que almacena datos y proporciona capacidad de procesamiento para manipular los datos. Adicionalmente, los objetos pueden enviar y recibir mensajes, las cuales son capacidades bsicas de una computadora.

  • 26

    Organizacin Estructural

    En Smalltalk, las abstracciones de objetos son las clases, las cuales son muy similares a las clases de Simula 67. Pueden crearse instancias de una clase, las cuales se convierten entonces en los objetos del programa. Cada objeto tiene sus propios datos locales y representa una diferente instancia de su clase.

    La nica diferencia entre dos objetos de la misma clase es el estado de sus variables locales.

    Podemos tambin denir clases en Smalltalk, y estas nuevas clases pueden ser instanciadas cualquier nmero de veces, al igual que las clases nativas del lenguaje.

    Esto sigue los Principios de Abstraccin y Regularidad.

    Smalltalk tiene 4 tipos de expresiones: literales, nombres de variables, expresiones de mensajes y expresiones de bloque.

  • 27

    Organizacin Estructural

    Literales: Las literales ms comunes son los nmeros, cadenas y palabras clave. Los nmeros son objetos literales que representan valores numricos, pero son muy diferentes de las literales numricas de los lenguajes imperativos tradicionales.

    En dichos lenguajes, los nmeros actan como constantes nombradas, ya que se les asocia con posiciones de memoria que contienen sus valores. En Smalltalk, los nmeros son objetos que son caracterizados mediante su protocolo de mensajes y mediante los resultados que producen cuando reciben mensajes.

  • 28

    Organizacin Estructural

    Sintcticamente, una cadena es una secuencia de caracteres delimitada por apstrofes. Semnticamente, una cadena es un objeto que es capaz de responder a mensajes que accesan a caracteres individuales, reemplazan subcadenas, y efectan comparaciones con otras cadenas.

    Una palabra clave es un identicador, el cual puede ser denido por el usuario, mediante el uso de los dos puntos (:) al nal.

  • 29

    Organizacin Estructural

    Variables: Son sintcticamente similares a las de otros lenguajes de programacin: una secuencia de letras y/o dgitos que empiezan con una letra. Las variables en Smalltalk se dan en dos variedades: privadas (locales a un objeto) y compartidas (visibles fuera del objeto en el que se declararon).

    Los nombres de las variables privadas deben empezar con minscula. Los nombres de las variables compartidas deben comenzar con mayscula.

    Todas las variables en Smalltalk son apuntadores; slo pueden referirse a objetos o clases. En cierto sentido, no tienen tipo, porque una variable puede apuntar a cualquier objeto.

  • 30

    Organizacin Estructural

    Expresiones de Mensaje: Los mensajes tienen la forma de expresiones. Proporcionan el medio de comunicacin entre los objetos y son la forma en que se solicitan las operaciones de un objeto.

    Las expresiones de mensaje tienen dos partes: una especicacin del objeto que va a recibir el mensaje, y el mensaje en s. El mensaje especica un selector o mtodo en el objeto receptor y posiblemente uno o ms parmetros.

    Los parmetros son, al igual que las variables, apuntadores a otros objetos. Cuando se evala un mensaje, se enva al objeto receptor especicado.

  • 31

    Organizacin Estructural

    Hay 3 categoras de mensajes: unarios, binarios y palabra clave. Los mensajes unarios son el tipo ms simple, pues no tienen parmetros. Slo tienen dos partes: el objeto al cual se envan y el mtodo en el objeto receptor. El primer smbolo de un mensaje unario especica un objeto receptor; el ltimo smbolo especica el mtodo del objeto que ser ejecutado.

  • 32

    Mensajes unarios (ejemplo)

    x sin "return the result of sin(x)"

    Date tomorrow "answer a new instance of class Date"

    5 factorial "return the factorial of 5"

    `hi' outputToPrinter "Send the string `hi' to the printer

  • 33

    Mensajes binarios (ejemplo)

    a + b "returns the result of sum a and b"

    a | b "returns the result of "ORing" a with b"

    a >= b "compares to see if a is greater than or equal to b and returns either true or false"

  • 34

    Mensajes palabra clave

    AnObject aMessage: parameter

    Array new: 20 "The message new: is sent to the object Array with parameter 20"

    TheDate month: currentMonth year: currentYear "Set the private data for object TheDate to month = currentMonth and year = currentYear"

    Student name: `Steve' address: `Raleigh, "Set the appropriate variables in the Student object according to the parameter

  • 35

    Organizacin Estructural

    Por ejemplo, el mensaje:

    primerAngulo sin.

    enva un mensaje sin parmetros al mtodo sin del objeto primerAngulo.

    Puesto que todos los objetos son referenciados mediante apuntadores, primerAngulo es realmente un apuntador a un objeto.

  • 36

    Organizacin Estructural

    Los mensajes binarios tienen un solo parmetro:

    un objeto que es pasado al mtodo especicado del objeto receptor especicado.

    Entre los mensajes binarios ms comunes se encuentran las operaciones aritmticas.

    Ejemplos:

    2+12

    suma/contador

  • 37

    Organizacin Estructural

    Las palabras clave especican una o ms palabras clave que sirven para organizar la correspondencia entre los parmetros enviados en el mensajes y los especicados originalmente en el mtodo.

    Es decir, las palabras clave actan a manera de enlace para seleccionar el mtodo al cual se dirige un mensaje. Los mtodos que aceptan mensajes de una palabra clave no tienen nombre. Tales mtodos se identican mediante las mismas palabras clave.

  • 38

    Organizacin Estructural

    Considere el siguiente ejemplo:

    primerArreglo at: 1 put: 5

    Este mensaje enva los objetos 1 y 5 a un mtodo particular del objeto primerArreglo.

    Las palabras clave at: y put: identican los parmetros originales del mtodo al cual se enviarn los valores 1 y 5, respectivamente. El mtodo al cual se enviar este mensaje incluye las palabras clave del mensaje, las cuales hacen las veces de identicador. A este tipo de mensaje se le llama selector.

  • 39

    Organizacin Estructural

    Las expresiones unarias tienen la precedencia ms alta, seguidas de las expresiones binarias y luego de las expresiones con palabras clave. Tanto las expresiones unarias como las binarias se asocian de izquierda a derecha.

    Esto es muy diferente de las reglas de precedencia usadas en lenguajes tales como Pascal y C. Las expresiones, sin embargo, pueden rodearse de parntesis, a n de forzar un cierto orden de evaluacin de los operadores.

  • 40

    Organizacin Estructural

    Los mensajes pueden ser enviados en cascada. Esto signica que pueden enviarse mltiples mensajes al mismo objeto sin tener que duplicar el nombre del objeto receptor. Esto se hace separando los grupos de parejas selector-parmetro mediante el uso de punto y coma (;).

    Los mensajes se envan secuencialmente, conforme aparecen, de izquierda a derecha:

    ourPen home; up; goto: 500@500; down; home

  • 41

    Organizacin Estructural

    Lo anterior es equivalente a:

    ourPen home.

    ourPen up.

    ourPen goto: 500@500.

    ourPen down.

    ourPen home.

    Advierta que se usan puntos para separar los mensajes que se envan a mtodos diferentes y los cuales aparecen en lneas separadas. Esto es similar al uso del punto y coma en Pascal (utilizado para separar sentencias).

  • 42

    Organizacin Estructural

    Expresiones de Bloque: Un bloque es un objeto literal sin nombre que contiene una secuencia de expresiones. Los bloques son instancias de la clase Block. Puede enviarse un mensaje a un bloque colocndolo inmediatamente despus del bloque.

    Uno de los aspectos ms inusuales de Smalltalk es que sus estructuras de control no son proporcionadas por sentencias del lenguaje. En vez de eso, se forman con el paradigma fundamental de la orientacin a objetos: el paso de mensajes.

    Los bloques proporcionan una manera de colectar expresiones a n de formar grupos. Estos grupos pueden luego ser usados para construir estructuras de control. Un bloque se especica mediante el uso de corchetes, separando sus componentes mediante puntos.

  • 43

    Organizacin Estructural

    Ejemplo:

    [index index + 1. sum sum + index]Las expresiones en un bloque son acciones diferidas, ya que no se ejecutan cuando se les encuentra.

    Ms bien, los bloques son ejecutados slo cuando a stos se les enva el mensaje unario value. Por ejemplo:

    [sum sum + index] valueLo anterior enva el mensaje value al bloque, lo que provoca su ejecucin. Cuando se completa la ejecucin de un bloque, se regresa el valor de la ltima expresin en el bloque.

  • 44

    Organizacin Estructural

    Los bloques siempre se ejecutan en el contexto de su denicin (asociacin dinmica), aun cuando se les enve como parmetros a un objeto diferente. Por lo tanto, estn relacionados semnticamente con el mecanismo de paso por nombre de Algol-60.

  • 45

    Organizacin Estructural

    Los bloques pueden verse como declaraciones de procedimientos que pueden aparecer en cualquier parte. Al igual que los procedimientos, los bloques pueden tener parmetros. Dichos parmetros se especican en una seccin al inicio del bloque. A esta seccin se le separa mediante el uso de una barra vertical (|).

    Las especicaciones de parmetros requieren de la colocacin de dos puntos (:) al extremo izquierdo de cada parmetro. Dado que no hay tipos declarados, estas especicaciones incluyen slo los nombres de los parmetros del bloque, los cuales se listan sin ningn tipo de separador.

    Ejemplo:

    [:x :y | sum x + 10. total sum * y]Los bloques proporcionan un medio para colectar expresiones, de forma que son una manera natural de formar estructuras de control en Smalltalk.

  • 46

    Iteracin

    Los bloques pueden contener expresiones relacionales, en cuyo caso regresan uno de los objetos Booleanos predenidos: true o false. Tales bloques son algunas veces llamados condicionales. Los dos objetos true y false tienen mtodos que proporcionan algunas de las facilidades para construir estructuras de control.

    Los ciclos con la decisin al inicio pueden formarse en Smalltalk usando la palabra clave method whileTrue:, la cual es proporcionada por la clase Block. Esta palabra clave se usa para enviar el bloque a ser controlado por un segundo bloque que contiene la condicin del ciclo.

    Este mtodo est denido para todos los bloques que regresen objetos Booleanos. El mtodo whileTrue: est denido para enviar value al objeto que contenga el mtodo (ya sea true o false), causando en consecuencia que se ejecute el bloque que se le pas como parmetro.

  • 47

    Iteracin

    Ejemplo:

    count 0.sum 0.[count

  • 48

    Iteracin

    Otra estructura de control comn para ciclos es la simple repeticin mediante un contador. Para esto, existe un mtodo para los enteros llamado timesRepeat:. Cuando se enva timesRepeat: a un entero con un bloque como parmetros, dicho bloque se ejecuta el nmero indicado de veces.

    Ejemplo:

    xCube 1.3 timesRepeat: [xCube xCube * x]

    Esto calcula el cubo de x mediante un proceso bastante tedioso.

  • 49

    Iteracin

    Pueden construirse estructuras de control para ciclos similares a las de Algol-68 usando algunos de los mtodos para enteros que proporciona Smalltalk. Los dos mtodos ms tiles son: to:do: y to:by:do.

    Ejemplo:

    1 to: 5 do: [sum sum + x]Este bloque es ejecutado 5 veces. Los valores internos producidos y regresados por el objeto 1 son: 1, 2, 3, 4 y 5.

    Un ejemplo del segundo mtodo es:

    2 to: 10 by: 2 do: [:even | sum sum + even]Este mensaje hace que el bloque se ejecute 5 veces, pero en este caso los valores internos producidos son: 2, 4, 6, 8 y 10.

  • 50

    Seleccin

    Se proporciona el mtodo ifTrue:ifFalse: para los objetos true y false. Los dos argumentos del mensaje ifTrue:ifFalse: representan las clusulas then y else del constructor de seleccin.

    Este mensaje se enva a una expresin Booleana. Si la expresin se evala a cierto (true), entonces el mensaje se enva a true. En este caso, el mtodo ifTrue:ifFalse: enva value a su primer argumento e ignora el segundo. Si se evala a falso, entonces ocurre lo opuesto.

    Ejemplo:

    total = 0

    ifTrue: [average 0]ifFalse: [average sum // total]

  • 51

    Seleccin

    En este caso, la expresin Booleana total=0 hace que el mensaje =0 se enve al objeto total. Esto regresa ya sea true o false. El objeto resultante es usado despus como el receptor del mensaje, el cual se enva al mtodo ifTrue:ifFalse.

    Los dos parmetros de este mtodo son los bloques then y else, respectivamente, de los cuales slo uno es ejecutado. El operador // especica que se desea realizar una divisin entera.