Paradigma de Orientação a Objetos
No paradigma de orientação de objetos (OO), um programa que consiste na interação de objetos. Um objeto que encapsula dados e algoritmos.
Dados define um estado de um objeto. Algoritmos define o comportamento de um objeto.
Um objeto comunica com outros objetos mandando mensagens para eles. Quando um objeto recebe uma mensagem, a resposta é a execução de algoritmos, o qual pode modificar o estado.
O paradigma de orientação de objeto se diferencia do paradigma imperativo e funcional.
No paradigma imperativo e funcional, dados e algoritmos são separados, enquanto no paradigma de orientação de objetos, dados e algoritmos não são separados; eles são combinados em uma entidade, o qual é chamado de objeto.
Classes são a unidade básica do paradigma de orientação a objetos. Similarmente objetos são definições dentro de um grupo chamado de classe.
A definição de classe é utilizada para criar um objeto. Um objeto é conhecido como instância de uma classe. Uma classe consiste em instâncias de variáveis e métodos.
O valor da instância da variável de um objeto define o estado do objeto. Diferente de objetos de uma classe que mantém seus estados separadamente.
Isto é, cada objeto de uma classe tem sua própria cópia de instâncias de variáveis. O estado de um objeto é mantido privado para o objeto.
Isto é, o estado de um objeto não pode ser acessado ou modificado diretamente de fora do objeto. Métodos da classe define o comportamento dos objetos.
Um método é como um procedimento (ou sub-rotina) no paradigma procedural. Métodos podem acessar/modificar o estado do objeto. Uma mensagem é enviada ao objeto por meio da invocação de um dos seus métodos.
Suponhamos que você quer representar uma pessoa real em um programa. Você irá criar a classe Pessoa e as instâncias irão representar pessoa no seu programa.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public class Pessoa { private String nome; private String sexo; public Pessoa(String iniciaNome, String iniciaSexo) { nome = iniciaNome; sexo = iniciaSexo; } public String getNome() { return nome; } public void setNome(String novoNome) { name = novoNome; } public String getSexo() { return sexo; } } |
A classe Pessoa inclui três coisas:
- Duas instâncias de variáveis: nome e sexo
- Um construtor: Pessoa(String iniciaNome, String iniciaSexo)
- Três métodos: getNome(), setNome(String novoNome) e getSexo()
Variáveis de instâncias guardam dados de um objeto. O valor de cada instância de variável representa o valor que corresponde a propriedade do objeto.
Cada instância da classe Pessoa terá uma cópia com os dados de nome e sexo. Os valores de todas as propriedades de um objeto estão juntos (gravados nas instâncias de variáveis) coletivamente define o estado do objeto naquele momento.
No mundo real, uma pessoa possui muitas propriedades, por exemplo, nome, sexo, peso, altura, cor de cabelo, endereço, telefone etc.
Contudo, quando você modela uma pessoa do mundo real para uma classe, você irá incluir apenas algumas dessas propriedades, as que são relevantes para a modelação do sistema. Só para demonstração, vamos apenas utilizar duas propriedades, nome e sexo.
Uma classe contém a definição (ou a planta) dos objetos. Deve haver um meio de construir (criar ou instanciar) objetos de uma classe.
Um objeto precisa ter valores iniciais para essas propriedades que irão determinar o estado inicial ao criar um objeto.
Um construtor de classe é utilizado para criar um objeto da classe. Uma classe pode ter vários construtores para facilitar a criação de objetos com diferentes estados iniciais.
A classe Pessoa fornece um construtor, o qual deixa você criar um objeto especificando os valores iniciais para nome e sexo. Vamos criar dois objetos da classe Pessoa:
Pessoa jose = new Pessoa(“José de Nazaré”, “Masculino”);
Pessoa maria = new Maria(“Maria de Nazaré”, “Feminino”);
O primeiro objeto é chamado de jose com os valores iniciais “José de Nazaré” no nome e “Masculino” no sexo.
O segundo objeto é chamado de maria com os valores iniciais “Maria de Nazaré” no nome e “Feminino” no sexo.
Métodos da classe representam comportamento desses objetos. Por exemplo, no mundo real, uma pessoa tem um nome para ser chamada e suas habilidades para mostrar quando requisitada.
Objetos da classe Pessoa tem habilidades que respondem a três diferentes mensagens: getNome, setNome e getSexo.
A habilidade de um objeto responde para uma mensagem que está implementada nos métodos.
Você pode enviar uma mensagem para getName, para o objeto Pessoa e irá retornar o nome. É a mesma coisa que você falar para uma pessoa: “Qual é o seu nome?” e a pessoa responder com o nome dela.
String nomeDeJose = jose.getNome(); //envia requisição para jose
String nomeDeMaria = maria.getNome();//envia requisição para maria
A requisição setNome para o objeto Pessoa pede para mudar o nome atual para um novo nome. O código a seguir muda o nome Maria de Nazaré para Virgem Maria.
nomeDeMaria.setNome(“Virgem Maria”);
Se você agora fizer uma requisição para o getName não irá retornar Maria de Nazaré e sim Virgem Maria.
Você pode notar que o objeto Pessoa não tem a requisição setSexo. O sexo da Pessoa não pode ser mudado depois de criado.
Contudo, você tem a requisição getSexo. O que um objeto pode ou não pode responder depende da sua modelagem.
No caso do objeto Pessoa, nós decidimos que não teria a habilidade de responder a requisição setSexo.
O paradigma da orientação de objetos é muito poderoso para modelagem do mundo real para o modelo computacional.
O paradigma da orientação de objetos é natural e intuitivo, é só imaginar tudo como um objeto. Contudo, nem sempre dá certo.
Algumas vezes, a solução para um problema não está no paradigma da orientação de objetos. Nesses casos, você precisa usar o paradigma que melhor resolve o problema.
O paradigma de orientação de objetos tem uma curva de aprendizado. É muito mais do que criar objetos no seu programa.
Abstração, encapsulamento, polimorfismo e herança são alguns dos recursos importantes que o paradigma de orientação de objetos possui. Você precisa conhecer esses recursos para tirar vantagem desse paradigma.
Deixe um comentário