Do que se trata a POO - Programação Orientada a Objetos
A Programação Orientada a Objetos é um paradigma de programação em que os problemas computacionais são resolvidos através da modelagem e a criação de objetos, e a troca de mensagens entre eles. Através da abstração de objetos e problemas do mundo real é possível modelar classes de forma com que complexos sistemas possam ser construídos de forma mais robusta e confiável do que outros paradigmas de programação.
Se você ainda não compreende o que são classes e objetos, não se preocupe. Leia este Post e mostre a si mesmo que você sabe mais sobre classes e objetos do que imagina.
Objetos são a chave da POO
Você está neste exato momento olhando para a tela do seu monitor. Observe todos os detalhes que nele existem: botões, letras e adesivos; e logo em seguida retome sua leitura.
Tenho certeza que seu monitor possui características próprias e nele podemos fazer algumas ações. São algumas características do monitor: cor, largura, altura, marca, modelo, etc. E são algumas ações: ligar, desligar, reajustar tamanho de tela, desmagnetizar, etc. Desde já o seu monitor é um objeto que possui as características e ações descritas acima.
Agora vamos analisar uma lâmpada: ela possui basicamente uma voltagem específica e um estado - que pode ser "ligado" ou "desligado". Através dela as seguintes ações podem ser feitas: ligar e desligar. A lâmpada também é um objeto. Se imaginarmos ela acesa, seu estado será "ligado". E caso ela esteja apagada, seu estado será "desligado". Então note que a voltagem específica e o estado da lâmpada também são características - como no exemplo anterior, mas essas características também podem ser chamadas de estados.
Entendemos até agora que um objeto possui características/estados e ações.
Em termos de Orientação a Objetos não há diferenças técnicas entre os termos característica e estado. Porém, entre os programadores o termo atributo é o mais comumente utilizado.
Em termos de Orientação a Objetos, para designar as ações de um objeto é comum também que se utilize o termo comportamento, mas o termo método é mais freqüentemente utilizado.
Então aprendemos até agora que:
* Um objeto é composto por características e ações;
* característica = estado = atributo
* ação = comportamento = método
Logo, a seguinte sentença também é verdadeira:
* Um objeto é composto por atributos e métodos
Java é uma linguagem Orientada a Objetos
Como uma boa linguagem moderna, Java é uma linguagem Orientada a Objetos. Isto significa dizer que todo nosso ciclo de programação nesta linguagem envolverá manipulação de objetos. Como já dito anteriormente, um objeto Java é composto por atributos e métodos. Posteriormente aprenderemos a criar e manipular objetos em código Java.
Entendendo o que são Classes
Cada objeto presente em sua volta teve sua origem através de um modelo específico. No caso de uma caneta de marca, por exemplo, existem várias canetas iguais a ela. Outras da mesma marca são quase idênticas, mudando apenas a cor de sua tinta. Então, você já parou para pensar sobre como inúmeras canetas da mesma marca podem ser tão semelhantes? Elas seguem um modelo de criação em comum que especifica quantos centímetros as canetas terão; a moldagem e a cor da tampa; se a tinta será azul, vermelha ou preta, etc.
Em Orientação a Objetos, este "modelo de criação" se chama classe, e os modelos que são concretizados chamam-se objetos.
Imagine uma classe como um molde, um projeto. Uma classe não possui uma forma "concreta", digamos assim. Os objetos sim são concretos. Não existe objeto sem classe, pois uma classe é um modelo para a criação de um ou vários objetos.
Entendendo atributos e métodos com 3 classes:
CLASSE 1 - Mouse
É sempre um ótimo exercício abstrair atributos e métodos de objetos do "mundo real". Neste primeiro exemplo escolhemos o objeto Mouse. Obviamente não especificaremos absolutamente todos os seus atributos e métodos, mas apenas os principais, sem detalhes aprofundados.
Atributos:
* marca
* cor
* modelo
* botão esquerdo
* botão direito
* botão central
Métodos:
* mover cursor
* clicar com botão esquerdo
* clicar com botão direito
* clicar com botão central
* segurar botão esquerdo
* segurar botão direito
* soltar botão esquerdo
* soltar botão direito
-- comentário --
Agora, vários objetos derivados da classe Mouse podem ser criados. Todos os objetos derivados de Mouse terão: uma marca, uma cor, um modelo, um botão esquerdo, um botão direito e um botão central, sem exceções.
Todas as operações básicas que um mouse faria estão listadas como métodos da classe Mouse. Você precisa ter em mente que, na lógica orientada a objetos você precisa pensar da seguinte maneira: o que acontece quando o método "mover cursor" for chamado? Se o usuário mover o mouse para frente, o cursor do mouse deve ir para cima. Se o usuário mover o mouse para esquerda, o cursor do mouse deve ir para esquerda. O mesmo tipo de pensamento deve ocorrer não só com os métodos de movimento e clique do mouse, mas com qualquer método de qualquer classe.
Para que um método de uma classe seja executado, ele precisa ser chamado/invocado. No nosso caso, que temos um objeto do tipo Mouse, ao usuário clicar no botão esquerdo do mouse, por exemplo, um sinal elétrico pode ser disparado para o programa em questão, e desde então o método "clicar com botão esquerdo" deve ser chamado, logo o código que estiver dentro do método "clicar com botão esquerdo" será executado.
CLASSE 2 - Usuário
Tenho certeza absoluta que ao menos uma vez você se cadastrou em algum site, seja ele um fórum, um servidor de e-mails, ou qualquer outra coisa. No formulário de cadastro você encontra alguns campos a serem preenchidos como: nickname, login, senha, etc. Preenchidos esses dados - que são um molde para um usuário do site - um novo objeto do tipo Usuário será criado. Analisemos então, em um site qualquer, os atributos e métodos da classe Usuário, melhor dizendo, qual as características de cada usuário cadastrado no site e o que cada um deles pode fazer.
Atributos:
* nome completo
* nickname
* login
* password
* e-mail
Métodos:
* alterar nome
* alterar password
-- comentário --
Talvez você tenha se surpreendido com o pouco número de métodos existentes na classe Usuário. Você pode se questionar também sobre a ausência de métodos como: postar no fórum, deletar conta e convidar um amigo. Mas será que realmente a funcionalidade de postar de fórum, por exemplo, pertence a um usuário, ou será que o usuário apenas usa conta para usufruir da funcionalidade de postar no fórum, que na realidade pertence ao sistema do site em si?
A modelagem de classes varia de caso para caso, de modelador para modelador. Não há regras fixas quanto ao seu planejamento.
CLASSE 3 - Ball
Se você estiver programando um jogo onde uma pequena bola se movimenta em uma posição aleatória na tela em uma determinada velocidade, e que ao colidir com qualquer borda da tela ela é rebatida para outra direção como no vídeo abaixo:
Logo, a classe Ball será composta por:
Atributos:
* imagem
* posicaoX
* posicaoY
* velocidade
Métodos:
* mover
* parar
* rebater
-- comentário --
Talvez este exemplo seja o mais próximo da prática real da POO, pois se trata de uma abstração de um objeto que não existe fisicamente, mas que é composto por conceitos existentes do mundo real que são aplicados para se obter um objeto virtual perfeitamente manipulável com características e comportamentos próprios.
Analisemos a justificativa de seus atributos: cada objeto do tipo Ball move-se pela tela nos eixos X e Y. Logo, um objeto Ball tem os atributos posicaoX e posicaoY, para armazenar sua posição atual nos eixos X e Y, respectivamente. Um objeto Ball também tem uma velocidade, que pode ser reajustada quando necessário - hora pode se movimentar mais lentamente pelos eixos X e Y, hora pode se movimentar de forma mais rápida. Um objeto do tipo Ball também possui uma imagem, para que este possa ser visualizado pelo jogador.
Na modelagem da classe Ball decidimos criar 3 métodos: mover, parar e rebater; que na verdade são as ações do objeto. Ao invocar o método mover, o objeto Ball se movimentará pela tela. Já ao método "parar" ser chamado, o objeto Ball parará de se deslocar. E quando o método rebater foi invocado, o objeto Ball mudará sua direção de movimento.
RESUMO:
* Você aprendeu que uma classe é composta por atributos e métodos
* Você aprendeu que uma classe é um modelo para a criação de um ou vários objetos
* Se um objeto é derivado de uma classe X, pode-se dizer que este objeto é do tipo X
* Os métodos geralmente são nomeados com verbos, pois representam ações do objeto
ATENÇÃO
Você deve se manter atento no momento de modelagem de suas classes, pois elas devem ser moldadas de forma com que um determinado problema computacional seja resolvido. Independente de os exemplos citados neste Post, que são baseados em objetos do mundo real, serem úteis para resolver problemas reais de programação, eles são mais do que tudo uma boa forma de exercitar sua capacidade de abstração, sua forma de pensar orientada a objetos.
EXERCÍCIOS:
1. Abstraia uma classe a partir de uma porta, que é um objeto do mundo real. Não se prenda a detalhes profundos, apenas molde suas características e comportamentos básicos.
2. Abstraia uma classe a partir de uma janela comum do Windows, independente do programa que nela estiver sendo rodado.
3. Abstraia uma classe a partir de um personagem de um simples jogo 2D de plataforma.
Bem, ficamos por aqui. Um abraço e até a próxima
domingo, 13 de janeiro de 2008
[7] Introdução à Programação Orientada a Objetos
Assinar:
Postar comentários (Atom)

0 comentários:
Postar um comentário