SlideShare uma empresa Scribd logo
Aula 003
Professor Dal Prá
Objetivos das próximas aulas

• Orientação a objetos
– Conceitos
– UML
• Como criar modelos (diagramas) que representem o que
iremos desenvolver em Java

– Como aplicar este conceitos no Java

Base para todo o restante do curso

Professor Dal Prá
Orientação a Objetos

•
•
•
•

criada em 1967 (Simula)
SmallTalk (Anos 70 / Xerox )
C++ ( C com OO / AT&T)
Atualmente
–
–
–
–

Java
Object Pascal (Delphi)
.NET
PHP

• Usar linguagem OO híbrida não garante que
o sistema seja OO;
Professor Dal Prá
Orientação a Objetos

• Novo paradigma, ou seja, nova forma de
pensar
• Abstração mais próxima do mundo real
– Conta Bancária
• Atributos: saldo, limite;
• Funcionalidades: debitar, creditar, transferir;

– Não significa que será totalmente intuitivo;
• Desenvolver software não é fácil para todos;
Professor Dal Prá
Orientação a Objetos

• Padroniza o pensamento
– Análise orientada a objetos;
– Projeto orientado a objetos;
– Programação orientada a objetos (POO – OOP);

Professor Dal Prá
Orientação a Objetos

• Melhor organização do sistema
– cada objeto terá uma função específica:
• Conta Bancária: controla a movimentações do
correntista;
• Correntista: guardar informações do cliente do banco;
• Formulário: receber informações digitadas pelo usuário;
• Botão: Executar uma ação após o clique do usuário;

– Maior Produtividade (não precisa repetir uma
lógica que é de responsabilidade de outro objeto);

Professor Dal Prá
Orientação a Objetos

Alta coesão
• Objetos super especializados
– Maior reusabilidade dos objetos
– Menor impacto nas manutenções
– Maior velocidade nas manutenções

Não criar estruturas que “FAZEM TUDO”

Professor Dal Prá
Orientação a Objetos

• Um sistema orientado a objetos é um grande
diálogo entre objetos (cooperação);

Interface com o
Usuário

1 - Você pode me passar o extrato do
Correntista Junior durante o período X?
4 – Segue o extrato do correntista.

3 - Ok. Ai está a lista de
movimentações.

Acesso ao Banco
de Dados
Professor Dal Prá

Lógica de
Negócios da
Conta Bancaria
2 - Você pode me
passar o meu histórico
de movimentações
durante o período X ?
Conceitos Básicos OO

• Abstração
• Classes
– Atributos
• Tipos
• Valores padrão

– Métodos
• Assinaturas
• Repostas

• Objetos
– Referência
Professor Dal Prá
Conceitos Avançados OO

• Relacionamentos
– Dependência
– Herança
• Conversões

– Associação

• Encapsulamento
– Modificadores de acessos
• Classes
• Atributos
• Métodos

– Padrão de codificação de classes no Java
Professor Dal Prá
Conceitos Avançados

• Polimorfismo
– Classes abstratas
– Interfaces
• Diminuir o acoplamento entre classes

Professor Dal Prá
Como representar estes
conceitos antes mesmo de
implementá-los?

Professor Dal Prá
Unified Modeling Language - UML

• Linguagem de Modelagem Unificada
– Linguagem: o que for “escrito” em UML
deve ser entendido;
– Modelagem: imagens valem mais do que mil
palavras;
– Unificada: melhores idéias entre várias
técnicas (Booch, OOSE, OMT);

• Não é padrão, mas é muito utilizada;
• Pré-requisito em muitas oportunidades;
Professor Dal Prá
Unified Modeling Language - UML

• Modelos expressam
– Aspectos estáticos: informações a serem
manipuladas ou armazenadas;
– Aspectos dinâmicos: perguntas e
respostas entre objetos e mudança de
estados (mudança nos valores
armazenados nos objetos);

Professor Dal Prá
Mas para que vamos usar isso ?

• Modelar
–
–
–
–

Compreender o que vamos fazer;
Projetar antes de codificar;
Documentar
Facilitar a comunicação entre os membros da
equipe e também o cliente;

• $ em manutenção > $ desenvolvimento;

Professor Dal Prá
Para simplificar ...

Não vamos usar 100% da UML

Professor Dal Prá
Abstração

• Não é um conceito exclusivo da OO;
• Problemas do mundo real  Conceitos de
programação  linguagem de programação;
• Linguagem OO a torna mais fácil;

• Nomes dos objetos do mundo real serão
utilizados nos objetos que estarão dentro do
programa;

Professor Dal Prá
Abstração

• Nosso cliente pedirá:
“ Preciso controlar os saques, depósitos e
dados das contas bancárias dos meus
clientes. Preciso saber o número da
conta, o nome do cliente, qual o saldo e
o limite ”
Professor Dal Prá
Abstração

• O analista/arquiteto vai converter isso em um
modelo
– UML, no caso de OO

• O Programador vai pegar o modelo definido e
vai materializar ele nas linhas de códigos
– Linguagens de programação;
• Java, no nosso caso

– Ferramentas;
– Bancos de dados;
– Comunicação com periféricos;
Professor Dal Prá
Vamos abstrair o problema
de nosso cliente

Professor Dal Prá
Sistema OO é composto
por vários objetos
cooperantes, mas como
eu defino um objeto?
Professor Dal Prá
Classes

• Representa um novo tipo de dado
– Características de um objeto
UML

ContaBancaria

Professor Dal Prá
Podemos dizer que ...

• É o projeto que definirá como será um objeto
dentro do sistema
– Podemos fazer uma analogia ao projeto de uma casa
• Mostra como será a casa, porém não é a casa construída!

Professor Dal Prá
Assim se que se “declara” uma clase no Java

class NomeDaClasse {
// corpo da classe
}
Arquivo: NomeDaClasse.java

Professor Dal Prá
Classes

class ContaBancaria {

}
Arquivo: ContaBancaria.java

Professor Dal Prá
Temos a classe, mas como
vamos guardar os dados
dentro desta classe?

Professor Dal Prá
Classes - Atributos

• Definem os possíveis estados do objeto
– Atributos
• Nome
• Tipo
– Valor padrão
– Valor inicial

Professor Dal Prá
Classes – Atributos

UML
ContaBancaria

numero: int
nomeCliente : String
saldo : double
limiteCredito : double = 100.0

Professor Dal Prá
Classes – Atributos

Java
// virá com o valor padrão
TipoDoAtributo nomeDoAtributo;

// definido um valor inicial
TipoDoAtributo nomeDoAtributo = valorInicial;

Professor Dal Prá
Classes – Atributos
class ContaBancaria{
int numero;
String nomeCliente;
double saldo;
double limiteCredito = 100.0;
}

Professor Dal Prá
Classes – Atributos

• Valores default
–numéricos : 0
–boolean : false

Professor Dal Prá
Agora temos

• novo tipo de dado chamado ContaBancaria
– Poderá armazenar
•
•
•
•

numero
nomeCliente
saldo
limiteCredito

