Jump to content

Herança


AJBM

Recommended Posts

Boas!

Eu tenho uma classe Pessoa

class Pessoa {

protected $codigo;
private $nome;
private $morada;
private $dataNascimento;


function __construct($codigo, $nome, $morada, $dataNascimento) {
	$this->setCodigo($codigo);
	$this->setNome($nome);
	$this->setMorada($morada);
	$this->setDataNascimento($dataNascimento);
}

public function getCodigo() {
	return $this->codigo;
}
public function setCodigo($codigo) {
	$this->codigo = $codigo;
}
public function getNome() {
	return $this->nome;
}
public function setNome($nome) {
	$this->nome = $nome;
}
public function getMorada() {
	return $this->morada;
}
public function setMorada($morada) {
	$this->morada = $morada;
}
public function getDataNascimento() {
	return $this->dataNascimento;
}
public function setDataNascimento($dataNascimento) {
	$this->dataNascimento = $dataNascimento;
}
public function __toString() {


	return "Nome: ".$this->getNome()." Morada: ".$this->getMorada();

}

}

e uma classe aluno

class Aluno extends Pessoa {


function __construct($codigo, $nome, $morada, $dataNascimento) {

	parent::__construct($codigo, $nome, $morada,$dataNascimento);

}


public function setCodigo($codigo) {
   if(strlen($codigo)==7)
	 $this->codigo=$codigo;

}


}

Eu tenho que fazer uma restrição ao tamanho do código do aluno, eu só consigo fazer essa restrição se a variável código em pessoa for protected,mas no meu exercício diz que todas as variáveis tem de ser privadas. Alguém me pode ajudar

Link to comment
Share on other sites

A classe Aluno tem de herdar todos os métodos da classe Pessoa? Podias fazer assim :

class Pessoa
{
public function _setCodigo($codigo)
{
 if(strlen($codigo)==7)
 {
  $this->codigo = $codigo;
 }
}
}
class Aluno extends Pessoa
{
public function setCodigo($codigo)
{
return $this->_setCodigo($codigo);			
}
}

Outra pergunta : se o código é do aluno, porque é que o mesmo é declarado dentro da classe Pessoa?

Edited by yoda
Link to comment
Share on other sites

Acho que podes classificar a classe Aluno como um driver da classe Pessoa, pois vai precisar herdar os mesmos métodos da pessoa mas por se tratar de um aluno precisa controlar o output desses métodos.

O que sugeri foi renomear as funções da classe Pessoa de forma a poder mascarar publicamente (quando instancias a classe) que estás a usar métodos da classe pai. É um método usado por exemplo por classes de acesso à base de dados que necessitem de um interface generalista e opção para vários drivers (mysql, postgree, etc). Foi a primeira coisa que me ocorreu, pode ser que haja outra alternativa.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.