SlideShare uma empresa Scribd logo
1 de 46
Polimorfismo de subtipos
Análise, desenho e implementação
 Paradigmas da programação
 Programação orientada por objectos
 Modularização em pacotes
2013/2014 Fundamentos de Programação 2
public class Employee {
private String name;
private String ssn;
public Employee(final String name, final String ssn) {
this.name = name;
this.ssn = ssn;
}
public String getName() {
return name;
}
public String getSsn() {
return ssn;
}
@Override
public String toString() {
return "(" + getName() + ", " + getSsn() + ")";
}
}
2013/2014 Fundamentos de Programação 3
Que é isto?Veremos à frente…
2013/2014 Fundamentos de Programação 4
Employee
Supervisor
Relação de
generalização
Especialização
Generalização
• Um Supervisor é um Employee.
• Um Employee pode ser um Supervisor.
public class Supervisor extends Employee {
private int level;
public Supervisor(final String name,
final String ssn,
final int level) {
…
}
public int getLevel() {
return level;
}
@Override
public String toString() {
return "(" + getName() + ", " + getSsn() + ", "
+ getLevel() + ")";
}
}
2013/2014 Fundamentos de Programação 5
Um Supervisor é um Employee.
Sobrepõe-se ao método com a
mesma assinatura na classe base
Employee.
Novo método específico da
classe Supervisor.
2013/2014 Fundamentos de Programação 6
Employee
Supervisor
Especialização
Generalização
Classe base ou superclasse.
Classe derivada ou subclasse.
 Classe derivada deriva da classe base
(subclasse deriva da superclasse)
 Membros são herdados e mantêm categoria de acesso
 Relação é um – Referências do tipo da classe base podem
referir-se a objectos de classes derivadas
 Exemplo
Supervisor supervisor = new Supervisor("Guilhermina",
"123456789", 3);
Employee employee = new Supervisor("Felisberto",
"987654321", 5);
2013/2014 Fundamentos de Programação 7
 Método de classe derivada pode sobrepor-se
a método de classe base
 Sobreposição é especialização
 Regras
 Mesma assinatura e tipo de devolução compatível
 Método na classe base não privado e não final
 Método na classe derivada com acessibilidade
igual ou superior
2013/2014 Fundamentos de Programação 8
Na realidade tem de ser co-variante, ou seja, o tipo
de devolução do método na classe derivada deriva
de (ou é igual a) o tipo de devolução na classe base.
Um método final não pode ser especializado.
 Características ou membros podem ser
 private – acesso apenas por outros membros da
mesma classe
 package-private (sem qualificador) – adicionalmente,
acesso por membros de classes do mesmo pacote
 protected – adicionalmente, acesso por membros de
classes derivadas
 public – acesso universal
2013/2014 Fundamentos de Programação 9
Acessibilidadecrescente
O Java promove a promisquidade entre objectos…
 Própria classe
 Membros da classe e membros não privados de classes
base
 Classe do mesmo pacote
 Membros não privados da classe ou suas bases
 Classe derivada
 Membros protegidos ou públicos da classe ou suas bases
 Outra classe
 Membros públicos da classe ou suas bases
2013/2014 Fundamentos de Programação 10
ArrayList<Employee> employees =
new ArrayList<Employee>();
employees.add(new Employee("João Maria",
"123456789"));
employees.add(new Supervisor("Ana Maria",
"987654321", 4));
…
for (Employee employee : employees)
out.println(employee.toString());
2013/2014 Fundamentos de Programação 11
Qual o método toString() executado?
Invocação da
operação
toString().
2013/2014 Fundamentos de Programação 12
employees : «ref» ArrayList<Employee>
: ArrayList<Employee>
: «ref» Employee
0
: «ref» Employee
1
: Employee
name = “João Maria”
ssn = “123456789”
: Supervisor
name = “Ana Maria”
ssn = “987654321”
level = 4
Possível porque a classe
Supervisor deriva da
classe Employee, ou seja,
possível porque um
Supervisor é (sempre
também) um Employee.
2013/2014 Fundamentos de Programação 13
O resultado depende
do tipo do objecto e
não do tipo da
referência! Isso
acontece porque o
método toString é
polimórfico ou virtual.
_(João Maria, 123456789)
_
(João Maria, 123456789)
(Ana Maria, 987654321, 4)
_
 Capacidade de um objecto tomar várias
formas
 A forma descrita pela classe a que pertence
 As formas descritas pelas classes acima na
hierarquia a que pertence
 Objecto pode ser referenciado por
referências do tipo da classe a que pertence
ou de classes acima na hierarquia (mais
genéricas)
2013/2014 Fundamentos de Programação 14
Seja p(x) uma propriedade demonstrável acerca
de objectos x do tipo B. Então, p(y) também
deve verificar-se para objectos y do tipo D onde
D é um subtipo de B.
Barbara H. Liskov e Jeannette M.Wing, «A Behavioral Notion of Subtyping»,
ACMTransactions m Programming Languages and Systems,Volume 16, N.º 6,
Novembro de 1994, pp. 1811-1841.
Ver http://en.wikipedia.org/wiki/Liskov_substitution_principle.
2013/2014 Fundamentos de Programação 15
Tem de ser o programador a
garantir que este princípio se
verifica!
Supervisor supervisor = new Supervisor("Guilhermina",
"123456789", 3);
Employee anEmployee = new Supervisor("Felisberto",
"987654321", 5);
Employee anotherEmployee = new Employee("Elvira",
"111111111");
out.println(supervisor.toString());
out.println(anEmployee.toString());
out.println(anotherEmployee.toString());
2013/2014 Fundamentos de Programação 16
_(Guilhermina, 123456789, 3)
_
(Guilhermina, 123456789, 3)
(Felisberto, 987654321, 5)
_
(Guilhermina, 123456789, 3)
(Felisberto, 987654321, 5)
(Elvira, 111111111)
_
 Uma operação polimórfica ou virtual pode ter várias
implementações
 A uma implementação de uma operação chama-se
método
 A uma operação polimórfica podem corresponder
diferentes métodos, cada um em sua classe
 Todas as operações em Java são polimórficas, com
excepção das qualificadas com private
 Uma classe é polimórfica se tiver pelo menos uma
operação polimórfica
2013/2014 Fundamentos de Programação 17
 Invoca-se uma operação sobre um objecto de uma classe
para atingir um objectivo
 Invocação de uma operação leva à execução do método
apropriado, ou seja, leva à execução da implementação
apropriada da operação
 Polimorfismo
 Invocação de uma operação pode levar à execução de
diferentes métodos
 Método efectivamente executado depende da classe do objecto
sobre o qual a operação é invocada
 Método executado não depende do tipo da referência para o
objecto utilizado
2013/2014 Fundamentos de Programação 18
Simplificação… invocações internas podem levar à
execução de métodos privados directamente.
public class Employee extends Object {
private String name;
private String ssn;
public Employee(final String name, final String ssn) {
this.name = name;
this.ssn = ssn;
}
public String getName() {
return name;
}
public String getSsn() {
return ssn;
}
@Override
public String toString() {
return "(" + getName() + ", " + getSsn() + ")";
}
}
2013/2014 Fundamentos de Programação 19
Agora percebe-se!A classe Object declara a
operação toString() e define imediatamente um
correspondente método. Esta é uma sua
especialização.
Se uma classe não derivar explicitamente de
outra, derivará implicitamente da classe Object,
que está no topo da hierarquia de classes do Java.
 Ligação (binding)
 Associação entre a invocação de uma operação e a
execução de um método
 Ligação estática
 Operações não polimórficas, invocações através de super
 Associação estabelecida em tempo de compilação
 Ligação dinâmica
 Operações polimórficas
 Associação estabelecida apenas em tempo de execução
2013/2014 Fundamentos de Programação 20
Que é isto?Veremos à frente…
 Classe derivada não é obrigada a fornecer
método para operação da classe base
 Classe base pode proibir às classes derivadas a
sobreposição de um seu método, que se dirá ser
um método final
 Razão para um método ser final:
 Programador que forneceu o método na classe base
entendeu que classes derivadas não deveriam poder
especializar o modo de funcionamento desse método
2013/2014 Fundamentos de Programação 21
public class Base {
public String className() {
return "Base";
}
}
public class Derived extends Base {
@Override
public String className() {
return "Derived";
}
public void testCalls() {
final Base base = (Base)this;
out.println("Through this: " + this.className());
out.println("Through base: " + base.className());
out.println("Through super: " + super.className());
}
}
2013/2014 Fundamentos de Programação 22
_Through this: Derived
_
Through this: Derived
Through base: Derived
_
Through this: Derived
Through base: Derived
Through super: Base
_
 Veículo
 Motociclo
 Automóvel
 Honda NX 650
 AudiTT
2013/2014 Fundamentos de Programação 23
Vehicle
Car
Motorcycle
AudiTt
HondaNx650
Análise inicial pode resultar
num dicionário ou glossário do
domínio.
 Um Automóvel é umVeículo
 Um Motociclo é umVeículo
 Uma Honda NX 650 é um Motociclo
 Um AudiTT é um Automóvel
2013/2014 Fundamentos de Programação 24
Vehicle
Car Motorcycle
AudiTt HondaNx650
Pode refinar-se o dicionário ou
glossário do domínio,
acrescentando as relações
entre conceitos.
2013/2014 Fundamentos de Programação 25
Vehicle
Car Motorcycle
AudiTt HondaNx650
…
…
Propriedades
Operações
…
…
…
…
…
…
…
…
public class Vehicle {
…
}
public class Car extends Vehicle {
…
}
public class Motorcycle extends Vehicle {
…
}
public class HondaNx650 extends Motorcycle {
…
}
public class AudiTt extends Car {
…
}
2013/2014 Fundamentos de Programação 26
 Conceito abstracto – Sem instâncias no domínio em
causa
 Conceito concreto – Com instâncias no domínio em
causa
 Conceitos identificados são abstractos ou concretos?
 Dependendo do domínio e seu modelo…
 Veículo abstracto; Automóvel concreto;AudiTT caso
particular de Automóvel
 Veículo e Automóvel abstractos; AudiTT concreto
2013/2014 Fundamentos de Programação 27
HIPÓTESE 1 HIPÓTESE 2
2013/2014 Fundamentos de Programação 28
Vehicle
Car Motorcycle
Vehicle
Car Motorcycle
AudiTt HondaNx650
As classes abstractas, correspondentes
aos conceitos abstractos, têm o nome
em itálico.
É boa prática que as classes concretas
sejam folhas na hierarquia.
public abstract class Vehicle {
…
}
public class Car extends Vehicle {
…
}
public class Motorcycle extends Vehicle {
…
}
2013/2014 Fundamentos de Programação 29
public abstract class Vehicle {
…
}
public abstract class Car extends Vehicle {
…
}
public abstract class Motorcycle extends Vehicle {
…
}
public class HondaNx650 extends Motorcycle {
…
}
public class AudiTt extends Car {
…
}
2013/2014 Fundamentos de Programação 30
public class Position {
private final double x;
private final double y;
public Position(final double x, final double y) {
this.x = x;
this.y = y;
}
public final double getX() {
return x;
}
public final double getY() {
return y;
}
…
}
2013/2014 Fundamentos de Programação 31
Tipo de referência, pois é uma
classe. Mas classe de valor, pois
o que conta é a igualdade, e
não a identidade.
public class Size {
private final double width;
private final double height;
public Size(final double width,
final double height) {
this.width = width;
this.height = height;
}
public final double getWidth() {
return width;
}
public final double getHeight () {
return height;
}
…
}
2013/2014 Fundamentos de Programação 32
Apesar de ter também dois
atributos do tipo double, um
Size não é uma Position.
Tipo de referência, pois é uma
classe. Mas classe de valor, pois
o que conta é a igualdade, e
não a identidade.
public class Box {
private final Position topLeftCornerPosition;
private final Size size;
public Box(final Position topLeftCornerPosition,
final Size size) {
this.topLeftCornerPosition = topLeftCornerPosition;
this.size = size;
}
public final Position getTopLeftCornerPosition() {
return topLeftCornerPosition;
}
public final Size getSize() {
return size;
}
…
}
2013/2014 Fundamentos de Programação 33
Uma Box não é nem uma Position,
nem um Size, mas é representada
por uma Position e por um Size.
Tipo de referência, pois é uma
classe. Mas classe de valor, pois
o que conta é a igualdade, e
não a identidade.
 Figura
 Forma (abstrato)
 Círculo
 Quadrado
2013/2014 Fundamentos de Programação 34
Figure
Circle
Shape
Square
 Uma Figura é composta de Formas
 Um Círculo é uma Forma
 Um Quadrado é uma Forma
2013/2014 Fundamentos de Programação 35
Shape
Circle Square
Figure
Relação de
composição.
2013/2014 Fundamentos de Programação 36
Shape
Circle Square
…
…
…
…
…
…
Figure
…
…
public class Figure {
private ArrayList<Shape> shapes;
…
}
public abstract class Shape {
…
}
public class Circle extends Shape {
…
}
public class Square extends Shape {
…
}
2013/2014 Fundamentos de Programação 37
Tipos de referência, pois são
classes.Classes de referência,
pois o que conta é a identidade,
e não a igualdade.
public abstract class Shape {
private Position position;
public Shape(final Position position) {
this.position = position;
}
public final Position getPosition() {
return position;
}
public abstract double getArea();
public abstract double getPerimeter();
public abstract Box getBoundingBox();
public void moveTo(final Position newPosition) {
position = newPosition;
}
}
2013/2014 Fundamentos de Programação 38
Operações
abstractas, ou seja,
operações sem
qualquer
implementação
disponível até este
nível da hierarquia.
Qual a área de uma
“forma”??
Tipo de referência, pois é uma
classe. Classe de referência,
pois o que conta é a identidade,
e não a igualdade.
public class Circle extends Shape {
private double radius;
public Circle(final Position position,
final double radius) {
super(position);
this.radius = radius;
}
public final double getRadius() {
return radius;
}
…
2013/2014 Fundamentos de Programação 39
Um Circle é uma Shape e a classe Circle
herda a implementação da classe Shape.
É necessário apenas um
atributo adicional,
correspondente a uma
das duas propriedades de
um círculo (o raio), já que
a posição do centro é
herdada da classe Shape.
Uma ajudinha da
classe base…
Tipo de referência, pois é uma
classe. Classe de referência,
pois o que conta é a identidade,
e não a igualdade.
…
@Override
public double getArea() {
return Math.PI * getRadius() * getRadius();
}
@Override
public double getPerimeter() {
return 2.0 * Math.PI * getRadius();
}
@Override
public Box getBoundingBox() {
return new Box(
new Position(getPosition().getX() - getRadius(),
getPosition().getY() - getRadius()),
new Size(2.0 * getRadius(), 2.0 * getRadius())
);
}
}
2013/2014 Fundamentos de Programação 40
Fornece-se implementações,
ou seja, métodos, para cada
uma das operações
abstractas da classe Shape.
Qual a área de um
círculo? Fácil, π × r2.
2013/2014 Fundamentos de Programação 41
Shape
Circle Square
- position : Position
+ Shape(position : Position)
+ getPosition() : Position
+ getArea() : double
+ getPerimeter() : double
+ getBoundingBox() : Box
+ moveTo(newPosition : Position)
- radius : double
+ Circle(position : Position,
radius : double)
+ getRadius() : double
+ getArea() : double
+ getPerimeter() : double
+ getBoundingBox() : Box
Figure
Símbolo Categoria de acesso
- private
~ package-private
# protected
+ public
2013/2014 Fundamentos de Programação 42
Shape
Circle Square
- position : Position
«constructors»
+ Shape(position : Position)
- radius : double
«constructors»
+ Circle(position : Position,
radius : double)
Figure
«inspectors»
+ getPosition() : Position
+ getArea() : double
+ getPerimeter() : double
+ getBoundingBox() : Box
«modifiers»
+ moveTo(newPosition : Position)
«inspectors»
+ getRadius() : double
+ getArea() : double
+ getPerimeter() : double
+ getBoundingBox() : Box
 Uma operação com qualificador abstract é uma
