Técnicas de Programação II



Documentos relacionados
Análise e Projeto Orientados por Objetos

Programação Orientada a Objetos em Java. Herança

Programação Orientada a Objetos em Java

Módulo 06 Desenho de Classes

Introdução à Programação. Interface, Polimorfismo e Dynamic Binding

Orientação a Objetos com Java

Módulo 07 Características Avançadas de Classes

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

Prova de Java. 1) Copie o programa abaixo no eclipse e complete-o, utilizando os conceitos aprendidos durante o curso. (4 pontos)

Herança. Alberto Costa Neto DComp - UFS

Programação Orientada a Objetos (DPADF 0063)

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

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Técnicas de Programação Avançada TCC Profs.: Anselmo Montenegro Conteúdo: Introdução à Orientação a Objetos

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

Capítulo 14. Herança a e Polimorfismo. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

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

Linguagem de Programação III

Herança. Algoritmos e Programação II. Aula 5 Herança

AULA DE JAVA 1 - CONCEITOS BÁSICOS

Programação Orientada a Objetos em java. Polimorfismo

Programação Orientada a Objetos (DPADF 0063)

Prof. Jhonatan Fernando

Construção de novas Classes em Java. Classes Atributos Métodos Herança...

Classes Abstratas e Interfaces

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Programação por Objectos. Java

Profº. Enrique Pimentel Leite de Oliveira

Paradigmas da Programação PPROG. Linguagem JAVA. Interfaces. (Livro Big Java, Late Objects Capítulo 9) Nelson Freire (ISEP DEI-PPROG 2013/14) 1/33

Computação II Orientação a Objetos

Introdução a Java. Hélder Nunes

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

PHP INTRODUÇÃO CLASSES E OBJETOS

Orientação a Objetos e a Linguagem Java

Java 2 Standard Edition Como criar classes e objetos

Orientação a Objetos

Reuso com Herança a e Composiçã

A Introdução à Programação Orientada a Objetos. Programação e Sistemas de Informação

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

Aula 3 Objeto atual com referencia THIS e Classes com Herança

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp

Modulo IIa Extra: Object

Análise de Programação

Curso de PHP. FATEC - Jundiaí. A programação orientada a objetos (object-oriented oriented programming

Capítulo 3. Programação por objectos em Java

Programação Orientada a Objetos. Encapsulamento

Curso Java Starter. 1

Programação por Objectos. Java

Guia de Fatores de Qualidade de OO e Java

Programação com Objectos. Processamento de Dados I. 4. Classes Abstractas

Capítulo 4. Packages e interfaces

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

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

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

UML Aspectos de projetos em Diagramas de classes

Material de Apoio 5. int getres() { return res; O que estas classes possuem em comum? 1) 2) 3)

BCC221 Programação Orientada a Objetos. Prof. Marco Antonio M. Carvalho 2014/2

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

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

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

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

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

Java. Marcio de Carvalho Victorino

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

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

Classes, Superclasses e Subclasses

Lição 9 Trabalhando com bibliotecas de classes

Classes Abstratas e Interfaces

sobre rogério gonçalves gerente de projetos > digitale agência digital rogerio@digitale.com.br h7p:// h7p://leveme.

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

Desenvolvimento Web TCC Turma A-1 /

Coleções. Conceitos e Utilização Básica. c Professores de ALPRO I 05/2012. Faculdade de Informática PUCRS

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

JSP - ORIENTADO A OBJETOS

Encapsulamento de Dados

Programação Estruturada e Orientada a Objetos. Fundamentos Orientação a Objetos

Programação Orientada a Objetos C++

Programas eram lineares e com poucos módulos (Programação estruturada) Aumento da complexidade dos sistemas e difícil reusabilidade dos mesmos

PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

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

UNIVERSIDADE FEDERAL DO PARANÁ

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

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

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

Prototype, um Design Patterns de Criação

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

Tópicos da Aula. Classes e Objetos. Classe Pública em Java. Classes em Java. Assinatura de Métodos. Corpo de Classes e Métodos. Conceitos de classe

Diagrama de Classes. Um diagrama de classes descreve a visão estática do sistema em termos de classes e relacionamentos entre as classes.

Capítulo 5 Reuso de Classes

Java TM e o Modelo de Objetos

Laboratório de Programação. Aula 13 Java 5COP088. Aula 13 Genéricos e Conjuntos Java Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr barbon@uel.

Noções sobre Objetos e Classes

Introdução. Programação. Orientada a Objetos: Reuso. Introdução. Classes Abstratas

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