• Mas e o que ele irá fazer? Qual será a
contribuição dele para o sistema? Ele apenas
armazenará informações?
Professor Dal Prá
Classes – Métodos

• Define quais ações poderão ser executadas
– Habilidades que estarão definidas em uma classe

– Método
• Assinatura ( regra para formular uma pergunta )
– Argumentos
» Nome
» Tipo

• Retorno ( resposta à pergunta )
– Sem resposta
– Tipo

Professor Dal Prá
Classes – Métodos

UML
ContaBancaria
numero: int
nomeCliente : String
saldo : double

limiteCredito : double = 100.0

saca ( valor : double ) : boolean;
deposita ( valor : double ) : void;

Professor Dal Prá
Classes – Métodos

Java
retorno nomeMetodo(tipoArgumento nomeArgumento){
// corpo do método
}
retorno nomeMetodo(tipoArgumento1 nomeArgumento1,...,
tipoArgumentoN nomeArgumentoN){
// corpo do método
}

Professor Dal Prá
Classes – Métodos

Java
retorno nomeMetodo(tipoArgumento nomeArgumento){
// corpo do método
}

1.
2.

Sempre será necessário definir um retorno, mesmo
que seja NADA
O nome do método dos argumentos deverá ser
intuitivo, para facilitar a comunicação entre os
desenvolvedores
Professor Dal Prá
Classe – Métodos
class ContaBancaria {
int numero;
String nomeCliente;
double saldo;
double limiteCredito = 100.0;

boolean saca(double valor) {
saldo -= valor;
return true;
}
void deposita(double valor){
saldo += valor;
}
}
Professor Dal Prá
Classes – Métodos

1
3
2
boolean saca(double valor) {
saldo -= valor;
4
return true;
}
5

1. Tipo de retorno (resposta)
2. Nome do método (v. imperativo)
3. Argumento esperado (para formular a
pergunta)
4. Executando a ação
5. Retornando o valor esperado (tipo do
return tem que ser igual ao definido no
método)

Professor Dal Prá
Classes – Métodos

1

2

3

void deposita(double valor){
saldo += valor; 4
}
1. void == sem nada ( não vai retornar
nenhum valor )
2. Nome do método
3. Argumentos
4. Executando a ação
5. Aonde está o return?
Professor Dal Prá
Classes

Definido um novo tipo de
dado, como faço para
executar ele, ou seja,
como faço para dar vida a
esta nova estrutura dentro
do sistema ?
Professor Dal Prá
Objeto

• É uma execução de uma determinada classe
– instância

Professor Dal Prá
Podemos dizer que ...

• É o projeto posto em prática
– É casa construída segundo o que foi definido no
projeto

Professor Dal Prá
Objeto
public class Programa {
public static void main(String[] args) {
ContaBancaria contaJunior = new ContaBancaria();
contaJunior.numero = 1143166;
contaJunior.nomeCliente = "José Dal Prá Junior";
contaJunior.saldo = 100.0;
contaJunior.limiteCredito = 10.0;

contaJunior.deposita(10);
System.out.println(contaJunior.saldo);

}
}
Professor Dal Prá
Objeto

contaJunior é uma variável
do tipo ContaBancaria, certo?

Professor Dal Prá
Objeto
• contaJunior é uma variável que guarda o ponto da
memória (um número) aonde um objeto do tipo
ContaBancaria foi criado
– Pense em um copo (variável) com um controle remoto

• Chamasse variável de referência para um objeto
– Objeto, para simplificar

Professor Dal Prá
Objeto
public class Programa {
public static void main(String[] args) {
ContaBancaria contaJunior = new ContaBancaria();
contaJunior.numero = 1143166;
contaJunior.nomeCliente = "José Dal Prá Junior";
contaJunior.saldo = 100.0;
Pede para o Java reservar um
contaJunior.limiteCredito = 10.0;
espaço na memória e criar um

contaJunior.deposita(10);
System.out.println(contaJunior.saldo);
}
}
Professor Dal Prá

novo objeto do tipo
ContaBancaria
Objeto
public class Programa {
public static void main(String[] args) {
ContaBancaria contaJunior = new ContaBancaria();
contaJunior.numero = 1143166;
contaJunior.nomeCliente = "José Dal Prá Junior";
contaJunior.saldo = 100.0;
contaJunior.limiteCredito = 10.0; Guarda o endereço da memória
aonde está o OBJETO

contaJunior.deposita(10);
System.out.println(contaJunior.saldo);
}
}
Professor Dal Prá
Objeto
public class Programa {
public static void main(String[] args) {
ContaBancaria contaJunior = new ContaBancaria();
contaJunior.numero = 1143166;
contaJunior.nomeCliente = "José Dal Prá Junior";
contaJunior.saldo = 100.0;
contaJunior.limiteCredito = 10.0;

contaJunior.deposita(10);

Navega pelo “endereço de
memória” aonde nosso objeto
System.out.println(contaJunior.saldo);está e joga valores para os
atributos dele

}
}
Professor Dal Prá
Objeto
public class Programa {
public static void main(String[] args) {
ContaBancaria contaJunior = new ContaBancaria();
contaJunior.numero = 1143166;
contaJunior.nomeCliente = "José Dal Prá Junior";
Utiliza a variável que guarda
contaJunior.saldo = 100.0;
o endereço da memória aonde
contaJunior.limiteCredito = 10.0;

contaJunior.deposita(10);
System.out.println(contaJunior.saldo);
}
}
Professor Dal Prá

está nosso objeto para poder
chamar um método, ou seja,
acionar uma habilidade do
nosso objeto
Objeto
public class Programa {
Se eu executar este código, o
public static void main(String[] args) que acontece ? Por quê?
{
ContaBancaria contaJunior = new ContaBancaria();
ContaBancaria conta2 = contaJunior;
conta2.numero = 1143166;
conta2.nomeCliente = "José Dal Prá Junior";
conta2.saldo = 100.0;
conta2.limiteCredito = 10.0;
conta2.deposita(10);
System.out.println(contaJunior.saldo);
}
}
Professor Dal Prá
Objeto
public class Programa {
Estão apontando para o mesmo
public static void main(String[] args) { endereço de memória!
ContaBancaria contaJunior = new ContaBancaria();
ContaBancaria conta2 = contaJunior;
conta2.numero = 1143166;
conta2.nomeCliente = "José Dal Prá Junior";
conta2.saldo = 100.0;
conta2.limiteCredito = 10.0;
conta2.deposita(10);
System.out.println(contaJunior.saldo);
}
}
Professor Dal Prá
Objeto
public class Programa {
public static void main(String[] args) {

ContaBancaria contaJunior = new ContaBancaria();
ContaBancaria conta2 = contaJunior;
// ...
System.out.println(contaJunior == conta2);
}

O que irá imprimir ?
Por que imprimiu este valor ?

}

