Você está na página 1de 71

Técnicas de

Programação I
Curso Superior de Tecnologia em Desenvolvimento de
Software Multiplataforma

Aula 06

Prof. Claudio Benossi


Herança e Classes
Abstratas
Na aula anterior ...

3
Na aula anterior ...
Como o próprio nome sugere, na orientação a objetos o termo
herança se refere a algo herdado.
Em Java, a herança ocorre quando uma classe passa a herdar
características (atributos e métodos) definidas em uma outra
4
classe, especificada como sendo sua ancestral ou superclasse.
A técnica da herança possibilita o compartilhamento ou
reaproveitamento de recursos definidos anteriormente em uma
outra classe.
A classe fornecedora dos recursos recebe o nome de
superclasse e a receptora dos recursos de subclasse.
Na aula anterior ...
Uma classe derivada herda a estrutura de atributos e métodos de sua classe
“base”, mas pode seletivamente:
adicionar novos métodos
estender a estrutura de dados
redefinir a implementação de métodos já existentes 5

Pessoa Diagrama UML


Exemplo:
simplificado (não mostra
os métodos e atributos)
Cliente Fornecedo
r
Na aula anterior ... Pessoa
- nome: String
- fone: String Sobreposição
Pessoa()
Pessoa(n: String, f:
String)
//Métodos de acesso
6
print(): void

Cliente Fornecedor
- valorDivida: float - valorCompra: float
Cliente() Fornecedor ()
Cliente(n: String, f: String, v: Fornecedor (n: String, f: String, vc:
float) float)
//Métodos de acesso //Métodos de acesso
print(): void print(): void
Na aula anterior ...
Nos ajuda a lidar com a complexidade.
Generalização
MeiodeComunicacao
7

Carta Telefone Jornal

Especialização
A classe MeiodeComunicacao neste caso é abstrata e pode representar
um domínio.
Na aula anterior ...
Uma classe abstrata é uma classe que: Você pode ter métodos
Provê organização concretos em uma classe
Não possui “instâncias” Classe
abstrata
abstrata
Pode ter métodos abstratos ou concretos
ContaBancaria
# numero: String 8

Se você definir um método +setNumero(numero: String):


abstrato sua classe void Classe
+getNumero(): String concreta
OBRIGATORIAMENTE DEVE
SER ABSTRATA.
ContaCorrente ContaPoupanca

No diagrama o nome da classe e


+setNumero(numero: +setNumero(numero:
métodos abstratos são apresentados String): void String): void
em itálico +getNumero(): String +getNumero(): String
Na aula anterior ...
São estruturas similares às classes abstratas, que
definem a especificação de funcionalidades, sem a
implementação das mesmas.
9

Uma interface Java pode ser definida como uma “classe


abstrata pura”, pois não pode possuir atributos (exceto
constantes) nem definições de métodos, nem construtor.
Na aula anterior ...
Uma interface estabelece uma espécie de contrato que é obedecido por
uma classe.
Quando uma classe implementa uma interface, garante-se que
todas as funcionalidades especificadas pela interface serão
oferecidas pela classe.
Uma classe pode implementar 10

<< Cliente >>


dependência várias interfaces, sendo um
getcodigo()
setcodigo() mecanismo elegante para se
trabalhar com herança
Contrato múltipla em Java.
ClientePF cpf ClientePJ cnpj

getcodigo() getcodigo()
setcodigo() setcodigo()
Na aula anterior ...
Pessoa
- nome: String << Seguranca >>
- fone: String
Pessoa()
+validar(): boolean
Pessoa(n: String, f: String)
//Métodos de acesso
print(): void 11

Cliente Fornecedor
- valorDivida: float - valorCompra: float
Cliente() Fornecedor ()
Cliente(n: String, f: String, v: float) Fornecedor (n: String, f: String, vc: float)
//Métodos de acesso //Métodos de acesso
print(): void print(): void
calculaJuros(tx: float): float calculaImpostos(imposto: float): void
Na aula anterior ... Exercício
Forma

+area(): float
+mostra(): void
+perimetro():
float
12

Circunferencia Triangulo
Retangulo
- raio: float - base: float
- altura: float
+Circunferencia(r: float) +Retangulo(b: float, a: float)
+Triangulo(b: float, h: float)
+setCircunferencia(r: float): +area(): float
//métodos de acesso
void
+area(): float +perimetro(): float
+getCircunferencia(): float
+mostra(): void +mostra(): void
+area(): float
+perimetro(): float
+mostra(): void
Herança

13
Herança

14
Herança

15

Pessoa Diagrama UML



simplificado (não
mostra os métodos
e atributos)
Cliente Fornecedor
Interfaces - Exemplo
Pessoa
- nome: String << Seguranca >>
- fone: String
Pessoa() +validar(): boolean
Pessoa(n: String, f: String)
//Métodos de acesso
print(): void 16

Cliente Fornecedor
- valorDivida: float - valorCompra: float
Cliente() Fornecedor ()
Cliente(n: String, f: String, v: float) Fornecedor (n: String, f: String, vc: float)
//Métodos de acesso //Métodos de acesso
print(): void print(): void
calculaJuros(tx: float): float calculaImpostos(imposto: float): void
Interfaces - Exemplos

17
Interfaces - Exemplos

18
Interfaces - Exemplos

19
Interfaces - Exemplos

20
Interfaces - Exemplos


21



22
23
24
25
Interfaces - Exemplos

26
Interfaces x Classes Abstratas

27
Forma

Exercício 01 +area(): float


+mostra(): void
+perimetro():
float

Circunferencia Triangulo
- raio: float - base: float
- altura: float 28
+Circunferencia(r: float)
+Triangulo(b: float, h: float)
+setCircunferencia(r: float): void
//métodos de acesso
+getCircunferencia(): float +area(): float
+area(): float +mostra(): void
+perimetro(): float
+mostra(): void
Retangulo

+Retangulo(b: float, a: float)


+area(): float
+perimetro(): float
+mostra(): void
Exercício 01

Circunferencia O método area() deve retornar valor da área


- raio: float da circunferência, sabendo que area = *r2
+Circunferencia(r: float) 29

+setCircunferencia(r: float): void


O método perimetro() deve retornar o valor
+getCircunferencia(): float do perímetro: perimetro = 2**r
+area(): float
+perimetro(): float Em ambos os métodos utilize a constante
+mostra(): void Math.PI da classe Math.

O método mostra deve exibir os valores de


todos os atributos da classe
Exercício 01

Retangulo O método area() deve retornar valor da área da


circunferência, sabendo que area = base * altura
+Retangulo(b: float, a: 30
float)
O método perimetro() deve retornar o valor do
+area(): float
perímetro: perimetro = (base * altura) * 2
+perimetro(): float
+mostra(): void
O método mostra deve exibir os valores de todos os
atributos da classe
Exercício 01

31
Exercício 01

32
Exercício 01

33
Exercício 01


34



Exercício 01

35
Exercício 01

36
Exercício 01

37
Exercício 01

38
Exercício 01

39
Estrutura de Repetição
Desafio
Faça um programa que solicite ao usuário um número, calcule e mostre a
tabuada desse número.
Estruturas de repetição

Também conhecidas como laços (loop).


Utilizadas para executar repetidamente uma instrução ou um
bloco de instruções enquanto uma determinada condição for
verdadeira.
As estruturas de repetição em Java são:
▪ for
▪ while
▪ do ... while
Estruturas de repetição
Para determinarmos qual é a estrutura mais adequada, devemos saber:
o número de vezes que o trecho programa vai ser executado: laços
contados
ou a condição para que ela aconteça: laços condicionais

Laços contados: um contador irá auxiliar no laço. Neste laço,


a repetição da estrutura repete-se até que o contador atinja
o limite estipulado na condição.

Laços condicionais: o valor é desconhecido e devemos


utilizar uma variável com valor predefinido em uma condição
dentro do laço para finalizarmos a repetição.
Estrutura de repetição
Independente do tipo de laço, todos são constituídos de três partes:

Inicialização(ões) da(s) variável(is) de controle


Condição(ões)
Atualização da(s) variável(is) de controle
Estrutura de Repetição
Quando tivermos que repetir um trecho de um programa por
determinado número de vezes, precisaremos do auxílio de
uma estrutura de repetição.
45

As estruturas de repetição se dividem em ENQUANTO, REPITA,


PARA e para determinarmos qual é a estrutura mais adequada
para um determinado programa, devemos saber qual o
número de vezes que o trecho programa vai ser executado
(laços contados) ou a condição para que ela aconteça (laços
condicionais).
Estrutura de Repetição
Na linguagem Java os comandos que
implementam estas estruturas de repetição
são: while, do-while e for. 46
Estrutura de Repetição
Estrutura de repetição while

Comando da linguagem Java.


{ iniciar a variável de controle }
47
while (condição) {
{instruções}
{atualizar a variável de controle}
};

Obs: as chaves { } são necessárias para uma estrutura de bloco (quando


desejamos repetir mais de um comando). Se formos repetir um comando
simples poderíamos omitir estas chaves.
Estrutura de Repetição

48
Condição de execução

Variável
Contador Variável
Acumulador
Estrutura de Repetição
Estrutura de repetição do-while

