Jump to content
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+

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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!

 

Share this post


Link to post
Share on other 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:

 

 

Edited by Williams Duarte
  • +1 1

Share this post


Link to post
Share on other 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

Share this post


Link to post
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

  • Similar Content

    • By sergiosfpereira
      Boa tarde a todos,
       
      Estou estudando MVC e me deparei com a seguinte situação:

      Tenho uma View que precisa receber dados de dois Models diferentes, então no controller desta View eu tenho a função abaixo:
      public function teste($id) { $this->view->a = $this->getOneA($id); $this->loadModel('b'); $this->view->b = $this->model->getOneB($id); $this->view->render('app/teste'); } O cenário acima me retorna o esperado, pega os dados de A e de B e os deixa disponiveis para a View.
       
      Está correto utilizar esse método ?
       
      Se sim, eu deveria carregar o Model "b" no __construct do controller "a"  ou diretamente na função do controller "a" como neste exemplo?
       
      Se não, qual a melhor maneira de obter dados de diferentes Models?
       
      OBS: todos os controllers são filhos do controller principal e todos os models são filhos do model principal.
       
      E me perdoem se eu estiver falando bobagem, como disse, estou aprendendo e a finalidade aqui é didatica e agradeço a quem puder contribuir.
    • By sprUser
      Ola forum boa madrugada são 4h da manha e to muito perdido.
       
      é o seguinte quero contratar outro dominio, para outra pessoa, 
       
      qual a diferença dessas 2 opções o painel de controle fica separado em alguma, ou das 2 formas vai ser o mesmo
      painel de controle?
       
      possso limitar acesso para a pessoa somente no site q vou criar para ela, to muito confuso a hostgator está demorandio d+ para responder
      devido a pandemia.
       
      meu irmão quer fazer um site, eu tenho essa hospedagem M, posso criar um site para contratando outro dominio vão ser separados ou os 2 trabalham no mesmo painel de controle?
       
      se eu contratar outro dominio vou ter outro painel de controle e emails, ou vai funcionar tudo junto?
       

       
       
       
    • By flipmartinz13
      Estou tentando fazer esse exercício de introdução a programação em C++, e estou tendo dificuldades para criar os algoritmos. Alguém poderia me ajudar?


      Uma agência de turismo quer fazer um levantamento das praias da cidade para um programação turística de verão, sabendo-se que cada praia tem um nome e uma distância (em Km) do hotel. Criar um algoritmo que forneça os seguintes dados:
      18

       Porcentagem de turistas nas praias próprias do hotel
       A praia mais adiante
       Nome e distancia das praias não-próprias com distancia do hotel maior que 10 km.
      O algoritmo acaba quando se digita @ para nome da praia.
    • By jurandyneto
      Pessoal alguém pode me ajudar?
       
      A nota da prova final tá saindo errado
      #include <stdio.h> #include <stdlib.h> int main(void) { float primeiraNota, segundaNota, terceiraNota; float media, notaDaProvaFinal; printf("\n\t\tCalculo da Nota Final.\n\n"); primeiraNota = -1; while ((primeiraNota < 0) || (primeiraNota > 10)) { printf(" Primeira Nota.: "); scanf("%f", &primeiraNota); } segundaNota = -1; while ((segundaNota < 0) || (segundaNota > 10)) { printf(" Segunda Nota..: "); scanf("%f", &segundaNota); } terceiraNota = -1; while ((terceiraNota < 0) || (terceiraNota > 10)) { printf(" Terceira Nota.: "); scanf("%f", &terceiraNota); } media = (primeiraNota + segundaNota + terceiraNota) / 3; printf("\n\n\tMedia: %.2f\n\n", media); if (media >= 7) printf("\tAPROVADO!\n\n"); if(media >= 3 && media <= 6.9){ printf("\tREPROVADO - COM DIREITO A PROVA FINAL!\n"); notaDaProvaFinal = (media * 7) - 50 /3; printf("\tNota minima a ser tirada na prova final: %.1f\n\n", notaDaProvaFinal); } if (media < 4) printf("\tREPROVADO - SEM DIREITO A PROVA FINAL!\n\n"); system("pause"); return 0; }  
    • By danilo759
      Estou precisando saber o percentual de imagens que está no diretório e estou com dificuldades. Alguém pode me ajudar dar uma luz?

       
      $qry_canal = $con->query("SELECT * FROM grade, dados WHERE grade.id = dados.id AND grade.canal IN('HBO','GLO','TNT') GROUP BY dados.titulo"); $counter = 0; while($rows = $qry_canal->fetch(PDO::FETCH_ASSOC)){ $id = $rows['id']; $sigla = $rows['canal']; $sk = substr($rows['sk'], 0, 14); // Busca total de programas por canal /* ---------------------------------------------------------------- */ $qry_b = $con->query("SELECT * FROM grade, dados WHERE grade.id = dados.id AND grade.canal LIKE '".$sigla."' GROUP BY dados.titulo"); $total_programas = $qry_b->rowCount(); if(empty($serieskey)) { $prog_id = "$id"; } else{ $prog_id = "$sk"; } // VERIFICA SE EXISTE IMAGEM /* ---------------------------------------------------------------- */ if(file_exists("/imagens/".$prog_id."_epg.jpg")){ $arr_img[] = "".$counter++.""; } $total_fotos = "".count($arr_img).""; echo "".($total_fotos * 100 ) / $total_programas."% <br />"; }  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.