OO e Java

21/07/2008

1

Ola,

estou precisando de uma ajuda para entender as declarações de um pequeno código em Java (anexo). Estou melhorando meus conhecimentos em OO, mas ainda preciso de alguma pesquisa.

Parte do meu código ficou como abaixo, mas acho que não está correto!

Agradeco se alguém puder me direcionar ao menos com as declarações de classes.

sds.;
Cristiano
Curitiba-PR

//-----------------
// Código Delphi
// -----------------
TPixelMap = class
private
FValue: boolean;
FMatrix: TArrayBoolean;
Fwidth: integer;
Fheight: integer;
public
property Value: boolean read FValue write FValue;
property Matrix: TArrayBoolean read FMatrix write FMatrix;
property width: integer read Fwidth write Fwidth;
property height: integer read Fheight write Fheight;
constructor create;
destructor destroy;
end;

TPonto = class(TPixelMap)
private
Fx: integer;
Fy: integer;
public
property x: integer read Fx write Fx;
property y: integer read Fy write Fy;
...
end;

TPointSet = class(TObjectStack)
...
end;

TPiece = class(TPixelMap)
...
end;
//---------------------------------------


// ----= inicio código java =----

import java. ....
import java. ....

public class PixelMap {
private class Point {
int x;
int y;

Point(int x, int y) {
this.x=x;
this.y=y;
}
}

private class PointSet extends Stack<Point> {
static final long serialVersionUID = 0;
public void removePoint(Point p) {
Point toRemove = null;
for (Point px : this) {
if (px.equals(p))
toRemove = px;
}
this.remove(toRemove);
}
}

public class PieceSet extends Vector<Piece> {
static final long serialVersionUID = 0;
}
private Piece bestPiece = null;


public class Piece extends PointSet {
static final long serialVersionUID = 0;
public int mostLeftPoint;
public int mostBottomPoint;

public BufferedImage render() {
for (int x=0; x<=this.mostRightPoint; x++) {
for (int y=0; y<=this.mostBottomPoint; y++) {
if (matrix[x][y]) {
...
} else {
...
}
}
}
return image;
}

private int mostLeftPoint() {
int position = Integer.MAX_VALUE;
for (Point p : this) position = Math.min(position, p.x);
return position;
}
private int mostBottomPoint() {
int position = 0;
for (Point p : this) position = Math.max(position, p.y);
return position;
}
}

//
boolean[][] matrix;
private int width;
private int height;

...

}


Responder

Posts

olá Cristiano,

a sintaxe está correta... no delphi a definição da classe é assim mesmo. Só quando precisar sobrescrever métodos precisará de algumas diretivas, que no java não são necessárias.

No mais segue alguns lembretes (talvez vc já saiba disso, mais fica ai o comentário)

property height: integer read Fheight write Fheight;


você tem a opção de substituir a leitura e escrita por metodos, caso seja necessário

property height: integer read Getheight write Setheight; 


no construtor vc também pode utilizar argumentos
como em
Point(int x, int y) { 
this.x=x; 
this.y=y; 
} 


ficaria

TPonto.Create(PontoX, PontoY: Integer);
begin
  Fx := PontoX;
  Fy := PontoY;
end;



Responder

22/07/2008

Cristiano070

Ok Fabricio,

me aprofundei um pouco e pude perceber que as declaracoes sao bem parecidas, mas fiquei com uma duvida que nao consegui exclarecer.

# Em Java existe a declaracao:
public class PieceSet extends Vector<Piece> {
static final long serialVersionUID = 0;
}

Em Delphi isso seria um Stack, Array, List ou uma Classe ?

Obrigado pelo retorno
Cristiano


Responder
Olá,

O array é meio complicado pq teria que trabalhar com array dinâmico. Eu prefiro as listas.
No delphi há vários tipos de listas: TList, TStringList, TObjectList,
TStack... a diferença entre o Stack e as Listas é que o objeto TStack é uma pilha e os demais são apenas coleções.

Eu costumo usar a classe TStringList, pois o método para adicionar objetos permite que você vincule uma identificação a este objeto, facilitando recuperá-lo da lista pela identificação.

function AddObject(const S: string; AObject: TObject): Integer;


Independente da opção escolhida, no delphi ná dá para Tipar as listas, elas retornam em geral um Pointer ou TObject, ai é necessário o Cast na hora de retirar o objeto da lista.

Espero ter ajudado


Responder