SlideShare uma empresa Scribd logo
1 de 46
Aula 2 Polimorfismo de subtipos Análise, desenho e implementação
Na aula anterior … Introdução à programação orientada por objectos Classes, objectos e referências (revisão) Modularização em pacotes Organização em ficheiros e directórios 2009/2010 Programação Orientada por Objectos 2
Employee publicclassEmployee { privateStringname;     privateStringssn; publicEmployee(final Stringname, final Stringssn) { this.name = name; this.ssn = ssn;     } publicStringgetName() { returnname;     } publicStringgetSsn() { returnssn;     }     @Override publicStringtoString() { return "(" + getName() + ", " + getSsn() + ")";     } } 2009/2010 Programação Orientada por Objectos 3 Que é isto? Veremos à frente…
Generalização (relação) 2009/2010 Programação Orientada por Objectos 4 Employee Generalização Especialização Supervisor Relação de generalização ,[object Object]
 Um Employeepode ser umSupervisor.,[object Object]
Generalização (relação) 2009/2010 Programação Orientada por Objectos 6 Classe base ou superclasse. Employee Generalização Especialização Supervisor Classe derivada ou subclasse.
Herança 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); 2009/2010 Programação Orientada por Objectos 7
Sobreposição 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 2009/2010 Programação Orientada por Objectos 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.
Categorias de acesso (de novo) 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 2009/2010 Programação Orientada por Objectos 9 Acessibilidade crescente
Interfaces de uma classe 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 2009/2010 Programação Orientada por Objectos 10
Exemplo Vector<Employee> employees =     new Vector<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()); 2009/2010 Programação Orientada por Objectos 11 Invocação da operação toString(). Qual o método toString() executado?
Organização 2009/2010 Programação Orientada por Objectos 12 0 1 : Employee : Supervisor employees : «ref» Vector<Employee> : Vector<Employee> : «ref» Employee : «ref» Employee name = “João Maria” ssn  = “123456789” 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.
Resultado 2009/2010 Programação Orientada por Objectos 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) _
Polimorfismo 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) 2009/2010 Programação Orientada por Objectos 14
Princípio da substituição de Liskov 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 S é um subtipo de B. Barbara H. Liskov e  Jeannette M. Wing, “A Behavioral Notion of Subtyping”,  ACM Transactions m Programming Languages and Systems, Volume 16, N.º 6, Novembro de 1994, pp. 1811-1841. Ver http://en.wikipedia.org/wiki/Liskov_substitution_principle. 2009/2010 Programação Orientada por Objectos 15 Tem de ser o programador a garantir que este princípio se verifica!
O que aparece na consola? 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()); 2009/2010 Programação Orientada por Objectos 16 _ (Guilhermina, 123456789, 3) _ (Guilhermina, 123456789, 3) (Felisberto, 987654321, 5) _ (Guilhermina, 123456789, 3) (Felisberto, 987654321, 5) (Elvira, 111111111) _
Polimorfismo: operações e métodos 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 2009/2010 Programação Orientada por Objectos 17
Polimorfismo: operações e métodos 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 executadonão depende do tipo da referência para o objecto utilizado 2009/2010 Programação Orientada por Objectos 18 Simplificação… invocações internas podem levar à execução de métodos privados directamente.
A classe Object 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() + ")";     } } 2009/2010 Programação Orientada por Objectos 19 Se uma classe não derivar explicitamente de outra, derivará implicitamente da classe Object, que está no topo da hierarquia de classes do Java. Agora percebe-se! A classe Object declara a operação toString() e define imediatamente um correspondente  método. Esta é uma sua especialização.
Ligação estática vs. dinâmica 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 2009/2010 Programação Orientada por Objectos 20 Que é isto? Veremos à frente…
Métodos finais 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 2009/2010 Programação Orientada por Objectos 21
Uma ajudinha da classe base public class Base {     public String className() {         return "Base";     } } public class Derived extends Base {     @Override     public String className() {         return “Derived”;     }     public void testCalls() {         Base base = (Base)this;         out.println("Through this:  " + this.className());         out.println("Through base:  " + base.className());         out.println("Through super: " + super.className());     } } 2009/2010 Programação Orientada por Objectos 22 _ Throughthis:  Derived _ Throughthis:  Derived Through base:  Derived _ Throughthis:  Derived Through base:  Derived Through super: Base _
Análise: conceitos Veículo Motociclo Automóvel Honda NX 650 Audi TT 2009/2010 Programação Orientada por Objectos 23 Vehicle Motorcycle Car HondaNx650 AudiTt Análise inicial pode resultar num dicionário ou glossário do domínio.
Análise: relações Um Automóvel é um Veículo Um Motociclo é um Veículo Uma Honda NX 650 é um Motociclo Um Audi TT é um Automóvel 2009/2010 Programação Orientada por Objectos 24 Pode refinar-se o dicionário ou glossário do domínio, acrescentando as relações entre conceitos. Vehicle Car Motorcycle AudiTt HondaNx650
Desenho 2009/2010 Programação Orientada por Objectos 25 Vehicle Propriedades … … Operações Car Motorcycle … … … … AudiTt HondaNx650 … … … …
Implementação public class Vehicle {      … } public class Car extends Vehicle {      … } public class Motorcycle extends Vehicle {      … } public class HondaNx650 extends Motorcycle {      … } public class AudiTt extends Car {      … } 2009/2010 Programação Orientada por Objectos 26
Conceitos abstractos e concretos 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 e Automóvel abstractos; Audi TT concreto Veículo abstracto; Automóvel e Audi TT concretos 2009/2010 Programação Orientada por Objectos 27
Análise e desenho Hipótese 1 Hipótese 2 2009/2010 Programação Orientada por Objectos 28 Vehicle Vehicle Car Car Motorcycle Motorcycle É boa prática que as classes concretas sejam folhas na hierarquia. AudiTt HondaNx650 As classes abstractas, correspondentes aos conceitos abstractos, têm o nome em itálico.
Implementação: hipótese 1 public abstract class Vehicle {      … } public class Car extends Vehicle {      … } public class Motorcycle extends Vehicle {      … } 2009/2010 Programação Orientada por Objectos 29
Implementação: hipótese 2 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 {      … } 2009/2010 Programação Orientada por Objectos 30
Caixa de ferramentas: Position public class Position {     private double x;     private 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;     } } 2009/2010 Programação Orientada por Objectos 31
Caixa de ferramentas: Size public class Size {     private double width;     private 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;     } } 2009/2010 Programação Orientada por Objectos 32 Apesar de ter também dois atributos do tipo double, um Size não é uma Position.
Caixa de ferramentas: Box public class Box {     private Position topLeftCornerPosition;     private Size size;     public Box(final Position topLeftCornerPosition,                final Size size) {         this.topLeftCornerPosition = topLeftCornerPosition;         this.size = size;     }     public final Position getTopLeftCornerPosition() {         return position;     }     public final Size getSize() {         return size;     } } 2009/2010 Programação Orientada por Objectos 33 Uma Box não é nem uma Position, nem um Size, mas é composta por uma Position e por um Size.
Análise: conceitos Figura Forma (abstrato) Círculo Quadrado 2009/2010 Programação Orientada por Objectos 34 Figure Shape Circle Square
Análise: relações Uma Figura é composta de Formas Um Círculo é uma Forma Um Quadrado é uma Forma 2009/2010 Programação Orientada por Objectos 35 Figure Shape Relação de composição. Circle Square
Desenho 2009/2010 Programação Orientada por Objectos 36 Figure Shape … … … … Circle Square … … … …
Implementação public class Figure {     private Vector<Shape> shapes;     … } public abstract class Shape {      … } public class Circle extends Shape {      … } public class Square extends Shape {      … } 2009/2010 Programação Orientada por Objectos 37
Implementação: Shape 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;     } } 2009/2010 Programação Orientada por Objectos 38 Qual a área de uma “forma”?? Operações abstractas, ou seja, operações sem qualquer implementação disponível até este nível da hierarquia.
Implementação: Circle 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;     }     … 2009/2010 Programação Orientada por Objectos 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…
Implementação: Circle     …     @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())         );     } } 2009/2010 Programação Orientada por Objectos 40 Qual a área de um círculo? Fácil, π×r2. Fornece-se implementações, ou seja, métodos, para cada uma das operações abstractas da classe Shape.
Desenho pormenorizado 2009/2010 Programação Orientada por Objectos 41 Shape Figure - position : Position  + Shape(position : Position) + getPosition() : Position + getArea() : double + getPerimeter() : double + getBoundingBox() : Box + moveTo(newPosition : Position) Circle Square - radius : double + Circle(position : Position,  radius : double) + getRadius() : double + getArea() : double + getPerimeter() : double + getBoundingBox() : Box
Desenho pormenorizado 2009/2010 Programação Orientada por Objectos 42 Shape Figure - position : Position  «constructors» + Shape(position : Position) «inspectors» + getPosition() : Position + getArea() : double + getPerimeter() : double + getBoundingBox() : Box Circle Square - radius : double «constructors» + Circle(position : Position,  radius : double) «modifiers» + moveTo(newPosition : Position) «inspectors» + getRadius() : double + getArea() : double + getPerimeter() : double + getBoundingBox() : Box
Classes abstractas 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 2009/2010 Programação Orientada por Objectos 43
Classes abstractas 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 2009/2010 Programação Orientada por Objectos 44
A reter... 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 2009/2010 Programação Orientada por Objectos 45
A ler para as próximas aulas ... Capítulos 1 a 10 e 16 do livro: Y. Daniel Liang, Introduction to Java Programming, 7.ª edição, Prentice-Hall, 2008.ISBN: 978-0-13-605966-0 2009/2010 Programação Orientada por Objectos 46

