Orientação Objeto - Não Consigo entender

Opaaa
começei um curso de java faz pouco tempo, sou novo e oque esta me deixando fora de serio é orientação objeto, não consigo entender…
quando eu pego um codigo para ver eu consigo entender, mas me deram um problema para fazer com orientação ao objeto e eu nem sei por onde começa, baixei a apostila do site da caellun, tentei fazer um exercicio e continuo sem entender orientação ao objeto =/ um exemplo de exercicio qe eu nem sei por onde começaa…

1- Modele um funcionário. Ele deve ter o nome do funcionário, o departamento onde trabalha, seu salário
(double), a data de entrada no banco (String), seu RG (String) e um valor booleano que indique se o
funcionário ainda está ativa na empresa no momento ou se já foi mandado embora.
Você deve criar alguns métodos de acordo com sua necessidade. Além deles, crie um método bonifica que
aumenta o salario do funcionário de acordo com o parâmetro passado como argumento. Crie, também, um
método demite, que não recebe parâmetro algum, só modifica o valor booleano indicando que o funcionário
não trabalha mais aqui.
A idéia aqui é apenas modelar, isto é, só identifique que informações são importantes e o que um funcionário
faz. Desenhe no papel tudo o que um Funcionario tem e tudo que ele faz.

alguem poderia dar uma ajudaa, ou se é normal ter dificuldade no começoo?

vlww!

Orientação a objetos no começo é um pouco complicado mesmo. Precisa dar um “estalo” na cabeça pra entender de vez :slight_smile:

Pra esse exercício em particular, o que ele quer estimular é que você entenda “Objeto” como algo que existe no mundo real e será modelado dentro do seu programa. Assim como você tem um Funcionário lá na sua empresa, uma pessoa de carne e osso, agora ele quer que você modelo um objeto Java para representar essa mesma coisa dentro do seu programa.

Pra isso, ele quer que você pense nos dados, atributos, associados a cada Funcionário. Além disso, pensar em ações que os Funcionários podem fazer (métodos). Esse exercício em particular é apenas para você pensar nessas coisas, rabiscar num papel mesmo. Depois você vai programar isso em Java…

então é normal ficar perdido no começo, pq na teoria eu consigo entender um objeto, classe…
mas quando vo tentar jogar isso no java, quando vo começar a pensar na linguagem eu me perco todo e não sei por onde começaa =/

cara, isso é programação meu colega umas das áreas mais dificieis que existe, então vc vai demorar por volta de 1 ano e meio para começar a programar de verdade. E começar a entender realmente o que um objeto faz em uma aplicação. fica calmo.
Mas faça uma faculdade e que seja boa, senão sua dificuldade será maior.
Para mim as fichas começaram a cair depois de 1 ano de faculdade.

Eu estou começando agora tmb e a dificuldade pra entender no começo é grande mesmo, mas com a prática vai ficando bem mais claro o conceito, não se procupe! :smiley:

fico mais aliviado que não sou só eu qe estou com dificuldade de entender, na apostila da caellun ate a pagina 40 eu entendi tudo, quando começou a falar de objeto, ferrou =/

Orientação a objetos é um conceito, muitas vezes bastante abstrato. Até mesmo programadores experientes não dominam totalmente. Posso indicar para você um excelente livro: o Use a cabeça java. Com ele você vai aprender realmente o conceito de OO.
Mas eu te digo, você vai ter que estudar muito. OO é muito mais do que criar objetos. Independente se você faz faculdade ou não, dedicando-se você consegue.

Estou no primeiro semestre de ciencia da computação, a dificuldade de comprar livros é o preço, esse mesmo que vc me passou esta quase 130 reais, mas vo dar eu estou estudando sim e MUITO, mas o principal como vc disse é ter o conceito, isso qe esta faltando =/
o professor do curso recomendou um livro…
Programação Orientada a Objetos Com Java — JavaDavid J. Barnes / Michael Kolling

é bom esse tambem?

Cara, não faço faculdade mas tenho um bom conhecimento de orientação a objetos.

Antes de ensinar Java, eu geralmente ensino como ver a vida, então imagine cada objeto ao seu redor como se ele derivasse de um objeto mais primitivo.
Eu começo sempre com Abstração e Concretização, então vamos lá ao primeiro passo:

Vou dar um exemplo bem simples:

Humano é uma classe abstrata, que define quais os atributos dos humanos e seus métodos de estudo, trabalho, ações
variáveis:
altura, peso, sexo…
métodos
pensar, mover, falar, tocar…

Claudinha é uma classe concreta que estende a classe Humano
além dela ter todos os atributos da classe Humano, ela tem algumas especialidades, como
beleza, carisma
e os métodos
dançar, chorar, ligar pro namorado toda semana

Analisando a classe Humano mais profundamente, iremos perceber que ela estende outras classes que estendem outras classes, por exemplo

Humano extends Primata
que extends Mamifero
que extends Animal
que extends Cordado
que extends SerVivo
que extends Criatura
que extends Organismo
que extends AglomeradoCelular
que extends AglomeradoMolecular
que extends Molecula
que extends Atomo
que extends Objeto

