Conceitos Essenciais de OOP e Padrões de Projeto
Classificado em Computação
Escrito em em português com um tamanho de 6,37 KB
Herança e Polimorfismo em OOP
- Herança: Relacionamento hierárquico onde subclasses, ou classes filhas, herdam os atributos e os comportamentos de sua superclasse, podendo adaptar este comportamento para atender à sua necessidade específica.
- Princípio da Substituição (Liskov): Esse princípio afirma que você pode utilizar um objeto de subclasse sempre que o programa espera um objeto de superclasse.
- Exemplo: O
arrayFuncionarios
foi declarado para receber objetos da classeFuncionário
e, consequentemente, pode receber objetos de suas subclasses. - Polimorfismo: Permite “programar no geral” em vez de “programar no específico”, possibilitando escrever programas que processam objetos que compartilham a mesma superclasse (direta ou indiretamente) como se todos fossem objetos da superclasse.
- Vinculação Dinâmica: O método a ser chamado só será determinado em tempo de execução.
Padrão de Projeto Strategy
O que é o Padrão Strategy?
O padrão de projeto Strategy (Estratégia) tem como objetivo central o encapsulamento de algoritmos que podem variar com facilidade, a fim de prover um comportamento mais adequado para um objeto de acordo com um contexto. Esta implementação e modelagem foi inspirada neste padrão.
Aspectos Positivos do Strategy
- O algoritmo pode ser alterado sem a modificação da classe
Venda
. A partir dessa estrutura, novas implementações podem ser criadas e introduzidas posteriormente. - A lógica condicional na classe
Venda
foi reduzida. Como a escolha do algoritmo está na implementação do objeto que está compondo a classe, isso elimina a necessidade de ter condicionais para selecionar a lógica a ser executada. - A implementação pode ser trocada em tempo de execução, alterando dinamicamente o comportamento da classe, o que é uma aplicação de polimorfismo.
Aspectos Negativos do Strategy
- Aumento da complexidade na criação do objeto, pois a instância da dependência precisa ser criada e configurada. Caso o atributo seja nulo, a classe pode apresentar um comportamento inesperado.
- Aumento do número de classes. Há uma para cada algoritmo, o que pode criar uma maior dificuldade em seu gerenciamento.
O que são Padrões de Projeto (Design Patterns)?
Um Design Pattern é uma técnica de modelagem de classes e objetos que resolve um problema comum a diversos tipos de aplicativos.
Princípios de Design Orientado a Objetos
- Programe para uma interface, não para uma implementação.
- Prefira a composição de objetos à herança de classe.
- Encapsule o que varia.
Desvantagens e Limitações da Herança
Quando a herança é utilizada apropriadamente, todas as classes derivadas sobrescrevem os métodos da superclasse.
- As superclasses definem parte da representação física de suas subclasses. Certos aspectos herdados podem não fazer sentido em determinados contextos.
Princípios de Responsabilidade e Abstração
Olhe para uma classe, enxergue sua responsabilidade, abstraia suas possíveis alterações e crie uma nova classe.
Se a sua classe precisa ter mais de uma responsabilidade, divida-as e as associe.
Padrão de Projeto State (Estado)
Objetivo da Modelagem de Estado
- Prover todas as possíveis operações realizadas em função de eventos ocorridos;
- Descrever o ciclo de vida de objetos de uma classe, os eventos que causam a transição de um estado para outro e a realização de operações resultantes.
Elementos Básicos de um Diagrama de Estados
Alguns elementos básicos de um diagrama de transição de estado são os estados e as transições. Associados a estes, estão os conceitos de evento e ação.
Estado
- É uma situação no ciclo de vida de um objeto durante a qual ele satisfaz alguma condição ou realiza alguma atividade.
- Normalmente determinado pelos valores de seus atributos.
Evento
Um evento é algo que acontece em algum ponto no tempo e que pode modificar o estado de um objeto.
Tipos de Eventos Relevantes
- Evento de Chamada: Recebimento de uma mensagem de outro objeto como solicitação de serviço.
- Evento Temporal: Passagem de um intervalo de tempo predefinido. Usa-se a cláusula after (depois).
Exemplo:after(30 segundos)
indica que a transição correspondente será disparada 30 segundos após o objeto ter entrado no estado atual. - Evento de Mudança: Ocorre quando uma condição se torna verdadeira. É representado por uma condição de valor lógico (verdadeiro ou falso) utilizando-se a cláusula when (quando).
Exemplo:when(horário = 00:00h)
significa que a transição é disparada quando o valor do atributohorário
for verdadeiro.
Condição de Guarda
- Uma condição de guarda é uma expressão de valor lógico.
- Uma transição na qual foi definida uma condição de guarda é disparada somente se o evento associado ocorre e a condição de guarda é verdadeira.
- A expressão condicional de uma condição de guarda é sempre apresentada entre colchetes.
Sintaxe de Transição
evento (lista-parâmetros) [guarda] / ação (lista-parâmetros)
Ação
- Uma ação normalmente corresponde à execução de uma operação (método), é representada na linha da transição e deve ser precedida por uma barra (
/
).
Quando Utilizar Diagramas de Estado?
- A utilização do diagrama de estado é propícia para classes que tenham algum comportamento dinâmico.
- Se houver um atributo que define um “Status”, isso deve ser um indicador de vários estados.
Outras Considerações
Multiplicidade em Relacionamentos
- Relacionamentos que tenham zero entre os múltiplos.