Você está na página 1de 4

Centro Federal de Educao Tecnolgica de Minas Gerais Engenharia da Computao - Departamento de Computao Disciplina: Linguagens de Programao Prof.

: Csar Francisco de Moura Couto E-mail: cesar@decom.cefetmg.br Lista de Exerccios I Data de Entrega: Dia da Prova Valor: 10 pontos 1. O que ser impresso pelo seguinte programa em Java?
public class A { protected int x; public A(int x1){ x = x1; } public void f(){ System.out.println("A::f "+ x); } } public class B extends A { protected int x; public B(int x1){ super(x1); x = x1; } public void f(){ System.out.println("B::f "+ x); } } public class C extends B { public C (int x1){ super(x1); } } public class Main { public static void main(String[] args) { A a = new A(1); a.f(); a = new B(2); a.f(); a = new C(3); a.f(); } }

2. Suponha o programa abaixo na linguagem orientada por objetos hipottica chamada TILT, o qual est de acordo com todas as regras sintticas e semnticas da linguagem. No entanto, este programa introduz uma brecha no sistema de tipos de TILT, isto , existe a possibilidade dele apresentar um resultado incorreto ou mesmo abortar devido a um erro de tipo em alguma de suas expresses. Descreva o erro e identifique qual caracterstica de TILT deu origem ao problema.

Centro Federal de Educao Tecnolgica de Minas Gerais Engenharia da Computao - Departamento de Computao Disciplina: Linguagens de Programao
class Planta ..... nome: string; ...... end; procedure main var h: Herbivoro; c: Coelho; p: Planta; begin c= new Coelho(); p= new Planta(); ....... h= c; // atribuio polimrfica h.comer (p); end;

class Grama: Planta ..... quant: integer; ... end; class Herbivoro ........ virtual procedure comer (comida: Planta) begin ........ end; ........ end; class Coelho: Herbivoro ...... virtual procedure comer (comida: Grama) begin ...... comida.quant--; ...... end; ...... end;

3. Mostre uma possvel sada do programa abaixo. Suponha que o coletor de lixo entra em ao uma vez antes de o programa terminar.
class BigClasse { private int x; private int [] bigvetor; public BigClasse (int x1) { System.out.println ("Criando " + x1); x= x1; bigvetor= new int [1024*1024]; } protected void finalize () { System.out.println ("Eliminando " + x); } } public class Questao4 { public static void main(String[] args) { BigClasse p; for (int i= 0; i < 10; i++) p= new BigClasse (i); } }

4. Padres de projeto documentam solues para diversos problemas recorrentes em programao. Um padro de projeto bastante conhecido denominado de singleton. Basicamente, este padro descreve como declarar uma classe que possua, no mximo, uma instncia. Mostre ento a declarao de uma classe S em Java que seja um singleton. Esta classe dever possuir um mtodo esttico create() que sempre ser usado para se criar objetos do tipo S. Caso ainda no existam instncias de S, o mtodo create() instancia um objeto deste classe. Caso j exista uma instncia da classe, o mtodo create() retorna uma referncia para esta instncia. 5. O trecho de programa abaixo em Java apresenta algum erro? Se sim, descreva o mesmo. Se no, mostre o que ser impresso pelo trecho de programa da direita:

class E { public static int x= 0;

.... System.out.println(E.x);

Centro Federal de Educao Tecnolgica de Minas Gerais Engenharia da Computao - Departamento de Computao Disciplina: Linguagens de Programao public static void p() { x++; System.out.println("E::p"); } public void q() { System.out.println(x); } } 6. Reescreva o mtodo abaixo fazendo o tratamento das excees lanadas. A classe StreamCorruptedException estende de IOException e IOException estende de Exception. public void fazAlgumaCoisa() throws StreamCorruptedException, IOException, Exception { //codigo } 7. Suponha que em um programa financeiro seja necessrio calcular o saldo mdio de um certo nmero N de contas bancrias, as quais encontram-se armazenadas em um vetor contas. As contas contidas neste vetor podem representar contas corrente, contas de poupana e contas de FGTS.
Mostre a declarao em Java de classes para representar estes trs tipos de contas. Cada classe deve disponibilizar um mtodo saldoMedio(int meses), que retorna o saldo mdio da conta nos ltimos meses. Na declarao das classes basta mostrar a declarao do mtodo saldoMedio. Utilize adequadamente em sua declarao os diversos conceitos de orientao por objetos (classes, controle de visibilidade, classes abstratas, mtodos virtuais etc). Mostre como seria declarado e criado em Java o vetor contas. Mostre ainda um trecho de cdigo para calcular a mdia dos saldos mdios nos ltimos n meses das contas armazenadas neste vetor.

E.p(); System.out.println(E.x); E e= new E(); System.out.println(e.x); e.q();

8. Descreva o que ser impresso pelo programa C++ abaixo. class A { public: virtual void f () { cout << "A::f() "; } void g() { cout << "A::g() "; } }; class B: public A { public: void f () { cout << "B::f() "; } void g() { cout << "B::g() "; } }; int main () { B b; B *bp= &b; A *ap= &b; 1: ap->f(); 2: ap->g(); 3: b.f(); 4: b.g(); }

9. O que ser impresso pelo seguinte programa em C++ ?

Centro Federal de Educao Tecnolgica de Minas Gerais Engenharia da Computao - Departamento de Computao Disciplina: Linguagens de Programao class A { public: int x; }; class B1: public A { public: void f () { cout << x << endl; } }; class B2: public A { public: void f () { cout << x << endl; } }; class C: public B1, public B2 { public: void g () { B1::x= 4; B2::x= 5; B1::f(); B2::f(); } }; int main() { C c; c.g(); }

O que ser impresso pelo mesmo programa acima supondo-se que as classes B1 e B2 so declaradas da seguinte forma: class B1: public virtual A { .... }; class B2: public virtual A { .... };

10. Mostre o que ser impresso pelo programa C++ abaixo, supondo que os valores lidos para a so: 1, 1, 0 e 2. class A { }; class B: public A { } ; class C: public B { }; class Z { }; void g (int a) { try { try { if (a == 1) throw C(); else if (a < 0) throw B(); else if (a ==0) throw Z(); } catch (C) { cout << "g-catch1 "; throw; } cout << "g-fim-try1 "; } catch (C) { cout << "g-catch2"; } cout << "g-fim-try2 "; } void f (int a) { try { g(a); } catch (A) { cout << "f-catch "; } cout << "f-fim "; } void main () { int a; cin >> a; try { f (a); } catch (A) { cout << "main-catch "; } cout << "main-fim \n"; }

Você também pode gostar