simples declaração da operação
 Uma operação sem qualificador abstract inclui
também a definição de um método
correspondente, que a implementa
 Uma classe com uma operação abstracta tem de
ser uma classe abstracta
 Uma classe é abstracta se tiver o qualificador
abstract
2013/2014 Fundamentos de Programação 43
 Uma classe não abstracta diz-se uma classe
concreta
 Uma classe abstracta não pode ser instanciada,
i.e., não se podem construir objectos de uma
classe abstracta
 Uma classe derivada directamente de uma
classe abstracta só poderá ser concreta se
implementar cada uma das operações
abstractas da classe abstracta
2013/2014 Fundamentos de Programação 44
 Generalização – Relação entre duas classes, base e derivada, em
que a derivada especializa a base, que por sua vez generaliza a
derivada
 Polimorfismo – Um mesmo objecto pode ser visto de formas
diferentes consoante o tipo da referência usada para o referenciar:
uma mesma referência pode referenciar objectos de diferentes
classes
 Operação abstracta – Uma operações declarada numa dada classe
mas não implementada nessa classe
 Classe abstracta – Uma classe que não pode ser instanciada, i.e.,
da qual não existem objectos; usualmente as classes abstractas
têm pelo menos uma operação abstracta
2013/2014 Fundamentos de Programação 45
 Polimorfismo de subtipos
 Classes e operações polimórficas
 Herança
 Ligação estática e ligação dinâmica
 Classes abstractas e classes concretas
 Operações abstractas
 Análise, desenho e implementação
 Dicionário do domínio
 Conceitos
 Conceitos concretos e conceitos abstractos
2013/2014 Fundamentos de Programação 46

Mais conteúdo relacionado

Mais procurados

Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a ObjetosIgor Takenami
 
Junções e subconsultas
Junções e subconsultasJunções e subconsultas
Junções e subconsultasjulianaveregue
 
Teste de software - aula 01 (motivação)
Teste de software - aula 01 (motivação)Teste de software - aula 01 (motivação)
Teste de software - aula 01 (motivação)Elmano Cavalcanti
 
Engenharia de Software Pressman
Engenharia de Software PressmanEngenharia de Software Pressman
Engenharia de Software PressmanSimoneinfo
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaDaniel Brandão
 
[Curso Java Basico] Aula 02: Instalar Java Windows 10
[Curso Java Basico] Aula 02: Instalar Java Windows 10[Curso Java Basico] Aula 02: Instalar Java Windows 10
[Curso Java Basico] Aula 02: Instalar Java Windows 10Loiane Groner
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Extreme programming (xp) - Resumo
Extreme programming (xp) - ResumoExtreme programming (xp) - Resumo
Extreme programming (xp) - ResumoDaniel Brandão
 
Aula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaAula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaDaniel Brandão
 
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalParadigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalGustavo Coutinho
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POODaniel Brandão
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsHelder da Rocha
 
Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggersDaniel Maia
 
Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01thomasdacosta
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Softwareelliando dias
 

Mais procurados (20)

Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
 
Tratamento de erros
Tratamento de errosTratamento de erros
Tratamento de erros
 
Junções e subconsultas
Junções e subconsultasJunções e subconsultas
Junções e subconsultas
 
Teste de software - aula 01 (motivação)
Teste de software - aula 01 (motivação)Teste de software - aula 01 (motivação)
Teste de software - aula 01 (motivação)
 
Engenharia de Software Pressman
Engenharia de Software PressmanEngenharia de Software Pressman
Engenharia de Software Pressman
 
Aula 2 - Comandos DDL DML DQL E DCL
Aula 2 - Comandos DDL DML DQL E DCLAula 2 - Comandos DDL DML DQL E DCL
Aula 2 - Comandos DDL DML DQL E DCL
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - Herança
 
[Curso Java Basico] Aula 02: Instalar Java Windows 10
[Curso Java Basico] Aula 02: Instalar Java Windows 10[Curso Java Basico] Aula 02: Instalar Java Windows 10
[Curso Java Basico] Aula 02: Instalar Java Windows 10
 
Curso de Node JS Básico
Curso de Node JS BásicoCurso de Node JS Básico
Curso de Node JS Básico
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Extreme programming (xp) - Resumo
Extreme programming (xp) - ResumoExtreme programming (xp) - Resumo
Extreme programming (xp) - Resumo
 
Aula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaAula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem Java
 
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalParadigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e Streams
 
Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggers
 
Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01
 
Introdução ao MySQL
Introdução ao MySQLIntrodução ao MySQL
Introdução ao MySQL
 
Padrões MVC
Padrões MVCPadrões MVC
Padrões MVC
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 

Destaque

3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...Manuel Menezes de Sequeira
 
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...Manuel Menezes de Sequeira
 
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...Manuel Menezes de Sequeira
 
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...Manuel Menezes de Sequeira
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de ProgramaçãoManuel Menezes de Sequeira
 
4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de ProgramaçãoManuel Menezes de Sequeira
 
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...Manuel Menezes de Sequeira
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...Manuel Menezes de Sequeira
 
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...Manuel Menezes de Sequeira
 
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...Manuel Menezes de Sequeira
 
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...Manuel Menezes de Sequeira
 
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...Manuel Menezes de Sequeira
 
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...Manuel Menezes de Sequeira
 
Introdução à programação orientada para aspectos
Introdução à programação orientada para aspectosIntrodução à programação orientada para aspectos
Introdução à programação orientada para aspectosManuel Menezes de Sequeira
 

Destaque (20)

3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
 
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
 
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
 
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
 
4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação
 
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
 
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
 
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
 
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
 
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
 
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
 
Introdução à programação orientada para aspectos
Introdução à programação orientada para aspectosIntrodução à programação orientada para aspectos
Introdução à programação orientada para aspectos
 
Programação Orientada por Objectos - Aula 6
Programação Orientada por Objectos - Aula 6Programação Orientada por Objectos - Aula 6
Programação Orientada por Objectos - Aula 6
 
Programação Orientada por Objectos - Aula 1
Programação Orientada por Objectos - Aula 1Programação Orientada por Objectos - Aula 1
Programação Orientada por Objectos - Aula 1
 
Programação Orientada por Objectos - Aula 7
Programação Orientada por Objectos - Aula 7Programação Orientada por Objectos - Aula 7
Programação Orientada por Objectos - Aula 7
 
Programação Orientada por Objectos - Aula 3
Programação Orientada por Objectos - Aula 3Programação Orientada por Objectos - Aula 3
Programação Orientada por Objectos - Aula 3
 
Programação Orientada por Objectos - Aula 2
Programação Orientada por Objectos - Aula 2Programação Orientada por Objectos - Aula 2
Programação Orientada por Objectos - Aula 2
 
Programação Orientada por Objectos - Aula 5
Programação Orientada por Objectos - Aula 5Programação Orientada por Objectos - Aula 5
Programação Orientada por Objectos - Aula 5
 

Semelhante a 13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos de Programação

PHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosPHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosGeorge Mendonça
 
Aula de Orientação a Objetos - Herança com Java
Aula de Orientação a Objetos - Herança com JavaAula de Orientação a Objetos - Herança com Java
Aula de Orientação a Objetos - Herança com JavaJooMarcos614503
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.pptEmerson Cardoso
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosMoises Omena
 
Aula 3 - Java Prof.ª Cristiane Fidelix
Aula 3 -  Java Prof.ª Cristiane FidelixAula 3 -  Java Prof.ª Cristiane Fidelix
Aula 3 - Java Prof.ª Cristiane FidelixCris Fidelix
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Natanael Fonseca
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Sérgio Souza Costa
 
Php5 e a orientação a objetos
Php5 e a orientação a objetosPhp5 e a orientação a objetos
Php5 e a orientação a objetosxbacon
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/Rodrigo Vieira
 
Injeção de Dependências com PHP
Injeção de Dependências com PHPInjeção de Dependências com PHP
Injeção de Dependências com PHPDanilo Godoy
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5Diego Pacheco
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1Filipo Mór
 
Curso de java - Antonio Alves - aula 04
Curso de java - Antonio Alves -  aula 04Curso de java - Antonio Alves -  aula 04
Curso de java - Antonio Alves - aula 04Antonio Alves
 

