Ir para conteúdo
George Feitosa Jr

Qual lógica de raciocínio eu devo ter para criar novos atributos na minha classe?

Recommended Posts

Oi galera blz? Então, decidi aprender POO no php e estou até entendendo como funciona, mas meu grande problema é na hora de pensar em criar alguma coisa e saber quais atributos eu devo botar logo de inicio...

Estou pensando em fazer os métodos e quando precisar usar tal atributo, eu crio na hora, mas acredito que esse é o jeito errado de pensar. Enfim alguém pode me mostrar uma luz sobre como eu devo pensar na hora de iniciar uma classe, tipo por etapas. T+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite George, para descobrir quais atributos deve colocar na classe vai depender da aplicação que estiver fazendo para essas classe, um exemplo seria uma classe para conexão com banco de dados precisando do nome do banco, porta, usuário e senha.

outro exemplo seria a classe Veiculo, onde os atributos serias as caraterísticas do carro por exemplo cor,modelo,marca etc sempre pegar as características do mesmo e os métodos seria as ações do veículo por exemplo andar.

 

Espero ter ajudado!

  • +1 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hmm boa noite! acho que entendi, por exemplo se eu quisesse criar um jogo de damas hipoteticamente, então eu devo atribuir valores como peças e jogadores certo? Nos métodos devo adicionar ações, como por exemplo criar a vez do jogador, regras e transformar em dama. Seria mais ou menos isso? To um pouco quanto perdido sobre o assunto, mas acho que estou começando a entender sobre como defino os atributos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma coisa que eu não consigo compreender é imaginar o "cenário", por exemplo... Eu entendo nas vídeo aulas quando ensinam sobre a classe pessoa que tem características como nome, idade, aniversário, etc... e suas ações como andar, falar, sentar, mas não consigo passar essa ideia para criação por exemplo de um sistema, como por exemplo criar uma classe que você pudesse ver vídeos e ler sobre a sinopse e o titulo do vídeo.

 

Eu tentei imaginar da seguinte maneira, por favor me corrijam se eu estiver indo pelo caminho errado.

1.Criar uma classe chamada Video

2.Os atributos eu pensei da seguinte maneira: "O que eu quero que apareça na tela do usuário".

3.Então criei atributos como, titulo, linkVideo, sinopse.

4.Os métodos eu pensei desse jeito: "Como eu vou fazer para aparecer na tela do usuário".

5.Então criei os métodos verVideo, mostraSinopse, mostraTitulo e criei os setters destes metodos.

 

O que eu queria saber é se essa lógica que estou seguindo está certo ou estou totalmente indo pelo caminho errado. Me respondam por favor!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cuidado com os Youtubers que de tudo entende e nada compreende!

Programação orientada a Objetos não é sair criando classes e atributos e, estendendo de classes concretas "PAI", alguns comportamentos genéricos.

 

Imagine centenas ou milhares de programadores produzindo código para
um único software sem padronização? Seria o caos! É para isso que existe padrões!

 

Citar

A quantia de tempo gasto lendo código versus escrevendo é bem mais de 10
para 1. Então, fazer o código mais fácil de ler, o torna mais fácil de escrever.”
– Robert C. Martin

 

Sendo assim , uma Classe Concreta chamada Video, pode ser simplesmente substituída por uma interface vazia.
 

VideoInterface {

}

A partir desta interface abstrair métodos "comportamentos" de outras classes, ao invés ficar estendendo de classes concretas, oque deixa teu código com forte acoplamento e, de difícil manutenibilidade.


Exemplo, deixando o simples:

class VerVideo implements VideoInterface
{
    
    public function qualquer_coisa($param) {

			...
    }
}
class MostraSinopse implements VideoInterface
{
    
    public function qualquer_coisa($param) {
        ....
    }
}
class MostraTitulo implements VideoInterface
{
    
    public function qualquer_coisa($param) {
        ....
    }
}

Desta forma não criei nenhum Getter e Setter e a aplicação ficou coesa.

 

