SlideShare uma empresa Scribd logo
OCP - The Open Close Principle (Princípio aberto/fechado)
       “As entidades devem estar abertas para extensão, mas fechadas para modificação” (Martin, p. 99)

       Este princípio encoraja os desenvolvedores a adicionar novo código a cada refatoração, ao invés de
mudar o código existente. Esta é uma ideia interessante, pois sugere manutenção fácil, já que o
desenvolvedor não tem que se preocupar em alterar o código existente. Deixando de lado por um
momento o quão realístico ou imaginável possa ser este princípio, vamos ver como o OCP deve ser
aplicado, começando pela explicação de seus dois atributos básicos:

   ● “Aberto para extensão”: é possível estender o comportamento do módulo, à medida que os seus
     requisitos mudam.
   ● “Fechado para modificação”: estender este comportamento não quer dizer mudar o código-fonte
     do módulo.

       À primeira vista, estes atributos parecem opostos, mas a implementação deste princípio é feita
graças à utilização de classes abstratas e subclasses concretas, com delegação de todo ou parte do
algoritmo às subclasses (padrão Strategy). Usando este procedimento, é possível estender ou mudar o
comportamento da classe abstrata, através da criação de novas subclasses que implementam uma nova
versão de um método da classe abstrata.

       Uma vez que o ambiente ágil requer um código apto a receber modificações, mas ao mesmo tempo
que obedeça à definição de pronto dentro de uma time box, este é um dos princípios mais valiosos.
Obedecê-lo faz com que o código não seja mudado, e sim estendido, o que demanda menos esforço por
parte do desenvolvedor.

       O OCP tem sido usado de duas formas. Ambas utilizam herança para a implementação, mas os
objetivos, resultados e técnicas são diferentes:

   ●   “Meyer’s OCP”: O termo e Open Close Principle é atribuído a Bertrand Meyer (1988). Esta vertente
       do OCP diz que a implementação de uma classe só pode modificada para se corrigir erros. No caso
       de novos recursos ou mudanças nos requisitos, uma nova classe deve ser criada. Esta nova classe
       deve reutilizar o código da superclasse através de herança. As subclasses podem ou não ter a
       mesma interface da superclasse. É a chamada implementação por herança .

   ●   “Polymorphic OCP”: nos anos 90, o OCP foi redefinido para abranger o uso de classes abstratas,
       onde as implementações podem ser mudadas e múltiplas implementações podem ser criadas e
       polimorficamente substituídas. Diferentemente da vertente de Meyer, a implementação por
       polimorfismo defende a herança através de classes abstratas. As especificações de interface podem
       ser herdadas, mas não necessariamente a implementação. Assim, a interface já existente é fechada
       para modificações e novas implementações devem, no mínimo, contemplar uma interface.
Aplicação prática (implementação em diagramas de classe):

        Analisando primeiramente o contra-exemplo (diagrama inicial), percebemos
que a classe concreta Produto é associada à classe Venda e possui os métodos
FormaDePagamento e OpcaoDeCompra. Se uma nova forma de pagamento for
criada, bem como uma opção de compra, é preciso que os padrões de projeto sejam
obedecidos, evitando-se IFs/Switches. Então, como fazer?




        Através do princípio aberto-fechado, as classes foram estendidas, criando-se duas interfaces
(FormasDePagamento e OpcoesDeCompra), cada qual com suas possibilidades atuais (cartão de crédito,
débito online, mensal e anual) A implementação passa a ser para interface. Internet e TV a cabo, por sua
vez, deixam de ser pertencer à classe Venda e passam a ter uma relação de herança com a classe Produto
que, por sua vez, é uma classe abstrata.

Diagrama final alterado:




      Usar OCP é satisfazer a condição de contrato único para uma classe. Já que esta deve ter uma e
somente uma responsabilidade, só deverá ser modificada se esta responsabilidade mudar. Como
desenvolvedores, sabemos que o seu comportamento inevitavelmente irá mudar. É esta a proposta do
OCP: manter a estabilidade (contrato da classe), criando pontos de extensão.

Mais conteúdo relacionado

PPTX
Estudos Technocorp
DOCX
Sincronização e comunicação entre processos
PPTX
Sap – stablility and abstract principle
PPTX
Princípios SOLID
PPTX
SOLID - Teoria e Prática
PPT
PDF
Lógica de Programção - Módulo 1 - algoritmos-introdução
PPTX
SOLID Os princípios da linguagem orientada a objeto
Estudos Technocorp
Sincronização e comunicação entre processos
Sap – stablility and abstract principle
Princípios SOLID
SOLID - Teoria e Prática
Lógica de Programção - Módulo 1 - algoritmos-introdução
SOLID Os princípios da linguagem orientada a objeto

Semelhante a OCP - The Open Close Principle - Princípio aberto/fechado (20)

PPT
Dojo solid
PPTX
Programação orientada à objetos & mvc
PPTX
Padrões de Projeto: Adapter
PPTX
Introdução ao TDD
ODP
Construção de Frameworks com Annotation e Reflection API em Java
PDF
Design Pattern MVC – Arquitetura de Software Coesa e Flexível
PDF
poster
PPT
boas praticas
PPT
Padrões de design orientado a objetos
PPT
Reutilização
PDF
PDF
Sap – stablility and abstract principle
PDF
qualidade de código: boas práticas, princípios e padrões
PDF
Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...
ODP
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
PDF
DCI com PHP
PDF
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
PDF
Proposta de uma Abordagem Formal para o Gerenciamento de Variabilidades em Mo...
PDF
MODERNIZAÇÃO DE SISTEMAS LEGADOS: um estudo de caso sobre integração de siste...
PDF
APM Model in .NET - PT-pt
Dojo solid
Programação orientada à objetos & mvc
Padrões de Projeto: Adapter
Introdução ao TDD
Construção de Frameworks com Annotation e Reflection API em Java
Design Pattern MVC – Arquitetura de Software Coesa e Flexível
poster
boas praticas
Padrões de design orientado a objetos
Reutilização
Sap – stablility and abstract principle
qualidade de código: boas práticas, princípios e padrões
Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
DCI com PHP
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Proposta de uma Abordagem Formal para o Gerenciamento de Variabilidades em Mo...
MODERNIZAÇÃO DE SISTEMAS LEGADOS: um estudo de caso sobre integração de siste...
APM Model in .NET - PT-pt
Anúncio

Mais de Engenharia de Software Ágil (20)

PPTX
Sap – stablility and abstract principle
PDF
Common closure principle
PPTX
Common closure principle
PDF
Acyclic dependencies principle
PPTX
Acyclic dependencies principle (adp)
PDF
Reuse release equivalence principle
PDF
Rep reuse release equivalence principle
PDF
Sdp – stable dependencies principles
PDF
principio de reutilização comum
PPTX
Princípio law of demeter
PDF
Lod law of demeter
PDF
Dip the dependency inversion principle
PPTX
Dip the dependency inversion principle
PPTX
Dip the dependency inversion principle
PDF
(ISP) - Interface Segregation Principle
PDF
LSP – The Liskov Substitution Principle
PDF
SRP - Single Responsability Principle
PDF
Princípio Law Of Demeter (LOD)
PPT
TDD - Test Driven Development
Sap – stablility and abstract principle
Common closure principle
Common closure principle
Acyclic dependencies principle
Acyclic dependencies principle (adp)
Reuse release equivalence principle
Rep reuse release equivalence principle
Sdp – stable dependencies principles
principio de reutilização comum
Princípio law of demeter
Lod law of demeter
Dip the dependency inversion principle
Dip the dependency inversion principle
Dip the dependency inversion principle
(ISP) - Interface Segregation Principle
LSP – The Liskov Substitution Principle
SRP - Single Responsability Principle
Princípio Law Of Demeter (LOD)
TDD - Test Driven Development
Anúncio

Último (19)

PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Aula04-Academia Heri- Tecnologia Geral 2025
COBITxITIL-Entenda as diferença em uso governança TI
Apple Pippin Uma breve introdução. - David Glotz
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Custos e liquidação no SAP Transportation Management, TM130 Col18
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Processos na gestão de transportes, TM100 Col18
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Aula 18 - Manipulacao De Arquivos python
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14

