Aula 2 – Programação Orientada à Objetos
Esta aula tem como objetivo apresentar os benefícios, os componentes e as técnicas da Programação Orientada à Objetos (POO).
2.1 – Benefícios
Dentre os benefícios da POO podemos indicar o aumento da produtividade e a extensão do ciclo de vida do projeto.
2.1.1 – Produtividade
Conforme se estende o tempo de vida do projeto é cada vez mais notável como a produtividade aumenta. Dentre as principais características da POO para aumentar a produtividade podemos citar:
2.1.1.1 – Reutilização de código
Com certeza a principal vantagem da POO é poder beneficiar-se da reutilização de código, uma vez escrito nunca será reescrito, no máximo modificado com o polimorfismo (explicação ainda nessa aula).
2.1.1.2 – Agregação de módulos prontos
Módulos podem ser agregados ao longo do projeto, mesmo tendo seu desenvolvimento separado do mesmo, simplesmente importamos suas funcionalidades e os utilizamos como se fossem implementados no mesmo.
2.1.1.3 – Servir de base à modelagem da base de dados
É considerada outra vantagem da programação orientada à objetos, tido que as modelagens são similares hoje em dia muitos projetos simplesmente persistem os objetos na base de dados.
2.1.1.4 – Menor custo de desenvolvimento
Como pudemos notar com essas técnicas podemos desenvolver cada vez mais por cada vez menos. Ao longo do tempo, muitos módulos já prontos serão agregados à novos projetos e muito código já escrito será reutilizado, aumentando assim a produtividade com o custo de desenvolvimento cada vez menor.
2.1.2 – Ciclo de vida maior
A POO oferece também técnicas para aumentar o ciclo de vida do projeto, dentre elas descanse:
2.1.2.1 – Expansividade
Com o poder de agregar módulos prontos ao projeto, torna-se notável o quesito de expansividade do mesmo, tornando assim maior seu ciclo de vida.
2.1.2.2 – Manutenção
Aqui está uma das maiores, se não a maior vantagem da POO, todos sabemos que os maiores custos de um projeto estão diretamente ligados com os custos de manutenção, mas na POO isso pode mudar drasticamente levando-se em conta que todas as técnicas da mesma se preocupam com esse critério.
2.2 – Componentes
Abaixo serão apresentadas os componentes que a POO implementa, com seus conceitos e alguns exemplos simples para melhor assimilação.
2.2.1 – Classe
Primeiramente vamos definir o conceito de Classe: generalização de atributos e ações de um grupo de objetos. Confuso não?
Por isso vamos fazer uma analogia de que uma classe nada mais é do que uma receita com os ingredientes e o modo de preparo para se fazer um bolo. Quando o bolo se torna feito, então teremos um Objeto. Outro exemplo de classe bastante usado é o de uma Pessoa, onde os atributos serão suas características e os métodos suas ações.
2.2.1.1 – Atributo
Tem-se como atributo uma característica da classe, lugar onde o objeto vai guardar informação. Seguindo a idéia da receita, são os ingredientes. Já na pessoa temos, por exemplo, nome, data de nascimento e sexo.
2.2.1.2 – Método
São as ações realizadas pela classe, o modo de preparo do bolo. Por exemplo, a classe pessoa temos os métodos andar, falar, sorrir.
2.2.2 – Objeto
É a instancia de uma classe, o bolo pronto. Outro exemplo bastante usado é o de uma pessoa, onde pessoa seria a classe e João o objeto.
2.2.3 – Interface
É um modelo para a classe. Voltando a nossa analogia da receita, poderíamos dizer que é uma receita sem os ingredientes, ou seja, uma classe somente com as declarações (nomes) dos métodos, que por sua vez serão implementados nas classes.
2.3 – Técnicas
Por fim as técnicas que propiciam à POO todos os seus benefícios.
2.3.1 – Herança
Herança é a capacidade de uma classe herdar as funcionalidades de outra. Vamos tomar como exemplo um sistema bancário, temos as classes Pessoa e Cliente.
O Cliente tem as mesmas funcionalidades de Pessoa, porém com algumas funcionalidades a mais. Sendo assim ao invés de reescrevermos todo o código de Pessoa em Cliente, simplesmente herdamos suas funcionalidades e poderemos usá-las normalmente, como se pertencessem à Cliente.
2.3.2 – Polimorfismo
Polimorfismo é a capacidade de métodos com mesmo nome tem de realizar rotinas diferentes devido à sua assinatura. Por exemplo, alguns métodos getEndereco da classe Pessoa.
Pessoa.getEndereco(Rua);
Pessoa.getEndereco(Rua, Numero);
Pessoa.getEndereco(Rua, Numero, Bairro);
Os três métodos têm o mesmo nome, porém com assinaturas diferentes, sendo assim quando chamarmos o método Pessoa.getEndereco(assinatura), a Java interpretará qual método chamar devido à sua assinatura (parâmetros).
2.3.3 – Encapsulamento
Encapsulamente consiste básicametne em restringir a visibilidade dos atributos para privado, ou seja, somente a classe poderá ver seus atributos, não sendo acessíveis à classes externas, as mesmas deverão somente acessar os métodos.
OBS: PROXIMA AULA SEMANA QUE VEM!!!