Uso de duas formas, ou registro a interface em um contêiner para substituir a concreta fazendo a inversão de dependência "DIP", ou chamo a classe concreta diretamente, verificando se a interface foi implementada. 

 

http://php.net/manual/pt_BR/internals2.opcodes.instanceof.php

 

 

Minha dica é compre bons livros e recomendado pela comunidade de desenvolvedores. 

Exemplos de alguns livros:

 

 

Editado por Williams Duarte
  • +1 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda, ja estou bem melhor desde o dia que fiz minha duvida, consegui mudar um pouco minha visao sobre a criação das classes. pelo que estou vendo isso é basicamente pratica... estou procurando fazer sistemas que eu conseguia fazer sem ser em POO, eh bom pra melhorar o raciocinio xD. Enfim muito obrigado a todos!

@Williams Duarte - obrigado pela ilustração!! vou procurar ler os livros que você recomendou, comecei a ler uns sobre poo que tem me ajudado bastante até! VLWW

  • +1 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por LukasTrin
      Estou montando um website e gostaria de saber como faço para o usuário que acabou de deslogar ficar na mesma pagina ?
       
      por exemplo, na programação atual, ele clica em " Sair " e vai automaticamente para a index, independente de onde esteja.
      eu gostaria q ele permanecesse na mesma pagina em que estava
       
      programação q faz o mesmo deslogar...
       
      //essa é a navbar.php <li><a href="?sair=sim">Sair</a></li> // Esse é o logado.php if(isset($_GET['sair']) == "sim"){     $objUser->sairUsuario(); } //e esse é o usuarios.class.php public function sairUsuario(){ session_destroy(); header ('location: index.php '); }  
    • Por rafaelwww
      Sou novo no fórum e essa é a minha primeira postagem.
      não sei se essa é área apropriada para esse tipo de postagem, mas vamos lá eu tenho um site e queria criar uma opção no qual o usuário poderia gravar um áudio que seria salvo em um banco de
      dados, mas não tenho ideia de como fazer isso se existe uma API que faça isso . 
      Peço por gentileza se alguém pudesse me dar uma dica.
       
    • Por Jeft
      Depois de "um ano sabático", estou voltando ao desenvolvimento em PHP.
      Neste retorno, me deparei com a seguinte necessidade: 
      Através de um cadastro, gostaria de criar um link passando alguns parâmetros, tipo:
      globo.com.br
      Crio o cadastro FLAMENGO.
      Aí queria criar "automaticamente" um link flamengo.globo.com.br para acessar através do browser. Seria o equivalente a globo.com.br/noticia/busca.php?time=flamengo
      Se cadastro Vasco: vasco.globo.com.br
      Não sei nem por onde começar... Já tentei algumas coisas mas ainda não tive sucesso.
      Obrigado
    • Por Thais Hoe
      Bom dia!
      Trabalho muito pouco com o JavaScript e preciso fazer um script que:
      Pega a localização do cliente >> Faz o calculo da distância entre a localização e cada loja >> Faz o calculo de qual loja está mais próxima (em KM) >> Se a distancia da loja mais próxima for inferior a 30km = Mostra aviso com o endereço da loja mais próxima (se possível um botão pra ir pra pagina de informações, ou um popup que consiga colocar endereço,telefone,etc)  >> Se a distancia da loja mais próxima for superior a 30km = exibe aviso de que não tem lojas próximas a localização atual dele.
       
      Fiz com "alert" os avisos, mas se eu conseguisse fazer tudo isso com um popup seria legal. Por hora coloquei duas lojas apenas, mas posteriormente vou ter que colocar mais de 10, então se houver um jeito de fazer esse código ser mais "limpo" quando isso acontecer (criando uma lista ou algo do gênero) também agradeço.
       
      Tenho um código mais ou menos pronto, mas como não domino a linguagem acredito que contém alguns erros:
      // Lojas var Americana = { posicao : { latitude1 : -22.742685, longitude1 : -47.341661 } } var BeloHorizonte = { posicao : { latitude2 : -19.935678, longitude2 : -43.970808 } } var Parametro = { distanciaMaxima : 30, // Funcao que ira verificar se o cliente esta por perto mostraLoja : function( posicao ){ var distancia = MenorDistancia; // Verifica se o cliente nao esta muito longe if( distancia <= this.distanciaMaxima ){ if ( confirm( 'A loja mais próxima está à ' + distancia + ' KM ' ) ){ alert( 'Ver mais dados da loja' ); } } else { alert( 'Ops, você está muito longe, não temos uma loja próxima' ); } } }; // Objeto localizacao var Localizacao = { // Inicia inicia : function(){ // Quando o browser retorna a posicao do usuario var sucesso = function( posicao ){ Parametro.mostraLoja( posicao.coords ); }; // Erro no processo de obter a posicao var erro = function( erro ){ var erroDescricao = 'Ops, '; switch( erro.code ) { case erro.PERMISSION_DENIED: erroDescricao += 'usuário não autorizou a Geolocation.'; break; case erro.POSITION_UNAVAILABLE: erroDescricao += 'localização indisponível.'; break; case erro.TIMEOUT: erroDescricao += 'tempo expirado.'; break; case erro.UNKNOWN_ERROR: erroDescricao += 'não sei o que foi, mas deu erro!'; break; } alert( erroDescricao ) }; // Verifica se o browser do usuario tem suporte a geolocation if ( navigator.geolocation ){ navigator.geolocation.getCurrentPosition( sucesso, erro ); } else { erro(); } } }; // Objeto para calcular a distancia entre dois pontos // Adaptado dessa formula http://stackoverflow.com/questions/27928/how-do-i-calculate-distance-between-two-latitude-longitude-points var Distancia1 = { distanciaEntreDoisPontos1 : function( pontoInicial, pontoFinal ){ var R = 6371; // Radio da Terra var dLat = this.graus2Radianos( pontoFinal.latitude - pontoInicial.latitude1 ); var dLon = this.graus2Radianos( pontoFinal.longitude - pontoInicial.longitude1 ); var a = Math.sin( dLat/2 ) * Math.sin( dLat/2 ) + Math.cos( this.graus2Radianos( pontoInicial.latitude1 ) ) * Math.cos( this.graus2Radianos( pontoFinal.latitude ) ) * Math.sin( dLon/2 ) * Math.sin( dLon/2 ); var c = 2 * Math.atan2( Math.sqrt( a ), Math.sqrt( 1-a ) ); var d = R * c; return d; }, graus2Radianos : function( graus ){ return graus * ( Math.PI/180 ) } }; // Objeto para calcular a distancia entre dois pontos // Adaptado dessa formula http://stackoverflow.com/questions/27928/how-do-i-calculate-distance-between-two-latitude-longitude-points var Distancia2 = { distanciaEntreDoisPontos2 : function( pontoInicial, pontoFinal ){ var R = 6371; // Radio da Terra var dLat = this.graus2Radianos( pontoFinal.latitude - pontoInicial.latitude2 ); var dLon = this.graus2Radianos( pontoFinal.longitude - pontoInicial.longitude2 ); var a = Math.sin( dLat/2 ) * Math.sin( dLat/2 ) + Math.cos( this.graus2Radianos( pontoInicial.latitude2 ) ) * Math.cos( this.graus2Radianos( pontoFinal.latitude ) ) * Math.sin( dLon/2 ) * Math.sin( dLon/2 ); var c = 2 * Math.atan2( Math.sqrt( a ), Math.sqrt( 1-a ) ); var d = R * c; return d; }, graus2Radianos : function( graus ){ return graus * ( Math.PI/180 ) } }; var MenorDistancia = Math.min (Distancia1.distanciaEntreDoisPontos1, Distancia2.distanciaEntreDoisPontos2); $( document ).ready( function(){ Localizacao.inicia(); } );  
    • Por MatheusH
      Olá, toda vez que eu respondo um comentário fica escrito: Seu conteúdo precisará ser aprovado por um moderador. 
       
      E tem uns comentários que nem foram aprovados e que acho que seria de utilidade para quem estava com dúvida.
       
      Como posso resolver isso? eu não sou um bot ahushaus
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.