Análise e Projeto de Sistemas

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

Unidade IV: Ponteiros, Referências e Arrays

Transcrição:

Técnicas de Programação II Aula 06 Orientação a Objetos e Classes Edirlei Soares de Lima <edirlei.lima@uniriotec.br>

Orientação a Objetos O ser humano se relaciona com o mundo através do conceito de objetos. Damos nomes a esses objetos e os classificamos em grupos (classes). Os objetos possuem: Características pelas quais os identificamos (Atributos); O objeto Pessoa possui RG, nome, data de nascimento O objeto Carro possui tipo, cor, quantidade de portas Finalidades para as quais os utilizamos (Comportamentos); Um objeto do tipo Pessoa pode andar, correr ou dirigir carros. Um objeto do tipo Carro pode ligar, desligar, acelerar, frear.

Classes e Objetos A unidade fundamental da programação orientada a objetos é a classe. A classe define o que os objetos devem ter (exemplo: tipo, cor, placa e número de portas) e quais operações eles podem realizar. As classes definem a estrutura básica para a construção de objetos. Classe: Carro Atributos: Tipo Cor Placa N Portas Métodos: Acelerar() Frear() TrocarMarcha(x) Buzinar()

Classes e Objetos Objetos são instâncias da classe. Classe Carro Objeto Carro1 Objeto Carro2 Objeto Carro3

Classes e Objetos A classe é o modelo ou molde de construção de objetos. Ela define as características e comportamentos que os objetos irão possuir. Sob o ponto de vista da programação orientada a objetos, um objeto não é muito diferente de uma variável normal. Um programa orientado a objetos é composto por um conjunto de objetos que interagem entre si.

Classes e Objetos Para manipularmos objetos em Java precisamos declarar variáveis de objetos. Uma variável de objeto é uma referência para um objeto. A declaração de uma variável de objeto é semelhante a declaração de uma variável normal: Carro carro1; /* carro1 não referencia nenhum objeto, o seu valor inicial é null */ A simples declaração de uma variável de objeto não é suficiente para a criação de um objeto.

Classes e Objetos A criação de um objeto deve ser explicitamente feita através do operador new: Carro carro1; /* carro1 não referencia nenhum objeto, o seu valor inicial é null */ carro1 = new Carro(); /* instancia o objeto carro1 */ O operador new aloca o objeto em memória e retorna uma referência para o mesmo: Carro carro1 Tipo = XYZ Cor = Branco Placa = ABC123 N Portas = 2

Classes e Objetos Como as variáveis de objeto são referências, as operações de atribuição entre elas não criam novos objetos: Carro carro1, carro2, carro3; carro1 = new Carro(); carro2 = carro1; /* carro2 passa a referenciar o mesmo objeto referenciado por carro1 */ carro1 carro2 carro3 null Carro Tipo = XYZ Cor = Branco Placa = ABC123 N Portas = 2

Classes e Objetos Um objeto expõe o seu comportamento através de métodos (funções). É possivel invocar métodos dos objetos instanciados: Carro carro1 = new Carro(); Carro carro2 = new Carro(); carro1.mudarmarcha(2); carro1.aumentavelocidade(5); carro2.mudarmarcha(4); carro2.aumentavelocidade(10);

Criação de Classes public class Carro Declaração private String tipo; private String cor; private String placa; private int portas; private int marcha; private double velocidade; public void Acelerar() velocidade += marcha * 10; public void Frear() velocidade -= marcha * 10; Atributos Métodos Classe: Carro Atributos: Tipo Cor Placa N Portas Métodos: Acelerar() Frear() TrocarMarcha(x) Buzinar()

Modificadores de Acesso public class Carro public double velocidade; private String cor; O modificador public declara que a classe pode ser usada por qualquer outra classe. Sem public, uma classe pode ser usada somente por classes do mesmo pacote O modificador public declara que o atributo pode ser acessado por métodos externos à classe na qual ele foi definido. public void Acelerar() velocidade += marcha * 10; public void Frear() velocidade -= marcha * 10; O modificador private declara que o atributo não pode ser acessado por métodos externos à classe na qual ele foi definido. O modificador public declara que o método pode ser executado por métodos externos à classe na qual ele foi definido. Encapsulamento!

Métodos Set/Get public class Carro public double GetVelocidade() return velocidade; public int GetMarcha() return marcha; public void TrocarMarcha(int novamarcha) marcha = novamarcha; Classe: Carro Atributos: Tipo Cor Placa N Portas Métodos: Acelerar() Frear() TrocarMarcha(x) Buzinar()

Método Construtor public class Carro Mesmo nome da classe e sem nenhum retorno. public Carro(String ntipo, String ncor, String nplaca, int nportas) tipo = ntipo; cor = ncor; placa = nplaca; portas = nportas; marcha = 1; velocidade = 0; Classe: Carro Atributos: Tipo Cor Placa N Portas Métodos: Acelerar() Frear() TrocarMarcha(x) Buzinar()

public class Carro Métodos Estáticos Método estático para calcular a distancia entre dois carros. public static double Distancia(Carro c1, Carro c2) return Math.sqrt(Math.pow(c1.GetX() c2.getx(), 2) + Math.pow(c1.GetY() c2.gety(), 2)); System.out.println("Distancia: " + Carro.Distancia(MeuCarro1, MeuCarro2));

Herança Herança é um mecanismo que permite a uma classe herdar todos os atributos e métodos de outra classe. Transporte Aquático Terrestre Aéreo Barco Carro Avião

Herança Abstrato Transporte... Terrestre... Concreto Carro Moto

Herança public class Transporte protected int capacidade; protected int velocidade; public Transporte() velocidade = 0; public int GetCapacidade() return capacidade; public void SetCapacidade(int cap) capacidade = cap; public int GetVelocidade() return velocidade; O modificador protected determina que apenas a própria classe e as classes filhas poderão ter acesso ao atributo. Classe: Transporte Atributos: Capacidade Velocidade Métodos: GetCapacidade() SetCapacidade(c) GetVelocidade()

Herança public class Terrestre extends Transporte protected int numrodas; public Terrestre(int rodas) super(); numrodas = rodas; public int GetNumRodas() return numrodas; public void SetNumRodas(int num) numrodas = num; A classe Terrestre herda as características da classe Transporte. Chamada ao método construtor da classe pai (Transporte). Classe: Terrestre Atributos: N Rodas Métodos: GetNumRodas() SetNumRodas(n)

Herança public class Carro extends Terrestre private String cor; private String placa; private int marcha; public Carro(String ncor, String nplaca) super(4); cor = ncor; placa = nplaca; marcha = 0; public int GetMarcha() return marcha; public void TrocarMarcha(int novamarcha) marcha = novamarcha; A classe Carro herda as características da classe Terrestre. Chamada ao método construtor da classe pai (Terrestre). Classe: Carro Atributos: Cor Placa Marcha Métodos: GetMarcha() TrocaMarcha(n) Acelerar() Frear()

Herança public void Acelerar() velocidade += marcha * 10; public void Frear() velocidade -= marcha * 10; Classe: Carro Atributos: Cor Placa Marcha Métodos: GetMarcha() TrocaMarcha(n) Acelerar() Frear()

Herança public class Moto extends Terrestre private String cor; private String placa; private int marcha; public Moto(String ncor, String nplaca) super(2); cor = ncor; placa = nplaca; marcha = 0; public int GetMarcha() return marcha; public void TrocarMarcha(int novamarcha) marcha = novamarcha; A classe Carro herda as características da classe Terrestre. Chamada ao método construtor da classe pai (Terrestre). Classe: Moto Atributos: Cor Placa Marcha Métodos: GetMarcha() TrocaMarcha(n) Acelerar() Frear()

Herança public void Acelerar() velocidade += marcha * 5; public void Frear() velocidade -= marcha * 5; Classe: Moto Atributos: Cor Placa Marcha Métodos: GetMarcha() TrocaMarcha(n) Acelerar() Frear()

Herança public static void main(string[] args) Carro meucarro = new Carro("Vermelho", "ABC-1234"); Moto minhamoto = new Moto("Preto", "XYZ-9876"); meucarro.trocarmarcha(1); meucarro.acelerar(); meucarro.acelerar(); minhamoto.trocarmarcha(minhamoto.getmarcha() + 1); minhamoto.acelerar(); minhamoto.trocarmarcha(minhamoto.getmarcha() + 1); minhamoto.acelerar(); System.out.println("Velocidade do Carro: "+meucarro.getvelocidade()); System.out.println("Velocidade da Moto: "+minhamoto.getvelocidade());

Classe Object A classe java.lang.object é a ancestral de qualquer classe em Java; isto é, toda classe definida em Java herda implicitamente as propriedades e métodos de Object. Um dos método herdados é o equals(). Porém, o método implementado em Object gera o mesmo resultado que o operador ==. Caso queiramos implementar o nosso próprio conceito de igualdade, devemos sobrescrever o método equals().

