Ir para conteúdo

Felipe Moraes

Posts Recomendados

Olá pessoal, boa noite.

 

Neste artigo, explicarei o que é o paradigma de Orientação a Objetos(OO) que tanto comentam, suas características e quais são suas vantagens em relação ao estilo procedural.

 

Neste artigo, vou me focar nos conceitos, que são fundamentais para um bom desenvolvimento OO.

Para ser um bom programador, precisamos entender além de linhas de códigos. Precisamos entender o conceito de programação, a motivação, o porque de tudo aquilo, e claro, saber aplicar esses conceitos no dia-a-dia.

 

 

Primeiramente, o que vem à sua mente quando ouve falar sobre Paradigmas de Desenvolvimento ?

 

Um paradigma nada mais é do que a forma de estrutura que você vai aplicar para programar e executar seu software. Isto engloba conceitos e abstrações (como objetos, variáveis, funções, fluxo de dados), e define uma diretriz que o programador vai seguir durante o desenvolvimento.

 

 

Atualmente, temos duas vertentes principais, são elas a Programação Procedural e Orientado a Objetos, como veremos a seguir:

 

 

 

 

  • Programação Procedural

 

A programação procedural, como o própio nome já nos adianta, se baseia na chamada a procedimentos(procedures call), isto é, chamadas à funções, rotinas, sub-rotinas, que possuem um conjunto de passos a serem executados pelo sistema.

Um sistema desenvolvido utilizando esse paradigma, realiza a troca de mensagens entre as diferentes funções existentes, e possui uma grande utilização de algoritmos.

A modelagem de um sistema procedural se dá pela utilização de fluxogramas, definindo um caminho lógico pelo sistema.

 

Algumas linguagens que utilizam esse método:

  • C
  • Pascal
  • PHP
  • Visual Basic
  • Lua
  • C++
  • COBOL

 

Entretanto, um dos grandes problemas, está na dificuldade da manutenibilidade do código, isto é, em como será, no futuro, realizado manutenções, escalável, etc.

 

Vejamos um exemplo muito simples que explica isso:

 

 

 


 

 

 

Suponhamos que eu tenha em meu código, uma função que valida o cpf do cliente (validarCPF(string valor)). Após recebermos qualquer dado do cliente, será necessário que chamemos essa função, correto ?

 

Vamos supor que, eu tenha 10 formulários em meu sistema que manipula o CPF. Todos eles devem chamar explicítamente a função validarCPF().

Agora, vamos supor que meu sistema aumentou o número de formulários para 50. Será necessário que em cada formulário

eu faça uma chamada explícita à essa função. Isto significa, adicionar mais estruturas condicionais, mais linhas de código, pelo menos 50 vezes.

 

E se eu me esquecer de validar o cpf em algum formulário ?

 

E se por um acaso, mudar o programador dos formulários ? Precisaríamos sempre avisar que ele precisa fazer essa validação a cada formulário novo que ele criar.

 

E se quisermos adicionar uma função que também verifique se o cliente é maior de idade ? Teríamos que espalhar mais essa função por todo o código.

 

E quando, por algum motivo, precisamos alterar a função. Por exemplo, agora minha função, além de receber o valor do cpf, vai receber também o Estado do portador, ficando validarCPF(string valor, string estado).

UAU!

Precisaríamos alterar 10, 50 vezes ou mais, cada linha de código para adaptarmos a essa mudança. Um tempo gasto, onde poderíamos estar criando novas funcionalidades.

 

 

 

 

 

 

"O problema do paradigma procedural é que não existe uma forma simples de criar conexão forte entre dados e funcionalidades"

 

 

 

Para solucionar esse e muitos outros tipos de problemas, foi elaborado o conceito de linguagem orientada a objetos, como veremos a seguir:

 

  • Programação Orientada a Objetos (POO)

 

Neste modelo, o programa é composto por objetos, possuindo propiedades (atributos) e que executa ações (métodos).

Todas as funcionalidades e atributos de cada entidade do sistema são armazenadas em classes que representam esta entidade.

Com isso, as operações(sinônimo de funções) e as responsabilidades são centralizadas em suas devidas classes, não ficando mais espalhadas pelo código.

