Computação II Orientação a Objetos



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

Reuso com Herança a e Composiçã

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

Técnicas de Programação II

1. Herança. Sobrescrevem métodos - redefinem métodos herdados. Subclasse herda de uma superclasse

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

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

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

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

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

Computação II Orientação a Objetos

Programação Orientada a Objetos (DPADF 0063)

Java 2 Standard Edition Como criar classes e objetos

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

Programação por Objectos. Java

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

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

Programação por Objectos. Java

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

Orientação a Objetos e a Linguagem Java

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

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

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

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

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

Revisão OO Básico. Orientação a Objetos em Java

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

Módulo 06 Desenho de Classes

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

Análise e Projeto Orientados por Objetos

Programação Orientada a Objetos C++

Programação Orientada a Objetos em Java

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

Programação Orientada a Objetos Classes Abstratas Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

Classes, Superclasses e Subclasses

Implementando uma Classe e Criando Objetos a partir dela

Capítulo 5 Reuso de Classes

Linguagem de Programação III

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

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

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

Polimorfismo. Prof. Leonardo Barreto Campos 1

Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.

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

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

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

Programação Orientada a Objetos (DPADF 0063)

Capítulo 4. Packages e interfaces

Programação Orientada a Objetos

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

NOVIDADES DO JAVA PARA PROGRAMADORES C

UML Aspectos de projetos em Diagramas de classes

Guia de Fatores de Qualidade de OO e Java

Introdução à orientação a objetos. João Tito Almeida Vianna 25/05/2013

DEFINIÇÃO DE MÉTODOS

Herança. Alberto Costa Neto DComp - UFS

Programação Orientada a Objetos. Encapsulamento

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

Programação Orientada a Objetos em java. Polimorfismo

Encapsulamento de Dados

Programação com Objectos. Processamento de Dados I. 3. UML (Unified Modeling Language)

Universidade Federal de Uberlândia Faculdade de Computação Prof. Fabiano Azevedo Dorça Programação Orientada a Objetos II. Padrões de Projeto

PROGRAMAÇÃO ORIENTADA A OBJETO EM PHP

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

Programação Orientada a Objetos Herança Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

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

Orientação a Objetos com Java

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

Classes Abstratas e Interfaces

PHP INTRODUÇÃO CLASSES E OBJETOS

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

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

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

Factory Method. Edeyson Andrade Gomes

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

Decorator Pattern. SISMO - Sistemas e Mobilidade Junho de Departamento de Informática / UFMA

Profº. Enrique Pimentel Leite de Oliveira

BSI UFRPE Prof. Gustavo Callou

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

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

Coleções. Page 1. Coleções. Prof. Anderson Augustinho Uniandrade

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

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

Orientação a Objetos

Introdução a Java. Hélder Nunes

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

Subtipos e Subclasses

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.

Análise de Programação

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

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

Classes e objetos. Tópicos abordados neste módulo. Índice JAVA 3

Transcrição:

Computação II Orientação a Objetos Fabio Mascarenhas - 2014.1 http://www.dcc.ufrj.br/~fabiom/java

Classes abstratas Até agora, usamos interfaces toda vez que queríamos representar algum conceito abstrato em nosso programa, não importa a forma como ele era implementado Programar com interfaces é flexível, mas a restrição de só podermos ter assinaturas de métodos em uma interface às vezes é inconveniente, e pode levar a duplicação de código Para contornar isso, Java oferece um segundo mecanismo para representar objetos abstratos: as classes abstratas

