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?