ALGORITMOS Y PROGRAMACION
–
™ A diario interactuamos con distintos tipos de máquinas como celulares,
tablets y computadores. Todos ellos tienen un lenguaje de programación
que ayuda a traducir las órdenes del usuario para que pueda utilizarlos.
™ Un lenguaje de programación es básicamente un sistema estructurado de
comunicación, similar al humano, el cual nos permite comunicarnos por
medio de signos, ya sean palabras, sonidos o gestos. Refiriéndonos a los
aparatos, este sistema está organizado para que se entiendan entre sí y a su
vez interprete las instrucciones que debe ejecutar.
™ El término programación se define como un conjunto de instrucciones
consecutivas y ordenadas que llevan a ejecutar una tarea
específica. Dichas instrucciones se denominan “código fuente”, el cual es
único para cada lenguaje y está diseñado para cumplir una función o
propósito específico. Usan diferentes normas o bases para controlar el
comportamiento de un dispositivo y también pueden ser usados para crear
programas informáticos
–
1801
Los primeros lenguajes de programación preceden a la
computadora moderna. En un inicio los lenguajes eran
códigos.
La máquina del telar de Jacquard, creada en 1801,
utilizaba los orificios en tarjetas perforadas para
representar los movimientos de un brazo de la máquina
de tejer, con el objetivo de generar patrones decorativos
automáticamente.
LINEA DE TIEMPO
–
Durante un período de nueve meses entre 1842 y 1843, Ada
Lovelace tradujo las memorias del matemático italiano Luigi
Menabrea acerca de la nueva máquina propuesta por
Charles Babbage, la Máquina Analítica. Con estos escritos,
ella añadió unas notas en las cuales especificaba en detalle
un método para calcular los números de Bernoulli con esta
máquina, el cual es reconocido por muchos historiadores
como el primer programa de computadora del mundo.
Herman Hollerith se percató de que podía codificar la
información en tarjetas perforadas cuando observó a los
conductores de trenes codificar la apariencia de los tickets
del tren con la posición de los agujeros perforados en estos.
1842 y 1843
–
™ En 1890 Hollerith codificó los datos del censo en tarjetas
perforadas.
™ Los primeros códigos de computadora estaban especializados
según sus aplicaciones. En las primeras décadas del siglo 20, los
cálculos numéricos estaban basados en los números decimales.
Eventualmente se fueron dando cuenta que la lógica podía ser
representada con números, no sólo con palabras. Por ejemplo,
Alonzo Church fue capaz de expresar el cálculo lambda a través de
fórmulas. La máquina de Turing estableció las bases para
almacenar programas como datos en la arquitectura de von
Neuman de una computadora. Sin embargo, a diferencia del
cálculo lambda, el código de Turing no serviría satisfactoriamente
como base para lenguajes de más alto nivel- su principal uso es en
el análisis riguroso en la complejidad algorítmica.
1890
–
™ En la década de 1940 fueron creadas las primeras
computadoras modernas, con alimentación eléctrica.
La velocidad y capacidad de memoria limitadas
forzaron a los programadores a escribir programas,
en lenguaje ensamblador muy afinados. Finalmente
se dieron cuenta de que la programación en lenguaje
ensamblador requería de un gran esfuerzo
intelectual y era muy propensa a errores.
1940
–
™ En 1948, Konrad Zuse publicó un artículo acerca de su lenguaje de
programación Plankalkül. Sin embargo, no fue implementado en
su vida y sus contribuciones fueron aisladas de otros desarrollos.
™ Entre algunos lenguajes importantes que fueron desarrollados en
este período se encuentran:
™ 1943 - Plankalkül (Konrad Zuse), diseñado, pero sin implementar
durante medio siglo
™ 1943 - el sistema de codificación ENIAC.
™ 1949 - 1954 -- una serie de conjuntos de instrucciones nemotécnicas,
como la de ENIAC, comenzando en 1949 con C-10 para BINAC
(que luego evolucionaría en UNIVAC). Cada conjunto de
instrucciones estaba destinado a un fabricante específico.
1948
–
™ En los cincuenta, los tres primeros lenguajes de programación modernos,
cuyos descendientes aún continúan siendo utilizados, son:
™ FORTRAN (1955), creado por John Backus et al.;
™ LISP (1958), creado por John McCarthy et al.;
™ COBOL (1959), creado por el Short Range Committee, altamente
influenciado por Grace Hopper.
™ Otro hito a finales de 1950 fue la publicación, por un comité Americano y
Europeo de científicos de la computación, de un nuevo “lenguaje para
algoritmos”; el Reporte de ALGOL 60 ("ALGOrithmic Language"). Este
reporte consolidó muchas ideas que estaban circulando en aquel entonces,
y proporcionó dos innovaciones importantes para los lenguajes de
programación: Estructuras de bloques anidadas: las secuencias de código y
las declaraciones asociadas se pueden agrupar en bloques sin tener que
pertenecer explícitamente a procedimientos separados.
1950 y 1960
–
™ Ámbito léxico: un bloque puede tener sus propias variables,
procedimientos y funciones, invisible al código fuera de dicho
bloque, por ejemplo, ocultamiento de información.
™ Otra innovación, relacionada con esto, fue cómo el lenguaje fue
descrito:
™ Una notación matemática exacta, Backus-Naur Form (BNF), fue
utilizada para describir la sintaxis del lenguaje. Todos los
subsecuentes lenguajes de programación han utilizado una
variante de BNF para describir la porción libre del contexto de su
sintaxis.
™ Algol 60 influenció particularmente en el diseño de lenguajes
posteriores, de los cuales algunos se hicieron más populares. Los
grandes sistemas de Burroughs fueron diseñados para ser
programados en un subconjunto extendido de Algol.
–™ Las variadas pero poco usadas características de Algol 68 (por ejemplo, bloques
simultáneos y paralelos) y su complejo sistema de atajos sintácticos y coerciones
automáticas de tipo lo hicieron impopular entre los ejecutores y se ganó una
reputación de ser difícil. Niklaus Wirth salió del comité de diseño para crear el
sencillo lenguaje Pascal.
™ Algunos de los lenguajes importantes que fueron desarrollados en este período
incluyen:
™ 1951 - Regional Assembly Language
™ 1952 - Autocode
™ 1954 - IPL (precursor de LISP)
™ 1955 - FLOW-MATIC (precursor de COBOL)
™ 1957 - FORTRAN (primer compilador)
™ 1957 - COMTRAN (precursor de COBOL)
™ 1958 – LISP.
–
™ 1958 - ALGOL 58
™ 1959 - FACT (precursor de COBOL)
™ 1959 - COBOL
™ 1959 - RPG
™ 1962 - APL
™ 1962 - Simula
™ 1962 - SNOBOL
™ 1963 - CPL (precursor de C)
™ 1964 - BASIC
™ 1964 - PL/I
™ 1967 - BCPL (precursor de C)
–™ El período comprendido entre finales de 1960 y finales de 1970 trajo un gran
florecimiento de lenguajes de programación. La mayoría de los paradigmas de
lenguajes de programación más importantes y actualmente en uso se inventaron en
este período:
™ Simula, inventado en la década de 1960 por Nygaard y Dahl como un superconjunto
de Algol 60, fue el primer lenguaje diseñado para apoyar la programación orientada
a objetos.
™ C, en principio un lenguaje de programación sistemas, fue desarrollado por Dennis
Ritchie y Ken Thompson en los Laboratorios Bell entre 1969 y 1973.
™ Smalltalk (mediados de los 70) proporcionaron un completo diseño de un lenguaje
orientado a objetos.
™ Prolog, diseñado en 1972 por Colmerauer, Roussel y Kowalski, fue el primer lenguaje
de programación lógica.
™ ML construyó un sistema de tipos polimórfico (inventado por Robin Milner en 1973)
en el tope de Lisp, pionero en los lenguajes funcionales de programación con tipado
estático.
1968-1979
–
™ En los años 60 y 70 también suscitó un debate considerable
sobre los méritos de la "programación estructurada", que
esencialmente significaba programación sin el uso de GOTO.
Este debate estaba estrechamente relacionado con el diseño del
lenguaje: algunos lenguajes no incluían GOTO, lo que obligó a
la programación estructurada en el programador. Aunque el
debate se recrudecía acaloradamente en ese momento, casi
todos los programadores están de acuerdo en que, incluso en
lenguajes que ofrecen GOTO, es una mala práctica de
programación usarlo, excepto en raras circunstancias. Como
resultado de ello, las generaciones posteriores de diseñadores
de lenguajes han encontrado el debate sobre programación
estructurada tedioso e incluso desconcertante.
–
™ Algunos lenguajes importantes que se desarrollaron en este período
fueron:
™ 1968 - Logo
™ 1969 - B (precursor C)
™ 1970 - Pascal
™ 1970 - Forth
™ 1972 - C
™ 1972 - Smalltalk
™ 1972 - Prolog
™ 1973 - ML
™ 1975 - Scheme
™ 1978 - SQL (inicialmente sólo un lenguaje de consulta, posteriormente
ampliado con construcciones de programación)
–
™ La década de 1980 fueron años de consolidación relativa en los
lenguajes imperativos. En vez de inventar nuevos paradigmas,
se comenzó a trabajar a partir de las ideas inventadas en la
década anterior. C++ combinaba la programación orientada a
objetos y la programación de sistemas. El gobierno de Estados
Unidos estandarizó Ada, un lenguaje de programación de
sistemas destinado a ser utilizado por contratistas de defensa.
En Japón y en otras partes, se gastaron enormes sumas
investigando los llamados lenguajes de programación de quinta
generación que incorporaban construcciones de la
programación lógica. La comunidad de los lenguajes
funcionales llevaron a cabo la estandarización de ML y Lisp. La
investigación en Miranda, un lenguaje funcional, con
evaluación perezosa, comenzó a tomar fuerza en esta década.
La década de 1980: consolidación,
módulos, rendimiento
–
™ La década de 1980 también trajo avances en la
implementación de lenguajes de programación. El
movimiento de RISC en la arquitectura de
computadoras postulaba que el hardware debía estar
diseñado para los compiladores más que para los
programadores de ensamblador humanos. Con la
ayuda de las mejoras en la velocidad del procesador,
permitiendo técnicas de compilación cada vez más
agresivas, el movimiento RISC despertó un mayor
interés en la tecnología de compilación de los
lenguajes de alto nivel.
–™ Las tecnologías de los lenguajes continuaron sobre estas líneas entrando en la década
de 1990.
™ Algunos lenguajes importantes que se desarrollaron en este período son:
™ 1980 - C++ (C con clases, el nombre cambió en julio de 1983)
™ 1983 - Ada
™ 1984 - Common Lisp
™ 1984 - MATLAB
™ 1985 - Eiffel
™ 1986 - Objective-C
™ 1986 - Erlang
™ 1987 - Perl
™ 1988 - Tcl
™ 1988 - Mathematica
™ 1989 - FL (Backus);
1990
–
™ El rápido crecimiento de Internet en la década de 1990 fue el
siguiente gran acontecimiento histórico para los lenguajes de
programación. Con la apertura de una plataforma totalmente
nueva para los sistemas informáticos, Internet creó una
oportunidad adoptar nuevos lenguajes. En particular, el
lenguaje de programación Java se hizo popular debido a su
pronta integración con el navegador web Netscape Navigator, y
varios lenguajes de scripting alcanzaron un amplio uso en el
desarrollo de aplicaciones personalizadas para servidores web.
La década de 1990 no vio ninguna novedad fundamental en los
lenguajes imperativos, pero sí mucha recombinación y la
maduración de viejas ideas. Esta era comenzó la difusión de los
lenguajes funcionales. Una filosofía de conducción grande era
la productividad del programador.
1990
–
™ Surgieron muchos lenguajes de “aplicaciones de desarrollo
rápido” (RAD), los cuales usualmente venían con un IDE,
recolector de basura, y eran descendientes de lenguajes
anteriores. Todos estos lenguajes eran orientados a objeto. Estos
incluían Object Pascal, Visual Basic y Java. Java, en particular,
recibió mucha atención. Pero más radicales e innovadores que
los lenguajes de RAD eran los nuevos lenguajes de script. Estos
no descendían directamente de otros lenguajes y ofrecieron
nuevas sintaxis e incorporación más liberal de otras
características. Muchos consideran estos lenguajes de script más
productivos que los lenguajes de RAD, aunque esto se debe a
menudo a que es más difícil escribir y mantener largos
programas que pequeños programas simples. Sin embargo, no
es menos cierto que los programas de script llegaron para
convertirse en los más prominentes en la conexión con la Web.
–™ Algunos lenguajes importantes que se desarrollaron en este período son:
™ 1990 - Haskell
™ 1991 - Python
™ 1991 - Visual Basic
™ 1991 - HTML (lenguaje de marcado de hipertexto)
™ 1993 - Ruby
™ 1993 - Lua
™ 1994 - CLOS (parte del ANSI Common Lisp)
™ 1995 - Java
™ 1995 - Delphi (Object Pascal)
™ 1995 - JavaScript
™ 1995 - PHP
™ 1996 - WebDNA
™ 1997 - Rebol
™ 1999 - D
–™ La evolución de los lenguajes de programación continúa, tanto en la industria como
en investigación. Algunas de las tendencias actuales incluyen:
™ Aumentar el soporte para la programación funcional en lenguajes importantes
utilizados comercialmente, incluida la programación funcional pura para hacer el
código más fácil de razonar y de paralelizar (tanto en macro como en micro-niveles).
™ Construir lenguajes para apoyar la programación concurrente y distribuida.
™ Mecanismos para añadir al lenguaje verificación en cuanto a seguridad y
confiabilidad: chequeo sintáctico extendido, control de flujo de información,
seguridad de hilos.
™ Mecanismos alternativos de modularidad: mixins, delegados, aspectos.
™ Desarrollo de software orientado a componentes.
™ Meta programación, la reflexión o el acceso al árbol de sintaxis abstracta.
™ Mayor énfasis en cuanto a distribución y movilidad.
™ Integración con bases de datos, incluyendo XML y bases de datos relacionales.
ACTUALIDAD
–™ XML para interfaz gráfica (XUL, XAML).
™ El código abierto como una filosofía de desarrollo de lenguajes, incluyendo la colección de
compiladores de GNU y lenguajes recientes, como Python, Ruby, y Squeak.
™ Programación Orientada a Aspectos (AOP).
™ Lenguajes que soporten programar sobre los procesadores de la GPU en paralelo, como OpenCL.
™ Algunos lenguajes importantes desarrollados durante este período incluyen:
™ 2000 - ActionScript
™ 2001 - C#
™ 2001 - Visual Basic .NET
™ 2002 - F#
™ 2003 - Groovy
™ 2003 - Scala
™ 2003 - Factor
™ 2007 - Clojure
™ 2009 - Go
™ 2011 - Dart
–
™ La programación orientada a objetos (POO, u OOP según
sus siglas en inglés) es un paradigma de programación
que usa objetos en sus interacciones, para diseñar
aplicaciones y programas informáticos.
™ Está basada en varias técnicas, incluyendo herencia,
cohesión, abstracción, polimorfismo, acoplamiento y
encapsulamiento.
™ Su uso se popularizó a principios de la década de 1990.
En la actualidad, existe una gran variedad de lenguajes de
programación que soportan la orientación a objetos.
Programación orientada a
objetos
–
™ Los objetos son entidades que tienen un determinado "estado",
"comportamiento (método)" e "identidad":
™ La identidad es una propiedad de un objeto que lo diferencia del
resto; dicho con otras palabras, es su identificador (concepto
análogo al de identificador de una variable o una constante).
™ Un objeto contiene toda la información que permite definirlo e
identificarlo frente a otros objetos pertenecientes a otras clases e
incluso frente a objetos de una misma clase, al poder tener valores
bien diferenciados en sus atributos. A su vez, los objetos disponen
de mecanismos de interacción llamados métodos, que favorecen la
comunicación entre ellos. Esta comunicación favorece a su vez el
cambio de estado en los propios objetos. Esta característica lleva a
tratarlos como unidades indivisibles, en las que no se separa el
estado y el comportamiento.
–™ Los métodos (comportamiento) y atributos (estado) están estrechamente relacionados
por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de
métodos para poder tratar los atributos con los que cuenta. El programador debe
pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a
alguno de ellos. Hacerlo podría producir el hábito erróneo de crear clases
contenedoras de información por un lado y clases con métodos que manejen a las
primeras por el otro. De esta manera se estaría realizando una "programación
estructurada camuflada" en un lenguaje de POO.
™ La programación orientada a objetos difiere de la programación estructurada
tradicional, en la que los datos y los procedimientos están separados y sin relación,
ya que lo único que se busca es el procesamiento de unos datos de entrada para
obtener otros de salida. La programación estructurada anima al programador a
pensar sobre todo en términos de procedimientos o funciones, y en segundo lugar en
las estructuras de datos que esos procedimientos manejan. En la programación
estructurada solo se escriben funciones que procesan datos. Los programadores que
emplean POO, en cambio, primero definen objetos para luego enviarles mensajes
solicitándoles que realicen sus métodos por sí mismos.
–™ Los conceptos de la POO tienen origen en Simula 67, un lenguaje diseñado para
hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard, del Centro de
Cómputo Noruego en Oslo. En este centro se trabajaba en simulaciones de naves, que
fueron confundidas por la explosión combinatoria de cómo las diversas cualidades
de diferentes naves podían afectar unas a las otras. La idea surgió al agrupar los
diversos tipos de naves en diversas clases de objetos, siendo responsable cada clase
de objetos de definir sus "propios" datos y comportamientos. Fueron refinados más
tarde en Smalltalk, desarrollado en Simula en Xerox PARC (cuya primera versión fue
escrita sobre Basic) pero diseñado para ser un sistema completamente dinámico en el
cual los objetos se podrían crear y modificar "sobre la marcha" (en tiempo de
ejecución) en lugar de tener un sistema basado en programas estáticos.
™ La POO se fue convirtiendo en el estilo de programación dominante a mediados de
los años 1980, en gran parte debido a la influencia de C++, una extensión del lenguaje
de programación C. Su dominación fue consolidada gracias al auge de las interfaces
gráficas de usuario, para las cuales la POO está particularmente bien adaptada. En
este caso, se habla también de programación dirigida por eventos
ORIGEN
–™ La POO es una forma de programar que trata de encontrar una solución a estos problemas. Introduce nuevos
conceptos, que superan y amplían conceptos antiguos ya conocidos. Entre ellos destacan los siguientes:
™ Clase
™ Definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciación es la lectura de
estas definiciones y la creación de un objeto a partir de ella.
™ Herencia
™ Por ejemplo, herencia de la clase C a la clase D, es la facilidad mediante la cual la clase D hereda en ella cada uno de
los atributos y operaciones de C, como si esos atributos y operaciones hubiesen sido definidos por la misma D. Por
lo tanto, puede usar los mismos métodos y variables públicas declaradas en C. Los componentes registrados como
"privados" (private) también se heredan, pero como no pertenecen a la clase, se mantienen escondidos al
programador y sólo pueden ser accedidos a través de otros métodos públicos. Esto es así para mantener
hegemónico el ideal de POO.
™ Objeto
™ Instancia de una clase. Entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o
funcionalidad (métodos), los mismos que consecuentemente reaccionan a eventos. Se corresponden con los objetos
reales del mundo que nos rodea, o con objetos internos del sistema (del programa).
™ Método
™ Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena tras la recepción de un
"mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un método puede producir
un cambio en las propiedades del objeto, o la generación de un "evento" con un nuevo mensaje para otro objeto del
sistema.
Conceptos
fundamentales
–
™ Evento
™ Es un suceso en el sistema (tal como una interacción del usuario con la
máquina, o un mensaje enviado por un objeto). El sistema maneja el evento
enviando el mensaje adecuado al objeto pertinente. También se puede
definir como evento la reacción que puede desencadenar un objeto; es
decir, la acción que genera.
™ Atributos
™ Características que tiene la clase.
™ Mensaje
™ Una comunicación dirigida a un objeto, que le ordena que ejecute uno de
sus métodos con ciertos parámetros asociados al evento que lo generó.
™ Propiedad o atributo
™ Contenedor de un tipo de datos asociados a un objeto (o a una clase de
objetos), que hace los datos visibles desde fuera del objeto y esto se define
como sus características predeterminadas, y cuyo valor puede ser alterado
por la ejecución de algún método.
–
™ Estado interno Es una variable que se declara privada,
que puede ser únicamente accedida y alterada por un
método del objeto, y que se utiliza para indicar distintas
situaciones posibles para el objeto (o clase de objetos). No
es visible al programador que maneja una instancia de la
clase. Componentes de un objeto Atributos, identidad,
relaciones y métodos. Identificación de un objeto Un
objeto se representa por medio de una tabla o entidad que
esté compuesta por sus atributos y funciones
correspondientes. En comparación con un lenguaje
imperativo, una "variable" no es más que un contenedor
interno del atributo del objeto o de un estado interno, así
como la "función" es un procedimiento interno del
método del objeto.
–
™ La POO es un paradigma surgido en los años 1970,
que utiliza objetos como elementos fundamentales
en la construcción de la solución. Un objeto es una
abstracción de algún hecho o ente del mundo real,
con atributos que representan sus características o
propiedades, y métodos que emulan su
comportamiento o actividad. Todas las propiedades
y métodos comunes a los objetos se encapsulan o
agrupan en clases. Una clase es una plantilla, un
prototipo para crear objetos; en general, se dice que
cada objeto es una instancia o ejemplar de una clase.
SINTAXIS
PARADIGMA