Mais conteúdo relacionado

Mais procurados

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
 
Curso de Java (Parte 4)
Curso de Java (Parte 4)Curso de Java (Parte 4)
Curso de Java (Parte 4)Mario Sergio
 
Programação orientada a objetos em delphi
Programação orientada a objetos em delphiProgramação orientada a objetos em delphi
Programação orientada a objetos em delphiHelder Lopes
 
Introdução a Banco de Dados (Parte 3)
Introdução a Banco de Dados (Parte 3)Introdução a Banco de Dados (Parte 3)
Introdução a Banco de Dados (Parte 3)Mario Sergio
 
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
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaCharles Jungbeck
 
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
 
Java programação orientada a objetos
Java   programação orientada a objetosJava   programação orientada a objetos
Java programação orientada a objetosPaulo Carvalho
 
Exercitando modelagem em UML
Exercitando modelagem em UMLExercitando modelagem em UML
Exercitando modelagem em UMLinfo_cimol
 
Curso de Java (Parte 2)
 Curso de Java (Parte 2) Curso de Java (Parte 2)
Curso de Java (Parte 2)Mario Sergio
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverEduardo Jorge
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosLudimila Monjardim Casagrande
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Ryan Padilha
 
Programação orientada a objetos – II
Programação orientada a objetos – IIProgramação orientada a objetos – II
Programação orientada a objetos – IIGabriel Faustino
 