A comunicação não se dá mais por chamadas a funções como no modelo procedural, mas sim, entre a troca de mensagens entre os objetos.

Objetos são dependentes de outros objetos para a troca de mensagens.

 

 

Para o exemplo anterior, bastaríamos criar uma classe CPF, por exemplo, onde teríamos o método validarCPF().

Um objeto apenas seria referenciado por todos os outros formulários, havendo apenas a troca de mensagens.

Em caso de mudança no código, precisaria apenas alterar na minha classe CPF, não sendo necessário fazer alterações em cada formulário unitariamente.

 

Para a modelagem de um sistema orientado a objetos, normalmente se utiliza a UML (Unified Modeling Language).

 

Algumas linguagens que utilizam:

  • Java
  • C++
  • C#
  • Python
  • PHP (a partir da versão 4 houve uma adaptação,mas não a tornou totalmente OO)

 

 

Vou relatar agora alguns conceitos essenciais, que todo Programador OO precisa saber:

  • Classe - representa um conjunto de objetos com características afins. Define o que o objeto deve ter e como se comportar.Se altera em tempo de compilação.
  • Ex: Classe Pessoa.

 

  • Objeto - É a instancia de uma classe. É o objeto carregado na memória, capaz de executar métodos. Possui um ciclo de vida. Vemos ele em ação em tempo de execução.
  • Exemplo: Como um objeto da classe Pessoa, podemos ter: o objeto Maria, o objeto Joao, etc.

 

  • Atributo - Representa uma característica do objeto.
  • Exemplo: Temos uma classe Pessoa, cujo um atributo pode ser nome.

 

  • Método - Representa uma ação de determinado objeto.
  • Exemplo: Na classe Pessoa, temos o método andar.

 

  • Mensagem - É quando se chama um método de um determinado objeto.
  • Exemplo: Uma classe Pessoa chama o método ligar carro de um outro objeto chamado Carro.
  • Herança - Nos permite extender as funcionalidades de outra classe, reaproveitando código. Utiliza-se o conceito de super-classe e sub-classe.
  • Temos uma super-classe Pessoa com o atributo nome, onde podemos extender em 2 sub-classes: Pessoa Física e Pessoa Jurídica. Essas últimas herdam o atributo nome automaticamente.

 

  • Encapsulamento - Mecanismo utilizado como proteção da classe, definindo que apenas a própia classe pode conhecer o estado de seus atributos e altera-los. Classes externas modificam esses valores através de métodos denominados getters(obtem informações de atributos) e setters(modificam valores de atributos)
  • Não precisamos conhecer internamente como um smartphone realiza chamadas. Apenas queremos fazer ligações.

 

  • Polimorfismo - Vem do grego (poli = muitas, morphos = formas). Quando duas ou mais classes distintas herdadas de uma mesma classe abstrata, possuem métodos de mesmo nome, sendo que cada uma vai executar o mesmo método de forma especializada, isto é, de forma individual
  • Exemplo: Super-classe Animal que possui um método emitir som. Extendemos através do conceito de herança em duas sub-classes Cachorro e Gato. Tanto cachorro como gato herdam o método emitir som, sendo que cada um em sua implementação, vão ter comportamentos diferentes. Isto é, ao chamar o método emitir som de um objeto cachorro, ele vai latir. Ao chamar o método emitir som de um objeto gato ele vai miar.

 

  • Abstração - Esta na capacidade do analista/desenvolvedor em abstrair conceitos/entidades do mundo-real (mundo físico) e transforma-los em objetos no mundo lógico.
  • Exemplo: Representar uma pessoa e seus comportamentos através de uma classe chamada Pessoa.

 

  • Interface - É um contrato realizado entre classes. Quando uma classe implementa uma interface, ela se compromete a executar os métodos declarados naquela interface.

 

 

Bem pessoal, espero que tenham gostado desse tutorial. Qualquer dúvida ou correção, podem postar nos comentários por favor.

 

 

Abraços e até a próxima!

Editado por pekeboi
Link para o comentário
Compartilhar em outros sites

  • 10 months later...
×
×
  • Criar Novo...