desenvolvimento oo com java orientação a objetos...

37
Desenvolvimento OO com Java Orientação a objetos básica Vítor E. Silva Souza ( [email protected] ) http://www.inf.ufes.br/~vitorsouza Departamento de Informática Centro Tecnológico Universidade Federal do Espírito Santo

Upload: others

Post on 13-Jan-2020

19 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Desenvolvimento OO com Java

Orientação a objetosbásica

Vítor E. Silva Souza

([email protected])http://www.inf.ufes.br/~vitorsouza

Departamento de Informática

Centro Tecnológico

Universidade Federal do Espírito Santo

Page 2: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Licençaparausoedistribuição• EsteobraestálicenciadacomumalicençaCreative

CommonsAtribuição-CompartilhaIgual 4.0Internacional;• Vocêtemodireitode:

– Compartilhar:copiareredistribuiromaterialemqualquersuporteouformato

– Adaptar:remixar,transformar,ecriarapartirdomaterialparaqualquerfim,mesmoquecomercial.

• Deacordocomostermosseguintes:– Atribuição:vocêdevedarocréditoapropriado,proverumlinkpara

alicençaeindicarsemudançasforamfeitas.Vocêdevefazê-loemqualquercircunstânciarazoável,masdemaneiraalgumaquesugiraaolicencianteaapoiarvocêouoseuuso;

– CompartilhaIgual:sevocêremixar,transformar,oucriarapartirdomaterial,temdedistribuirassuascontribuiçõessobamesmalicençaqueooriginal.

Março2016 OO&Java- Orientaçãoaobjetosbásica 2

Mais informações podem ser encontradas em:http://creativecommons.org/licenses/by-sa/4.0/

Page 3: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Conteúdodocurso

• OqueéJava;• Variáveisprimitivasecontroledefluxo;

• Orientaçãoaobjetosbásica;

• Umpoucodevetores;• Modificadoresdeacessoeatributosdeclasse;

• Herança,reescritaepolimorfismo;

• Classesabstratas;• Interfaces;• Exceçõesecontroledeerros;

• UtilitáriosdaAPIJava.

Março2016 OO&Java- Orientaçãoaobjetosbásica 3

EstesslidesforambaseadosnaapostiladocursoFJ-11:JavaeOrientaçãoaObjetosdaCaelum ena apostila ProgramaçãoOrientada aObjetos em Javadoprof.FlávioMiguelVarejão.

Page 4: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Questão deresponsabilidade• Imagineumsistema...

– Dezenas deformulários;– CPFssão validados – função validar(cpf) deve serchamada em cada formulário;

– Todos osdesenvolvedoressão responsáveis!– Define-seque idade deve ser >=18.Validaçãosimples(umif),masonde adicioná-la?

• Procedural:responsabilidade espalhada;• OO:responsabilidade concentrada,polimorfismo.

Março2016 OO&Java- Orientaçãoaobjetosbásica 4

Page 5: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Classeseobjetos• DesdeAristótelesqueoserhumanoclassifica osobjetos domundo;

• Juntamosobjetoscommesmascaracterísticas emcategorias quechamamosde“classes”:– Todasascontasdebanco temumsaldo,mascadacontapodeterumsaldodiferente;

– Todasascontasdebanco podemsofrerdepósitos ouseremencerradas.

• Classes sãousadasporlinguagensOOparamodelartiposcompostos.Sãomodelosabstratos quedefinemosobjetos daclasse.

Março2016 OO&Java- Orientaçãoaobjetosbásica 5

Page 6: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Classeseobjetos

Classes são projetos / especificações

Objetos são instânciasde verdade

Homo Sapiens Um ser humano

Receita de bolo Um bolo feito com a receita

Planta de uma casa Uma casa construída a partir da planta

Março2016 OO&Java- Orientaçãoaobjetosbásica 6

Definem um conjunto de características e comportamentos comuns.

Possuem valores para as características (olhos verdes, calda de chocolate, cor azul) e podem realizar o comportamento(correr, ser comido, abrir a porta)

Page 7: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Definiçãodeumaclasse• Usodapalavrareservadaclass;• Significado:“segueabaixoaespecificação decomoobjetosdestetipodevemsecomportar”;

