Вы находитесь на странице: 1из 44

Orientao a Objetos

Vanessa Braganholo
vanessa@ic.uff.br
Paradigma estruturado
} Cdigo mais fcil de ler, mas ainda difcil para sistemas
grandes devido a repetio de cdigo
} S usa sequncia, repetio e deciso
} O que fazer se for necessrio repetir uma sequncia de
linhas de cdigo em diferentes locais?

2
Encapsulamento
} Mecanismo utilizado para lidar com o aumento de
complexidade
} Consiste em exibir o que pode ser feito sem informar
como feito
} Permite que a granularidade de abstrao do sistema seja
alterada, criando estruturas mais abstratas

3
Paradigma
procedimental
} Sinnimo: paradigma
procedural
} Uso de subprogramao
} Agrupamento de cdigo permitindo a criao de aes
complexas
} Atribuio de um nome para essas aes complexas
} Chamada a essas aes complexas de qualquer ponto do
programa
} Em Java, essas aes complexas so denominadas
mtodos
} Outras linguagens usam termos como procedimento, sub-
rotina e funo

4
A linha que imprime a
mensagem e pedindo
Exemplo para entrar com
dados, e a outra que
l os dados se repete
em dois locais. So
import java.util.Scanner; Parecidas!
public class IMC {
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);

System.out.print("Entre com a sua altura em metros: ");


double altura = teclado.nextDouble();

System.out.print("Entre com a sua massa em kg: ");


double massa = teclado.nextDouble();

double imc = massa / Math.pow(altura, 2);


System.out.println("Seu IMC " + imc);
}
}

5
Exemplo usando mtodo

import java.util.Scanner;
public class IMC { Notem a
public static double leia(String mensagem) { Declarao
Scanner teclado = new Scanner(System.in); do mtodo
System.out.print(mensagem);
return teclado.nextDouble();
}

public static void main(String[] args) {


double altura = leia("Entre com a sua altura em metros: ");
double massa = leia("Entre com a sua massa em kg: ");

double imc = massa / Math.pow(altura, 2);


System.out.println("Seu IMC " + imc); Notem as
} Chamadas
} ao mtodo

6
Dividir para conquistar
} Antes: um programa gigante

Programa Principal

} Depois: vrios programas menores

7
Fluxo de execuo
} O programa tem incio em um mtodo principal (no caso
do Java o mtodo main)
} O mtodo principal chama outros mtodos
} Estes mtodos podem chamar outros mtodos,
sucessivamente
} Ao fim da execuo de um mtodo, o programa retorna
para a instruo seguinte da chamada ao mtodo

Programa Possvel sequencia de chamadas


Mtodo Principal 3
2
Mtodo A Mtodo A Mtodo B
Mquina 1 Mtodo
Mtodo B
Mtodo C Virtual Java Principal
Mtodo C
4
8
Fluxo de execuo

9
Fluxo de execuo
} equivalente ao que acontece quando chamamos um
mtodo predefinido do Java

10
Vantagens
} Economia de cdigo
} Quanto mais repetio, mais economia
} Facilidade na correo de defeitos
} Corrigir o defeito em um nico local
} Legibilidade do cdigo
} Podemos dar nomes mais intuitivos a blocos de cdigo
} como se crissemos nossos prprios comandos
} Melhor tratamento de complexidade
} Estratgia de dividir para conquistar nos permite lidar
melhor com a complexidade de programas grandes
} Abordagem top-down ajuda a pensar!

11
O tipo de retorno
Sintaxe de um mtodo do mtodo pode
O nome do mtodo
segue a Mesma
ser Qualquer tipo regra de nome de
Vamos usar esses da linguagem varivel
modificadores por enquanto
public static

public static int divide(int a, int b)

MODIFICADORES TIPO DE RETORNO NOME (ARGUMENTOS)

public static void main(String[] args)

Os argumentos seguem a
Void Significa que no Mesma regra de declarao
tem retorno de variveis, separando cada
argumento por vrgula
12
Acesso a variveis
} Um mtodo no consegue acessar as variveis de outros
mtodos
} Cada mtodo pode criar as suas prprias variveis locais
} Os parmetros para a execuo de um mtodo devem ser
definidos como argumentos do mtodo
} Passagem por valor
} Java copiar o valor de cada argumento para a respectiva
varivel
} Os nomes das variveis podem ser diferentes
z = calcula(a, b);

public static double calcula(int x, int y)

13
Exemplo