Lenguajes de programacion

  • 1.
  • 2.
    – ™ A diariointeractuamos con distintos tipos de máquinas como celulares, tablets y computadores. Todos ellos tienen un lenguaje de programación que ayuda a traducir las órdenes del usuario para que pueda utilizarlos. ™ Un lenguaje de programación es básicamente un sistema estructurado de comunicación, similar al humano, el cual nos permite comunicarnos por medio de signos, ya sean palabras, sonidos o gestos. Refiriéndonos a los aparatos, este sistema está organizado para que se entiendan entre sí y a su vez interprete las instrucciones que debe ejecutar. ™ El término programación se define como un conjunto de instrucciones consecutivas y ordenadas que llevan a ejecutar una tarea específica. Dichas instrucciones se denominan “código fuente”, el cual es único para cada lenguaje y está diseñado para cumplir una función o propósito específico. Usan diferentes normas o bases para controlar el comportamiento de un dispositivo y también pueden ser usados para crear programas informáticos
  • 3.
    – 1801 Los primeros lenguajesde programación preceden a la computadora moderna. En un inicio los lenguajes eran códigos. La máquina del telar de Jacquard, creada en 1801, utilizaba los orificios en tarjetas perforadas para representar los movimientos de un brazo de la máquina de tejer, con el objetivo de generar patrones decorativos automáticamente. LINEA DE TIEMPO
  • 4.
    – Durante un períodode nueve meses entre 1842 y 1843, Ada Lovelace tradujo las memorias del matemático italiano Luigi Menabrea acerca de la nueva máquina propuesta por Charles Babbage, la Máquina Analítica. Con estos escritos, ella añadió unas notas en las cuales especificaba en detalle un método para calcular los números de Bernoulli con esta máquina, el cual es reconocido por muchos historiadores como el primer programa de computadora del mundo. Herman Hollerith se percató de que podía codificar la información en tarjetas perforadas cuando observó a los conductores de trenes codificar la apariencia de los tickets del tren con la posición de los agujeros perforados en estos. 1842 y 1843
  • 5.
    – ™ En 1890Hollerith codificó los datos del censo en tarjetas perforadas. ™ Los primeros códigos de computadora estaban especializados según sus aplicaciones. En las primeras décadas del siglo 20, los cálculos numéricos estaban basados en los números decimales. Eventualmente se fueron dando cuenta que la lógica podía ser representada con números, no sólo con palabras. Por ejemplo, Alonzo Church fue capaz de expresar el cálculo lambda a través de fórmulas. La máquina de Turing estableció las bases para almacenar programas como datos en la arquitectura de von Neuman de una computadora. Sin embargo, a diferencia del cálculo lambda, el código de Turing no serviría satisfactoriamente como base para lenguajes de más alto nivel- su principal uso es en el análisis riguroso en la complejidad algorítmica. 1890
  • 6.
    – ™ En ladécada de 1940 fueron creadas las primeras computadoras modernas, con alimentación eléctrica. La velocidad y capacidad de memoria limitadas forzaron a los programadores a escribir programas, en lenguaje ensamblador muy afinados. Finalmente se dieron cuenta de que la programación en lenguaje ensamblador requería de un gran esfuerzo intelectual y era muy propensa a errores. 1940
  • 7.
    – ™ En 1948,Konrad Zuse publicó un artículo acerca de su lenguaje de programación Plankalkül. Sin embargo, no fue implementado en su vida y sus contribuciones fueron aisladas de otros desarrollos. ™ Entre algunos lenguajes importantes que fueron desarrollados en este período se encuentran: ™ 1943 - Plankalkül (Konrad Zuse), diseñado, pero sin implementar durante medio siglo ™ 1943 - el sistema de codificación ENIAC. ™ 1949 - 1954 -- una serie de conjuntos de instrucciones nemotécnicas, como la de ENIAC, comenzando en 1949 con C-10 para BINAC (que luego evolucionaría en UNIVAC). Cada conjunto de instrucciones estaba destinado a un fabricante específico. 1948
  • 8.
    – ™ En loscincuenta, los tres primeros lenguajes de programación modernos, cuyos descendientes aún continúan siendo utilizados, son: ™ FORTRAN (1955), creado por John Backus et al.; ™ LISP (1958), creado por John McCarthy et al.; ™ COBOL (1959), creado por el Short Range Committee, altamente influenciado por Grace Hopper. ™ Otro hito a finales de 1950 fue la publicación, por un comité Americano y Europeo de científicos de la computación, de un nuevo “lenguaje para algoritmos”; el Reporte de ALGOL 60 ("ALGOrithmic Language"). Este reporte consolidó muchas ideas que estaban circulando en aquel entonces, y proporcionó dos innovaciones importantes para los lenguajes de programación: Estructuras de bloques anidadas: las secuencias de código y las declaraciones asociadas se pueden agrupar en bloques sin tener que pertenecer explícitamente a procedimientos separados. 1950 y 1960
  • 9.
    – ™ Ámbito léxico:un bloque puede tener sus propias variables, procedimientos y funciones, invisible al código fuera de dicho bloque, por ejemplo, ocultamiento de información. ™ Otra innovación, relacionada con esto, fue cómo el lenguaje fue descrito: ™ Una notación matemática exacta, Backus-Naur Form (BNF), fue utilizada para describir la sintaxis del lenguaje. Todos los subsecuentes lenguajes de programación han utilizado una variante de BNF para describir la porción libre del contexto de su sintaxis. ™ Algol 60 influenció particularmente en el diseño de lenguajes posteriores, de los cuales algunos se hicieron más populares. Los grandes sistemas de Burroughs fueron diseñados para ser programados en un subconjunto extendido de Algol.
  • 10.
    –™ Las variadaspero poco usadas características de Algol 68 (por ejemplo, bloques simultáneos y paralelos) y su complejo sistema de atajos sintácticos y coerciones automáticas de tipo lo hicieron impopular entre los ejecutores y se ganó una reputación de ser difícil. Niklaus Wirth salió del comité de diseño para crear el sencillo lenguaje Pascal. ™ Algunos de los lenguajes importantes que fueron desarrollados en este período incluyen: ™ 1951 - Regional Assembly Language ™ 1952 - Autocode ™ 1954 - IPL (precursor de LISP) ™ 1955 - FLOW-MATIC (precursor de COBOL) ™ 1957 - FORTRAN (primer compilador) ™ 1957 - COMTRAN (precursor de COBOL) ™ 1958 – LISP.
  • 11.
    – ™ 1958 -ALGOL 58 ™ 1959 - FACT (precursor de COBOL) ™ 1959 - COBOL ™ 1959 - RPG ™ 1962 - APL ™ 1962 - Simula ™ 1962 - SNOBOL ™ 1963 - CPL (precursor de C) ™ 1964 - BASIC ™ 1964 - PL/I ™ 1967 - BCPL (precursor de C)
  • 12.
    –™ El períodocomprendido entre finales de 1960 y finales de 1970 trajo un gran florecimiento de lenguajes de programación. La mayoría de los paradigmas de lenguajes de programación más importantes y actualmente en uso se inventaron en este período: ™ Simula, inventado en la década de 1960 por Nygaard y Dahl como un superconjunto de Algol 60, fue el primer lenguaje diseñado para apoyar la programación orientada a objetos. ™ C, en principio un lenguaje de programación sistemas, fue desarrollado por Dennis Ritchie y Ken Thompson en los Laboratorios Bell entre 1969 y 1973. ™ Smalltalk (mediados de los 70) proporcionaron un completo diseño de un lenguaje orientado a objetos. ™ Prolog, diseñado en 1972 por Colmerauer, Roussel y Kowalski, fue el primer lenguaje de programación lógica. ™ ML construyó un sistema de tipos polimórfico (inventado por Robin Milner en 1973) en el tope de Lisp, pionero en los lenguajes funcionales de programación con tipado estático. 1968-1979
  • 13.
    – ™ En losaños 60 y 70 también suscitó un debate considerable sobre los méritos de la "programación estructurada", que esencialmente significaba programación sin el uso de GOTO. Este debate estaba estrechamente relacionado con el diseño del lenguaje: algunos lenguajes no incluían GOTO, lo que obligó a la programación estructurada en el programador. Aunque el debate se recrudecía acaloradamente en ese momento, casi todos los programadores están de acuerdo en que, incluso en lenguajes que ofrecen GOTO, es una mala práctica de programación usarlo, excepto en raras circunstancias. Como resultado de ello, las generaciones posteriores de diseñadores de lenguajes han encontrado el debate sobre programación estructurada tedioso e incluso desconcertante.
  • 14.
    – ™ Algunos lenguajesimportantes que se desarrollaron en este período fueron: ™ 1968 - Logo ™ 1969 - B (precursor C) ™ 1970 - Pascal ™ 1970 - Forth ™ 1972 - C ™ 1972 - Smalltalk ™ 1972 - Prolog ™ 1973 - ML ™ 1975 - Scheme ™ 1978 - SQL (inicialmente sólo un lenguaje de consulta, posteriormente ampliado con construcciones de programación)
  • 15.
    – ™ La décadade 1980 fueron años de consolidación relativa en los lenguajes imperativos. En vez de inventar nuevos paradigmas, se comenzó a trabajar a partir de las ideas inventadas en la década anterior. C++ combinaba la programación orientada a objetos y la programación de sistemas. El gobierno de Estados Unidos estandarizó Ada, un lenguaje de programación de sistemas destinado a ser utilizado por contratistas de defensa. En Japón y en otras partes, se gastaron enormes sumas investigando los llamados lenguajes de programación de quinta generación que incorporaban construcciones de la programación lógica. La comunidad de los lenguajes funcionales llevaron a cabo la estandarización de ML y Lisp. La investigación en Miranda, un lenguaje funcional, con evaluación perezosa, comenzó a tomar fuerza en esta década. La década de 1980: consolidación, módulos, rendimiento
  • 16.
    – ™ La décadade 1980 también trajo avances en la implementación de lenguajes de programación. El movimiento de RISC en la arquitectura de computadoras postulaba que el hardware debía estar diseñado para los compiladores más que para los programadores de ensamblador humanos. Con la ayuda de las mejoras en la velocidad del procesador, permitiendo técnicas de compilación cada vez más agresivas, el movimiento RISC despertó un mayor interés en la tecnología de compilación de los lenguajes de alto nivel.
  • 17.
    –™ Las tecnologíasde los lenguajes continuaron sobre estas líneas entrando en la década de 1990. ™ Algunos lenguajes importantes que se desarrollaron en este período son: ™ 1980 - C++ (C con clases, el nombre cambió en julio de 1983) ™ 1983 - Ada ™ 1984 - Common Lisp ™ 1984 - MATLAB ™ 1985 - Eiffel ™ 1986 - Objective-C ™ 1986 - Erlang ™ 1987 - Perl ™ 1988 - Tcl ™ 1988 - Mathematica ™ 1989 - FL (Backus); 1990
  • 18.
    – ™ El rápidocrecimiento de Internet en la década de 1990 fue el siguiente gran acontecimiento histórico para los lenguajes de programación. Con la apertura de una plataforma totalmente nueva para los sistemas informáticos, Internet creó una oportunidad adoptar nuevos lenguajes. En particular, el lenguaje de programación Java se hizo popular debido a su pronta integración con el navegador web Netscape Navigator, y varios lenguajes de scripting alcanzaron un amplio uso en el desarrollo de aplicaciones personalizadas para servidores web. La década de 1990 no vio ninguna novedad fundamental en los lenguajes imperativos, pero sí mucha recombinación y la maduración de viejas ideas. Esta era comenzó la difusión de los lenguajes funcionales. Una filosofía de conducción grande era la productividad del programador. 1990
  • 19.
    – ™ Surgieron muchoslenguajes de “aplicaciones de desarrollo rápido” (RAD), los cuales usualmente venían con un IDE, recolector de basura, y eran descendientes de lenguajes anteriores. Todos estos lenguajes eran orientados a objeto. Estos incluían Object Pascal, Visual Basic y Java. Java, en particular, recibió mucha atención. Pero más radicales e innovadores que los lenguajes de RAD eran los nuevos lenguajes de script. Estos no descendían directamente de otros lenguajes y ofrecieron nuevas sintaxis e incorporación más liberal de otras características. Muchos consideran estos lenguajes de script más productivos que los lenguajes de RAD, aunque esto se debe a menudo a que es más difícil escribir y mantener largos programas que pequeños programas simples. Sin embargo, no es menos cierto que los programas de script llegaron para convertirse en los más prominentes en la conexión con la Web.
  • 20.
    –™ Algunos lenguajesimportantes que se desarrollaron en este período son: ™ 1990 - Haskell ™ 1991 - Python ™ 1991 - Visual Basic ™ 1991 - HTML (lenguaje de marcado de hipertexto) ™ 1993 - Ruby ™ 1993 - Lua ™ 1994 - CLOS (parte del ANSI Common Lisp) ™ 1995 - Java ™ 1995 - Delphi (Object Pascal) ™ 1995 - JavaScript ™ 1995 - PHP ™ 1996 - WebDNA ™ 1997 - Rebol ™ 1999 - D
  • 21.
    –™ La evoluciónde los lenguajes de programación continúa, tanto en la industria como en investigación. Algunas de las tendencias actuales incluyen: ™ Aumentar el soporte para la programación funcional en lenguajes importantes utilizados comercialmente, incluida la programación funcional pura para hacer el código más fácil de razonar y de paralelizar (tanto en macro como en micro-niveles). ™ Construir lenguajes para apoyar la programación concurrente y distribuida. ™ Mecanismos para añadir al lenguaje verificación en cuanto a seguridad y confiabilidad: chequeo sintáctico extendido, control de flujo de información, seguridad de hilos. ™ Mecanismos alternativos de modularidad: mixins, delegados, aspectos. ™ Desarrollo de software orientado a componentes. ™ Meta programación, la reflexión o el acceso al árbol de sintaxis abstracta. ™ Mayor énfasis en cuanto a distribución y movilidad. ™ Integración con bases de datos, incluyendo XML y bases de datos relacionales. ACTUALIDAD
  • 22.
    –™ XML parainterfaz gráfica (XUL, XAML). ™ El código abierto como una filosofía de desarrollo de lenguajes, incluyendo la colección de compiladores de GNU y lenguajes recientes, como Python, Ruby, y Squeak. ™ Programación Orientada a Aspectos (AOP). ™ Lenguajes que soporten programar sobre los procesadores de la GPU en paralelo, como OpenCL. ™ Algunos lenguajes importantes desarrollados durante este período incluyen: ™ 2000 - ActionScript ™ 2001 - C# ™ 2001 - Visual Basic .NET ™ 2002 - F# ™ 2003 - Groovy ™ 2003 - Scala ™ 2003 - Factor ™ 2007 - Clojure ™ 2009 - Go ™ 2011 - Dart
  • 23.
    – ™ La programaciónorientada a objetos (POO, u OOP según sus siglas en inglés) es un paradigma de programación que usa objetos en sus interacciones, para diseñar aplicaciones y programas informáticos. ™ Está basada en varias técnicas, incluyendo herencia, cohesión, abstracción, polimorfismo, acoplamiento y encapsulamiento. ™ Su uso se popularizó a principios de la década de 1990. En la actualidad, existe una gran variedad de lenguajes de programación que soportan la orientación a objetos. Programación orientada a objetos
  • 24.
    – ™ Los objetosson entidades que tienen un determinado "estado", "comportamiento (método)" e "identidad": ™ La identidad es una propiedad de un objeto que lo diferencia del resto; dicho con otras palabras, es su identificador (concepto análogo al de identificador de una variable o una constante). ™ Un objeto contiene toda la información que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos. A su vez, los objetos disponen de mecanismos de interacción llamados métodos, que favorecen la comunicación entre ellos. Esta comunicación favorece a su vez el cambio de estado en los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las que no se separa el estado y el comportamiento.
  • 25.
    –™ Los métodos(comportamiento) y atributos (estado) están estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de métodos para poder tratar los atributos con los que cuenta. El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a alguno de ellos. Hacerlo podría producir el hábito erróneo de crear clases contenedoras de información por un lado y clases con métodos que manejen a las primeras por el otro. De esta manera se estaría realizando una "programación estructurada camuflada" en un lenguaje de POO. ™ La programación orientada a objetos difiere de la programación estructurada tradicional, en la que los datos y los procedimientos están separados y sin relación, ya que lo único que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La programación estructurada anima al programador a pensar sobre todo en términos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan. En la programación estructurada solo se escriben funciones que procesan datos. Los programadores que emplean POO, en cambio, primero definen objetos para luego enviarles mensajes solicitándoles que realicen sus métodos por sí mismos.
  • 26.
    –™ Los conceptosde la POO tienen origen en Simula 67, un lenguaje diseñado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard, del Centro de Cómputo Noruego en Oslo. En este centro se trabajaba en simulaciones de naves, que fueron confundidas por la explosión combinatoria de cómo las diversas cualidades de diferentes naves podían afectar unas a las otras. La idea surgió al agrupar los diversos tipos de naves en diversas clases de objetos, siendo responsable cada clase de objetos de definir sus "propios" datos y comportamientos. Fueron refinados más tarde en Smalltalk, desarrollado en Simula en Xerox PARC (cuya primera versión fue escrita sobre Basic) pero diseñado para ser un sistema completamente dinámico en el cual los objetos se podrían crear y modificar "sobre la marcha" (en tiempo de ejecución) en lugar de tener un sistema basado en programas estáticos. ™ La POO se fue convirtiendo en el estilo de programación dominante a mediados de los años 1980, en gran parte debido a la influencia de C++, una extensión del lenguaje de programación C. Su dominación fue consolidada gracias al auge de las interfaces gráficas de usuario, para las cuales la POO está particularmente bien adaptada. En este caso, se habla también de programación dirigida por eventos ORIGEN
  • 27.
    –™ La POOes una forma de programar que trata de encontrar una solución a estos problemas. Introduce nuevos conceptos, que superan y amplían conceptos antiguos ya conocidos. Entre ellos destacan los siguientes: ™ Clase ™ Definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciación es la lectura de estas definiciones y la creación de un objeto a partir de ella. ™ Herencia ™ Por ejemplo, herencia de la clase C a la clase D, es la facilidad mediante la cual la clase D hereda en ella cada uno de los atributos y operaciones de C, como si esos atributos y operaciones hubiesen sido definidos por la misma D. Por lo tanto, puede usar los mismos métodos y variables públicas declaradas en C. Los componentes registrados como "privados" (private) también se heredan, pero como no pertenecen a la clase, se mantienen escondidos al programador y sólo pueden ser accedidos a través de otros métodos públicos. Esto es así para mantener hegemónico el ideal de POO. ™ Objeto ™ Instancia de una clase. Entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos), los mismos que consecuentemente reaccionan a eventos. Se corresponden con los objetos reales del mundo que nos rodea, o con objetos internos del sistema (del programa). ™ Método ™ Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena tras la recepción de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un método puede producir un cambio en las propiedades del objeto, o la generación de un "evento" con un nuevo mensaje para otro objeto del sistema. Conceptos fundamentales
  • 28.
    – ™ Evento ™ Esun suceso en el sistema (tal como una interacción del usuario con la máquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. También se puede definir como evento la reacción que puede desencadenar un objeto; es decir, la acción que genera. ™ Atributos ™ Características que tiene la clase. ™ Mensaje ™ Una comunicación dirigida a un objeto, que le ordena que ejecute uno de sus métodos con ciertos parámetros asociados al evento que lo generó. ™ Propiedad o atributo ™ Contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos), que hace los datos visibles desde fuera del objeto y esto se define como sus características predeterminadas, y cuyo valor puede ser alterado por la ejecución de algún método.
  • 29.
    – ™ Estado internoEs una variable que se declara privada, que puede ser únicamente accedida y alterada por un método del objeto, y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos). No es visible al programador que maneja una instancia de la clase. Componentes de un objeto Atributos, identidad, relaciones y métodos. Identificación de un objeto Un objeto se representa por medio de una tabla o entidad que esté compuesta por sus atributos y funciones correspondientes. En comparación con un lenguaje imperativo, una "variable" no es más que un contenedor interno del atributo del objeto o de un estado interno, así como la "función" es un procedimiento interno del método del objeto.
  • 30.
    – ™ La POOes un paradigma surgido en los años 1970, que utiliza objetos como elementos fundamentales en la construcción de la solución. Un objeto es una abstracción de algún hecho o ente del mundo real, con atributos que representan sus características o propiedades, y métodos que emulan su comportamiento o actividad. Todas las propiedades y métodos comunes a los objetos se encapsulan o agrupan en clases. Una clase es una plantilla, un prototipo para crear objetos; en general, se dice que cada objeto es una instancia o ejemplar de una clase. SINTAXIS PARADIGMA