Desenvolvimento OO com Java Orientação a objetos básica



Documentos relacionados
Computação II Orientação a Objetos

Programação por Objectos. Java

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE ALAGOAS CURSO TECNICO EM INFORMATICA DISCIPLINA:

insfcanceof new public switch transient while byte continue extends for int null

Implementando uma Classe e Criando Objetos a partir dela

Exercícios de Revisão Java Básico

ÇÃO COM OBJECTOS PROGRAMAÇÃ. Programação com Objectos. Programação com Objectos TUDO É UM OBJECTO TUDO É UM OBJECTO ÍNDICE.

Unidade IV: Ponteiros, Referências e Arrays

Algoritmos e Programação

Algoritmos e Programação II. Sobrecarga

Linguagem de Programação I. Orientação a Objetos em Java

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Programação por Objectos. Java

Computação II - Java Prof. Adriano Joaquim de Oliveira Cruz Aula Prática - Herança, Polimorfismo e Construtores

Orientação a Objetos com Java

Orientação a Objetos

Noções sobre Objetos e Classes

Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo;

Encapsulamento de Dados

BC0505 Processamento da Informação

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

POO Programação Orientada a Objetos. Classes em Java

Programação de Computadores - I. Profª Beatriz Profº Israel

Linguagem e Técnicas de Programação I Tipos de dados, variáveis e constantes. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.

Análise de Programação

Conversão de Tipos e Arrays

Influenciam nossa percepção; ajudam-nos a organizar e a coordenar a Classes estimulam projeto centrado em dados:

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

FBV - Linguagem de Programação II. Um pouco sobre Java

Introdução a Java. Hélder Nunes

3 Classes e instanciação de objectos (em Java)

O que é um algoritmo? O que é um programa? Algoritmos. Programas. Aula 1 Tipo Abstrato de Dados

Java 2 Standard Edition Como criar classes e objetos

Programação Orientada a Objetos: Lista de exercícios #1. Bruno Góis Mateus

Programação Orientada a Objetos e Java - Introdução. Carlos Lopes

Estrutura Condicional em Java

Disciplina: Programação III Conteúdo: Programação Orientada a Objetos Linguagem JAVA Página: 70

Membros de classe e de instância. PARTE III: Java e OO - detalhes. Exemplo 1: método. Exercício. Exemplo 1 corrigido

Análise e Projeto Orientados por Objetos

Tipo Abstrato de Dados

2ª Lista de Exercícios Orientação a Objetos

JSP - ORIENTADO A OBJETOS

1 Funções básicas de implementação de arquivos

O comando switch. c Professores de ALPRO I 04/2012. Faculdade de Informática PUCRS. ALPRO I (FACIN) O comando switch 04/ / 31

INTRODUÇÃO À LINGUAGEM C++

Unidade Acadêmica: Faculdade de Computação FACOM Disciplina: Programação Orientada a Objetos I Professor: Fabiano Azevedo Dorça Prática 01

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Como o FIT funciona. FIT: Framework for Integrated Tests FIT. Dados de testes. Programa. Fixtures. classes. Resultados de testes

9 Comandos condicionais

Programação por Objectos. Java

Roteiro 1: Dados, variáveis, operadores e precedência

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 6 Filas

Programação com Acesso a BD. Programação com OO Acesso em Java

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Linguagem C Tipos de Dados. void; escalares; sizeof Vectores; strings em C Estruturas Introdução ao pré-processador

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Módulo 02 Programação Orientada a Objetos. Última atualização: 07/06/2010

Programação Visual TIC - 3PA. Lista de Exercícios 02

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

[Desenvolvimento OO com Java] Modificadores de acesso e atributos de classe

PROGRAMAÇÃO ORIENTADA A OBJETO EM PHP

Programação Orientada a Objetos em java. Polimorfismo

Curso Java Starter. 1

Orientação a Objetos Básica

Exemplo 1. Um programa que cria uma instância de uma classe que herda da classe Frame

Java Como Programar, 8/E

