Classes Abstratas e Interfaces



Documentos relacionados
Técnicas de Programação II

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

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

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

Programação Orientada a Objetos (DPADF 0063)

Análise e Projeto Orientados por Objetos

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

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

Programação Orientada a Objetos (DPADF 0063)

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

Capítulo 8. Introdução UML

Padrão Básico de Projeto: Interfaces e Polimorfismo

HERANÇA. Prog. Orientada a Objetos em Java

Implementando uma Classe e Criando Objetos a partir dela

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

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

Capítulo 4. Packages e interfaces

UML: Diagrama de Casos de Uso, Diagrama de Classes

Programação Orientada a Objetos em Java

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

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Programação Orientada a Objetos

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

Programação Orientada a Objetos C++

3.1 Definições Uma classe é a descrição de um tipo de objeto.

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

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

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

FUNDAMENTOS DA ORIENTAÇÃO A OBJETOS- REVISÃO

Programação Orientada a Objeto

TCC Prof.: Leandro A. F. Fernandes Conteúdo: Tipos Genéricos

Programação por Objectos. Java

MODELAGEM E SIMULAÇÃO

Curso Java Starter. 1

Orientação a Objetos e a Linguagem Java

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

Orientação a Objetos

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

Métodos de Construção de Software: Orientação a Objetos. Mestrado em Ciência da Computação 2008 Profa. Itana Gimenes

Programação Orientada a Objetos em java. Polimorfismo

Java. Marcio de Carvalho Victorino

Java 2 Standard Edition Como criar classes e objetos

2 Engenharia de Software

Modelagem de Sistemas

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

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

UFG - Instituto de Informática

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

Análise e Projeto de Sistemas

Programação Orientada a Objetos

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

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

Computação II Orientação a Objetos

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

Exercícios de Revisão Java Básico

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

Herança. Alberto Costa Neto DComp - UFS

Orientação a Objeto e UML Questões 2014 Prof. Felipe Leite

Parte I. Orientação a objetos no PHP. Contato: <lara.popov@ifsc.edu.br> Site:

Algoritmos e Programação II. Sobrecarga

Java Threads. Introdução

Computação II Orientação a Objetos

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

UM ESTUDO PARA A EVOLUÇÃO DO PHP COM A LINGUAGEM ORIENTADA A OBJETOS

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

Programação Orientada a Objetos. Encapsulamento

GBD PROF. ANDREZA S. AREÃO

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

Rafael Santos. Instituto Nacional de Pesquisas Espaciais rafael.santos. Rafael Santos - rafael.

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 14 PROFª BRUNO CALEGARO

Slide 1 Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Filas. Fabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes

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

Mapa Mental de Engenharia de Software - Diagramas UML

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

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Módulo 06 Desenho de Classes

1 INTRODUÇÃO 1.1 CONCEITO DE PARADIGMAS DE LINGUAGEM DE PROGRAMAÇÃO PARADIGMAS DE LINGUAGEM DE PROGRAMAÇÃO

Desenvolvimento Web TCC Turma A-1 /

UNIP UNIVERSIDADE PAULISTA INSTITUTO DE CIÊNCIAS EXATAS E TECNOLOGIA (ICET) CURSO DE CIÊNCIAS DA COMPUTAÇÃO. O Paradigma da Orientação a Objeto

Interfaces. Interfaces: Exemplo. ! São um mecanismo poderoso para ter bons desenhos pois permitem separar contratos das implementações

Classes Abstratas e Interfaces

Java Como Programar, 8/E. (C) 2010 Pearson Education, Inc. Todos os direitos reservados.

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

SISTEMAS OPERACIONAIS SISTEMAS OPERACIONAIS. 2º TRIMESTRE Patrícia Lucas

Memória cache. Prof. Francisco Adelton

Orientação a Objetos. Thiago Messias Evangelista UESC Universidade Estadual de Santa Cruz Version LibreOffice Productivity Suite

Classes, Superclasses e Subclasses

Introdução à Programação Orientada a Objetos

Professor: Douglas Sousa Cursos de Computação

BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia

Orientação a Objetos

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

Polimorfismo. Prof. Leonardo Barreto Campos 1

Transcrição:

Classes Abstratas e Interfaces Programação Orientada a Objetos Java Prof. Geraldo Braz Junior

Principais conceitos Classes abstratas Interfaces Herança múltipla 2

Simulações (1) Programas são normalmente utilizados para simular atividades do mundo real, tais como: tráfego de uma cidade; previsão do tempo; processos nucleares; flutuações do mercado de ações; mudanças ambientais. 3

Simulações (2) Freqüentemente, são apenas simulações parciais, baseadas em um modelo do mundo real Em geral, elas envolvem simplificações: Muitos detalhes têm o potencial de fornecer mais precisão Porém, na maioria das vezes, mais detalhes exigem mais recursos: Capacidade de processamento Tempo de simulação 4

Benefícios das simulações Viabilizam previsões Meteorologia, mercado de ações Permitem experimentação Mais segura, mais barata, mais rápida, simulação de cenários incomuns Por exemplo: Como a vida selvagem seria afetada se dividirmos esse parque nacional com uma estrada? Quantos funcionários devo contratar para reduzir pela metade o tempo de espera dos clientes em fila? Qual o efeito de colocar mais uma CPU no meu computador? 5

Simulações predador/presa Freqüentemente, há um equilíbrio tênue entre as espécies: Muitas presas significam muita comida Muita comida estimula um número maior de predadores Mais predadores comem mais presas Menos presas significam menos comida Menos comida significa... 6

O projeto raposas-ecoelhos 7

Principais classes Fox Modelo simples de um tipo de predador Rabbit Modelo simples de um tipo de presa Simulator Gerencia a tarefa geral de simulação Armazena uma coleção de raposas e coelhos Field Representa um campo em 2D Location Representa uma posição em 2D SimulatorView, FieldStats, Counter Apresenta uma visualização do campo/simulação Armazenam estatísticas sobre a simulação 8

9 Exemplo de visualização

