Abstração
consiste de focalizar nos aspectos essenciais inerentes a uma entidade e ignorar propriedades ``acidentais.'' Em termos de desenvolvimento de sistemas, isto significa concentrar-se no que um objeto é e faz antes de se decidir como ele será implementado. O uso de abstração preserva a liberdade para tomar decisões de desenvolvimento ou de implementação apenas quando há um melhor entendimento do problema a ser resolvido.
Muitas linguagens de programação modernas suportam o conceito de abstração de dados; porém, o uso de abstração juntamente com polimorfismo e herança, como suportado em orientação a objetos, é um mecanismo muito mais poderoso.
O uso apropriado de abstração permite que um mesmo modelo conceitual (orientação a objetos) seja utilizado para todas as fases de desenvolvimento de um sistema, desde sua análise até sua documentação.
referência: http://www.dca.fee.unicamp.br/cursos/POOCPP/node6.html
errado - polimorfismo consiste em uma classe ou metodo poder assumir varios comportamentos de acordo com a classe que on invoca. Exemplo de polimorfismo parametrico que tambem aborda herança, encapsulamento e exceções.
public interface Animal {
public String som();
}
public class Felino implements Animal{
private String nome;
public String som() {
// TODO Auto-generated method stub
return "miauauau";
}
public void setNome(String nome) throws InvalidException {
if (nome.length() == 0){
throw new InvalidException();
}else
this.nome = nome;
}
public String getNome() {
return nome;
}
}
import javax.print.attribute.standard.Severity;
public class InvalidException extends Exception{
Severity sev;
int errorCode;
public InvalidException() {
// TODO Auto-generated constructor stub
super("error message");
sev = sev.ERROR;
errorCode = 666;
}
}
public class cao implements Animal{
@Override
public String som() {
// TODO Auto-generated method stub
return "auauaua";
}
}
public class Felino1 extends Felino{
private String nome;
public Felino1(String n) {
// TODO Auto-generated constructor stub
super();
this.nome = n;
}
@Override
public void setNome(String nome) {
// TODO Auto-generated method stub
try {
super.setNome(nome);
} catch (InvalidException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public String getNome() {
// TODO Auto-generated method stub
return super.getNome();
}
}
public class Cao1 extends cao{
private String nome;
public Cao1(String n) {
// TODO Auto-generated constructor stub
this.nome = n;
}
public void setNome(String nome) throws InvalidException {
if (nome.length() == 0){
throw new InvalidException();
}else
this.nome = nome;
}
public String getNome() {
return nome;
}
}
import java.util.ArrayList;
import java.util.Collection;
public class Parametrism {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Animal f1 = new Felino1("damnd");
Animal f2 = new Felino1("belher");
Animal c1 = new Cao1("fido");
Animal c2 = new Cao1("tj");
Collection an = new ArrayList();
an.add(f1);
an.add(f2);
an.add(c1);
an.add(c2);
for (Animal a: an)
System.out.println(a.som());
}
}