• Depois dedefinidaaclasse,podemosdefinirvariáveis(referências)ecriarobjetos:

Março2016 OO&Java- Orientaçãoaobjetosbásica 7

class NomeDaClasse {/* Especificação da classe vai aqui. */

}

NomeDaClasse obj = new NomeDaClasse();

Page 8: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Membrosdaclasse• Umaclassepodeterdois tiposdemembro:

– Variáveis (emjargãoOO:“atributos”);– Funções (emjargãoOO:“métodos”).

• Atributossãocomopartes deumtipocomposto;• Métodossãofunções quesãoexecutadasnocontextodeumaclasse/objeto.

Março2016 OO&Java- Orientaçãoaobjetosbásica 8

Page 9: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Atributos• Definidoscomovariáveis noescopodaclasse:

Março2016 OO&Java- Orientaçãoaobjetosbásica 9

class Conta {int numero;String dono;double saldo;double limite;// ...

}

Repare que as variáveis não são declaradas dentro de um bloco de função, mas diretamente no bloco da classe.

Page 10: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Atributos• Acessoviaoperador deseleção (“.”):

Março2016 OO&Java- Orientaçãoaobjetosbásica 10

class Programa {public static void main(String[] args) {

Conta minhaConta;minhaConta = new Conta();

minhaConta.dono = "Duke";minhaConta.saldo = 1000.0;

System.out.println("Saldo: " + minhaConta.saldo);}

}

Page 11: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Métodos• Ummétodo éumafunçãoqueoperanocontexto deumaclasse (mensagemqueoobjetorecebe);

• É amaneira (método)desefazer algo num objeto:

Março2016 OO&Java- Orientaçãoaobjetosbásica 11

class Conta {// Atributos já declarados...

void sacar(double qtd) {double novoSaldo = this.saldo - qtd;this.saldo = novoSaldo;

}

void depositar(double qtd) {this.saldo += qtd;

}}

Page 12: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Métodos

Março2016 OO&Java- Orientaçãoaobjetosbásica 12

class Conta {// Atributos já declarados...

void sacar(double qtd) {double novoSaldo = this.saldo - qtd;this.saldo = novoSaldo;

}

void depositar(double qtd) {this.saldo += qtd;

}}

Não retorna valor. Argumento(s) Variável local

Atributo (neste caso, this é opcional)

Page 13: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Métodos• E/Invocação também viaoperador deseleção (“.”):

Março2016 OO&Java- Orientaçãoaobjetosbásica 13

class Programa {public static void main(String[] args) {

Conta minhaConta = new Conta();minhaConta.dono = "Duke";minhaConta.saldo = 1000;

minhaConta.sacar(200);minhaConta.depositar(500);

// Saldo: 1300.0System.out.println("Saldo: " + minhaConta.saldo);

}}

Page 14: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Métodos• Ummétodo pode retornar umvalor:

Março2016 OO&Java- Orientaçãoaobjetosbásica 14

class Conta {// Atributos já declarados...

boolean sacar(double qtd) {if (saldo < qtd) return false;

saldo = saldo - qtd;return true;

}}

Page 15: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Umaclasse,múltiplas instâncias• Podemos criar quantos objetos quisermos…

Março2016 OO&Java- Orientaçãoaobjetosbásica 15

class Programa {public static void main(String[] args) {

Conta minhaConta = new Conta();minhaConta.saldo = 1000;if (minhaConta.sacar(2000))

System.out.println("Consegui");else System.out.println("Não deu...");

Conta meuSonho = new Conta();meuSonho.saldo = 1_000_000_000.0;

// Usando a mesma referência.minhaConta = new Conta();

}}

Page 16: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

ManipulaçãodeobjetosemJava• EmJavatrabalhamoscomreferências paraobjetos,aocontrário deC++ (manipulaçãodiretaouponteiros);

• Analogia:– ATVéoobjeto;– Ocontroleéareferência;– Vocêsócarrega areferência;– Areferênciapodeexistir semoobjeto.

Março2016 OO&Java- Orientaçãoaobjetosbásica 16

Page 17: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Referência eobjeto

Março2016 OO&Java- Orientaçãoaobjetosbásica 17

