Programa - PowerPoint PPT Presentation

1 / 27
About This Presentation
Title:

Programa

Description:

Title: POO - Introdu o Author: Isabel Cafezeiro Last modified by: isabel Created Date: 6/12/2004 11:32:25 PM Document presentation format: Apresenta o na tela – PowerPoint PPT presentation

Number of Views:34
Avg rating:3.0/5.0
Slides: 28
Provided by: Isabe112
Category:
Tags: java | programa | threads

less

Transcript and Presenter's Notes

Title: Programa


1
ProgramaçãoOrientada a Objetos
  • Reuso de classes
  • Prof. Isabel Cafezeiro
  • isabel_at_dcc.ic.uff.br
  • http//www.dcc.ic.uff.br/isabel
  • Baseado no livro Introdução à Programação
    Orientada a Objetos usando JAVA Rafael Santos
    Editora Campus Série SBC

2
Reuso de código
  • Mecanismo de Reuso
  • Diminui a necessidade de re-escrever código
  • menos trabalho para o programador.
  • Permite o aproveitamento de código pré-existente
    (livre de erro e otimizado)
  • menos chances de cometer erros
  • Em linguagens convencionais biblioteca de
    funções e procedimentos

3
Delegação
  • Reuso de classes em POO
  • Para criar uma classe que se aproveita de
    características de uma outra classe
  • Delegação (composição)
  • Uma instância da classe existente é usada como
    componente da nova classe.
  • Herança
  • A nova classe é uma extensão da classe existente.

4
Reuso de código
  • Reuso de classes em POO
  • Exemplo Um aluno de um curso universitário é
    modelado pela classe RegistroAcadêmico.
  • Delegação (composição)
  • A classe RegistroAcadêmico possui o campo
    dataDeNascimento, que delega à classe Data a
    função de armazenar e manipular adequadamente a
    data de nascimento do aluno.

5
Delegação ou Composição
  • class RegistroAcademicoDeGraduacao
  • private String nomeDoAluno
  • private Data dataDeNascimento
  • private int númeroDeMatrícula
  • RegistroAcademicoDeGraduacao(String n,Data
    d,int m)
  • nomeDoAluno n
  • dataDeNascimento d
  • númeroDeMatrícula m
  • public String toString()
  • String resultado ""
  • resultado "Matrícula
    númeroDeMatrícula " Nome nomeDoAluno"\n"
  • resultado "Data de Nascimento
    dataDeNascimento "\n"
  • return resultado
  • // fim da classe RegistroAcademicoDeGraduacao

delegação campos que são instâncias de classes.
São manipulados da mesma forma que tipos nativos
Chamada implícita do método tostring da classe
Data. A classe RegistroAcademicoDeGraduacao
delega à classe Data a formatação de seus dados.
6
Delegação ou Composição
  • class DemoRegistroAcademicoDeGraduacao
  • public static void main(String args)
  • Data nascimento new Data((byte)10,(byte)4,(s
    hort)1940)
  • RegistroAcademicoDeGraduacao millôr
  • new RegistroAcademicoDeGraduacao("Millôr
    Fernandes", nascimento, 34990917)
  • System.out.println(millôr)
  • // fim da classe DemoRegistroAcademicoDeGradua
    cao
  • DemoRegistroAcademicoDeGraduacao.java

7
Reuso de código
  • Reuso de classes em POO
  • Exemplo Um aluno de um curso universitário é
    modelado pela classe RegistroAcadêmico.
  • Herança
  • Alunos de pós graduação possuem os mesmos
    componentes e comportamento de alunos de
    graduação. Porém, possuem também os componentes
    tese e orientador, e operações adequadas para
    lidar com estas informações. A classe
    RegistroAcadêmicoDePosGraduação estende
    RegistroAcadêmico com os campos tese e orientador
    e suas operações.

8
Herança
  • Relacionamento hierárquico entre classes
  • (super)classe ou ancestral
  • (sub)classe ou classe herdeira
  • A subclasse herda da classe
  • todos os campos
  • todos os métodos
  • A subclasse pode conter atributos e métodos
    adicionais

mais especializada
9
Herança

Pessoa nome,identidade,nascimento
Pessoa(n,i,nasc) qualIdentidade()
toString()
Funcionário admissão,salário
Funcionário(n,i,nasc,adm,sal)
qualSalário() toString()
10
Herança
  • class Pessoa
  • private String nome
  • private int identidade
  • private DataCons nascimento
  • Pessoa(String n,int i,DataCons d)
  • nome n identidade i nascimento d
  • public String toString()
  • return "Nome "nome"\nIdentidade
    "identidade" " "\nData de Nascimento
    "nascimento
  • final public float qualIdentidade()
    return identidade
  • // fim da classe Pessoa
  • Pessoa.java

classes herdeiras não podem sobrepor este código.
11
Herança
especifica a herança.
  • class Funcionario extends Pessoa
  • private DataCons admissão
  • private float salário
  • Funcionario(String nome,int id,DataCons nasc,

  • DataCons adm,float sal)
  • super(nome,id,nasc)
  • admissão adm
  • salário sal
  • public String toString()
  • return super.toString()"\n"
  • "Data de admissão "admissão
  • "\n" "Salário "salário
  • final public float qualSalário() return
    salário

nome e idade são privados em Pessoa mesmo nas
subclasses devem ser acessados através dos
serviços oferecidos.
O construtor desta classe delega ao construtor da
superclasse a tarefa de inicializar os dados
herdados.
toString desta classe delega a toString da
superclasse a impressão de seus dados. Sintaxe
diferente para invocar construtor ou método da
superclasse.
12
Herança
  • public class Empresa
  • public static void main(String args)
  • float s int i
  • DataCons d1 new DataCons((byte)12,(b
    yte)12,(short)1967)
  • Pessoa p new Pessoa ("Denise", 3454637,
    d1)
  • DataCons d2 new DataCons((byte)1,(by
    te)12,(short)1972)
  • DataCons d3 new DataCons((byte)1,(by
    te)12,(short)2002)
  • i p.qualIdentidade()
  • Funcionario f1
  • new Funcionario ("Rogerio",
    93452128 ,d2 ,d3 ,(float)1000.00)
  • s f1.qualSalário()
  • i f1.qualIdentidade()
  • System.out.println(f1)
  • Empresa.java

Funcionário herda as operações de Pessoa
13
Herança

Pessoa nome,identidade,nascimento
Pessoa(n,i,nasc) toString()
Funcionário admissão,salário
Funcionário(n,i,nasc,adm,sal)
qualSalário() toString()
ChefeDeDepartamento departamento,
promoçãoAChefe ChefeDeDepartamento(n,i,nasc,ad
m,sal,dep,prom) qualDepartamento()
toString()
14
Herança
  • class ChefeDeDepartamento extends Funcionario
  • private String departamento
  • private Data promoçãoAChefe
  • ChefeDeDepartamento(String nome,int id,Data
    nasc, Data adm,
  • float sal,
    String dep,Data prom)
  • super(nome,id,nasc,adm,sal)
  • departamento dep
  • promoçãoAChefe prom
  • public String toString()
  • return super.toString()"\n"
    Departamento"departamento"\n"
  • "Data de promoção ao
    cargo"promoçãoAChefe
  • public String qualDepartamento() return
    departamento
  • // fim da classe ChefeDeDepartamento
  • ChefeDeDepartamento.java

a herança é transitiva
15
Herança

Pessoa nome,identidade,nascimento
Pessoa(n,i,nasc) toString()
PacienteDeClínica planoDeSaúde
PacienteDeClínica(n,i,nasc,plano) toString()
A herança é uma hierarquia da raiz para
as folhas sem relacionamento entre
irmãos. Não há herança múltipla
Funcionário admissão,salário
Funcionário(n,i,nasc,adm,sal)
qualSalário() toString()
ChefeDeDepartamento departamento,
promoçãoAChefe ChefeDeDepartamento(n,i,nasc,ad
m,sal,dep,prom) qualDepartamento()
toString()
16
Hierarquia de classes em Java
Hierarchy For Package java.lang Package
Hierarchies All Packages
  • Class Hierarchy
  • class java.lang.Object
  • class java.lang.Boolean (implements
    java.io.Serializable)
  • class java.lang.Character (implements
    java.lang.Comparable, java.io.Serializable)
  • class java.lang.Character.Subset
  • class java.lang.Character.UnicodeBlock
  • class java.lang.Class (implements
    java.io.Serializable)
  • . . .
  • class java.lang.Math
  • class java.lang.Number (implements
    java.io.Serializable)
  • class java.lang.Byte (implements
    java.lang.Comparable)
  • class java.lang.Double (implements
    java.lang.Comparable)
  • class java.lang.Float (implements
    java.lang.Comparable)
  • class java.lang.Integer (implements
    java.lang.Comparable)
  • class java.lang.Long (implements
    java.lang.Comparable)
  • class java.lang.Short (implements
    java.lang.Comparable)
  • . . .

17
Object A raíz da hierarquia
  • Todas as classes herdam de Object, mesmo que não
    contenham a declaração de herança.
  • Contém apenas métodos genéricos, que devem ser
    reimplementados pelas classes.

18
Object A raíz da hierarquia
19
Reuso e Herança
  1. Campos da superclasse que não sejam privados
    podem ser utilizados diretamente.
  2. Campos privados da superclasse devem ser usados
    através dos serviços oferecidos pela superclasse.
  3. Construtores da superclasse podem ser utilizados
    através da palavra super.
  4. Somente os Construtores da superclasse imediata
    podem ser utilizados diretamente.
  5. Métodos da superclasse que não sejam privados
    podem ser utilizados diretamente.
  6. Métodos sobrepostos da superclasse que não sejam
    privados podem ser utilizados através da palavra
    super.

class Funcionario extends Pessoa private
Data admissão private float
salário Funcionario(String nome,int id,Data
nasc,Data adm,float sal)
super(nome,id,nasc) (3)
admissão adm salário sal public
String toString() (6) return
super.toString()"\n" "Data de
admissão "admissão "\n" "Salário
"salário final public float
qualSalário() return salário // fim
da classe Funcionario Funcionário.java
20
Sobreposição
  • Sobreposição de campos
  • Um campo declarado na subclasse oculta o campo de
    mesmo nome da superclasse.
  • Sobreposição de métodos
  • Método herdado pode não ser adequado para os
    objetos das subclasses. Um método declarado na
    subclasse oculta o método com a mesma assinatura
    declarado na superclasse.
  • O método oculto da superclasse, se não for
    privado, pode ser invocado através da palavra
    super.
  • Sobrecarga de métodos (aula 5)
  • Método da super classe , que não seja privado,
    declarado com a mesma assinatura que um método da
    classe pode ser invocado através da palavra super.

21
Amarração Tardia de Tipos
  • Definição dinâmica do método a ser executado
    depende do objeto que invoca o método
  • public class Empresa
  • public static void main(String args)
  • float s int i
  • DataCons d1 new DataCons((byte)12,(b
    yte)12,(short)1967)
  • Pessoa p new Pessoa ("Denise", 3454637,
    d1)
  • DataCons d2 new DataCons((byte)1,(by
    te)12,(short)1972)
  • DataCons d3 new DataCons((byte)1,(by
    te)12,(short)2002)
  • i p.qualIdentidade()
  • Funcionario f1
  • new Funcionario ("Rogerio",
    93452128 ,d2 ,d3 ,(float)1000.00)
  • s f1.qualSalário()
  • i f1.qualIdentidade()
  • System.out.println(f1)
  • Empresa.java

instância de Pessoa, método de Pessoa
instância de Funcionário, método de Pessoa
22
Amarração Tardia de Tipos
23
Amarração Tardia de Tipos
  • Definição dinâmica do método a ser executado
    depende do objeto que invoca o método
  • public class EmpresaDin
  • public static void main(String args)
  • float s int i
  • DataCons d1 new DataCons((byte)12,(b
    yte)12,(short)1967)
  • Pessoa p new Pessoa ("Denise",
    3454637, d1)
  • DataCons d2 new DataCons((byte)1,(by
    te)12,(short)1972)
  • DataCons d3 new DataCons((byte)1,(by
    te)12,(short)2002)
  • Funcionario f1
  • new Funcionario ("Rogerio",
    457928,d2,d3,(float)1000.00)
  • p f1
  • System.out.println(p)
  • EmpresaDin.java

referência de Pessoa passa a apontar para
instância de Funcionário
invoca toString de Pessoa? de Funcionário?
24
Amarração Tardia de Tipos
pclasse
p
nomeDenise
identidade 3454637
PESSOA
nascimento 01/12/1967
psuper
Pessoa(...)
pclasse
toString()
nomeRogerio
identidade 457928
FUNCIONÁRIO
f1
nascimento 01/12/1972
psuper
funcionário(...)
admissão 01/12/2002
qualsalário()
salário 1000.00
toString()
25
Sobreposição
  • Sobreposição de métodos
  • Um método public (subclasse) pode sobrepor um
    método private (superclasse)
  • Um método private (subclasse) não pode sobrepor
    um método public (superclasse)
  • Um método estático não pode ser sobreposto
  • Um método final é herdado pelas subclasses, mas
    não pode ser sobreposto.
  • Classes declaradas como Final tem todos os
    métodos final. Não pode ter subclasses. Mecanismo
    para barrar a herança !!!

26
Polimorfismo
  • Mecanismo que permite que uma operação receba
    argumentos de diferentes tipos
  • Um parâmetro declarado como valor de um tipo...
  • ... pode receber valores do subtipo.
  • Mecanismo que permite que um método receba
    argumentos de diferentes classes
  • Um parâmetro declarado como instância da
    superclasse...
  • ... pode receber instâncias da subclasse.

27
Delegação X Herança
  • Delegação tem-um
  • Quando se quer as características de uma classe,
    mas não seus campos e métodos
  • O componente auxilia na implementação da
    funcionalidade da subclasse.
  • Herança é-um
  • Além de usar as características da superclasse, a
    subclasse também usa campos e/ou métodos da
    superclasse.
Write a Comment
User Comments (0)
About PowerShow.com