Adaptacao

18 respostas
N

Venho aqui devido a seriedade deste forum, talvez esta não seja a seção correta para o post mas não encontrei outro lugar.
Inicio com uma pequena história, tenho 29 anos de programação em outras linguagens. Como podem ver, não estou na “tenra” idade.
Por diversos motivos resolvi ingressar no mundo java e estou fazendo um dos cursos que foram recomendados por aqui em outros tópicos.
A questão é: além da portabilidade, não estou conseguindo enxergar vantagens do java sobre outras linguagens em que sou fluente,
tenho que frisar aqui que são linguagens procedurais.
Vejo mais trabalho e conceitos mais complexos para efetuar tarefas que antes bastante simples.
Sim, sei que existe o fator manutenção de código.
Estou prestes a desistir, isso muito me agride pois, para mim, será a primeira vez que largo algo que me parece desafiador.
Será que dentre os muitos profissionais de java aqui existentes, algum já passou por esse dilema?
Vejo pouca liberdade para o programador devido a muitos dogmas e “padrões” do java.
Alguém pode me dar uma luz? “Tentar me convercer” (se posso usar a expressão) a continuar no java?

Obrigado pela paciência e compreensão. As opiniões serão bem vindas.

Fiquem com Deus e…Paz!

18 Respostas

B

Pode dar algum exemplo do quê está achando complicado, em relação à outras linguagens? Seria problemas com a linguagem mesmo, ou com orientação a objetos? Faça uma comparação com códigos dos dois lados.

Quanto a Java como linguagem, realmente não é uma das melhores, já está bem velhinha comparada à linguagens mais novas, além de estar estagnada, há tempos que não recebemos uma atualização nela. Também é bem chato escrever montes de códigos para coisas que dá para ser mais conciso. Java como linguagem tá bem aquém do que poderia ser.

Vantagens? A primeira seria a API do Java. Super bem feita, fantástica de trabalhar com ela, tudo se encaixa muito bem, dá para encadear muita coisa junto, que funciona sem problemas. A documentação também é excelente.
Depois, ainda melhor é a plataforma Java. É a melhor máquina virtual do mercado, já tem dezenas de linguagens que podem chamar classes do Java diretamente, aproveitando todo o legado forte dele, sem falar dos milhares de frameworks no mercado, que há anos vem sido usados, com eficiência e estabilidade comprovadíssimos.

Sem falar na presença de mercado, ainda é bem forte.

J

As vantagens que posso citar como importantíssimas ao meu ver são:

  1. Gerenciamento de memória automática. Não é preciso se preocupar em “desalocar” recursos da memória, porque existe um coletor de lixo.
  2. Ótimo tratamento de exceções. Se ocorre algum problema com um dado(objetos nulos, divisão por zero, etc…), você receberá uma notificação te avisando com todo o caminho percorrido pelo problema(linha a linha), e não um “Access Violation” e um “desassembler”, mostrando código de máquina.
  3. Multiplataforma sem recompilação. O programa funciona onde existir uma máquina virtual e não é preciso recompilar.
  4. linguagem totalmente orientada a objetos. A metodologia OO simplifica o desenvolvimento e a manutenção de código. Essa metodologia pode ser perfeitamente aplicada em linguagens procedurais, mas com java é facilmente visualizada e implementada.
  5. Framework muito bem desenvolvido e documentado.

As desvantagens, como toda e qualquer ferramenta possui, na minha opinião:

  1. O toolkit gráfico da sun(Swing) é muito lerdo e não é threadsafe(ele é nativo do próprio java como plataforma). Isso quer dizer que para determinadas aplicações ele não é adequado. Mas nada que a escolha de outro toolkit nativo de plataforma não resolva(GTK ou SWT).
  2. Alto consumo de memória. Java precisa de bastante memória ram para funcionar. Mas isso impacta também em casos específicos.

Se você veio do Delphi, pode ser que esteja acostumado com a ide e os recursos dela. A linguagem do delphi também é orientada a objetos, e a melhor maneira de se aprender é escrever código pelo bloco de notas, e compila-lo em linha de comando, para ver como a linguagem funciona(sintaxe).

Um bom livro de na minha opinião, é melhor que qualquer curso.

Quanto a idade de uma linguagem não se preocupe. É como vinho, quanto mais velha melhor.

N

Agradeço as opiniões, como venho de linguagens procedurais a adaptação para OO é um pouco complicada pois continuamente tento encontrar mentalmente equivalências entre itens que estou aprendendo.
No tocante a querer e esforço, estou tentando, além do curso (Globalcode), tenho lido os livros Core Java, Usando a cabeça (Sierra), Java como programa (Deitel).
Mesmo sendo cômico, as linguagens que usei e continuo usando (podem me chamar de dinossauro), VB5, ASP3, Clipper, Javascript (tem até semelhanças mas fica apenas no “até”).
As convenções são um pouco estranhas, como ex. para que tenho que criar um getter sem qualquer tipo de consistência nele? A resposta que me foi dada: é uma convenção.
Ok ok sei que se eu proteger os atributos (variaveis?) (vai saber, existe um nó em minha mente quanto a essas definições, ora é variavel, ora atributo) preciso do getter e blablabla.
Essa coisa de “responsabilidade” de cada classe (módulo?? de novo o nó) me atrapalha.
Tarefas antes simples se tornam complicadas.
Bem… agradeço a força e, como o investimento não foi pequeno até o momento, creio que devo continuar.
Mas uma coisa eu entendi no alto de meus 50 anos, aprender algo que não se está gostando é sempre menos produtivo.
Obrigado mais uma vez e continuo aceitando opiniões.
Fiquem com Deus e…Paz!

S

olha até que eu ja tive esta duvida.
porque vejamos fazer uma aplicação em java leva quase sempre ou sempre mais tempo de desenvolvimento que usando o php, oracle forms, visual basic, asp, delphi, etc.
execpto se usarmos os famosos frameworks.

eu até hoje ainda não entendi na realidade quais são as grandes vantagens dos java ( alem de gerenciamento automatico de memoria, multiplataforma(igual a php e etc), orientada a objectos)

em Angola sempre que se precisa de um software as empresas estão apressadas e querem apenas jogar com o tempo e funcionalidade. por isso não vejo o java produtivo para um freelancer.

FrancoC

Esse seu drama poderá ser o de muitos outros programadores aqui conforme o tempo avança. Por um lado isso é muito bom para você, visto que ainda com seus 50 anos de idade ainda tem de colocar o cerébro pra malhar, e rever conceitos que se calcificaram na sua mente durante décadas em seu exercício profissional.

Isso pode, por exemplo, lhe reduzir o risco de Alzheimer. Veja o lado positivo. :slight_smile:

Uma vez que você se dispôs a se atualizar quanto a tecnologia que está bombando, com certeza o Java é uma das escolhas. Voce também poderia ter optado pelo C# da plataforma .NET. Tendo alguma experiencia em VB talvez você nao tivesse a falsa impressão de estar muito distante do seu habitat.

Essas mudanças de paradigmas na computação causam muito mal estar principalmente aos programadores. Você deve se lembrar que antes de surgir o seu VB5 e Clipper seguindo os principios da Programação Estururada, já existia muita gente trabalhando nessa área. Tecnologias como BASIC dominavam. Imagine a reação dessas pessoas ao saber que os seus GOTOs foram abolidos, tendo a sua disposição apenas três estruturas: sequência, decisão e iteração. Que deveriam criar blocos de código chamados funções e subrotinas.

Imagine o quanto nao bradejaram.

Quanto aos infames “getters” e “setters”, para melhor compreender a importância que isso possui dentro do contexto do Java recomendo que leia esta especificação: http://cds-esd.sun.com/ESD4/JSCDL/javabeans/1.01/beans.101.pdf?AuthParam=1270563397_f91e4202148c9138d5ca56336fc78113&TicketId=B%2Fw3lhiARFlJShRCOlFclQHk&GroupName=CDS&FilePath=/ESD4/JSCDL/javabeans/1.01/beans.101.pdf&File=beans.101.pdf

Fico refletindo agora como será la nos meus 50 anos também. Será que terei que aprender Scala? Hehehe. Só Deus sabe.

Citando Edsgar Dijkstra: A language that doesn’t affect the way you think about programming, is not worth knowing (Uma linguagem que não afeta a maneira que você pensa sobre programação, não vale a pena conhecer)

Não desista. Parabéns pela iniciativa.

J

napolijr:
Agradeço as opiniões, como venho de linguagens procedurais a adaptação para OO é um pouco complicada pois continuamente tento encontrar mentalmente equivalências entre itens que estou aprendendo.
No tocante a querer e esforço, estou tentando, além do curso (Globalcode), tenho lido os livros Core Java, Usando a cabeça (Sierra), Java como programa (Deitel).
Mesmo sendo cômico, as linguagens que usei e continuo usando (podem me chamar de dinossauro), VB5, ASP3, Clipper, Javascript (tem até semelhanças mas fica apenas no “até”).
As convenções são um pouco estranhas, como ex. para que tenho que criar um getter sem qualquer tipo de consistência nele? A resposta que me foi dada: é uma convenção.
Ok ok sei que se eu proteger os atributos (variaveis?) (vai saber, existe um nó em minha mente quanto a essas definições, ora é variavel, ora atributo) preciso do getter e blablabla.
Essa coisa de “responsabilidade” de cada classe (módulo?? de novo o nó) me atrapalha.
Tarefas antes simples se tornam complicadas.
Bem… agradeço a força e, como o investimento não foi pequeno até o momento, creio que devo continuar.
Mas uma coisa eu entendi no alto de meus 50 anos, aprender algo que não se está gostando é sempre menos produtivo.
Obrigado mais uma vez e continuo aceitando opiniões.
Fiquem com Deus e…Paz!

Não existe a obrigação de se criar getters ou setters. Dá para se programar proceduralmente em java. O conceito de getters e setters se refere a encapsulamento, e proteção de um código que outra pessoa poderá usar se estiver trabalhando em equipe, não uma regra a ser seguida. A OO é uma metodologia e não uma regra, se você não quiser usar, não precisa.

N

Pensei sim em C# mas a portabilidade do java me atraiu a princípio.
O link que enviou infelizmente não está funcionando mas irei pesquisar na documentação da Sun, sem problemas.
Penso que ao menos nos dispositivos móveis o java deve oferecer alguma vantagem.
Me lembro de várias mudanças em linguagens (olha a sessão nostalgia), do Fortran, Cobol e mesmo o Basic, isso era em um tempo em que eu perfurava cartões para processamentos na USP e vivia carregando “malas” metálicas contendo as fitas.
Mas mesmo essas mudanças não foram tão confusas quanto a que vejo agora. (Se bem que eram mudanças de linguagens procedurais para outra procedural não é mesmo?).
Mais uma pergunta a todos: vocês que estão mergulhados em java a tempos podem me dizer as atuais necessidades do mercado em relação a ela?
Evitando o óbvio (que sempre é bom agregar ao currículo), a certificação SCJP é vista com bons olhos no mercado de trabalho?
Faço essas indagações pelo fato de estar trabalhando em uma empresa a bastante tempo e portanto meio “fora” das necessidades que o mercado de trabalho pede.

Obrigado a todos mais uma vez.

B

Se não tem que criar, não crie. Entretanto, se você usa alguma algo que precise disto, como JSPs, então tem que usar. É o contrato entre as classes.

Um modo de mitigar isto é usar anotações, que serão interpretadas por um parser que gerará o os métodos acessores para você.

