Métodos Avançados de Programação
Auto Avaliação
Para cursar a disciplina:
Você deve ser um bom programador;
Você deve estar familiarizado com os conceitos de Orientação a
Objeto;
Você deve saber bem pelo menos uma linguagem orientada a
objeto.
Para avaliar se está pronto para cursar esta disciplina, responda as
perguntas abaixo.
Se você resolver os exercícios com facilidade (sem consultar nenhuma
bibliografia e usando uma ou duas horas): você está pronto para cursar
a disciplina.
Se você conseguiria resolver os exercícios dado mais tempo (um dia) e
consultando bibliografia: você pode cursar a disciplina mas tem que suprir
deficiências.
Se você tiver dificuldade ou não conseguir resolver os exercícios:
você não está pronto.
Exercícios
Nos exercícios abaixo, onde aparecer "Java", você poderá
também usar C++/STL.
- Defina o que é feito na etapa de Análise e o que é feito na etapa de Projeto
ao desenvolver software.
- Enumere as vantagens da abordagem Orientada a Objetos para o desenvolvimento de
software.
- Qual é o motivo de levantar Requisitos Funcionais para desenvolver software e o que faz
parte de uma descrição de Requisitos Funcionais?
- Mostre como instanciar um objeto da classe ContaBancária em Java fornecendo o CPF (um
string) do titular como argumento. Com o objeto resultante, faça um depósito de R$100,00
e imprima o saldo. Você pode escolher nomes apropriados para os métodos.
- Explique o que é um Iterator em Java. Qual é sua principal vantagem?
- Mostre a implementação de uma classe ContaBancária. Invente atributos e métodos.
- Explique a diferença de funcionamento entre um "return" e um
"throw". Seja específico.
- Mostre, usando Java, como especializar uma classe ContaBancária para criar uma
ContaCorrente e uma ContaPoupança.
- Explique as vantagens e desvantagens do polimorfismo. Dê exemplos.
- Explique a afirmação: "Em Java, o conceito de interfaces permite obter mais
polimorfismo do que seria possível com classes abstratas".
- Qual é a diferença entre "herança de tipo" e "herança de
implementação"?
- Quais são as vantagens e desvantagens de acoplamento forte entre objetos?
- Ao falar de boa programação, fala-se: "A decomposição deve esconder algo."
O que poderia ser escondido, por exemplo?
- O que é uma "responsabilidade de uma classe"? Por que queremos minimizar o
número de responsabilidades? "Mais" não seria melhor?
- Por que modelar papeis (roles) através de herança é inferior a modelá-los através
de composição?