Comando da linguagem Java.


{ iniciar a variável de controle }
49
do {
{instruções}
{atualizar a variável de controle}
} while (condição);

Obs: as chaves { } são necessárias para uma estrutura de bloco


(quando desejamos repetir mais de um comando). Se formos repetir
um comando simples poderíamos omitir estas chaves.
Exemplos de Estrutura de Repetição

Lê o que foi
digitado como valor
float
50

Variável
Variável Acumulador
Contador

Lê a resposta que
Condição de execução
define se a
repetição
continua
Estrutura de Repetição
while vs do-while

51
Estrutura de Repetição
Estrutura de repetição for

Essa estrutura precisa de uma variável para controlar a contagem do ciclo,


que ocorre na própria estrutura.
52

Observe que há uma economia de instruções, pois a própria estrutura se


encarrega de iniciar, testar a condição e atualizar a variável que controla o
laço.

for (inicialização; condição; atualização) {


{instruções}
}
Permite a leitura de
Estrutura de Repetição
entrada de dados no
prompt

Condição de
execução
53

Variável
Variável
Contador
Acumulador

Lê o que foi digitado


como valor inteiro
Estrutura de Repetição
Estrutura de repetição for

O laço contado for funciona da seguinte maneira:


▹ no início da execução do laço a inicialização é executada. 54

▹ A seguir, a condição é testada.


▹ Se o resultado do teste for falso as instruções não são
executadas e a execução do algoritmo prossegue pelo
primeiro comando seguinte ao comando for.
▹ Por outro lado, se o valor do teste for verdadeiro, então as
instruções são executadas e ao final das instruções é feita a
atualização da variável de controle.
Estrutura de Repetição
Estrutura de repetição for

Obs: as chaves { } são necessárias para uma estrutura de bloco


(quando desejamos repetir mais de um comando). 55

Se formos repetir um comando simples poderíamos omitir


estas chaves.
Desafio
Adivinhe meu número: Crie um jogo onde o computador escolhe um
número inteiro aleatório entre 0 e 20.
Leia a entrada do usuário para tentar acertar o número;
Se errar informar ao usuário se o número é maior ou menor;
Repetir até o usuário acertar.
Observação: Para gerar um número
aleatório utilize a classe Random:

Random aleatorio = new Random();


int num = aleatorio.nextInt(20);
Desafio
# Desafio 2: Adivinhe o número
Exercícios - Estrutura de Repetição
01-) Desenvolva um programa na linguagem Java que leia a
quantidade de valores que serão processados e depois leia os
valores e calcule a média dos mesmos.
58

Utilize a estrutura de repetição PARA.


Exercícios - Estrutura de Repetição
01-) Algoritmo:
algoritmo Exercio_01
inteiro: i, n
real: valor, soma
inicio 59
escrever ("Digite a quantidade de valores a serem processados:”)
ler (n)
soma <- 0
para (i = 1; i<= n; i++)
escrever (“Digite um valor: “)
ler (valor)
soma <- soma + valor
fim para
escrever ("A média dos valores digitados é: " + soma / n)
fim
60
Exercícios - Estrutura de Repetição
02-) Desenvolva um programa na linguagem Java que leia um
grupo de valores (não sabemos quantos são) para calcular e
visualizar a média desses valores e, também, determinar e
visualizar o maior deles. 61

Utilize uma estrutura de repetição ENQUANTO ou REPITA.


Exercícios - Estrutura de Repetição
02-) Algoritmo:
algoritmo Exercio_02
inteiro: i, n
real: valor, soma
inicio
escrever ("Digite a quantidade de valores a serem processados:”)
62
ler (n)
soma <- 0
i <- 1
enquanto (i<= n)
escrever (“Digite um valor: “)
ler (valor)
soma <- soma + valor
i <- 1 + 1
fim para
escrever ("A média dos valores digitados é: " + soma / n)
fim
63
Estrutura de Repetição
Vamos desenvolver uma aplicação para desenvolver a tabuada de acordo
com o valor apresentado pelo usuário:

Tabuada
64
- numero: int
- operador: char
+ Tabuada(numero:int, operador: char)
+ getNumero(): int
+ getOperador(): char
+ setNumero(numero: int): void
+ setOperador(operador: char): void
+ geraTabuada(): String
Estrutura de Repetição

65
Estrutura de Repetição

66
Estrutura de Repetição


67

Estrutura de Repetição

68
Estrutura de Repetição

69
“Coragem é ir de
falha em falha sem
perder o
entusiasmo”

Winston Churchill
Obrigado!
Se precisar …
Prof. Claudio Benossi

Claudio.benossi@fatec.sp.gov.br

Você também pode gostar