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 classe Funcioná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

  1. Programe para uma interface, não para uma implementação.
  2. Prefira a composição de objetos à herança de classe.
  3. 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 atributo horá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.

Entradas relacionadas: