Baixe o app para aproveitar ainda mais
Prévia do material em texto
UFCG / CCC / Paradigmas de Linguagens de Programação / 2014.1 / Turma 02 Nome: _______________________________________________ Matrícula: _______________ Mini-Prova 01 – 26/06/2014 1. Considere o trecho de programa abaixo em Java. (a) Classifique a chamada foo(aDog): comando, expressão ou expressão com efeitos colaterais? Justifique. (1.0 pontos) Comando. Não há retorno de valor. (b) Que mecanismo de passagem de parâmetros é aplicado na chamada de foo(aDog)? Como é feita a associação entre parâmetro real e parâmetro formal? Qual o string impresso no último comando do main? Justifique. (1,5 pontos) Call-by sharing. Os parâmetros d e aDog apontam para o mesmo objeto. Mas, quando d é realocado, passam a apontar para objetos diferentes. Com isto, o valor impresso será Max. (c) Classifique a variável aDog: stack ou heap? Justifique (0.5 pontos). aDog é uma referência e, portanto, uma variável stack. Em tempo de execução, poderá receber, como valor, o endereço de uma variável heap. public class ParameterPassing2 { static public void foo(Dog d) { d.getName().equals("Max"); // true d = new Dog("Fifi"); d.setName("Fifi"); // true } static public void main (String [] args) { Dog aDog = new Dog("Max"); foo(aDog); System.out.println(aDog.getName()); } } 2. Compare as definições em ML abaixo, apontando semelhanças e diferenças com relação aos conceitos de linguagens de programação (2.0 pontos). Semelhanças: uso de recursividade Diferenças: fac1 é definida através de uma expressão condicional fac2 é definida usando casamento de padrões. fun fac1 n = if (n=0) then 1 else n*(fac1(n-1)) fun fac2 0 = 1 | fac2 n = n*(fac(n-1))
Compartilhar