Conceitos de Orientação a Objetos

18 02 2008

Gostaria de atender um pedido de um ex-aluno e falar um pouquinho sobre Orientação a Objetos (OO) e as dificuldades que enfrentei quando,  em 1998, comecei a trabalhar e estudar programação orientada a objeto.

No início, minha maior dificuldade foi romper o cordão umbilical que me ligava ao paradigma de programação/análise estruturada e deixar cair por terra algums paradigmas que tinha sobre programação e desenvolvimento de software.

Nos primeiros meses foi muito difícil fazer com que os conceitos de OO entrassem na minha cabeça de forma clara e consistente.

Tinha muitas dúvidas sobre quais comportamentos e informações deveriam estar ou não em uma determinada classe e também como é que uma classe se relacionaria com outra!

Somente consegui romper esta barreira e deixar para trás estas dúvidas com muita leitura e estudo, para ter na ponta da lingua todos os conceitos básicos de OO, mas foi principalmente observando e estudando soluções que outras pessoas conceberam é que fui conseguindo uma melhor compreensão de como tudo funciona em OO.

Pois bem! Então, como dica para quem está começando ou deseja enveredar-se por este caminho, sugiro:

  • Ler e estudar sempre (todos os dias se possível);
  • Observe e analise o que pessoas mais experientes fizeram;
  • E, questione! Não fique com dúvidas! Busque respostas para tudo que lhe causar estranheza ou desconforto.

Resolvi escrever também, além deste pequeno depoimento, de uma forma um pouco mais estruturada sobre o assunto. E por isto realizei abaixo uma rápida e breve compilação dos principais conceitos e caracterísiticas de OO.

Histórico

Orientação a Objetos (OO) surgiu na década de 60 com o intuito de ajudar a diminuir a complexidade de construção e manutenção de software, enfatizando fortemente: unidades discretas de programação lógica e reutilização de software.

Simula foi a primeira linguagem de programação a introduzir tais conceitos que ganharam grande evidência na década 90 através da linguagem C++ e pela crescente popularidade das interfaces gráficas.

Já na última década ganhou mais notoriedade devido a popularização da linguagem Java, principalmente, pelo fato desta ser multiplataforma.

O que é OO?

É um paradigma utilizado para desenvolvimento de software que baseia-se na utilização de componentes individuais denominados objetos que colaboram entre si para construir sistemas complexos.

A colaboração entre os objetos é feita através do envio de mensagens.

Analogamente, significa organizar o mundo real como uma coleção de objetos que incorporam dados e operações que manipulam estes dados.

Benefícios

  • Os modelos refletem o mundo real de maneira mais próxima;
  • São mais fáceis de entender, manter e evoluir;
  • Possibilitam a reutilização de código;
  • Redução das linhas de código programadas;
  • Auxiliam e propiciam a separação de responsabilidades;
  • Ajudam na modularização e componentização da solução;

Conceitos Gerais

  • Classe
    • Define características abstratas dos objetos;
    • Define os atributos (informações) e métodos (comportamentos) dos objetos;
    • É a “planta” que define como serão os objetos.
  • Objeto
    • Um objeto possui um estado (atributos), exibe um comportamento (operações) bem-definido e possui uma identidade única (referência).
  • Atributo
    • São características de um objeto, basicamente a estrutura de dados que vai representar a classe. Exemplos:
      1. Classe Funcionário: nome, endereço,telefone, CPF;
      2. Classe Carro: nome, marca, ano, cor;
      3. Classe Livro: autor, editora, ano.
  • Método (operações/comportamentos)
    • Define os comportamentos dos objetos.
    • Por exemplo, Spartacus é uma instância da classe Cachorro e portanto tem habilidade para latir, definida através do método latir().
    • Este comportamento somente ocorre quando o método é invocado através do objeto, no caso Spartacus.latir().
    • Programaticamente a utilização de um método deve afetar apenas um objeto em particular, pois todos cachorros podem latir, mas queremos que apenas Spartacus dê o latido.
  • Mensagem
    • É a chamada de um método de um objeto com o objetivo de ativar um determinado comportamento descrito pela classe deste objeto.
    • Uma mensagem pode ser enviada para um método de um objeto ou de uma classe, neste último caso ele é chamado de método estático.
  • Abstração
    • É operação pela qual o espírito considera separadamente coisas inseparáveis na natureza e resulta no processo mental em que as idéias estão distanciadas dos objetos por meio de uma operação intelectual que isola os generalismos teóricos dos problemas concretos, para que estes sejam resolvidos
    • Trata-se de um mecanismo essencial em disciplinas filosóficas e científicas, pois traz consigo a habilidade de concentrar nos aspectos essenciais de um contexto qualquer, ignorando características menos importantes ou acidentais.
    • Em OO, uma classe é uma abstração de entidades existentes no domínio de um sistema de software.

Caracterísiticas

  • Encapsulamento
    • Consiste na separação de aspectos internos e externos de um objeto.
    • É um mecanismo amplamente utilizado para impedir o acesso direto ao estado de um objeto (seus atributos), disponibilizando externamente apenas os métodos que alteram estes estados.
    • Por exemplo: você não precisa conhecer os detalhes dos circuitos de um telefone para utilizá-lo, pois a carcaça do telefone encapsula esses detalhes, provendo a você uma interface mais amigável (os botões, o monofone e os sinais de tom).
  • Herança
    • Herança é um mecanismo da OO que permite criar novas classes a partir de classes já existentes, aproveitando-se das características existentes na classe a ser extendida.
    • Este mecanismo promove reuso e reaproveitamento de código além de possibilitar a criação de classes derivadas (subclasses) a partir de classes bases (superclasses).
    • As subclasses são mais especializadas do que as suas superclasses, mais genéricas, e todas herdam todas as características de suas superclasses, como seus atributos e métodos.
  • Polimorfismo
    • É a capacidade de um objeto ser referenciado de várias formas o que quer dizer que a referência ao objeto se transforma, ou fica se transformando ao longo do tempo.
    • Vale ressaltar que um objeto nasce e morre sendo de um mesmo tipo e o que muda ou transforma-se é a maneira de como nos referenciamos a ele. Por exemplo: um gerente financeiro pode ser tratado (referenciado) como gerente financeiro, gerente ou funcionário quando estamos em um contexto de uma empresa. Se ampliarmos este contexto também podemos dizer que um gerente financeiro pode ser tratado (referenciado) como pessoa física, por exemplo.

Espero que este material possa ajudá-lo a entrar no mundo OO com pé direito.

Sucesso e boa sorte na jornada!

 


Ações

Information

5 responses

19 02 2008
klauddius

Olá meu caro amigo, como está?

Posso definir seu post como excepcional. Define de modo claro e objetivo os conceitos de orientação a objetos que muitos no mercado não conseguem explicar com tanta clareza.

Parabéns pelo post..

[]´s

30 09 2008
nnnn

nabo

17 11 2008
Xandy

Muito bom bele

20 03 2010
Anderson Alves de Oliveira

Cara achei seu site bem explicativo e de muita ajuda eu apenas nao consegui entender direito a parte da abstração
poderia defina-la melhor?

Obrigado

8 06 2011
Anônimo

muito bom…

Deixe um comentário