De qualquer modo, algumas linguagens mais novas tem modificadores de acesso, e permitem que um simples int x = objeto.atributo, se comporte como int c = objeto.getAtributo() automaticamente. Enfim, é uma deficiência do Java, já suprida em outras linguagens.
[/quote]

Isto já é mais na parte de conceitos de orientação a objetos, com a terminologia do Java. Tudo continua sendo variáveis, mas damos nomes específicos a elas dependendo de onde são usadas:

Caso façam parte de uma classe, e representem uma característica dela, são chamados de atributos.
Caso sejam criadas e existam somente dentro dos métodos, são variáveis locais.[/quote]

A noção de responsabilidade é que somente aquela parte do programa deve mexer com uma tarefa específica. A idéia é evitar bugs por não misturar tarefas diferentes.

Módulos também tem suas responsabilidades, mas a noção que tenho de módulo é algo maior que uma classe, como se fosse o setor inteiro de uma empresa, e não uma pessoa só.

Uma noção principal da orientação a objetos é que os objetos são sacos de dados, como qualquer estrutura em outra linguagem, porém somente o próprio objeto pode manipular seus dados internos.

Em linguagens procedurais, funções/procedimentos são desconexos das estruturas. Para manipulá-las, passamos essas estruturas para as funções que as modifiquem. No OO, a própria estrutura sabe se modificar, e manter um estado interno correto.

N

Obrigado, sua explicação conseguiu elucidar essas dúvidas. Muito bem explicado por sinal. Agradeço imensamente.

Creio que estou dominado por “vícios” de linguagem e talvez essa seja uma das partes mais difíceis.

FrancoC

Não é bem assim não.

Para lhe refrescar a memória veja um trecho de codigo VB

Public Function PercentageOf(ByVal value1 As Integer, ByVal value2 As Integer) As Integer
  Dim result As Integer
  result = (value1 / value2) * 100
  Return result
End Function

E outro trecho em BASIC

0 sys866:goto10
1 c$=c$+" ":k=0:d$=n$
2 k=k+1:a$=left$(c$,k):ifright$(a$,1)<>" "then2
3 b$=mid$(c$,k):ifleft$(b$,1)=" "thenk=k+1:goto3
4 ifb$=""thenn$="***":goto6
5 b$=left$(b$,len(b$)-1)
Jose111

FrancoC:
napolijr:

Me lembro de várias mudanças em linguagens (olha a sessão nostalgia), do Fortran, Cobol e mesmo o Basic, isso era em um tempo em que eu perfurava cartões para processamentos na USP e vivia carregando “malas” metálicas contendo as fitas.
Mas mesmo essas mudanças não foram tão confusas quanto a que vejo agora. (Se bem que eram mudanças de linguagens procedurais para outra procedural não é mesmo?).

Não é bem assim não.

Para lhe refrescar a memória veja um trecho de codigo VB

Public Function PercentageOf(ByVal value1 As Integer, ByVal value2 As Integer) As Integer
  Dim result As Integer
  result = (value1 / value2) * 100
  Return result
End Function

E outro trecho em BASIC

0 sys866:goto10
1 c$=c$+" ":k=0:d$=n$
2 k=k+1:a$=left$(c$,k):ifright$(a$,1)<>" "then2
3 b$=mid$(c$,k):ifleft$(b$,1)=" "thenk=k+1:goto3
4 ifb$=""thenn$="***":goto6
5 b$=left$(b$,len(b$)-1)

O código em Vb até da de entender mas esse em Basic -

Acho que uma vantagem do Java é o código que é de fácil entendimento, mesmo você não sabendo programar em Java ( Obs: Desde quem escreveu o código use nome significativos…)

N

Se vocês me permitem, não interpretem como soberba pois é. Será somente uma observação.
As mudanças, principalmente nos trechos de código acima foram na sintaxe e não na lógica, se conhecem basic, podem perceber que são praticamente iguais com uma organização diferente.
Olhem o mesmo código apenas digitado de forma diferente:

sys866

goto10

c$=c$+" "

k=0

d$=n$

k=k+1

a$=left$(c$,k)

if right$(a$,1) <> " “then

…b$=mid$(c$,k)

if left$(b$,1) = " " then

…k=k+1

…goto3

if b$ = “” then

…n$=”***"goto6

b$=left$(b$,len(b$)-1)

O que eu quis dizer inicialmente é que a mudança do paradigma está sendo muito radical para mim.

Continuarei a me esforçar.

Muito obrigado a todos, de coração.

B

Jose111:

O código em Vb até da de entender mas esse em Basic -

Acho que uma vantagem do Java é o código que é de fácil entendimento, mesmo você não sabendo programar em Java ( Obs: Desde quem escreveu o código use nome significativos…)

Basic também é fácil de entender, desde que escrevam com nomes significativos. Java não tem nenhuma vantagem a mais que outras linguagens neste sentido (fora “programar” em Malbolge e Brainfuck)

aconstantino

juliocbq:
As vantagens que posso citar como importantíssimas ao meu ver são:

  1. linguagem totalmente orientada a objetos. A metodologia OO simplifica o desenvolvimento e a manutenção de código. Essa metodologia pode ser perfeitamente aplicada em linguagens procedurais, mas com java é facilmente visualizada e implementada.

Julio, isso não é verdade. A linguagem Java não é totalmente orientada a objetos, e vou explicar porque:

Java além de possuir tipos primitivos, obriga que você, quando declara uma variável tenha de especificar um tipo para ela, isso se refere a tipagem… por ser fortemente tipada. Já em smalltalk isso nao acontece, pois imagina que todas os atributos do seu programa sejam do tipo java.lang.Object (em java, provavelmente vc nao conseguiria fazer isso), todas as variaveis poderiam receber qualquer tipo de objeto e em smalltalk isso é possivel, e ainda, em smalltalk tudo é objeto!

[] ´s

aconstantino

Buscando referências… encontrei no wikipedia:

“Smalltalk-80, ou simplesmente Smalltalk, é uma linguagem de programação orientada a objeto fortemente tipada.

o que provavelmte está errado.

D

Oi

Estes links são dois artigos bastante interessantes a respeito dos getters e setters que encontrei.

http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html

http://www.javaworld.com/javaworld/jw-01-2004/jw-0102-toolbox.html

E com respeito a grande vantagem do Java em relação às outras linguagens, na minha opinião é OO. Acho que para quem está aprendendo o conceito de OO no começo talvez seja um pouco difícil, até porque é dificil também aprender a sintaxe do Java.

Mas depois de um tempo parece que se torna tão facil. Tudo que você quiser fazer é modelado mentalmente como um objeto. Isso eu acho incrível e um estimulo para eu continuar aprendendo Java.

Comecei aprendendo programação em Fortran e C na faculdade e achava o máximo, super fácil. Quando tive aulas de Java tive até um pouco de resistência a querer aprender no início, mas depois que percebi como é intuitivo a OO, eu realmente adotei Java com minha linguagem preferida.

Quanto ao mercado de trabalho, pelo que tenho acompanhado (bem de perto), parece que está bastante aquecido, isto é, existem muitas vagas sim, para quem domina Java, mas para conseguir teu lugar ao sol(i.e. $$$$$), terá que dominar Java mesmo. Quero dizer que você terá de dominar Java da mesma maneira que você já domina as outras linguagens que trabalha atualmente.

Encare isso como mais um desafio!

mario.fts

esse artigo é interessante sobre o assunto:http://www.guj.com.br/posts/list/25386.java

N

vocês não imaginam o quanto o conceito deste fórum cresceu comigo devido as respostas.

Muito obrigado.

Criado 5 de abril de 2010
Ultima resposta 7 de abr. de 2010
Respostas 18
Participantes 9