outra solução pra herança multipla?

1. outra solução pra herança multipla?

Everton da Silva
reimassupilami

(usa Slackware)

Enviado em 22/12/2005 - 14:33h

pessoal, vejam meu caso (um deles): tenho uma classe documentos, que precisa usar metodos de outras duas, historico e status... mas como nao pode herdar das duas ao mesmo tempo, a solução me parece ser inverter a coisa, ou seja, fazer as duas classes herdarem a classe documento, certo?

dae entra um porém: as classes historico e status são bem pequenas, com dois métodos cada apenas, enquanto a classe documento é enorme, entao herdariam um monte de coisa sem necessidade...

sem contar q parece estranho ter q estanciar a classe historico pra fazer uma operação da classe documento... nossa, q coisa doida...

me deem uma luz... alguma outra alternativa pra isso?


  


2. Re: outra solução pra herança multipla?

Everton da Silva
reimassupilami

(usa Slackware)

Enviado em 22/12/2005 - 14:45h

teria como criar atributos usando como tipo uma outra classe?


3. Re: outra solução pra herança multipla?

Everton da Silva
reimassupilami

(usa Slackware)

Enviado em 17/01/2006 - 16:33h

só pra registrar: uma boa solução foi utilizar agregação... assim é praticamente como se fosse herança, é possivel utilizar os metodos e atributos da outra classe...

falow...


4. herança multipla

claudio
claudioerayna

(usa Kurumin)

Enviado em 21/11/2008 - 08:27h

bem uma solução seria fazer o relacionamento entre as classes um solução seria fazer uma relaçao composta conhecida como todo/parte em que o todo sera a classe que tera o dominio real sobre as outras classes



5. Processos de analise

Gedalias Costa
gedalinux

(usa Slackware)

Enviado em 23/11/2008 - 14:10h

Meu caro,

OOP por ser um processo apenas de definicao é um pouco "doido" mesmo. Contudo deve-se parar e analisar seu processo, quando somente apos, surgirao as classes...

De posse de sua solicitacao verifico que:

1 : a classe Historico deve representar todo um histórico relacionado a um documento, portanto surgem algumas derivações no processo, que dependem principalmente do analista ou desenvolvedor, em alguns casos, uma é que, caso deseje isolar os dados em uma classe separada somente para cumprir um requisito básico de OOP (coesão) esta classe deverá receber uma referencia de um tipo Documento, daí surgiu sua dúvida sobre herança ou agregação, para o caso seria uma agregação o mais conveniente, o que uso agressivo de um sistema poderia haver uma
grande economia de recursos.
Porém percebeu também que suas classes são pequenas o suficiente para quase não ter métodos isso deixa claro que nem herança, nem agregação serão necessárias, por que de uma forma geral estas classes representam nada mais que ATRIBUTOS da classe Documento.

2: Vendo o relacionamento entre Documento e Historico, percebe-se claramente que se mantém um cardinalidade de 1:N (isto é um documento pode ter muitos registros históricos) então, se nos livrarmos das teorias e partirmos para uma linguagem final, terias a seguinte solucao
2.1: JAVA: manteria um Collection de Historico, usando ArrayList, Maps ou o que quisesse;
2.2: PHP5: Nessa linguagem somos levados a duas decisões, a primeiro totalmente baseada nos conceitos de OOP, implementamos uma classe Historico que recebe um referencia de Documento.
Lembre que mesmo assim as duas classes serão instanciadas para cumprir o requisito.
O conceito acima ficaria mais ou menos assim:


//modelo para agregacao
class Documento{
private $status ;
public function __construct(){

}

}

//Ou modelo para composicao
class Documento{
private $status ;
private $history;
public function __construct(){
//uma desvantagem desse processo é que cada
//objeto Documento, terá uma Instancia de Historico
$this->history = new Historico($this);
}

public function addHistory($history){
$this->history->addHistory($history);
}

}
//==========================================================
class Historico{
private $document;
private $history;
public function __construct(Documento $doc){
$this->document = doc;

}

public function addHistory($history){
$this->history[]=$history;
}
public function getHistory(){
foreach ($this->history as $historico){
echo $historico."\n";
}
}
}

//usando como composicao
$document = new Documento();
$document->addHistory("24-10-2008");
$document->addHistory("25-10-2008");
$document->addHistory("26-10-2008");
$document->addHistory("27-10-2008");

//ou entao usando como agregacao
$document = new Documento();
$historico = new Historico($document);
$historico->addHistory("24-10-2008");
$historico->addHistory("25-10-2008");
$historico->addHistory("26-10-2008");

A segunda decisão seria simplesmente usar um array interno a classe Documento, armazenando temporariamente o histórico do documento em um vetor de PHP, quando quisesse ler, bastaria
iterar o array.

3: O relacionamento entre Documento e Status e de 1:1 e ele se refere exclusivamente a Documento, assim desde o principio ele nada mais é que um ATRIBUTO e privado da classe Documento.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts