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
· 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ãeClasse 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.
0 comentários:
Postar um comentário
É um prazer o Mundo Conecto possuir um leitor assim como você, participativo e que não aceita ser meramente um figurante na vida e acaba exigindo seu lugar como protagonista.