Carga horária : 4 aulas semanais (laboratório) Professores: Custódio, Daniel, Julio foco: introdução a uma linguagem de programação Linguagem Java

Técnicas de Programação II

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Cartão de fidelização de clientes das distribuidoras de combustível.

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo

2 Orientação a objetos na prática

7 RTTI e Interfaces. Desenvolvimento OO com Java. Vítor E. Silva Souza (vitorsouza@inf.ufes.br)

Estrutura de Dados Básica

Projeto de sistemas em Java. Algoritmos e Programação I. Classe SimulacaoFuncionario. Classe SimulacaoFuncionario. Classe SimulacaoFuncionario

GABARITO COMENTADO SISTEMAS OPERACIONAIS. PROF. Cláudio de C. Monteiro, Evanderson S. de Almeida, Vinícius de M. Rios

Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos

Algoritmia e Programação APROG. Linguagem JAVA. Básico. Nelson Freire (ISEP DEI-APROG 2012/13) 1/31

Criar a classe Aula.java com o seguinte código: Compilar e Executar

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada

Linguagens de Programação Aula 10

LÓGICA DE PROGRAMAÇÃO. Professor Celso Masotti

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Projeto de Software Orientado a Objeto

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Programação Orientada a Objetos (DPADF 0063)

8 Classes Internas. Desenvolvimento OO com Java. Vítor E. Silva Souza

BC0501 Linguagens de Programação

Introdução à Programação. Programação Imperativa (Registros X Classes e Métodos Nativos )

Linguagens de. Aula 02. Profa Cristiane Koehler

Vetores. Professor Dr Francisco Isidro Massettto

cast poderia ser usado também para transformar um real (float) em inteiro. A sintaxe C (float)i pode ser substituída em C++ por float(i).

Programação Orientada a Objeto

DEFINIÇÃO DE MÉTODOS

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

Transcrição:

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

Licença para uso e distribuição Este obra está licenciada com uma licença Creative CommonsAtribuição-CompartilhaIgual4.0 Internacional; Você tem o direito de: Compartilhar: copiar e redistribuir o material em qualquer suporte ou formato Adaptar: remixar, transformar, e criar a partir do material para qualquer fim, mesmo que comercial. De acordo com os termos seguintes: Atribuição: você deve dar o crédito apropriado, prover um link para a licença e indicar se mudanças foram feitas. Você deve fazê-lo em qualquer circunstância razoável, mas de maneira alguma que sugira ao licenciante a apoiar você ou o seu uso; CompartilhaIgual: se você remixar, transformar, ou criar a partir do material, tem de distribuir as suas contribuições sob a mesma licença que o original. Mais informações podem ser encontradas em: http://creativecommons.org/licenses/by-sa/4.0/ Março 2016 OO & Java - Orientação a objetos básica 2

Conteúdo do curso O que é Java; Variáveis primitivas e controle de fluxo; Orientação a objetos básica; Um pouco de vetores; Modificadores de acesso e atributos de classe; Herança, reescrita e polimorfismo; Classes abstratas; Interfaces; Exceções e controle de erros; Utilitários da API Java. Estes slides foram baseados na apostila do curso FJ-11: Java e Orientação a Objetos da Caelum e na apostila Programação Orientada a Objetos em Java do prof. Flávio Miguel Varejão. Março 2016 OO & Java - Orientação a objetos básica 3

Questão de responsabilidade Imagine um sistema... Dezenas de formulários; CPFs são validados função validar(cpf) deve ser chamada em cada formulário; Todos os desenvolvedores são responsáveis! Define-se que idade deve ser >= 18. Validação simples (um if), mas onde adicioná-la? Procedural: responsabilidade espalhada; OO: responsabilidade concentrada, polimorfismo. Março 2016 OO & Java - Orientação a objetos básica 4

Classes e objetos Desde Aristóteles que o ser humano classifica os objetos do mundo; Juntamos objetos com mesmas características em categorias que chamamos de classes : Todas as contas de banco tem um saldo, mas cada conta pode ter um saldo diferente; Todas as contas de banco podem sofrer depósitos ou serem encerradas. Classes são usadas por linguagens OO para modelar tipos compostos. São modelos abstratos que definem os objetos da classe. Março 2016 OO & Java - Orientação a objetos básica 5

