Desenvolvimento Desktop  XML
Índice dos Fóruns » Assuntos gerais (Off-topic)
Autor Mensagem
fuadksd
JavaTeenager
[Avatar]

Membro desde: 18/05/2011 08:56:02
Mensagens: 153
Offline

Sou iniciante em Java (desde o começo do ano e me interesso bastante por desenvolvimento desktop, principalmente softwares utilitários e tal.
Então andei fazendo umas pesquisas sobre qual plataforma escolher para programar. Pelo qu posso ver, a maioria dos softwares nesse sentido são desenvolvidos em C++.

Eu já tentei me dar bem com C++, mas acho uma abordagem muito injusta da orientação a objetos (me parece mais como: C++ é procedural, mas se precisar tem objetos, como php). Não gosto da sintaxe - acho confusa, feia.
Outra opção disponível seria o C#. Mas também não me apeguei muito - me parece uma cópia mal feita do Java.
Poderia tentar scripts, como Python, mas também não me atraem muito.

O Java pra mim parece a melhor plataforma de desenvolvimento, um nível generalizado. Mas quando vamos falar de software para desktop, pelas características "cross-platform" que carrega, me parece que deixa um pouco a desejar em interfaces gráficas bonitas e integração com cada sistema operacional.

Gostaria de saber a opinião de vocês, e se tiverem mais experiência no assunto que pudessem dar dicas de por onde começar.
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Eu estou no mercado desktop há mais de 10 anos e programo com freqüência nas 3 linguagens. Gosto muito das 3.
Além de moderador do GUJ, sou dono de uma comunidade no DevBrasil (C#) e participo do grupo cppbrasil.

Se você quer programar para desktop, provavelmente o Java é a pior alternativa das 3 que você citou.


O que você quer dizer com "o C++ tem uma abordagem injusta da orientação à objetos"? Injusta em que sentido?
Ele suporta tudo que o Java suporta: Polimorfismo, herança (inclusive herança múltipla).
Ele suporta encapsulamento, com melhores modificadores de acesso (e, inclusive, o acesso friend, que faz muita falta no Java).

O C++ não é uma linguagem procedural. Na verdade, ela implementa 3 paradigmas: procedural, o orientado a objetos e o genérico.
Na prática, os programas modernos em C++ utilizam pouco o paradigma procedural. Os dois últimos são os mais usados.
Quanto ao número de plataformas, creio que nenhuma supera o C++. Pegue uma biblioteca como a Qt (que é OO, por sinal), e você vai ver que sua aplicação vai rodar em praticamente qualquer lugar.
Finalmente, das 3 linguagens que você citou, o C++ é o único que dá garantias de tempo real, incluindo hard-real time (pode ser necessário em apps desktop, como as que trabalham com processamento de vídeo).

O C++ tem duas grandes desvantagens:
1. É uma linguagem difícil: pois não é uma linguagem gerenciada. E lidar com memória no braço é muito difícil (embora te dê muito controle).
2. É uma linguagem antiga: Muitas implementações não são tão legais nele, pois alguns conceitos nem sequer estavam maduros na época que eles foram implementados no C++. Há muitas más práticas que a linguagem criou por conta do legado também. Para programar com conforto em C++ é importantíssimo conhecer o que são boas práticas modernas e é importante não sair programando feito um maluco. Depois de entender a sintaxe da linguagem é fundamental pegar um livro como Effective C++ e ler de cabo à rabo (esse tipo de evolução é normal e com o tempo todas as linguagens começam a ter esse tipo de coisa. É o caso de "preferir StringBuilder no lugar de StringBuffer" no Java, ou ArrayList no lugar de Vector, só que o C++ é cheio de coisas como essa). Fique atento pois os últimos 20 anos de evolução do C++ estão na forma de se programar, não na linguagem em si (aliás, se vc não usa STL, boost, ou mesmo a QT, não programou em C++ ainda).


No caso de comparar Java e C#, eu diria que o Java peca em alguns requisitos básicos, que geralmente aparecem em aplicações desktop:
- Pouca ou nenhuma integração com o SO (nada de acessar registro, AD, etc.)
- Precária integração com hardware
- Péssimo suporte a gráficos, sons e multimídia em geral (esqueça jogos em Java).

Para os dois primeiros casos, o C# possui os unsafe methods, que são infinitamente mais fáceis, limpos e seguros do que usar JNI.
Para o último caso, você tem o XNA que, aliás, é suportado em 3 plataformas.

O C# realmente começou como uma cópia, em muitos casos mal feita, do Java. Mas hoje, o Java é que corre atrás do prejuízo. O C# já suporta coisas que o Java vem prometendo faz tempo, como as lambda expressions. E suporta mais coisas: extension methods, LINQ, partial classes, etc. Tem uma implementação mais inteligente dos generics, sobrecarga de operadores, entre outros recursos interessantes. É preciso reconhecer que os prejuízos que a Sun sofreu, associado ao período de venda e aquisição pela Oracle teve um impacto bastante negativo na evolução da linguagem, e a Oracle terá que correr muito se quiser alcançar novamente a MS (que por sinal, está fazendo um ótimo trabalho).


Coloque na mesa os critérios que são importantes para os tipos de aplicações que você quer desenvolver, e enumere o que as linguagens oferem para cobri-los. Pelo seu texto, o que mais parece é que você está preferindo o Java por gosto pessoal, e não por uma escolha técnica.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
fuadksd
JavaTeenager
[Avatar]

Membro desde: 18/05/2011 08:56:02
Mensagens: 153
Offline

Não, eu falo de escolha pessoal mesmo. Acho o Java muito organizado, fácil de entender a plataforma (to falando a nível de iniciante, ferramentas de desenvolvimento e runtime...).
Achei um pouco mais difícil quando decidi tentar o C# - me parece que tu fica um pouco preso ao Visual Studio (e a programação visual) pra qualquer coisa que tenha que fazer (visão de iniciante).
Eu gosto muito da abordagem da sun (oracle) de organizar o java.


Quanto ao C++, sim me dá a impressão de ser uma linguagem velha. E fico pensando se vale a pena investir e aprender. Me parece um ganho significativo de liberdade, milhões de bibliotecas por aí... mas parece meio "largado". Pelo menos é a impressão que me passa. Por exemplo: se eu decidisse começar a aprender C++ hoje, nem saberia por onde.

Me expressei mal, não que a OO do C++seja injusta mas que deveria ser o padrão. Por exemplo: eu vejo pelas bibliotecas padrão do java (como IO), vejo uma orientação a objetos muito limpa, diferente do "padrão" do C++ que me parece muito procedural.

Como eu disse, eu to começando agora e to procurando alguma coisa pra me aprofundar: comecei com Java SE, to tentando aprender Java EE, mas as vezes sinto que falta sair um pouco do "sandbox" que o Java proporciona.
[WWW]
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline

fuadksd wrote:Não, eu falo de escolha pessoal mesmo. Acho o Java muito organizado, fácil de entender a plataforma (to falando a nível de iniciante, ferramentas de desenvolvimento e runtime...).
Achei um pouco mais difícil quando decidi tentar o C# - me parece que tu fica um pouco preso ao Visual Studio (e a programação visual) pra qualquer coisa que tenha que fazer (visão de iniciante).
Eu gosto muito da abordagem da sun (oracle) de organizar o java.


Quanto ao C++, sim me dá a impressão de ser uma linguagem velha. E fico pensando se vale a pena investir e aprender. Me parece um ganho significativo de liberdade, milhões de bibliotecas por aí... mas parece meio "largado". Pelo menos é a impressão que me passa. Por exemplo: se eu decidisse começar a aprender C++ hoje, nem saberia por onde.

Me expressei mal, não que a OO do C++seja injusta mas que deveria ser o padrão. Por exemplo: eu vejo pelas bibliotecas padrão do java (como IO), vejo uma orientação a objetos muito limpa, diferente do "padrão" do C++ que me parece muito procedural.

Como eu disse, eu to começando agora e to procurando alguma coisa pra me aprofundar: comecei com Java SE, to tentando aprender Java EE, mas as vezes sinto que falta sair um pouco do "sandbox" que o Java proporciona.



a impressão que passa é que a maioria dos professores passam muita coisa errada para os seus alunos hoje em dia. Mas porque ainda hoje c++ é amplamente utilizado?

1) porque o seu compilador é hoje o que gera código mais enxuto e limpo.
2) runtime pequeno e muito leve.

