Tecnologia do Blogger.

Localizar

quinta-feira, 16 de maio de 2013

Conceito básico de Orientação a Objetos


Introdução

Neste artigo vou dar uma pincelada no conceito básico de Orientação a Objetos (OO). E para isso será descrito da forma mais simples possível o conceito para os termos mais conhecidos em Programação Orientada a Objetos (POO ou em Inglês OOP).

·         Objeto
·         Mensagem
·         Classe
·         Abstração
·         Encapsulamento
·         Herança
·         Polimorfismo
·         Interface

Antes de começar acredito que seja importante frisar o que NÃO é POO.

·        NÃO é decomposição funcional do código onde o programador divide o código em várias funções pequenas gerando o famoso “ninho de gato” ficando impossível dar manutenção e acabando criando muitos bugs no sistema.
·        NÃO é modularização de código, que apesar de necessário e fazer com que o código fique organizado pode dificultar a manutenção do sistema quando não bem feito.
·   NÃO é criação desordenada de classes gerando repetição de código e dificultando a depuração do sistema.
A POO permite criar sistemas componentizados diminuindo a quantidade de código escrito facilitando o treinamento de novos programadores evitando erros de programação aumentando o reaproveitamento de código e criando sistemas mais limpos e estáveis.
A IDE de programação Borland Delhi ficou muito conhecida no meio dos profissionais de TI por suas características de POO contendo uma vasta biblioteca de componentes nativas e online que nada mais eram do que objetos a serem utilizados na construção de seu programa.
Hoje nas empresas de Softwarehouse ainda se encontram com grande frequência o famoso arquivo de rotinas gerais o “Util ou Geral” que no decorrer do tempo com o crescimento do sistema acabam ficando grande demais e unido a falta de documentação comum nas empresas os desenvolvedores acabam não encontrando aquelas rotinas que são usadas com menos frequência e devido a pressão e urgência dos trabalhos eles recriam estas rotinas duplicando o código desnecessariamente.
Usando uma classe no lugar deste arquivo a primeira tendência do desenvolvedor seria procurar o nome do método que se encaixe bem ao que ele precisa, mas para isso é preciso também um bom padrão de nomenclatura de código.
Então dentre as vantagens de uso de POO podemos observar:

·         Aumento de produtividade
·         Reutilização de código
·         Redução da quantidade de código escrito
·         Componentização da construção da aplicação
·         Escalabilidade
·         Facilidade de manutenção
·         Redução da curva de aprendizado do programador

Objeto

Quando estava preparando este texto me inspirando em outras literaturas observei que os autores usam várias formas para descrever um objeto. Comparam o objeto a um ônibus ao corpo humano e etc. Eu usarei uma forma que acredito ser mais prática e direta:
Um objeto é igual a uma super variável que podendo armazenar dados e também efetuar operações e requisições sobre si e outros objetos.
Logo um programa nada mais é do que uma coleção de objetos trabalhando em forma harmônica enviando mensagens entre si.

Mensagem

É o processo de comunicação entre dois ou mais objetos sendo que ao objeto executar uma ação sobre outro objeto este primeiro envia uma mensagem ao segundo.
Em uma mensagem temos:

1.       Objeto ao qual a mensagem é enviada
2.       Nome do método que está sendo solicitado ao objeto
3.       Parâmetros que o método recebe ao ser executado

Classe

É a descrição de todas as características existentes em um objeto, é na classe que será feita toda a programação dos métodos e variáveis que estarão disponíveis em um objeto quando este estiver instanciado.
A classe é o tipo do objeto é lendo a classe que poderemos saber o que o objeto é capaz de fazer. Podemos dizer que se tivermos o objeto carro a classe seria seu manual de instruções.
Temos então que todo objeto é uma instancia de uma classe.

Abstração

É a definição base da classe é onde tudo começa, é como o projeto da classe. Em uma abstração não se instancia um objeto de forma direta.
Em exemplo pratico poderíamos compara à abstração a conta de um banco. Em um banco temos Conta Corrente, Conta Poupança, Conta Salário. Todas estas contas trabalham de forma diferenciada em sua tributação e tarifação para o usuário, cada qual contendo sua formula especifica. No entanto todas estas contas tem uma característica similar ao fato de guardarem o dinheiro de uma pessoa. Esta similaridade base que todas as contas possuem é a abstração.

Encapsulamento

É a capacidade de esconder partes dadas como privadas do código de forma que possam ser usadas somente localmente. Você teria conceitualmente neste caso alguns níveis de encapsulamento: Local ao Método, Local à Abstração, Local à Classe e Local ao Programa.
Normalmente usa-se como notação de código o nome “private” para se efetuar o encapsulamento.
Podem ser encapsulados no código:

·         Variáveis ou Propriedades
·         Métodos
·         Classes

Herança

É a capacidade de se criar uma classe a partir de uma classe já existente. Este mecanismo faz com que a classe criada possua todas as características não encapsuladas da classe ao qual está abstraindo promovendo grande reutilização do código já existente.
A nova classe originada pode ser chamada de subclasse enquanto a classe do qual as características foram herdadas pode ser chamada de superclasse.
As superclasses tendem a ser mais genéricas contendo os métodos e variáveis comuns enquanto as subclasses serão mais especializadas.
Em algumas linguagens de programação existe a possibilidade de herança múltipla, onde a subclasse irá adquirir as características de mais de uma classe de forma simultânea.
Na maior parte das linguagens de programação não iremos encontrar herança múltipla devido ao risco encontrado nesta operação.

Classe Base = Supertipo = Superclasse = Classe Pai = Classe Mãe
Classe Derivada = Subtipo = Subclasse = Classe Filha

Polimorfismo

É a capacidade que um objeto e ou um método tem de se comportar de maneira diferente ao receber uma mesma mensagem.
O polimorfismo é feito a partir da herança, nas classes onde é feita a reescrita (Overriding) de métodos da superclasse na subclasse.

Interface

Pode ser considerado o nível mais baixo da abstração. A interface não chega a ser uma classe, mas define um conjunto de variáveis, métodos e eventos a serem usados na classe.
Em uma interface não será encontrada a implementação de código para os métodos, propriedades e eventos. Nela teremos portanto uma facilidade maior de se mapear as classes que a usam facilitando também o uso de polimorfismo
No entanto poderemos falar de interface de forma mais detalhada em um outro artigo dando exemplos de seu uso. Terei prazer em escrever este artigo se assim o pessoal quiser.

Sobrecarga ou Overloading

É a capacidade que a classe possui de conter dois ou mais métodos ou propriedades com o mesmo nome. Apesar da sobrecarga não ser um recurso exclusivo da OO não podia deixar de pelo menos tocar no assunto.

Conclusão

A OO certamente é a solução para um código bem escrito assim como um carro é a solução para o deslocamento mais rápido. No entanto assim como o carro precisa de um bom motorista para seu deslocamento a OO precisa de um bom programador para sua construção.

Dúvidas e comentários podem ficar a vontade para postar.


0 comentários: