HERANÇA. Prog. Orientada a Objetos em Java



Documentos relacionados
Programação Orientada a Objetos

Leitura. Capítulo 7 (Prog. Orient. a Obj. usando Java - 4th Edition)

Programação por Objectos. Java

Orientação a Objetos e a Linguagem Java

Módulo 06 Desenho de Classes

Classes Abstratas e Interfaces

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

Programação Orientada a Objetos (DPADF 0063)

Programação Orientada a Objetos. Encapsulamento

Orientação a Objetos

Programação por Objectos. Java

2 Engenharia de Software

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

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

Encapsulamento de Dados

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

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

Análise de Programação

Computação II Orientação a Objetos

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

Herança. Alberto Costa Neto DComp - UFS

Introdução a Java. Hélder Nunes

Programação Orientada a Objetos (DPADF 0063)

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

UML: Diagrama de Casos de Uso, Diagrama de Classes

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

Algoritmos e Programação II. Sobrecarga

Introdução a classes e objetos by Pearson Education do Brasil

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

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

Capítulo 5 Reuso de Classes

Noções sobre Objetos e Classes

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

Análise e Projeto Orientados por Objetos

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

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

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

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

Implementando uma Classe e Criando Objetos a partir dela

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

Python Intermediário. terça-feira, 4 de agosto de 15

Técnicas de Programação II

Programação Orientada a Objetos em Java

Programação Orientada a Objetos C++

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

2 Orientação a objetos na prática

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

Modelagem de Dados Usando o Modelo Entidade-Relacionamento

Programação por Objectos. Java

Orientação a Objetos. Conceitos Iniciais Introdução a Linguagem Java. Gil Eduardo de Andrade

Java 2 Standard Edition Como criar classes e objetos

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

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

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

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

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

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

Capítulo 8. Introdução UML

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

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Classes, Superclasses e Subclasses

Visual Basic.NET Programação Orientada a Objetos Lista de Exercícios

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

Exercícios de Revisão Java Básico

Programação Orientada a Objeto

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

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

Capítulo 4. Packages e interfaces

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

UML Aspectos de projetos em Diagramas de classes

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

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

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

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

BSI UFRPE Prof. Gustavo Callou

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS

ÍNDICE. Delphi... 3 CAPÍTULO 1 INTRODUÇÃO CAPÍTULO 2 INSTALANDO O DELPHI... 10

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

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

Neste artigo estudaremos os conceitos relacionados às matrizes unidimensionais (vetores) e multidimensionais.

PROGRAMAÇÃO ORIENTADA A OBJETO EM PHP

MODELAGEM VISUAL DE OBJETOS COM UML DIAGRAMA DE CLASSES.

Reuso com Herança a e Composiçã

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

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

Teste de Software. Ricardo Argenton Ramos Engenharia de Software I

Introdução ao Paradigma Orientado a Objetos. Principais conceitos

Prof. Jhonatan Fernando

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

Conversão de Tipos e Arrays

Projeto de Software Orientado a Objeto

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

9 Comandos condicionais

JSP - ORIENTADO A OBJETOS

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

Transcrição:

HERANÇA Prog. Orientada a Objetos em Java

Lembrando: Acoplamento slide 2 O acoplamento se refere às ligações entre distintas unidades de um programa. Se duas classes dependem rigorosamente de muitos detalhes uma da outra, dizemos que são fortemente acopladas. Nosso objetivo é o acoplamento fraco.

Lembrando: Coesão slide 3 A coesão refere-se ao número e à diversidade de tarefas pelas quais uma única unidade de uma aplicação é responsável. Se cada unidade é responsável por uma única tarefa lógica, dizemos que ela tem alta coesão. A coesão se aplica a classes e métodos. Buscamos a alta coesão.

Lembrando: Acoplamento fraco slide 4 Se duas classes dependem rigorosamente de muitos detalhes uma da outra, dizemos que são fortemente acopladas O acoplamento fraco possibilita: entender uma classe sem ler outras mudar uma classe sem afetar outras assim: melhora a capacidade de manutenção

Lembrando: Alta coesão slide 5 Se cada unidade é responsável por uma única tarefa lógica, dizemos que ela tem alta coesão. A alta coesão possibilita: entender o que uma classe ou método faz usar nomes descritivos reusar classes ou métodos

Lembrando: Coesão slide 6 Métodos: Um método deve ser responsável por apenas uma tarefa bem definida. Classes: As classes devem representar uma entidade única, bem definida.

Lembrando: Design baseado na responsabilidade slide 7 Questão: onde adicionar um novo método (que classe)? Cada classe deve ser responsável por manipular seus próprios dados. A classe que deter os dados deve ser responsável por processá-los. RDD resulta em acoplamento fraco.

Lembrando: slide 8 Duplicação de código Sinal de baixa coesão de métodos Encapsulamento Reduz acoplamento Design baseado na responsabilidade Reduz acoplamento Acoplamento implícito Gera bugs difíceis de encontrar Código mal estruturado grande quantidade de trabalho para alteração.

Principais conceitos a serem abrangidos slide 9 Herança Subtipagem Substituição Variáveis polimórficas

O exemplo do DoME slide 10 "Banco de dados de entretenimento multimídia" armazena detalhes sobre CDs e DVDs CD: título, artista, número de faixas, tempo de reprodução, flag go-it, comentário DVD: título, artista, número de faixas, tempo de reprodução, flag go-it, comentário permite (posteriormente) pesquisar informações ou imprimir listas

slide 11 Objetos DoME

Classes DoME slide 12 metade superior mostra os campos metade inferior mostra os métodos

Modelo de objeto DoME slide 13 2008 by Pearson Education Programãção orientada com objetos JAVA Uma introdução prática utilizando o BlueJ Barnes Kölling

slide 14 Diagrama de classes

