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 unset
      Olá, uma dúvida tenho uma classe que faz upload de imagens e cadastra no banco, como eu faço para executar uma outra classe ação função etc somente apos verificar que todo o upload dos arquivos foi realizado com sucesso?
    • By Pedro_silva
      olá Devs Estou tendo uma dificuldade na hora de formatar uma pagina html convertendo ela para pdf usando o dompdf que é uma biblioteca do php, segue em anexo o erro. A foto mostra uma tabela que foi gerada através do banco de dados mas na hora que o pdf foi gerado ao vez de aparecer outra folha com os restante dos dados ele fica dessa forma e eu não faço a minima ideia de como vou resolver isso.

    • By alibbs91
      Olá, pessoal.
      Alguém aqui já fez/deu curso no iTalk? 
      Estava pesquisando rendas extras na internet e me interessei pelo site, onde poderia ensinar português, mas nunca tinha ouvido falar desse curso, queria alguma referência.
      Só vi falando dele nesse artigo aqui onde eu peguei a dica.
      Obrigada!!
       
    • By Ted2370
      Bom, provavelmente estou cometendo algum erro bobo, mas como sou leigo, vou pedir a ajuda de vocês ^^
       
      A ideia é que a função somar() tenha que ir somando o input adicionado já com o antigo, mas ele fica adicionando  e não somando :( alguém poderia apontar o erro?
      Já tentei usar o parseFloat e o parseInt, mas acho que não consegui usar de forma correta, talvez seja essa a falha
       
      HTML
      <!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <div> <!--Input dos Numeros--> <input type="number" name="" id="input"> <!--Botão para Soma--> <input type="button" value="OK" onclick="somar()"> <br> <br> <!--Resultado--> <input type="number" name="" id="resultado" readonly='true'> </div> <script src="main.js"></script> </body> </html> JS
      const { app, BrowserWindow } = require('electron') function createWindow () { // Cria uma janela de navegação. let win = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true } }) // e carregar o index.html do aplicativo. win.loadFile('index.html') } // Função do botao para ir somando a cada numero que colocado no input function somar(){ let input = window.document.getElementById('input').value let resultado = window.document.getElementById('resultado') resultado = resultado.value += input } app.on('ready', createWindow)  
    • By guilherme_soi
      Ao acessar o meu aplicativo recebo a seguinte mensagem: 'the dbname and launch parameters must be specified on first run' como resolver?
       
      Ao acessar o meu aplicativo recebo a seguinte mensagem: 'the dbname and launch parameters must be specified on first run' como resolver? Existe algo que possa ser feito?
×

Important Information

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