ADAIntroducciónUn lenguaje de programación para sistema empotrados
ÍndiceIntroducción históricaAspectos generalesTiposEstructuras de controlSubprogramasPaquetesExcepcionesTareas
Introducción histórica1974. US DoD percibe un elevado gasto en software. En el ámbito de sistemas empotrados había un elevado número de leguajes en uso.1975. Strawman. Requisitos del nuevo lenguaje. Refinado en Woodenman.1976. Timan. Identificada la funcionalidad del nuevo lenguaje. Se evaluaron lenguajes existentes para comprobar si cubrían la funcionalidad especificada. Resultado negativo. Se revisaron los requisitos y se generó Ironman.Invitación para proponer el diseño del nuevo lenguaje.Se recibieron 16 propuestas y se seleccionaron 4.CII Honeywell Bull (Green), Intermetrics (Red), Softech (Azul), SRI International (Yellow).Los diseños iniciales se entregaron en 1978 y se evaluaron internacionalmente.Fueron preseleccionados los equipos Rojo y Verde. Se les dio un año más para mejorar.El 2 de mayo de 1979 se seleccionó la propuesta del lenguaje Verde desarrollada por un equipo internacional dirigido por Jean Ichbiah.El DoD anunció que el nuevo lenguaje se llamaría Ada en honor de Augusta Ada Byron (hija de Lord Byron). Ada fue ayudante y patrocinadora de Charles Babagge y trabajó en su máquina analítica mecánica. Se la considera la primera programadora.1983. ADA estándar ANSI (RM83).1987. ADA estándar ISO (8652).
Introducción históricaAda se empezó a utilizar en muy diferentes áreas, además de en sistemas empotrados. En 1988 arrancó el proyecto Ada 9X.Se propusieron 41 nuevos requisitos junto con 22 estudios específicos de áreas que todavía no se entendían completamente.Construir un compilador que tuviera en cuenta todas las propuestas nuevas parecía costoso e innecesario.Ada 95 se constituyó como un núcleo fundamental, junto con una serie de anexos opcionales (estándar ISO     15-2-1995).Se generaron los siguientes documentos de referencia:Reference Manual for the Ada Programming Language (RM95).Annotated Ada Reference Manual (AARM).
Aspectos generalesIdentificadores.Identificador ::= letra{[subrayado]letra_o_digito}letra_o_digito ::= letra | digitoLiterales numéricosTipos básicos:Integer, float.Ej. Num_alumnos : Integer; Temperatura : Float;Tanto los enteros como los reales pueden tener exponentes, pero en el caso de los enteros los exponentes no pueden ser negativos.Ej. 10.22E-12		12E2Base del número.Ej. 2#1010#	16#AF28#	4#32#E8 (32 x 48)Comentarios.-- Esto es un comentario
Aspectos generalesDeclaraciónI : integer;P: integer := 6;Q : constantFloat := 8.1632;Bloques y visibilidaddeclarei,k : integer;begin      ……          declare              i : integer;begin              …….end;      ……end;
TiposDeclaración de tiposType Color is (Rojo, Amarillo, Verde);C : Color := Verde;Q: constant Color := Verde;Type Esquema isarray (0..5) of integer;Perfil : Esquema;…………………..Perfil(0) := 105;Declaración de subtiposSubtypeDiaisintegerrange 1..31;D : Dia;
TiposTipos numéricos simplesP: Integer;Q : Float;AtributosSubtype Natural isintegerrange 0..Integer’Last;Subtype Positive isintegerrange 1..Integer’Last;Cambio de tipoI: Integer := 3;F: Float := 5.6;……I := Integer( F ) + I;F := F + Float( I );
Tipos
Operadores escalares
Estructuras de controlifComando = Izquierda thenGirar_Izquierda;elsifComando = DerechathenGirar_Derecha;elsif Comando = AcelerarthenIncrementar_Velocidad;elsifComando = Decelerar thenDecrementar_Velocidad;elseMantener_Velocidad;endif;
Estructuras de controlcase Comandoiswhen Izquierda => Girar_Izquierda;when Derecha => Girar_Derecha;when Acelerar => Incrementar_Velocidad;when Decelerar => Decrementar_Velocidad;whenothers=> Mantener_Velocidad;end case;
Estructuras de controlloopCoge_tenedores;	Come;	Medita;endloop;loopifHora_Dormirthenexit;endif;Coge_tenedores;	Come;	Medita;endloop;
Estructuras de controlloopexitwhenHora_Dormir;Coge_tenedores;	Come;	Medita;endloop;
Estructuras de controlfor x in 1..3 loopMedita;Coge_tenedores;	Come;endloop;whilenotHora_DormirloopCoge_tenedores;	Come;	Medita;endloop;for x in reverse 0..10 loopDi_Numero( x );endloop;
SubprogramasSubprograma ::= procedure nombre parámetros |function nombre	parámetros resultadoparámetros ::= (especificación{; especificación})especificación ::= lista_identificadores: modo subtipomodo ::= [in | in out | out]resultado ::= return subtipo
SubprogramasFunction factorial( N: Positive) returnPositive isBeginif N = 1 thenreturn 1;elsereturn N * factorial( N – 1 );endif;End factorial;ProcedureAdd (A, B : in integer; C: outinteger) isBegin    C := A+B;EndAdd;
SubprogramasFunction“*” (A, B: Vector) returnFloatis	Resultado : Float := 0.0;beginfor x in A’Rangeloop	Resultado := Resultado + A(x)*B(x);endloop;return Resultado;end“*”;
PaquetesPackagebodyPila_enterosis    Max: constant := 100;    S: array(1..Max) of integer;    Cima: integerrange 0..Max;procedurePush( x: integer) isbegin        Cima := Cima + 1;        S(Cima) := x;endPush;function Pop returnintegerisbegin        Cima := Cima -1;return S(Cima);end Pop;begin    Cima := 0;endPila_enteros;packagePila_enterosisprocedurePush( x: in integer );function Pop returninteger;endPila_enteros;
ExcepcionesPermiten tratar situaciones poco frecuentes, pudiendo controlar con ellas un fracaso del SW.Hay cuatro predefinidasConstraint_ErrorProgram_ErrorStorage_ErrorTasking_Error
Excepcionesbegin    ………….    ……….....exceptionwhenConstraint_Error =>    -- Tratamiento especificoend;
ExcepcionesPackagebodyPila_enterosis	……….	……….procedurePush( x: integer) isbeginif Cima = Max thenraiseError;endif;        Cima := Cima + 1;        S(Cima) := x;endPush;	……….	……….endPila_enteros;packagePila_enterosis    Error: exception;procedurePush( x: in integer );function Pop returninteger;endPila_enteros;
Excepcioneswith Pila_enteros;procedure Actuar isbegin	……….	……….    Pila_enteros.Push(5);	……….	……….exception    When Error => put(“Error en la pila”);end Actuar;