Professor Dal Prá
Objeto
class Programa {
public static void main(String[] args) {
ContaBancaria contaJunior = new ContaBancaria();
contaJunior.numero = 1143166;
contaJunior.nomeCliente = "José Dal Prá Junior";
contaJunior.saldo = 100.0;
contaJunior.limiteCredito = 10.0;
contaJunior.deposita(10);
ContaBancaria mesmaConta = new ContaBancaria();
mesmaConta.numero = 1143166;
mesmaConta.nomeCliente = "José Dal Prá Junior";
mesmaConta.saldo = 100.0;
O que será impresso na tela?
mesmaConta.limiteCredito = 10.0;
Por que?
mesmaConta.deposita(10);
System.out.println(contaJunior == mesmaConta);
}

}
Professor Dal Prá
Objeto

contaJunior == mesmaConta
Está comparando se as variáveis
estão apontando para o mesmo
lugar na memória!

Professor Dal Prá
Objeto
contaJunior.numero == mesmaConta.numero

Para comparar se os objetos são
iguais, eu preciso comparar os
valores que estão armazenados
nos atributos
Isso vai mudar de CLASSE para
CLASSE
Professor Dal Prá
Objeto

Imprima o valor da expressão:
contaJunior.numero == mesmaConta.numero

Qual o resultado ?

Professor Dal Prá
Abstração

• Nosso cliente pede:

“Preciso que seja possível fazer
transferência de valores entre contas”

Professor Dal Prá
O que temos que fazer ?

Professor Dal Prá
Como ficará nosso método ?

transfere( numeroOrigem : int,
numeroDestino : int,
valor : double ) : boolean
OU

transfere( contaOrigem : ContaBancaria,
contaDestino : ContaBancaria,
valor : double) : boolean ??????
Professor Dal Prá
Ficará

transfere( destino : ContaBancaria,

valor : double ) :
boolean;

Isso por que vamos transferir
valores da conta atual para a

conta destino.
Professor Dal Prá
Classes – Métodos

UML
ContaBancaria
numero: int
nomeCliente : String
saldo : double

limiteCredito : double = 100.0

saca ( valor : double ) : boolean;
deposita ( valor : double ) : void;
transfere( destino : ContaBancaria,
valor : double ) : boolean;
Professor Dal Prá
Classes – Métodos
Java
boolean transfere( ContaBancaria destino,
double valor)
{
this.saldo -= valor;
destino.saldo += valor;
return true;
}

Professor Dal Prá
Classes – Métodos
boolean transfere( ContaBancaria destino,
double valor)
{
this.saldo -= valor;
destino.saldo += valor;
return true;
}

• O que é esse this ???
• Eu posso definir um objeto
como argumento ?
Professor Dal Prá
Classes – Métodos

Mas Professor, parece que eu já vi esta lógica de
diminuir um valor do saldo.
Olha, posso estar enganado, mas eu fiz uma
lógica parecida para somar um valor no saldo!

Professor Dal Prá
Classes – Métodos

Aonde estão estas lógicas já
existentes ?

Professor Dal Prá
Classes – Métodos
ContaBancaria
numero: int
nomeCliente : String
saldo : double

limiteCredito : double = 100.0

saca ( valor : double ) : boolean;
deposita ( valor : double ) : void;
transfere( destino : ContaBancaria,
valor : double ) : boolean;
Professor Dal Prá
Classes – Métodos
boolean transfere( ContaBancaria destino,
double valor) {
this.saca(valor);
destino.deposita(valor);
return true;
}

Professor Dal Prá
Classes – Métodos

Podemos melhorar a lógica
implementada na nossa
classe ContaBancaria
?

Professor Dal Prá
Classes – Métodos

boolean saca(double valor) {
if (saldo < valor) {
return false;
}
saldo -= valor;
return true;
}

Professor Dal Prá
Classes – Métodos
boolean transfere( ContaBancaria destino,
double valor) {

boolean sacou = this.saca(valor);
if (!sacou) {
return false;
}
destino.deposita(valor);
return true;
}
Professor Dal Prá
Utilizando o novo método
ContaBancaria contaJunior = new ContaBancaria();
// ...
ContaBancaria contaDestino = new ContaBancaria();
boolean transferiu = contaJunior.transfere(contaDestino, 100);
if (transferiu == true)
{
System.out.println("Transferiu");
}
else
{
System.out.println("Erro na transferência");
}
System.out.println(contaJunior.titular.nome);
System.out.println(contaJunior.saldo);

Professor Dal Prá
Abstração

• Nosso cliente pede:

“ Além do nome do cliente, preciso
guardar o CPF e o sexo dele”

Professor Dal Prá
Classes - Atributos
ContaBancaria
numero: int
nomeCliente : String
saldo : double
limiteCredito : double = 100.0
CPFCliente : String
sexoCliente : boolean

saca ( valor : double ) : boolean;
deposita ( valor : double ) : void;
transfere( destino : ContaBancaria,
valor : double ) : boolean;

Professor Dal Prá
Classes - Atributos
ContaBancaria

Uma conta tem CPF ?

numero: int

nomeCliente : String
saldo : double

Tem sexo ? = 100.0
limiteCredito : double
CPFCliente : String

Não é muita responsabilidade para
uma pobre ContaBancaria ?
saca ( valor : double ) : boolean;
sexoCliente : boolean

deposita ( valor : double ) : void;

O que fazer?

transfere( destino : ContaBancaria,
valor : double ) : boolean;

Professor Dal Prá
Usando a UML

Professor Dal Prá
e fazendo isso com Java

class Cliente {
String nome;
String CPF;
boolean sexo;
}

Professor Dal Prá
Aonde vou colocar as duas classes?

• Diagrama de classes
– Vai mostrar as classes que fazem parte do sistema
• Atributos
• Métodos

– Relacionamento entre elas

Professor Dal Prá
Classes - Relacionamentos

Como posso representar a ligação entre as classes
?

Professor Dal Prá
Classes - Associação

Este é um relacionamento de ASSOCIAÇÃO

Está IMPLÍCITO que existirá
um atributo do tipo Cliente
dentro de ContaBancaria e
também que terá um atributo
do tipo ContaBancaria dentro
de Cliente

Professor Dal Prá
Classes - Associação

Mas e se eu quiser mudar o nome
dos atributos ?

Professor Dal Prá
Classes – Associação
ContaBancaria terá um
atributo titular do tipo
Cliente. E Cliente terá um
atributo conta do tipo
ContaBancaria.

Professor Dal Prá
Classes – Associação

class ContaBancaria {
int numero;
double saldo;
double limiteCredito = 100;
Cliente titular;
}

Professor Dal Prá
Classes – Associação

class Cliente {
String nome;
String CPF;
boolean sexo;
ContaBancaria conta;
}
Professor Dal Prá
Mudando nosso código
class Programa {
public static void main(String[] args) {
ContaBancaria contaJunior = new ContaBancaria();
contaJunior.numero = 1143166;
contaJunior.titular = new Cliente();
contaJunior.titular.nome = "José Dal Prá Junior";
contaJunior.saldo = 100.0;
contaJunior.limiteCredito = 10.0;
contaJunior.deposita(10);
System.out.println(contaJunior.titular.nome);
System.out.println(contaJunior.saldo);
}
}
Professor Dal Prá
E se eu não criar um Cliente para a contaJunior?
class Programa {
public static void main(String[] args) {
ContaBancaria contaJunior = new ContaBancaria();
contaJunior.numero = 1143166;
// contaJunior.titular = new Cliente();
contaJunior.titular.nome = "José Dal Prá Junior";
contaJunior.saldo = 100.0;
contaJunior.limiteCredito = 10.0;
contaJunior.deposita(10);
System.out.println(contaJunior.titular.nome);
System.out.println(contaJunior.saldo);
}
}
Professor Dal Prá
Classes – Atributos

