PROJECTO EMPREGADOS. Criar uma classe EmpresaMap com os mesmos requisitos mas usando TreeMap<String, Empregado>.

Documentos relacionados
Em JAVA, todas as considerações (ou quase todas) que se relacionam com as mais

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

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

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

f1 == f2 <=> n1 == n2 e d1 == d2 // Versão 1.0 class Fraction { private: public: Fraction (int, int); };

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

InputStream e OutputStream para ler/ escrever bytes e das classes abstractas Reader e Writer para ler /escrever caracteres (texto).

RESPOSTA: import java.util.arraylist; import java.util.list; class CarrinhoDeCompras2 { List<Produto> produtos;

Notas de POO: interfaces, excepções e input/output

A Relação de Subtipo e Tipos Genéricos

Encapsulamento. Alberto Costa Neto DComp - UFS

Computação II - Java - Prova 1 Prof. Adriano Joaquim de Oliveira Cruz /05/13. Questão: Total Pontos: Gráu:

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

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Cartão de fidelização de clientes das distribuidoras de combustível.

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

Interfaces POO. Prof. Marcio Delamaro

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

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

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

Reader e Writer para streams de caracteres (texto).

Prof. A. G. Silva. 13 de novembro de Prof. A. G. Silva INE5603 Introdução à POO 13 de novembro de / 1

4 Conceito de Herança

Streams e Ficheiros I/O

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

Reader e Writer para streams de caracteres (texto).

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

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

public class Autenticador { private static final ThreadLocal<UsuarioInterface> threadusuario = new ThreadLocal<UsuarioInterface>();

Boas práticas com Orientação a Objetos. Paulo Silveira

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

Arquivos continuação. Profa. Thienne Johnson EACH/USP

Paradigmas da Programação PPROG. Tipos Enumerados. Nelson Freire (ISEP DEI-PPROG 2013/14) 1/20

Tipos, Literais, Operadores

Tipos, Literais, Operadores

9 Classes Abstractas e Interfaces

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

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

INTRODUÇÃO À REPRESENTAÇÃO E ANÁLISE DE GRAFOS COM A API JUNG

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

Herança e Polimorfismo

Gravação de objetos em arquivos

Singleton. Como a maioria dos programadores organizaria o código para acessar informação de configuração? Eis um exemplo:

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

INTERFACES DE JAVA. O JCF é uma arquitectura que se baseia em três entidades fundamentais:

Interfaces e Classes Internas

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

Hierarquia de classes. Veja as diversas classes do pacote

[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999.

RESULUÇÃO DOS EXERCÍCIOS E INSTRUÇÕES DE DECISÃO (if{} e else{}) Profº André Aparecido da Silva Disponível em:

Programação Orientada a Objetos Classes Abstratas. Sérgio Soares

Extensão de classes em Java - noções elementares - PCO / PPO Departamento de Informática Faculdade de Ciências da Universidade de Lisboa

5 Caso de estudo O cartão fidelidade

Quando um Auto-Relacionamento não é mais um Auto-Relacionamento

Como pôde verificar, a criação de um objecto do tipo File não cria o ficheiro em disco.

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

Programação Estruturada e Orientada a Objetos

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

6 Polimorfismo. Desenvolvimento OO com Java. Vítor E. Silva Souza ~ vitorsouza

Programação Orientada por Objetos

Linguagem de Programação Orientada a Objeto Coleções

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

Ficha Prática 10. António Nestor Ribeiro, Paulo Azevedo, Mário Martins PPIV (LESI) 2005/06

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

Linguagem de Programação II Implementação

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

Java - Conexão ao Banco de Dados usando JDBC

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

ESQUEMA AULA PRÁTICA 1

ESQUEMA AULA PRÁTICA 1

JAVA 1.5 na plataforma J2SE 5.0 Tiger Novas Construções, Sintaxe, Tipos e Polimorfismo

Objetivo do programa: Implementação de um analisador de Logs do Servidor Web com base nos requisitos da unidade curricular de Estatística.

JUnit. Alexandre Menezes Silva Eduardo Manuel de Freitas Jorge

Interfaces. Classes abstratas que possuem apenas métodos abstratos. Na Interface: Métodos são implicitamente. Campos são implicitamente

Escreva em Java a classe NumeroComplexo que represente um número complexo. A classe deverá ter os seguintes construtores:

MsC. João Maria MsC. Liviane Melo

Persistência. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

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

Programação por Objectos. Java

Programação Orientada por Objectos 2010/11. 2º Exame 28 de Junho de 2011

Programação Orientada a Objetos Relacionamentos entre classes

Orientação a Objetos - Herança

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

if( opcao.equals("1") ) { ElaborarContratoUI uiec = new ElaborarContratoUI(m_empresa); uiec.run();

JAVA. José de Siqueira UFMG - ICEx - DCC

Programação Orientada a Objetos com Java. Prof. Júlio Machado

Um aluno digitou o código C++ a seguir:

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

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

Herança; Sobrescrita, Sobrecarga e Polimorfismo; Classes abstratas e concretas (finais).

Programação Orientada aos Objectos I

if (umobjecto!= null && umobjecto instanceof CartaoFidelidade){ titular.equals(((cartaofidelidade) umobjecto).titular) &&

Modulo II Tópicos em Java - Extra

Programação Orientada por Objectos 2007/2008

Manipulação de arquivos. João Paulo Q. dos Santos

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

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

Transcrição:

PROJECTO EMPREGADOS Os empregados de uma empresa são caracterizados pela seguinte informação: código, nome e dias de trabalho efectivos no mês. Todos os empregados normais possuem um salário-dia fixo. No entanto, os gestores têm um prémio de gestão que multiplica o seu vencimento normal (exº 1.25). Os motoristas, têm definido um valor por Km percorrido, e têm a si associado o número de Kms percorridos nesse mês para cálculo do seu salário final. Criar uma classe EmpresaList que represente a lista de todos os empregados da empresa, e tenha implementados, para além dos métodos usuais, os seguintes métodos: Verificar se um empregado de código dado existe; Devolver a ficha de um empregado dado o seu código; Inserir um novo empregado; Devolver uma cópia da lista de empregados; Inserir todos os empregados de um conjunto dado; Calcular o total de salários a pagar; Calcular o número total de gestores da empresa; Calcular o total de empregados do tipo dado como String; Calcular o total de Kms percorridos pelos motoristas; Gravar a instância num ficheiro de texto; Gravar a instância num ficheiro de objectos; Criar uma classe EmpresaMap com os mesmos requisitos mas usando TreeMap<String, Empregado>. Criar uma classe EmpresaSet com os mesmos requisitos mas usando TreeSet<Empregado>, e um Comparator<Empregado> que permirá que os empregados sejam ordenados segundo uma ordem dada.

DIAGRAMA DE CLASSES DO PROJECTO NOTA: Esta solução é a solução normalizada em termos de polimorfismo, porque usa uma classe abstracta para o tipo Empregado e define 3 subtipos concretos, designadamente Normal, Motorista e Gestor. É usada na classe Empregado uma variável de classe que corresponde ao valor do salário diário, dado que tal valor deve ser comum a todos os empregados, um método que permite mudar este valor e outro que permite consultá-lo.

/** * Abstract class Empregado */ import java.io.*; public abstract class Empregado implements Serializable{ // Definições de classe private static double saldia = 50.00; public static double getsaldia() { return saldia; public static void setsaldia(double nvsaldia) { saldia = nvsaldia; public Empregado(String cod, String nom, int dias) { codigo = cod; nome = nom; this.dias = dias; public Empregado(Empregado emp) { codigo = emp.getcodigo(); nome = emp.getnome(); dias = emp.getdias(); // variáveis de instância private String codigo; private String nome; private int dias; // métodos de instância public String getnome() { return nome; public String getcodigo() { return codigo; public int getdias() { return dias; public boolean equals(object obj) { if(this == obj) return true; if((obj == null) (this.getclass()!= obj.getclass())) return false; Empregado e = (Empregado) obj; return nome.equals(e.getnome()) && codigo.equals(e.getcodigo()) && dias == e.getdias(); // abstractos public abstract double salario(); public abstract String tostring(); public abstract Empregado clone();

/** Normal < Empregado */ public class Normal extends Empregado { public Normal(String cod, String nom, int dias) { super(cod, nom, dias); public Normal(Normal func) { super(func); // Métodos de Instância public double salario() { return this.getdias()*getsaldia(); public String tostring() { return "Normal: " + this.getnome() + " - " + this.getcodigo() + " - " + this.salario(); public Normal clone() { return new Normal(this); /** Gestor < Empregado */ public class Gestor extends Empregado { public Gestor(String cod, String nom, int dias, double prem) { super(cod, nom, dias); premio = prem; public Gestor(Gestor gest) { super(gest); premio = gest.getpremio(); // variáveis de instância private double premio; // Métodos de instância public double getpremio() { return premio; // Implementação dos abstractos public double salario() { return this.getdias()*getsaldia()*premio; public String tostring() { return "Gestor: " + this.getnome() + " - " + this.getcodigo() + " - " + this.salario(); public boolean equals(object g) { return super.equals(g) && premio == ((Gestor) g).getpremio(); public Gestor clone() { return new Gestor(this);

/** Motorista < Empregado. */ public class Motorista extends Empregado { private static double valorkm = 0.002; public static void mudavalorkm(double nvvalkm) { valorkm = nvvalkm; public Motorista(String cod, String nom, int dias, double kms) { super(cod, nom, dias); kiloms = kms; public Motorista(Motorista motor) { super(motor); kiloms = motor.getkms(); // Vars de instância private double kiloms; // Métodos de instância public double getkms() { return kiloms; public void setkms(double kms) { kiloms = kms; // Implementação dos abstractos public double salario() { return this.getdias()*getsaldia()*(kiloms*valorkm); public String tostring() { return "Motorista: " + this.getnome() + " - " + this.getcodigo() + " - " + this.salario(); public boolean equals(object m) { return super.equals(m) && kiloms == ((Motorista) m).getkms(); public Motorista clone() { return new Motorista(this);

/** * EmpresaList: Uma Lista de Empregado. * * @author F. Mário Martins * @version 1/2007 */ import java.util.*; import java.io.*; public class EmpresaList implements Serializable { // variáveis de instância private ArrayList<Empregado> emps = new ArrayList<Empregado>(); public EmpresaList() { emps = new ArrayList<Empregado>(); public EmpresaList(ArrayList<Empregado> lstemp) { for(empregado emp : lstemp) emps.add(emp.clone()); public EmpresaList(EmpresaList le) { List<Empregado> aux = le.dalista(); for(empregado emp : aux) emps.add(emp); // Métodos de Instância public void insereemp(empregado emp) { emps.add(emp.clone()); public boolean existeemp(string cod) { boolean existe = false; Iterator<Empregado> itemp = emps.iterator(); while(itemp.hasnext() &&!existe) { if(itemp.next().getcodigo().equals(cod)) existe = true; return existe; public void insereempregados(collection<? extends Empregado> lstemp) { for(empregado emp : lstemp) emps.add(emp.clone());

public void juntaempregados(collection<empregado> lstemp) { for(empregado emp : lstemp) emps.add(emp.clone()); public Empregado dafichaemp(string cod) { boolean existe = false; Empregado emp = null; Iterator<Empregado> itemp = emps.iterator(); while(itemp.hasnext() &&!existe) { emp = itemp.next(); if(emp.getcodigo().equals(cod)) existe = true; return existe? emp.clone() : null; public List<Empregado> dalista() { ArrayList<Empregado> aux = new ArrayList<Empregado>(); for(empregado emp : emps) aux.add(emp.clone()); return aux; public double totalsalarios() { double total = 0.0; for(empregado emp : emps) total += emp.salario(); return total; public int totalgestores() { int total = 0; for(empregado emp : emps) if(emp instanceof Gestor) total++; return total; public int totalde(string Tipo) { int total = 0; for(empregado emp : emps) if(emp.getclass().getname().equals(tipo)) total++; return total;

public double totalkms() { double totalkm = 0.0; for(empregado emp : emps) if(emp instanceof Motorista) totalkm += ((Motorista) emp).getkms(); return totalkm; public String tostring() { StringBuilder sb = new StringBuilder("--- Empregados ---\n"); for(empregado emp : emps) sb.append(emp.tostring() + "\n"); return sb.tostring(); // Métodos a explicar posteriormente public void gravaobj(string fich) throws IOException { ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream(fich)); oos.writeobject(this); oos.flush(); oos.close(); public void gravatxt(string fich) throws IOException { PrintWriter pw = new PrintWriter(fich); pw.print(this); pw.flush(); pw.close();

/** * TesteEmpresaList: teste de ArrayList<Empregado>. * @author F. Mário Martins * @version 1/2007 */ import static java.lang.system.out; import java.io.*; public class TesteEmpresaList { public static EmpresaList main() { Motorista mt1 = new Motorista("M10", "Rui", 20, 1000); Motorista mt2 = new Motorista("M12", "Luis", 22, 1200); Gestor g1 = new Gestor("G1", "Manuel", 22, 1.5); Gestor g2 = new Gestor("G2", "Joel", 22, 1.5); Normal n1 = new Normal("N1", "Vasco", 25); Normal n2 = new Normal("N22", "Maria", 20); Normal n3 = new Normal("N25", "Laura", 21); EmpresaList lstemp = new EmpresaList(); lstemp.insereemp(mt1); lstemp.insereemp(mt2); lstemp.insereemp(g1); lstemp.insereemp(g2); lstemp.insereemp(n1); lstemp.insereemp(n2); lstemp.insereemp(n3); out.println(lstemp.tostring()); // terminal window // código a explicar posteriormente try { lstemp.gravaobj("emp1.obj"); lstemp.gravatxt("emp1.txt"); catch(ioexception e) { out.println(e.getmessage()); EmpresaList lstemps1 = new EmpresaList(); // lê da ObjectStream a instância anteriormente gravada!! try { ObjectInputStream ooin = new ObjectInputStream(new FileInputStream("emp1.obj")); lstemps1 = (EmpresaList) ooin.readobject(); ooin.close(); catch(ioexception e) { catch(classnotfoundexception ec) {; return lstemps1;