Você está na página 1de 10

Aula 03: Princpios da Orientao Objetos

Objetivos

Introduzir conceitos de Programao Orientada a Objetos (POO) Aprender a criar classes Aprender a instanciar objetos

Introduo Classes e Objetos


Todo sistema orientado objetos pode ser definido como um conjunto de objetos que trocam mensagens entre si. Ento, quando programamos em Java, que uma linguagem de programao orientada objetos, estamos escrevendo ou definindo um conjunto de objetos que trocam mensagens. Bom, mas o que um Objeto? O que uma classe? O que mensagens?

As classes definem a estrutura e o comportamento de um tipo de objeto.

Classe
Uma classe um tipo de modelo que define como so os objetos que pertencem a esta classe. como se fosse um projeto que os objetos devem seguir para serem considerados como pertencentes classe. Neste projeto esto definidos as caractersticas (que chamamos de atributos) e os comportamentos que representam as operaes que os objetos dessa classe podem realizar (chamamos a isso de mtodos). Exemplos de classes: Os animais podem ser classificados em classes, tais como mamferos, aves, peixes, etc. Cada uma dessas classes tem suas caractersticas e comportamentos comuns, que poderiam ser relacionados (descritos) como atributos e mtodos dessas classes. Exemplos de atributos: Uma classe pessoa, por exemplo, pode ter atributos como nome, endereo, identidade, ou seja, caractersticas (dados) especficas de cada pessoa. Exemplos de mtodos:

Uma classe peixe pode ter um mtodo nadar, uma classe pessoa pode ter um mtodo andar ou um mtodo falar, pois estes so comportamentos (aes) tpicos destas classes.

O que um objeto?
Como vimos, uma classe uma representao de uma entidade do mundo real. Um objeto uma ocorrncia (chamamos a isso de uma instncia) de uma determinada classe.

Exemplos de objetos: Matheus um objeto da classe pessoa. Thor (o peixinho do Matheus) um objeto da classe peixe.
CLASSE Carro OBJETOS Meu Gol Seu Corsa Plio dele CLASSE Empregado OBJETOS Joo Ana Carlos CLASSE Formulrio OBJETOS Demisso Cadastro Vendas

Abstrao
Extrair tudo que for essencial e mais nada para o escopo do sistema; o processo de filtragem de detalhes sem importncia do objeto real, para que apenas as caractersticas apropriadas que o descrevam e que tenham relevncia para o sistema permaneam; Conceito aplicado criao de software baseado em objetos, partindo do princpio que devemos considerar a essncia de cada objeto e no pensar em todos os detalhes de implementao;

Classes e Objetos em Java


Definindo uma Classe em Java
As classes em Java so definidas atravs do uso da palavra-chave class. Construindo uma classe:

[modif] class NomeDaClasse { // corpo da classe... }


A primeira linha um comando que inicia a declarao da classe. Aps a palavra-chave class, segue-se o nome da classe, que deve ser um identificador vlido para a linguagem. O modificador modif opcional; se presente, pode ser uma combinao de public e abstract ou final. A definio da classe propriamente dita est entre as chaves { e }, que delimitam blocos na linguagem Java. Este corpo da classe usualmente obedece seguinte sequncia de definio: 1. As variveis de classe (definidas como static), ordenadas segundo sua visibilidade: iniciando pelas public, seguidos pelas protected, pelas com visibilidade padro (sem modificador) e finalmente pelas private. 2. Os atributos (ou variveis de instncia) dos objetos dessa classe, seguindo a mesma ordenao segundo a visibilidade definida para as variveis de classe. 3. Os construtores de objetos dessa classe. 4. Os mtodos da classe, geralmente agrupados por funcionalidade. Antes de continuarmos com os elementos que compe uma classe, faz-se necessrio alguns esclarecimentos sobre encapsulamento. Encapsulamento Mecanismo utilizado em orientao a objetos para obter segurana, modularidade e autonomia dos objetos; Os atributos e mtodos de um objeto podem ser escondidos de outros objetos por uma interface pblica de mtodos, de modo a impedir acessos indevidos. Para definir diferentes nveis de encapsulamento faz-se uso do conjunto de modificadores de acesso disponveis no Java para os membros de classe, com mostrado na tabela. ( * acesso permitido ) Modificadores private <sem modif> protected public Mesma classe Mesmo pacote Subclasses Universo

* * * *

* * *

* *

Atributos
Representam as caractersticas de um objeto. A sintaxe utilizada para definir um atributo de um objeto :

[modificador] tipo nome [ = default];


Onde: modificador opcional, especificando a visibilidade diferente da padro (public, protected ou private); tipo deve ser um dos tipos primitivos da linguagem Java ou o nome de uma classe; nome deve ser um identificador vlido da linguagem Java; valor default opcional; se presente, especifica um valor inicial para a varivel.

Mtodos
Os mtodos representam as funcionalidades que os objetos podem desempenhar. So essencialmente procedimentos que podem manipular atributos de objetos para os quais o mtodo foi definido. Alm dos atributos de objetos, mtodos podem definir e manipular variveis locais; tambm podem receber parmetros por valor atravs da lista de argumentos. A forma genrica para a definio de um mtodo em uma classe :

[modificador] <tipoDeRetorno> nome(argumentos) { corpo do mtodo }


Onde: o modificador (opcional) uma combinao de: public, protected ou private; abstract ou final; e static. o tipoDeRetorno um indicador do valor de retorno, sendo void se o mtodo no tiver um valor de retorno; o nome do mtodo deve ser um identificador vlido na linguagem Java; os argumentos so representados por uma lista de parmetros separados por vrgulas, onde para cada parmetro indicado primeiro o tipo e depois (separado por espao) o nome. Uma boa prtica de programao manter a funcionalidade de um mtodo simples, desempenhando uma nica tarefa. O nome do mtodo deve refletir de modo adequado a tarefa realizada. Se a funcionalidade do mtodo for simples, ser fcil encontrar um nome adequado para o mtodo.
Mtodos de mesmo nome podem co-existir em uma mesma classe desde que a lista de argumentos seja distinta, usando o mecanismo de sobrecarga. Construtores so mtodos especiais que possuem o mesmo nome da classe e no apresentam tipo de retorno. Podem estar declarados explicitamente ou simplesmente omitidos.

Criando Objetos em Java


Toda classe possui atributos e mtodos. Em especial, toda classe tem um construtor, que um mtodo responsvel pela instanciao do objeto. Este processo faz com que o objeto seja criado com as caractersticas desejadas. Para que um objeto exista em memria, ele precisa ter memria alocada, um endereo definido. O construtor o responsvel por isso. A criao de um objeto se d atravs da aplicao do operador new. ClasseNome objeto = new ClasseNome(); O mtodo a direita do operador new o construtor da classe ClasseNome. Podemos instanciar quantos objetos forem necessrios. Contanto que guardemos a referncia para o objeto em questo. A referncia como poderemos acessar aquele objeto.
Caso um objeto no tenha mais nenhuma referncia para ele, o coletor de lixo ( garbage collector GC) elimina o objeto, liberando a memria.

Criando um programa Java


Um programa Java uma coleo de objetos que so descritos por um conjunto de arquivos texto, onde so definidas as classes. Pelo menos uma destas classes public e contm o mtodo main(), que possui esta forma especfica: public static void main(String [] args) { // aqui o programador insere os comandos } Como vimos nas aulas anteriores todos os programas feitos tinham esta estrutura. E o nome da classe era o nome do arquivo. Ento, podemos concluir que uma classe em Java construda dentro de um arquivo texto com o mesmo nome da classe e extenso .java. javac Oi.java java Oi Nos comando acima, o compilador Java compila o arquivo texto Oi.java, gerando o bytecode. A mquina virtual interpreta a classe Oi quando o comando java Oi executado. Lembro que a classe que contm o mtodo main() chamada de classe principal.

Exemplo:

public class Ponto2D { private int x; private int y; public Ponto2D(int a, int b) { x = a; y = b; } public double distancia(Ponto2D p) { double distX = p.x - x; double distY = p.y - y; return Math.sqrt(distX*distX + distY*distY); } }
Neste exemplo, definimos a classe Ponto2D com dois atributos e dois mtodos. Os atributos so, x e y enquanto os mtodos so: Ponto2D Construtor distancia mtodo que calcula a distncia entre o ponto e um outro dado. Um objeto dessa classe tem dois atributos privativos que definem as coordenadas do ponto bidimensional, x e y nesse caso, as coordenadas so valores inteiros. A classe tem um construtor que recebe dois argumentos, a e b, que definem as coordenadas do ponto criado. Finalmente, a classe define um mtodo pblico para calcular a distncia entre o ponto que invocou o mtodo e outro ponto especificado como o argumento p. A expresso de retorno ilustra ainda a utilizao de um mtodo esttico da classe Math do pacote java.lang para o cmputo da raiz quadrada.

Interface de classe
Como vimos, podemos ter carro como sendo uma classe. As caractersticas ou atributos poderiam ser a cor, o modelo, a potncia do motor e assim sucessivamente. Os comportamentos ou funcionalidades, poderiam ser ligar e desligar, abrir e fechar a porta, acelerar e frear, e outras aes (operaes) que fossem consideradas teis para descrever um carro. Os atributos e mtodos da classe carro constituem o que chamamos de interface dessa classe com o mundo externo. Um objeto da classe carro s ser acessvel por outro objeto atravs de seus mtodos, de forma que a interface da classe carro deve definir todos os comportamentos desejveis a um objeto desta classe. Uma vez que tenhamos definido a interface da classe carro e que tenhamos um objeto dessa classe, como fazer para que ele execute a operao ligar? Devemos enviar uma mensagem para esse carro (ligue!) e ele executar a operao. Ns (externamente ao objeto) que pedimos ao objeto para que execute essa operao, sem precisar saber como o carro faz para ligar (que tipo de algoritmo ele usa para isso). O mesmo ocorre se quisermos saber a cor do carro. Simplesmente perguntamos (qual a sua cor?) e o carro responde (naturalmente precisaramos ter criado um mtodo que respondesse a isso). Onde e como ele armazena a informao da cor no relevante. Apenas sabemos que ele capaz de armazenar seus atributos e inform-los quando necessitarmos deles. O fato dos objetos esconderem sua forma de funcionamento um conceito importante em OO, e est ligado existncia da interface. Somente a classe carro conhece a forma de funcionamento (implementao) de seus mtodos. o que chamamos de encapsulamento. Ou seja, conhecemos as caractersticas e as funcionalidades de um carro, mas no sabemos (nem precisamos saber) quais tcnicas e processos os projetistas utilizaram para a construo do projeto, ou seja, para implementar a forma de funcionamento de seus mtodos. Ou seja, a forma de fazer est encapsulada nos mtodos do projeto e de exclusiva responsabilidade do projetista. Representao do problema - UML Para estudarmos a Programao Orientada a Objetos (POO), necessrio que entendamos a Modelagem Orientada a Objetos (MOO). Essa tcnica representa as estruturas atravs de uma linguagem padro, conhecida como UML (Unified Modeling Language), usada para a criao de modelos que representam os problemas do mundo real. A UML classifica os objetos envolvidos no domnio do problema e define as formas como os mesmos se relacionam. No o nosso foco uma abordagem profunda dos conceitos e ferramentas da UML. Utilizaremos apenas os principais elementos da MOO, que so necessrios para dar andamento POO. Para implementao utilizaremos a linguagem Java. Na UML as classes so representadas na forma de caixas com, no mximo, trs compartimentos. O primeiro deles contm o nome da classe (sempre no singular e com a primeira letra em maisculo), o segundo contm

a lista de atributos e o terceiro contm a lista de operaes. Veja a classe carro: A UML (e o Java) sugere que todos os nomes de atributos e mtodos se iniciem com letra minscula. Na classe Carro foram criados trs atributos: dois do tipo String, marca e cor e o terceiro, motorEstado, um booleano que indica se o motor est desligado ou ligado. Alm dos atributos da classe, queremos tambm criar mtodos que contenham as operaes que objeto poder realizar. Um carro pode fazer muitas coisas, mas, para manter a simplicidade, vamos criar inicialmente apenas trs mtodos: O primeiro o mtodo ligaMotor, que muda o estado do motor para ligado, isto , para true e depois exibe uma mensagem de aviso. O segundo o mtodo desligaMotor, que muda o estado do motor para desligado, isto , para false e depois exibe uma mensagem de aviso. O terceiro mtodo, mostraAtributos, exibe os valores dos atributos de um objeto ou instncia da classe Carro. Exemplo:

class Carro { String marca; String cor; boolean motorEstado; void ligaMotor() { motorEstado = true; System.out.println("O motor foi ligado."); } void desligaMotor() { motorEstado = false; System.out.println("O motor foi desligado."); } void mostraAtributos() { System.out.println("O carro tem a cor " + cor + "e eh da marca " + marca); if (motorEstado == true) System.out.println("O motor jah estah ligado."); else { System.out.println("O motor estah desligado."); } } }

Bem, at agora, no exemplo, criamos apenas a classe Carro. Precisamos criar tambm um objeto dessa classe. Em Java, uma das maneira de fazer isso adicionar o mtodo main() classe Carro e nele instanciando efetivamente um objeto da classe Carro (comando new).

public static void main (String args[]) { Carro meuCarro = new Carro(); // instancia o objeto meuCarro.marca = "Palio"; // inicia o atributo marca meuCarro.cor = "azul"; // inicia o atributo cor System.out.println("Mostrando os atributos:"); meuCarro.mostraAtributos(); //mensagem para o objeto System.out.println("---------"); System.out.println("Ligando o motor..."); meuCarro.ligaMotor(); //mensagem para ligar o carro System.out.println("Mostrando os atributos:"); meuCarro.mostraAtributos(); System.out.println("---------"); System.out.println("Desligando o motor..."); meuCarro.desligaMotor(); System.out.println("Mostrando os atributos:"); meuCarro.mostraAtributos(); } Aps a execuo a tela de sada deve exibir algo como:

Exercos
1. Crie o objeto outroCarro da classe carro com a marca Gol e a cor prata. 2. Insira um novo atributo rotacaoMotor e inicie-o com zero. O mtodo ligaMotor deve atualizar esse atributo para 1000 e o mtodo desligaMotor deve atualizlo para zero. 3. Crie um novo mtodo acelerar que some 100 ao valor corrente do atributo rotacaoMotor. Crie tambm o desacelerar, que subtraia 100. 4. A partir do arquivo criado, desmembre-o em dois. O arquivo j existente, de nome Carro, s com a classe Carro sem o mtodo main. E outro arquivo, denominado Principal, s com o mtodo main (este novo arquivo deve definir uma nova classe a classe Principal). 5. Crie uma classe Quadrado que tenha um atributo lado e mtodos para informar a rea e o permetro. Escreva uma outra classe Principal para testar essa classe. 6. Escreva uma classe Calculadora que tenha dois atributos inteiros (inicie-os com os valores 6 e 3) e mtodos para calcular as quatro operaes matemticas e imprimir os quatro resultados. Escreva uma outra classe Principal para testar essa classe. 7. Escreva uma classe que possua um atributo chamado raio (inicie-o com o valor 1) e mtodos para calcular o dimetro, a circunferncia e a rea de um crculo. Utilize o valor 3,14159 para PI
Utilize as frmulas abaixo para os seus clculos: Dimetro = 2 x raio Circunferncia = 2 x PI x raio rea = PI x raio x raio Observao: Voc tambm pode usar a constante Math.PI predefinida para o valor de PI, que apresenta um valor mais preciso. A Classe Math definida no pacote Java.lang, que no precisa ser importada no seu programa. Ex.: double varPI = Math.PI;