• Atributos do tipo “variável de referência” tem
como valor default null
– não está apontando para nenhum ponto da memória

Professor Dal Prá
Classes – Associação

class ContaBancaria {
int numero;
double saldo;
double limiteCredito = 100;
Cliente titular = new Cliente();
}

Professor Dal Prá
Mudando nosso código
class Programa {
public static void main(String[] args) {
ContaBancaria contaJunior = new ContaBancaria();
contaJunior.numero = 1143166;
contaJunior.titular.nome = "José Dal Prá Junior";
contaJunior.saldo = 100.0;
contaJunior.limiteCredito = 10.0;
contaJunior.deposita(10);
System.out.println(contaJunior.titular.nome);
System.out.println(contaJunior.saldo);
}
}
Professor Dal Prá
Comentários no código fonte

• Lembre-se: o melhor comentário é o seu
próprio código fonte
– Se você precisar de comentários em quantidade
exagerada, deve existir algum problema na
implementação (código confuso)

Professor Dal Prá
Comentários no código fonte
// cometário de linha
/*
comentário de bloco
*/
/**
Comentário de método, que pode gerar HTML
com a documentação das classes
*/
Professor Dal Prá
Alguns exemplos de javadocs de frameworks
http://docs.oracle.com/javase/6/docs/api/
http://docs.jboss.org/hibernate/orm/3.5/api/
http://static.springsource.org/spring/docs/3.0.x/javadoc-api/
http://joda-time.sourceforge.net/apidocs/index.html
http://hc.apache.org/httpclient-3.x/apidocs/

Professor Dal Prá
Vamos documentar nosso código

• Digitar documentação nos métodos feitos
• Ver que o Eclipse mostrar esta documentação
• Exportar documentação

Professor Dal Prá
Ferramente UML

• Jude Community
• Instalar
• Construir o Diagrama de Classes das classes
que já abstraímos

Professor Dal Prá
Exercícios
1.

Modele um funcionário. Ele deve ter pelo menos o nome do
funcionário, o departamento onde trabalha (String), seu
salário (double), a data de entrada no banco (String), seu RG
(String) e um valor booleano que indique se o funcionário
está na empresa no momento ou se já foi embora. Você deve
criar alguns métodos de acordo com sua necessidade. Além
deles, crie um método bonifica que aumenta o salario do
funcionário de acordo com o parâmetro passado como
argumento. Crie, também, um método demite, que não recebe
parâmetro algum, só modifica o valor booleano indicando que
o funcionário não trabalha mais aqui. A idéia aqui é apenas
modelar, isto é, só identifique que informações são
importantes e o que um funcionário faz. Desenhe no Jude
Community tudo o que um Funcionario tem e tudo que ele
faz.
Professor Dal Prá
Exercícios

2. Implemente o que foi definido no diagrama

Dica:
–
–
–
–

Crie a classe, compile
Crie os atributos, compile
Crie um método, compile
Crie outro método, compile

Professor Dal Prá
Exercícios

3. Crie uma classe TestaFuncionario, com um
método main, para que possamos criar um
objeto do tipo funcionário e testa-lo;

Professor Dal Prá
Exercícios

4. Crie um método “mostra” para a classe
Funcionario. Este método deverá
imprimir uma mensagem de
apresentação do funcionário com todas
as informações que a classe armazena.
Não será passado nenhum parâmetro
para o método e não será necessário
retornar nenhum valor.
Professor Dal Prá
Exercícios

5. Dentro da classe para teste, crie pelo
menos 3 funcionários, atribua valores
para eles e execute pelo menos uma vez
cada método.

Professor Dal Prá
Bibliografia

• Apostila – Capitulo 2

Professor Dal Prá
Mão na massa!

https://gist.github.com/1391412

Mais conteúdo relacionado

Mais procurados

Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01
John Godoi
 
Java: Introdução
Java: IntroduçãoJava: Introdução
Java: Introdução
Arthur Emanuel
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
Manuel Menezes de Sequeira
 
Java & orientação a objetos
Java & orientação a objetosJava & orientação a objetos
Java & orientação a objetos
Mateus Parente
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e Java
Charles Jungbeck
 
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
Manuel Menezes de Sequeira
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
Manuel Menezes de Sequeira
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
Luciano Ramalho
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturada
diogoa21
 
4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação
Manuel Menezes de Sequeira
 
Programacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshareProgramacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshare
Marcio Junior Vieira
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a Python
Alvaro Oliveira
 
Orientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSLOrientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSL
George Mendonça
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
Natanael Fonseca
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
Manuel Menezes de Sequeira
 
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
Manuel Menezes de Sequeira
 
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
Manuel Menezes de Sequeira
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#
Leonardo Melo Santos
 
Curso de Java (Parte 2)
 Curso de Java (Parte 2) Curso de Java (Parte 2)
Curso de Java (Parte 2)
Mario Sergio
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Luís Cobucci
 

Mais procurados (20)

Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01
 
Java: Introdução
Java: IntroduçãoJava: Introdução
Java: Introdução
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
 
Java & orientação a objetos
Java & orientação a objetosJava & orientação a objetos
Java & orientação a objetos
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e Java
 
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturada
 
4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação
 
Programacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshareProgramacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshare
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a Python
 
Orientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSLOrientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSL
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
 
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
 
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#
 
Curso de Java (Parte 2)
 Curso de Java (Parte 2) Curso de Java (Parte 2)
Curso de Java (Parte 2)
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
 

Semelhante a POO - Aula 003

POO.pdf
POO.pdfPOO.pdf
POO.pdf
TekosTeko
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - Herança
Daniel Brandão
 
Aula 1 - Linguagem III
Aula 1 - Linguagem IIIAula 1 - Linguagem III
Aula 1 - Linguagem III
Juliano Weber
 
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalParadigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Gustavo Coutinho
 
Java - Visão geral e Exercícios
Java - Visão geral e ExercíciosJava - Visão geral e Exercícios
Java - Visão geral e Exercícios
Arthur Emanuel
 
Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0
Thiago Dieb
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
Daniel Brandão
 
Fundamentos da Programação PHP OO - Aula 1
Fundamentos da Programação PHP OO - Aula 1Fundamentos da Programação PHP OO - Aula 1
Fundamentos da Programação PHP OO - Aula 1
Thyago Maia
 
ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#
biandamakengo08
 
2009_2Sem.POOII.Ciencia Aula2 Revisao De Classes E Objetos
2009_2Sem.POOII.Ciencia Aula2   Revisao De Classes E Objetos2009_2Sem.POOII.Ciencia Aula2   Revisao De Classes E Objetos
2009_2Sem.POOII.Ciencia Aula2 Revisao De Classes E Objetos
guest9b4c7f
 
Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3
Thyago Maia
 