há alguns métodos em comum a todos esses objetos:
hashCode() código único em execução
getClass() classe em si
toString() transforma em texto
clone() faz uma cópia
finalize() finaliza a execução
notify() efetua notificações
wait() relacionado a execução

Você também pode definir métodos comuns desde o primeiro objeto

Agora a questão é, como trazer a classe para a realidade?
Constructors
os construtores são implícitos ou explícitos
implícitos são bem simples, não há construtor definido por você, apenas o construtor implícito da classe
os explícitos são aqueles que você define diretamente na classe

Entenda que o construtor cria uma instância da classe na memória do seu computador quando ela é chamada

Tudo é muito simples quando você tem uma mente aberta para enxergar a realidade.

Entenda que o Java nasceu assim, a galerinha tava tomando café na ilha de Java, e viram a vida ao seu redor, tentando procurar abstrações e concretizações, e heranças entre os objetos.

Antes de se debruçar em um livro, tente praticar no mundo real a herança e a abstração… veja quais são os objetos abstratos ao seu redor, e quais os concretos e quais as relações entre eles.

Agora, nesse momento, o site do guj é um objeto concreto do tipo Comunidade. Comunidade é um objeto abstrato ou um tipo de objeto.

É possível que você tenha visto algumas informações em stack traces dizendo que o tipo não é válido… entenda tipo como o seu tipo de objeto.

Todo objeto tem um tipo, seja ele concreto ou abstrato.
Amor, por exemplo, é um objeto do tipo sentimento;
Doravan é um objeto do tipo humano;
humano é um objeto abstrato do tipo humano;

Simples não?

na teoria ate que é meio simples, o problema é quando chega na pratica, ai as coisas confundem tudo, objeto, classe, comportamento,estado, atributos…

Se quiser te dou umas aulas práticas, mas só uso skype, nada de msn por favor.

Atributos de uma classe são basicamente os Fields, ou variáveis do topo.
Métodos em si são as tarefas executadas pela classe.
Características dos métodos:

  1. Podem retornar objetos - sempre dão return Object;
  2. Podem executar tarefas e retornar objetos - sempre dão return Object;
  3. Podem executar tarefas somente - não dão return Object;
  4. Podem receber parâmetros ou meramente podem trabalhar com os fields;
  5. Podem fazer tratamentos de genéricos (não falo de remédios);

o corpo de um field em geral é assim:

private Long codigo;

Perceba que se parece com a forma de tratamento dos métodos, a diferença é que os métodos sempre irão conter parêntesis

private Long calculacodigo(){ return valor; }

private void executaalgo(){ }

Eu utilizei a keywork private, porém tenha atenção, variáveis e métodos podem ser privados, protegidos ou públicos.
privados: só a classe usa
protected: sub-classes e classes do mesmo pacote usam
públicos: qualquer classe pode usar, desde que importada a classe container

shenn

Bom, oque me fez entender mais facilmente Objeto foi ter aprendido ponteiros em C…
Como já entendo o básico de C e estou tendo ponteiros na facul não achei tão punk a idéia de objetos (tb estou vendo por conta pela apostila da Caelum).
Se você tiver um conhecimento básico de C acho que compensa dar uma olhada em ponteiros (olhada, ñ precisa aprender).
Porque fala basicamente a mesma coisa sobre referência, apontar para um local na memória etc…
Estou no comecinho da apostila também (nem pg 60 ainda)… E pra mim acho que foi basicamente isso que me ajudou a entender!
Não sei se o pessoal concorda mais pra mim a receita foi essa. :wink:

Boa sorte e bons estudos.
Abraço!

doravan
cara, se você puder eu agradeço, thales.bm2

vo dar uma olhada em ponteiro em C

vlww!

esse site é bom: www.tiexpert.net

Assim, orientação a objetos é totalmente diferente de pointers.
Orientação a objetos é mais filosófico do que prático.

hahahaha carambaa! estava lendo esse topico que criei a cerca de 1 ano, e como as coisas mudam…

Agora estou com um conceito bem melhor de OO, apesar que falta muito aindaa…

Agora o meu problema é spring, hibernate…

Estou começando a aprender a programar para Android…

como será que eu irei estar daqui 1 ano!? hahahaha

Achei o que eu não encontrava…

ESTOU com a mesma dúvida do amigo shenn

e ja se passou 1 ano será que ele ja se deu bem com Orientação Objeto ???

Minha cabeça da um nó quando eu penso em classe, métodos e herança

criar um arquivo.class
e um arquivotest.class e ficar fazendo e um e puxar um la do outro ainda me confunde todo…

Se alguem desde topico ainda estiver no forum me ajuda ae =D

Estou disposto a compra livros e me trancar pra estudar e quem quiser me ajudar sera mt bem vindo…

obs… eu nao faço faculdade. estou aprendendo online sozinho.

khemrajunior

Manda seu email que eu te mando uns livros e te ajudo e talz…

[quote=shenn]hahahaha carambaa! estava lendo esse topico que criei a cerca de 1 ano, e como as coisas mudam…

Agora estou com um conceito bem melhor de OO, apesar que falta muito aindaa…

Agora o meu problema é spring, hibernate…

Estou começando a aprender a programar para Android…

como será que eu irei estar daqui 1 ano!? hahahaha[/quote]

eu tbm queria saber essa resposta depois de quase 2 anos?