slide 15 Código-fonte do CD [ ] incompleto (comentários!) public class CD { private String title; private String artist; private String comment; public CD(String thetitle, String theartist) { title = thetitle; artist = theartist; comment = " "; public void setcomment(string newcomment) {... public String getcomment() {... public void print() {......

slide 16 Código-fonte do DVD [ incompleto ] (comentários!) public class DVD { private String title; private String director; private String comment; public DVD(String thetitle, String thedirector) { title = thetitle; director = thedirector; comment = " "; public void setcomment(string newcomment) {... public String getcomment() {... public void print() {......

Código-fonte de Database slide 17 class Database { private ArrayList<CD> cds; private ArrayList<DVD> dvds;... public void list() { for(cd cd : cds) { cd.print(); System.out.println(); // linha em branco entre itens for(dvd dvd : dvds) { dvd.print(); System.out.println(); // linha em branco entre itens

Crítica de DoME slide 18 duplicação de código classes CD e DVD muito semelhantes (grande parte é idêntica) torna manutenção difícil/mais trabalho introduz risco de bugs por meio da manutenção incorreta duplicação de código também na classe Database

slide 19 Utilizando herança

Utilizando herança slide 20 define uma superclasse : item define subclasses para Video e CD a superclasse define atributos comuns as subclasses herdam os atributos de superclasse as subclasses adicionam atributos próprios

slide 21 Hierarquias de herança

Herança em Java slide 22 public class Item {... nenhuma alteração aqui alteração aqui public class CD extends Item {... public class DVD extends Item {...

Superclasse slide 23 public class Item { private String title; private int playingtime; private boolean gotit; private String comment; // construtores e métodos omitidos.

Subclasses slide 24 public class CD extends Item { private String artist; private int numberoftracks; // construtores e métodos omitidos. public class DVD extends Item { private String director; // construtores e métodos omitidos.

Herança e construtores slide 25 public class Item { private String title; private int playingtime; private boolean gotit; private String comment; /** * Inicializa os campos do item. */ public Item(String thetitle, int time) { title = thetitle; playingtime = time; gotit = false; comment = ""; // métodos omitidos

Herança e construtores slide 26 public class CD extends Item { private String artist; private int numberoftracks; /** * Constructor for objects of class CD */ public CD(String thetitle, String theartist, int tracks, int time) { super(thetitle, time); artist = theartist; numberoftracks = tracks; // métodos omitidos

Chamada de construtor de superclasse slide 27 Os construtores de superclasse devem sempre conter uma chamada 'super'. Se nenhuma for escrita, o compilador insere uma (sem parâmetros): funciona somente se a superclasse tiver um construtor sem parâmetros. Deve ser a primeira instrução no construtor de subclasse.

slide 28 Adicionando mais tipos de item

slide 29 Hierarquias mais profundas

slide 30 Revisão (até esse ponto) A herança (até esse ponto) ajuda: A evitar a duplicação de código A reutilizar código A facilitar a manutenção Extensibilidade

Novo código-fonte de Database slide 31 public class Database { private ArrayList<Item> items; evita duplicação de código no cliente! /** * Cria uma classe Database vazia. */ public Database() { items = new ArrayList<Item>(); /** * Adiciona um item ao banco de dados. */ public void additem(item theitem) { items.add(theitem);...

Novo código-fonte de Database slide 32 /** * Imprime uma lista de todos os CDs armazenados * atualmente e DVDs ao terminal de texto. */ public void list() { for(item item : items) { item.print(); // Imprime uma linha em branco entre itens System.out.println(); 2008 by Pearson Education Programãção orientada com objetos JAVA Uma introdução prática utilizando o BlueJ Barnes Kölling

Subtipagem slide 33 Primeiro, tínhamos: public void addcd(cd thecd) public void addvideo(dvd thedvd) Agora, temos: public void additem(item theitem) Chamamos esse método com: DVD mydvd = new DVD(...); database.additem(mydvd); 2008 by Pearson Education Programãção orientada com objetos JAVA Uma introdução prática utilizando o BlueJ Barnes Kölling

Subclasses e subtipos slide 34 Classes definem tipos. Subclasses definem subtipos. Objetos de subclasses podem ser usados onde os objetos de supertipos são necessários. (Isso é chamado de substituição.)

Subtipagem e atribuição slide 35 os objetos de subclasse podem ser atribuídos a variáveis de superclasse Vehicle v1 = new Vehicle(); Vehicle v2 = new Car(); Vehicle v3 = new Bicycle();

Subtipagem e transmissão de parâmetro slide 36 public class Database { public void additem(item theitem) {... DVD dvd = new DVD(...); CD cd = new CD(...); os objetos de subclasse podem ser atribuídos a variáveis de superclasse database.additem(dvd); database.additem(cd);

slide 37 Diagrama de objetos

slide 38 Diagrama de classes

Variáveis polimórficas slide 39 As variáveis de objeto em Java são polimórficas. (Podem armazenar objetos de mais de um tipo.) Podem armazenar objetos do tipo declarado ou subtipos do tipo declarado.

Coerção slide 40 É possível atribuir o subtipo ao supertipo. Não é possível atribuir o subtipo ao supertipo! Vehicle v; Car c = new Car(); v = c; // correto; c = v; erro de tempo de compilação! A coerção corrige isso: c = (Car) v; (ok apenas se o veículo for de fato um carro!)

Coerção slide 41 Um tipo de objeto entre parênteses. Usado para superar 'perda do tipo'. O objeto não é alterado de modo algum. Uma verificação em tempo de runtime é feita para garantir que o objeto realmente é desse tipo: ClassCastException se não for! Utilize-a com moderação.

A classe Object slide 42 Todas as classes herdam de Object.

Coleções polimórficas slide 43 Todas as coleções são polimórficas. Elementos são do tipo Object. public void add(object element) public Object get(int index)

Coleções e tipos primitivos slide 44 Todos os objetos podem ser inseridos em coleções...... porque coleções aceitam elementos do tipo Object...... e todas as classes são subtipos de Object. Excelente! Mas o que dizer dos tipos simples?

Classes wrappers slide 45 Tipos primitivos (int, char, etc) não são objetos. Eles devem ser empacotados em um objeto! Existem classes empacotadoras para todos os tipos simples: tipo simples classe empacotadora int Integer float Float char Character......

Classes wrappers slide 46 int i = 18; Integer iwrap = new Integer(i); int value = iwrap.intvalue(); empacota o valor desempacota-o Na prática, autoboxing e unboxing significam que não precisamos fazer isso com freqüência.

Autoboxing e unboxing slide 47 private ArrayList<Integer> marklist; public void storemark(int mark) { marklist.add(mark); autoboxing int firstmark = marklist.remove(0); unboxing

Revisão slide 48 A herança permite a definição de classes como extensões de outras classes. Herança: evita a duplicação de código permite reuso de código simplifica o código simplifica a manutenção e extensão Variáveis podem armazenar objetos de subtipo. Subtipos podem ser usados sempre que se esperar objetos de supertipo (substituição).