Duvida relativa a Herança, abstraçao

3 respostas
S

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 ^^,

3 Respostas

gpellizzoni

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
    }
}
williamdasflores

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.

S
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

Criado 4 de agosto de 2011
Ultima resposta 4 de ago. de 2011
Respostas 3
Participantes 3