OCP - The Open Close Principle - Princípio aberto/fechado

  • 1. OCP - The Open Close Principle (Princípio aberto/fechado) “As entidades devem estar abertas para extensão, mas fechadas para modificação” (Martin, p. 99) Este princípio encoraja os desenvolvedores a adicionar novo código a cada refatoração, ao invés de mudar o código existente. Esta é uma ideia interessante, pois sugere manutenção fácil, já que o desenvolvedor não tem que se preocupar em alterar o código existente. Deixando de lado por um momento o quão realístico ou imaginável possa ser este princípio, vamos ver como o OCP deve ser aplicado, começando pela explicação de seus dois atributos básicos: ● “Aberto para extensão”: é possível estender o comportamento do módulo, à medida que os seus requisitos mudam. ● “Fechado para modificação”: estender este comportamento não quer dizer mudar o código-fonte do módulo. À primeira vista, estes atributos parecem opostos, mas a implementação deste princípio é feita graças à utilização de classes abstratas e subclasses concretas, com delegação de todo ou parte do algoritmo às subclasses (padrão Strategy). Usando este procedimento, é possível estender ou mudar o comportamento da classe abstrata, através da criação de novas subclasses que implementam uma nova versão de um método da classe abstrata. Uma vez que o ambiente ágil requer um código apto a receber modificações, mas ao mesmo tempo que obedeça à definição de pronto dentro de uma time box, este é um dos princípios mais valiosos. Obedecê-lo faz com que o código não seja mudado, e sim estendido, o que demanda menos esforço por parte do desenvolvedor. O OCP tem sido usado de duas formas. Ambas utilizam herança para a implementação, mas os objetivos, resultados e técnicas são diferentes: ● “Meyer’s OCP”: O termo e Open Close Principle é atribuído a Bertrand Meyer (1988). Esta vertente do OCP diz que a implementação de uma classe só pode modificada para se corrigir erros. No caso de novos recursos ou mudanças nos requisitos, uma nova classe deve ser criada. Esta nova classe deve reutilizar o código da superclasse através de herança. As subclasses podem ou não ter a mesma interface da superclasse. É a chamada implementação por herança . ● “Polymorphic OCP”: nos anos 90, o OCP foi redefinido para abranger o uso de classes abstratas, onde as implementações podem ser mudadas e múltiplas implementações podem ser criadas e polimorficamente substituídas. Diferentemente da vertente de Meyer, a implementação por polimorfismo defende a herança através de classes abstratas. As especificações de interface podem ser herdadas, mas não necessariamente a implementação. Assim, a interface já existente é fechada para modificações e novas implementações devem, no mínimo, contemplar uma interface.
  • 2. Aplicação prática (implementação em diagramas de classe): Analisando primeiramente o contra-exemplo (diagrama inicial), percebemos que a classe concreta Produto é associada à classe Venda e possui os métodos FormaDePagamento e OpcaoDeCompra. Se uma nova forma de pagamento for criada, bem como uma opção de compra, é preciso que os padrões de projeto sejam obedecidos, evitando-se IFs/Switches. Então, como fazer? Através do princípio aberto-fechado, as classes foram estendidas, criando-se duas interfaces (FormasDePagamento e OpcoesDeCompra), cada qual com suas possibilidades atuais (cartão de crédito, débito online, mensal e anual) A implementação passa a ser para interface. Internet e TV a cabo, por sua vez, deixam de ser pertencer à classe Venda e passam a ter uma relação de herança com a classe Produto que, por sua vez, é uma classe abstrata. Diagrama final alterado: Usar OCP é satisfazer a condição de contrato único para uma classe. Já que esta deve ter uma e somente uma responsabilidade, só deverá ser modificada se esta responsabilidade mudar. Como desenvolvedores, sabemos que o seu comportamento inevitavelmente irá mudar. É esta a proposta do OCP: manter a estabilidade (contrato da classe), criando pontos de extensão.