Mais procurados (20)

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
 
Padrões de Projeto
Padrões de ProjetoPadrões de Projeto
Padrões de Projeto
 
Curso de Java (Parte 4)
Curso de Java (Parte 4)Curso de Java (Parte 4)
Curso de Java (Parte 4)
 
Mvc delphi
Mvc delphiMvc delphi
Mvc delphi
 
Programação orientada a objetos em delphi
Programação orientada a objetos em delphiProgramação orientada a objetos em delphi
Programação orientada a objetos em delphi
 
Introdução a Banco de Dados (Parte 3)
Introdução a Banco de Dados (Parte 3)Introdução a Banco de Dados (Parte 3)
Introdução a Banco de Dados (Parte 3)
 
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...
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e Java
 
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...
 
Java programação orientada a objetos
Java   programação orientada a objetosJava   programação orientada a objetos
Java programação orientada a objetos
 
UML
UMLUML
UML
 
Aula5
Aula5Aula5
Aula5
 
Exercitando modelagem em UML
Exercitando modelagem em UMLExercitando modelagem em UML
Exercitando modelagem em UML
 
Paradigma Orientado a Objeto
Paradigma Orientado a ObjetoParadigma Orientado a Objeto
Paradigma Orientado a Objeto
 
Curso de Java (Parte 2)
 Curso de Java (Parte 2) Curso de Java (Parte 2)
Curso de Java (Parte 2)
 
Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserver
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)
 
Programação orientada a objetos – II
Programação orientada a objetos – IIProgramação orientada a objetos – II
Programação orientada a objetos – II
 

Destaque

Aula 2 Ferramentas De Desenho
Aula 2   Ferramentas De DesenhoAula 2   Ferramentas De Desenho
Aula 2 Ferramentas De Desenhosayma vm
 
Aula 7 projeções ortog. a
Aula 7 projeções ortog. aAula 7 projeções ortog. a
Aula 7 projeções ortog. aLucas Barbosa
 
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
 
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
 
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
 
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
 
1 apres exercicios_solidos-vistas-axonos_conceitos_projetor
1 apres exercicios_solidos-vistas-axonos_conceitos_projetor1 apres exercicios_solidos-vistas-axonos_conceitos_projetor
1 apres exercicios_solidos-vistas-axonos_conceitos_projetorJose H. Oliveira
 
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
 
2 f info_exercicios_solidos-vistas-axonos_conceitos
2 f info_exercicios_solidos-vistas-axonos_conceitos2 f info_exercicios_solidos-vistas-axonos_conceitos
2 f info_exercicios_solidos-vistas-axonos_conceitosJose H. Oliveira
 
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
 
1.desenho projetivo e_perspectivas
1.desenho projetivo e_perspectivas1.desenho projetivo e_perspectivas
1.desenho projetivo e_perspectivasRenata Montenegro
 

Destaque (20)

Aula 2 Ferramentas De Desenho
Aula 2   Ferramentas De DesenhoAula 2   Ferramentas De Desenho
Aula 2 Ferramentas De Desenho
 
Aula 7 projeções ortog. a
Aula 7 projeções ortog. aAula 7 projeções ortog. a
Aula 7 projeções ortog. a
 
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 7
Programação Orientada por Objectos - Aula 7Programação Orientada por Objectos - Aula 7
Programação Orientada por Objectos - Aula 7
 
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
 
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...
 
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...
 
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
 
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...
 
Aula 8 (a) p.baixa
Aula 8 (a) p.baixaAula 8 (a) p.baixa
Aula 8 (a) p.baixa
 
1 apres exercicios_solidos-vistas-axonos_conceitos_projetor
1 apres exercicios_solidos-vistas-axonos_conceitos_projetor1 apres exercicios_solidos-vistas-axonos_conceitos_projetor
1 apres exercicios_solidos-vistas-axonos_conceitos_projetor
 
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...
 
2 f info_exercicios_solidos-vistas-axonos_conceitos
2 f info_exercicios_solidos-vistas-axonos_conceitos2 f info_exercicios_solidos-vistas-axonos_conceitos
2 f info_exercicios_solidos-vistas-axonos_conceitos
 
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...
 
Aula de desenho 2 vistas
Aula de desenho 2   vistasAula de desenho 2   vistas
Aula de desenho 2 vistas
 
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...
 
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
 
1.desenho projetivo e_perspectivas
1.desenho projetivo e_perspectivas1.desenho projetivo e_perspectivas
1.desenho projetivo e_perspectivas
 

Semelhante a PoliSubtipos

