Aula 1 - Orientação a objetos
Um objeto é um componente de software - uma parte de um sistema
que exibe, ou deveria exibir, certas características específicas. Nessa
aula vamos ver algumas dessas características
- Comportamento e estado
- O estado de um objeto é o conjunto de suas propriedades;
- O comportamento de um objeto são as funções que afetam suas propriedades
ou as de outros objetos;
- Cada objeto tem seu próprio estado
- Instâncias e classes
- Cada objeto é uma instância de alguma classe;
- Uma classe define quais as propriedades que tem cada uma de suas instâncias
e comportamento delas;
- Há apenas uma "cópia" do comportamento (métodos da classe).
- Acoplamento e coesão
- Acoplamento é o nível de dependência entre classes;
- Deve-se tentar minimizar o acoplamento para evitar a propagação de mudanças
e para possibilitar a reutilização de classes;
- Coesão é o nível de integridade interna de uma classe;
- Classes com alta coesão têm responsabilidades bem definidas e são difíceis
de dividir em duas ou mais classes;
- Classes com baixa coesão tratam de responsabilidades diversas e em geral
podem ser divididas.
- Deve-se tentar maximizar a coesão das classes.
- Interfaces e implementações
- Cada objeto define uma interface pública;
- A interface consiste dos comportamentos e estado do objeto que podem ser
acessados por outros objetos;
- A interface é um contrato; mudar a interface significa violar o
contrato e pode ter consequências graves;
- A implementação é o modo como o objeto realiza as obrigações impostas pelo
contrato;
- Outros objetos não deveriam ser afetados por mudanças na implementação.
- A interface de um método também é chamada de assinatura, e consiste do nome
do método mais seus parâmetros formais.
- Um método é sobrecarregado quando uma classe tem mais de um método com o
mesmo nome, mas diferentes listas de parâmetros.
Exemplo: a cozinha inteligente de Torsten
Eu gostaria de um sistema que soubesse que ingredientes eu tenho em casa
(na despensa e geladeira)
e que guardasse minhas receitas favoritas. Ele me permitiria fazer três consultas:
descobrir se tenho em casa os ingredientes necessários para preparar uma receita,
descobrir que receitas posso preparar com os ingredientes que tenho em casa, e
descobrir que receitas posso preparar com um conjunto específico de ingredientes.
- Quais são as classes desse sistema?
- Qual o estado de cada classe?
- Qual a funcionalidade que cada classe deve prover?
- Como são as dependências entre as classes?
Exercício 1: Projeto da cozinha inteligente
Desenhar um diagrama de classes que mostre as classes do sistema, seus dados,
métodos e relacionamentos entre classes. Deve ser possível inferir do diagrama
como serão respondidas as três consultas acima.
(Próxima aula)