public class Troca {


public static void troca(int x, int y) {
int aux = x;
x = y;
y = aux;
}
public static float media(int x, int y) {
return (x + y) / 2f;
}
public static void main(String[] args) {
int a = 5;
int b = 7;
troca(a, b);
System.out.println("a: " + a + ", b: " + b);
System.out.println("mdia: " + media(a,b));
}
}
14
Sobrescrita de mtodos
} Uma classe pode ter dois ou mais mtodos com o
mesmo nome, desde que os tipos de seus argumentos
sejam distintos
} Isso til quando queremos implementar um mtodo em
funo de outro
} Exemplo baseado na classe String:

public int indexOf(String substring) {


return indexOf(substring, 0);
}

15
Mtodos sem argumentos
} No necessrio ter argumentos nos mtodos
} Nestes casos, obrigatrio ter () depois do nome do mtodo
} A chamada ao mtodo tambm precisa conter ()
} Exemplo de declarao:
public static void pulaLinha() {
System.out.println();
}
} Exemplo de chamada:
pulaLinha();

16
Paradigma orientado a objetos (OO)
} Classes de objetos
} Agrupamento de mtodos afins
} Pacotes de classes
} Agrupamento de classes afins
} Representam bibliotecas de apoio

17
Classes x Objetos
} Uma classe como se fosse uma frma, capaz de
produzir (instanciar) objetos com caractersticas distintas

Fusca

Civic Gol
Classe
Carro

TR4 Uno

18
Objetos
} Definio
} Um objeto a representao computacional de um
elemento ou processo do mundo real
} Cada objeto possui suas caractersticas e seu
comportamento

} Exemplos de Objetos
cadeira mesa caneta lpis
carro piloto venda mercadoria
cliente aula programa computador
aluno avio

19
Caractersticas de Objetos
} Definio
} Uma caracterstica descreve uma propriedade de um objeto,
ou seja, algum elemento que descreva o objeto.
} Cada caracterstica chamada de atributo do objeto

} Exemplo de caractersticas do objeto carro


} Cor
} Marca
} Nmero de portas
} Ano de fabricao
} Tipo de combustvel

20
Comportamento de Objetos
} Definio
} Um comportamento representa uma ao ou resposta de um
objeto a uma ao do mundo real
} Cada comportamento chamado de mtodo do objeto

} Exemplos de comportamento para o objeto carro


} Acelerar
} Frear
} Virar para direita
} Virar para esquerda

21
Mapeamento de Objetos

Objeto no Mundo Real Objeto Computacional

Caractersticas Atributos

Comportamento Mtodos

22
Encapsulamento
} Atributos e Mtodos
} Os mtodos formam uma cerca em torno dos atributos
} Os atributos no devem ser manipulados diretamente
} Os atributos somente devem ser alterados ou consultados
atravs dos mtodos do objeto

23
Chamada de mtodos
} Colaborao
} Um programa OO um conjunto de objetos que colaboram
entre si para a soluo de um problema
} Objetos colaboram atravs de chamadas de mtodos uns dos
outros

Freia()
Carro

Motorista

24
Classes
} A classe descreve as caractersticas e comportamento de
um conjunto de objetos
} Em Java, cada objeto pertence a uma nica classe
} O objeto possuir os atributos e mtodos definidos na classe
} O objeto chamado de instncia de sua classe
} A classe o bloco bsico para a construo de programas OO

25
Exemplo de Classe
public class Carro {
Atributos (caractersticas) so
private int velocidade; variveis globais acessveis
por todos os mtodos da
public void acelera() { classe. No exemplo, existe um
atributo velocidade
velocidade++;
}

Mtodos (comportamentos):
public void freia() { acelera e freia
velocidade--;
}
}

26
Classe & Objetos

Classe Carro Objetos da classe Carro

Carro
Velocidade
Cor
Cor Lateral

Freia
Acelera
Vira para direita
Vira para esquerda

27
Criao de objetos
} A classe responsvel pela criao de seus objetos via
mtodo construtor
} Mesmo nome da classe
} Sem tipo de retorno

public Carro(int velocidadeInicial) {


velocidade = velocidadeInicial;
}

28
Criao de objetos
} Objetos devem ser instanciados antes de utilizados
} O comando new instancia um objeto, chama o seu construtor
} Exemplo:

Carro fusca = new Carro(10);


Carro bmw = new Carro(15);
Qual a velocidade de cada
fusca.freia(); carro em cada momento?
bmw.acelera();
fusca = bmw;

O que acontece aqui?

29
Criao de objetos
} Valor null:
} Utilizado para representar um objeto no inicializado
} Quando um mtodo retorna um objeto, ele pode retornar null
para indicar, por exemplo, que o objeto no foi encontrado
} possvel atribuir null para descartar um objeto previamente
instanciado
} Exemplo:

