Seminario de Lenguajes A Opcin Ada Overloading de

  • Slides: 7
Download presentation
Seminario de Lenguajes A – Opción Ada • Overloading de subprogramas procedure Put(Item: in

Seminario de Lenguajes A – Opción Ada • Overloading de subprogramas procedure Put(Item: in integer; Width: in integer : = 0); procedure Put(Item: character); – Identificación por tipo o cantidad de parámetros – Conflictos posibles procedure Over(A: in character) is begin Put(A); end Over; procedure Over(A: in character; B: in character : = ' ') is begin if B = ' ' then Put(B); else Put(A); end if; end Over; Over('X'); Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 1

Seminario de Lenguajes A – Opción Ada • Operadores – Los operadores son funciones

Seminario de Lenguajes A – Opción Ada • Operadores – Los operadores son funciones function "+"(X, Y: in integer) return integer; function "*"(X, Y: in float) return float; function "and"(X, Y: in boolean) return boolean; – Uso: como operador o como función I : = 1 + 4; I : = "+"(1, 4); Put(1 + 4); Put("+"(1, 4)); B : = A and B; B : = "and"(A, B); – Ejemplo function "and"(X, Y: in boolean) return boolean is -- si X es TRUE, devuelve X and Y; si no, X xor Y Result : boolean; begin if X then Result : = X and Y; else Result : = X xor Y; end if; return Result; end "and"; Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 2

Seminario de Lenguajes A – Opción Ada – Pero esa solución produce una recursión

Seminario de Lenguajes A – Opción Ada – Pero esa solución produce una recursión infinita function "and"(X, Y: in boolean) return boolean is -- si X es TRUE, devuelve X and Y; si no, X xor Y Result : boolean; begin if X then Result : = standard. "and"(X, Y); else Result : = X xor Y; end if; return Result; end "and"; – Package Standard • Contiene todos los identificadores predefinidos por el lenguaje • Entre otras cosas: – Define los tipos Boolean, Integer, Float, Character, String – Define los subtipos Natural, Positive – Define los operandos sobre esos tipos Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 3

Seminario de Lenguajes A – Opción Ada • Reglas para el overloading de operadores

Seminario de Lenguajes A – Opción Ada • Reglas para el overloading de operadores – Se puede hacer overloading de todos los operadores predefinidos excepto de los operadores de short circuit (and then, or else) y los de membership (in, not in) – Deben ser definidos como funciones y tener la misma cantidad de parámetros que la versión predefinida – No se permiten valores de parámetros por default – No hay restricciones sobre los tipos de los parámetros y del resultado – El overloading de los operadores relacionales de orden (<, <=, >, >=) se ajusta a las reglas anteriores – No se puede hacer overloading explícito del /= sino implícitamente al hacer overloading del =, excepto que el tipo de retorno NO sea el boolean predefinido – El overloading del = hace overloading implícito del /= Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 4

Seminario de Lenguajes A – Opción Ada with Text_IO; use Text_IO; procedure Clase 3_Over.

Seminario de Lenguajes A – Opción Ada with Text_IO; use Text_IO; procedure Clase 3_Over. Oper is function "and"(X, Y: in boolean) return boolean is -- si X es TRUE, devuelve el and entre X e Y -- si X es FALSE, devuelve el xor entre X e Y Result : boolean; begin if X then Result : = standard. "and"(X, Y); else Result : = X xor Y; end if; return Result; end "and"; package BIO is new Enumeration_IO(boolean); package IIO is new Integer_IO(integer); use IIO; procedure Put(B: in boolean) is begin BIO. Put(B); New_Line; end Put; Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 5

Seminario de Lenguajes A – Opción Ada function "/="(A, B: in integer) return integer

Seminario de Lenguajes A – Opción Ada function "/="(A, B: in integer) return integer is begin return (A + B) * 2; end "/="; function "="(A, B: in integer) return boolean is begin return true or (A > B); end "="; begin Put(1 + 4); Put("+"(1, 4)); New_line; Put(1 = 4); Put("="(A => 1, B => 4)); New_line; -- 5 -- FALSE -- TRUE Put(1 /= 4); -- TRUE -- Put("/="(A => 1, B => 4)); expresión ambigua (no puede resolver Put) IIO. Put("/="(A => 1, B => 4)); -- 10 New_line; Put(B => "/="(A => 1, B => 4)); -- FALSE New_line; Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 6

Seminario de Lenguajes A – Opción Ada Put(true and true); Put("and"(true, false)); Put(true and

Seminario de Lenguajes A – Opción Ada Put(true and true); Put("and"(true, false)); Put(true and false); Put(false and true); Put(false and false); end Clase 3_Over. Oper; ------ TRUE FALSE Seminario de Lenguajes A – Opción Ada – Raúl Champredonde 7