Semelhante a 13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos de Programação (20)

Herança
HerançaHerança
Herança
 
PHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosPHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e Objetos
 
Refactoring
RefactoringRefactoring
Refactoring
 
Aula5
Aula5Aula5
Aula5
 
Aula de Orientação a Objetos - Herança com Java
Aula de Orientação a Objetos - Herança com JavaAula de Orientação a Objetos - Herança com Java
Aula de Orientação a Objetos - Herança com Java
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.ppt
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
 
Aula 3 - Java Prof.ª Cristiane Fidelix
Aula 3 -  Java Prof.ª Cristiane FidelixAula 3 -  Java Prof.ª Cristiane Fidelix
Aula 3 - Java Prof.ª Cristiane Fidelix
 
Curso de PHP - Objetos
Curso de PHP - ObjetosCurso de PHP - Objetos
Curso de PHP - Objetos
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
 
Php5 e a orientação a objetos
Php5 e a orientação a objetosPhp5 e a orientação a objetos
Php5 e a orientação a objetos
 
Encapsulamento em oo
Encapsulamento em ooEncapsulamento em oo
Encapsulamento em oo
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/
 
Injeção de Dependências com PHP
Injeção de Dependências com PHPInjeção de Dependências com PHP
Injeção de Dependências com PHP
 
Orientação a Objetos
Orientação a ObjetosOrientação a Objetos
Orientação a Objetos
 
Solid
SolidSolid
Solid
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1
 
Curso de java - Antonio Alves - aula 04
Curso de java - Antonio Alves -  aula 04Curso de java - Antonio Alves -  aula 04
Curso de java - Antonio Alves - aula 04
 

Mais de Manuel Menezes de Sequeira

Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instânciasSemana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instânciasManuel Menezes de Sequeira
 
Semana 9: toString, classes, instâncias e objectos, Scanner
Semana  9: toString, classes, instâncias e objectos, ScannerSemana  9: toString, classes, instâncias e objectos, Scanner
Semana 9: toString, classes, instâncias e objectos, ScannerManuel Menezes de Sequeira
 
Semana 8: Classes e instâncias, cadeias de caracteres
Semana  8: Classes e instâncias, cadeias de caracteresSemana  8: Classes e instâncias, cadeias de caracteres
Semana 8: Classes e instâncias, cadeias de caracteresManuel Menezes de Sequeira
 
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana  6: Matrizes multidimensionais, estratégias de resolução de problemasSemana  6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemasManuel Menezes de Sequeira
 
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referênciaSemana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referênciaManuel Menezes de Sequeira
 
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana  4: Atribuições especiais, matrizes, ciclos, classes pacoteSemana  4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacoteManuel Menezes de Sequeira
 
Semana 3: Introdução à linguagem de programação Java
Semana  3: Introdução à linguagem de programação Java Semana  3: Introdução à linguagem de programação Java
Semana 3: Introdução à linguagem de programação Java Manuel Menezes de Sequeira
 
Semana 1: Programação como arte de resolver problemas, algoritmos e problema...
Semana  1: Programação como arte de resolver problemas, algoritmos e problema...Semana  1: Programação como arte de resolver problemas, algoritmos e problema...
Semana 1: Programação como arte de resolver problemas, algoritmos e problema...Manuel Menezes de Sequeira
 
Semana 0: Computadores, linguagens e linguagens de programação, Noções de al...
Semana  0: Computadores, linguagens e linguagens de programação, Noções de al...Semana  0: Computadores, linguagens e linguagens de programação, Noções de al...
Semana 0: Computadores, linguagens e linguagens de programação, Noções de al...Manuel Menezes de Sequeira
 
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)Manuel Menezes de Sequeira
 
Eng.ª do Software - 9. Verificação e validação
Eng.ª do Software - 9. Verificação e validaçãoEng.ª do Software - 9. Verificação e validação
Eng.ª do Software - 9. Verificação e validaçãoManuel Menezes de Sequeira
 
Eng.ª do Software - 8. Desenho de interfaces com o utilizador
Eng.ª do Software - 8. Desenho de interfaces com o utilizadorEng.ª do Software - 8. Desenho de interfaces com o utilizador
Eng.ª do Software - 8. Desenho de interfaces com o utilizadorManuel Menezes de Sequeira
 
Eng.ª do Software - 7. Desenho arquitectónico
Eng.ª do Software - 7. Desenho arquitectónicoEng.ª do Software - 7. Desenho arquitectónico
Eng.ª do Software - 7. Desenho arquitectónicoManuel Menezes de Sequeira
 

Mais de Manuel Menezes de Sequeira (16)

Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instânciasSemana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
 
Semana 9: toString, classes, instâncias e objectos, Scanner
Semana  9: toString, classes, instâncias e objectos, ScannerSemana  9: toString, classes, instâncias e objectos, Scanner
Semana 9: toString, classes, instâncias e objectos, Scanner
 
Semana 8: Classes e instâncias, cadeias de caracteres
Semana  8: Classes e instâncias, cadeias de caracteresSemana  8: Classes e instâncias, cadeias de caracteres
Semana 8: Classes e instâncias, cadeias de caracteres
 
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana  6: Matrizes multidimensionais, estratégias de resolução de problemasSemana  6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemas
 
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referênciaSemana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
 
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana  4: Atribuições especiais, matrizes, ciclos, classes pacoteSemana  4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
 
Semana 3: Introdução à linguagem de programação Java
Semana  3: Introdução à linguagem de programação Java Semana  3: Introdução à linguagem de programação Java
Semana 3: Introdução à linguagem de programação Java
 
Semana 2: Funções e listas, variáveis
Semana  2: Funções e listas, variáveisSemana  2: Funções e listas, variáveis
Semana 2: Funções e listas, variáveis
 
Semana 1: Programação como arte de resolver problemas, algoritmos e problema...
Semana  1: Programação como arte de resolver problemas, algoritmos e problema...Semana  1: Programação como arte de resolver problemas, algoritmos e problema...
Semana 1: Programação como arte de resolver problemas, algoritmos e problema...
 
Semana 0: Computadores, linguagens e linguagens de programação, Noções de al...
Semana  0: Computadores, linguagens e linguagens de programação, Noções de al...Semana  0: Computadores, linguagens e linguagens de programação, Noções de al...
Semana 0: Computadores, linguagens e linguagens de programação, Noções de al...
 
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
 
Eng.ª do Software - 10. Testes de software
Eng.ª do Software - 10. Testes de softwareEng.ª do Software - 10. Testes de software
Eng.ª do Software - 10. Testes de software
 
Eng.ª do Software - 9. Verificação e validação
Eng.ª do Software - 9. Verificação e validaçãoEng.ª do Software - 9. Verificação e validação
Eng.ª do Software - 9. Verificação e validação
 
Eng.ª do Software - 8. Desenho de interfaces com o utilizador
Eng.ª do Software - 8. Desenho de interfaces com o utilizadorEng.ª do Software - 8. Desenho de interfaces com o utilizador
Eng.ª do Software - 8. Desenho de interfaces com o utilizador
 
Eng.ª do Software - 7. Desenho arquitectónico
Eng.ª do Software - 7. Desenho arquitectónicoEng.ª do Software - 7. Desenho arquitectónico
Eng.ª do Software - 7. Desenho arquitectónico
 
Eng.ª do Software - 6. Gestão de projectos
Eng.ª do Software - 6. Gestão de projectosEng.ª do Software - 6. Gestão de projectos
Eng.ª do Software - 6. Gestão de projectos
 

Último

"Nós Propomos! Mobilidade sustentável na Sertã"
"Nós Propomos! Mobilidade sustentável na Sertã""Nós Propomos! Mobilidade sustentável na Sertã"
"Nós Propomos! Mobilidade sustentável na Sertã"Ilda Bicacro
 
As Mil Palavras Mais Usadas No Inglês (Robert de Aquino) (Z-Library).pdf
As Mil Palavras Mais Usadas No Inglês (Robert de Aquino) (Z-Library).pdfAs Mil Palavras Mais Usadas No Inglês (Robert de Aquino) (Z-Library).pdf
As Mil Palavras Mais Usadas No Inglês (Robert de Aquino) (Z-Library).pdfcarloseduardogonalve36
 