É uma linguagem difícil mas que oferece os melhores recursos.

www.citrox.com.br
fuadksd
JavaTeenager
[Avatar]

Membro desde: 18/05/2011 08:56:02
Mensagens: 153
Offline

Aqui na faculdade eles passam Java para o pessoal da TI em geral e C++ para jogos e segurança da informação.

Vcs sabem de algum material aberto na web pra aprender C++ (assumindo que vc ja saiba o basico, pq o problema não é a lógica de programaçãoe sim um "bootstrap" pra começar por algum canto)?
[WWW]
kicolobo
Moderador
[Avatar]

Membro desde: 19/07/2006 14:11:09
Mensagens: 1188
Localização: Belo Horizonte
Offline

ViniGodoy wrote:Eu estou no mercado desktop há mais de 10 anos e programo com freqüência nas 3 linguagens. Gosto muito das 3.
Além de moderador do GUJ, sou dono de uma comunidade no DevBrasil (C#) e participo do grupo cppbrasil.

Se você quer programar para desktop, provavelmente o Java é a pior alternativa das 3 que você citou.


O que você quer dizer com "o C++ tem uma abordagem injusta da orientação à objetos"? Injusta em que sentido?
Ele suporta tudo que o Java suporta: Polimorfismo, herança (inclusive herança múltipla).
Ele suporta encapsulamento, com melhores modificadores de acesso (e, inclusive, o acesso friend, que faz muita falta no Java).

O C++ não é uma linguagem procedural. Na verdade, ela implementa 3 paradigmas: procedural, o orientado a objetos e o genérico.
Na prática, os programas modernos em C++ utilizam pouco o paradigma procedural. Os dois últimos são os mais usados.
Quanto ao número de plataformas, creio que nenhuma supera o C++. Pegue uma biblioteca como a Qt (que é OO, por sinal), e você vai ver que sua aplicação vai rodar em praticamente qualquer lugar.
Finalmente, das 3 linguagens que você citou, o C++ é o único que dá garantias de tempo real, incluindo hard-real time (pode ser necessário em apps desktop, como as que trabalham com processamento de vídeo).

O C++ tem duas grandes desvantagens:
1. É uma linguagem difícil: pois não é uma linguagem gerenciada. E lidar com memória no braço é muito difícil (embora te dê muito controle).
2. É uma linguagem antiga: Muitas implementações não são tão legais nele, pois alguns conceitos nem sequer estavam maduros na época que eles foram implementados no C++. Há muitas más práticas que a linguagem criou por conta do legado também. Para programar com conforto em C++ é importantíssimo conhecer o que são boas práticas modernas e é importante não sair programando feito um maluco. Depois de entender a sintaxe da linguagem é fundamental pegar um livro como Effective C++ e ler de cabo à rabo (esse tipo de evolução é normal e com o tempo todas as linguagens começam a ter esse tipo de coisa. É o caso de "preferir StringBuilder no lugar de StringBuffer" no Java, ou ArrayList no lugar de Vector, só que o C++ é cheio de coisas como essa). Fique atento pois os últimos 20 anos de evolução do C++ estão na forma de se programar, não na linguagem em si (aliás, se vc não usa STL, boost, ou mesmo a QT, não programou em C++ ainda).


No caso de comparar Java e C#, eu diria que o Java peca em alguns requisitos básicos, que geralmente aparecem em aplicações desktop:
- Pouca ou nenhuma integração com o SO (nada de acessar registro, AD, etc.)
- Precária integração com hardware
- Péssimo suporte a gráficos, sons e multimídia em geral (esqueça jogos em Java).

Para os dois primeiros casos, o C# possui os unsafe methods, que são infinitamente mais fáceis, limpos e seguros do que usar JNI.
Para o último caso, você tem o XNA que, aliás, é suportado em 3 plataformas.

O C# realmente começou como uma cópia, em muitos casos mal feita, do Java. Mas hoje, o Java é que corre atrás do prejuízo. O C# já suporta coisas que o Java vem prometendo faz tempo, como as lambda expressions. E suporta mais coisas: extension methods, LINQ, partial classes, etc. Tem uma implementação mais inteligente dos generics, sobrecarga de operadores, entre outros recursos interessantes. É preciso reconhecer que os prejuízos que a Sun sofreu, associado ao período de venda e aquisição pela Oracle teve um impacto bastante negativo na evolução da linguagem, e a Oracle terá que correr muito se quiser alcançar novamente a MS (que por sinal, está fazendo um ótimo trabalho).


Coloque na mesa os critérios que são importantes para os tipos de aplicações que você quer desenvolver, e enumere o que as linguagens oferem para cobri-los. Pelo seu texto, o que mais parece é que você está preferindo o Java por gosto pessoal, e não por uma escolha técnica.


Oi Vinícius,

sabe: eu tenho o "sonho técnico" de um dia produzir algo útil em C++ e, como você, também trabalho há alguns anos desenvolvendo aplicações desktop (no início em VisualBasic/Delphi e depois em Java). Quais os seus toolkits favoritos para este tipo de empreitada?

Com relação ao Java ser a pior opção para desktop, há ressalvas. É importante lembrar os aspectos positivos também. O Swing é uma biblioteca riquíssima (o table model pra aplicações corporativas, por exemplo, é uma das sete maravilhas do mundo pra mim ) , e o desenvolvimento multiplataforma com ele é real. Sim, pode haver pequenas diferenças entre uma plataforma e outra, mas não é algo que chegue a inviabilizar um projeto.

Com relação ao acesso às bibliotecas nativas mais básicas, é verdade, mas por outro lado, não é algo que seja feito de forma tão comum assim como possa parecer. Na esmagadora maioria das vezes, o modelo padrão que ainda reina é o cliente/servidor mesmo. Sobre a beleza das interfaces, neste caso é importante salientar que mais do que a presença de recursos, entra em cena o fator "bom gosto". Há aplicações com interfaces nojentas em C#, Qt, Cocoa ou qualquer outro framework cool com o qual topemos.

http://devkico.itexto.com.br

Twitter: http://www.twitter.com/loboweissmann

Vamos aprender Grails?
http://www.grailsbrasil.com.br
[WWW] [MSN] [ICQ]
Rodrigo Vieira Pinto
JavaEvangelist
[Avatar]

Membro desde: 15/07/2004 11:05:05
Mensagens: 354
Localização: São Paulo
Offline

ViniGodoy wrote:Eu estou no mercado desktop há mais de 10 anos e programo com freqüência nas 3 linguagens. Gosto muito das 3.
Além de moderador do GUJ, sou dono de uma comunidade no DevBrasil (C#) e participo do grupo cppbrasil.

Se você quer programar para desktop, provavelmente o Java é a pior alternativa das 3 que você citou.


O que você quer dizer com "o C++ tem uma abordagem injusta da orientação à objetos"? Injusta em que sentido?
Ele suporta tudo que o Java suporta: Polimorfismo, herança (inclusive herança múltipla).
Ele suporta encapsulamento, com melhores modificadores de acesso (e, inclusive, o acesso friend, que faz muita falta no Java).

O C++ não é uma linguagem procedural. Na verdade, ela implementa 3 paradigmas: procedural, o orientado a objetos e o genérico.
Na prática, os programas modernos em C++ utilizam pouco o paradigma procedural. Os dois últimos são os mais usados.
Quanto ao número de plataformas, creio que nenhuma supera o C++. Pegue uma biblioteca como a Qt (que é OO, por sinal), e você vai ver que sua aplicação vai rodar em praticamente qualquer lugar.
Finalmente, das 3 linguagens que você citou, o C++ é o único que dá garantias de tempo real, incluindo hard-real time (pode ser necessário em apps desktop, como as que trabalham com processamento de vídeo).

O C++ tem duas grandes desvantagens:
1. É uma linguagem difícil: pois não é uma linguagem gerenciada. E lidar com memória no braço é muito difícil (embora te dê muito controle).
2. É uma linguagem antiga: Muitas implementações não são tão legais nele, pois alguns conceitos nem sequer estavam maduros na época que eles foram implementados no C++. Há muitas más práticas que a linguagem criou por conta do legado também. Para programar com conforto em C++ é importantíssimo conhecer o que são boas práticas modernas e é importante não sair programando feito um maluco. Depois de entender a sintaxe da linguagem é fundamental pegar um livro como Effective C++ e ler de cabo à rabo (esse tipo de evolução é normal e com o tempo todas as linguagens começam a ter esse tipo de coisa. É o caso de "preferir StringBuilder no lugar de StringBuffer" no Java, ou ArrayList no lugar de Vector, só que o C++ é cheio de coisas como essa). Fique atento pois os últimos 20 anos de evolução do C++ estão na forma de se programar, não na linguagem em si (aliás, se vc não usa STL, boost, ou mesmo a QT, não programou em C++ ainda).


No caso de comparar Java e C#, eu diria que o Java peca em alguns requisitos básicos, que geralmente aparecem em aplicações desktop:
- Pouca ou nenhuma integração com o SO (nada de acessar registro, AD, etc.)
- Precária integração com hardware
- Péssimo suporte a gráficos, sons e multimídia em geral (esqueça jogos em Java).

Para os dois primeiros casos, o C# possui os unsafe methods, que são infinitamente mais fáceis, limpos e seguros do que usar JNI.
Para o último caso, você tem o XNA que, aliás, é suportado em 3 plataformas.

O C# realmente começou como uma cópia, em muitos casos mal feita, do Java. Mas hoje, o Java é que corre atrás do prejuízo. O C# já suporta coisas que o Java vem prometendo faz tempo, como as lambda expressions. E suporta mais coisas: extension methods, LINQ, partial classes, etc. Tem uma implementação mais inteligente dos generics, sobrecarga de operadores, entre outros recursos interessantes. É preciso reconhecer que os prejuízos que a Sun sofreu, associado ao período de venda e aquisição pela Oracle teve um impacto bastante negativo na evolução da linguagem, e a Oracle terá que correr muito se quiser alcançar novamente a MS (que por sinal, está fazendo um ótimo trabalho).


Coloque na mesa os critérios que são importantes para os tipos de aplicações que você quer desenvolver, e enumere o que as linguagens oferem para cobri-los. Pelo seu texto, o que mais parece é que você está preferindo o Java por gosto pessoal, e não por uma escolha técnica.


Cara, as comparações foram muito bem esmiuçadas. Da próxima vez que eu for fazer um software desktop vou pensar 2 vezes antes de partir pro Swing logo de cara.
Valeu!

"Ser o segundo é ser o primeiro dos perdedores" - Ayrton Senna

"Eu vou dá 10 pau!!" - Aracy de Almeida

Nova dupla sertaneja: Waterfall e Procedural. Pra começar, é sertanejo (ARGH!)

"Bem, dizia eu que a aritmética..." - Prof. Girafales

ErickMacedo
JavaChild

Membro desde: 09/12/2011 10:17:00
Mensagens: 113
Localização: Tupã/São Paulo
Offline


Aqui na faculdade eles passam Java para o pessoal da TI em geral e C++ para jogos e segurança da informação.

Vcs sabem de algum material aberto na web pra aprender C++ (assumindo que vc ja saiba o basico, pq o problema não é a lógica de programaçãoe sim um "bootstrap" pra começar por algum canto)?


Só para "fixar" no caso da Web,, JAVA sai na frente em relação a C++

Bacharel em Sistema de Informação
Sun Certified Java Programmer
[Email]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

kicolobo wrote:Oi Vinícius,

sabe: eu tenho o "sonho técnico" de um dia produzir algo útil em C++ e, como você, também trabalho há alguns anos desenvolvendo aplicações desktop (no início em VisualBasic/Delphi e depois em Java). Quais os seus toolkits favoritos para este tipo de empreitada?

Com relação ao Java ser a pior opção para desktop, há ressalvas. É importante lembrar os aspectos positivos também. O Swing é uma biblioteca riquíssima (o table model pra aplicações corporativas, por exemplo, é uma das sete maravilhas do mundo pra mim ) , e o desenvolvimento multiplataforma com ele é real. Sim, pode haver pequenas diferenças entre uma plataforma e outra, mas não é algo que chegue a inviabilizar um projeto.

Com relação ao acesso às bibliotecas nativas mais básicas, é verdade, mas por outro lado, não é algo que seja feito de forma tão comum assim como possa parecer. Na esmagadora maioria das vezes, o modelo padrão que ainda reina é o cliente/servidor mesmo. Sobre a beleza das interfaces, neste caso é importante salientar que mais do que a presença de recursos, entra em cena o fator "bom gosto". Há aplicações com interfaces nojentas em C#, Qt, Cocoa ou qualquer outro framework cool com o qual topemos.


Oi Kiko. Se for desenvolver apps desktop com C++, tente produzir algo com o Qt. Mas antes, recomendo fortemente que leia o Effective C++, e aprenda um pouco do C++ moderno.

Quanto a ser a pior das três linguagens. É bom lembrar que "pior" é uma comparação. Ser a pior das três não significa que a linguagem é ruim. Só significa que há menos vantagens que as outras duas. De fato, o Java é uma boa linguagem para aplicações desktop que não envolvem interação com o SO, ou tempo real e que precisam rodar simultaneamente no Windows e no Linux. Boa parte das aplicações comerciais são assim, e não vejo qualquer problema em faze-las em Swing.

E eu concordo com você: O Swing é poderoso, flexível, e rico. Desde que você siga algumas boas práticas (inclusive a de aprender ele direito, e programar models), ele se torna agradável e poderoso. Há algumas implementações nele que deixam muito a desejar, como é o caso das JInternalPanes, mas nada que não se possa conviver (e todas as outras linguagens tem lá seus problemas).

O fato é que o Java é tão bom, que se você optar por ele, não estará muito atrás do C#. Ao ponto de que, se sua equipe tiver know how em Java, não tem porque fazê-los reaprender o C# caso o sistema realmente não peça muita integração com o Windows (se pedir pouca, pode-se até quebrar o galho com JNA e JNI). Nesse caso, ponha o povo para trabalhar com que eles gostam e sabem melhor, e conviva com os eventuais inconvenientes.


Agora, o colega estava falando que queria se especializar em aplicações Desktop. Nesse caso, acho importantíssimo que ele não considere Java como sua única escolha. Se você quer ser especialista em desktop, e conseguir empregos realmente bons na área, é importante conhecer bem o C++. Isso abre portas para um leque enorme de aplicações, seja na área de engenharia, monitoramento, segurança, sistemas operacionais, aplicações multimídia, etc. E, vale lembrar, que para apps exclusivamente desktop, o C++ possui hoje o maior e mais bem remunerado mercado.

Mas também é um erro achar que o C++ é a panacéia para todos os problemas. Embora realmente seja possível desenvolver tudo com ele, para as aplicações mais simples, ele não é exatamente a linguagem mais produtiva. Use-o quando precisar de integração ou performance (requisitos comuns em apps desktop), mas tenha em mãos uma linguagem de desenvolvimento rápido quando não precisar disso. Nesse caso, é legal também conhecer o C#, que hoje tem se mostrado uma alternativa de desenvolvimento muito rápido, e com integração fácil com o Windows, ou o próprio Java.


Existem poucas linguagens que considero ruins. Uma delas é o VB6. De resto, é só estar atento para fazer um julgamento técnico, não baseado em gosto pessoal. É difícil, eu sei, eu mesmo já escolhi muito por gosto pessoal, mas quando fizer isso, admita para si mesmo, e meça bem se vale a pena lidar com as consequências da escolha - e muitas vezes vale.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

ErickMacedo wrote:Só para "fixar" no caso da Web,, JAVA sai na frente em relação a C++


Indiscutivelmente.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

fuadksd wrote:Aqui na faculdade eles passam Java para o pessoal da TI em geral e C++ para jogos e segurança da informação.


As áreas em que o C++ está presente e é forte:
- Sistemas embarcados (embora aqui use-se ele quase como se usa o C);
- Sistemas operacionais;
- Aplicativos desktop para distribuição em escala (seu navegador, bloco de notas, word, etc..)
- Jogos (praticamente todos);
- Aplicações multimídia (players de vídeo, photoshop, etc).
- Aplicações de processamento intenso (bolsa de valores, finanças, meteorologia, aplicações para supercomputadores);
- Área científica

Áreas onde ele definitivamente não está presente:
- Web

fuadksd wrote:Vcs sabem de algum material aberto na web pra aprender C++ (assumindo que vc ja saiba o basico, pq o problema não é a lógica de programaçãoe sim um "bootstrap" pra começar por algum canto)?


Pegue o livro do André Bueno aqui no Ponto V:
http://pontov.com.br/site/cpp/46-conceitos-basicos/88-roadmap-c

Recomendo que adquira e leia os livros indicados nesse artigo, em especial, o Effective C++ e o livro de STL.


Veja os artigos de Smart Pointers do Ponto V:
http://www.pontov.com.br/site/cpp/43-smart-pointers

Veja a documentação do QT:
http://doc.qt.nokia.com/qtcreator-2.4/index.html

This message was edited 1 time. Last update was at 26/12/2011 07:55:25


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

fuadksd wrote:Me expressei mal, não que a OO do C++seja injusta mas que deveria ser o padrão. Por exemplo: eu vejo pelas bibliotecas padrão do java (como IO), vejo uma orientação a objetos muito limpa, diferente do "padrão" do C++ que me parece muito procedural.


É injusto o que as faculdades fazem. Geralmente você tem contato com a parte procedural do C++. De bibliotecas, você vê no máximo um pouquinho da IOStream (cout e fstream). Quase não se fala na biblioteca padrão, a STL (muita gente sequer fica sabendo da existência dela), e de pacotes como o <algorithm>. Praticamente ninguém usa classes como a std::string, std::vector ou std::map na faculdade.

Além disso, as APIs maiores não fazem parte do C++ padrão, e não são vistas na faculdade. O C++ é padronizado pela ISO, portanto, demoraria muito manterem uma API integrada como a do Java.

As APIs são desenvolvidas por outro grupo, que criou uma biblioteca chamada boost: http://www.boost.org/
São as classes da boost que gradualmente vão se incorporando ao C++.

Outras APIs fantásticas, como o QT, dificilmente são citadas em faculdade. Se você quer ver um conjunto de classes sólido, bem estruturado, fácil de mexer, estude a QT.

Na faculdade, também quase não se vê o terceiro paradigma do C++, o genérico, responsável por boa parte da evolução do C++. Não se vê as práticas de programação modernas (aposto que você não ouviu falar de RAII ou Smart Pointers).

Infelizmente, muitos profissionais acabam por comparar toda plataforma Java (linguagem + APIs) com o que viram de C++ na faculdade (praticamente só parte da linguagem), e acabam mesmo com uma impressão muito negativa.

This message was edited 2 times. Last update was at 26/12/2011 08:06:22


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline

kicolobo wrote:
Oi Vinícius,

sabe: eu tenho o "sonho técnico" de um dia produzir algo útil em C++ e, como você, também trabalho há alguns anos desenvolvendo aplicações desktop (no início em VisualBasic/Delphi e depois em Java). Quais os seus toolkits favoritos para este tipo de empreitada?

Com relação ao Java ser a pior opção para desktop, há ressalvas. É importante lembrar os aspectos positivos também. O Swing é uma biblioteca riquíssima (o table model pra aplicações corporativas, por exemplo, é uma das sete maravilhas do mundo pra mim ) , e o desenvolvimento multiplataforma com ele é real. Sim, pode haver pequenas diferenças entre uma plataforma e outra, mas não é algo que chegue a inviabilizar um projeto.

Com relação ao acesso às bibliotecas nativas mais básicas, é verdade, mas por outro lado, não é algo que seja feito de forma tão comum assim como possa parecer. Na esmagadora maioria das vezes, o modelo padrão que ainda reina é o cliente/servidor mesmo. Sobre a beleza das interfaces, neste caso é importante salientar que mais do que a presença de recursos, entra em cena o fator "bom gosto". Há aplicações com interfaces nojentas em C#, Qt, Cocoa ou qualquer outro framework cool com o qual topemos.


No quesito interface é a mais pura verdade a questão do bom gosto mesmo. O swing é muito rico e você pode desenhar o que quiser com ele, aliás swing e qtgui possuem uma coisa em comum: Ambos são lightweight. Qtgui também não é nativo do sistema operacional e é muito responsível como podem ver em algumas aplicações.

No quesito agilidade de desenvolvimento o java é a primeira opção na minha humilde opinião, porque você consegue fazer "bons softwares" com maior facilidade(grande parte das boas práticas do c++ já estão implementadas).

Agora no quesito "aplicação desktop" eu já optaria por c++ por causa do runtime muitas vezes mais leve. Grande parte dessas aplicações estão constantemente sendo alocadas e desalocadas em memória no sistema por usuários. Eles executam 4 ou 5 players simultâneamente, abrem documentos dos mais variados. Dessa maneira uma aplicação desktop necessita de runtime bem leve para atender espectativas de uso.

www.citrox.com.br
marcosalex
GUJ Expert
[Avatar]

Membro desde: 20/02/2008 12:32:59
Mensagens: 3371
Online

Também gosto do Java pra desktop e acho ele muito produtivo. Existem bibliotecas que permitem inclusive integração com os widgets do Windows 7, muito fáceis, o Java 7 deixou ele menos verboso e a nova API de IO me ajudou bem no momento que eu precisei usar o recurso, pura sorte. hehehe Apesar do Eclipse e Netbeans serem os mais populares, existem IDEs comerciais em Java bem produtivas.

Mas concordo com o que o pessoal falou, cada uma tem as vantagens e desvantagens, então vai do que a pessoa prioriza. No meu caso específico, eu precisava rodar a mesma aplicação em diferentes plataformas sem precisar disponibilizar meu código fonte ou ficar gerando builds separados. Com o Java ou .NET ainda tem a vantagem de quando surgir um hardware novo, a atualização da VM já garante as otimizações no meu software sem que eu precise recompilar ou liberar meu código fonte. E como minhas aplicações são mais cálculos que ficar criando objetos, o garbage colector não foi um impeditivo. Se eu precisasse dos recursos que o vinigodoy citou, a escolha poderia ser outra.

O C# foi minha primeira opção porque eu vinha do Delphi, mas esbarrei em quebra de compatibilidade quando fui usar o framework mais novo, até os services packs quebraram meu código. Mas sei que hoje esse problema reduziu bastante e pra maioria das aplicações a não ser que você use alguma coisa mais específica não vai esbarrar com isso. Outra dificuldade é que eu precisava de rodar no Linux e Mac e o Mono é bem mais limitado e lento do que o .NET Framework, mas também depende do caso.

[Yahoo!] aim icon [ICQ]
AbelBueno
Virtual Machine Man

Membro desde: 04/08/2010 09:37:57
Mensagens: 543
Offline

Oi ViniGodoy,

Achei suas respostas bem esclarecedoras sobre desenvolvimento desktop.
Mas um comentário seu me despertou curiosidade:

ViniGodoy wrote:Existem poucas linguagens que considero ruins. Uma delas é o VB6.


O que acha de tão ruim em VB6 ?

Eu sempre achei que o maior problema do VB6 eram os programadores.
Com o marketing de qualquer um poder programar nela, você encontrava realmente qualquer um "programando"... e aí já viu.

Mas na ferramenta em si, quais eram os grandes problemas que via nela?


Sobre desenvolvimento desktop em geral, com as especulações de que o windows 8 jogará as aplicações desktop para segundo plano
(Aplicações em javascript + html + css rodarão direto no windows, sem o browser), acham que esse cenário mudará muito?



 
Índice dos Fóruns » Assuntos gerais (Off-topic)
Ir para:   
Powered by JForum 2.1.8 © JForum Team