GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Duvida relativa a Herança, abstraçao


#1

Bom dia,
Tenho uma classe usuario, e uma subclasse cliente,

Na classe usuario, com a qual preciso somente efetuar cadastro e alterar, da mesma forma que na cliente também possui metodos cadastro e alterar com suas peculiaridades,
penso da seguinte maneira, se cliente herda de usuario, logo cliente tem acesso aos metodos de usuario,
porem nao é bem o que esta acontecendo...
Como nao preciso de instanciar a classe usuario para referenciar seus metodos visto que cliente os acessa, a defini como abstrata,
para tanto, executava e funcionava , nao corretamente, mas sem erros tanto do codigo quando da SQL, então li mais um pouco, e descrubri que para um metodo estar sempre disponivel independente da intancia tem de estar declarado como static , então coloquei static no metodo, e..., erro, e nao sei mais como fazer, sim me falta conhecimento de o.o, mas estou lendo muito a respeito, entretanto ainda está um pouco vago este conceito.

é isso ai quem puder me ajudar a organizar esses conceitos, fico muito agradecido ^^,


#2

Você está extendendo a classe Usuario? Veja:

abstract class Usuario {
    abstract void cadastrar();
    abstract void alterar();
}

class Cliente extends Usuario { // Herança
    @Override // Anotação que indica sobrescrita. Não é obrigatória, mas constitui boa prática.
    void cadastrar() {
        // Implementação
    }
    @Override
    void alterar() {
        // Implementação
    }
}

#3

Cara, posta seu código aí. Acho que fica mais fácil agente localizar possivel erros ou te aconselhar.
Mas isso que o nosso amigo disse acima, se encaixa bem com que você descreveu.


#4

abstract class Usuario {
		private $idUsuario;
		private $nome;
		private $cpf;
		private $email;
		private $senha;
                public static function cadastrarUsuario(){
			$conexao = conexaoBanco();
			$sql = "INSERT INTO Usuario (nome, cpf, email, senha, Cidade_idCidade)
					VALUES ('$this->nome','$this->cpf','$this->email','$this->senha', 1)";					
			mysql_query($sql,$conexao);// or die mysql_error() ;
			mysql_close($conexao);
		}
                 //... getters setters
                public static function setNome ($nome){
			$this->nome = $nome;
		}
		public static function setCPF ($cpf){
			$this->cpf = $cpf;
		}
		public static function setEmail ($email){
			$this->email = $email;
		}
		public static function setSenha ($senha){
			$this->senha = $senha;
		}
}
//sub classe
class Cliente extends Usuario{
		private $sexo;
		private $endereco;
		private $cep;
		private $dataNascimento;
		private $cidade;
		private $estado;
		private $ultimaCompra;
		public function Cliente (){
			$conexao = conexaoBanco();	
                        $sql = "SELECT i.nome, i.cpf, i.email, i.senha, u.sexo, u.endereco, u.cep, u.dataNascimento, c.nome, e.nome
					FROM ((	Cliente u INNER JOIN Cidade c ON u.usuario_idusuario = c.idCidade)
					INNER JOIN Estado e ON u.usuario_idusuario = e.idEstado	)
					INNER JOIN Usuario i ON u.usuario_idUsuario = i.idUsuario
					WHERE u.usuario_idUsuario = ".$_SESSION[id];
			if(mysql_query($sql,$conexao)){
				$valor = mysql_fetch_array($retorno);
				$this->setIdCliente ();
				$this->setSexo ($valor[sexo]);
				$this->setEndereco ($valor[endereco]);
				$this->setCEP ($valor[cep]);
				$this->setDataNascimento ($valor[dataNascimento]);
				$this->setCidade ($valor[cidade]);
				$this->setEstado ($valor[estado]);
				$this->setNome($valor[nome]);
				$this->setCPF($valor[cpf]);
				$this->setEmail($valor[email]);
				$this->setSenha($valor[senha]);
                                mysql_close($conexao);
                          }else{
                                $this->setSexo (null);
				$this->setEndereco (null);
				$this->setCEP (null);
				$this->setDataNascimento (null);
				$this->setCidade (null);
				$this->setEstado (null);
                          }
           }
            public function cadastrarUsuario (){
			$conexao = conexaoBanco();			
			$sql = "INSERT INTO Cliente (usuario_idUsuario, sexo, endereco, CEP, dataNascimento) 
					VALUES ($this->idCliente,'$this->sexo','$this->endereco',$this->cep,'$this->dataNascimento')";
			mysql_query($sql,$conexao);
			mysql_close($conexao);
		}
           //autenticação 
          // getters ... setters que não são static

É basicamente isso, o detalhe é que está em php5,
vou fazer como gpellizzoni disse =D


#5