HISTORIA DA XILOGRAVURA A SUA IMPORTANCIA
HISTORIA DA XILOGRAVURA A SUA IMPORTANCIAHISTORIA DA XILOGRAVURA A SUA IMPORTANCIA
HISTORIA DA XILOGRAVURA A SUA IMPORTANCIAElianeAlves383563
 
Sismologia_7ºano_causas e consequencias.pptx
Sismologia_7ºano_causas e consequencias.pptxSismologia_7ºano_causas e consequencias.pptx
Sismologia_7ºano_causas e consequencias.pptxpatriciapedroso82
 
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptxEB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptxIlda Bicacro
 
bem estar animal em proteção integrada componente animal
bem estar animal em proteção integrada componente animalbem estar animal em proteção integrada componente animal
bem estar animal em proteção integrada componente animalcarlamgalves5
 
Livro infantil: A onda da raiva. pdf-crianças
Livro infantil: A onda da raiva. pdf-criançasLivro infantil: A onda da raiva. pdf-crianças
Livro infantil: A onda da raiva. pdf-criançasMonizeEvellin2
 
ROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdf
ROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdfROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdf
ROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdfMarcianaClaudioClaud
 
Atividade do poema sobre mãe de mário quintana.pdf
Atividade do poema sobre mãe de mário quintana.pdfAtividade do poema sobre mãe de mário quintana.pdf
Atividade do poema sobre mãe de mário quintana.pdfmaria794949
 
ufcd_9649_Educação Inclusiva e Necessidades Educativas Especificas_índice.pdf
ufcd_9649_Educação Inclusiva e Necessidades Educativas Especificas_índice.pdfufcd_9649_Educação Inclusiva e Necessidades Educativas Especificas_índice.pdf
ufcd_9649_Educação Inclusiva e Necessidades Educativas Especificas_índice.pdfManuais Formação
 
Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...
Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...
Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...LuizHenriquedeAlmeid6
 
Planejamento 2024 - 1º ano - Matemática 38 a 62.pdf
Planejamento 2024 - 1º ano - Matemática  38 a 62.pdfPlanejamento 2024 - 1º ano - Matemática  38 a 62.pdf
Planejamento 2024 - 1º ano - Matemática 38 a 62.pdfdanielagracia9
 
Nós Propomos! Sertã 2024 - Geografia C - 12º ano
Nós Propomos! Sertã 2024 - Geografia C - 12º anoNós Propomos! Sertã 2024 - Geografia C - 12º ano
Nós Propomos! Sertã 2024 - Geografia C - 12º anoIlda Bicacro
 
o-homem-que-calculava-malba-tahan-1_123516.pdf
o-homem-que-calculava-malba-tahan-1_123516.pdfo-homem-que-calculava-malba-tahan-1_123516.pdf
o-homem-que-calculava-malba-tahan-1_123516.pdfCarolineNunes80
 
Nós Propomos! Canil/Gatil na Sertã - Amigos dos Animais
Nós Propomos! Canil/Gatil na Sertã - Amigos dos AnimaisNós Propomos! Canil/Gatil na Sertã - Amigos dos Animais
Nós Propomos! Canil/Gatil na Sertã - Amigos dos AnimaisIlda Bicacro
 
Slide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptx
Slide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptxSlide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptx
Slide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptxsfwsoficial
 
Unidade 4 (Texto poético) (Teste sem correção) (2).docx
Unidade 4 (Texto poético) (Teste sem correção) (2).docxUnidade 4 (Texto poético) (Teste sem correção) (2).docx
Unidade 4 (Texto poético) (Teste sem correção) (2).docxRaquelMartins389880
 
O que é, de facto, a Educação de Infância
O que é, de facto, a Educação de InfânciaO que é, de facto, a Educação de Infância
O que é, de facto, a Educação de InfânciaHenrique Santos
 
Slides Lição 8, CPAD, Confessando e Abandonando o Pecado.pptx
Slides Lição 8, CPAD, Confessando e Abandonando o Pecado.pptxSlides Lição 8, CPAD, Confessando e Abandonando o Pecado.pptx
Slides Lição 8, CPAD, Confessando e Abandonando o Pecado.pptxLuizHenriquedeAlmeid6
 

Último (20)

"Nós Propomos! Mobilidade sustentável na Sertã"
"Nós Propomos! Mobilidade sustentável na Sertã""Nós Propomos! Mobilidade sustentável na Sertã"
"Nós Propomos! Mobilidade sustentável na Sertã"
 
As Mil Palavras Mais Usadas No Inglês (Robert de Aquino) (Z-Library).pdf
As Mil Palavras Mais Usadas No Inglês (Robert de Aquino) (Z-Library).pdfAs Mil Palavras Mais Usadas No Inglês (Robert de Aquino) (Z-Library).pdf
As Mil Palavras Mais Usadas No Inglês (Robert de Aquino) (Z-Library).pdf
 
HISTORIA DA XILOGRAVURA A SUA IMPORTANCIA
HISTORIA DA XILOGRAVURA A SUA IMPORTANCIAHISTORIA DA XILOGRAVURA A SUA IMPORTANCIA
HISTORIA DA XILOGRAVURA A SUA IMPORTANCIA
 
Sismologia_7ºano_causas e consequencias.pptx
Sismologia_7ºano_causas e consequencias.pptxSismologia_7ºano_causas e consequencias.pptx
Sismologia_7ºano_causas e consequencias.pptx
 
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptxEB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
 
bem estar animal em proteção integrada componente animal
bem estar animal em proteção integrada componente animalbem estar animal em proteção integrada componente animal
bem estar animal em proteção integrada componente animal
 
Livro infantil: A onda da raiva. pdf-crianças
Livro infantil: A onda da raiva. pdf-criançasLivro infantil: A onda da raiva. pdf-crianças
Livro infantil: A onda da raiva. pdf-crianças
 
ROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdf
ROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdfROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdf
ROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdf
 
Atividade do poema sobre mãe de mário quintana.pdf
Atividade do poema sobre mãe de mário quintana.pdfAtividade do poema sobre mãe de mário quintana.pdf
Atividade do poema sobre mãe de mário quintana.pdf
 
ufcd_9649_Educação Inclusiva e Necessidades Educativas Especificas_índice.pdf
ufcd_9649_Educação Inclusiva e Necessidades Educativas Especificas_índice.pdfufcd_9649_Educação Inclusiva e Necessidades Educativas Especificas_índice.pdf
ufcd_9649_Educação Inclusiva e Necessidades Educativas Especificas_índice.pdf
 
Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...
Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...
Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...
 
Planejamento 2024 - 1º ano - Matemática 38 a 62.pdf
Planejamento 2024 - 1º ano - Matemática  38 a 62.pdfPlanejamento 2024 - 1º ano - Matemática  38 a 62.pdf
Planejamento 2024 - 1º ano - Matemática 38 a 62.pdf
 
Nós Propomos! Sertã 2024 - Geografia C - 12º ano
Nós Propomos! Sertã 2024 - Geografia C - 12º anoNós Propomos! Sertã 2024 - Geografia C - 12º ano
Nós Propomos! Sertã 2024 - Geografia C - 12º ano
 
o-homem-que-calculava-malba-tahan-1_123516.pdf
o-homem-que-calculava-malba-tahan-1_123516.pdfo-homem-que-calculava-malba-tahan-1_123516.pdf
o-homem-que-calculava-malba-tahan-1_123516.pdf
 
Nós Propomos! Canil/Gatil na Sertã - Amigos dos Animais
Nós Propomos! Canil/Gatil na Sertã - Amigos dos AnimaisNós Propomos! Canil/Gatil na Sertã - Amigos dos Animais
Nós Propomos! Canil/Gatil na Sertã - Amigos dos Animais
 
Slide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptx
Slide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptxSlide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptx
Slide Licao 4 - 2T - 2024 - CPAD ADULTOS - Retangular.pptx
 
Poema - Aedes Aegypt.
Poema - Aedes Aegypt.Poema - Aedes Aegypt.
Poema - Aedes Aegypt.
 
