El documento describe la historia y evolución de los lenguajes de programación. Comenzó con lenguajes de códigos en máquinas como la máquina de tejer de Jacquard en 1801 y los primeros programas escritos por Ada Lovelace en 1843. En las décadas de 1940 y 1950 se desarrollaron los primeros lenguajes de programación modernos como FORTRAN, LISP y COBOL. En las décadas siguientes surgieron lenguajes innovadores que establecieron nuevos paradigmas como Simula, C, Smalltalk y Prolog. La investigación
Historia de los Lenguajes de ProgramacionAlex Estrada
La siguiente presentacion explica de manera breve y eficaz, los lenguajes de programacion a lo largo de la historia. Desde sus inicios hasta nuestros tiempos.
Historia de los Lenguajes de ProgramacionAlex Estrada
La siguiente presentacion explica de manera breve y eficaz, los lenguajes de programacion a lo largo de la historia. Desde sus inicios hasta nuestros tiempos.
Esta presentación sintetiza los fundamentos de los lenguajes de programación. Espero los sea de mucha utilidad para comprender la importancia de estos programación.
Lenguajes de programación. Clasificación de los lenguajes de programación. Según su grado de independencia de la máquina. Según la forma de sus instrucciones.
Clasificación de los lenguajes por generaciones. Ventajas e inconvenientes de los lenguajes de alto nivel. Otros lenguajes.
La evolución de los Lenguajes de ProgramaciónAlex Toapanta
Breve explicación acerca de la evolución de los lenguajes de programación desde sus comienzos o bases, hasta el desarrollo que se ha tenido en la actualidad
libro conabilidad financiera, 5ta edicion.pdfMiriamAquino27
LIBRO DE CONTABILIDAD FINANCIERA, ESTE TE AYUDARA PARA EL AVANCE DE TU CARRERA EN LA CONTABILIDAD FINANCIERA.
SI ERES INGENIERO EN GESTION ESTE LIBRO TE AYUDARA A COMPRENDER MEJOR EL FUNCIONAMIENTO DE LA CONTABLIDAD FINANCIERA, EN AREAS ADMINISTRATIVAS ENLA CARREARA DE INGENERIA EN GESTION EMPRESARIAL, ESTE LIBRO FUE UTILIZADO PARA ALUMNOS DE SEGUNDO SEMESTRE
Se denomina motor de corriente alterna a aquellos motores eléctricos que funcionan con alimentación eléctrica en corriente alterna. Un motor es una máquina motriz, esto es, un aparato que convierte una forma determinada de energía en energía mecánica de rotación o par.
Una señal analógica es una señal generada por algún tipo de fenómeno electromagnético; que es representable por una función matemática continua en la que es variable su amplitud y periodo en función del tiempo.
1º Caso Practico Lubricacion Rodamiento Motor 10CVCarlosAroeira1
Caso pratico análise analise de vibrações em rolamento de HVAC para resolver problema de lubrificação apresentado durante a 1ª reuniao do Vibration Institute em Lisboa em 24 de maio de 2024
Criterios de la primera y segunda derivadaYoverOlivares
Criterios de la primera derivada.
Criterios de la segunda derivada.
Función creciente y decreciente.
Puntos máximos y mínimos.
Puntos de inflexión.
3 Ejemplos para graficar funciones utilizando los criterios de la primera y segunda derivada.
2. –
™ 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
3. –
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
4. –
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
5. –
™ 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
6. –
™ 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
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 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
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 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.
12. –™ 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
13. –
™ 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.
14. –
™ 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)
15. –
™ 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
16. –
™ 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.
17. –™ 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
18. –
™ 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
19. –
™ 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.
20. –™ 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
21. –™ 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
22. –™ 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
23. –
™ 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
24. –
™ 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.
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 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
27. –™ 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
28. –
™ 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.
29. –
™ 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.
30. –
™ 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