Ada

  • 1.
    ADAIntroducciónUn lenguaje deprogramación para sistema empotrados
  • 2.
    ÍndiceIntroducción históricaAspectos generalesTiposEstructurasde controlSubprogramasPaquetesExcepcionesTareas
  • 3.
    Introducción histórica1974. USDoD percibe un elevado gasto en software. En el ámbito de sistemas empotrados había un elevado número de leguajes en uso.1975. Strawman. Requisitos del nuevo lenguaje. Refinado en Woodenman.1976. Timan. Identificada la funcionalidad del nuevo lenguaje. Se evaluaron lenguajes existentes para comprobar si cubrían la funcionalidad especificada. Resultado negativo. Se revisaron los requisitos y se generó Ironman.Invitación para proponer el diseño del nuevo lenguaje.Se recibieron 16 propuestas y se seleccionaron 4.CII Honeywell Bull (Green), Intermetrics (Red), Softech (Azul), SRI International (Yellow).Los diseños iniciales se entregaron en 1978 y se evaluaron internacionalmente.Fueron preseleccionados los equipos Rojo y Verde. Se les dio un año más para mejorar.El 2 de mayo de 1979 se seleccionó la propuesta del lenguaje Verde desarrollada por un equipo internacional dirigido por Jean Ichbiah.El DoD anunció que el nuevo lenguaje se llamaría Ada en honor de Augusta Ada Byron (hija de Lord Byron). Ada fue ayudante y patrocinadora de Charles Babagge y trabajó en su máquina analítica mecánica. Se la considera la primera programadora.1983. ADA estándar ANSI (RM83).1987. ADA estándar ISO (8652).
  • 4.
    Introducción históricaAda seempezó a utilizar en muy diferentes áreas, además de en sistemas empotrados. En 1988 arrancó el proyecto Ada 9X.Se propusieron 41 nuevos requisitos junto con 22 estudios específicos de áreas que todavía no se entendían completamente.Construir un compilador que tuviera en cuenta todas las propuestas nuevas parecía costoso e innecesario.Ada 95 se constituyó como un núcleo fundamental, junto con una serie de anexos opcionales (estándar ISO 15-2-1995).Se generaron los siguientes documentos de referencia:Reference Manual for the Ada Programming Language (RM95).Annotated Ada Reference Manual (AARM).
  • 5.
    Aspectos generalesIdentificadores.Identificador ::=letra{[subrayado]letra_o_digito}letra_o_digito ::= letra | digitoLiterales numéricosTipos básicos:Integer, float.Ej. Num_alumnos : Integer; Temperatura : Float;Tanto los enteros como los reales pueden tener exponentes, pero en el caso de los enteros los exponentes no pueden ser negativos.Ej. 10.22E-12 12E2Base del número.Ej. 2#1010# 16#AF28# 4#32#E8 (32 x 48)Comentarios.-- Esto es un comentario
  • 6.
    Aspectos generalesDeclaraciónI :integer;P: integer := 6;Q : constantFloat := 8.1632;Bloques y visibilidaddeclarei,k : integer;begin …… declare i : integer;begin …….end; ……end;
  • 7.
    TiposDeclaración de tiposTypeColor is (Rojo, Amarillo, Verde);C : Color := Verde;Q: constant Color := Verde;Type Esquema isarray (0..5) of integer;Perfil : Esquema;…………………..Perfil(0) := 105;Declaración de subtiposSubtypeDiaisintegerrange 1..31;D : Dia;
  • 8.
    TiposTipos numéricos simplesP:Integer;Q : Float;AtributosSubtype Natural isintegerrange 0..Integer’Last;Subtype Positive isintegerrange 1..Integer’Last;Cambio de tipoI: Integer := 3;F: Float := 5.6;……I := Integer( F ) + I;F := F + Float( I );
  • 9.
  • 10.
  • 11.
    Estructuras de controlifComando= Izquierda thenGirar_Izquierda;elsifComando = DerechathenGirar_Derecha;elsif Comando = AcelerarthenIncrementar_Velocidad;elsifComando = Decelerar thenDecrementar_Velocidad;elseMantener_Velocidad;endif;
  • 12.
    Estructuras de controlcaseComandoiswhen Izquierda => Girar_Izquierda;when Derecha => Girar_Derecha;when Acelerar => Incrementar_Velocidad;when Decelerar => Decrementar_Velocidad;whenothers=> Mantener_Velocidad;end case;
  • 13.
  • 14.
  • 15.
    Estructuras de controlforx in 1..3 loopMedita;Coge_tenedores; Come;endloop;whilenotHora_DormirloopCoge_tenedores; Come; Medita;endloop;for x in reverse 0..10 loopDi_Numero( x );endloop;
  • 17.
    SubprogramasSubprograma ::= procedurenombre parámetros |function nombre parámetros resultadoparámetros ::= (especificación{; especificación})especificación ::= lista_identificadores: modo subtipomodo ::= [in | in out | out]resultado ::= return subtipo
  • 18.
    SubprogramasFunction factorial( N:Positive) returnPositive isBeginif N = 1 thenreturn 1;elsereturn N * factorial( N – 1 );endif;End factorial;ProcedureAdd (A, B : in integer; C: outinteger) isBegin C := A+B;EndAdd;
  • 19.
    SubprogramasFunction“*” (A, B:Vector) returnFloatis Resultado : Float := 0.0;beginfor x in A’Rangeloop Resultado := Resultado + A(x)*B(x);endloop;return Resultado;end“*”;
  • 20.
    PaquetesPackagebodyPila_enterosis Max: constant := 100; S: array(1..Max) of integer; Cima: integerrange 0..Max;procedurePush( x: integer) isbegin Cima := Cima + 1; S(Cima) := x;endPush;function Pop returnintegerisbegin Cima := Cima -1;return S(Cima);end Pop;begin Cima := 0;endPila_enteros;packagePila_enterosisprocedurePush( x: in integer );function Pop returninteger;endPila_enteros;
  • 21.
    ExcepcionesPermiten tratar situacionespoco frecuentes, pudiendo controlar con ellas un fracaso del SW.Hay cuatro predefinidasConstraint_ErrorProgram_ErrorStorage_ErrorTasking_Error
  • 22.
    Excepcionesbegin …………. ……….....exceptionwhenConstraint_Error => -- Tratamiento especificoend;
  • 23.
    ExcepcionesPackagebodyPila_enterosis ………. ……….procedurePush( x: integer)isbeginif Cima = Max thenraiseError;endif; Cima := Cima + 1; S(Cima) := x;endPush; ………. ……….endPila_enteros;packagePila_enterosis Error: exception;procedurePush( x: in integer );function Pop returninteger;endPila_enteros;
  • 24.
    Excepcioneswith Pila_enteros;procedure Actuarisbegin ………. ………. Pila_enteros.Push(5); ………. ……….exception When Error => put(“Error en la pila”);end Actuar;