Unidade 4 (Texto poético) (Teste sem correção) (2).docx
Unidade 4 (Texto poético) (Teste sem correção) (2).docxUnidade 4 (Texto poético) (Teste sem correção) (2).docx
Unidade 4 (Texto poético) (Teste sem correção) (2).docx
 
O que é, de facto, a Educação de Infância
O que é, de facto, a Educação de InfânciaO que é, de facto, a Educação de Infância
O que é, de facto, a Educação de Infância
 
Slides Lição 8, CPAD, Confessando e Abandonando o Pecado.pptx
Slides Lição 8, CPAD, Confessando e Abandonando o Pecado.pptxSlides Lição 8, CPAD, Confessando e Abandonando o Pecado.pptx
Slides Lição 8, CPAD, Confessando e Abandonando o Pecado.pptx
 

13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos de Programação

  • 1. Polimorfismo de subtipos Análise, desenho e implementação
  • 2.  Paradigmas da programação  Programação orientada por objectos  Modularização em pacotes 2013/2014 Fundamentos de Programação 2
  • 3. public class Employee { private String name; private String ssn; public Employee(final String name, final String ssn) { this.name = name; this.ssn = ssn; } public String getName() { return name; } public String getSsn() { return ssn; } @Override public String toString() { return "(" + getName() + ", " + getSsn() + ")"; } } 2013/2014 Fundamentos de Programação 3 Que é isto?Veremos à frente…
  • 4. 2013/2014 Fundamentos de Programação 4 Employee Supervisor Relação de generalização Especialização Generalização • Um Supervisor é um Employee. • Um Employee pode ser um Supervisor.
  • 5. public class Supervisor extends Employee { private int level; public Supervisor(final String name, final String ssn, final int level) { … } public int getLevel() { return level; } @Override public String toString() { return "(" + getName() + ", " + getSsn() + ", " + getLevel() + ")"; } } 2013/2014 Fundamentos de Programação 5 Um Supervisor é um Employee. Sobrepõe-se ao método com a mesma assinatura na classe base Employee. Novo método específico da classe Supervisor.
  • 6. 2013/2014 Fundamentos de Programação 6 Employee Supervisor Especialização Generalização Classe base ou superclasse. Classe derivada ou subclasse.
  • 7.  Classe derivada deriva da classe base (subclasse deriva da superclasse)  Membros são herdados e mantêm categoria de acesso  Relação é um – Referências do tipo da classe base podem referir-se a objectos de classes derivadas  Exemplo Supervisor supervisor = new Supervisor("Guilhermina", "123456789", 3); Employee employee = new Supervisor("Felisberto", "987654321", 5); 2013/2014 Fundamentos de Programação 7
  • 8.  Método de classe derivada pode sobrepor-se a método de classe base  Sobreposição é especialização  Regras  Mesma assinatura e tipo de devolução compatível  Método na classe base não privado e não final  Método na classe derivada com acessibilidade igual ou superior 2013/2014 Fundamentos de Programação 8 Na realidade tem de ser co-variante, ou seja, o tipo de devolução do método na classe derivada deriva de (ou é igual a) o tipo de devolução na classe base. Um método final não pode ser especializado.
  • 9.  Características ou membros podem ser  private – acesso apenas por outros membros da mesma classe  package-private (sem qualificador) – adicionalmente, acesso por membros de classes do mesmo pacote  protected – adicionalmente, acesso por membros de classes derivadas  public – acesso universal 2013/2014 Fundamentos de Programação 9 Acessibilidadecrescente O Java promove a promisquidade entre objectos…
  • 10.  Própria classe  Membros da classe e membros não privados de classes base  Classe do mesmo pacote  Membros não privados da classe ou suas bases  Classe derivada  Membros protegidos ou públicos da classe ou suas bases  Outra classe  Membros públicos da classe ou suas bases 2013/2014 Fundamentos de Programação 10
  • 11. ArrayList<Employee> employees = new ArrayList<Employee>(); employees.add(new Employee("João Maria", "123456789")); employees.add(new Supervisor("Ana Maria", "987654321", 4)); … for (Employee employee : employees) out.println(employee.toString()); 2013/2014 Fundamentos de Programação 11 Qual o método toString() executado? Invocação da operação toString().
  • 12. 2013/2014 Fundamentos de Programação 12 employees : «ref» ArrayList<Employee> : ArrayList<Employee> : «ref» Employee 0 : «ref» Employee 1 : Employee name = “João Maria” ssn = “123456789” : Supervisor name = “Ana Maria” ssn = “987654321” level = 4 Possível porque a classe Supervisor deriva da classe Employee, ou seja, possível porque um Supervisor é (sempre também) um Employee.
  • 13. 2013/2014 Fundamentos de Programação 13 O resultado depende do tipo do objecto e não do tipo da referência! Isso acontece porque o método toString é polimórfico ou virtual. _(João Maria, 123456789) _ (João Maria, 123456789) (Ana Maria, 987654321, 4) _
  • 14.  Capacidade de um objecto tomar várias formas  A forma descrita pela classe a que pertence  As formas descritas pelas classes acima na hierarquia a que pertence  Objecto pode ser referenciado por referências do tipo da classe a que pertence ou de classes acima na hierarquia (mais genéricas) 2013/2014 Fundamentos de Programação 14
  • 15. Seja p(x) uma propriedade demonstrável acerca de objectos x do tipo B. Então, p(y) também deve verificar-se para objectos y do tipo D onde D é um subtipo de B. Barbara H. Liskov e Jeannette M.Wing, «A Behavioral Notion of Subtyping», ACMTransactions m Programming Languages and Systems,Volume 16, N.º 6, Novembro de 1994, pp. 1811-1841. Ver http://en.wikipedia.org/wiki/Liskov_substitution_principle. 2013/2014 Fundamentos de Programação 15 Tem de ser o programador a garantir que este princípio se verifica!
  • 16. Supervisor supervisor = new Supervisor("Guilhermina", "123456789", 3); Employee anEmployee = new Supervisor("Felisberto", "987654321", 5); Employee anotherEmployee = new Employee("Elvira", "111111111"); out.println(supervisor.toString()); out.println(anEmployee.toString()); out.println(anotherEmployee.toString()); 2013/2014 Fundamentos de Programação 16 _(Guilhermina, 123456789, 3) _ (Guilhermina, 123456789, 3) (Felisberto, 987654321, 5) _ (Guilhermina, 123456789, 3) (Felisberto, 987654321, 5) (Elvira, 111111111) _
  • 17.  Uma operação polimórfica ou virtual pode ter várias implementações  A uma implementação de uma operação chama-se método  A uma operação polimórfica podem corresponder diferentes métodos, cada um em sua classe  Todas as operações em Java são polimórficas, com excepção das qualificadas com private  Uma classe é polimórfica se tiver pelo menos uma operação polimórfica 2013/2014 Fundamentos de Programação 17
  • 18.  Invoca-se uma operação sobre um objecto de uma classe para atingir um objectivo  Invocação de uma operação leva à execução do método apropriado, ou seja, leva à execução da implementação apropriada da operação  Polimorfismo  Invocação de uma operação pode levar à execução de diferentes métodos  Método efectivamente executado depende da classe do objecto sobre o qual a operação é invocada  Método executado não depende do tipo da referência para o objecto utilizado 2013/2014 Fundamentos de Programação 18 Simplificação… invocações internas podem levar à execução de métodos privados directamente.
  • 19. public class Employee extends Object { private String name; private String ssn; public Employee(final String name, final String ssn) { this.name = name; this.ssn = ssn; } public String getName() { return name; } public String getSsn() { return ssn; } @Override public String toString() { return "(" + getName() + ", " + getSsn() + ")"; } } 2013/2014 Fundamentos de Programação 19 Agora percebe-se!A classe Object declara a operação toString() e define imediatamente um correspondente método. Esta é uma sua especialização. Se uma classe não derivar explicitamente de outra, derivará implicitamente da classe Object, que está no topo da hierarquia de classes do Java.
  • 20.  Ligação (binding)  Associação entre a invocação de uma operação e a execução de um método  Ligação estática  Operações não polimórficas, invocações através de super  Associação estabelecida em tempo de compilação  Ligação dinâmica  Operações polimórficas  Associação estabelecida apenas em tempo de execução 2013/2014 Fundamentos de Programação 20 Que é isto?Veremos à frente…
  • 21.  Classe derivada não é obrigada a fornecer método para operação da classe base  Classe base pode proibir às classes derivadas a sobreposição de um seu método, que se dirá ser um método final  Razão para um método ser final:  Programador que forneceu o método na classe base entendeu que classes derivadas não deveriam poder especializar o modo de funcionamento desse método 2013/2014 Fundamentos de Programação 21
  • 22. public class Base { public String className() { return "Base"; } } public class Derived extends Base { @Override public String className() { return "Derived"; } public void testCalls() { final Base base = (Base)this; out.println("Through this: " + this.className()); out.println("Through base: " + base.className()); out.println("Through super: " + super.className()); } } 2013/2014 Fundamentos de Programação 22 _Through this: Derived _ Through this: Derived Through base: Derived _ Through this: Derived Through base: Derived Through super: Base _
  • 23.  Veículo  Motociclo  Automóvel  Honda NX 650  AudiTT 2013/2014 Fundamentos de Programação 23 Vehicle Car Motorcycle AudiTt HondaNx650 Análise inicial pode resultar num dicionário ou glossário do domínio.
  • 24.  Um Automóvel é umVeículo  Um Motociclo é umVeículo  Uma Honda NX 650 é um Motociclo  Um AudiTT é um Automóvel 2013/2014 Fundamentos de Programação 24 Vehicle Car Motorcycle AudiTt HondaNx650 Pode refinar-se o dicionário ou glossário do domínio, acrescentando as relações entre conceitos.
  • 25. 2013/2014 Fundamentos de Programação 25 Vehicle Car Motorcycle AudiTt HondaNx650 … … Propriedades Operações … … … … … … … …
  • 26. public class Vehicle { … } public class Car extends Vehicle { … } public class Motorcycle extends Vehicle { … } public class HondaNx650 extends Motorcycle { … } public class AudiTt extends Car { … } 2013/2014 Fundamentos de Programação 26
  • 27.  Conceito abstracto – Sem instâncias no domínio em causa  Conceito concreto – Com instâncias no domínio em causa  Conceitos identificados são abstractos ou concretos?  Dependendo do domínio e seu modelo…  Veículo abstracto; Automóvel concreto;AudiTT caso particular de Automóvel  Veículo e Automóvel abstractos; AudiTT concreto 2013/2014 Fundamentos de Programação 27
  • 28. HIPÓTESE 1 HIPÓTESE 2 2013/2014 Fundamentos de Programação 28 Vehicle Car Motorcycle Vehicle Car Motorcycle AudiTt HondaNx650 As classes abstractas, correspondentes aos conceitos abstractos, têm o nome em itálico. É boa prática que as classes concretas sejam folhas na hierarquia.
  • 29. public abstract class Vehicle { … } public class Car extends Vehicle { … } public class Motorcycle extends Vehicle { … } 2013/2014 Fundamentos de Programação 29
  • 30. public abstract class Vehicle { … } public abstract class Car extends Vehicle { … } public abstract class Motorcycle extends Vehicle { … } public class HondaNx650 extends Motorcycle { … } public class AudiTt extends Car { … } 2013/2014 Fundamentos de Programação 30
  • 31. public class Position { private final double x; private final double y; public Position(final double x, final double y) { this.x = x; this.y = y; } public final double getX() { return x; } public final double getY() { return y; } … } 2013/2014 Fundamentos de Programação 31 Tipo de referência, pois é uma classe. Mas classe de valor, pois o que conta é a igualdade, e não a identidade.
  • 32. public class Size { private final double width; private final double height; public Size(final double width, final double height) { this.width = width; this.height = height; } public final double getWidth() { return width; } public final double getHeight () { return height; } … } 2013/2014 Fundamentos de Programação 32 Apesar de ter também dois atributos do tipo double, um Size não é uma Position. Tipo de referência, pois é uma classe. Mas classe de valor, pois o que conta é a igualdade, e não a identidade.
  • 33. public class Box { private final Position topLeftCornerPosition; private final Size size; public Box(final Position topLeftCornerPosition, final Size size) { this.topLeftCornerPosition = topLeftCornerPosition; this.size = size; } public final Position getTopLeftCornerPosition() { return topLeftCornerPosition; } public final Size getSize() { return size; } … } 2013/2014 Fundamentos de Programação 33 Uma Box não é nem uma Position, nem um Size, mas é representada por uma Position e por um Size. Tipo de referência, pois é uma classe. Mas classe de valor, pois o que conta é a igualdade, e não a identidade.
  • 34.  Figura  Forma (abstrato)  Círculo  Quadrado 2013/2014 Fundamentos de Programação 34 Figure Circle Shape Square
  • 35.  Uma Figura é composta de Formas  Um Círculo é uma Forma  Um Quadrado é uma Forma 2013/2014 Fundamentos de Programação 35 Shape Circle Square Figure Relação de composição.
  • 36. 2013/2014 Fundamentos de Programação 36 Shape Circle Square … … … … … … Figure … …
  • 37. public class Figure { private ArrayList<Shape> shapes; … } public abstract class Shape { … } public class Circle extends Shape { … } public class Square extends Shape { … } 2013/2014 Fundamentos de Programação 37 Tipos de referência, pois são classes.Classes de referência, pois o que conta é a identidade, e não a igualdade.
  • 38. public abstract class Shape { private Position position; public Shape(final Position position) { this.position = position; } public final Position getPosition() { return position; } public abstract double getArea(); public abstract double getPerimeter(); public abstract Box getBoundingBox(); public void moveTo(final Position newPosition) { position = newPosition; } } 2013/2014 Fundamentos de Programação 38 Operações abstractas, ou seja, operações sem qualquer implementação disponível até este nível da hierarquia. Qual a área de uma “forma”?? Tipo de referência, pois é uma classe. Classe de referência, pois o que conta é a identidade, e não a igualdade.
  • 39. public class Circle extends Shape { private double radius; public Circle(final Position position, final double radius) { super(position); this.radius = radius; } public final double getRadius() { return radius; } … 2013/2014 Fundamentos de Programação 39 Um Circle é uma Shape e a classe Circle herda a implementação da classe Shape. É necessário apenas um atributo adicional, correspondente a uma das duas propriedades de um círculo (o raio), já que a posição do centro é herdada da classe Shape. Uma ajudinha da classe base… Tipo de referência, pois é uma classe. Classe de referência, pois o que conta é a identidade, e não a igualdade.
  • 40. … @Override public double getArea() { return Math.PI * getRadius() * getRadius(); } @Override public double getPerimeter() { return 2.0 * Math.PI * getRadius(); } @Override public Box getBoundingBox() { return new Box( new Position(getPosition().getX() - getRadius(), getPosition().getY() - getRadius()), new Size(2.0 * getRadius(), 2.0 * getRadius()) ); } } 2013/2014 Fundamentos de Programação 40 Fornece-se implementações, ou seja, métodos, para cada uma das operações abstractas da classe Shape. Qual a área de um círculo? Fácil, π × r2.
  • 41. 2013/2014 Fundamentos de Programação 41 Shape Circle Square - position : Position + Shape(position : Position) + getPosition() : Position + getArea() : double + getPerimeter() : double + getBoundingBox() : Box + moveTo(newPosition : Position) - radius : double + Circle(position : Position, radius : double) + getRadius() : double + getArea() : double + getPerimeter() : double + getBoundingBox() : Box Figure Símbolo Categoria de acesso - private ~ package-private # protected + public
  • 42. 2013/2014 Fundamentos de Programação 42 Shape Circle Square - position : Position «constructors» + Shape(position : Position) - radius : double «constructors» + Circle(position : Position, radius : double) Figure «inspectors» + getPosition() : Position + getArea() : double + getPerimeter() : double + getBoundingBox() : Box «modifiers» + moveTo(newPosition : Position) «inspectors» + getRadius() : double + getArea() : double + getPerimeter() : double + getBoundingBox() : Box
  • 43.  Uma operação com qualificador abstract é uma simples declaração da operação  Uma operação sem qualificador abstract inclui também a definição de um método correspondente, que a implementa  Uma classe com uma operação abstracta tem de ser uma classe abstracta  Uma classe é abstracta se tiver o qualificador abstract 2013/2014 Fundamentos de Programação 43
  • 44.  Uma classe não abstracta diz-se uma classe concreta  Uma classe abstracta não pode ser instanciada, i.e., não se podem construir objectos de uma classe abstracta  Uma classe derivada directamente de uma classe abstracta só poderá ser concreta se implementar cada uma das operações abstractas da classe abstracta 2013/2014 Fundamentos de Programação 44
  • 45.  Generalização – Relação entre duas classes, base e derivada, em que a derivada especializa a base, que por sua vez generaliza a derivada  Polimorfismo – Um mesmo objecto pode ser visto de formas diferentes consoante o tipo da referência usada para o referenciar: uma mesma referência pode referenciar objectos de diferentes classes  Operação abstracta – Uma operações declarada numa dada classe mas não implementada nessa classe  Classe abstracta – Uma classe que não pode ser instanciada, i.e., da qual não existem objectos; usualmente as classes abstractas têm pelo menos uma operação abstracta 2013/2014 Fundamentos de Programação 45
  • 46.  Polimorfismo de subtipos  Classes e operações polimórficas  Herança  Ligação estática e ligação dinâmica  Classes abstractas e classes concretas  Operações abstractas  Análise, desenho e implementação  Dicionário do domínio  Conceitos  Conceitos concretos e conceitos abstractos 2013/2014 Fundamentos de Programação 46

