Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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!

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:

 

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por 4Unknow
      Bom dia comunidade Imasters.

      Venho aqui tratar de um problema dúvida que estou tendo com um layout que estou tentando usar o formulário php dele.
      Quando clico em enviar ele me enviar para um arquivo .php  (assets/vendor/simple-forms/sendmail.php)

      Ele não envia o e-mail, acredito que deveria aparecer uma mensagem que o contato foi enviado corretamente.
      Vou deixar os arquivos aqui em anexo quem puder me ajudar nessa, ficaria muito grato.
       
      Link Website (wetransfer.com)
    • Por Hacker_Buiu
      Tem que completar o perfil para curtir e ser curtido sem dar erro?
    • Por Hacker_Buiu
      Porque não ganho reputação com o meu bom trabalho?
    • Por Flaviaac
      Boa tarde pessoal,
      gostaria de pedir uma ajuda para criar um evento em um formulário HTML.
       

      Eu tenho um formulário em HTML e PHP,  e nele tem um campo do tipo select e um campo do tipo text(desabilitado).
      Gostaria que ao clicar no campo select e escolher qualquer opção da lista, automaticamente em seguida aparecesse dentro do campo text um valor respectivo a opção escolhida anteriormente.
       
      Exemplo:
      Tenho um campo select com tipos diferentes de materiais (vidro, papel, alumínio, etc.) e no campo text(desabilitado) terei a quantidade de anos que cada material demora a se decompor na natureza. O campo text inicialmente estará vazio, mas quando selecionar o material, aparecerá dentro deste text a quantidade de anos.
       
      obs.: Os valores do campo select e do campo text estão ambos na mesma tabela do banco de dados(MySQL), o campo select com valores string e o campo text com valores inteiros.
       
      Não sei se consegui explicar direito, mas acredito que terei que utilizar javascript para este evento, mas ainda não sei como.
      Alguém tem ideia de como eu poderia fazer isso ou alguma dica?
       
       
      Muito obrigada!!

       
    • Por janir.matheus
      Bom dia,
       
      Preciso de ajuda ajuda para resolver o problema de SIGSEGV, basicamente tennho um zconection dentro de uma classe e recebo erro quando tento acessá-lo. Segue um trecho da classe:
      unit unt_classconexao; {$mode objfpc}{$H+} interface uses Classes, SysUtils, ZConnection, ZDataset; type { tConexao } tConexao = class private public vConector : TZConnection; function Listar_Usuarios:TZReadOnlyQuery; procedure Conectar_Banco; end; implementation { tConexao } function tConexao.Listar_Usuarios: TZReadOnlyQuery; var zrquery : TZReadOnlyQuery; begin Conectar_Banco; try zrquery := TZReadOnlyQuery.Create(nil); zrquery.Connection := vConector; zrquery.SQL.Clear; zrquery.SQL.Text := 'SELECT * from tbl_profissionais'; zrquery.Open; Listar_Usuarios := zrquery; finally end; end; procedure tConexao.Conectar_Banco; begin //vConector := TZConnection.Create(nil); vConector.HostName := 'localhost'; vConector.Port := 3306; vConector.Database := 'Caps'; vConector.Protocol := 'mysql-5'; vConector.User := 'root'; vConector.Password := ''; vConector.Connected := true; end; end. Após isso tento fazer uso dessa classe para popular um DBGrid:
      unit unt_frmprincipal; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DB, Forms, Controls, Graphics, Dialogs, Menus, DBGrids, ZConnection, unt_classconexao; type { Tfrm_principal } Tfrm_principal = class(TForm) DataSource1: TDataSource; DBGrid1: TDBGrid; MainMenu_frmPrincipal: TMainMenu; MenuItem_AplicativoSair: TMenuItem; N1: TMenuItem; MenuItem_AplicativoLogin: TMenuItem; MenuItem_Aplicativo: TMenuItem; procedure MenuItem_AplicativoLoginClick(Sender: TObject); private public vConexao : tConexao; end; var frm_principal: Tfrm_principal; implementation {$R *.lfm} { Tfrm_principal } procedure Tfrm_principal.MenuItem_AplicativoLoginClick(Sender: TObject); begin //vConexao := tConexao.Create; DataSource1.DataSet := vConexao.Listar_Usuarios; end; end. A mensagem de erro que recebo dá a entender que o problema ocorre logo que o zconnection começa a ser configurado, como vocês podem ver pelos trechos comentados eu tentei instanciar o componente também sem sucesso. Não tenho experiencia com POO e tenho certeza que estou cometendo um erro bobo, então peço uma explicação sobre como resolver isso. Agradeço de antemão a quem puder me ajudar.
       
      PS. Estou usando o Lazarus.
×

Informação importante

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