Orientação a Objeto
Upcoming SlideShare
Loading in...5
×
 

Orientação a Objeto

on

  • 3,795 views

 

Statistics

Views

Total Views
3,795
Slideshare-icon Views on SlideShare
3,706
Embed Views
89

Actions

Likes
0
Downloads
76
Comments
1

6 Embeds 89

http://www.elenilsonvieira.com.br 53
http://blogs.sun.com 13
http://www.slideshare.net 10
http://blogs.oracle.com 6
https://blogs.oracle.com 4
http://www.elenilsonvieira.com 3

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

11 of 1

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • Muito Bom!
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Orientação a Objeto Orientação a Objeto Presentation Transcript

    • Encapsulamento Objetivo 5.1 – “Criar código que implemente forte encapsulamento, fraco acoplamento e alta coesão em classes, e descrever benefícios.” − Manter variáveis de instância protegidas (com um modificador de acesso, geralmente private); − Fazer métodos de acesso public, e force os códigos utilizadores da classe à usar os métodos em vez de acessar diretamente as propriedades; − Usar convenção JavaBeans para acesso: getPropriedade() e setPropriedade().
    • Encapsulamento Cuidado com pegadinhas perguntando sobre comportamento de método, quando o verdadeiro problema é encapsulamento! class Foo { public int left = 9; public int right = 3; public void setLeft(int leftNum) { left = leftNum; right = leftNum/3; } // código adicional aqui }
    • Encapsulamento O valor de right sempre vai ser um terço do valor de left? Parece que sim, até percebermos que os utilizadores da classe podem acessar as propriedades diretamente, sem utilizar o método setLeft()!
    • Polimorfismo e Casting Objetivo 5.2 - “Dado um cenário, desenvolver código que demonstre o uso de polimorfismo. Além disso, determinar quando casting será necessário e reconhecer erros tempo de compilação x tempo de execução relacionados ao casting de referências de objetos.” Uma referência é uma variável, logo pode ser reutilizada para apontar vários objetos; Uma variável de referência é imutável (quando declarada, sempre será daquele tipo);
    • Polimorfismo e Casting O tipo de uma variável de referência indica os métodos que poderão ser invocados no objeto referenciado; Uma variável de referência pode referenciar um objeto do mesmo tipo da referência declarada ou qualquer subtipo dela; Uma variável de referência pode ser declarada como um tipo classe ou interface. Se a variável for declarada como interface, ela pode referenciar qualquer objeto de qualquer classe que implementa a interface.
    • Polimorfismo e Casting class Animal { void makeNoise() {System.out.println(quot;generic noisequot;); } } class Dog extends Animal { void makeNoise() {System.out.println(quot;barkquot;); } void playDead() { System.out.println(quot;roll overquot;); } }
    • Polimorfismo e Casting class CastTest2 { public static void main(String [] args) { Animal [] a = {new Animal(), new Dog(), new Animal() }; for(Animal animal : a) { animal.makeNoise(); if(animal instanceof Dog) { animal.playDead(); } } } } Erro “Cannot find symbol” - Referência Animal não conhece método de objeto Dog
    • Polimorfismo e Casting Com adição de casting, podemos acessar o método de Dog: if(animal instanceof Dog) { Dog d = (Dog) animal; d.playDead(); }
    • Polimorfismo e Casting class Animal { } class Dog extends Animal { } class DogTest { public static void main(String [] args) { Animal animal = new Animal(); Dog d = (Dog) animal; } } Exemplo de downcasting errado – referência da subclasse não pode referir à um objeto de superclasse. (java.lang.ClassCastException)
    • Polimorfismo e Casting Upcasting: pode ser implícito ou não, fica à cargo do programador adicionar o casting class Animal { } class Dog extends Animal { } class DogTest { public static void main(String [] args) { Dog d = new Dog(); Animal a1 = d; // upcasting implícito Animal a2 = (Animal) d; // upcast explícito } }
    • Sobrecarga/Sobrescrita Objetivo 1.5 - “Dado um código de exemplo, determinar se um método está corretamente sobrescrevendo ou sobrecarregando outro método, e identificar retornos de valores legais (incluindo retornos covariantes), para o método. Objetivo 5.4 - “Dado um cenário, desenvolver código que declare e/ou invoque métodos sobrescritos ou sobrecarregados, e código que declara e/ou invoca superclasses
    • Sobrecarga/Sobrescrita public class Animal { public void eat() { System.out.println(quot;Generic Animal Eating Genericallyquot;); } } class Horse extends Animal { public void eat() { System.out.println(quot;Horse eating hay, oats, and horse treatsquot;); } }
    • Sobrecarga/Sobrescrita public class TestAnimals { public static void main (String [] args) { Animal a = new Animal(); Animal b = new Horse(); a.eat(); b.eat(); } } Qual método b.eat() invocará?
    • Sobrecarga/Sobrescrita class Animal { public void eat() { System.out.println(quot;Generic Animal Eating Genericallyquot;); } } class Horse extends Animal { public void eat() { System.out.println(quot;Horse eating hay, oats, and horse treatsquot;); } public void buck() { } }
    • Sobrecarga/Sobrescrita public class TestAnimals { public static void main (String [] args) { Animal a = new Horse(); a.buck(); } } O que acontecerá na invocação de a.buck()?
    • Sobrecarga/Sobrescrita class Animal { public void eat() { System.out.println(quot;Generic Animal Eating Genericallyquot;); } } class Horse extends Animal { private void eat() { System.out.println(quot;Horse eating hay, oats, and horse treatsquot;); } }
    • Sobrecarga/Sobrescrita public class TestAnimals { public static void main (String [] args) { Animal a = new Horse(); a.eat(); } } O que acontecerá na invocação de a.eat()?
    • Sobrecarga/Sobrescrita class Animal { public void eat() throws Exception { ... } } class Dog2 extends Animal { public void eat() { /* no Exceptions */} public static void main(String [] args) { Animal a = new Dog2(); Dog2 d = new Dog2(); d.eat(); a.eat(); } } O que ocorrerá na invocação de a.eat()?
    • Sobrecarga/Sobrescrita Regras para sobrescrita de métodos: − Argumentos iguais − Retorno do mesmo tipo ou subtipo − O nível de acesso não pode ser mais restritivo Mas pode ser menos restritivo − Só podem ser sobrescritos se são herdados − O método sobrecarregado pode enviar exceção unchecked (runtime), mesmo que o da superclasse não envie
    • Sobrecarga/Sobrescrita Regras para sobrescrita de métodos: − Não pode enviar exceção “checked” nova ou mais ampla que a do método pai − O método filho pode enviar menos exceções − Proibido sobrescrever FINAL − Proibido sobrescrever STATIC − Se não pode ser herdado, não pode ser sobrescrito
    • Sobrecarga/Sobrescrita public class Animal { public void eat() { } } Dado o método acima, qual das sobrescritas abaixo são válidas? A) private void eat() {} B) public void eat() throws IOException{} C) public void eat(String food) D) public String eat()
    • Sobrecarga/Sobrescrita Regras para Sobrecarga: − Deve alterar a lista de argumentos − PODE mudar tipo de retorno − PODE modificar o modificador de acesso − PODE declarar novas ou mais amplas exceções − Pode ser sobrecarregado na mesma classe ou em uma subclasse
    • Sobrecarga/Sobrescrita class Adder { public int addThem(int x, int y) { return x + y; } public double addThem(double x, double y) { return x + y; } }
    • Sobrecarga/Sobrescrita public class TestAdder { public static void main (String [] args) { Adder a = new Adder(); int b = 27; int c = 3; int result = a.addThem(b,c); double doubleResult = a.addThem(22.5,9.3); } } Quais serão os métodos invocados?
    • Sobrecarga/Sobrescrita class Animal { } class Horse extends Animal { } class UseAnimals { public void doStuff(Animal a) { System.out.println(quot;In the Animal versionquot;); } public void doStuff(Horse h) { System.out.println(quot;In the Horse versionquot;); }
    • Sobrecarga/Sobrescrita public static void main (String [] args) { UseAnimals ua = new UseAnimals(); Animal animalObj = new Animal(); Horse horseObj = new Horse(); Animal animalRefToHorse = new Horse(); ua.doStuff(animalObj); ua.doStuff(horseObj); ua.doStuff(animalRefToHorse); } } O que será apresentado em cada uma das invocações?
    • Sobrecarga/Sobrescrita public class Animal { public void eat() { System.out.println(quot;Generic Animal Eating Genericallyquot;); } } public class Horse extends Animal { public void eat() { System.out.println(quot;Horse eating hay quot;); } public void eat(String s) { System.out.println(quot;Horse eating quot; + s); } }
    • Sobrecarga/Sobrescrita
    • Sobrecarga/Sobrescrita
    • Construtores Objetivo 1.6 - “Dado um conjunto de classes e superclasses, desenvolver construtores para uma ou mais classes. Dada uma declaração de classe, determinar se um construtor default será criado, e se sim, determinar o comportamento daquele construtor. Dado um listamento de classes aninhado ou não, escrever código para instanciar aquela classe.”
    • Construtores Objetivo 5.3 - “Explicar o efeito dos modificadores na herança no que diz respeito à construtores, variáveis e métodos de instância e estáticos.” Objetivo 5.4 - “Dado um cenário, desenvolver código que declare e/ou invoque métodos sobrecarregados ou sobrescritos e código que declare construtores de superclasse, sobrecarregados ou sobrescritos.”
    • Construtores Interfaces não podem ter construtores Classes concretas e abstratas DEVEM ter construtores Construtores NÃO possuem retorno Construtores aceitam qualquer modificador de acesso O nome do método construtor deve ter o nome IGUAL ao da classe
    • Construtores Se não houver nenhum explícito, haverá um construtor default implícito gerado pelo compilador − O construtor default é sempre sem argumentos − Caso seja feito algum construtor, o compilador não gerará o construtor default implícito O primeiro comando de um construtor sempre será a chamada de um outro construtor sobrecarregado ou construtor da superclasse − this()‫‏‬ − super()‫‏‬
    • Construtores Caso não seja inserido um super() ou this(), o compilador irá inserir um super() automaticamente Não é possível acessar um método ou variável de instância antes da execução do super()‫‏‬ Apenas variáveis ou métodos estáticos podem ser acessadas como parte da chamada super() ou this() - Ex.: super(Animal.NAME)‫‏‬ Construtores de classes abstratas são chamados quando subclasses concretas são instanciadas