Carro fusca = new Carro(10);


fusca.acelera();
fusca = null;

30
Herana
} Classes so organizadas em estruturas hierrquicas
} Uma classe pode herdar caractersticas e
comportamento de outras classes
} A classe que forneceu os elementos herdados chamada de
superclasse
} A classe herdeira chamada de subclasse
} A subclasse herda os mtodos e atributos de suas
superclasses
} A subclasse pode definir novos atributos e mtodos
especficos

31
Exemplo de Herana

Veculo

Bicicleta Automvel Navio Avio

Furgo Carro Caminho Trator

32
Exemplo de herana
} Declarao:
public class CarroInteligente extends Carro {
public void estaciona() {
// cdigo mgico para estacionar sozinho
}
}
} Uso:
CarroInteligente tiguan = new CarroInteligente(10);
for (int i = 10; i > 0; i--) {
tiguan.freia();
}
tiguan.estaciona();

33
Pacotes
} Utilizados para agregar classes relacionadas
} O pacote de uma classe indicado na primeira linha da
classe
} Declarao package
} Se uma classe no declara seu pacote, o interpretador
assume que a classe pertence a um pacote default
package br.uff.ic.prog1;

public class Fisica {


...
}

34
Pacotes
} Modificadores permitem que determinadas classes sejam
visveis apenas para outras classes do mesmo pacote

35
Pacotes
} Sempre que for usar uma classe de outro pacote, necessrio
importar
} A importao se realiza atravs da palavra-chave import,
seguida do nome da classe desejada
} As importaes so apresentadas antes da declarao da
classe mas depois da declarao do pacote

package br.uff.ic.prog1;

import java.util.Scanner;

public class Fisica {


...
}

36
Regra de ouro para classes e pacotes
} Classes devem ser mapeadas em arquivos com o mesmo
nome
} Classe Fisica
} Arquivo Fisica.java
} Pacotes devem ser mapeados em diretrios
} Pacote br.uff.ic.prog1
} Diretrio br\uff\ic\prog1
} Se o nome completo da classe br.uff.ic.prog1.Fisica
} Deve haver br\uff\ic\prog1\Fisica.java

37
Retornando aos mtodos
} Modificadores
} Estamos at agora usando somente public static
} O que significam esses modificadores?
} Quais outros modificadores existem?
} Passagem de parmetros
} O que acontece quando passamos objetos nos argumentos de
um mtodo?

38
Modificador de visibilidade
} Indica quem pode acessar o mtodo (atributo ou classe):
} O modificador private indica que o mtodo pode ser
chamado apenas por outros mtodos da prpria classe
} A ausncia de modificador conhecida como package, e
indica que o mtodo pode ser chamado somente por classes
do mesmo pacote
} O modificador protected indica que o mtodo pode ser
chamado somente por classes do mesmo pacote ou subclasses;
} O modificador public indica que o mtodo pode ser chamado
por qualquer outra classe

39
Modificador de escopo
} Indica a quem pertence o mtodo
} Ao objeto (instncia)
} classe como um todo

} Mtodos estticos (static) pertencem classe como um


todo
} Podem ser chamados diretamente na classe, sem a necessidade de
instanciar objetos
} S podem manipular atributos estticos

40
Passagem por valor vs.
passagem por referncia
} Algumas linguagens permitem passagem de argumentos
por referncia (Pascal, por exemplo)
} No o caso de Java, que sempre faz passagem por valor
} Diferenas
} Passagem por valor = cpia dos valores para outra posio de
memria
} Passagem por referncia = reuso da mesma posio de
memria
} Quando passado um objeto por valor...
} Mudanas nos atributos dos objetos so vistas de fora
} Instanciaes de novos objetos nas variveis no so vistas de
fora

41
Exerccio
} Faa um programa que, dado uma figura geomtrica que pode
ser uma circunferncia, tringulo ou retngulo, calcule a rea e
o permetro da figura
} O programa deve primeiro perguntar qual o tipo da figura:
} (1) circunferncia
} (2) tringulo
} (3) retngulo
} Dependendo do tipo de figura, ler o (1) tamanho do raio da
circunferncia; (2) tamanho de cada um dos lados do tringulo;
(3) tamanho dos dois lados retngulo
} Usar uma classe Figura, e uma classe para cada tipo de figura,
que herda de Figura
} Onde os mtodos calculaArea() e calculaPerimetro() devem
estar definidos?

42
Referncias
} Slides de Leonardo Murta

43
Subprogramao

Vanessa Braganholo
vanessa@ic.uff.br