Programação Desorientada a Objetos

Origem: Desciclopédia, a enciclopédia livre de conteúdo.
Ir para navegação Ir para pesquisar
Menu canto windows.gif
Atenção!
Erro crítico

Você caiu em uma cilada. Um vírus está sendo baixado para seu computador enquanto você está lendo isto.

Carregando...


OK


A Programação Desorientada a Objetos estabelece um novo paradigma de desenvolvimento que vem substituir a já tradicional POO (Programação Orientada a Objetos).

Através deste novo paradigma os desenvolvedores poderão atingir níveis da Força nunca imaginados antes, podendo tornar-se um novo Mestre Yoda dentre seus pares.

Os exemplos aqui relacionados estarão inicialmente em C#, mas o conceito poderá ser extendido para qualquer outra linguagem.

Conceitos[editar]

Encapsulamento do Encapsulado[editar]

O típico programador de PDO.

Através desta técnica é possível encapsular funcionalidades já encapsuladas, como demostrado no exemplo abaixo:

       public class NullControl : System.Web.UI.WebControls.WebControl
       {
          public NullControl(){}
       }

Instanciando o Nulo[editar]

Este conceito extremamente complexo pode ser observado no trecho de código exemplificado abaixo que utiliza o conceito anterior, no qual foi criado um objeto do tipo NullControl, que deve ser instanciado para posteriormente ser tratado como Nulo.

       public class MinhaPagina: Page{
       ...
          WebControl IPagina.botao
          {
            get
            {
               return new NullControl();
            }
          }
       }

Inteligência Artificial[editar]

Para atividades simples, como ocultar o botão de uma página, se você não tem inteligência suficiente para isso, crie métodos que sejam capazes de fazer isso por você. Os comentários são muito importantes para que o método funcione corretamente.

 /// <summary>
 /// Provê a implementação dos métodos de IFormatterDecorator, implementando a chamada dos
 /// decorators em cascata. Os decorators possuem a inteligência de quando devem ser aplicados
 /// e esta classe implementa no método Execute, além da execução da operação quando
 /// necessária, a delegação para os objetos decorados.
 /// </summary>
 public abstract class AbstractFormatterDecorator : IFormatterDecorator
 {
   protected readonly IPaginaDeDetalhes pagina;
   protected readonly AbstractFormatterDecorator decoratedObject;
 
   protected AbstractFormatterDecorator(AbstractFormatterDecorator decoratedObject,
       IPaginaDeDetalhes pagina)
   {
     this.pagina = pagina;
     this.decoratedObject = decoratedObject;
   }
   /// <summary>
   /// Execução da configuração propriamente dita
   /// </summary>
   public void Executar()
   {
     if (ConfiguradorDeveSerAplicado)
     {
       ExecutarConfiguracaoDaPagina();
     }
     if (decoratedObject != null)
     {
       decoratedObject.Executar();
     }
   }
   /// <summary>
   /// Método que deve ser implementado nas classes concretas, responsável
   /// por realizar a configuração que a classe se destina a realizar.
   /// </summary>
   protected abstract void ExecutarConfiguracaoDaPagina();
 
   /// <summary>
   /// Verifica o estado da página pra definir se a execução do decoratedObject
   /// deve ou não ocorrer
   /// </summary>
   public abstract bool ConfiguradorDeveSerAplicado{get;}
 }

Aplicação da técnica[editar]

A aplicação da técnica da IA é muito simples, como podemos observar o trecho de código abaixo utilizado para alterar a propriedade visible de um único controle.

   internal class ConfiguracaoDoBotaoDeItem : AbstractFormatterDecorator
   {
      public ConfiguracaoDoBotaoDeItem(AbstractFormatterDecorator decoratedObject, 
                          IPaginaDeDetalhes pagina) : base(decoratedObject, pagina)
      {
      }
      protected override void ExecutarConfiguracaoDaPagina()
      {
         pagina.buttonItens.Visible = pagina.buttonItens.Visible && (
           EstaNesseStatus(Status.Valores.StatusABC) ||
           EstaNesseStatus(Status.Valores.StatusCBA));
      }
      public override bool ConfiguradorDeveSerAplicado
      {
         get{
             return true;
            }
      }

Nomenclatura[editar]

Texto a negrito[[Título do link== Multimédia:Texto do cabeçalho--~~~~Inserir texto não-formatado aqui---- ==]]===Multilanguage===

Procure desenvolver seus métodos utilizando várias línguas, facilitando assim o entendimento para programadores de várias nacionalidades:

  public class FuncionariosFinder : Miscellanea{
     public FuncionariosFinder(){}
     public string ListarByID(int ID){
       ...
     }	
     public string ListarByAno(int Ano){
       ...
     }	
  }

Nomes Famosos[editar]

Utilize nomes fáceis de serem identificados, como por exemplo do seu conjunto favorito de ? Rock ?, observar no código abaixo exemplo de melhores práticas:

    DSRelatorio.InicializaRow[] spiceGirls = (DSRelatorio.InicializaRow[]) 
                                  ds.Inicializa.Select("CodigoInicializacao<>0");
    codigoFuncionario = spiceGirls[0].CodigoFuncionario;

Frases de Famosos Desorientadores[editar]

Cquote1.svg Você já criou seu próprio TraceListener? Cquote2.svg
Mestre Yoda, ensinando humildade a seus pupilos

Cquote1.svg Põe no CUkie do cliente! Cquote2.svg
Martha Suplicy, mais perdida que batata em salada de fruta

Cquote1.svg Eu e o PDO demos um roundhouse kick na Orientação a Objetos! Cquote2.svg
Chuck Norris, sobre PDO

Cquote1.svg Em 24horas destruiremos a POO! Cquote2.svg
Jack Bauer, sobre PDO

Cquote1.svg Copia e cola, não tenta entender que dá zica! Cquote2.svg
Programador POG após analisar trecho de código PDO

Cquote1.svg Na verdade a questão é o seguinte: 70% dos casos, o coiso, sabe? tem NP fatorial de complexidade... Entendeu? Tá? Cquote2.svg
Cascão Bundman explicando o POGrama que criou para mandar email

Cquote1.svg Devido a quantidade de configurações necessárias, estamos reproduzindo o sistema em ambiente de reprodução com efeito para testes Cquote2.svg
Cliente, após trancar os devs na jaula para criação de sistemas em cativeiro

Ver também[editar]