public class Coordenadas {int x;int y;int z;

public static void main(String[] args) {Coordenadas coord; // Só a referência.

// Não dá pra fazer nada...

// Agora temos um objeto, podemos usá-lo.coord = new Coordenadas();coord.x = 10;coord.y = 15;coord.z = 18;

}}

Page 18: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Atribuiçãodevalores• Quandorealizamosumaatribuição:

• Javafazacópia dovalor davariáveldadireitaparaavariáveldaesquerda;– Paratiposprimitivos,issosignificaquealterações emx nãoimplicamalteraçõesemy;

– Paraobjetos,comooqueécopiadoéareferênciaparaomesmoobjeto,alterações noobjetoquexreferenciaaltera oobjetoquey referencia,poiséomesmo objeto!

Março2016 OO&Java- Orientaçãoaobjetosbásica 18

x = y;

Page 19: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Atribuiçãodevaloresprimitivos

Março2016 OO&Java- Orientaçãoaobjetosbásica 19

int x = 10;

int y = x;

y = 20;

Page 20: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Atribuiçãodeobjetos

Março2016 OO&Java- Orientaçãoaobjetosbásica 20

Coordenada c1;c1 = new Coordenada();c1.x = 10;c1.y = 20;c1.z = 30;

Coordenada c2;

// Erro comum:// c2 = new Coordenada();

c2 = c1;

Page 21: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Atribuiçãodeobjetos

Março2016 OO&Java- Orientaçãoaobjetosbásica 21

c2.x = 50;

Tenha sempre em mente a diferença entre um tipo primitivo e um objeto (referência).

”É parecido com um ponteiro, porém você não pode manipulá-lo como um número e

nem utilizá-lo para aritmética, ela é tipada.” (Caelum FJ-11)

Page 22: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Comparações entreobjetos

Março2016 OO&Java- Orientaçãoaobjetosbásica 22

public class Comparacoes {public static void main(String[] args) {

Coordenadas c1 = new Coordenadas();c1.x = 10; c1.y = 15; c1.z = 20;

Coordenadas c2 = new Coordenadas();c2.x = 10; c2.y = 15; c2.z = 20;

// O que imprime?System.out.println(c1 == c2);

}}

false

Page 23: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Comparações entreobjetos

Março2016 OO&Java- Orientaçãoaobjetosbásica 23

public class Comparacoes {public static void main(String[] args) {

Coordenadas c1 = new Coordenadas();c1.x = 10; c1.y = 15; c1.z = 20;

Coordenadas c2 = c1;c2.x = 11; c2.y = 16; c2.z = 21;

// O que imprime?System.out.println(c1 == c2);

}}

true

Page 24: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Métodos==funções declasse• Métodos são funções que executam nocontexto deuma classe:

Março2016 OO&Java- Orientaçãoaobjetosbásica 24

class Conta { //...boolean transferir(Conta destino, double qtd) {

if (! this.sacar(qtd)) return false;destino.depositar(qtd);return true;

}

public static void main(String[] args) {// Copie aqui minhaConta e meuSonho do slide 15.

meuSonho.transferir(minhaConta, 1_000_000);}

}

O destino é minhaConta, mas e a origem?

Page 25: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Armazenamentoemmemória

Março2016 OO&Java- Orientaçãoaobjetosbásica 25

Classe Conta

sacar()depositar()transferir()

saldo = 1_000_000_000

saldo = 1_000

meuSonhominhaConta

Page 26: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Chamandométodosemobjetos• Ocódigo compiladodosmétodosficanaáreadememória daclasse;

• Sendoassim,comoJavasabe emqualobjeto estouchamandoumdeterminadométodo?

Março2016 OO&Java- Orientaçãoaobjetosbásica 26

class Num {int i = 5;void somar(int j) { i += j; }

}public class Testepublic static void main(String[] args) {

Num m = new Num(), n = new Num();m.somar(10); n.somar(5);

}}

Page 27: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Chamandométodosemobjetos• Internamente écomoseométodo fosse:

• Eachamada fosse:

Março2016 OO&Java- Orientaçãoaobjetosbásica 27

// Como chamaríamos a função em programação estruturada.somar(m, 10);somar(n, 5);

// Imagina uma "função global", como em C:void somar(Num this, int j) { this.i += j;

}

