Pesquisar este blog

quarta-feira, 18 de setembro de 2013

O que é Programação Orientada a Objetos (OOP)?

   A Programação Orientada a Objetos, ou OOP (Objetct-Oriented Programming) pode ser considerada uma extensão quase natural da Programação Modular. A OOP foi concebida no início da década de 70, a primeira linguagem de programação a implementar sistematicamente os conceitos de OOP foi a linguagem SIMULA-68, em seguida surgiu a linguagem Smaltalk - criada por Xerox, que pode ser considerada a linguagem que popularizou e incentivou o emprego da OOP.
   Se consideramos a Orientação ao Objeto como um novo paradigma de desenho de software, devemos considerar, também, uma nova maneira de pensar, porque apesar de a escrita do código continuar sendo procedural, alguns conceitos mudam radicalmente: a estruturação e o modelo computacional.        
    Fundamentalmente o que se deseja com esta metodologia são basicamente duas características: reutilização de código e modularidade de escrita; e nisto a OOP é imbatível quando comparada com as metodologias antigas. Em termos de modelo computacional podemos dizer que enquanto as metodologias tradicionais utilizam o conceito de um processador, uma memória e dispositivos de I/O para processar, armazenar e exibir as informações, a OOP emprega um conceito mais real, mais concreto, que é o de Objeto.
   Uma definição para objeto seria a de um "ente" ativo dotado de certas características que o tornam "inteligente", a ponto de tomar certas decisões quando devidamente solicitado. Outra definição mais formal para objeto poderia ser: uma unidade dinâmica, composta por um estado interno privativo (estrutura de dados) e um comportamento (conjunto de operações). 
   Mas para ser considerada um linguagem Orientada a Objetos a linguagem tem que atender a quatro conceitos, que são: Abstração, Encapsulamento, Herança, Polimorfismo.
   Vamos ver um pouco sobre cada um desses conceitos:


   Abstração: é considerada como a habilidade de modelar características do mundo real do problema que o programador esteja tentando resolver. Nesta etapa "imaginamos" o nosso objetivo, aqui definimos a identidade, as propriedades e seus métodos (eventos).
   A Identidade é o nome do objeto a ser criado.
   As Propriedade são as características do objeto.
   Os Métodos são os eventos, as ações que esse objeto irá executar.
   É a representação de algo real, na abstração analisamos o que é relevante conter em um objeto.

   Encapsulamento: é a técnica de proteger as propriedades e métodos de um objeto, estas informações são acessadas apenas internamente pelo objeto. Exemplo: quando ligamos a televisão não sabemos o que ocorre por trás do botão "ligar", podemos dizer que os métodos que ligam efetivamente a televisão estão encapsulados.
   Em C# e VB.NET por exemplo, encapsulamos uma propriedade ou método através do modificador de acesso Private, exemplo de uma propriedade encapsulada:  private string_nome; 

   Herança: é um mecanismo que, se for bem empregado, permite altos graus de reutilização de código. Do ponto de vista prático, pode ser entendido como sendo um conjunto de instâncias criadas a partir de um outro conjunto de instâncias com características semelhantes, e os elementos desse subconjunto herdam todas as características do conjunto original. A reutilização de códigos nas linguagens orientada a objetos é uma característica que otimiza o desenvolvimento de um aplicativo tanto em economia de tempo, quanto em número de linhas de código.
   Por exemplo, podemos criar uma classe com todas as características dos animais mamíferos. E uma outra classe para felinos que herda as características dos mamíferos, já que todo felino é um mamífero. Se precisarmos cria uma classe para os caninos, esta também herda as características dos mamíferos, já que todo canino é um mamífero. Assim os códigos comuns às classes Canino e Felinos só seram escritas uma vez, economizando códigos e tempo de desenvolvimento.

   Polimorfismo: é um código que pode ser aplicado à várias classes de objetos. Reutilizar os códigos sem dúvida é importante, mas em alguns casos precisamos que algum método já criado execute uma função um pouco diferente em determina objeto.
   Exemplo: Temos uma classe "MOTOR" que tem o método "Ligar", agora criamos mais duas classes "MotorELÉTRICO" e "MotorEXPLOSÃO", que herdam da classe MOTOR. As duas classes possuem o evento "Ligar", mas para cada motor o processo para iniciar o funcionamento é diferente, já que um funciona com gasolina e outro com eletricidade, então o método "Ligar" é polimórfico, nas duas classes seu objetivo é ligar, mas seu funcionamento interno é diferente.
   Quando criamos estas duas classes filhas (MotorELÉTRICO e MotorEXPLOSÃO) adaptamos o método "Ligar" herdado da classe pai (MOTOR).

   A conclusão de tudo é que o paradigma de Programação Orientada a Objetos possibilita a criação de sistemas que parecem teias de aranhas, onde cada nó dessa teia é uma classe, mas cada classe pode ser aproveitada para a composição de outros nós da teia, bem como a reutilização desses nós em outros sistemas, diminuindo drasticamente o tempo de codificação e depuração de códigos.
 
    
 

Nenhum comentário:

Postar um comentário