Aula 3 - Java Prof.ª Cristiane Fidelix
Aula 3 -  Java Prof.ª Cristiane FidelixAula 3 -  Java Prof.ª Cristiane Fidelix
Aula 3 - Java Prof.ª Cristiane FidelixCris Fidelix
 
introdução a linguagem java-2003
introdução a linguagem java-2003introdução a linguagem java-2003
introdução a linguagem java-2003elliando dias
 
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
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX Sérgio Souza Costa
 
Capítulo 04 - Persistência de dados com SQLite
Capítulo 04 - Persistência de dados com SQLiteCapítulo 04 - Persistência de dados com SQLite
Capítulo 04 - Persistência de dados com SQLiteMarcio Palheta
 
Introdução a AOP + SpringAOP
Introdução a AOP + SpringAOPIntrodução a AOP + SpringAOP
Introdução a AOP + SpringAOPelliando dias
 
Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2irenescotolo
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Natanael Fonseca
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessRafael Farias Silva
 
Capítulo 10 - Sincronização de dados usando JSON
Capítulo 10 - Sincronização de dados usando JSONCapítulo 10 - Sincronização de dados usando JSON
Capítulo 10 - Sincronização de dados usando JSONMarcio Palheta
 
Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1Elaine Cecília Gatto
 
Técnicas de Refactoring
Técnicas de RefactoringTécnicas de Refactoring
Técnicas de RefactoringRodrigo Branas
 
Classes abstratas
Classes abstratasClasses abstratas
Classes abstratasPedro Neto
 

Semelhante a PoliSubtipos (20)

Aula 3 - Java Prof.ª Cristiane Fidelix
Aula 3 -  Java Prof.ª Cristiane FidelixAula 3 -  Java Prof.ª Cristiane Fidelix
Aula 3 - Java Prof.ª Cristiane Fidelix
 
introdução a linguagem java-2003
introdução a linguagem java-2003introdução a linguagem java-2003
introdução a linguagem java-2003
 
Refactoring
RefactoringRefactoring
Refactoring
 
PHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosPHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e Objetos
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX
 
Capítulo 04 - Persistência de dados com SQLite
Capítulo 04 - Persistência de dados com SQLiteCapítulo 04 - Persistência de dados com SQLite
Capítulo 04 - Persistência de dados com SQLite
 
Encapsulamento em oo
Encapsulamento em ooEncapsulamento em oo
Encapsulamento em oo
 
Introdução a AOP + SpringAOP
Introdução a AOP + SpringAOPIntrodução a AOP + SpringAOP
Introdução a AOP + SpringAOP
 
05 poo-ii
05   poo-ii05   poo-ii
05 poo-ii
 
Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração Painless
 
Aula5
Aula5Aula5
Aula5
 
Capítulo 10 - Sincronização de dados usando JSON
Capítulo 10 - Sincronização de dados usando JSONCapítulo 10 - Sincronização de dados usando JSON
Capítulo 10 - Sincronização de dados usando JSON
 
Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1
 
VRaptor4
VRaptor4VRaptor4
VRaptor4
 
Vraptor
VraptorVraptor
Vraptor
 
Técnicas de Refactoring
Técnicas de RefactoringTécnicas de Refactoring
Técnicas de Refactoring
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Classes abstratas
Classes abstratasClasses abstratas
Classes abstratas
 

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 (15)

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
 

Último

UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfManuais Formação
 
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxAD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxkarinedarozabatista
 
ALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolaresALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolaresLilianPiola
 
Slide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptxSlide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptxssuserf54fa01
 
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxSlides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxLuizHenriquedeAlmeid6
 
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.MrPitobaldo
 
E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?Rosalina Simão Nunes
 
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMCOMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMVanessaCavalcante37
 
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxD9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxRonys4
 
Livro O QUE É LUGAR DE FALA - Autora Djamila Ribeiro
Livro O QUE É LUGAR DE FALA  - Autora Djamila RibeiroLivro O QUE É LUGAR DE FALA  - Autora Djamila Ribeiro
Livro O QUE É LUGAR DE FALA - Autora Djamila RibeiroMarcele Ravasio
 