Classes e objetos Classes são projetos / especificações Homo Sapiens Receita de bolo Planta de uma casa Objetos são instâncias de verdade Um ser humano Um bolo feito com a receita Uma casa construída a partir da planta 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) Março 2016 OO & Java - Orientação a objetos básica 6

Definição de uma classe Uso da palavra reservada class; Significado: segue abaixo a especificação de como objetos deste tipo devem se comportar ; class NomeDaClasse { /* Especificação da classe vai aqui. */ Depois de definida a classe, podemos definir variáveis (referências) e criar objetos: NomeDaClasse obj = new NomeDaClasse(); Março 2016 OO & Java - Orientação a objetos básica 7

Membros da classe Uma classe pode ter dois tipos de membro: Variáveis (em jargão OO: atributos ); Funções (em jargão OO: métodos ). Atributos são como partes de um tipo composto; Métodos são funções que são executadas no contexto de uma classe/objeto. Março 2016 OO & Java - Orientação a objetos básica 8

Atributos Definidos como variáveis no escopo da classe: 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. Março 2016 OO & Java - Orientação a objetos básica 9

Atributos Acesso via operador de seleção (. ): 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); Março 2016 OO & Java - Orientação a objetos básica 10

Métodos Um método é uma função que opera no contexto de uma classe (mensagem que o objeto recebe); É a maneira (método) de se fazer algo num objeto: class Conta { // Atributos já declarados... void sacar(double qtd) { double novosaldo = this.saldo - qtd; this.saldo = novosaldo; void depositar(double qtd) { this.saldo += qtd; Março 2016 OO & Java - Orientação a objetos básica 11

Métodos Não retorna valor. Argumento(s) Variável local class Conta { // Atributos já declarados... void sacar(double qtd) { double novosaldo = this.saldo - qtd; this.saldo = novosaldo; void depositar(double qtd) { this.saldo += qtd; Atributo (neste caso, this é opcional) Março 2016 OO & Java - Orientação a objetos básica 12

Métodos E/Invocação também via operador de seleção (. ): 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.0 System.out.println("Saldo: " + minhaconta.saldo); Março 2016 OO & Java - Orientação a objetos básica 13

Métodos Um método pode retornar um valor: class Conta { // Atributos já declarados... boolean sacar(double qtd) { if (saldo < qtd) return false; saldo = saldo - qtd; return true; Março 2016 OO & Java - Orientação a objetos básica 14

Uma classe, múltiplas instâncias Podemos criar quantos objetos quisermos 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(); Março 2016 OO & Java - Orientação a objetos básica 15

Manipulação de objetos em Java Em Java trabalhamos com referências para objetos, ao contrário de C++ (manipulação direta ou ponteiros); Analogia: A TV é o objeto; O controle é a referência; Você só carrega a referência; A referência pode existir sem o objeto. Março 2016 OO & Java - Orientação a objetos básica 16

Referência e objeto 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; Março 2016 OO & Java - Orientação a objetos básica 17

Atribuição de valores Quando realizamos uma atribuição: x = y; Java faz a cópia do valor da variável da direita para a variável da esquerda; Para tipos primitivos, isso significa que alterações em x não implicam alterações em y; Para objetos, como o que é copiado é a referência para o mesmo objeto, alterações no objeto que x referencia altera o objeto que y referencia, pois é o mesmo objeto! Março 2016 OO & Java - Orientação a objetos básica 18

Atribuição de valores primitivos int x = 10; int y = x; y = 20; Março 2016 OO & Java - Orientação a objetos básica 19

Atribuição de objetos Coordenada c1; c1 = new Coordenada(); c1.x = 10; c1.y = 20; c1.z = 30; Coordenada c2; // Erro comum: // c2 = new Coordenada(); c2 = c1; Março 2016 OO & Java - Orientação a objetos básica 20

Atribuição de objetos 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) Março 2016 OO & Java - Orientação a objetos básica 21

Comparações entre objetos 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 Março 2016 OO & Java - Orientação a objetos básica 22

Comparações entre objetos 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 Março 2016 OO & Java - Orientação a objetos básica 23

Métodos == funções de classe Métodos são funções que executam no contexto de uma classe: 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? Março 2016 OO & Java - Orientação a objetos básica 24

Armazenamento em memória Classe Conta sacar() depositar() transferir() meusonho minhaconta saldo = 1_000_000_000 saldo = 1_000 Março 2016 OO & Java - Orientação a objetos básica 25

Chamando métodos em objetos O código compilado dos métodos fica na área de memória da classe; Sendo assim, como Java sabe em qual objeto estou chamando um determinado método? class Num { int i = 5; void somar(int j) { i += j; public class Teste public static void main(string[] args) { Num m = new Num(), n = new Num(); m.somar(10); n.somar(5); Março 2016 OO & Java - Orientação a objetos básica 26

Chamando métodos em objetos Internamente é como se o método fosse: // Imagina uma "função global", como em C: void somar(num this, int j) { this.i += j; E a chamada fosse: // Como chamaríamos a função em programação estruturada. somar(m, 10); somar(n, 5); Março 2016 OO & Java - Orientação a objetos básica 27

A palavra reservada this Java faz esta transformação para você, de forma que o objeto que recebeu a mensagem está disponível pela palavra-chave this: class Num { int i = 5; void somar(int j) { this.i += j; Não é necessário usar this quando acessamos membros do objeto de dentro do mesmo (como no exemplo acima). Março 2016 OO & Java - Orientação a objetos básica 28

A palavra reservada this this pode ser usado para diferenciar um atributo do objeto de um parâmetro do método: class Num { int i = 5; void somar(int i) { this.i += i; Neste caso, o this é necessário! Março 2016 OO & Java - Orientação a objetos básica 29

A palavra reservada this class Num { int i = 5; Num somar(int j) { i += j; return this; // Aqui, this é útil! public class Teste public static void main(string[] args) { Num m = new Num(); m.somar(10).somar(5).somar(1); System.out.println(m.i); // 21 Março 2016 OO & Java - Orientação a objetos básica 30

Valores default para atributos Um atributo pode ser inicializado: class Conta { int numero; // 0 String dono; // null double saldo; // 0.0 double limite = 1000.0; Quando não inicializamos explicitamente, um valor default é atribuído a ele: Tipo boolean Valor false Tipo Valor int 0 char \u0000' long 0l byte (byte) 0 float 0.0f short (short) 0 double 0.0 Março 2016 OO & Java - Orientação a objetos básica 31

Implementando associações entre classes Atributos podem ser referências para objetos de outras classes (ou da mesma classe): class Conta { int numero; double saldo; double limite = 1000.0; Cliente titular; class Cliente { String nome; String sobrenome; String cpf; //... Março 2016 OO & Java - Orientação a objetos básica 32

Implementando associações entre classes Atributos podem ser referências para objetos de outras classes (ou da mesma classe): public class Teste public 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); Março 2016 OO & Java - Orientação a objetos básica 33

O valor null O valor default para referências (objetos) é null; Um objeto nulo é uma referência que não aponta para nenhum objeto; Usar uma referência nula como se ela apontasse para um objeto causa NullPointerException. public class Teste public 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 Março 2016 OO & Java - Orientação a objetos básica 34

Valores default para variáveis locais Variáveis locais não são zeradas automaticamente e geram erros de compilação se utilizadas sem valor: public class Teste public 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; // ^ Março 2016 OO & Java - Orientação a objetos básica 35

Exercitar é fundamental Apostila FJ-11 da Caelum: Seção 4.12, página 51 (class Funcionario); Seção 4.13, página 55 (recursividade / Fibonacci); Seção 4.14, página 56 (fixando o conhecimento). Março 2016 OO & Java - Orientação a objetos básica 36

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