Estado de um coelho public class Rabbit { Campos estáticos omitidos // Características individuais // A idade do coelho private int age; // Se o coelho está ou não vivo private boolean alive; // A posição do coelho private Location location; } Método omitido 10

Comportamento de um coelho Gerenciado a partir do método run Coelhos só sabem correr Idade incrementada em cada etapa da simulação Um coelho poderia morrer nesse ponto Coelhos com idade suficiente poderiam procriar em cada fase Novos coelhos poderiam nascer nesse ponto 11

Simplificações de coelho Coelhos não têm sexos diferentes Na verdade, todos são fêmeas O mesmo coelho poderia procriar em cada fase Todos os coelhos morrem com a mesma idade Outros? 12

Estado de uma raposa public class Fox { Campos estáticos omitidos // A idade da raposa private int age; // Se a raposa está ou não viva private boolean alive; // A posição da raposa private Location location; // O nível de alimentos da raposa, que aumenta // comendo coelhos private int foodlevel; } Métodos omitidos 13

Comportamento de uma raposa Gerenciado a partir do método hunt Raposas só sabem caçar Raposas também envelhecem e procriam Elas têm fome Elas caçam em locais adjacentes a sua posição no campo 14

Configuração de uma raposa Simplificações semelhantes a coelhos Caçar e comer poderiam ser modelados de diferentes maneiras. O nível de alimentos deve ser cumulativo? Uma raposa fica saciada? Qual é a probabilidade de uma raposa faminta caçar? As simplificações são aceitáveis? 15

A classe Simulator Três componentes-chave: Configuração da simulação no construtor O método populate: A cada animal é dada uma idade inicial aleatória Os animais são espalhados aleatoriamente pelo campo O método simulateonestep: Itera pela população de animais Dois objetos Field são utilizados: field e updatedfield 16

Simulação de um passo 17 for(iterator iter = animals.iterator(); iter.hasnext(); ) { Object animal = iter.next(); if(animal instanceof Rabbit) { Rabbit rabbit = (Rabbit)animal; if(rabbit.isalive()) rabbit.run(updatedfield, newanimals); } else iter.remove(); Retorna true se tipo dinâmico de animal for Fox ou subclasse de Fox } else if(animal instanceof Fox){ Fox fox = (Fox)animal; if(fox.isalive()) fox.hunt(field, updatedfield, newanimals); else iter.remove(); }

Espaço para aprimoramento Fox e Rabbit têm grandes semelhanças, mas não têm uma superclasse comum Simulator está fortemente acoplada a classes específicas Ela conhece bastante o comportamento das raposas e dos coelhos 18

A superclasse Animal Colocar campos comuns em Animal: age, alive, location Método genérico em Animal: run e hunt tornam-se act Simulator agora pode ser significativamente desacoplada: Possui um método que permite que um animal atue, redefinido em cada subclasse (polimorfismo) 19

Iteração (genérica) aprimorada 20 public class Simulator { public void simulateonestep() {... for(iterator iter = animals.iterator(); iter.hasnext(); ) { Animal animal = (Animal)iter.next(); if(animal.isalive()) { animal.act(field, updatedfield, newanimals); } else { iter.remove(); }... } }

O método act em Animal Verificação de tipo estático pelo compilador requer um método act em Animal, pois não há nenhuma implementação óbvia compartilhada Define act como abstrato: abstract public void act(field currentfield, Field updatedfield, List newanimals); 21 O tipo dinâmico da variável determina se de fato a ação será executada para raposas ou coelhos

A classe Animal public abstract class Animal { campos omitidos /** * Faz com que esse animal atue - isto é: faz * com que ele realize seja lá o que ele queira/ * precise realizar. */ abstract public void act(field currentfield, Field updatedfield, List newanimals); } outros métodos omitidos 22

Classes Abstratas Métodos abstratos têm abstract na assinatura e não têm nenhum corpo tornam a classe abstrata Classes abstratas não podem ser instanciadas não criam objetos Uma classe abstrata serve apenas como uma superclasse para outras classes Uma subclasse concreta de uma classe abstrata deve fornecer uma implementação para todos os métodos abstratos herdados. Caso contrário, ela mesma será abstrata 23

24 Mais abstração

25 for(iterator it = actors.iterator(); it.hasnext()) { Actor actor = (actor) it.next(); actor.act(...); } for(iterator it = drawables.iterator(); it.hasnext()) { Drawable item = (drawable) it.next(); item.draw(...); } Em vez de percorrer o campo inteiro, pode-se percorrer uma coleção separada de atores desenháveis

Herança múltipla Faz com que uma classe herde diretamente de múltiplas superclasses Cada linguagem tem suas próprias regras Como resolver as definições de concorrência? O Java proíbe herança múltipla para classes Porém permite para interfaces, numa forma limitada 26

Uma interface actor public interface Actor { /** * Realiza o comportamento do ator. * Transfere o ator para updatedfield se ele for * participar das etapas posteriores da simulação */ void act(field currentfield, Location location, Field updatedfield); } 27

Classes implementam interfaces public class Fox extends Animal implements Drawable {... } public class Hunter implements Actor, Drawable {... } 28 Todos os métodos de uma interface são abstratos, nenhum corpo é permitido (implícito abstract) As interfaces não possuem construtores Todos os métodos são públicos Apenas declarações de campos constantes são permitidas (implícitos public static final)

Interfaces como tipos Herança tem as seguintes vantagens: A subclasse herda o código da superclasse (reuso de código) A subclasse é um subtipo da superclasse (polimorfismo de variáveis e métodos) Interfaces também definem um tipo, assim como uma classe: Variáveis podem ser declaradas como sendo do tipo da interface (tipo estático) Durante o programa, elas vão referenciar um objeto real, instanciado a partir de um dos subtipos da interface polimorfismo 29

Interfaces como especificações Interfaces separam completamente a definição da funcionalidade da sua implementação Embora parâmetros e tipos de retorno sejam obrigatórios Clientes interagem independentemente da implementação Mas os clientes podem escolher implementações alternativas Um exemplo disso são as hierarquias de coleções em Java: List, ArrayList e LinkedList 30

Implementações alternativas implementa implementa 31

Visualização da simulação A lógica da simulação e sua visualização também são partes do sistema fracamente acopladas public interface SimulatorView { void setcolor(class c1, Color color); void isviable(field field); void showstatus(int step, Field field); } public class AnimatedView implements SimulatorView {... } 32

Herança Dois propósitos para o uso de herança: Herdar o código (reuso) Herdar o tipo (subtipagem, polimorfismo) Quando herdamos de: Classes concretas -> implementação e tipo Interfaces -> somente tipo Classes abstratas -> implementação parcial e tipo Algumas linguagens permitem herdar código sem herdar tipo (C++ -> funcões friend), mas este não é o caso de Java 33

Revisão (1) Herança pode fornecer implemen-tação compartilhada Classes concretas e abstratas Herança fornece informações sobre o tipo compartilhado Classes e interfaces 34

Revisão (2) Métodos abstratos permitem a verificação do tipo estático sem exigir uma implementação Classes abstratas funcionam como superclasses incompletas Nenhuma instância Classes abstratas suportam o polimorfismo 35

Interfaces Interfaces fornecem uma especifi-cação sem uma implementação Interfaces são totalmente abstratas Interfaces suportam polimorfismo Interfaces Java suportam herança múltipla 36