Notas do Editor

  1. SSN – Social Security Number (nos EUA tem 9 dígitos)
  2. A palavra-chave “extends” denota simultaneamente uma herança de código e o estabelecimento de uma relação de generalização/especialização, ou seja, uma relação “é um”.
  3. Em vez de “especialização” podemos usar “derivação”.
  4. O termo em inglês correspondente a “sobrepor” é “override”. Pode falar-se na especialização de operações. Da covariância não vamos falar agora. Fica a ideia de que existe semelhante coisa. Não se pode reduzir a acessibilidade ao especializar. A covariância complica-se um pouco quando se introduz a noção de interface.
  5. Sendo A o conjunto das classes que tem acesso aos membros públicos, B o conjunto das que têm acesso aos membros protegidos e C e D os conjuntos correspondentes às categorias package-private e private, então: A contém B, que contém C, que contém D Fazer diagrama de Venn
  6. A interface de uma classe corresponde àquilo a que uma dada entidade tem acesso. Havendo quatro categorias de acesso, há também quatro diferentes interfaces para uma classe: Interface para a própria classe: é a interface do produtor. Interface para uma classe do mesmo pacote: é a interface vista pelos produtores de classes do mesmo pacote, que são meros consumidores da classe em causa. E assim sucessivamente.
  7. O ciclo for está escrito na forma for-each. A variável employee toma sucessivamente os valores dos elementos do vector. Não esquecer que os elementos do vector são referências, tal como a variável employee. A invocação explícita de toString() é dispensável.
  8. Em Java quase todos os métodos são polimórficos.
  9. No fundo o polimorfismo reflecte a ambiguidade (desejada!) da expressão “é um”, usada neste caso para relacionar instâncias com classes: “Este objecto é uma Honda NX 650/mota/veículo terrestre/veículo.” Podemos dizer que “este objecto, no sentido estrito, é uma Honda NX 650”, se quisermos ser mais precisos. As classes através da extensão ou derivação, formam uma hierarquia em que as classes mais genéricas estão no topo. Como em Java uma classe não pode derivar de mais do que uma outra classe, esta hierarquia forma uma árvore invertida.
  10. Este princípio é essencial. As linguagens de programação em geral não dão qualquer apoio na garantia de que o princípio é aplicado. Tem de ser o programador a garanti-lo. Como? Ver-se-há mais tarde, mas podemos adiantar a ideia essencial: os contratos dos métodos especializados têm de ser compatíveis com os contratos dos métodos a que se sobrepõem.
  11. Só mais um exemplo. A invocação explícita de toString() é dispensável.
  12. Note-se que há aqui uma subtileza: todas as classes que sobrepõem uma implementação especializada à implementação de uma dada operação que herdaram, estão também, de alguma forma, a declarar uma nova operação especializada. Esta noção é importante porque são as operações, com os respectivos contratos, que formam a interface das classes. Se os contratos forem compatíveis, pode-se dizer não apenas que uma operação pode ser implementada por vários métodos, como também que um método implementa várias operações.
  13. É extremamente importante fixar o significado dos adjectivos “estático” e “dinâmico” no âmbito das linguagens de programação. Para já basta fixar que por “estático” entende-se algo que tem lugar durante a compilação e por “dinâmico” entende-se algo que tem lugar durante a execução de um programa.
  14. Um exemplo interessante para apresentar neste diapositivo é o do método toString(). Se se quiser evitar repetições de código, pode recorrer-se a um método auxiliar, por exemplo toKernelString, que produz uma cadeia com os valores das propriedades separados por vírgulas sem colocar os parênteses: class Employee { … protected String toKernelString() { return getName() + “, “ + getSsn(); } public final String toString() { return “(“ + toKernelString() + “)”; } … } class Supervisor extends Employee { @Override protected String toKernelString() { return super.toKernelString() + “, “ + getLevel(); } } Note-se a utilização de protected, de @Override e de final. Note-se que isto corresponde ao padrão de desenho template method.
  15. Relações reflectem também colaborações. Note-se que durante a análise também se identificam as responsabilidades (dos objectos) das classes.
  16. A ideia é que no desenho já se indicam claramente não só classes e relações, mas também operações e propriedades (que permitem às classes/objectos assumirem as responsabilidades que é suposto terem). Convém aqui frisar que o UML não tem representação para as propriedades de uma classe. Assim, é talvez recomendável colocar o esterótipo «properties» na caixa dos atributos e definir as propriedades como se de atributos se tratasse. Isto é discutível, no entanto.
  17. Passagem ao código. Numa primeira fase o código reflecte directamente o desenho. Depois, desenvolvem-se os testes e a implementação.
  18. Note-se que aqui se fala da relação “é um” (para relacionar instâncias com classes) no sentido estrito! Por exemplo, posso dizer que “no sentido estrito, nenhum objecto no mundo é um veículo, pois a noção de veículo é abstracta”. Mas não posso simplesmente dizer que “nenhum objecto no mundo é um veículo”, pois isso é manifestamente falso.
  19. Note-se que a notação usada é o UML (Unified Modelling Language).
  20. Começamos por apresentar algumas ferramentas úteis. Uma classe cujas instâncias representam posições no plano.
  21. Uma classe para representar “diimensões” ou “tamanhos” de caixas no plano.
  22. Uma classe para representar caixas no plano, sendo as caixas rectângulos com lados paralelos aos eixos coordenados.
  23. Notar que a relação de composição é muito diferente da relação de generalização. Uma relaciona um todo com as suas partes. A outra relaciona uma classe mais genérica com uma classe mais específica. Pode chamar-se a atenção aqui para o facto de no primeiro exemplo a utilização de herança ser, no mínimo, discutível. Afinal, empregado e supervisor não são entidades, mas sim qualidades que pessoas tomam e nem sequer de forma permanente. Um empregado é uma pessoa com um contrato com uma dada entidade, singular ou colectiva. Um supervisor é uma pessoa com um contrato especial que o responsabiliza por uma unidade orgânica e lhe dá poderes de chefia sobre os respectivos empregados.
  24. Os conceitos abstractos têm tipicamente determinadas propriedades e comportamentos que só se podem definir com rigor para os conceitos concretos que os especializam.
  25. É muito importante distinguir aqui dois efeitos: o da herança e o do estabelecimento da relação “é um”. É o último efeito que introduz o polimorfismo nesta “equação”. Mas tarde se verá que a classes podem implementar interfaces, não herdando nada delas, pelo que o Java permite um tipo de “derivação” em que só se estabelece a relação “é um” (ou “comporta-se como um”).