Sei sulla pagina 1di 54

Tcnicas

de Programao
Avanada
TCC-00.174
Prof.: Anselmo Montenegro
www.ic.u.br/~anselmo
anselmo@ic.u.br
Contedo: Polimorsmo
Orientao a Objetos
Reviso ...

A classe prov a estrutura para a construo de objetos



Um objeto uma instncia de uma classe

Possui caractersFcas (atributos) e um estado (valores de
seus atributos)

Expe o seu comportamento atravs de mtodos
(funes)

1/10/13 Tcnicas de Programao Avanada 2
Orientao a Objetos
Reviso ...

Um programa OO um conjunto de objetos que


colaboram entre si para a soluo de um problema


Objetos colaboram atravs de trocas de mensagens


A troca de mensagem realizada atravs da chamada de
um mtodo

1/10/13 Tcnicas de Programao Avanada 3


Orientao a Objetos
Reviso...

Encapsulamento:

Princpio pelo qual cada componente de um programa deve
agregar toda a informao relevante para sua manipulao

Ocultao da Informao:

Princpio pelo qual cada componente deve manter oculta sob sua
guarda uma deciso de projeto nica.

Para a uFlizao desse componente, apenas o mnimo necessrio
para sua operao deve ser revelado (tornado pblico).

1/10/13 Tcnicas de Programao Avanada 4


Orientao a Objetos
Herana

Diferentes classes podem ter diversas semelhanas:


duas ou mais classes podero comparFlhar os mesmos atributos e/ou os
mesmos mtodos.

Herana: Permite a uma classe herdar caractersFcas (atributos) e o
comportamento (mtodos) de outra classe

Superclasse
Subclasse
Ancestral
Descendente

1/10/13 Tcnicas de Programao Avanada 5


Orientao a Objetos
Herana

Pessoa
- nome: String
- idade: int Instncias de Aluno
+denirNome(nome: SFng): void Joo
+retornarNome(): String
25
+denirIdade(idade: int): void
Sistemas de Informao
+retornarIdade(): int

Maria
20
Aluno Sistemas de Informao
- curso: String
+denirCurso(f: SFng): void
+retornarCurso(): String

1/10/13 Tcnicas de Programao Avanada 6


Orientao a Objetos
Herana

//SuperClass.java
public class SuperClass
{
// Atributos e mtodos
}

//SubClass.java
public class SubClass extends SuperClass
{
// Atributos e mtodos
}

1/10/13 Tcnicas de Programao Avanada 7


Orientao a Objetos
Herana

class Pessoa { class Aluno extends Pessoa {
String nome; String curso;
int idade;
void definirCurso(String valor) {
void definirNome(String valor) { curso = valor;
nome = valor; }
}
String retornarCurso() {
String retornarNome() { return curso;
return nome; }
}
}
void definirIdade(int valor) {
idade = valor;
}

int retornarIdade() {
return idade;
}
}

1/10/13 Tcnicas de Programao Avanada 8


Orientao a Objetos
Herana e Generalizao

Uma generalizao um relacionamento entre itens gerais


(superclasse) e itens mais especcos (subclasses)

representada por uma linha slida com um tringulo
vazado apontando para o item mais geral.

superclasse

um
um tipo de

subclasse

1/10/13 UFF/IC Tcnicas de Programao Avanada 1/10/13 9


Orientao a Objetos
Classes Abstratas, concretas e interfaces

Classes Abstratas Vs Classes Concretas



Uma classe abstrata uma classe que no tem instncias
diretas, mas cujas classes descendentes podem ter instncias
diretas

Uma classe concreta uma classe que pode ser instanciada

1/10/13 Tcnicas de Programao Avanada 10


Orientao a Objetos
Classes Abstratas, concretas e interfaces

Classes Abstratas Vs Interfaces



A classe abstrata pode possuir mtodos no abstratos,
bastando ter apenas um mtodo abstrato para ser
considerada como tal

Um interface apenas prope os mtodos que devem ser
implementados pelas classes que desejarem

Uma interface dene um Fpo

1/10/13 Tcnicas de Programao Avanada 11


Introduo
Conceitos

1/10/13 Tcnicas de Programao Avanada 12


Orientao a Objetos
Noes sobre Rpos

Tipo conjunto de valores associado a um conjunto de


