Gente, li bastante sobre Orientação a Objetos mas ainda ficam algumas pequenas dúvidas, gostaria da ajuda de vcs para ter certeza sobre oq eu li. Abaixo tem um classe bem idiota q e fiz sobre calculadora e as dúvidas estão comentadas no arquivo:
// Class Calc// Em POO aqui seria o inicio do objeto Calc certo ??publicclassCalc{// Aqui em POO esses metodos seriam as ações q esse objeto (calc) produzem certo ??publicstaticintSoma(intvalor1,intvalor2){returnvalor1+valor2;}publicstaticintSubtracao(intvalor1,intvalor2){returnvalor1-valor2;}publicstaticintMultiplicacao(intvalor1,intvalor2){returnvalor1*valor2;}publicstaticintDivisao(intvalor1,intvalor2){returnvalor1/valor2;}publicstaticintResto_Divisao(intvalor1,intvalor2){returnvalor1%valor2;}}
A grosso modo, a declaração da classe não seria o início do objeto Calc, e sim o seu construtor (que no caso está implícito).
Esses métodos não seriam do objeto e sim da classe, ou seja, mesmo não tendo um objeto Calc você conseguiria chamá-los devido ao modificador [color=brown]static[/color].
wesleysanches
Só para tentar entender.
O CALC ainda não é um objeto. até q eu resolva utilizar ele certo ? Ficando assim:
CalcCalculadora=newCalc();
Ai depois q criei o objeto (Calculadora) eu uso uma ação q ela me produz podendo ser soma, subtração e etc… certo ??
System.out.println(Calculadora.Soma(5,5));
Ai sim, eu criei o objeto Calculadora e usei uma ação q esse Objeto calculadora produz q é a ação de somar dois números e devolver o total certo ??
B
bKn
Quase. Do jeito que está, você não precisa criar o objeto, só precisa fazer
System.out.println(Calc.Soma(5,5));
que vai funcionar. Como eu disse, isso ocorre por causa do modifcador static. Remova-o e verá que só será possível chamar os métodos de Calc instanciando um objeto, do jeito que você fez.
fantomas
wesleysanches
Ao contrario que muitos pensam o estudo da OO não envolve código em um primeiro e longo momento e pela sua pergunta da para notar (na boa) que há a necessidade de uma revisão neste setor.
Em POO aqui seria o inicio do objeto Calc certo?
Aqui seria o inicio da CLASSE que DESCREVE o(s) OBJETO(s). Aconselho a pesquisar sobre a diferença entre classes e objetos e refletir sobre o assunto.
Aqui em POO esses metodos seriam as ações q esse objeto (calc) produzem certo ??
A principio é isto mesmo mas lembrando que ações em OO normalmente são chamadas de OPERAÇÕES e não métodos. Em OO os METODOS são utilizados na implementação das OPERAÇÕES, outra caracteristica é que eles (os metodos) são sempre PRIVADOS e as operações são PUBLICAS.
Espero ter ajudado.
flws
J-Chist
Isso mesmo. Calc é uma classe e a partir dela você cria objetos, usando o construtor (que é o método com o mesmo nome da classe). A grosso modo a classe define qual vai ser o “tipo” do seu objeto (também chamado de instância).
Dica: declare seus objetos e métodos no padrão Java (esqueci como se chama), mas é algo como nomeObjeto e nomeMétodo. Somente nome de classes devem iniciar com letra maiúscula.
Seu objeto tem estado (as variáveis) e comportamento (os métodos) que são definidos pela classe a que ele pertence. Como o amigo no outro post explicou você declarou seus métodos como static então, você não precisa criar um objeto para usá-los. Vocë poderia fazer assim:
intvalorSoma=Calc.soma(1,1);
Boa sorte nos seus estudos e coloque suas dúvidas aí. Nunca pense que são dúvidas idiotas porque realmente é muito difícil entender a OO.
wesleysanches
Fico até meio assim de fazer pergunats sobre POO q parece ser perguntas bem idiotas. rsrs
É … na verdade quando citei q o class Calc era o inicio do objeto eu meio q me enganei, na verdade objeto seria a partir do momento q eu crio ele certo ??
Quanto aos metodos statics realmente não sabia.
Os mesmos teriam q ser privates ??
fantomas
Concordo!
Não paro de fazer revisões rsrsrsrs, o forum é ótimo nesta hora vem sempre alguem com uma pergunta pra fazer a gente executar um “refresh” na nossa cuca.
flws
B
bKn
wesleysanches:
Fico até meio assim de fazer pergunats sobre POO q parece ser perguntas bem idiotas. rsrs
É … na verdade quando citei q o class Calc era o inicio do objeto eu meio q me enganei, na verdade objeto seria a partir do momento q eu crio ele certo ??
Quanto aos metodos statics realmente não sabia.
Os mesmos teriam q ser privates ??
Se eles forem private você não conseguirá acessá-los de fora da classe Calc, portanto devem ser públicos.
wesleysanches
PERFEITO PESSOAL !!
Então somente recapitulando agora com os comentários corretos: rsrs
// Inicio da class Calc. "SOMENTE SERIA OBJETO A PARTIR DO MOMENTO Q EU CRIO UMA INSTANCIA DESSE"publicclassCalc{// Aqui em POO esses metodos seriam as operações q esse objeto (calc) produzem certo ??publicintSoma(intvalor1,intvalor2){returnvalor1+valor2;}publicintSubtracao(intvalor1,intvalor2){returnvalor1-valor2;}publicintMultiplicacao(intvalor1,intvalor2){returnvalor1*valor2;}publicintDivisao(intvalor1,intvalor2){returnvalor1/valor2;}publicintResto_Divisao(intvalor1,intvalor2){returnvalor1%valor2;}}
B
bKn
Utilize o lowerCamelCase para nomear métodos e atributos, e o UpperCamelCase para nomear classes.
fantomas
O está meio fora são os nomes, por exemplo Soma, segundo a regra indicada pela Sun deveria ser soma a primeira letra deveria ser minuscula.
Resumindo de forma rápida a regra para nomenclatura de classes e métodos.
Classe começa sempre com Maiúscula;
Método começa sempre com Minúscula;
Para nomes de métodos e classes compostos, a primeira palavra segue a regra de nomenclatura e as outras palavras sempre começam com Maiúscula;
Jairo_Junior1
wesleysanches:
PERFEITO PESSOAL !!
Então somente recapitulando agora com os comentários corretos: rsrs
// Inicio da class Calc. "SOMENTE SERIA OBJETO A PARTIR DO MOMENTO Q EU CRIO UMA INSTANCIA DESSE"publicclassCalc{// Aqui em POO esses metodos seriam as operações q esse objeto (calc) produzem certo ??publicintSoma(intvalor1,intvalor2){returnvalor1+valor2;}publicintSubtracao(intvalor1,intvalor2){returnvalor1-valor2;}publicintMultiplicacao(intvalor1,intvalor2){returnvalor1*valor2;}publicintDivisao(intvalor1,intvalor2){returnvalor1/valor2;}publicintResto_Divisao(intvalor1,intvalor2){returnvalor1%valor2;}}
Nesse caso específico, os métodos deveriam ser estáticos, pois não alteram as variáveis de instância da classe (já que ela não tem nenhuma) e o construtor deveria ser privado (private Calc() {}) pois não existe necessidade de instanciar objetos dessa classe.
Agora por exemplo se você tivesse uma classe Funcionario, com as variáveis matricula e salário, seria essencial criar objetos da classe Funcionario, pois cada objeto terá informações diferentes.
Marcio_Nogueira
Aproveite para pesquisar sobre a convenção da Sun para nomes de classes, interfaces, variáveis e metodos.
ViniGodoy
java.lang.JJunior:
Nesse caso específico, os métodos deveriam ser estáticos, pois não alteram as variáveis de instância da classe (já que ela não tem nenhuma) e o construtor deveria ser privado (private Calc() {}) pois não existe necessidade de instanciar objetos dessa classe.
Agora por exemplo se você tivesse uma classe Funcionario, com as variáveis matricula e salário, seria essencial criar objetos da classe Funcionario, pois cada objeto terá informações diferentes.
Eu dificilmente tornaria os métodos estáticos. Mas realmente, esse não é o melhor exemplo possível para se estudar OO.
Entretanto, uma boa aplicação pode ser como no artigo de polimorfismo da wiki:
Jairo_Junior1
ViniGodoy:
java.lang.JJunior:
Nesse caso específico, os métodos deveriam ser estáticos, pois não alteram as variáveis de instância da classe (já que ela não tem nenhuma) e o construtor deveria ser privado (private Calc() {}) pois não existe necessidade de instanciar objetos dessa classe.
Agora por exemplo se você tivesse uma classe Funcionario, com as variáveis matricula e salário, seria essencial criar objetos da classe Funcionario, pois cada objeto terá informações diferentes.
Eu dificilmente tornaria os métodos estáticos. Mas realmente, esse não é o melhor exemplo possível para se estudar OO.
Entretanto, uma boa aplicação pode ser como no artigo de polimorfismo da wiki:
Sim, estou falando desse caso em específico, embora não seja uma boa prática, só estava tentando mostrar novos conceitos. Seria melhor que ele pegasse um exemplo de um objeto que realmente fizesse sentido ser instanciado que possuisse variáveis de instância, getters and setters e etc, para conhecer os fundamentos básicos de classe, objeto, métodos.
J-Chist
Abres aspas: métodos devem ser públicos somente se você deseja acessá-los de qualquer outra classe (nem sempre a intenção é essa). Dê uma olhada em modificadores de acesso.