SlideShare uma empresa Scribd logo
1 de 80
Baixar para ler offline
Aula 05 – Subrotinas
Norton Trevisan Roman
19 de mar¸co de 2020
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 1 / 34
Constantes
Suponha que queremos incrementar nossa cabana
com uma piscina:
Piscina
r
Sala
Quarto
Banheiro
lat
lat/2
lat
comp
Queremos ent˜ao fazer um programa que calcule a
´area da cabana e da piscina
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 2 / 34
Constantes
Como?
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 3 / 34
Constantes
Como?
Temos o raio da piscina
Basta vermos como
adicionar o π
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 3 / 34
Constantes
Como?
Temos o raio da piscina
Basta vermos como
adicionar o π
Podemos fazer:
class AreaPiscina {
public static void main(
String[] args) {
// raio da piscina
double raio = 2;
// ´area da piscina
double areap;
// valor do pi
double pi = 3.14159;
areap = pi * raio * raio;
System.out.println("´Area: "+
areap);
}
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 3 / 34
Constantes
Como?
Temos o raio da piscina
Basta vermos como
adicionar o π
Podemos fazer:
E a sa´ıda ser´a “´Area:
12.56636”
class AreaPiscina {
public static void main(
String[] args) {
// raio da piscina
double raio = 2;
// ´area da piscina
double areap;
// valor do pi
double pi = 3.14159;
areap = pi * raio * raio;
System.out.println("´Area: "+
areap);
}
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 3 / 34
Constantes
E se fizermos:
class AreaPiscina {
public static void main(
String[] args) {
// raio da piscina
double raio = 2;
// ´area da piscina
double areap;
// valor do pi
double pi = 3.14159;
pi = 12;
areap = pi * raio * raio;
System.out.println("´Area: "+
areap);
}
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 4 / 34
Constantes
E se fizermos:
Teremos “´Area: 48.0”
Inadvertidamente
mudamos algo que deveria
ser constante
class AreaPiscina {
public static void main(
String[] args) {
// raio da piscina
double raio = 2;
// ´area da piscina
double areap;
// valor do pi
double pi = 3.14159;
pi = 12;
areap = pi * raio * raio;
System.out.println("´Area: "+
areap);
}
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 4 / 34
Constantes
Devemos tornar π
constante, fazendo:
class AreaPiscina {
public static void main(
String[] args) {
// raio da piscina
double raio = 2;
// ´area da piscina
double areap;
// valor do pi
final double pi = 3.14159;
areap = pi * raio * raio;
System.out.println("´Area: "+
areap);
}
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 5 / 34
Constantes
Devemos tornar π
constante, fazendo:
E, se tentarmos mudar
o valor, teremos
$ javac AreaPiscina.java
AreaPiscina.java:11: cannot
assign a value to final
variable pi
pi = 12;
^
1 error
class AreaPiscina {
public static void main(
String[] args) {
// raio da piscina
double raio = 2;
// ´area da piscina
double areap;
// valor do pi
final double pi = 3.14159;
pi = 12;
areap = pi * raio * raio;
System.out.println("´Area: "+
areap);
}
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 5 / 34
Constantes
“final” especifica que
o valor n˜ao mais
poder´a ser mudado no
programa
Define uma constante
class AreaPiscina {
public static void main(
String[] args) {
// raio da piscina
double raio = 2;
// ´area da piscina
double areap;
// valor do pi
final double pi = 3.14159;
areap = pi * raio * raio;
System.out.println("´Area: "+
areap);
}
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 6 / 34
Constantes
Alternativamente,
podemos usar uma
constante j´a definida
no java:
Math.PI, valendo
3.141592653589793
Math.PI ´e double, por
isso areap tamb´em o ´e
class AreaPiscina {
public static void main(
String[] args) {
// raio da piscina
double raio = 2;
// ´area da piscina
double areap;
areap = Math.PI * raio
* raio;
System.out.println("´Area: "+
areap);
}
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 7 / 34
Constantes
E como podemos
mudar raio * raio?
class AreaPiscina {
public static void main(
String[] args) {
// raio da piscina
double raio = 2;
// ´area da piscina
double areap;
areap = Math.PI * raio
* raio;
System.out.println("´Area: "+
areap);
}
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 8 / 34
Constantes
E como podemos
mudar raio * raio?
Math.pow(a,b) d´a o
resultado de ab
O resultado tamb´em ´e
double
class AreaPiscina {
public static void main(
String[] args) {
// raio da piscina
double raio = 2;
// ´area da piscina
double areap;
areap = Math.PI *
Math.pow(raio,2);
System.out.println("´Area: "+
areap);
}
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 8 / 34
M´etodos
Math ´e como se fosse
uma biblioteca, que nos
fornece o m´etodo pow
(al´em da constante PI)
N˜ao ´e uma biblioteca, ´e
mais que isso, mas
veremos mais adiante
class AreaPiscina {
public static void main(
String[] args){
double raio = 2;
double areap;
areap = Math.PI *
Math.pow(raio,2);
System.out.println(
"´Area: "+ areap);
}
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 9 / 34
M´etodos
Math ´e como se fosse
uma biblioteca, que nos
fornece o m´etodo pow
(al´em da constante PI)
N˜ao ´e uma biblioteca, ´e
mais que isso, mas
veremos mais adiante
M´etodo?
class AreaPiscina {
public static void main(
String[] args){
double raio = 2;
double areap;
areap = Math.PI *
Math.pow(raio,2);
System.out.println(
"´Area: "+ areap);
}
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 9 / 34
M´etodos
Um m´etodo ´e uma
implementa¸c˜ao de uma
subrotina
Nesse caso, pow(a,b)
recebe dois valores, a e
b, devolvendo o
resultado de ab
Os valores a e b
fornecidos ao m´etodo s˜ao
chamados argumentos de
seus parˆametros
class AreaPiscina {
public static void main(
String[] args){
double raio = 2;
double areap;
areap = Math.PI *
Math.pow(raio,2);
System.out.println(
"´Area: "+ areap);
}
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 10 / 34
M´etodos
Vamos ent˜ao juntar os dois programas que vimos at´e
agora em um s´o:
class AreaCasa {
public static void main(
String[] args) {
float lateral = 11;
float cquarto = 7;
float areaq;
float areas;
float areat;
double raio = 2;
double areap;
System.out.println(...);
areas = lateral*lateral;
System.out.println("..."+areas);
areaq = cquarto*(lateral/2);
System.out.println("..."+areaq);
System.out.println("..."+areaq);
areat = areas + 2*areaq;
System.out.println("..."
+ areat);
areap = Math.PI *
Math.pow(raio,2);
System.out.println("..."+areap);
}
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 11 / 34
M´etodos
E qual a saida?
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 12 / 34
M´etodos
E qual a saida?
C´alculo da ´area da casa
A ´area da sala ´e 121.0
A ´area do banheiro ´e 38.5
A ´area do quarto ´e 38.5
A ´area total ´e 198.0
A ´area da piscina ´e 12.566370614359172
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 12 / 34
M´etodos
Esse programa est´a ficando confuso:
Mistura a casa com a piscina
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 13 / 34
M´etodos
Esse programa est´a ficando confuso:
Mistura a casa com a piscina
Que fazer?
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 13 / 34
M´etodos
Esse programa est´a ficando confuso:
Mistura a casa com a piscina
Que fazer?
Podemos dividi-lo em 2 partes: uma para o c´alculo da casa e
outra para o c´alculo da piscina
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 13 / 34
M´etodos
Esse programa est´a ficando confuso:
Mistura a casa com a piscina
Que fazer?
Podemos dividi-lo em 2 partes: uma para o c´alculo da casa e
outra para o c´alculo da piscina
Como?
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 13 / 34
M´etodos
Esse programa est´a ficando confuso:
Mistura a casa com a piscina
Que fazer?
Podemos dividi-lo em 2 partes: uma para o c´alculo da casa e
outra para o c´alculo da piscina
Como?
Criando nossos pr´oprios m´etodos
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 13 / 34
M´etodos
static void areaCasa() {
float lateral = 11;
float cquarto = 7;
float areaq;
float areas;
float areat;
System.out.println("...");
areas = lateral*lateral;
System.out.println("..."+areas);
areaq = cquarto*(lateral/2);
System.out.println("..."+areaq);
System.out.println("..."+areaq);
areat = areas + 2*areaq;
System.out.println("..." + areat);
}
static double areaPiscina()
{
double raio = 2;
return(Math.PI *
Math.pow(raio,2));
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 14 / 34
M´etodos
static void areaCasa() {
float lateral = 11;
float cquarto = 7;
float areaq;
float areas;
float areat;
System.out.println("...");
areas = lateral*lateral;
System.out.println("..."+areas);
areaq = cquarto*(lateral/2);
System.out.println("..."+areaq);
System.out.println("..."+areaq);
areat = areas + 2*areaq;
System.out.println("..." + areat);
}
static double areaPiscina()
{
double raio = 2;
return(Math.PI *
Math.pow(raio,2));
}
Ambos dentro do
mesmo programa...
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 14 / 34
M´etodos
O que significa o
void?
static void areaCasa() {
float lateral = 11;
float cquarto = 7;
float areaq;
float areas;
float areat;
System.out.println("...");
areas = lateral*lateral;
System.out.println("..."+areas);
areaq = cquarto*(lateral/2);
System.out.println("..."+areaq);
System.out.println("..."+areaq);
areat = areas + 2*areaq;
System.out.println("..."+areat);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 15 / 34
M´etodos
O que significa o
void?
Que o m´etodo n˜ao ir´a
retornar nenhum valor
Ele apenas executa a
tarefa e termina
static void areaCasa() {
float lateral = 11;
float cquarto = 7;
float areaq;
float areas;
float areat;
System.out.println("...");
areas = lateral*lateral;
System.out.println("..."+areas);
areaq = cquarto*(lateral/2);
System.out.println("..."+areaq);
System.out.println("..."+areaq);
areat = areas + 2*areaq;
System.out.println("..."+areat);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 15 / 34
M´etodos
O que significa o
void?
Que o m´etodo n˜ao ir´a
retornar nenhum valor
Ele apenas executa a
tarefa e termina
E o static?
static void areaCasa() {
float lateral = 11;
float cquarto = 7;
float areaq;
float areas;
float areat;
System.out.println("...");
areas = lateral*lateral;
System.out.println("..."+areas);
areaq = cquarto*(lateral/2);
System.out.println("..."+areaq);
System.out.println("..."+areaq);
areat = areas + 2*areaq;
System.out.println("..."+areat);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 15 / 34
M´etodos
O que significa o
void?
Que o m´etodo n˜ao ir´a
retornar nenhum valor
Ele apenas executa a
tarefa e termina
E o static?
Por hora, apenas
aceitemos...
static void areaCasa() {
float lateral = 11;
float cquarto = 7;
float areaq;
float areas;
float areat;
System.out.println("...");
areas = lateral*lateral;
System.out.println("..."+areas);
areaq = cquarto*(lateral/2);
System.out.println("..."+areaq);
System.out.println("..."+areaq);
areat = areas + 2*areaq;
System.out.println("..."+areat);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 15 / 34
M´etodos
O que significa o
double?
static double areaPiscina() {
double raio = 2;
return(Math.PI *
Math.pow(raio,2));
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 16 / 34
M´etodos
O que significa o
double?
Que o m´etodo ir´a retornar
um valor do tipo double
static double areaPiscina() {
double raio = 2;
return(Math.PI *
Math.pow(raio,2));
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 16 / 34
M´etodos
O que significa o
double?
Que o m´etodo ir´a retornar
um valor do tipo double
Semelhante ao pow(a,b)
static double areaPiscina() {
double raio = 2;
return(Math.PI *
Math.pow(raio,2));
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 16 / 34
M´etodos
O que significa o
double?
Que o m´etodo ir´a retornar
um valor do tipo double
Semelhante ao pow(a,b)
static double areaPiscina() {
double raio = 2;
return(Math.PI *
Math.pow(raio,2));
}
E o return?
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 16 / 34
M´etodos
O que significa o
double?
Que o m´etodo ir´a retornar
um valor do tipo double
Semelhante ao pow(a,b)
static double areaPiscina() {
double raio = 2;
return(Math.PI *
Math.pow(raio,2));
}
E o return?
´E quando o valor ´e efetivamente retornado
A subrotina para a´ı
Alternativas:
return(Math.PI * Math.pow(raio,2));
return Math.PI * Math.pow(raio,2);
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 16 / 34
M´etodos
E como usamos isso no
corpo do programa?
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 17 / 34
M´etodos
E como usamos isso no
corpo do programa?
public static void main(
String[] args) {
double areap;
areaCasa();
areap = areaPiscina();
System.out.println("A ´area
da piscina ´e "+areap);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 17 / 34
M´etodos
E como usamos isso no
corpo do programa?
Note que areaPiscina()
retorna valor, ent˜ao
guardamos esse valor em
areap
public static void main(
String[] args) {
double areap;
areaCasa();
areap = areaPiscina();
System.out.println("A ´area
da piscina ´e "+areap);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 17 / 34
M´etodos
E como usamos isso no
corpo do programa?
Note que areaPiscina()
retorna valor, ent˜ao
guardamos esse valor em
areap
J´a areaCasa() n˜ao
retorna nada, ent˜ao
apenas a executamos
public static void main(
String[] args) {
double areap;
areaCasa();
areap = areaPiscina();
System.out.println("A ´area
da piscina ´e "+areap);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 17 / 34
Vis˜ao Geral do C´odigo
class AreaCasa {
static void areaCasa() {
float lateral = 11;
float cquarto = 7;
float areaq;
float areas;
float areat;
System.out.println("...");
areas = lateral*lateral;
System.out.println("..."+areas);
areaq = cquarto*(lateral/2);
System.out.println("..."+areaq);
System.out.println("..."+areaq);
areat = areas + 2*areaq;
System.out.println("..."+areat);
}
static double areaPiscina() {
double raio = 2;
return(Math.PI *
Math.pow(raio,2));
}
public static void main(String[] args)
{
double areap;
areaCasa();
areap = areaPiscina();
System.out.println("..."+areap);
}
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 18 / 34
M´etodos
Qual a utilidade de criarmos nossos pr´oprios
m´etodos?
public static void main(
String[] args) {
double areap;
areaCasa();
areap = areaPiscina();
System.out.println("A ´area
da piscina ´e "+areap);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 19 / 34
M´etodos
Qual a utilidade de criarmos nossos pr´oprios
m´etodos?
Clareza: ao olharmos o
corpo do programa,
vemos claramente o que
´e feito, sem nos
preocuparmos com
detalhes
O m´etodo top-down fica
claro
public static void main(
String[] args) {
double areap;
areaCasa();
areap = areaPiscina();
System.out.println("A ´area
da piscina ´e "+areap);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 19 / 34
M´etodos
Qual a utilidade de criarmos nossos pr´oprios
m´etodos?
Clareza: ao olharmos o
corpo do programa,
vemos claramente o que
´e feito, sem nos
preocuparmos com
detalhes
O m´etodo top-down fica
claro
public static void main(
String[] args) {
double areap;
areaCasa();
areap = areaPiscina();
System.out.println("A ´area
da piscina ´e "+areap);
}
Portabilidade: se precisarmos, em outro programa,
usar a mesma subrotina, ela j´a est´a separada
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 19 / 34
M´etodos
Nossos m´etodos, contudo, n˜ao s˜ao gerais:
public static void main(
String[] args) {
double areap;
areaCasa();
areap = areaPiscina();
System.out.println("A ´area
da piscina ´e "+areap);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 20 / 34
M´etodos
Nossos m´etodos, contudo, n˜ao s˜ao gerais:
areaCasa() funciona
apenas para casas da
dimens˜ao de nosso projeto
public static void main(
String[] args) {
double areap;
areaCasa();
areap = areaPiscina();
System.out.println("A ´area
da piscina ´e "+areap);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 20 / 34
M´etodos
Nossos m´etodos, contudo, n˜ao s˜ao gerais:
areaCasa() funciona
apenas para casas da
dimens˜ao de nosso projeto
areaPiscina() funciona
apenas para piscinas
redondas de raio 2
public static void main(
String[] args) {
double areap;
areaCasa();
areap = areaPiscina();
System.out.println("A ´area
da piscina ´e "+areap);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 20 / 34
M´etodos
Nossos m´etodos, contudo, n˜ao s˜ao gerais:
areaCasa() funciona
apenas para casas da
dimens˜ao de nosso projeto
areaPiscina() funciona
apenas para piscinas
redondas de raio 2
public static void main(
String[] args) {
double areap;
areaCasa();
areap = areaPiscina();
System.out.println("A ´area
da piscina ´e "+areap);
}
Como poder´ıamos fazer para tornar esses m´etodos
mais gerais?
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 20 / 34
Parˆametros
A ideia ´e manter o formato da casa e da piscina,
mas permitir que seu tamanho varie
Como fazˆe-lo?
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 21 / 34
Parˆametros
A ideia ´e manter o formato da casa e da piscina,
mas permitir que seu tamanho varie
Como fazˆe-lo? Com parˆametros:
static double areaPiscina(double raio){
return(Math.PI * Math.pow(raio,2));
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 21 / 34
Parˆametros
A ideia ´e manter o formato da casa e da piscina,
mas permitir que seu tamanho varie
Como fazˆe-lo? Com parˆametros:
static double areaPiscina(double raio){
return(Math.PI * Math.pow(raio,2));
}
O m´etodo agora deve receber um valor (argumento)
em seu parˆametro
Como o Math.pow
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 21 / 34
Parˆametros
Como chamamos esse
m´etodo de outras
partes do programa?
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 22 / 34
Parˆametros
Como chamamos esse
m´etodo de outras
partes do programa?
public static void main
(String[] args) {
double areap;
areaCasa();
areap = areaPiscina(2);
System.out.println("A
´area da piscina ´e "+
areap);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 22 / 34
Parˆametros
E o que acontece ao chamarmos areaPiscina(2)
de dentro do main?
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 23 / 34
Parˆametros
E o que acontece ao chamarmos areaPiscina(2)
de dentro do main?
O sistema ir´a alocar
mem´oria para todas as
vari´aveis e parˆametros
declarados dentro do
m´etodo
raio
areaPiscina
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 23 / 34
Parˆametros
E o que acontece ao chamarmos areaPiscina(2)
de dentro do main?
O sistema ir´a alocar
mem´oria para todas as
vari´aveis e parˆametros
declarados dentro do
m´etodo
raio 2
areaPiscina
Colocando o valor passado como parˆametro l´a
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 23 / 34
Parˆametros
E o que acontece ao chamarmos areaPiscina(2)
de dentro do main?
O sistema ir´a alocar
mem´oria para todas as
vari´aveis e parˆametros
declarados dentro do
m´etodo
raio 2
areaPiscina
Colocando o valor passado como parˆametro l´a
Ao ato de passar um valor externo para dentro de
um procedimento, via parˆametro, chamamos de
passagem por valor
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 23 / 34
Parˆametros
E o que acontece ao chamarmos areaPiscina(2)
de dentro do main?
O sistema ir´a alocar
mem´oria para todas as
vari´aveis e parˆametros
declarados dentro do
m´etodo
raio 2
areaPiscina
Colocando o valor passado como parˆametro l´a
Ao ato de passar um valor externo para dentro de
um procedimento, via parˆametro, chamamos de
passagem por valor
Nesse caso, o valor externo ´e copiado para a regi˜ao de
mem´oria correspondente ao parˆametro
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 23 / 34
Parˆametros
O que acontece se
tivermos algo assim?
public static void main(String[]
args) {
double areap;
double raio = 2;
areaCasa();
areap = areaPiscina(raio);
System.out.println("A ´area da
piscina ´e "+areap);
}
raio
areaPiscina
args areap
raio 2
main
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 24 / 34
Parˆametros
O que acontece se
tivermos algo assim?
O valor de raio, em
main, ´e copiado para
dentro da vari´avel
raio em
areaPiscina
public static void main(String[]
args) {
double areap;
double raio = 2;
areaCasa();
areap = areaPiscina(raio);
System.out.println("A ´area da
piscina ´e "+areap);
}
raio 2
areaPiscina
args areap
raio 2
main
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 24 / 34
Parˆametros
O que acontece se
tivermos algo assim?
O valor de raio, em
main, ´e copiado para
dentro da vari´avel
raio em
areaPiscina
S˜ao duas regi˜oes de
mem´oria diferentes
public static void main(String[]
args) {
double areap;
double raio = 2;
areaCasa();
areap = areaPiscina(raio);
System.out.println("A ´area da
piscina ´e "+areap);
}
raio 2
areaPiscina
args areap
raio 2
main
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 24 / 34
Parˆametros
O que acontece se
tivermos algo assim?
O valor de raio, em
main, ´e copiado para
dentro da vari´avel
raio em
areaPiscina
S˜ao duas regi˜oes de
mem´oria diferentes
Sim... main ´e um
m´etodo tamb´em
public static void main(String[]
args) {
double areap;
double raio = 2;
areaCasa();
areap = areaPiscina(raio);
System.out.println("A ´area da
piscina ´e "+areap);
}
raio 2
areaPiscina
args areap
raio 2
main
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 24 / 34
Parˆametros
Incluindo parˆametros em areaCasa():
class AreaCasa {
static void areaCasa(float
lateral,float cquarto){
float areaq;
float areas;
float areat;
System.out.println("...");
areas = lateral*lateral;
System.out.println("..."+areas);
areaq = cquarto*(lateral/2);
System.out.println("..."+areaq);
System.out.println("..."+areaq);
areat = areas + 2*areaq;
System.out.println("..."+areat);
}
static double areaPiscina(double
raio){
return Math.PI*
Math.pow(raio,2);
}
public static void main(String[]
args){
double areap;
areaCasa(11,7);
areap = areaPiscina(2);
System.out.println("..."+
areap);
}
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 25 / 34
M´etodos e Mem´oria
Como fica o m´etodo
areaCasa na mem´oria?
static void areaCasa(float lateral,
float cquarto) {
float areaq;
float areas;
float areat;
System.out.println("...");
areas = lateral*lateral;
System.out.println("..."+areas);
areaq = cquarto*(lateral/2);
System.out.println("..."+areaq);
System.out.println("..."+areaq);
areat = areas + 2*areaq;
System.out.println("..."+areat);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 26 / 34
M´etodos e Mem´oria
Como fica o m´etodo
areaCasa na mem´oria?
Ao ser chamado (ou
invocado) em main,
ser´a separada uma
regi˜ao na mem´oria para
esse m´etodo
static void areaCasa(float lateral,
float cquarto) {
float areaq;
float areas;
float areat;
System.out.println("...");
areas = lateral*lateral;
System.out.println("..."+areas);
areaq = cquarto*(lateral/2);
System.out.println("..."+areaq);
System.out.println("..."+areaq);
areat = areas + 2*areaq;
System.out.println("..."+areat);
}
areaCasa
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 26 / 34
M´etodos e Mem´oria
Como fica o m´etodo
areaCasa na mem´oria?
Ao ser chamado (ou
invocado) em main,
ser´a separada uma
regi˜ao na mem´oria para
esse m´etodo
Essa regi˜ao conter´a
todas suas vari´aveis
internas (locais), e
todos seus parˆametros
static void areaCasa(float lateral,
float cquarto) {
float areaq;
float areas;
float areat;
System.out.println("...");
areas = lateral*lateral;
System.out.println("..."+areas);
areaq = cquarto*(lateral/2);
System.out.println("..."+areaq);
System.out.println("..."+areaq);
areat = areas + 2*areaq;
System.out.println("..."+areat);
}
areaCasa
lateral cquarto
areaq areas areat
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 26 / 34
M´etodos e Mem´oria
public static void main(
String[] args) {
...
areaCasa(11,7);
...
}
Os valores de entrada
s˜ao ent˜ao copiados para
dentro dos parˆametros
static void areaCasa(float lateral,
float cquarto) {
float areaq;
float areas;
float areat;
System.out.println("...");
areas = lateral*lateral;
System.out.println("..."+areas);
areaq = cquarto*(lateral/2);
System.out.println("..."+areaq);
System.out.println("..."+areaq);
areat = areas + 2*areaq;
System.out.println("..."+areat);
}
areaCasa
lateral 11 cquarto 7
areaq areas areat
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 27 / 34
M´etodos e Mem´oria
Considerando o programa como um todo, como
agir´a na mem´oria?
public static void main(String[] args){
double areap;
areaCasa(11,7);
areap = areaPiscina(2);
System.out.println("A ´area da
piscina ´e "+areap);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 28 / 34
M´etodos e Mem´oria
Considerando o programa como um todo, como
agir´a na mem´oria?
Ao iniciar main, ser´a alocado espa¸co para suas vari´aveis e
parˆametros
args areap
main public static void main(String[] args){
double areap;
areaCasa(11,7);
areap = areaPiscina(2);
System.out.println("A ´area da
piscina ´e "+areap);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 28 / 34
M´etodos e Mem´oria
Considerando o programa como um todo, como
agir´a na mem´oria?
Ao iniciar main, ser´a alocado espa¸co para suas vari´aveis e
parˆametros
Ent˜ao areaCasa(11,7) ´e executada, e o mesmo processo
ocorre
args areap
main public static void main(String[] args){
double areap;
areaCasa(11,7);
areap = areaPiscina(2);
System.out.println("A ´area da
piscina ´e "+areap);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 28 / 34
M´etodos e Mem´oria
Aloca-se espa¸co,
copiando-se os valores
aos parˆametros:
args areap
main
areaCasa
lateral 11 cquarto 7
areaq areas areat
public static void main(String[] args){
...
areaCasa(11,7);
...
}
static void areaCasa(float lateral,
float cquarto) {
float areaq;
float areas;
float areat;
System.out.println("...");
areas = lateral*lateral;
System.out.println("..."+areas);
areaq = cquarto*(lateral/2);
System.out.println("..."+areaq);
System.out.println("..."+areaq);
areat = areas + 2*areaq;
System.out.println("..."+areat);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 29 / 34
M´etodos e Mem´oria
A cada atribui¸c˜ao, a
mem´oria
correspondente ´e
atualizada
args areap
main
areaCasa
lateral 11 cquarto 7
areaq areas 121 areat
public static void main(String[] args){
...
areaCasa(11,7);
...
}
static void areaCasa(float lateral,
float cquarto) {
float areaq;
float areas;
float areat;
System.out.println("...");
areas = lateral*lateral;
System.out.println("..."+areas);
areaq = cquarto*(lateral/2);
System.out.println("..."+areaq);
System.out.println("..."+areaq);
areat = areas + 2*areaq;
System.out.println("..."+areat);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 30 / 34
M´etodos e Mem´oria
A cada atribui¸c˜ao, a
mem´oria
correspondente ´e
atualizada
args areap
main
areaCasa
lateral 11 cquarto 7
areaq 38.5 areas 121 areat
public static void main(String[] args){
...
areaCasa(11,7);
...
}
static void areaCasa(float lateral,
float cquarto) {
float areaq;
float areas;
float areat;
System.out.println("...");
areas = lateral*lateral;
System.out.println("..."+areas);
areaq = cquarto*(lateral/2);
System.out.println("..."+areaq);
System.out.println("..."+areaq);
areat = areas + 2*areaq;
System.out.println("..."+areat);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 30 / 34
M´etodos e Mem´oria
A cada atribui¸c˜ao, a
mem´oria
correspondente ´e
atualizada
args areap
main
areaCasa
lateral 11 cquarto 7
areaq 38.5 areas 121 areat 198
public static void main(String[] args){
...
areaCasa(11,7);
...
}
static void areaCasa(float lateral,
float cquarto) {
float areaq;
float areas;
float areat;
System.out.println("...");
areas = lateral*lateral;
System.out.println("..."+areas);
areaq = cquarto*(lateral/2);
System.out.println("..."+areaq);
System.out.println("..."+areaq);
areat = areas + 2*areaq;
System.out.println("..."+areat);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 30 / 34
M´etodos e Mem´oria
Ao terminar areaCasa,
sua mem´oria ´e limpa, e
areaPiscina ´e rodada:
args areap
main
static double areaPiscina(double raio)
{
return Math.PI * Math.pow(raio,2);
}
public static void main(String[] args)
{
double areap;
areaCasa(11,7);
areap = areaPiscina(2);
System.out.println("A ´area da
piscina ´e "+areap);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 31 / 34
M´etodos e Mem´oria
Ao terminar areaCasa,
sua mem´oria ´e limpa, e
areaPiscina ´e rodada:
args areap
main areaPiscina
raio 2
static double areaPiscina(double raio)
{
return Math.PI * Math.pow(raio,2);
}
public static void main(String[] args)
{
double areap;
areaCasa(11,7);
areap = areaPiscina(2);
System.out.println("A ´area da
piscina ´e "+areap);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 31 / 34
M´etodos e Mem´oria
Ao terminar
areaPiscina, sua
mem´oria ´e limpa, e o
resultado ´e armazenado
em areap:
args areap12.566370614359172
main
public static void main(
String[] args){
double areap;
areaCasa(11,7);
areap = areaPiscina(2);
System.out.println("A ´area
da piscina ´e "+areap);
}
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 32 / 34
M´etodos e Mem´oria
Ao terminar
areaPiscina, sua
mem´oria ´e limpa, e o
resultado ´e armazenado
em areap:
public static void main(
String[] args){
double areap;
areaCasa(11,7);
areap = areaPiscina(2);
System.out.println("A ´area
da piscina ´e "+areap);
}
Finalmente, quando main
terminar, tamb´em ser´a
removida
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 32 / 34
M´etodos e Mem´oria
Repare que toda vez que um m´etodo termina ele
libera a mem´oria que ocupava
Ent˜ao, qual a utilidade de criarmos nossos pr´oprios
m´etodos al´em de clareza e portabilidade?
Melhor uso da mem´oria: as vari´aveis relevantes ao
sub-problema (sub-rotina) ocupam a mem´oria apenas
durante a solu¸c˜ao desse sub-problema
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 33 / 34
Videoaula
https://www.youtube.com/watch?v=tZXF4Ar_w58
(parcial)
https://www.youtube.com/watch?v=rK3LpUSijGM
e
https://www.youtube.com/watch?v=fOintAunVVg
(parcial)
Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 34 / 34

Mais conteúdo relacionado

Semelhante a (ACH2001) Introdução à Programação - Aula 05

(ACH2001) Introdução à Programação - Aula 04
(ACH2001) Introdução à Programação - Aula 04(ACH2001) Introdução à Programação - Aula 04
(ACH2001) Introdução à Programação - Aula 04Norton Trevisan Roman
 
(ACH2001) Introdução à Programação - Aula 06
(ACH2001) Introdução à Programação - Aula 06(ACH2001) Introdução à Programação - Aula 06
(ACH2001) Introdução à Programação - Aula 06Norton Trevisan Roman
 
(ACH2001) Introdução à Programação - Aula 14
(ACH2001) Introdução à Programação - Aula 14(ACH2001) Introdução à Programação - Aula 14
(ACH2001) Introdução à Programação - Aula 14Norton Trevisan Roman
 
(ACH2001) Introdução à Programação - Aula 11
(ACH2001) Introdução à Programação - Aula 11(ACH2001) Introdução à Programação - Aula 11
(ACH2001) Introdução à Programação - Aula 11Norton Trevisan Roman
 
(ACH2001) Introdução à Programação - Aula 19
(ACH2001) Introdução à Programação - Aula 19(ACH2001) Introdução à Programação - Aula 19
(ACH2001) Introdução à Programação - Aula 19Norton Trevisan Roman
 
(ACH2001) Introdução à Programação - Aula 22
(ACH2001) Introdução à Programação - Aula 22(ACH2001) Introdução à Programação - Aula 22
(ACH2001) Introdução à Programação - Aula 22Norton Trevisan Roman
 
(ACH2001) Introdução à Programação - Aula 15
(ACH2001) Introdução à Programação - Aula 15(ACH2001) Introdução à Programação - Aula 15
(ACH2001) Introdução à Programação - Aula 15Norton Trevisan Roman
 
(ACH2001) Introdução à Programação - Aula 20
(ACH2001) Introdução à Programação - Aula 20(ACH2001) Introdução à Programação - Aula 20
(ACH2001) Introdução à Programação - Aula 20Norton Trevisan Roman
 
Algoritmos Genéticos para Ajuste de Controlador PID em Sistemas Espaciais
Algoritmos Genéticos para Ajuste de Controlador PID em Sistemas EspaciaisAlgoritmos Genéticos para Ajuste de Controlador PID em Sistemas Espaciais
Algoritmos Genéticos para Ajuste de Controlador PID em Sistemas EspaciaisItalo Pinto Rodrigues
 
(ACH2001) Introdução à Programação - Aula 07
(ACH2001) Introdução à Programação - Aula 07(ACH2001) Introdução à Programação - Aula 07
(ACH2001) Introdução à Programação - Aula 07Norton Trevisan Roman
 
(ACH2001) Introdução à Programação - Aula 10
(ACH2001) Introdução à Programação - Aula 10(ACH2001) Introdução à Programação - Aula 10
(ACH2001) Introdução à Programação - Aula 10Norton Trevisan Roman
 

Semelhante a (ACH2001) Introdução à Programação - Aula 05 (11)

(ACH2001) Introdução à Programação - Aula 04
(ACH2001) Introdução à Programação - Aula 04(ACH2001) Introdução à Programação - Aula 04
(ACH2001) Introdução à Programação - Aula 04
 
(ACH2001) Introdução à Programação - Aula 06
(ACH2001) Introdução à Programação - Aula 06(ACH2001) Introdução à Programação - Aula 06
(ACH2001) Introdução à Programação - Aula 06
 
(ACH2001) Introdução à Programação - Aula 14
(ACH2001) Introdução à Programação - Aula 14(ACH2001) Introdução à Programação - Aula 14
(ACH2001) Introdução à Programação - Aula 14
 
(ACH2001) Introdução à Programação - Aula 11
(ACH2001) Introdução à Programação - Aula 11(ACH2001) Introdução à Programação - Aula 11
(ACH2001) Introdução à Programação - Aula 11
 
(ACH2001) Introdução à Programação - Aula 19
(ACH2001) Introdução à Programação - Aula 19(ACH2001) Introdução à Programação - Aula 19
(ACH2001) Introdução à Programação - Aula 19
 
(ACH2001) Introdução à Programação - Aula 22
(ACH2001) Introdução à Programação - Aula 22(ACH2001) Introdução à Programação - Aula 22
(ACH2001) Introdução à Programação - Aula 22
 
(ACH2001) Introdução à Programação - Aula 15
(ACH2001) Introdução à Programação - Aula 15(ACH2001) Introdução à Programação - Aula 15
(ACH2001) Introdução à Programação - Aula 15
 
(ACH2001) Introdução à Programação - Aula 20
(ACH2001) Introdução à Programação - Aula 20(ACH2001) Introdução à Programação - Aula 20
(ACH2001) Introdução à Programação - Aula 20
 
Algoritmos Genéticos para Ajuste de Controlador PID em Sistemas Espaciais
Algoritmos Genéticos para Ajuste de Controlador PID em Sistemas EspaciaisAlgoritmos Genéticos para Ajuste de Controlador PID em Sistemas Espaciais
Algoritmos Genéticos para Ajuste de Controlador PID em Sistemas Espaciais
 
(ACH2001) Introdução à Programação - Aula 07
(ACH2001) Introdução à Programação - Aula 07(ACH2001) Introdução à Programação - Aula 07
(ACH2001) Introdução à Programação - Aula 07
 
(ACH2001) Introdução à Programação - Aula 10
(ACH2001) Introdução à Programação - Aula 10(ACH2001) Introdução à Programação - Aula 10
(ACH2001) Introdução à Programação - Aula 10
 

Mais de Norton Trevisan Roman

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05Norton Trevisan Roman
 

Mais de Norton Trevisan Roman (20)

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05
 

Último

Testes de avaliação português 6º ano .pdf
Testes de avaliação português 6º ano .pdfTestes de avaliação português 6º ano .pdf
Testes de avaliação português 6º ano .pdfCsarBaltazar1
 
Nós Propomos! Canil/Gatil na Sertã - Amigos dos Animais
Nós Propomos! Canil/Gatil na Sertã - Amigos dos AnimaisNós Propomos! Canil/Gatil na Sertã - Amigos dos Animais
Nós Propomos! Canil/Gatil na Sertã - Amigos dos AnimaisIlda Bicacro
 
Dados espaciais em R - 2023 - UFABC - Geoprocessamento
Dados espaciais em R - 2023 - UFABC - GeoprocessamentoDados espaciais em R - 2023 - UFABC - Geoprocessamento
Dados espaciais em R - 2023 - UFABC - GeoprocessamentoVitor Vieira Vasconcelos
 
Tema de redação - A prática do catfish e seus perigos.pdf
Tema de redação - A prática do catfish e seus perigos.pdfTema de redação - A prática do catfish e seus perigos.pdf
Tema de redação - A prática do catfish e seus perigos.pdfAnaAugustaLagesZuqui
 
UFCD_8291_Preparação e confeção de peixes e mariscos_índice.pdf
UFCD_8291_Preparação e confeção de peixes e mariscos_índice.pdfUFCD_8291_Preparação e confeção de peixes e mariscos_índice.pdf
UFCD_8291_Preparação e confeção de peixes e mariscos_índice.pdfManuais Formação
 
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptxSlides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptxLuizHenriquedeAlmeid6
 
transcrição fonética para aulas de língua
transcrição fonética para aulas de línguatranscrição fonética para aulas de língua
transcrição fonética para aulas de línguaKelly Mendes
 
EBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptx
EBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptxEBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptx
EBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptxIlda Bicacro
 
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PE
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PEEdital do processo seletivo para contratação de agentes de saúde em Floresta, PE
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PEblogdoelvis
 
Apresentação sobre Robots e processos educativos
Apresentação sobre Robots e processos educativosApresentação sobre Robots e processos educativos
Apresentação sobre Robots e processos educativosFernanda Ledesma
 
SQL Parte 1 - Criação de Banco de Dados.pdf
SQL Parte 1 - Criação de Banco de Dados.pdfSQL Parte 1 - Criação de Banco de Dados.pdf
SQL Parte 1 - Criação de Banco de Dados.pdfAndersonW5
 
Nós Propomos! Sertã 2024 - Geografia C - 12º ano
Nós Propomos! Sertã 2024 - Geografia C - 12º anoNós Propomos! Sertã 2024 - Geografia C - 12º ano
Nós Propomos! Sertã 2024 - Geografia C - 12º anoIlda Bicacro
 
Formação T.2 do Modulo I da Formação HTML & CSS
Formação T.2 do Modulo I da Formação HTML & CSSFormação T.2 do Modulo I da Formação HTML & CSS
Formação T.2 do Modulo I da Formação HTML & CSSPedroMatos469278
 
Power Point sobre as etapas do Desenvolvimento infantil
Power Point sobre as etapas do Desenvolvimento infantilPower Point sobre as etapas do Desenvolvimento infantil
Power Point sobre as etapas do Desenvolvimento infantilMariaHelena293800
 
Apostila-Letramento-e-alfabetização-2.pdf
Apostila-Letramento-e-alfabetização-2.pdfApostila-Letramento-e-alfabetização-2.pdf
Apostila-Letramento-e-alfabetização-2.pdflbgsouza
 
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024azulassessoria9
 
Peça de teatro infantil: A cigarra e as formigas
Peça de teatro infantil: A cigarra e as formigasPeça de teatro infantil: A cigarra e as formigas
Peça de teatro infantil: A cigarra e as formigasBibliotecaViatodos
 
5. EJEMPLOS DE ESTRUCTURASQUINTO GRADO.pptx
5. EJEMPLOS DE ESTRUCTURASQUINTO GRADO.pptx5. EJEMPLOS DE ESTRUCTURASQUINTO GRADO.pptx
5. EJEMPLOS DE ESTRUCTURASQUINTO GRADO.pptxnelsontobontrujillo
 
Slides Lição 7, CPAD, O Perigo Da Murmuração, 2Tr24.pptx
Slides Lição 7, CPAD, O Perigo Da Murmuração, 2Tr24.pptxSlides Lição 7, CPAD, O Perigo Da Murmuração, 2Tr24.pptx
Slides Lição 7, CPAD, O Perigo Da Murmuração, 2Tr24.pptxLuizHenriquedeAlmeid6
 

Último (20)

Testes de avaliação português 6º ano .pdf
Testes de avaliação português 6º ano .pdfTestes de avaliação português 6º ano .pdf
Testes de avaliação português 6º ano .pdf
 
Nós Propomos! Canil/Gatil na Sertã - Amigos dos Animais
Nós Propomos! Canil/Gatil na Sertã - Amigos dos AnimaisNós Propomos! Canil/Gatil na Sertã - Amigos dos Animais
Nós Propomos! Canil/Gatil na Sertã - Amigos dos Animais
 
Dados espaciais em R - 2023 - UFABC - Geoprocessamento
Dados espaciais em R - 2023 - UFABC - GeoprocessamentoDados espaciais em R - 2023 - UFABC - Geoprocessamento
Dados espaciais em R - 2023 - UFABC - Geoprocessamento
 
Tema de redação - A prática do catfish e seus perigos.pdf
Tema de redação - A prática do catfish e seus perigos.pdfTema de redação - A prática do catfish e seus perigos.pdf
Tema de redação - A prática do catfish e seus perigos.pdf
 
UFCD_8291_Preparação e confeção de peixes e mariscos_índice.pdf
UFCD_8291_Preparação e confeção de peixes e mariscos_índice.pdfUFCD_8291_Preparação e confeção de peixes e mariscos_índice.pdf
UFCD_8291_Preparação e confeção de peixes e mariscos_índice.pdf
 
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptxSlides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
 
transcrição fonética para aulas de língua
transcrição fonética para aulas de línguatranscrição fonética para aulas de língua
transcrição fonética para aulas de língua
 
EBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptx
EBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptxEBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptx
EBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptx
 
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PE
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PEEdital do processo seletivo para contratação de agentes de saúde em Floresta, PE
Edital do processo seletivo para contratação de agentes de saúde em Floresta, PE
 
Poema - Aedes Aegypt.
Poema - Aedes Aegypt.Poema - Aedes Aegypt.
Poema - Aedes Aegypt.
 
Apresentação sobre Robots e processos educativos
Apresentação sobre Robots e processos educativosApresentação sobre Robots e processos educativos
Apresentação sobre Robots e processos educativos
 
SQL Parte 1 - Criação de Banco de Dados.pdf
SQL Parte 1 - Criação de Banco de Dados.pdfSQL Parte 1 - Criação de Banco de Dados.pdf
SQL Parte 1 - Criação de Banco de Dados.pdf
 
Nós Propomos! Sertã 2024 - Geografia C - 12º ano
Nós Propomos! Sertã 2024 - Geografia C - 12º anoNós Propomos! Sertã 2024 - Geografia C - 12º ano
Nós Propomos! Sertã 2024 - Geografia C - 12º ano
 
Formação T.2 do Modulo I da Formação HTML & CSS
Formação T.2 do Modulo I da Formação HTML & CSSFormação T.2 do Modulo I da Formação HTML & CSS
Formação T.2 do Modulo I da Formação HTML & CSS
 
Power Point sobre as etapas do Desenvolvimento infantil
Power Point sobre as etapas do Desenvolvimento infantilPower Point sobre as etapas do Desenvolvimento infantil
Power Point sobre as etapas do Desenvolvimento infantil
 
Apostila-Letramento-e-alfabetização-2.pdf
Apostila-Letramento-e-alfabetização-2.pdfApostila-Letramento-e-alfabetização-2.pdf
Apostila-Letramento-e-alfabetização-2.pdf
 
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
ATIVIDADE 1 - ENF - ENFERMAGEM BASEADA EM EVIDÊNCIAS - 52_2024
 
Peça de teatro infantil: A cigarra e as formigas
Peça de teatro infantil: A cigarra e as formigasPeça de teatro infantil: A cigarra e as formigas
Peça de teatro infantil: A cigarra e as formigas
 
5. EJEMPLOS DE ESTRUCTURASQUINTO GRADO.pptx
5. EJEMPLOS DE ESTRUCTURASQUINTO GRADO.pptx5. EJEMPLOS DE ESTRUCTURASQUINTO GRADO.pptx
5. EJEMPLOS DE ESTRUCTURASQUINTO GRADO.pptx
 
Slides Lição 7, CPAD, O Perigo Da Murmuração, 2Tr24.pptx
Slides Lição 7, CPAD, O Perigo Da Murmuração, 2Tr24.pptxSlides Lição 7, CPAD, O Perigo Da Murmuração, 2Tr24.pptx
Slides Lição 7, CPAD, O Perigo Da Murmuração, 2Tr24.pptx
 

(ACH2001) Introdução à Programação - Aula 05

  • 1. Aula 05 – Subrotinas Norton Trevisan Roman 19 de mar¸co de 2020 Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 1 / 34
  • 2. Constantes Suponha que queremos incrementar nossa cabana com uma piscina: Piscina r Sala Quarto Banheiro lat lat/2 lat comp Queremos ent˜ao fazer um programa que calcule a ´area da cabana e da piscina Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 2 / 34
  • 3. Constantes Como? Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 3 / 34
  • 4. Constantes Como? Temos o raio da piscina Basta vermos como adicionar o π Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 3 / 34
  • 5. Constantes Como? Temos o raio da piscina Basta vermos como adicionar o π Podemos fazer: class AreaPiscina { public static void main( String[] args) { // raio da piscina double raio = 2; // ´area da piscina double areap; // valor do pi double pi = 3.14159; areap = pi * raio * raio; System.out.println("´Area: "+ areap); } } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 3 / 34
  • 6. Constantes Como? Temos o raio da piscina Basta vermos como adicionar o π Podemos fazer: E a sa´ıda ser´a “´Area: 12.56636” class AreaPiscina { public static void main( String[] args) { // raio da piscina double raio = 2; // ´area da piscina double areap; // valor do pi double pi = 3.14159; areap = pi * raio * raio; System.out.println("´Area: "+ areap); } } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 3 / 34
  • 7. Constantes E se fizermos: class AreaPiscina { public static void main( String[] args) { // raio da piscina double raio = 2; // ´area da piscina double areap; // valor do pi double pi = 3.14159; pi = 12; areap = pi * raio * raio; System.out.println("´Area: "+ areap); } } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 4 / 34
  • 8. Constantes E se fizermos: Teremos “´Area: 48.0” Inadvertidamente mudamos algo que deveria ser constante class AreaPiscina { public static void main( String[] args) { // raio da piscina double raio = 2; // ´area da piscina double areap; // valor do pi double pi = 3.14159; pi = 12; areap = pi * raio * raio; System.out.println("´Area: "+ areap); } } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 4 / 34
  • 9. Constantes Devemos tornar π constante, fazendo: class AreaPiscina { public static void main( String[] args) { // raio da piscina double raio = 2; // ´area da piscina double areap; // valor do pi final double pi = 3.14159; areap = pi * raio * raio; System.out.println("´Area: "+ areap); } } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 5 / 34
  • 10. Constantes Devemos tornar π constante, fazendo: E, se tentarmos mudar o valor, teremos $ javac AreaPiscina.java AreaPiscina.java:11: cannot assign a value to final variable pi pi = 12; ^ 1 error class AreaPiscina { public static void main( String[] args) { // raio da piscina double raio = 2; // ´area da piscina double areap; // valor do pi final double pi = 3.14159; pi = 12; areap = pi * raio * raio; System.out.println("´Area: "+ areap); } } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 5 / 34
  • 11. Constantes “final” especifica que o valor n˜ao mais poder´a ser mudado no programa Define uma constante class AreaPiscina { public static void main( String[] args) { // raio da piscina double raio = 2; // ´area da piscina double areap; // valor do pi final double pi = 3.14159; areap = pi * raio * raio; System.out.println("´Area: "+ areap); } } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 6 / 34
  • 12. Constantes Alternativamente, podemos usar uma constante j´a definida no java: Math.PI, valendo 3.141592653589793 Math.PI ´e double, por isso areap tamb´em o ´e class AreaPiscina { public static void main( String[] args) { // raio da piscina double raio = 2; // ´area da piscina double areap; areap = Math.PI * raio * raio; System.out.println("´Area: "+ areap); } } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 7 / 34
  • 13. Constantes E como podemos mudar raio * raio? class AreaPiscina { public static void main( String[] args) { // raio da piscina double raio = 2; // ´area da piscina double areap; areap = Math.PI * raio * raio; System.out.println("´Area: "+ areap); } } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 8 / 34
  • 14. Constantes E como podemos mudar raio * raio? Math.pow(a,b) d´a o resultado de ab O resultado tamb´em ´e double class AreaPiscina { public static void main( String[] args) { // raio da piscina double raio = 2; // ´area da piscina double areap; areap = Math.PI * Math.pow(raio,2); System.out.println("´Area: "+ areap); } } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 8 / 34
  • 15. M´etodos Math ´e como se fosse uma biblioteca, que nos fornece o m´etodo pow (al´em da constante PI) N˜ao ´e uma biblioteca, ´e mais que isso, mas veremos mais adiante class AreaPiscina { public static void main( String[] args){ double raio = 2; double areap; areap = Math.PI * Math.pow(raio,2); System.out.println( "´Area: "+ areap); } } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 9 / 34
  • 16. M´etodos Math ´e como se fosse uma biblioteca, que nos fornece o m´etodo pow (al´em da constante PI) N˜ao ´e uma biblioteca, ´e mais que isso, mas veremos mais adiante M´etodo? class AreaPiscina { public static void main( String[] args){ double raio = 2; double areap; areap = Math.PI * Math.pow(raio,2); System.out.println( "´Area: "+ areap); } } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 9 / 34
  • 17. M´etodos Um m´etodo ´e uma implementa¸c˜ao de uma subrotina Nesse caso, pow(a,b) recebe dois valores, a e b, devolvendo o resultado de ab Os valores a e b fornecidos ao m´etodo s˜ao chamados argumentos de seus parˆametros class AreaPiscina { public static void main( String[] args){ double raio = 2; double areap; areap = Math.PI * Math.pow(raio,2); System.out.println( "´Area: "+ areap); } } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 10 / 34
  • 18. M´etodos Vamos ent˜ao juntar os dois programas que vimos at´e agora em um s´o: class AreaCasa { public static void main( String[] args) { float lateral = 11; float cquarto = 7; float areaq; float areas; float areat; double raio = 2; double areap; System.out.println(...); areas = lateral*lateral; System.out.println("..."+areas); areaq = cquarto*(lateral/2); System.out.println("..."+areaq); System.out.println("..."+areaq); areat = areas + 2*areaq; System.out.println("..." + areat); areap = Math.PI * Math.pow(raio,2); System.out.println("..."+areap); } } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 11 / 34
  • 19. M´etodos E qual a saida? Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 12 / 34
  • 20. M´etodos E qual a saida? C´alculo da ´area da casa A ´area da sala ´e 121.0 A ´area do banheiro ´e 38.5 A ´area do quarto ´e 38.5 A ´area total ´e 198.0 A ´area da piscina ´e 12.566370614359172 Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 12 / 34
  • 21. M´etodos Esse programa est´a ficando confuso: Mistura a casa com a piscina Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 13 / 34
  • 22. M´etodos Esse programa est´a ficando confuso: Mistura a casa com a piscina Que fazer? Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 13 / 34
  • 23. M´etodos Esse programa est´a ficando confuso: Mistura a casa com a piscina Que fazer? Podemos dividi-lo em 2 partes: uma para o c´alculo da casa e outra para o c´alculo da piscina Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 13 / 34
  • 24. M´etodos Esse programa est´a ficando confuso: Mistura a casa com a piscina Que fazer? Podemos dividi-lo em 2 partes: uma para o c´alculo da casa e outra para o c´alculo da piscina Como? Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 13 / 34
  • 25. M´etodos Esse programa est´a ficando confuso: Mistura a casa com a piscina Que fazer? Podemos dividi-lo em 2 partes: uma para o c´alculo da casa e outra para o c´alculo da piscina Como? Criando nossos pr´oprios m´etodos Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 13 / 34
  • 26. M´etodos static void areaCasa() { float lateral = 11; float cquarto = 7; float areaq; float areas; float areat; System.out.println("..."); areas = lateral*lateral; System.out.println("..."+areas); areaq = cquarto*(lateral/2); System.out.println("..."+areaq); System.out.println("..."+areaq); areat = areas + 2*areaq; System.out.println("..." + areat); } static double areaPiscina() { double raio = 2; return(Math.PI * Math.pow(raio,2)); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 14 / 34
  • 27. M´etodos static void areaCasa() { float lateral = 11; float cquarto = 7; float areaq; float areas; float areat; System.out.println("..."); areas = lateral*lateral; System.out.println("..."+areas); areaq = cquarto*(lateral/2); System.out.println("..."+areaq); System.out.println("..."+areaq); areat = areas + 2*areaq; System.out.println("..." + areat); } static double areaPiscina() { double raio = 2; return(Math.PI * Math.pow(raio,2)); } Ambos dentro do mesmo programa... Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 14 / 34
  • 28. M´etodos O que significa o void? static void areaCasa() { float lateral = 11; float cquarto = 7; float areaq; float areas; float areat; System.out.println("..."); areas = lateral*lateral; System.out.println("..."+areas); areaq = cquarto*(lateral/2); System.out.println("..."+areaq); System.out.println("..."+areaq); areat = areas + 2*areaq; System.out.println("..."+areat); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 15 / 34
  • 29. M´etodos O que significa o void? Que o m´etodo n˜ao ir´a retornar nenhum valor Ele apenas executa a tarefa e termina static void areaCasa() { float lateral = 11; float cquarto = 7; float areaq; float areas; float areat; System.out.println("..."); areas = lateral*lateral; System.out.println("..."+areas); areaq = cquarto*(lateral/2); System.out.println("..."+areaq); System.out.println("..."+areaq); areat = areas + 2*areaq; System.out.println("..."+areat); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 15 / 34
  • 30. M´etodos O que significa o void? Que o m´etodo n˜ao ir´a retornar nenhum valor Ele apenas executa a tarefa e termina E o static? static void areaCasa() { float lateral = 11; float cquarto = 7; float areaq; float areas; float areat; System.out.println("..."); areas = lateral*lateral; System.out.println("..."+areas); areaq = cquarto*(lateral/2); System.out.println("..."+areaq); System.out.println("..."+areaq); areat = areas + 2*areaq; System.out.println("..."+areat); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 15 / 34
  • 31. M´etodos O que significa o void? Que o m´etodo n˜ao ir´a retornar nenhum valor Ele apenas executa a tarefa e termina E o static? Por hora, apenas aceitemos... static void areaCasa() { float lateral = 11; float cquarto = 7; float areaq; float areas; float areat; System.out.println("..."); areas = lateral*lateral; System.out.println("..."+areas); areaq = cquarto*(lateral/2); System.out.println("..."+areaq); System.out.println("..."+areaq); areat = areas + 2*areaq; System.out.println("..."+areat); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 15 / 34
  • 32. M´etodos O que significa o double? static double areaPiscina() { double raio = 2; return(Math.PI * Math.pow(raio,2)); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 16 / 34
  • 33. M´etodos O que significa o double? Que o m´etodo ir´a retornar um valor do tipo double static double areaPiscina() { double raio = 2; return(Math.PI * Math.pow(raio,2)); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 16 / 34
  • 34. M´etodos O que significa o double? Que o m´etodo ir´a retornar um valor do tipo double Semelhante ao pow(a,b) static double areaPiscina() { double raio = 2; return(Math.PI * Math.pow(raio,2)); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 16 / 34
  • 35. M´etodos O que significa o double? Que o m´etodo ir´a retornar um valor do tipo double Semelhante ao pow(a,b) static double areaPiscina() { double raio = 2; return(Math.PI * Math.pow(raio,2)); } E o return? Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 16 / 34
  • 36. M´etodos O que significa o double? Que o m´etodo ir´a retornar um valor do tipo double Semelhante ao pow(a,b) static double areaPiscina() { double raio = 2; return(Math.PI * Math.pow(raio,2)); } E o return? ´E quando o valor ´e efetivamente retornado A subrotina para a´ı Alternativas: return(Math.PI * Math.pow(raio,2)); return Math.PI * Math.pow(raio,2); Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 16 / 34
  • 37. M´etodos E como usamos isso no corpo do programa? Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 17 / 34
  • 38. M´etodos E como usamos isso no corpo do programa? public static void main( String[] args) { double areap; areaCasa(); areap = areaPiscina(); System.out.println("A ´area da piscina ´e "+areap); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 17 / 34
  • 39. M´etodos E como usamos isso no corpo do programa? Note que areaPiscina() retorna valor, ent˜ao guardamos esse valor em areap public static void main( String[] args) { double areap; areaCasa(); areap = areaPiscina(); System.out.println("A ´area da piscina ´e "+areap); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 17 / 34
  • 40. M´etodos E como usamos isso no corpo do programa? Note que areaPiscina() retorna valor, ent˜ao guardamos esse valor em areap J´a areaCasa() n˜ao retorna nada, ent˜ao apenas a executamos public static void main( String[] args) { double areap; areaCasa(); areap = areaPiscina(); System.out.println("A ´area da piscina ´e "+areap); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 17 / 34
  • 41. Vis˜ao Geral do C´odigo class AreaCasa { static void areaCasa() { float lateral = 11; float cquarto = 7; float areaq; float areas; float areat; System.out.println("..."); areas = lateral*lateral; System.out.println("..."+areas); areaq = cquarto*(lateral/2); System.out.println("..."+areaq); System.out.println("..."+areaq); areat = areas + 2*areaq; System.out.println("..."+areat); } static double areaPiscina() { double raio = 2; return(Math.PI * Math.pow(raio,2)); } public static void main(String[] args) { double areap; areaCasa(); areap = areaPiscina(); System.out.println("..."+areap); } } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 18 / 34
  • 42. M´etodos Qual a utilidade de criarmos nossos pr´oprios m´etodos? public static void main( String[] args) { double areap; areaCasa(); areap = areaPiscina(); System.out.println("A ´area da piscina ´e "+areap); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 19 / 34
  • 43. M´etodos Qual a utilidade de criarmos nossos pr´oprios m´etodos? Clareza: ao olharmos o corpo do programa, vemos claramente o que ´e feito, sem nos preocuparmos com detalhes O m´etodo top-down fica claro public static void main( String[] args) { double areap; areaCasa(); areap = areaPiscina(); System.out.println("A ´area da piscina ´e "+areap); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 19 / 34
  • 44. M´etodos Qual a utilidade de criarmos nossos pr´oprios m´etodos? Clareza: ao olharmos o corpo do programa, vemos claramente o que ´e feito, sem nos preocuparmos com detalhes O m´etodo top-down fica claro public static void main( String[] args) { double areap; areaCasa(); areap = areaPiscina(); System.out.println("A ´area da piscina ´e "+areap); } Portabilidade: se precisarmos, em outro programa, usar a mesma subrotina, ela j´a est´a separada Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 19 / 34
  • 45. M´etodos Nossos m´etodos, contudo, n˜ao s˜ao gerais: public static void main( String[] args) { double areap; areaCasa(); areap = areaPiscina(); System.out.println("A ´area da piscina ´e "+areap); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 20 / 34
  • 46. M´etodos Nossos m´etodos, contudo, n˜ao s˜ao gerais: areaCasa() funciona apenas para casas da dimens˜ao de nosso projeto public static void main( String[] args) { double areap; areaCasa(); areap = areaPiscina(); System.out.println("A ´area da piscina ´e "+areap); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 20 / 34
  • 47. M´etodos Nossos m´etodos, contudo, n˜ao s˜ao gerais: areaCasa() funciona apenas para casas da dimens˜ao de nosso projeto areaPiscina() funciona apenas para piscinas redondas de raio 2 public static void main( String[] args) { double areap; areaCasa(); areap = areaPiscina(); System.out.println("A ´area da piscina ´e "+areap); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 20 / 34
  • 48. M´etodos Nossos m´etodos, contudo, n˜ao s˜ao gerais: areaCasa() funciona apenas para casas da dimens˜ao de nosso projeto areaPiscina() funciona apenas para piscinas redondas de raio 2 public static void main( String[] args) { double areap; areaCasa(); areap = areaPiscina(); System.out.println("A ´area da piscina ´e "+areap); } Como poder´ıamos fazer para tornar esses m´etodos mais gerais? Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 20 / 34
  • 49. Parˆametros A ideia ´e manter o formato da casa e da piscina, mas permitir que seu tamanho varie Como fazˆe-lo? Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 21 / 34
  • 50. Parˆametros A ideia ´e manter o formato da casa e da piscina, mas permitir que seu tamanho varie Como fazˆe-lo? Com parˆametros: static double areaPiscina(double raio){ return(Math.PI * Math.pow(raio,2)); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 21 / 34
  • 51. Parˆametros A ideia ´e manter o formato da casa e da piscina, mas permitir que seu tamanho varie Como fazˆe-lo? Com parˆametros: static double areaPiscina(double raio){ return(Math.PI * Math.pow(raio,2)); } O m´etodo agora deve receber um valor (argumento) em seu parˆametro Como o Math.pow Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 21 / 34
  • 52. Parˆametros Como chamamos esse m´etodo de outras partes do programa? Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 22 / 34
  • 53. Parˆametros Como chamamos esse m´etodo de outras partes do programa? public static void main (String[] args) { double areap; areaCasa(); areap = areaPiscina(2); System.out.println("A ´area da piscina ´e "+ areap); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 22 / 34
  • 54. Parˆametros E o que acontece ao chamarmos areaPiscina(2) de dentro do main? Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 23 / 34
  • 55. Parˆametros E o que acontece ao chamarmos areaPiscina(2) de dentro do main? O sistema ir´a alocar mem´oria para todas as vari´aveis e parˆametros declarados dentro do m´etodo raio areaPiscina Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 23 / 34
  • 56. Parˆametros E o que acontece ao chamarmos areaPiscina(2) de dentro do main? O sistema ir´a alocar mem´oria para todas as vari´aveis e parˆametros declarados dentro do m´etodo raio 2 areaPiscina Colocando o valor passado como parˆametro l´a Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 23 / 34
  • 57. Parˆametros E o que acontece ao chamarmos areaPiscina(2) de dentro do main? O sistema ir´a alocar mem´oria para todas as vari´aveis e parˆametros declarados dentro do m´etodo raio 2 areaPiscina Colocando o valor passado como parˆametro l´a Ao ato de passar um valor externo para dentro de um procedimento, via parˆametro, chamamos de passagem por valor Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 23 / 34
  • 58. Parˆametros E o que acontece ao chamarmos areaPiscina(2) de dentro do main? O sistema ir´a alocar mem´oria para todas as vari´aveis e parˆametros declarados dentro do m´etodo raio 2 areaPiscina Colocando o valor passado como parˆametro l´a Ao ato de passar um valor externo para dentro de um procedimento, via parˆametro, chamamos de passagem por valor Nesse caso, o valor externo ´e copiado para a regi˜ao de mem´oria correspondente ao parˆametro Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 23 / 34
  • 59. Parˆametros O que acontece se tivermos algo assim? public static void main(String[] args) { double areap; double raio = 2; areaCasa(); areap = areaPiscina(raio); System.out.println("A ´area da piscina ´e "+areap); } raio areaPiscina args areap raio 2 main Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 24 / 34
  • 60. Parˆametros O que acontece se tivermos algo assim? O valor de raio, em main, ´e copiado para dentro da vari´avel raio em areaPiscina public static void main(String[] args) { double areap; double raio = 2; areaCasa(); areap = areaPiscina(raio); System.out.println("A ´area da piscina ´e "+areap); } raio 2 areaPiscina args areap raio 2 main Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 24 / 34
  • 61. Parˆametros O que acontece se tivermos algo assim? O valor de raio, em main, ´e copiado para dentro da vari´avel raio em areaPiscina S˜ao duas regi˜oes de mem´oria diferentes public static void main(String[] args) { double areap; double raio = 2; areaCasa(); areap = areaPiscina(raio); System.out.println("A ´area da piscina ´e "+areap); } raio 2 areaPiscina args areap raio 2 main Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 24 / 34
  • 62. Parˆametros O que acontece se tivermos algo assim? O valor de raio, em main, ´e copiado para dentro da vari´avel raio em areaPiscina S˜ao duas regi˜oes de mem´oria diferentes Sim... main ´e um m´etodo tamb´em public static void main(String[] args) { double areap; double raio = 2; areaCasa(); areap = areaPiscina(raio); System.out.println("A ´area da piscina ´e "+areap); } raio 2 areaPiscina args areap raio 2 main Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 24 / 34
  • 63. Parˆametros Incluindo parˆametros em areaCasa(): class AreaCasa { static void areaCasa(float lateral,float cquarto){ float areaq; float areas; float areat; System.out.println("..."); areas = lateral*lateral; System.out.println("..."+areas); areaq = cquarto*(lateral/2); System.out.println("..."+areaq); System.out.println("..."+areaq); areat = areas + 2*areaq; System.out.println("..."+areat); } static double areaPiscina(double raio){ return Math.PI* Math.pow(raio,2); } public static void main(String[] args){ double areap; areaCasa(11,7); areap = areaPiscina(2); System.out.println("..."+ areap); } } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 25 / 34
  • 64. M´etodos e Mem´oria Como fica o m´etodo areaCasa na mem´oria? static void areaCasa(float lateral, float cquarto) { float areaq; float areas; float areat; System.out.println("..."); areas = lateral*lateral; System.out.println("..."+areas); areaq = cquarto*(lateral/2); System.out.println("..."+areaq); System.out.println("..."+areaq); areat = areas + 2*areaq; System.out.println("..."+areat); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 26 / 34
  • 65. M´etodos e Mem´oria Como fica o m´etodo areaCasa na mem´oria? Ao ser chamado (ou invocado) em main, ser´a separada uma regi˜ao na mem´oria para esse m´etodo static void areaCasa(float lateral, float cquarto) { float areaq; float areas; float areat; System.out.println("..."); areas = lateral*lateral; System.out.println("..."+areas); areaq = cquarto*(lateral/2); System.out.println("..."+areaq); System.out.println("..."+areaq); areat = areas + 2*areaq; System.out.println("..."+areat); } areaCasa Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 26 / 34
  • 66. M´etodos e Mem´oria Como fica o m´etodo areaCasa na mem´oria? Ao ser chamado (ou invocado) em main, ser´a separada uma regi˜ao na mem´oria para esse m´etodo Essa regi˜ao conter´a todas suas vari´aveis internas (locais), e todos seus parˆametros static void areaCasa(float lateral, float cquarto) { float areaq; float areas; float areat; System.out.println("..."); areas = lateral*lateral; System.out.println("..."+areas); areaq = cquarto*(lateral/2); System.out.println("..."+areaq); System.out.println("..."+areaq); areat = areas + 2*areaq; System.out.println("..."+areat); } areaCasa lateral cquarto areaq areas areat Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 26 / 34
  • 67. M´etodos e Mem´oria public static void main( String[] args) { ... areaCasa(11,7); ... } Os valores de entrada s˜ao ent˜ao copiados para dentro dos parˆametros static void areaCasa(float lateral, float cquarto) { float areaq; float areas; float areat; System.out.println("..."); areas = lateral*lateral; System.out.println("..."+areas); areaq = cquarto*(lateral/2); System.out.println("..."+areaq); System.out.println("..."+areaq); areat = areas + 2*areaq; System.out.println("..."+areat); } areaCasa lateral 11 cquarto 7 areaq areas areat Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 27 / 34
  • 68. M´etodos e Mem´oria Considerando o programa como um todo, como agir´a na mem´oria? public static void main(String[] args){ double areap; areaCasa(11,7); areap = areaPiscina(2); System.out.println("A ´area da piscina ´e "+areap); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 28 / 34
  • 69. M´etodos e Mem´oria Considerando o programa como um todo, como agir´a na mem´oria? Ao iniciar main, ser´a alocado espa¸co para suas vari´aveis e parˆametros args areap main public static void main(String[] args){ double areap; areaCasa(11,7); areap = areaPiscina(2); System.out.println("A ´area da piscina ´e "+areap); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 28 / 34
  • 70. M´etodos e Mem´oria Considerando o programa como um todo, como agir´a na mem´oria? Ao iniciar main, ser´a alocado espa¸co para suas vari´aveis e parˆametros Ent˜ao areaCasa(11,7) ´e executada, e o mesmo processo ocorre args areap main public static void main(String[] args){ double areap; areaCasa(11,7); areap = areaPiscina(2); System.out.println("A ´area da piscina ´e "+areap); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 28 / 34
  • 71. M´etodos e Mem´oria Aloca-se espa¸co, copiando-se os valores aos parˆametros: args areap main areaCasa lateral 11 cquarto 7 areaq areas areat public static void main(String[] args){ ... areaCasa(11,7); ... } static void areaCasa(float lateral, float cquarto) { float areaq; float areas; float areat; System.out.println("..."); areas = lateral*lateral; System.out.println("..."+areas); areaq = cquarto*(lateral/2); System.out.println("..."+areaq); System.out.println("..."+areaq); areat = areas + 2*areaq; System.out.println("..."+areat); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 29 / 34
  • 72. M´etodos e Mem´oria A cada atribui¸c˜ao, a mem´oria correspondente ´e atualizada args areap main areaCasa lateral 11 cquarto 7 areaq areas 121 areat public static void main(String[] args){ ... areaCasa(11,7); ... } static void areaCasa(float lateral, float cquarto) { float areaq; float areas; float areat; System.out.println("..."); areas = lateral*lateral; System.out.println("..."+areas); areaq = cquarto*(lateral/2); System.out.println("..."+areaq); System.out.println("..."+areaq); areat = areas + 2*areaq; System.out.println("..."+areat); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 30 / 34
  • 73. M´etodos e Mem´oria A cada atribui¸c˜ao, a mem´oria correspondente ´e atualizada args areap main areaCasa lateral 11 cquarto 7 areaq 38.5 areas 121 areat public static void main(String[] args){ ... areaCasa(11,7); ... } static void areaCasa(float lateral, float cquarto) { float areaq; float areas; float areat; System.out.println("..."); areas = lateral*lateral; System.out.println("..."+areas); areaq = cquarto*(lateral/2); System.out.println("..."+areaq); System.out.println("..."+areaq); areat = areas + 2*areaq; System.out.println("..."+areat); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 30 / 34
  • 74. M´etodos e Mem´oria A cada atribui¸c˜ao, a mem´oria correspondente ´e atualizada args areap main areaCasa lateral 11 cquarto 7 areaq 38.5 areas 121 areat 198 public static void main(String[] args){ ... areaCasa(11,7); ... } static void areaCasa(float lateral, float cquarto) { float areaq; float areas; float areat; System.out.println("..."); areas = lateral*lateral; System.out.println("..."+areas); areaq = cquarto*(lateral/2); System.out.println("..."+areaq); System.out.println("..."+areaq); areat = areas + 2*areaq; System.out.println("..."+areat); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 30 / 34
  • 75. M´etodos e Mem´oria Ao terminar areaCasa, sua mem´oria ´e limpa, e areaPiscina ´e rodada: args areap main static double areaPiscina(double raio) { return Math.PI * Math.pow(raio,2); } public static void main(String[] args) { double areap; areaCasa(11,7); areap = areaPiscina(2); System.out.println("A ´area da piscina ´e "+areap); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 31 / 34
  • 76. M´etodos e Mem´oria Ao terminar areaCasa, sua mem´oria ´e limpa, e areaPiscina ´e rodada: args areap main areaPiscina raio 2 static double areaPiscina(double raio) { return Math.PI * Math.pow(raio,2); } public static void main(String[] args) { double areap; areaCasa(11,7); areap = areaPiscina(2); System.out.println("A ´area da piscina ´e "+areap); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 31 / 34
  • 77. M´etodos e Mem´oria Ao terminar areaPiscina, sua mem´oria ´e limpa, e o resultado ´e armazenado em areap: args areap12.566370614359172 main public static void main( String[] args){ double areap; areaCasa(11,7); areap = areaPiscina(2); System.out.println("A ´area da piscina ´e "+areap); } Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 32 / 34
  • 78. M´etodos e Mem´oria Ao terminar areaPiscina, sua mem´oria ´e limpa, e o resultado ´e armazenado em areap: public static void main( String[] args){ double areap; areaCasa(11,7); areap = areaPiscina(2); System.out.println("A ´area da piscina ´e "+areap); } Finalmente, quando main terminar, tamb´em ser´a removida Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 32 / 34
  • 79. M´etodos e Mem´oria Repare que toda vez que um m´etodo termina ele libera a mem´oria que ocupava Ent˜ao, qual a utilidade de criarmos nossos pr´oprios m´etodos al´em de clareza e portabilidade? Melhor uso da mem´oria: as vari´aveis relevantes ao sub-problema (sub-rotina) ocupam a mem´oria apenas durante a solu¸c˜ao desse sub-problema Norton Trevisan Roman Aula 05 – Subrotinas 19 de mar¸co de 2020 33 / 34