Page 28: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Apalavrareservadathis• Javafazestatransformação paravocê,deformaqueoobjetoque“recebeuamensagem”estádisponível pelapalavra-chavethis:

• Não énecessáriousarthis quandoacessamosmembrosdoobjetodedentro domesmo(comonoexemploacima).

Março2016 OO&Java- Orientaçãoaobjetosbásica 28

class Num {int i = 5;void somar(int j) { this.i += j; }

}

Page 29: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Apalavrareservadathis• this podeserusadoparadiferenciar umatributo doobjetodeumparâmetro dométodo:

• Nestecaso,othis énecessário!

Março2016 OO&Java- Orientaçãoaobjetosbásica 29

class Num {int i = 5;void somar(int i) { this.i += i; }

}

Page 30: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Apalavrareservadathis

Março2016 OO&Java- Orientaçãoaobjetosbásica 30

class Num {int i = 5;Num somar(int j) {

i += j;return this; // Aqui, this é útil!

}}public class Testepublic static void main(String[] args) {

Num m = new Num();m.somar(10).somar(5).somar(1);System.out.println(m.i); // 21

}}

Page 31: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Valoresdefault paraatributos• Umatributopodeserinicializado:

• Quandonão inicializamosexplicitamente,umvalordefault éatribuídoaele:

Março2016 OO&Java- Orientaçãoaobjetosbásica 31

class Conta {int numero; // 0String dono; // nulldouble saldo; // 0.0double limite = 1000.0;

}

Tipo Valorboolean false

char ’\u0000'

byte (byte) 0

short (short) 0

Tipo Valorint 0

long 0l

float 0.0f

double 0.0

Page 32: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Implementando associações entreclasses• Atributos podem ser referências paraobjetos deoutrasclasses(ou damesma classe):

Março2016 OO&Java- Orientaçãoaobjetosbásica 32

class Conta {int numero;double saldo;double limite = 1000.0;Cliente titular;

}

class Cliente {String nome;String sobrenome;String cpf;

}

// ...

Page 33: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Implementando associações entreclasses• Atributos podem ser referências paraobjetos deoutrasclasses(ou damesma classe):

Março2016 OO&Java- Orientaçãoaobjetosbásica 33

public class Testepublic static void main(String[] args) {

Cliente larry = new Cliente();larry.nome = "Larry";larry.sobrenome = "Ellison";

Conta conta = new Conta();conta.saldo = 50_400_000_000.0;conta.titular = larry;

// Navegando no grafo de objetos...System.out.println(conta.titular.nome);

}}

Page 34: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Ovalornull• Ovalordefault parareferências (objetos)énull;• Um“objetonulo”éumareferênciaquenãoapontaparanenhumobjeto;

• Usar umareferêncianulacomoseelaapontasseparaumobjetocausa NullPointerException.

Março2016 OO&Java- Orientaçãoaobjetosbásica 34

public class Testepublic static void main(String[] args) {

Conta conta = new Conta();conta.saldo = 50_400_000_000.0;System.out.println(conta.titular.nome);

}}

// Exception in thread "main" // java.lang.NullPointerException

Page 35: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Valoresdefaultparavariáveis locais• Variáveislocais nãosão“zeradas”automaticamenteegeramerros decompilaçãoseutilizadas semvalor:

Março2016 OO&Java- Orientaçãoaobjetosbásica 35

public class Testepublic static void main(String[] args) {

Cliente larry;Conta conta = new Conta();conta.saldo = 50_400_000_000.0;conta.titular = larry;System.out.println(conta.titular.nome);

}}

// error: variable larry might not have been initialized// conta.titular = larry;// ^

Page 36: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

Exercitar é fundamental• ApostilaFJ-11daCaelum:

– Seção 4.12,página 51(classFuncionario);– Seção 4.13,página 55(recursividade /Fibonacci);– Seção 4.14,página 56(fixando oconhecimento).

Março2016 OO&Java- Orientaçãoaobjetosbásica 36

Page 37: Desenvolvimento OO com Java Orientação a objetos básicavitorsouza/wp-content/uploads/java-br-curso-basico... · Março 2016 OO & Java - Orientação a objetos básica 3 Estes slides

http://nemo.inf.ufes.br/