Overriding public class Carro extends Terrestre @Override public boolean equals(object ob) if (ob instanceof Carro) Carro c = (Carro)ob; if (c.placa.equals(placa) && c.cor.equals(cor)) return true; return false; Anotação para indicar ao compilador que o método equals da classe Object será sobrescrito. O método recebe um objeto da classe Object que deve ser explicitamente convertido para um objeto Carro. O comando instanceof testa se um determinado objeto é de uma classe especifica.

Polimorfismo Polimorfismo refere-se a capacidade de objetos assumirem várias formas. Em Java existem dois tipos de polimorfismo: Overloading (sobrecarga): permite que uma classe possa ter vários métodos com o mesmo nome, mas com assinaturas distintas. Overriding (sobrescrita): permite que uma classe possua um método com a mesma assinatura (nome, tipo e ordem dos parâmetros) que um método da sua superclasse (o método da classe derivada sobrescreve o método da superclasse).

Polimorfismo - Overloading Overloading de métodos: public class Carro extends Terrestre public void Acelerar() velocidade += marcha * 10; public void Acelerar(double forca) velocidade += marcha * 10 * forca;

Polimorfismo - Overloading Overloading de métodos construtores: public class Carro extends Terrestre public Carro() super(4); public Carro(String ncor, String nplaca) super(4); cor = ncor; placa = nplaca; marcha = 0;

Polimorfismo - Overriding public class Terrestre extends Transporte public void Acelerar() velocidade += 1; public class Carro extends Terrestre @Override public void Acelerar() velocidade += marcha * 10; O método Acelerar da classe Carro sobrescreve o método Acelerar da classe pai Transporte.

Modificador final O modificador final pode ser utilizado em atributos para definir constantes: public class Aviao private final int codigo = 25; private final String nome = "Aviao"; Ele também pode ser utilizado na declaração da classe para impedir a criação de subclasses: public final class Aviao

Modificador final O modificador final também pode ser utilizado em métodos para impedir que eles possam ser sobreescritos: public class Aviao public final void Acelerar() velocidade += marcha * 10;

Classes Abstratas e Operações Abstratas O modificador abstract pode ser utilizado na declaração de uma classe para definir que ela é abstrata. Uma classe abstrata normalmente possui um ou mais métodos abstratos. Um método abstrato não possui implementação, seu propósito é obrigar as classes descendentes a fornecerem implementações concretas das operações. Uma classe abstrata não pode ser instanciada diretamente.

Classes Abstratas e Operações Abstratas public abstract class Terrestre extends Transporte public abstract void Acelerar(); public class Carro extends Terrestre @Override public void Acelerar() velocidade += marcha * 10; Ocorrerá um erro de compilação se a classe Carro não implementar o método Acelerar.

Interface Interfaces permitem expressar comportamentos de classes sem definir as suas implementação. Os métodos somente serão efetivamente implementados pelas classes que implementarem a interface; Uma interface não pode ser instanciada diretamente; public interface Voador void Voar(double tempo); public class Aviao implements Voador public void Voar(double tempo) Ocorrerá um erro de compilação se a classe Aviao não implementar o método Voar.

Interface public interface Voador public void Voar(double tempo); public class Aviao implements Voador public void Voar(double tempo) public class DiscoVoador implements Voador public void Voar(double tempo)

Interface Uma classe pode implementar várias interfaces: public interface Voador public void Voar(double t); public interface Animal public void Comer(int qtd); public void Dormir(double t); public class Ave implements Voador, Animal public void Voar(double t) public void Comer(int qtd) public void Dormir(double t)

Interface Utilização A API Java implementa algumas das suas funcionalidades através de interfaces. Exemplo: método sort da classe Arrays. public interface Comparable public int compareto(object o);

Interface Utilização public class Empregado implements Comparable private String nome; private double salario; public int compareto(object o) Empregado e = (Empregado)o; if (this.salario > e.salario) return 1; else if (this.salario < e.salario) return -1; else return 0;

Interface Utilização public static void main(string[] args) Empregado[] lista=new Empregado("Joao",50.0), new Empregado("Ana",30.0), new Empregado("Paula",100.0), new Empregado("Carlos",10.0); Arrays.sort(lista); for(empregado e:lista) System.out.println(e.getNome()+" "+e.getsalario());

Exercícios Lista de Exercícios 07 Orientação a Objetos e Classes http://uniriodb2.uniriotec.br