[Bloco 7] Recomposição das Aprendizagens.pptx
[Bloco 7] Recomposição das Aprendizagens.pptx[Bloco 7] Recomposição das Aprendizagens.pptx
[Bloco 7] Recomposição das Aprendizagens.pptxLinoReisLino
 
A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.silves15
 
Habilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasHabilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasCassio Meira Jr.
 
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADOcarolinacespedes23
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniCassio Meira Jr.
 
Mapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxMapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxBeatrizLittig1
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxLuizHenriquedeAlmeid6
 

Último (20)

UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdf
 
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxAD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
 
Em tempo de Quaresma .
Em tempo de Quaresma                            .Em tempo de Quaresma                            .
Em tempo de Quaresma .
 
ALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolaresALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolares
 
Slide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptxSlide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptx
 
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxSlides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
 
Bullying, sai pra lá
Bullying,  sai pra láBullying,  sai pra lá
Bullying, sai pra lá
 
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.
 
E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?
 
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMCOMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
 
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxD9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
 
Livro O QUE É LUGAR DE FALA - Autora Djamila Ribeiro
Livro O QUE É LUGAR DE FALA  - Autora Djamila RibeiroLivro O QUE É LUGAR DE FALA  - Autora Djamila Ribeiro
Livro O QUE É LUGAR DE FALA - Autora Djamila Ribeiro
 
[Bloco 7] Recomposição das Aprendizagens.pptx
[Bloco 7] Recomposição das Aprendizagens.pptx[Bloco 7] Recomposição das Aprendizagens.pptx
[Bloco 7] Recomposição das Aprendizagens.pptx
 
A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.
 
Habilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasHabilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e Específicas
 
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
 
Mapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxMapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docx
 
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
 