Workflows, diagramas e classes de Analise. Sistemas de Informação
Workflows, diagramas e classes de Analise. Sistemas de InformaçãoWorkflows, diagramas e classes de Analise. Sistemas de Informação
Workflows, diagramas e classes de Analise. Sistemas de Informação
Pedro De Almeida
 
Aula 3.ppt
Aula 3.pptAula 3.ppt
Java: Introdução à Orientação a Objetos
Java: Introdução à Orientação a ObjetosJava: Introdução à Orientação a Objetos
Java: Introdução à Orientação a Objetos
Arthur Emanuel
 
Aula1
Aula1Aula1
Aula 01 - Introdução ao C++
Aula 01 - Introdução ao C++Aula 01 - Introdução ao C++
Aula 01 - Introdução ao C++
PeslPinguim
 
Programação Orientada a Objetos - Uso da O.O. em Java
Programação Orientada a Objetos - Uso da O.O. em JavaProgramação Orientada a Objetos - Uso da O.O. em Java
Programação Orientada a Objetos - Uso da O.O. em Java
Cristiano Almeida
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)
Helder da Rocha
 
Programação Orientada a Objetos parte 1
Programação Orientada a Objetos parte 1Programação Orientada a Objetos parte 1
Programação Orientada a Objetos parte 1
Elaine Cecília Gatto
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012
Luís Cobucci
 

Semelhante a POO - Aula 003 (20)

POO.pdf
POO.pdfPOO.pdf
POO.pdf
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - Herança
 
Aula 1 - Linguagem III
Aula 1 - Linguagem IIIAula 1 - Linguagem III
Aula 1 - Linguagem III
 
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalParadigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
 
Java - Visão geral e Exercícios
Java - Visão geral e ExercíciosJava - Visão geral e Exercícios
Java - Visão geral e Exercícios
 
Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
Fundamentos da Programação PHP OO - Aula 1
Fundamentos da Programação PHP OO - Aula 1Fundamentos da Programação PHP OO - Aula 1
Fundamentos da Programação PHP OO - Aula 1
 
ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#
 
2009_2Sem.POOII.Ciencia Aula2 Revisao De Classes E Objetos
2009_2Sem.POOII.Ciencia Aula2   Revisao De Classes E Objetos2009_2Sem.POOII.Ciencia Aula2   Revisao De Classes E Objetos
2009_2Sem.POOII.Ciencia Aula2 Revisao De Classes E Objetos
 
Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3
 
Workflows, diagramas e classes de Analise. Sistemas de Informação
Workflows, diagramas e classes de Analise. Sistemas de InformaçãoWorkflows, diagramas e classes de Analise. Sistemas de Informação
Workflows, diagramas e classes de Analise. Sistemas de Informação
 
Aula 3.ppt
Aula 3.pptAula 3.ppt
Aula 3.ppt
 
Java: Introdução à Orientação a Objetos
Java: Introdução à Orientação a ObjetosJava: Introdução à Orientação a Objetos
Java: Introdução à Orientação a Objetos
 
Aula1
Aula1Aula1
Aula1
 
Aula 01 - Introdução ao C++
Aula 01 - Introdução ao C++Aula 01 - Introdução ao C++
Aula 01 - Introdução ao C++
 
Programação Orientada a Objetos - Uso da O.O. em Java
Programação Orientada a Objetos - Uso da O.O. em JavaProgramação Orientada a Objetos - Uso da O.O. em Java
Programação Orientada a Objetos - Uso da O.O. em Java
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)
 
Programação Orientada a Objetos parte 1
Programação Orientada a Objetos parte 1Programação Orientada a Objetos parte 1
Programação Orientada a Objetos parte 1
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012
 