operaes que podem ser aplicados sobre aqueles valores


Objeto de dados valor de um certo Fpo armazenado em uma
rea de memria

1/10/13 Tcnicas de Programao Avanada 13


Orientao a Objetos
Noes sobre Rpos

As operaes denidas para um Fpo so a nica forma de


manipular objetos de dados

Qualquer outra tentaFva de manipulao causa um erro de Fpo

Um programa seguro com relao a Fpos se no contm erros
de Fpo

1/10/13 Tcnicas de Programao Avanada 14


Orientao a Objetos
Noes sobre Rpos

Tipos de dados componentes semnFcos fundamentais de


uma linguagem de programao que procuram capturar a
natureza dos dados manipulados pelo programa

Linguagens de programao diferem em relao a forma com a
qual manipulam os Fpos

1/10/13 Tcnicas de Programao Avanada 15


Orientao a Objetos
Noes sobre Rpos

Sistema de Fpos conjunto de regras de uma linguagem que


devem ser seguidas para denir e manipular os dados do
programa

ObjeFvo: evitar a escrita de programas no seguros em relao
aos Fpos considerados

1/10/13 Tcnicas de Programao Avanada 16


Orientao a Objetos
Polimorsmo

Sistema de Fpos forte garante que programas escritos


segundo as regras de Fpagem no geram erros de Fpo

Linguagem fortemente Fpada linguagem que possui um
sistema de Fpos forte subjacente

Linguagem fracamente Fpada no possui um sistema de Fpos
forte

1/10/13 Tcnicas de Programao Avanada 17


Orientao a Objetos
Noes sobre Rpos

Linguagem Fpada estaFcamente os Fpos de toda a expresso


da linguagem so conhecidos em tempo de compilao (usam
um sistema de Fpos estFco)

Linguagem Fpada dinamicamente os Fpos das expresses
podem vir a ser conhecidos somente em tempo de execuo

1/10/13 Tcnicas de Programao Avanada 18


Orientao a Objetos
Noes sobre Rpos

Sistema de Fpo estrito se uma operao espera um operando


de Fpo T, ento somente pode ser invocada sobre um
parmetro de Fpo T

CompaFbilidade de Fpos algumas linguagens fornecem maior
exibilidade denindo condies nas quais um operando de
outro Fpo, dito compaivel, pode ser uFlizado sem violar a
segurana de Fpos

1/10/13 Tcnicas de Programao Avanada 19


Orientao a Objetos
Noes sobre Rpos

Quando compaFbilidade de Fpos usada, necessrio algum


procedimento de checagem de Fpos

A compaFbilidade de Fpos pode ser nominal (por nome) ou
estrutural (por estrutura)

1/10/13 Tcnicas de Programao Avanada 20


Orientao a Objetos
Noes sobre Rpos

CompaFbilidade por nome somente Fpos com mesmo nome


so compaiveis

CompaFbilidade estrutural dois Fpos T1 e T2 so compaiveis
se:
T1 compaivel por nome com T2;
T1 e T2 so denidos aplicando o mesmo construtor de Fpos
sobre componentes correspondentes estruturalmente
compaiveis;

1/10/13 Tcnicas de Programao Avanada 21


Orientao a Objetos
Noes sobre Rpos

Type s1 is struct{ s1 a,x;


int y; s2 b;
int w; s3 c;
} int d;
Type s2 is struct{
int y; a = b; -- (1)
int w; x = a; -- (2)
} c= func(b); -- (3)
Type s3 is struct{ d = func(a); -- (4)
int y;
}
S3 func (s1 z){
...
}

Considerando compaFbilidade de nomes instrues (1), (3) e (4) apresentam


erro de Fpo
Considerando compaFbilidade estrutural instrues (1), (2) e (3) so corretas

1/10/13 Tcnicas de Programao Avanada 22
Orientao a Objetos
SubRpos

Um subFpo ST de um Fpo T um subconjunto dos valores


associados as mesmas operaes de T

A s s u m e - s e q u e a s o p e r a e s d e T s o h e r d a d a s
automaFcamente por ST

1/10/13 Tcnicas de Programao Avanada 23


Orientao a Objetos
SubRpos

Uma linguagem de programao munida de subFpos deve poder


denir:

Um modo de denir subconjuntos de um dado Fpo

Regras de compaFbilidade entre um subFpo e seu superFpo

1/10/13 Tcnicas de Programao Avanada 24


Orientao a Objetos
Sistemas de Rpos Monomrcos vs
Polimrcos

Em linguagens Fpadas estaFcamente, uma enFdade de


programa (constante, varivel ou roFna) tem um Fpo especico
que denido por uma declarao

Toda operao nessas linguagens requer operandos de Fpo
exatamente igual ao especicado na denio da operao

Esse sistema de Fpos denido como monomrco

1/10/13 Tcnicas de Programao Avanada 25


Orientao a Objetos
Polimorsmo

Polimorsmo uma palavra grega que signica mlFplas formas



uma caractersFca de linguagens de programao em que
valores de diferentes Fpos de dado podem ser manipulados por
uma interface comum

1/10/13 Tcnicas de Programao Avanada 26


Orientao a Objetos
Sistemas de Rpos Monomorcos vs
Polimorcos

Em uma linguagem de programao polimrca objetos podem


pertencer a mais de um Fpo

RoFnas (funes) podem aceitar parmetros de diferentes Fpos
como parmetros formais

PraFcamente todas as linguagens modernas desviam-se do
monorsmo puro

1/10/13 Tcnicas de Programao Avanada 27


Orientao a Objetos
Sistemas de Rpos Monomorcos vs
Polimorcos

Exemplos de desvio de monomorsmo puro:



Coero
Sobrecarga de operadores
CompaFbilidade de Fpos
SubFpagem

1/10/13 Tcnicas de Programao Avanada 28


Orientao a Objetos
Desvios de monomorsmo - coero

Coero denota uma converso implcita durante o tempo de


compilao ou execuo (run Rme) de um subFpo para um
superFpo

Exemplo: expresses que misturam Fpos numricos na
linguagem C

double d; long l; int i;
if (d > i) d = i;
if (i > l) l = i;
if (d == l) d *= 2;

1/10/13 Tcnicas de Programao Avanada 29
Orientao a Objetos
Desvios de monomorsmo - Sobrecarga

class OverloadDemo { class Overload {


void test() { public staFc void main(String args[]) {
System.out.println("No parameters"); OverloadDemo ob = new OverloadDemo();
} double result;
// Overload test for one integer parameter. // call all versions of test()
void test(int a) { ob.test();
System.out.println("a: " + a); ob.test(10);
} ob.test(10, 20);
// Overload test for two integer parameters. result = ob.test(123.2);
void test(int a, int b) { System.out.println("Result of ob.test(123.2): "
System.out.println("a and b: " + a + " " + b); + result);
} }
// overload test for a double parameter }
double test(double a) {
System.out.println("double a: " + a);
return a*a;
}

1/10/13 Tcnicas de Programao Avanada 30


Orientao a Objetos
Tipos de polimorsmo

Linguagens diferem pelos diferentes Fpos de polimorsmo


(considera-se aqui polimorsmo funcional)

Parametric
Universal
Inclusion

Polymorsmo
Overloading

Ad hoc

Coercion


1/10/13 Tcnicas de Programao Avanada 31
Orientao a Objetos
Polimorsmo Ad Hoc Vs
Polimorsmo Universal

Polimorsmo Ad Hoc trabalha em um conjunto nito e


pequeno de Fpos e pode se comportar de forma diferente para
cada Fpo

Polimorsmo Universal trabalha uniformemente em um
conjunto innito de Fpos os quais tem estrutura comum

1/10/13 Tcnicas de Programao Avanada 32


Orientao a Objetos
Polimorsmo Ad Hoc

Exemplos de polimorsmo ad hoc



Coero a operao que converte o argumento de uma funo para o Fpo que a
funo espera

Sobrecarga (overload) de mtodos o mesmo nome de funo usado para denotar
diferentes funes e em cada contexto seu nome unicamente determinado

Ex.: println();
void println(int arg);
void println(float arg);
void println(String arg);

1/10/13 Tcnicas de Programao Avanada 33


Orientao a Objetos
Polimorsmo Paramtrico

Tipo de polimorsmo universal mais genuno trabalh uniformemente sobre


uma gama de Fpos

No polimorsmo paramtrico um Fpo de dados (ou funo) pode ser escrito
genericamente, de modo que ele(ou ela) possa lidar com diferentes valores
de forma idnFca sem depender de seu Fpo

O Polimorsmo paramtrico uma forma de tornar a linguagem mais
expressiva mantendo porm a segurana estFca
de Fpos

1/10/13 Tcnicas de Programao Avanada 34


Orientao a Objetos
Polimorsmo Paramtrico

Exemplo: Classe Pilha


public class PilhaInt {

private int[] elementos = new int[100];


private int topo = -1;

public void push(int elemento) {


elementos[++topo] = elemento; }

public void pop() {


topo--; }

public int top() {


return elementos[topo]; }

public boolean isEmpty() {


return topo < 0; }
}
1/10/13 Tcnicas de Programao Avanada 35
Orientao a Objetos
Polimorsmo Paramtrico

Classe Pilha usando Fpos genricos



public class Pilha<T> {

private Object[] elementos = new Object[100];


private int topo = -1;

public void push(T elemento) {
elementos[++topo] = elemento; }

public void pop() {


topo--; }

public T top() {
return (T)elementos[topo]; }

public boolean isEmpty() {


return topo < 0; }

}

1/10/13 Tcnicas de Programao Avanada 36


Orientao a Objetos
Java Generics


uma melhoria no sistema de Fpos introduzida na J2SE 5.0 que
permite um mtodo ou Fpo operar em objeto de vrios Fpos

Permite segurana de Fpos em tempo de compilao

Adiciona segurana de Fpos em tempo de compilao ao
Framework de colees e elimina a necessidade de casRng

1/10/13 Tcnicas de Programao Avanada 37


Orientao a Objetos
Polimorsmo Paramtrico

Uso da classe genrica Pilha



public class MainPilha {
public static void main(String[] args) {
Pilha<Integer> pilha = new Pilha<Integer>();

pilha.push(new Integer(5));
System.out.println(pilha.top());

}

}

1/10/13 Tcnicas de Programao Avanada 38


Orientao a Objetos
Polimorsmo Paramtrico

Problemas com Fpos genricos


class List<T>{
}

List<String> ls = new ArrayList<String>();

List<Object> lo = ls; // se fosse permitido

lo.add(new Object());

String s = ls.get(0); // erro em execuo

No podemos assumir que



class<T1> superFpo de class<T2>

quando class T2 extends T1
1/10/13 Tcnicas de Programao Avanada 39
Orientao a Objetos
Polimorsmo Paramtrico

Problemas com Fpos genricos


List<String> ls = new ArrayList<String>();

ls.add("string");

List<?> lo = ls;

Object o = lo.get(0);

System.out.println(o.toString());

lo.add(new Object()); // erro de compilao

String s = ls.get(0);

class<T> subFpo de class<?>

1/10/13 Tcnicas de Programao Avanada 40


Orientao a Objetos
Polimorsmo Paramtrico

public abstract class Shape {


public abstract void draw(Canvas c);
}

public class Circle extends Shape {


private int x, y, radius;
public void draw(Canvas c) {
... }
}
public class Rectangle extends Shape {
private int x, y, width, height;
public void draw(Canvas c) {
... }
}

public class Canvas {


public void draw(Shape s) {
s.draw(this); }
public void drawAll(List<Shape> shapes) {
for (Shape s: shapes)
s.draw(this);
}

1/10/13 Tcnicas de Programao Avanada 41


Orientao a Objetos
Polimorsmo Paramtrico

public abstract class Shape {


public abstract void draw(Canvas c);
}

public class Circle extends Shape {


private int x, y, radius;
public void draw(Canvas c) {
... }
}
public class Rectangle extends Shape {
private int x, y, width, height;
public void draw(Canvas c) {
... }
}

public class Canvas {


public void draw(Shape s) {
s.draw(this); }
public void drawAll(List<? extends Shape> shapes) {
for (Shape s: shapes)
s.draw(this);
}

1/10/13 Tcnicas de Programao Avanada 42


Orientao a Objetos
Polimorsmo Paramtrico

Mtodos genricos


static <T> T fromArrayToCollection(T[]
for (T o : a) {
a, Collection<T> c) {

}
c.add(o);

1/10/13 Tcnicas de Programao Avanada 43


Orientao a Objetos
Polimorsmo de incluso

Polimorsmo de incluso (de subFpos) permite que uma roFna


(funo ou mtodo) seja aplicada a um Fpo e a seus subFpos

Linguagens de programao O.O proveem variveis polimrcas
que podem se referir a objetos de diferentes Fpos

Linguagens fortemente Fpadas restringem o polimorsmo a de
tais variveis: uma varivel de uma classe T somente pode se
referir a objetos de um Fpo T ou de classes derivadas de T

1/10/13 Tcnicas de Programao Avanada 44


Orientao a Objetos
Polimorsmo de subRpos

Polimorsmo de subFpos nos permite escrever programas tais


que objetos que comparFlham a mesma superclasse sejam
tratados como se fossem objetos da superclasse.

Pode simplicar a programao

1/10/13 Tcnicas de Programao Avanada 45


Orientao a Objetos
Polimorsmo

Dada uma superclasse Pessoa, com uma subclasse Aluno,


desejamos adicionar outra subclasse chamada Professor.

Pessoa

Aluno Professor

1/10/13 Tcnicas de Programao Avanada 46


Orientao a Objetos
Polimorsmo

Exemplo 01
public static main( String[] args ) {

Aluno objetoAluno = new Aluno();
Professor objectoProfessor = new Professor();

// Referncia da classe Pessoa recebe um objeto da classe Aluno.
Pessoa ref = objetoAluno;

// Chamada para o mtodo getName() da classe Aluno.
ref.getName();
}

1/10/13 Tcnicas de Programao Avanada 47


Orientao a Objetos
Polimorsmo

Suponha que exista um mtodo getName na superclasse Pessoa, que foi


reimplementado nas subclasses Aluno e Professor.
public class Aluno{
public String getName(){
System.out.println(Nome do Aluno: + name);
return name;
}
}

public class Professor{
public String getName(){
System.out.println(Nome do Professor: + name);
return name;
}
}

1/10/13 Tcnicas de Programao Avanada 48


Orientao a Objetos
Polimorsmo

public static main( String[] args ) {


Aluno objetoAluno = new Aluno();
Professor objetoProfessor = new Professor();

// Referncia da Pessoa recebe um objeto da classe Aluno.
Pessoa ref = objetoAluno;

// Chamada para o mtodo getName() da classe Aluno.
ref.getName();

// Referncia da Pessoa recebe um objeto da classe Professor.
ref = objetoProfessor;

// Chamada para o mtodo getName() da classe Professor.
ref.getName();
}

1/10/13 Tcnicas de Programao Avanada 49


Orientao a Objetos
Polimorsmo

Exemplo 02
public static main( String[] args ){
Aluno objetoAluno = new Aluno();
Professor objetoProfessor = new Professor();

printInfo( objetoAluno );
printInfo( objetoProfessor);
}

1/10/13 Tcnicas de Programao Avanada 50


Orientao a Objetos
Polimorsmo

public static printInfo( Pessoa p ){


// Chama o mtodo getName() do objeto
// da classe Pessoa passado por argumento
p.getName();
}

public static main( String[] args ){


Aluno objetoAluno = new Aluno();
Professor objetoProfessor = new Professor();

printInfo( objetoAluno );
printInfo( objetoProfessor);
}

1/10/13 Tcnicas de Programao Avanada 51


Orientao a Objetos
Modicadores de Acesso

Determinam se atributos e mtodos podero ser


acessados por outras classes.

public (pblico)

private (privado)

protected (protegido)

modicador no explcito (package-private)

1/10/13 Tcnicas de Programao Avanada 52


Orientao a Objetos
Modicadores de Acesso

Uma classe pode ser:



public
acessada por qualquer outra classe

nenhum modicador (package-private)


acessada somente dentro do seu pacote

1/10/13 Tcnicas de Programao Avanada 53


Orientao a Objetos
Modicadores de Acesso

Atributos e Mtodos podem ser:



public
acessados por qualquer outra classe.
nenhum modicador (package-private)
acessados somente dentro do seu pacote.
private
acessados somente dentro de suas prprias classes.
protected
acessados somente dentro do seus pacotes e por suas subclasses.

1/10/13 Tcnicas de Programao Avanada 54

Potrebbero piacerti anche