POO29004 Programação Orientada a Objetos

Documentos relacionados
Programação Orientada a Objetos

POO29004 Programação Orientada a Objetos

POO29004 Programação Orientada a Objetos

Programação Orientada a Objetos

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Programação Java (nível intermediário) 4. Polimorfismo

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Linguagem de Programação. Diagrama de classes

LÓGICA DE PROGRAMAÇÃO (JAVA) HERANÇA. Professor Carlos Muniz

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

Classe Abstrata e Interface

Computação II - Java - Teste 1.2 Prof. Adriano Joaquim de Oliveira Cruz 2015/04/27

Classes e Objetos. Sintaxe de classe em Java

A B Classe Genérica D A C. Classe Especializada. Classe Especializada. Características Herdadas

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Programação Orientada a Objetos

Linguagem de Programação III

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Programação Orientada a Objetos JAVA - NETBEANS

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

Conceitos de Programação Orientada a Objetos

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Linguagens de Programação Aula 12

Linguagem de Programação II Implementação

Linguagem de Programação IV Introdução


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

Linguagem de Programação II Implementação

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Programação Orientada a Objetos 2 Flávio de Oliveira Silva, M.Sc.

Java para Desktop. Programação Orientada à Objetos 2 JSE

Computação II Orientação a Objetos

4 Conceito de Herança

Aula 7 POO 1 Herança. Profa. Elaine Faria UFU

Vejamos o seguinte exemplo public class Exemplo private int testada = 20; public void testapalavra(int testada) JOptionPane.showMessageDialog(null,"Pa

Unidade: Classes Abstratas, Polimorfismo, Sobreposição e Interfaces

Herança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Introdução à Programação. Encapsulamento e Herança

Linguagem de Programação Orientada a Objeto Abstração - Encapsulamento

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU

Herança e Propriedades

nome = n; cargo = c; salario = s; public void print() { System.out.println(nome cargo salario); public void aumento( double fator){

extendsé usado para indicar herança em JAVA

Linguagem de Programação I Apresentação da Disciplina

Linguagem de Programação II Herança

Ex: carro_desportivo poderá ser uma subclasse de automóvel (carro_desportivo é_um automóvel)

Programação Java. - Herança e Polimorfismo - Marco Fagundes Marco Fagundes -

POO UML e Outros Conceitos. Prof. Vicente Paulo de Camargo

Fundamentos Básicos da linguagem Java (Programação Orientada a Objetos) Prof. Responsáveis Wagner Santos C. de Jesus

Programação. Orientada a Objetos: Herança. Objetos. Relacionamento entre classes. Análise e Projeto Orientados a. Objetos

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Polimorfismo e Ligação Dinâmica. Alcides Pamplona Polimorfismo e Ligação Dinâmica

Programação Orientada a Objetos SANTOS, Rafael

Introdução ao Ambiente Java

CONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Programação Orientada a Objetos Flávio de Oliveira Silva 144

Programação Orientada a Objetos II

Java First-Tier: Aplicações. Herança: Simples Múltipla. Orientação a Objetos em Java (III) Problemas de Herança Múltipla.

COMPORTAMENTOS - Observações

Programação Orientada a Objetos

Palavras Reservadas da Linguagem Java

9 Classes Abstractas e Interfaces

Laboratório de programação II

Herança e Polimorfismo

Linguagem de programação Programação Orientada a objetos

Como exemplo, vamos criar uma subclasse da classe Funcionario, vista nos capítulos anteriores.

Programação Orientada a Objetos Relacionamentos entre classes

Sobrecarga. Algoritmos e Programação II. Aula 3 Sobrecarga

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Programação I Curso: Sistemas de Informação. Prof.: José Ronaldo Leles Júnior .:

Programação Orientada a Objetos

Orientação a objetos Disciplina: Linguagens de Programação. Prof. Alexandre Cassimiro Andreani

PROGRAMAÇÃO I HERANÇA E POLIMORFISMO

Herança - Conceitos Básicos

POO Fundamentos Parte III. Professor Vicente Paulo de Camargo

Curso: Técnico em Informática Integrado Disciplina: POO Carga horária: 60h Período: 2º Ano Professor: Edmilson Barbalho Campos Neto LISTA 02.

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

Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a. cada classe e cada membro da classe (dados e métodos)

Orientação a Objetos AULA 06

UNIVERSIDADE PAULISTA - UNIP ICET INSTITUTO DE CIÊNCIAS EXATAS E TECNOLÓGIA

Notas de Aula 04: Herança e polimorfismo.

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

Orientação a objetos. Programação. Orientada a Objetos. Orientação a objetos. Orientação a objetos. Abstração e encapsulamento

Herança Sendo uma linguagem orientada a objetos Java oferece mecanismos para definir classes derivadas a partir de classes existentes; As classes deri

Interfaces POO. Prof. Marcio Delamaro

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objetos

PROGRAMAÇÃO ORIENTADA A OBJETOS: OCULTAR INFORMAÇÕES E ENCAPSULAMENTO

Sobrecarga, Sobreposição e Polimorfismo

Herança - Conceitos Básicos

Programação Orientada a Objetos JAVA - NETBEANS

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Transcrição:

POO29004 Programação Orientada a Objetos Herança Prof. Emerson Ribeiro de Mello Instituto Federal de Santa Catarina IFSC campus São José mello@ifsc.edu.br http://docente.ifsc.edu.br/mello/poo 11 de setembro de 2017 1/21

Herança Genética Um organismo adquire características semelhantes à do organismo que o gerou 2/21

Herança Genética Um organismo adquire características semelhantes à do organismo que o gerou Programação Orientada a Objetos Uma classe herda atributos e métodos de uma outra classe 2/21

Herança O conceito de herança pode tornar mais rápido o desenvolvimento de softwares complexos Novas classes são criadas baseadas em classes existentes classe filha, subclasse ou classe derivada A classe que herda os atributos e funções de outra classe classe pai, superclasse ou classe base A classe cujo membros são herdados por outras classes 3/21

Herança O conceito de herança pode tornar mais rápido o desenvolvimento de softwares complexos Novas classes são criadas baseadas em classes existentes classe filha, subclasse ou classe derivada A classe que herda os atributos e funções de outra classe classe pai, superclasse ou classe base A classe cujo membros são herdados por outras classes Quando usar herança? Ideal para casos onde são necessárias classes distintas para atacar problemas específicos. Porém, tais classes necessitam compartilhar um núcleo comum 3/21

Exemplo: Sistema para cadastro de produtos Uma indústria da área de telecomunicações necessita de um sistema para cadastrar os produtos que fabrica Aparelho telefônico As informações necessárias para o cadastro são: código, número de série, modelo, cor, peso, dimensões (AxLxP) 4/21

Exemplo: Sistema para cadastro de produtos Uma indústria da área de telecomunicações necessita de um sistema para cadastrar os produtos que fabrica Aparelho telefônico As informações necessárias para o cadastro são: código, número de série, modelo, cor, peso, dimensões (AxLxP) 4/21

Exemplo: Sistema para cadastro de produtos A empresa começou a fabricar também telefones sem fio Os telefones sem fio compartilham todas as características de um telefone, porém possuem novas características frequência, quantidade de canais, distância de operação O atual sistema não permite cadastrar essas novas informações 5/21

Exemplo: Sistema para cadastro de produtos A empresa começou a fabricar também telefones sem fio Os telefones sem fio compartilham todas as características de um telefone, porém possuem novas características frequência, quantidade de canais, distância de operação O atual sistema não permite cadastrar essas novas informações O que fazer? 1 Criar uma nova classe telefone sem fio e colocar nela tudo o que tem na classe telefone mais as características do telefone sem fio? 2 Herdar as características comuns da classe telefone e adicionar as particulares do telefone sem fio? 5/21

Exemplo: Sistema para cadastro de produtos A empresa começou a fabricar também telefones sem fio Os telefones sem fio compartilham todas as características de um telefone, porém possuem novas características frequência, quantidade de canais, distância de operação O atual sistema não permite cadastrar essas novas informações O que fazer? 1 Criar uma nova classe telefone sem fio e colocar nela tudo o que tem na classe telefone mais as características do telefone sem fio? 2 Herdar as características comuns da classe telefone e adicionar as particulares do telefone sem fio? 5/21

Herança: exemplo 6/21

Herança: Superclasse Telefone 1 public class Telefone{ 2 private int codigo; 3 private String numserie, modelo; 4 private float peso; 5 private Dimensao dim; 6 7 public Telefone(int c, String s, String m, float p, Dimensao d) 8 { 9 this.codigo = c; this.peso = p; this.dim = d; 10 this.numserie = s;this.modelo = m; 11 } 12 13 public void imprimirdados(){ 14 System.out.println("Codigo: " + this.codigo); 15... 16 this.dim.imprimirdados(); 17 } 18 } 7/21

Herança: Subclasse SemFio 19 public class Semfio extends Telefone{ 20 private float frequencia, distancia; 21 private int canais; 22 23 public SemFio(int c, String s, String m, float p, Dimensao d, int ca, float f, float dis){ 24 super(c, s, m, p, d); // invocando o construtor da superclasse 25 this.frequencia = f; 26 this.distancia = dis; 27 this.canais = ca; 28 } 29 30 // sobrescrita do metodo da superclasse 31 public void imprimirdados(){ 32 super.imprimirdados(); // invocando o metodo de mesmo nome da superclasse 33 System.out.println("Freq: " + this.frequencia); 34... 35 } 36 } 8/21

Herança: Criando instâncias do Telefone e SemFio 37 public class Principal{ 38 public static void main(string[] args){ 39 Telefone t = new Telefone(1,"ABC123","MesaTel",0.5, new Dimensao (10,10,5)); 40 41 SemFio sf = new SemFio(2,"DEF456","LivreTel",0.7,new Dimensao (20,8,7), 11, 2400,100); 42 43 t.imprimirdados(); 44 sf.imprimirdados(); 45 } 46 } 9/21

Sobrescrita de método Um subclasse pode sobrescrever um método da superclasse que tenha a mesma assinatura (tipo de retorno, nome e lista de parâmetros) 47 public class Telefone{ 48 public void ola(){ 49 System.out.println("Ola, sou um telefone"); 50 } 51 } 52 public class Semfio extends Telefone{ 53 public void ola(){ 54 System.out.println("Ola, sou um telefone sem fio"); 55 } 56 } 57 public class Principal{ 58 public static void main(string args[]){ 59 Telefone t = new Telefone(); 60 Semfio s = new Semfio(); 61 t.ola(); // Ola, sou um telefone 62 s.ola(); // Ola, sou um telefone sem fio 63 } 64 } 10/21

Membros públicos, privados e protegidos Os membros privados de uma classe só podem ser acessados pelos demais membros desta mesma classe Os membros públicos de uma classe podem ser acessados por qualquer outra classe O modificador de acesso protected apresenta uma restrição intermediária entre o private e o public Membros protegidos podem ser acessados pelos demais membros da classe, pelas demais classes do pacote e pelas classes derivadas 11/21

Modificador de acesso protected: exemplo 66 package produtos; 67 68 public class Telefone{ 69 private String marca; 70 protected String modelo; 71 public float peso; 72 } 73 package produtos; 74 75 public class SemFio extends Telefone{ 76 private float frequencia; 77 public void modificador(){ 78 this.frequencia = 900; // acesso ok 79 this.modelo = "ABC"; // acesso ok 80 this.peso = 0.5; // acesso ok 81 this.marca = "GrandTel"; // erro! Nao permitido 82 } 83 } 12/21

Modificador de acesso protected: exemplo 84 package poo; 85 import produtos.telefone; 86 import produtos.semfio; 87 88 public class Principal{ 89 public static void main(string[] args){ 90 Telefone t = new Telefone(); 91 SemFio sf = new SemFio(); 92 93 // invocando um membro public 94 t.peso = 0.6; // acesso ok 95 // invocando um membro protected 96 t.modelo = "DEF"; // erro! 97 // invocando um membro private 98 t.marca = "GT"; // erro! 99 } 100 } 13/21

Herança em Java Com exceção da classe Object, que não possui superclasse, toda classe Java tem uma e somente uma superclasse direta Toda classe herda implicitamente da classe Object Uma classe pode ser derivada de uma outra classe e essa por sua vez pode ser derivada de outra classe,... A associação de herança pode ser lida como é um Celular é um Telefone 14/21

Coerção de tipos (typecasting) ou conversão de tipos 101 Telefone a = new Telefone(); 102 Semfio b = new SemFio(); 103 Celular c = new Celular(); Celular é um Telefone? Um Telefone pode ser um Celular? 15/21

Coerção de tipos (typecasting) ou conversão de tipos 110 Telefone a = new Telefone(); 111 Semfio b = new SemFio(); 112 Celular c = new Celular(); Celular é um Telefone? SIM! Um Telefone pode ser um Celular? Não necessariamente typecasting O uso do objeto de um tipo na referência de um outro tipo 113 Telefone d = new Celular(); // OK, coerç~ao implítica 114 Object e = new Semfio(); // OK, coerç~ao implítica 115 Celular f = (Celular) d; //OK, coerç~ao explícita 116 117 Celular g = a; // ERRO! Telefone n~ao é Celular 118 Celular h = (Celular) e; // ERRO! Semfio n~ao é Celular 15/21

Coerção de tipos (typecasting) ou conversão de tipos Operador instanceof Teste lógico para verificar o tipo de um objeto 119 Telefone vetor[] = new Telefone[3]; 120 vetor[0] = new Telefone(); 121 vetor[1] = new Semfio(); 122 vetor[2] = new Celular(); 123 124 for(int i = 0; i < 3; i++ ){ 125 126 if (vetor[i] instanceof Celular){ 127 128 Celular c = (Celular) vetor[i]; 129... 130 } 131 } 16/21

Herança múltipla No desenvolvimento de softwares complexos poderemos nos deparar com situações onde uma nova classe possui características semelhantes com duas ou mais classes existentes A linguagem C++ possui o conceito de herança múltipla permitindo que uma classe seja derivada de várias classes base 17/21

Herança múltipla No desenvolvimento de softwares complexos poderemos nos deparar com situações onde uma nova classe possui características semelhantes com duas ou mais classes existentes A linguagem C++ possui o conceito de herança múltipla permitindo que uma classe seja derivada de várias classes base 17/21

Herança múltipla em Java Java não permite que uma classe seja derivada de mais de uma outra classe Para evitar as complicações relacionadas a herança múltipla de estados habilidade de herdar atributos de múltiplas classes 18/21

Herança múltipla em Java Java não permite que uma classe seja derivada de mais de uma outra classe Para evitar as complicações relacionadas a herança múltipla de estados habilidade de herdar atributos de múltiplas classes O conceito de herança múltipla pode ser obtido em Java fazendo uso de Interfaces herança múltipla de tipos uma classe pode implementar mais de uma interface herança múltipla de implementação habilidade de herdar as definições de métodos de múltiplas interfaces Java 8 introduziu o conceito de métodos default para Interfaces, que permite que métodos em uma Interface tenham implementação 18/21

Exercícios 19/21

Diagrama de classes UML com associações de herança Você pode criar as classes que julgar necessário, contudo desde que não inclua herança múltipla 1 Pessoa, estudante, professor 2 Bicicleta, carro, moto, navio, avião, helicóptero 3 Gato, baleia, cachorro, avestruz, macaco, arara 4 Conta corrente, poupança 19/21

Formas geométricas Para um aplicativo que trabalha com desenhos vetoriais Diagrama de classes UML Crie classes para representar as formas ao lado. Deve-se indicar as associações entre as classes (agregação, composição e herança) Um ponto é representado no plano cartesiano pelas coordenadas X e Y Deve possuir um método para calcular a área das formas que a possuem 20/21

Formas geométricas 1 Acrescente do digrama do exercício anterior classes para representar uma Esfera e um Cilindro 2 Implemente em Java todas as classes do diagrama Todas classes devem possuir um método desenhar que irá imprimir no dispositivo de saída uma mensagem como: Desenhando um ponto em X, Y. 3 Faça um aplicativo Java (classe com método main) e instancie alguns objetos das classes acima e invoque o método desenhar desses objetos 21/21