POO - Aula 003

  • 2. Objetivos das próximas aulas • Orientação a objetos – Conceitos – UML • Como criar modelos (diagramas) que representem o que iremos desenvolver em Java – Como aplicar este conceitos no Java Base para todo o restante do curso Professor Dal Prá
  • 3. Orientação a Objetos • • • • criada em 1967 (Simula) SmallTalk (Anos 70 / Xerox ) C++ ( C com OO / AT&T) Atualmente – – – – Java Object Pascal (Delphi) .NET PHP • Usar linguagem OO híbrida não garante que o sistema seja OO; Professor Dal Prá
  • 4. Orientação a Objetos • Novo paradigma, ou seja, nova forma de pensar • Abstração mais próxima do mundo real – Conta Bancária • Atributos: saldo, limite; • Funcionalidades: debitar, creditar, transferir; – Não significa que será totalmente intuitivo; • Desenvolver software não é fácil para todos; Professor Dal Prá
  • 5. Orientação a Objetos • Padroniza o pensamento – Análise orientada a objetos; – Projeto orientado a objetos; – Programação orientada a objetos (POO – OOP); Professor Dal Prá
  • 6. Orientação a Objetos • Melhor organização do sistema – cada objeto terá uma função específica: • Conta Bancária: controla a movimentações do correntista; • Correntista: guardar informações do cliente do banco; • Formulário: receber informações digitadas pelo usuário; • Botão: Executar uma ação após o clique do usuário; – Maior Produtividade (não precisa repetir uma lógica que é de responsabilidade de outro objeto); Professor Dal Prá
  • 7. Orientação a Objetos Alta coesão • Objetos super especializados – Maior reusabilidade dos objetos – Menor impacto nas manutenções – Maior velocidade nas manutenções Não criar estruturas que “FAZEM TUDO” Professor Dal Prá
  • 8. Orientação a Objetos • Um sistema orientado a objetos é um grande diálogo entre objetos (cooperação); Interface com o Usuário 1 - Você pode me passar o extrato do Correntista Junior durante o período X? 4 – Segue o extrato do correntista. 3 - Ok. Ai está a lista de movimentações. Acesso ao Banco de Dados Professor Dal Prá Lógica de Negócios da Conta Bancaria 2 - Você pode me passar o meu histórico de movimentações durante o período X ?
  • 9. Conceitos Básicos OO • Abstração • Classes – Atributos • Tipos • Valores padrão – Métodos • Assinaturas • Repostas • Objetos – Referência Professor Dal Prá
  • 10. Conceitos Avançados OO • Relacionamentos – Dependência – Herança • Conversões – Associação • Encapsulamento – Modificadores de acessos • Classes • Atributos • Métodos – Padrão de codificação de classes no Java Professor Dal Prá
  • 11. Conceitos Avançados • Polimorfismo – Classes abstratas – Interfaces • Diminuir o acoplamento entre classes Professor Dal Prá
  • 12. Como representar estes conceitos antes mesmo de implementá-los? Professor Dal Prá
  • 13. Unified Modeling Language - UML • Linguagem de Modelagem Unificada – Linguagem: o que for “escrito” em UML deve ser entendido; – Modelagem: imagens valem mais do que mil palavras; – Unificada: melhores idéias entre várias técnicas (Booch, OOSE, OMT); • Não é padrão, mas é muito utilizada; • Pré-requisito em muitas oportunidades; Professor Dal Prá
  • 14. Unified Modeling Language - UML • Modelos expressam – Aspectos estáticos: informações a serem manipuladas ou armazenadas; – Aspectos dinâmicos: perguntas e respostas entre objetos e mudança de estados (mudança nos valores armazenados nos objetos); Professor Dal Prá
  • 15. Mas para que vamos usar isso ? • Modelar – – – – Compreender o que vamos fazer; Projetar antes de codificar; Documentar Facilitar a comunicação entre os membros da equipe e também o cliente; • $ em manutenção > $ desenvolvimento; Professor Dal Prá
  • 16. Para simplificar ... Não vamos usar 100% da UML Professor Dal Prá
  • 17. Abstração • Não é um conceito exclusivo da OO; • Problemas do mundo real  Conceitos de programação  linguagem de programação; • Linguagem OO a torna mais fácil; • Nomes dos objetos do mundo real serão utilizados nos objetos que estarão dentro do programa; Professor Dal Prá
  • 18. Abstração • Nosso cliente pedirá: “ Preciso controlar os saques, depósitos e dados das contas bancárias dos meus clientes. Preciso saber o número da conta, o nome do cliente, qual o saldo e o limite ” Professor Dal Prá
  • 19. Abstração • O analista/arquiteto vai converter isso em um modelo – UML, no caso de OO • O Programador vai pegar o modelo definido e vai materializar ele nas linhas de códigos – Linguagens de programação; • Java, no nosso caso – Ferramentas; – Bancos de dados; – Comunicação com periféricos; Professor Dal Prá
  • 20. Vamos abstrair o problema de nosso cliente Professor Dal Prá
  • 21. Sistema OO é composto por vários objetos cooperantes, mas como eu defino um objeto? Professor Dal Prá
  • 22. Classes • Representa um novo tipo de dado – Características de um objeto UML ContaBancaria Professor Dal Prá
  • 23. Podemos dizer que ... • É o projeto que definirá como será um objeto dentro do sistema – Podemos fazer uma analogia ao projeto de uma casa • Mostra como será a casa, porém não é a casa construída! Professor Dal Prá
  • 24. Assim se que se “declara” uma clase no Java class NomeDaClasse { // corpo da classe } Arquivo: NomeDaClasse.java Professor Dal Prá
  • 25. Classes class ContaBancaria { } Arquivo: ContaBancaria.java Professor Dal Prá
  • 26. Temos a classe, mas como vamos guardar os dados dentro desta classe? Professor Dal Prá
  • 27. Classes - Atributos • Definem os possíveis estados do objeto – Atributos • Nome • Tipo – Valor padrão – Valor inicial Professor Dal Prá
  • 28. Classes – Atributos UML ContaBancaria numero: int nomeCliente : String saldo : double limiteCredito : double = 100.0 Professor Dal Prá
  • 29. Classes – Atributos Java // virá com o valor padrão TipoDoAtributo nomeDoAtributo; // definido um valor inicial TipoDoAtributo nomeDoAtributo = valorInicial; Professor Dal Prá
  • 30. Classes – Atributos class ContaBancaria{ int numero; String nomeCliente; double saldo; double limiteCredito = 100.0; } Professor Dal Prá
  • 31. Classes – Atributos • Valores default –numéricos : 0 –boolean : false Professor Dal Prá
  • 32. Agora temos • novo tipo de dado chamado ContaBancaria – Poderá armazenar • • • • numero nomeCliente saldo limiteCredito • Mas e o que ele irá fazer? Qual será a contribuição dele para o sistema? Ele apenas armazenará informações? Professor Dal Prá
  • 33. Classes – Métodos • Define quais ações poderão ser executadas – Habilidades que estarão definidas em uma classe – Método • Assinatura ( regra para formular uma pergunta ) – Argumentos » Nome » Tipo • Retorno ( resposta à pergunta ) – Sem resposta – Tipo Professor Dal Prá
  • 34. Classes – Métodos UML ContaBancaria numero: int nomeCliente : String saldo : double limiteCredito : double = 100.0 saca ( valor : double ) : boolean; deposita ( valor : double ) : void; Professor Dal Prá
  • 35. Classes – Métodos Java retorno nomeMetodo(tipoArgumento nomeArgumento){ // corpo do método } retorno nomeMetodo(tipoArgumento1 nomeArgumento1,..., tipoArgumentoN nomeArgumentoN){ // corpo do método } Professor Dal Prá
  • 36. Classes – Métodos Java retorno nomeMetodo(tipoArgumento nomeArgumento){ // corpo do método } 1. 2. Sempre será necessário definir um retorno, mesmo que seja NADA O nome do método dos argumentos deverá ser intuitivo, para facilitar a comunicação entre os desenvolvedores Professor Dal Prá
  • 37. Classe – Métodos class ContaBancaria { int numero; String nomeCliente; double saldo; double limiteCredito = 100.0; boolean saca(double valor) { saldo -= valor; return true; } void deposita(double valor){ saldo += valor; } } Professor Dal Prá
  • 38. Classes – Métodos 1 3 2 boolean saca(double valor) { saldo -= valor; 4 return true; } 5 1. Tipo de retorno (resposta) 2. Nome do método (v. imperativo) 3. Argumento esperado (para formular a pergunta) 4. Executando a ação 5. Retornando o valor esperado (tipo do return tem que ser igual ao definido no método) Professor Dal Prá
  • 39. Classes – Métodos 1 2 3 void deposita(double valor){ saldo += valor; 4 } 1. void == sem nada ( não vai retornar nenhum valor ) 2. Nome do método 3. Argumentos 4. Executando a ação 5. Aonde está o return? Professor Dal Prá
  • 40. Classes Definido um novo tipo de dado, como faço para executar ele, ou seja, como faço para dar vida a esta nova estrutura dentro do sistema ? Professor Dal Prá
  • 41. Objeto • É uma execução de uma determinada classe – instância Professor Dal Prá
  • 42. Podemos dizer que ... • É o projeto posto em prática – É casa construída segundo o que foi definido no projeto Professor Dal Prá
  • 43. Objeto public class Programa { public static void main(String[] args) { ContaBancaria contaJunior = new ContaBancaria(); contaJunior.numero = 1143166; contaJunior.nomeCliente = "José Dal Prá Junior"; contaJunior.saldo = 100.0; contaJunior.limiteCredito = 10.0; contaJunior.deposita(10); System.out.println(contaJunior.saldo); } } Professor Dal Prá
  • 44. Objeto contaJunior é uma variável do tipo ContaBancaria, certo? Professor Dal Prá
  • 45. Objeto • contaJunior é uma variável que guarda o ponto da memória (um número) aonde um objeto do tipo ContaBancaria foi criado – Pense em um copo (variável) com um controle remoto • Chamasse variável de referência para um objeto – Objeto, para simplificar Professor Dal Prá
  • 46. Objeto public class Programa { public static void main(String[] args) { ContaBancaria contaJunior = new ContaBancaria(); contaJunior.numero = 1143166; contaJunior.nomeCliente = "José Dal Prá Junior"; contaJunior.saldo = 100.0; Pede para o Java reservar um contaJunior.limiteCredito = 10.0; espaço na memória e criar um contaJunior.deposita(10); System.out.println(contaJunior.saldo); } } Professor Dal Prá novo objeto do tipo ContaBancaria
  • 47. Objeto public class Programa { public static void main(String[] args) { ContaBancaria contaJunior = new ContaBancaria(); contaJunior.numero = 1143166; contaJunior.nomeCliente = "José Dal Prá Junior"; contaJunior.saldo = 100.0; contaJunior.limiteCredito = 10.0; Guarda o endereço da memória aonde está o OBJETO contaJunior.deposita(10); System.out.println(contaJunior.saldo); } } Professor Dal Prá
  • 48. Objeto public class Programa { public static void main(String[] args) { ContaBancaria contaJunior = new ContaBancaria(); contaJunior.numero = 1143166; contaJunior.nomeCliente = "José Dal Prá Junior"; contaJunior.saldo = 100.0; contaJunior.limiteCredito = 10.0; contaJunior.deposita(10); Navega pelo “endereço de memória” aonde nosso objeto System.out.println(contaJunior.saldo);está e joga valores para os atributos dele } } Professor Dal Prá
  • 49. Objeto public class Programa { public static void main(String[] args) { ContaBancaria contaJunior = new ContaBancaria(); contaJunior.numero = 1143166; contaJunior.nomeCliente = "José Dal Prá Junior"; Utiliza a variável que guarda contaJunior.saldo = 100.0; o endereço da memória aonde contaJunior.limiteCredito = 10.0; contaJunior.deposita(10); System.out.println(contaJunior.saldo); } } Professor Dal Prá está nosso objeto para poder chamar um método, ou seja, acionar uma habilidade do nosso objeto
  • 50. Objeto public class Programa { Se eu executar este código, o public static void main(String[] args) que acontece ? Por quê? { ContaBancaria contaJunior = new ContaBancaria(); ContaBancaria conta2 = contaJunior; conta2.numero = 1143166; conta2.nomeCliente = "José Dal Prá Junior"; conta2.saldo = 100.0; conta2.limiteCredito = 10.0; conta2.deposita(10); System.out.println(contaJunior.saldo); } } Professor Dal Prá
  • 51. Objeto public class Programa { Estão apontando para o mesmo public static void main(String[] args) { endereço de memória! ContaBancaria contaJunior = new ContaBancaria(); ContaBancaria conta2 = contaJunior; conta2.numero = 1143166; conta2.nomeCliente = "José Dal Prá Junior"; conta2.saldo = 100.0; conta2.limiteCredito = 10.0; conta2.deposita(10); System.out.println(contaJunior.saldo); } } Professor Dal Prá
  • 52. Objeto public class Programa { public static void main(String[] args) { ContaBancaria contaJunior = new ContaBancaria(); ContaBancaria conta2 = contaJunior; // ... System.out.println(contaJunior == conta2); } O que irá imprimir ? Por que imprimiu este valor ? } Professor Dal Prá
  • 53. Objeto class Programa { public static void main(String[] args) { ContaBancaria contaJunior = new ContaBancaria(); contaJunior.numero = 1143166; contaJunior.nomeCliente = "José Dal Prá Junior"; contaJunior.saldo = 100.0; contaJunior.limiteCredito = 10.0; contaJunior.deposita(10); ContaBancaria mesmaConta = new ContaBancaria(); mesmaConta.numero = 1143166; mesmaConta.nomeCliente = "José Dal Prá Junior"; mesmaConta.saldo = 100.0; O que será impresso na tela? mesmaConta.limiteCredito = 10.0; Por que? mesmaConta.deposita(10); System.out.println(contaJunior == mesmaConta); } } Professor Dal Prá
  • 54. Objeto contaJunior == mesmaConta Está comparando se as variáveis estão apontando para o mesmo lugar na memória! Professor Dal Prá
  • 55. Objeto contaJunior.numero == mesmaConta.numero Para comparar se os objetos são iguais, eu preciso comparar os valores que estão armazenados nos atributos Isso vai mudar de CLASSE para CLASSE Professor Dal Prá
  • 56. Objeto Imprima o valor da expressão: contaJunior.numero == mesmaConta.numero Qual o resultado ? Professor Dal Prá
  • 57. Abstração • Nosso cliente pede: “Preciso que seja possível fazer transferência de valores entre contas” Professor Dal Prá
  • 58. O que temos que fazer ? Professor Dal Prá
  • 59. Como ficará nosso método ? transfere( numeroOrigem : int, numeroDestino : int, valor : double ) : boolean OU transfere( contaOrigem : ContaBancaria, contaDestino : ContaBancaria, valor : double) : boolean ?????? Professor Dal Prá
  • 60. Ficará transfere( destino : ContaBancaria, valor : double ) : boolean; Isso por que vamos transferir valores da conta atual para a conta destino. Professor Dal Prá
  • 61. Classes – Métodos UML ContaBancaria numero: int nomeCliente : String saldo : double limiteCredito : double = 100.0 saca ( valor : double ) : boolean; deposita ( valor : double ) : void; transfere( destino : ContaBancaria, valor : double ) : boolean; Professor Dal Prá
  • 62. Classes – Métodos Java boolean transfere( ContaBancaria destino, double valor) { this.saldo -= valor; destino.saldo += valor; return true; } Professor Dal Prá
  • 63. Classes – Métodos boolean transfere( ContaBancaria destino, double valor) { this.saldo -= valor; destino.saldo += valor; return true; } • O que é esse this ??? • Eu posso definir um objeto como argumento ? Professor Dal Prá
  • 64. Classes – Métodos Mas Professor, parece que eu já vi esta lógica de diminuir um valor do saldo. Olha, posso estar enganado, mas eu fiz uma lógica parecida para somar um valor no saldo! Professor Dal Prá
  • 65. Classes – Métodos Aonde estão estas lógicas já existentes ? Professor Dal Prá
  • 66. Classes – Métodos ContaBancaria numero: int nomeCliente : String saldo : double limiteCredito : double = 100.0 saca ( valor : double ) : boolean; deposita ( valor : double ) : void; transfere( destino : ContaBancaria, valor : double ) : boolean; Professor Dal Prá
  • 67. Classes – Métodos boolean transfere( ContaBancaria destino, double valor) { this.saca(valor); destino.deposita(valor); return true; } Professor Dal Prá
  • 68. Classes – Métodos Podemos melhorar a lógica implementada na nossa classe ContaBancaria ? Professor Dal Prá
  • 69. Classes – Métodos boolean saca(double valor) { if (saldo < valor) { return false; } saldo -= valor; return true; } Professor Dal Prá
  • 70. Classes – Métodos boolean transfere( ContaBancaria destino, double valor) { boolean sacou = this.saca(valor); if (!sacou) { return false; } destino.deposita(valor); return true; } Professor Dal Prá
  • 71. Utilizando o novo método ContaBancaria contaJunior = new ContaBancaria(); // ... ContaBancaria contaDestino = new ContaBancaria(); boolean transferiu = contaJunior.transfere(contaDestino, 100); if (transferiu == true) { System.out.println("Transferiu"); } else { System.out.println("Erro na transferência"); } System.out.println(contaJunior.titular.nome); System.out.println(contaJunior.saldo); Professor Dal Prá
  • 72. Abstração • Nosso cliente pede: “ Além do nome do cliente, preciso guardar o CPF e o sexo dele” Professor Dal Prá
  • 73. Classes - Atributos ContaBancaria numero: int nomeCliente : String saldo : double limiteCredito : double = 100.0 CPFCliente : String sexoCliente : boolean saca ( valor : double ) : boolean; deposita ( valor : double ) : void; transfere( destino : ContaBancaria, valor : double ) : boolean; Professor Dal Prá
  • 74. Classes - Atributos ContaBancaria Uma conta tem CPF ? numero: int nomeCliente : String saldo : double Tem sexo ? = 100.0 limiteCredito : double CPFCliente : String Não é muita responsabilidade para uma pobre ContaBancaria ? saca ( valor : double ) : boolean; sexoCliente : boolean deposita ( valor : double ) : void; O que fazer? transfere( destino : ContaBancaria, valor : double ) : boolean; Professor Dal Prá
  • 76. e fazendo isso com Java class Cliente { String nome; String CPF; boolean sexo; } Professor Dal Prá
  • 77. Aonde vou colocar as duas classes? • Diagrama de classes – Vai mostrar as classes que fazem parte do sistema • Atributos • Métodos – Relacionamento entre elas Professor Dal Prá
  • 78. Classes - Relacionamentos Como posso representar a ligação entre as classes ? Professor Dal Prá
  • 79. Classes - Associação Este é um relacionamento de ASSOCIAÇÃO Está IMPLÍCITO que existirá um atributo do tipo Cliente dentro de ContaBancaria e também que terá um atributo do tipo ContaBancaria dentro de Cliente Professor Dal Prá
  • 80. Classes - Associação Mas e se eu quiser mudar o nome dos atributos ? Professor Dal Prá
  • 81. Classes – Associação ContaBancaria terá um atributo titular do tipo Cliente. E Cliente terá um atributo conta do tipo ContaBancaria. Professor Dal Prá
  • 82. Classes – Associação class ContaBancaria { int numero; double saldo; double limiteCredito = 100; Cliente titular; } Professor Dal Prá
  • 83. Classes – Associação class Cliente { String nome; String CPF; boolean sexo; ContaBancaria conta; } Professor Dal Prá
  • 84. Mudando nosso código class Programa { public static void main(String[] args) { ContaBancaria contaJunior = new ContaBancaria(); contaJunior.numero = 1143166; contaJunior.titular = new Cliente(); contaJunior.titular.nome = "José Dal Prá Junior"; contaJunior.saldo = 100.0; contaJunior.limiteCredito = 10.0; contaJunior.deposita(10); System.out.println(contaJunior.titular.nome); System.out.println(contaJunior.saldo); } } Professor Dal Prá
  • 85. E se eu não criar um Cliente para a contaJunior? class Programa { public static void main(String[] args) { ContaBancaria contaJunior = new ContaBancaria(); contaJunior.numero = 1143166; // contaJunior.titular = new Cliente(); contaJunior.titular.nome = "José Dal Prá Junior"; contaJunior.saldo = 100.0; contaJunior.limiteCredito = 10.0; contaJunior.deposita(10); System.out.println(contaJunior.titular.nome); System.out.println(contaJunior.saldo); } } Professor Dal Prá
  • 86. Classes – Atributos • Atributos do tipo “variável de referência” tem como valor default null – não está apontando para nenhum ponto da memória Professor Dal Prá
  • 87. Classes – Associação class ContaBancaria { int numero; double saldo; double limiteCredito = 100; Cliente titular = new Cliente(); } Professor Dal Prá
  • 88. Mudando nosso código class Programa { public static void main(String[] args) { ContaBancaria contaJunior = new ContaBancaria(); contaJunior.numero = 1143166; contaJunior.titular.nome = "José Dal Prá Junior"; contaJunior.saldo = 100.0; contaJunior.limiteCredito = 10.0; contaJunior.deposita(10); System.out.println(contaJunior.titular.nome); System.out.println(contaJunior.saldo); } } Professor Dal Prá
  • 89. Comentários no código fonte • Lembre-se: o melhor comentário é o seu próprio código fonte – Se você precisar de comentários em quantidade exagerada, deve existir algum problema na implementação (código confuso) Professor Dal Prá
  • 90. Comentários no código fonte // cometário de linha /* comentário de bloco */ /** Comentário de método, que pode gerar HTML com a documentação das classes */ Professor Dal Prá
  • 91. Alguns exemplos de javadocs de frameworks http://docs.oracle.com/javase/6/docs/api/ http://docs.jboss.org/hibernate/orm/3.5/api/ http://static.springsource.org/spring/docs/3.0.x/javadoc-api/ http://joda-time.sourceforge.net/apidocs/index.html http://hc.apache.org/httpclient-3.x/apidocs/ Professor Dal Prá
  • 92. Vamos documentar nosso código • Digitar documentação nos métodos feitos • Ver que o Eclipse mostrar esta documentação • Exportar documentação Professor Dal Prá
  • 93. Ferramente UML • Jude Community • Instalar • Construir o Diagrama de Classes das classes que já abstraímos Professor Dal Prá
  • 94. Exercícios 1. Modele um funcionário. Ele deve ter pelo menos o nome do funcionário, o departamento onde trabalha (String), seu salário (double), a data de entrada no banco (String), seu RG (String) e um valor booleano que indique se o funcionário está na empresa no momento ou se já foi embora. Você deve criar alguns métodos de acordo com sua necessidade. Além deles, crie um método bonifica que aumenta o salario do funcionário de acordo com o parâmetro passado como argumento. Crie, também, um método demite, que não recebe parâmetro algum, só modifica o valor booleano indicando que o funcionário não trabalha mais aqui. A idéia aqui é apenas modelar, isto é, só identifique que informações são importantes e o que um funcionário faz. Desenhe no Jude Community tudo o que um Funcionario tem e tudo que ele faz. Professor Dal Prá
  • 95. Exercícios 2. Implemente o que foi definido no diagrama Dica: – – – – Crie a classe, compile Crie os atributos, compile Crie um método, compile Crie outro método, compile Professor Dal Prá
  • 96. Exercícios 3. Crie uma classe TestaFuncionario, com um método main, para que possamos criar um objeto do tipo funcionário e testa-lo; Professor Dal Prá
  • 97. Exercícios 4. Crie um método “mostra” para a classe Funcionario. Este método deverá imprimir uma mensagem de apresentação do funcionário com todas as informações que a classe armazena. Não será passado nenhum parâmetro para o método e não será necessário retornar nenhum valor. Professor Dal Prá
  • 98. Exercícios 5. Dentro da classe para teste, crie pelo menos 3 funcionários, atribua valores para eles e execute pelo menos uma vez cada método. Professor Dal Prá
  • 99. Bibliografia • Apostila – Capitulo 2 Professor Dal Prá