Herança. Caso queira referir-se a um construtor da super classe, a sintaxe é diferente: super.nomedoatributo; super.nomedometodo(<parametros>)

Documentos relacionados
AULA TEÓRICA 9. Tema 8. Herança (continuação) Ø Sobreposição de métodos. Ø Variáveis e métodos estáticos. Ø Hierarquia de classes.

Programação Orientada aos Objectos I

Array de objectos Array de objectos Criação Exemplo:

AULA TEÓRICA 7 Tema 7. Colecções (cont.) Vector Ø Criação Ø Manipulação

Aula teórica 11. Tema 11. Repetição. Ciclo while Ciclo do-while Ciclo for

AULA TEÓRICA 10. Tema 9. Interface. Tema 10. Recursividade

Aula teórica 14. Tema 12. Subprogramas (cont)

Tema 7. Colecções AULA TEÓRICA 6. Listas: ArrayList, LinkedList, Vector Ø Criação Ø Manipulação

Aula teórica 10 Tema 10. Selecção Instruções de selecção:

Aula teórica 4. Tema 3. Linguagem de Programação Java. Manipulação de informação simples (cont.)

AULA TEÓRICA 3. Tema 4. Excepções Ø Tratamento de excepções

AULA TEÓRICA 7. Tema 4. Estruturas de controlo (continuação).

AULA TEÓRICA 4. Tema 5. Ficheiros. Ficheiro do tipo texto. Ficheiros de Objectos. Ø Classe File Ø Criação. Manipulação. Ø Classe StringTokenizer

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

Aula teórica 13. Tema 12. Subprogramas. Subprogramas em Java Chamada de métodos. Área de domínio das variáveis. Preparado por eng.

AULA TEÓRICA 3 Tema 2. Introdução a programação em Java (JVM, JDK)

AULA TEÓRICA 5 Tema 3. Instruções básicas de entrada e saída (continuação)

AULA TEÓRICA 1 Tema 6. Algoritmos e Fluxogramas

Instituto Superior de Ciências e Tecnologia de Moçambique

AULA TEÓRICA 4. Tema 2. Introdução a programação em Java (Continuação) Tema 3. Instruções básicas de entrada e saída

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

Linguagem de Programação II Implementação

AULA TEÓRICA 3. Tema 2. Introdução a programação em Java (Continuação)

Aula Teórica 8. Preparado por eng.tatiana Kovalenko

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

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

1 Introdução e Conceitos básicos

Análise de Programação

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

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

9 Classes Abstractas e Interfaces

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

Programação por Objectos. Java

Programação Estruturada e Orientada a Objetos

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

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

Instituto Superior de Ciências e Tecnologia de Moçambique

Tipos, Literais, Operadores

Tipos, Literais, Operadores

AULA TEÓRICA 2. Tema 1. Desenho de Algoritmos (continuação)

Palavras Reservadas da Linguagem Java

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

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

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

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

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

Herança. Fátima L. S. Nunes Luciano A. Digiampietri Norton T. Roman SISTEMAS DE INFORMAÇÃO 1

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

Prof. A. G. Silva. 30 de outubro de Prof. A. G. Silva INE5603 Introdução à POO 30 de outubro de / 1

DCC / ICEx / UFMG. Membros de Classes. Eduardo Figueiredo.

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

AULA TEÓRICA 4. Tema 3. Linguagem de programação de alto nível Java

Programação com Objectos. Processamento de Dados I. 2. Classes, Atributos e Métodos

Introdução à Programação LP JAVA

Linguagem de Programação III

Linguagem de Programação. Diagrama de classes


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

Programação por Objectos. Java

Programação Orientada a Objetos

Linguagem de Programação II Implementação

Introdução. LP OO desenvolvida pela Sun no início da década de 90 com sintaxe semelhente a C\C++. C C++.

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

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

Herança e Propriedades

Classe Abstrata e Interface

4 Conceito de Herança

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

Notas de Aula 09: Tratamento de exceções

PROGRAMAÇÃO JAVA. Parte 3

Universidade Federal de Uberlândia

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

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

Orientação a Objetos e Java

Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção.

Programação Orientada a Objetos

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

Introdução ao Java. Prof. Herbert Rausch Fernandes

PROGRAMAÇÃO ORIENTADA A OBJETOS: HERANÇA

Programação Orientada a Objetos. Aula 1.9 this e static. Prof. Bruno Moreno

Classes e Objetos. Prof. Fernando V. Paulovich 9 de agosto de 2010

Linguagem de Programação III

Programação por Objectos. Java

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 Objectos - P. Prata, P. Fazendeiro

Linguagem de Programação II Herança

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

Computação II Orientação a Objetos

Programação Orientada a Objetos SANTOS, Rafael (PLT)

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

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

Instituto Politécnico de Setúbal. Escola Superior de Tecnologia. Departamento de Sistemas e Informática. Guia para codificação em JAVA

No final deste curso, saberás criar programas através da linguagem de programação Java.

Encapsulamento. Alberto Costa Neto DComp - UFS

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

Módulo 5. Programação Orientada a Objetos. Programação Orientada a Objetos I Java (Rone Ilídio)

Transcrição:

Herança Herança é o mecanismo que possibilita a definição de novas classes (chamadas subclasses) a partir de uma já existente (chamada super classe), como forma de reutilizar seus atributos e métodos. A super classe é aquela que representa as características genéricas de um conjunto de objectos. A subclasse, também conhecida como classe descendente, é aquela que estende a superclasse para incluir a representação de características específicas de um subconjunto desses objectos. O termo extends é utilizado na declaração de uma classe para especificar quem é sua superclasse. Caso ele seja omitido, como se fez em todos os exemplos anteriores, a classe Object será assumida como a superclasse da nova classe. Para referir-se a um atributo ou a método da super classe num método de uma subclasse, basta utilizar a referência super: super.nomedoatributo; super.nomedometodo(<parametros>) Caso queira referir-se a um construtor da super classe, a sintaxe é diferente: super(<parametros>); 1

O modificador protected indica que os métodos e as variáveis podem ser acedidos a partir de subclasses da classe onde estão declarados, mas não a partir das restantes classes. public class Livro { protected int paginas; public Livro(int p) { paginas = p; public void descreve() { System.out.println("Livro com "+paginas +" paginas"); Pretende-se considerar um livro que é o dicionário. Um dicionário tem as características comuns a qualquer livro, bem como algumas características específicas. Uma classe que represente dicionários pode, então, ser definida como uma subclasse da classe que representa livros. 2

public class Dicionario extends Livro { private int entradas; public Dicionario(int pag, int ent) { super(pag); //cria automaticamente o objecto da super classe entradas = ent; public void descreve() { System.out.println("Dicionario"); System.out.println(" Numero de paginas " + paginas); System.out.println(" Numero de entradas "+ entradas); ============================ public class ExemploHeranca { public static void main (String args[]) { Dicionario dict = new Dicionario (600,10000); dict.descreve(); Output: Dicionario Numero de paginas: 600 Numero de entradas: 10000 3

Construtor de uma subclasse Normalmente, o construtor de uma subclasse inclui a chamada a um construtor da super classe, permitindo assim, que as suas variáveis de instância possam ser inicializadas convenientemente. //Construtor da classe Dicionario chama o construtor da classe Livro public Dicionario(int pag, int ent) { super(pag); //chamada do construtor da super classe Livro entradas = ent; Nota: a instrução super() tem que aparecer antes de qualquer outra instrução. É possível estender uma mesma classe para criar diversas subclasses que herdem seus atributos e métodos. Em Java é permitida a definição de mais do que um construtor para uma classe. Por exemplo, no caso de se pretender ter a possibilidade de criar um rectângulo poderia criar-se o seguinte construtor: public Rectangulo(int px, int py, int c, int l) { posx = px; posy = py; comp = c; larg = l; 4

E no caso de se pretender ter a possibilidade de criar um rectângulo especificando apenas a sua localização e deixando a indicação do comprimento e de largura para depois, poderia criar-se um outro construtor da seguinte forma: public Rectangulo(int px, int py) { posx = px; posy = py; A identificação dos métodos não é feita apenas pelo seu nome, mas pela sua assinatura, o que inclui o nome, o número e o tipo dos parâmetros do método. Quando é feita a chamada de um construtor desta classe, o compilador verifica qual dos construtores disponíveis corresponde à chamada, comparando as suas assinaturas com a chamada efectuada. Desta forma, as duas seguintes chamadas estão correctas: Rectangulo r1 = new Rectangulo (10, 10, 50, 60); Rectangulo r2 = new Rectangulo (20, 30); Nesta situação, em que há mais do que um construtor, diz-se que o construtor está sobrecarregado. O mesmo ocorre quando existem numa classe vários métodos com o mesmo nome, mas diferentes assinaturas. 5

Tendo em conta a existência do segundo construtor, o primeiro pode ser alterado para: public Rectangulo(int px, int py, int c, int l) { this(px, py); comp = c; larg = l; public Rectangulo(int px, int py){ posx = px; posy = py; A instrução this(px,py); chama o construtor com dois parâmetros, uma vez que só são fornecidos dois valores como parâmetros. Este construtor inicializa as variáveis de instância posx e posy. A palavra reservada this permite chamar um construtor a partir de outro, evitando, assim, a repetição de código. Nota: a instrução this deve aparecer antes de qualquer outra no construtor onde ocorre. Esta palavra reservada pode ser utilizada em qualquer método e não apenas em construtores. A sua utilização produz uma referência para o objecto em relação ao qual o método foi chamado. Uma utilização comum surge quando se pretende eliminar uma ambiguidade provocada pelo nome de uma variável de instância ser igual ao nome de um parâmetro de um método que a usa. Por exemplo: public void setcomp(int comp) { if (comp > 0) this.comp = comp; 6

Modificadores de visibilidade O Conceito de encapsulamento pode ser concretizado à custa de modificadores de visibilidade. A utilização de modificadores de visibilidade serve para controlar o acesso aos métodos e variáveis de uma classe. O modificador public indica que a variável ou o método podem ser acedidos a partir de qualquer classe. O modificador private indica que a variável ou método só podem se acedidas a partir da própria classe. O modificador protected indica que os métodos e as variáveis podem ser acedidos a partir de subclasses da classe onde estão declarados, mas não a partir das restantes classes. É, por isso, comum utilizar o modificador protected na declaração das variáveis de instância das classes, de forma a permitir o acesso pelas subclasses que venham a ser criadas, mas mantendo-as invisíveis a partir de outras quaisquer classes. Nota: A subclasse herda todos os membros da sua superclasse que não são private. Exemplo: A classe UmIndividuo representa quatro características comuns para todos os indivíduos (nome, email, idade e sexo), a classe Professor adiciona uma característica específica que somente professores possuem (numero de horas trabalhadas), a classe Aluno adiciona duas características específicas que somente alunos possuem (o valor da media e a classe que frequenta). 7

UmIndividuo # nome: String # idade: byte # email: String # sexo: char + UmIndividuo(String nome, String email,byte idade,char sexo) + UmIndividuo() + setnome (String nome) : void + setsexo(char sexo):void + setemail( String email) : String + setidade(byte idade): void + tostring( ) : String - numhoras: byte Professor + Professor(String nom, String email, byte idad, char sex,byte numhoras) + Professor( ) + getnumhoras ( ): byte + setnumhoras(byte numhoras): void + tostring() : String - media: float - classe: byte Aluno + Aluno(String nom,string ender,byte idade, char sex,byte classe,float media) + Aluno() + getmedia ( ): float + setmedia(float m):void + getclasse(): byte + setclasse(byte c):void + tostring() : String 8

public class UmIndividuo { protected String nome, email; protected byte idade; protected char sexo; public UmIndividuo(String nome,string email,byte idade,char sexo) { this.nome = nome; this.email = email; this.idade = idade; this.sexo = sexo; public UmIndividuo() { this("","",(byte)0,' '); public void setnome(string nome) {this.nome = nome; public void setemail(string email) {this.email=email; public void setsexo(char sexo) { if(sexo=='f' sexo=='f' sexo=='m' sexo=='m') this.sexo=sexo; public void setidade(byte idade) { if(idade>5) this.idade=idade; public String tostring() { return "\nnome:"+nome+" Email:"+email+" idade:"+idade+"sexo:"+sexo ; 9

public class Professor extends UmIndividuo { private byte numhoras; public Professor(String nom,string email,byte idad,char sex, byte numhoras) { super(nom,email,idad,sex); this.numhoras = numhoras; public Professor() { this("","",(byte)0,' ',(byte)0); public byte getnumhoras() { return numhoras; public void setnumhoras(byte numhoras) { if(numhoras>0) this.numhoras=numhoras; public String tostring() { return super.tostring()+"\\tndados do PROFESSOR: "+ " Numero de Horas: "+numhoras; 10

public class Aluno extends UmIndividuo { private float media; private byte classe; public Aluno(String nom,string ender,byte idad,char sex, byte classe,float media) { super(nom,ender,idad,sex); this.media = media; this.classe = classe; public Aluno() { this("","",(byte)0,' ',(byte)0,0); public float getmedia() {return media; public byte getclasse() {return classe; public void setmedia(float media) { this.media=media; public void setclasse(byte classe) { if(classe >= 1 && classe <= 12) this.classe = classe; public String tostring() { return super.tostring()+"\ndados do Aluno:\tClasse: "+ classe+" Media="+media; 11

import java.util.*; import java.io.*; public class Tarefas{ private Vector v; public Tarefas () { v = new Vector(); public void lerfichtxt() { String umalinha = "", nom = "", em = ""; StringTokenizer x; char sex,criterio; byte id,niv,htrab; float med,sal; try { BufferedReader fr= new BufferedReader(new FileReader("Info.txt")); umalinha= fr.readline(); while(umalinha!= null) { x = new StringTokenizer(umaLinha,";"); nom = x.nexttoken(); em = x.nexttoken(); id = Byte.parseByte(x.nextToken()); sex= (x.nexttoken()).charat(0); criterio = (x.nexttoken()).charat(0); 12

if (criterio == 'a' criterio == 'A') { niv = Byte.parseByte(x.nextToken()); med = Float.parseFloat(x.nextToken()); criaobjaluno(nom,em,id,sex,niv,med); else if(criterio == 'p' criterio == 'P') { htrab = Byte.parseByte(x.nextToken()); criaobjprof(nom,em,id,sex,htrab); umalinha= fr.readline(); fr.close(); catch(filenotfoundexception fe) { System.out.println("Ficheiro nao encontrado"); catch(ioexception ex){ System.out.println(ex); 13

public void criaobjaluno(string n,string e,byte i,char s,byte ni, float m) { Aluno al = new Aluno(); al.setnome(n); al.setemail(e); al.setidade(i); al.setsexo(s); al.setclasse(ni); al.setmedia(m); v.addelement(al); public void criaobjprof(string n,string e,byte i,char s,byte h) { Professor pr = new Professor(); pr.setnome(n); pr.setemail(e); pr.setidade(i); pr.setsexo(s); pr.setnumhoras(h); v.addelement(pr); public int getquanttotal() { return v.size(); 14

public String tostring() { String ver = ""; for (int n = 0; n < v.size(); n++) ver += v.elementat(n).tostring(); return ver; public String listaprof() { String ver = ""; UmIndividuo h; Professor p; for (int n = 0; n < v.size(); n++) { h = (UmIndividuo)v.elementAt(n); if(h instanceof Professor) { p = (Professor)h; ver += p.tostring(); return ver; 15

public float calcmediahoras () { float m=0; int cont=0; UmIndividuo h; Professor p; for (int k = 0; k < v.size(); k++) { h = (UmIndividuo)v.elementAt(k); if(h instanceof Professor) { p = (Professor)h; m += p.getnumhoras(); cont++; return m/cont; public String listaalunos() { String s = ""; UmIndividuo x; Aluno a; for (int n = 0; n < v.size(); n++) { x = (UmIndividuo)v.elementAt(n); if(x instanceof Aluno) { a = (Aluno)x; s += a.tostring(); return s; 16

public class Menu { public static void main(string args[]) { Tarefas t = new Tarefas(); int op; do {........ switch(op) { case 1: t.lerfichtxt(); break; case 2: System.out.println(t.toString()); break; case 3: System.out.println("Media horas dos prof="+ t.calcmediahoras()); break; case 4: System.out.println(t.listaAlunos()); break; default : System.out.println("Opcao invalida!"); break; while(op!=5); 17

Referência bibliográfica: António José Mendes; Maria José Marcelino. Fundamentos de programação em Java 2. FCA. 2002. Elliot Koffman; Ursula Wolz. Problem Solving with Java. 1999. F. Mário Martins; Programação Orientada aos objectos em Java 2, FCA, 2000, John Lewis, William Loftus; Java Software Solutions: foundation of program design, 2nd edition, Addision-Wesley John R. Hubbard. Theory and problems of programming with Java. Schaum s Outline series. McGraw-Hill. H. Deitel; P. Deitel. Java, como programar. 4 edição. 2003. Bookman. Rui Rossi dos Santos. Programando em Java 2 Teoria e aplicações. Axcel Books. 2004 18