PoliSubtipos

  • 1. Aula 2 Polimorfismo de subtipos Análise, desenho e implementação
  • 2. Na aula anterior … Introdução à programação orientada por objectos Classes, objectos e referências (revisão) Modularização em pacotes Organização em ficheiros e directórios 2009/2010 Programação Orientada por Objectos 2
  • 3. Employee publicclassEmployee { privateStringname;   privateStringssn; publicEmployee(final Stringname, final Stringssn) { this.name = name; this.ssn = ssn; } publicStringgetName() { returnname; } publicStringgetSsn() { returnssn; } @Override publicStringtoString() { return "(" + getName() + ", " + getSsn() + ")"; } } 2009/2010 Programação Orientada por Objectos 3 Que é isto? Veremos à frente…
  • 4.
  • 5.
  • 6. Generalização (relação) 2009/2010 Programação Orientada por Objectos 6 Classe base ou superclasse. Employee Generalização Especialização Supervisor Classe derivada ou subclasse.
  • 7. Herança 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); 2009/2010 Programação Orientada por Objectos 7
  • 8. Sobreposição 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 2009/2010 Programação Orientada por Objectos 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. Categorias de acesso (de novo) 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 2009/2010 Programação Orientada por Objectos 9 Acessibilidade crescente
  • 10. Interfaces de uma classe 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 2009/2010 Programação Orientada por Objectos 10
  • 11. Exemplo Vector<Employee> employees = new Vector<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()); 2009/2010 Programação Orientada por Objectos 11 Invocação da operação toString(). Qual o método toString() executado?
  • 12. Organização 2009/2010 Programação Orientada por Objectos 12 0 1 : Employee : Supervisor employees : «ref» Vector<Employee> : Vector<Employee> : «ref» Employee : «ref» Employee name = “João Maria” ssn = “123456789” 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. Resultado 2009/2010 Programação Orientada por Objectos 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. Polimorfismo 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) 2009/2010 Programação Orientada por Objectos 14
  • 15. Princípio da substituição de Liskov 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 S é um subtipo de B. Barbara H. Liskov e  Jeannette M. Wing, “A Behavioral Notion of Subtyping”, ACM Transactions m Programming Languages and Systems, Volume 16, N.º 6, Novembro de 1994, pp. 1811-1841. Ver http://en.wikipedia.org/wiki/Liskov_substitution_principle. 2009/2010 Programação Orientada por Objectos 15 Tem de ser o programador a garantir que este princípio se verifica!
  • 16. O que aparece na consola? 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()); 2009/2010 Programação Orientada por Objectos 16 _ (Guilhermina, 123456789, 3) _ (Guilhermina, 123456789, 3) (Felisberto, 987654321, 5) _ (Guilhermina, 123456789, 3) (Felisberto, 987654321, 5) (Elvira, 111111111) _
  • 17. Polimorfismo: operações e métodos 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 2009/2010 Programação Orientada por Objectos 17
  • 18. Polimorfismo: operações e métodos 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 executadonão depende do tipo da referência para o objecto utilizado 2009/2010 Programação Orientada por Objectos 18 Simplificação… invocações internas podem levar à execução de métodos privados directamente.
  • 19. A classe Object 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() + ")"; } } 2009/2010 Programação Orientada por Objectos 19 Se uma classe não derivar explicitamente de outra, derivará implicitamente da classe Object, que está no topo da hierarquia de classes do Java. Agora percebe-se! A classe Object declara a operação toString() e define imediatamente um correspondente método. Esta é uma sua especialização.
  • 20. Ligação estática vs. dinâmica 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 2009/2010 Programação Orientada por Objectos 20 Que é isto? Veremos à frente…
  • 21. Métodos finais 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 2009/2010 Programação Orientada por Objectos 21
  • 22. Uma ajudinha da classe base public class Base { public String className() { return "Base"; } } public class Derived extends Base { @Override public String className() { return “Derived”; } public void testCalls() { Base base = (Base)this; out.println("Through this: " + this.className()); out.println("Through base: " + base.className()); out.println("Through super: " + super.className()); } } 2009/2010 Programação Orientada por Objectos 22 _ Throughthis: Derived _ Throughthis: Derived Through base: Derived _ Throughthis: Derived Through base: Derived Through super: Base _
  • 23. Análise: conceitos Veículo Motociclo Automóvel Honda NX 650 Audi TT 2009/2010 Programação Orientada por Objectos 23 Vehicle Motorcycle Car HondaNx650 AudiTt Análise inicial pode resultar num dicionário ou glossário do domínio.
  • 24. Análise: relações Um Automóvel é um Veículo Um Motociclo é um Veículo Uma Honda NX 650 é um Motociclo Um Audi TT é um Automóvel 2009/2010 Programação Orientada por Objectos 24 Pode refinar-se o dicionário ou glossário do domínio, acrescentando as relações entre conceitos. Vehicle Car Motorcycle AudiTt HondaNx650
  • 25. Desenho 2009/2010 Programação Orientada por Objectos 25 Vehicle Propriedades … … Operações Car Motorcycle … … … … AudiTt HondaNx650 … … … …
  • 26. Implementação public class Vehicle { … } public class Car extends Vehicle { … } public class Motorcycle extends Vehicle { … } public class HondaNx650 extends Motorcycle { … } public class AudiTt extends Car { … } 2009/2010 Programação Orientada por Objectos 26
  • 27. Conceitos abstractos e concretos 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 e Automóvel abstractos; Audi TT concreto Veículo abstracto; Automóvel e Audi TT concretos 2009/2010 Programação Orientada por Objectos 27
  • 28. Análise e desenho Hipótese 1 Hipótese 2 2009/2010 Programação Orientada por Objectos 28 Vehicle Vehicle Car Car Motorcycle Motorcycle É boa prática que as classes concretas sejam folhas na hierarquia. AudiTt HondaNx650 As classes abstractas, correspondentes aos conceitos abstractos, têm o nome em itálico.
  • 29. Implementação: hipótese 1 public abstract class Vehicle { … } public class Car extends Vehicle { … } public class Motorcycle extends Vehicle { … } 2009/2010 Programação Orientada por Objectos 29
  • 30. Implementação: hipótese 2 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 { … } 2009/2010 Programação Orientada por Objectos 30
  • 31. Caixa de ferramentas: Position public class Position { private double x; private 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; } } 2009/2010 Programação Orientada por Objectos 31
  • 32. Caixa de ferramentas: Size public class Size { private double width; private 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; } } 2009/2010 Programação Orientada por Objectos 32 Apesar de ter também dois atributos do tipo double, um Size não é uma Position.
  • 33. Caixa de ferramentas: Box public class Box { private Position topLeftCornerPosition; private Size size; public Box(final Position topLeftCornerPosition, final Size size) { this.topLeftCornerPosition = topLeftCornerPosition; this.size = size; } public final Position getTopLeftCornerPosition() { return position; } public final Size getSize() { return size; } } 2009/2010 Programação Orientada por Objectos 33 Uma Box não é nem uma Position, nem um Size, mas é composta por uma Position e por um Size.
  • 34. Análise: conceitos Figura Forma (abstrato) Círculo Quadrado 2009/2010 Programação Orientada por Objectos 34 Figure Shape Circle Square
  • 35. Análise: relações Uma Figura é composta de Formas Um Círculo é uma Forma Um Quadrado é uma Forma 2009/2010 Programação Orientada por Objectos 35 Figure Shape Relação de composição. Circle Square
  • 36. Desenho 2009/2010 Programação Orientada por Objectos 36 Figure Shape … … … … Circle Square … … … …
  • 37. Implementação public class Figure { private Vector<Shape> shapes; … } public abstract class Shape { … } public class Circle extends Shape { … } public class Square extends Shape { … } 2009/2010 Programação Orientada por Objectos 37
  • 38. Implementação: Shape 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; } } 2009/2010 Programação Orientada por Objectos 38 Qual a área de uma “forma”?? Operações abstractas, ou seja, operações sem qualquer implementação disponível até este nível da hierarquia.
  • 39. Implementação: Circle 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; } … 2009/2010 Programação Orientada por Objectos 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…
  • 40. Implementação: Circle … @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()) ); } } 2009/2010 Programação Orientada por Objectos 40 Qual a área de um círculo? Fácil, π×r2. Fornece-se implementações, ou seja, métodos, para cada uma das operações abstractas da classe Shape.
  • 41. Desenho pormenorizado 2009/2010 Programação Orientada por Objectos 41 Shape Figure - position : Position + Shape(position : Position) + getPosition() : Position + getArea() : double + getPerimeter() : double + getBoundingBox() : Box + moveTo(newPosition : Position) Circle Square - radius : double + Circle(position : Position, radius : double) + getRadius() : double + getArea() : double + getPerimeter() : double + getBoundingBox() : Box
  • 42. Desenho pormenorizado 2009/2010 Programação Orientada por Objectos 42 Shape Figure - position : Position «constructors» + Shape(position : Position) «inspectors» + getPosition() : Position + getArea() : double + getPerimeter() : double + getBoundingBox() : Box Circle Square - radius : double «constructors» + Circle(position : Position, radius : double) «modifiers» + moveTo(newPosition : Position) «inspectors» + getRadius() : double + getArea() : double + getPerimeter() : double + getBoundingBox() : Box
  • 43. Classes abstractas 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 2009/2010 Programação Orientada por Objectos 43
  • 44. Classes abstractas 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 2009/2010 Programação Orientada por Objectos 44
  • 45. A reter... 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 2009/2010 Programação Orientada por Objectos 45
  • 46. A ler para as próximas aulas ... Capítulos 1 a 10 e 16 do livro: Y. Daniel Liang, Introduction to Java Programming, 7.ª edição, Prentice-Hall, 2008.ISBN: 978-0-13-605966-0 2009/2010 Programação Orientada por Objectos 46
  • 47. Sumário 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 2009/2010 Programação Orientada por Objectos 47