Classes abstratas - sintaxe Uma classe abstrata é declarada com a palavra-chave abstract acompanhando class: abstract class FiguraPt { int x; int y; public void mover(int dx, int dy) { x += dx; y += dy; public abstract void desenhar(canvas c); public abstract void escala(double f); public abstract boolean dentro(int x, int y);

Classes abstratas métodos abstratos Uma classe abstrata pode ter campos e métodos, como qualquer outra classe, mas não podemos instanciar uma classe abstrata, não importa se ela tem construtores públicos Em troca, podemos declarar métodos sem corpo, do mesmo modo que em uma interface, basta declará-los como abstract também Podemos até implementar uma interface, e deixar métodos em aberto, sem declará-los! É como se os declarássemos abstract também. abstract class FiguraPt implements Figura { int x, y; public void mover(int dx, int dy) { x += dx; y += dy;

Usando classes abstratas - herança Se não podemos instanciar uma classe abstrata diretamente, para ter instâncias dela criamos uma classe concreta que herda da classe abstrata class Retangulo extends FiguraPt { int largura; int altura; public Retangulo(int x, int y, int largura, int altura) { this.x = x; this.y = y; this.largura = largura; this.altura = altura; public boolean dentro(int x, int y) { return (x >= this.x)&&(x <= this.x + largura)&&(y >= this.y)&&(y <= this.y + altura); public void escala(double f) { altura *= f; largura *= f; public void desenhar(canvas c) { c.retangulo(x, y, largura, altura, 1, 1, 1);

Herança e Subtipagem A relação de herança (extends), como implements, também é uma relação éum (relação de subtipagem) Uma instância de Retangulo é uma instância de FiguraPt As relações é um são transitivas: uma instância de Retangulo é uma instância de FiguraPt (via herança), e uma instância de FiguraPt é uma instância de Figura (via implements), então uma instância de Retangulo é uma instância de Figura A diferença da herança é que nela a classe também herda a forma da outra, e quaisquer implementações de suas operações, não apenas as assinaturas

Herança - restrições Uma classe concreta precisa fornecer implementações para todos os métodos abstratos que ela herdou Como uma classe abstrata pode ela própria ter herdado métodos, essa obrigação é transitiva Uma classe pode implementar quantas interfaces ela quiser, mas só pode herdar de uma única outra classe Construtores não são herdados diretamente

Herança - construtores Construtores não são herdados diretamente, mas estão disponíveis Os construtores da subclasse devem chamar um dos construtores da superclasse na primeira linha Chamamos um construtor da superclasse com o comando super(...), passando os argumentos para o construtor entre os parênteses Se não chamamos nenhum construtor, é como se chamássemos o construtor padrão com super(), então a superclasse precisa ter um desses!

Template Method Um padrão de programação comum em classes abstratas, onde métodos da classe abstrata delegam parte do seu comportamento para as subclasses através de métodos abstratos Os métodos de uma classe abstrata podem chamar métodos abstratos dessa classe sem problemas; como uma subclasse concreta precisa fornecer implementações para os métodos abstratos, eles estarão lá quando necessário O uso desse padrão é comum em frameworks: ao invés da aplicação implementar uma interface, ela estende uma classe abstrata e fornece os métodos que faltam

Redefinição de métodos A subclasse não está restrita a só fornecer construtores e implementações para métodos abstratos Ela também pode redefinir métodos, dando uma outra implementação para eles Uma redefinição tem a mesma assinatura do método que está sendo redefinido Instâncias da subclasse usam sempre a nova implementação do método, mesmo que este esteja sendo chamado por uma referência para a superclasse

Herança de classes concretas e Object A superclasse que passamos para a cláusula extends não precisa ser uma classe abstrata Pode ser uma classe qualquer, assim podemos criar novas versões de uma determinada classe, mas que reaproveitam parte do seu código Quando não damos uma cláusula extends, implicitamente estamos herdando de uma classe embutida chamada Object Object tem um construtor sem parâmetros, por isso nunca percebemos que estávamos herdando dela!

tostring, equals, hashcode Object tem alguns métodos que são úteis quando redefinidos O método tostring é chamado toda vez que Java precisa converter um objeto para uma string (na concatenação com uma string, por exemplo) O método equals compara um objeto com outro, e devemos redefini-lo quando queremos comparar objetos por estrutura e não por referência O método hashcode é usado pela coleção HashMap como um resumo da esturuta de um objeto; se redefinimos equals, precisamos redefinir hashcode para dois objetos iguais terem o mesmo hashcode, ou quebramos HashMap com esses objetos como chaves

Redefinição com extensão Quando redefinimos um método em uma subclasse, podemos chamar o método que está sendo redefinido É como se estivéssemos estendendo o método, fazendo tudo o que ele faz, mais algum comportamento extra Para chamar o método que está sendo redefinido também usamos super, mas em uma chamada de método: public String tostring() { return "Meu objeto (" + super.tostring() + ")";

Herança e visibilidade Campos e métodos privados não são visíveis para as subclasses, e métodos privados não podem ser redefinidos Existe um terceiro nível de visibilidade dado pela palavra-chave protected, que torna um campo ou método público para subclasses, mas privado para outras classes O uso protected é comum quando temos membros que queremos que subclasses acessem, mas não façam parte da interface pública do objeto abstract class ExpressaoBinaria implements Expressao { Expressao esq; Expressao dir;... protected abstract double op(double x, double y);

Herança vs. Composição Herança implica uma relação é um entre a subclasse e a superclasse, então ela deve ser evitada se essa relação seria espúria Nesse caso, podemos ter o mesmo reaproveitamento de código que temos na herança, com um pouco mais de burocracia, usando composição e delegação Cuidado com a literatura introdutória de OO, ela está cheia de exemplos espúrios do uso de herança, como Círculo extende Elipse Os princípios de projeto SOLID nem sempre podem ser seguidos, mas devem ser o ideal