FórumGdH

Página Inicial do Guia do Hardware

Registrar FAQ Calendário Pesquisar Mensagens de Hoje Marcar Fóruns Como Lidos

Voltar   FórumGdH > Profissional > Programação, scripts, web e banco de dados
Bem-vindo ao FórumGdH
Não se esqueça de se registrar, é grátis . Nós temos 759.270 usuários, convidamos você fazer parte de nossa comunidade também! Se ainda não encontrou o que procura use nossa pesquisa. Esperamos que aprecie nosso trabalho.

Resposta
 
Opções do Tópico
Antigo 19-05-2004, 10:26   #1 (permalink)
InsanoSurreal
Novo Membro
 
Registrado em: Mar 2004
Mensagens: 60
Reputação: 17 InsanoSurreal está indo no caminho certo
Padrão c++ ou java?

sou iniciante em c ansi, e estou afim de aprender uma linguagem orientada a objeto. sei que talvez seria mais facil pra mim aprender C++, mas será que o C++ faz tudo que o Java faz?
__________________
Insano Surreal
InsanoSurreal está offline   Responder com Quote
Antigo 19-05-2004, 10:45   #2 (permalink)
#pragma
Membro Senior
 
Registrado em: Apr 2003
Localização: Dpto. de Informática
Mensagens: 219
Reputação: 19 #pragma está indo no caminho certo
Padrão

Do Java pouco sei... contudo, sei que é uma linguagem interpretada: necessita do Virtual Machine, que o multithread é uma das vantagens do Java, assim como a indiscutível facilidade e "descanso" que as Garbage Collection fornecem... O C++ não tem nada disso! E imagino que o Java seja uma linguagem utilizada principalmente para a Web...

Contudo, acredito que quem aprendeu C++, não deverá ter grandes dificuldades em "assimilar" Java...e muito provavelmete, o oposto também será verdade... :lol:

Mas quem tenha o conhecimento de ambas as linguagens que se manifeste 8)
#pragma está offline   Responder com Quote
Antigo 19-05-2004, 11:19   #3 (permalink)
Lgub
Super Participante
 
Avatar de Lgub
 
Registrado em: Dec 2001
Mensagens: 937
Reputação: 23 Lgub está indo no caminho certo
Padrão

Citação:
Postado Originalmente por #pragma
Do Java pouco sei... contudo, sei que é uma linguagem interpretada: necessita do Virtual Machine, que o multithread é...
Perai o C++, tem Multithread Sim, e coletor de lixo vc pode implementar.
A principal vantagem do java é a portabilidade do código, que é melhor que a do C++(Apesar se o codigo em C++ for bem escrito, a portabilidadde é muito boa).
__________________
Linux User:#326216
Intel I7 - 920 - 6G DDR3 Tripple Channel @1600 - Geforce 285 1G.
Programador ADVPL(Fazer o que é o que ta pagando as contas no momento...)
Lgub está offline   Responder com Quote
Antigo 19-05-2004, 11:22   #4 (permalink)
#pragma
Membro Senior
 
Registrado em: Apr 2003
Localização: Dpto. de Informática
Mensagens: 219
Reputação: 19 #pragma está indo no caminho certo
Padrão

Citação:
Postado Originalmente por Lgub
Perai o C++, tem Multithread Sim, e coletor de lixo vc pode implementar.
A principal vantagem do java é a portabilid...
O C++ em si não tem Multithreading...Existem bibliotecas que proporcionam isso...mas a linguagem em si não é multithread...Assim como existem bibliotecas "externas" ao C++ que permitem a utilização de Sockets, etc....

Mas sendo assim, a pergunta talvez seja: o que o Java faz que o C++ não faz ??
:lol:
#pragma está offline   Responder com Quote
Antigo 28-05-2004, 22:19   #5 (permalink)
fiendryk
Newbie
 
Registrado em: May 2004
Mensagens: 20
Reputação: 0 fiendryk está indo no caminho certo
Enviar mensagem via ICQ para fiendryk Enviar mensagem via MSN para fiendryk
Padrão

vc quer só aprender???????? o java é masi facil de aprender........ porem se depois vc mudar de ideia será masi dificil aprender c++.... mas se tiver chance de vc mudar, aprenda c++, pq se vc aprender c++ com 1 dia vc aprende java ( é quase isso) , pq java é muito masi simples q c++, não tem alocação dinamica de memoria, vc não precisa ficar preocupado em desalocar o q alocou......... java é uma linguagem muito mais simples......... você vai conseguir fazer as mesmas coisas usando ambas linguagens...........
__________________
Athlon XP 2400+
Asus A7V266-MX
HD Maxtor 120 gb 7200rpm ATA 133
-> Windows 2003 Server
-> Linux Mandrake 10.0
256Mb DDR 266Mhz
CD LG 52x
fiendryk está offline   Responder com Quote
Antigo 28-12-2004, 15:31   #6 (permalink)
ssapao
Newbie
 
Registrado em: Dec 2004
Mensagens: 9
Reputação: 0 ssapao está indo no caminho certo
Padrão

Citação:
Postado Originalmente por #pragma
O C++ em si não tem Multithreading...Existem bibliotecas que proporcionam isso...mas a linguagem em si não é multithr...
desculpe, não entendi direito sua explicação
ela contraria o que eu pensava da linguagem até agora...

c++ nao tem multithread tampouco suporte a sockets e etc? :?:
ssapao está offline   Responder com Quote
Antigo 28-12-2004, 17:30   #7 (permalink)
jackinabox
Veterano
 
Avatar de jackinabox
 
Registrado em: Nov 2004
Mensagens: 1.055
Reputação: 17 jackinabox está indo no caminho certo
Padrão

Citação:
Postado Originalmente por fiendryk
o java é masi facil de aprender........ porem se depois vc mudar de ideia será masi dificil aprender c++....
Por que seria mais difícil aprender C++ depois de aprender Java? Não entendi.

Citação:
mas se tiver chance de vc mudar, aprenda c++, pq se vc aprender c++ com 1 dia vc aprende java ( é quase isso)
Ah, não. Não exagere. Só se você quiser ser uma daquelas pessoas que acham que sabem programar, só porque conhecem mais ou menos a sintaxe da linguagem.

Citação:
pq java é muito masi simples q c++, não tem alocação dinamica de memoria
Nope. Java tem, sim, alocação dinâmica de memória. E não vejo porque seja muito mais simples do que C++.

Sobre "garbage collection": sim, garbage collection é um recurso positivo, mas não faz mágica. Mesmo com garbage collection, é possível escrever programas que aprensentam memory leaks, levando a um OutOfMemoryError.

Ei, InsanoSurreal:
Acho que esse tópico está trazendo mais confusão do que esclarecimento aos iniciantes em ambas as linguagens.
Se você quer aprender uma linguagem orientada a objeto, e está em dúvida entre Java e C++, Java então seria uma escolha natural, pois enquanto Java é puramente orientada a objeto, C++ é uma linguagem híbrida.
__________________
Jeferson Charles Mayer

"Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?"
jackinabox está offline   Responder com Quote
Antigo 28-12-2004, 17:37   #8 (permalink)
jackinabox
Veterano
 
Avatar de jackinabox
 
Registrado em: Nov 2004
Mensagens: 1.055
Reputação: 17 jackinabox está indo no caminho certo
Padrão

Citação:
Postado Originalmente por ssapao
c++ nao tem multithread tampouco suporte a sockets e etc?
A linguagem C++ propriamente dita pode não ter suporte a sockets ou multithreading, mas isso não quer dizer muita coisa. Isso não significa que seus programas em C++ não possam contar com essas features, muito pelo contrário. C++ é uma linguagem altamente flexível, e você pode utilizar (ou desenvolver) bibliotecas que suportam essas ou outras features que não estão presentes no core da linguagem ou em suas bibliotecas padrão.
__________________
Jeferson Charles Mayer

"Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?"
jackinabox está offline   Responder com Quote
Antigo 30-12-2004, 11:02   #9 (permalink)
intruso
Tô em todas
 
Avatar de intruso
 
Registrado em: Apr 2002
Localização: Paulista/PE
Mensagens: 1.642
Reputação: 525 intruso tem uma fabulosa reputaçãointruso tem uma fabulosa reputaçãointruso tem uma fabulosa reputaçãointruso tem uma fabulosa reputaçãointruso tem uma fabulosa reputaçãointruso tem uma fabulosa reputaçãointruso tem uma fabulosa reputaçãointruso tem uma fabulosa reputaçãointruso tem uma fabulosa reputaçãointruso tem uma fabulosa reputaçãointruso tem uma fabulosa reputação
Padrão

pergunta simples:

as bibliotecas que implementam o c++ são escritas em que linguagem??

t+
__________________
Dê uma lida:
Eu não dou o peixe, ensino a pescar.

Meu Blog.
intruso está offline   Responder com Quote
Antigo 30-12-2004, 12:29   #10 (permalink)
jackinabox
Veterano
 
Avatar de jackinabox
 
Registrado em: Nov 2004
Mensagens: 1.055
Reputação: 17 jackinabox está indo no caminho certo
Padrão

Citação:
Postado Originalmente por intruso
pergunta simples:
as bibliotecas que implementam o c++ são escritas em que linguagem??
t+
Geralmente, essas bibliotecas são escritas em C/C++, porém não há uma resposta única e universal para essa pergunta, pois você pode, teoricamente, implementá-las em qualquer linguagem que suporte as devidas definições e requisitos.
__________________
Jeferson Charles Mayer

"Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?"
jackinabox está offline   Responder com Quote
Antigo 30-12-2004, 14:01   #11 (permalink)
niTsumuji
Veterano
 
Avatar de niTsumuji
 
Registrado em: Oct 2002
Localização: Curitiba
Mensagens: 1.437
Reputação: 21 niTsumuji está indo no caminho certo
Padrão

Citação:
Postado Originalmente por jackinabox
pois enquanto Java é puramente orientada a objeto, C++ é uma linguagem híbrida.
Essa é uma força do C++. Você pode usar código orientado a objeto(C++ puro), e ainda se quiser, utilizar umas funções escritas em C puro. Com Java a princípio não se pode fazer isso. Só código java mesmo.

E abrindo um perênteses aqui: programação Java é muito chata! Pelo menos eu acho. C++ eu acho até mais organizado... mas claro que depende muito de programador...
Claro a portabilidade é um ponto bem forte, mas nada que uma recompilada nos fontes também não resolva
__________________
Calma! Não tema! Com Slackware não há problema!

-----------------
Slackware 11.0
AMD Athlon64 3000+@1800
OpenGL Programmer
Assembler n00b
niTsumuji está offline   Responder com Quote
Antigo 30-12-2004, 14:40   #12 (permalink)
jackinabox
Veterano
 
Avatar de jackinabox
 
Registrado em: Nov 2004
Mensagens: 1.055
Reputação: 17 jackinabox está indo no caminho certo
Padrão

Citação:
Postado Originalmente por niTsumuji
Essa é uma força do C++. Você pode usar código orientado a objeto(C++ puro), e ainda se quiser, utilizar umas funções escritas em C puro.
Com Java a princípio não se pode fazer isso. Só código java mesmo.
Bons programas orientados a objeto não precisam (e não devem) misturar paradigmas de linguagens. "Poder fazer" não significa necessariamente que o que se pode fazer seja bom.

Fica difícil discutir tópicos como esse sem discutir questões como: coesão e acoplamento, design patterns e antipatterns, arquitetura de software, etc.

Infelizmente, muitos programadores nem mesmo sabem o que são alguns desses conceitos. Alguns conhecem linguagens de programação apenas superficialmente, mas não sabem, por exemplo, interpretar uma BNF, ou avaliar a escalabilidade de um sistema, ou sincronizar threads, ou mesmo escrever algoritmos adequados.

Ah, e certamente, há também a questão do gosto pessoal. E gosto não se discute (no máximo, se lamenta :-))

Atualmente, sou programador C/C++ e Java. São linguagens diferentes, com objetivos diferentes, e características positivas e negativas. Como muita coisa na vida.
__________________
Jeferson Charles Mayer

"Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?"
jackinabox está offline   Responder com Quote
Antigo 30-12-2004, 15:20   #13 (permalink)
intruso
Tô em todas
 
Avatar de intruso
 
Registrado em: Apr 2002
Localização: Paulista/PE
Mensagens: 1.642
Reputação: 525 intruso tem uma fabulosa reputaçãointruso tem uma fabulosa reputaçãointruso tem uma fabulosa reputaçãointruso tem uma fabulosa reputaçãointruso tem uma fabulosa reputaçãointruso tem uma fabulosa reputaçãointruso tem uma fabulosa reputaçãointruso tem uma fabulosa reputaçãointruso tem uma fabulosa reputaçãointruso tem uma fabulosa reputaçãointruso tem uma fabulosa reputação
Padrão

valeu ...
t+
__________________
Dê uma lida:
Eu não dou o peixe, ensino a pescar.

Meu Blog.
intruso está offline   Responder com Quote
Antigo 30-12-2004, 15:52   #14 (permalink)
jqueiroz
Highlander
 
Avatar de jqueiroz
 
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.782
Reputação: 1756 jqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputação
Padrão

Uia, outro morto-vivo à solta... acho que vou espalhar sal por esta sala, os zumbis detestam sal.

Vamos lá:

Citação:
Postado Originalmente por jackinabox
Nope. Java tem, sim, alocação dinâmica de memória. E não vejo porque seja muito mais simples do que C++.
Claro que tem. Só que isso não existe para o usuário. Ele apenas cria objetos, ele não precisa saber que quando ele cria objetos está alocando memória dinamicamente. Só isso já torna Java mais simples do que C++ ou C. O que não quer dizer que seja melhor. Nem pior.

Citação:
Sobre "garbage collection": sim, garbage collection é um recurso positivo, mas não faz mágica. Mesmo com garbage collection, é possível escrever programas que aprensentam memory leaks, levando a um OutOfMemoryError.
Não se a alocação de memória for transparente para o usuário, o sistema de controle de referências às áreas de memória (base do sistema de Garbage Collection) bem azeitado, e, claro, você não fique indefinidamente criando mais objetos do que destrói. Afinal, se é um recurso, há um limite para o seu uso.

Citação:
Postado Originalmente por intruso
as bibliotecas que implementam o c++ são escritas em que linguagem??
Não faz diferença pra vc como elas são escritas. Basta que haja uma interface que o seu programa possa usar. Nossa, essa frase ficou POO demais...

Citação:
Postado Originalmente por niTsumuji
Essa é uma força do C++. Você pode usar código orientado a objeto(C++ puro), e ainda se quiser, utilizar umas funções escritas em C puro. Com Java a princípio não se pode fazer isso. Só código java mesmo.
Mito. Eu já desenvolvi programas em Java que chamavam funções escritas em C. Como eu disse, basta haver uma interface.

Citação:
E abrindo um perênteses aqui: programação Java é muito chata! Pelo menos eu acho. C++ eu acho até mais organizado... mas claro que depende muito de programador...
Concordo quanto à chatice (qual a emoção de trabalhar sem ponteiros?), mas daí a dizer que esse monstro mutante que é C++ é mais organizada do que Java, vai uma longa discussão. Por esse caminho estaremos lamentando os gostos uns dos outros mais rápido do que gostaríamos.

Citação:
Claro a portabilidade é um ponto bem forte, mas nada que uma recompilada nos fontes também não resolva
Convido-o (na verdade desafio) a portar um programa desenvolvido em Qt, para Windows. Ou um escrito para DirectX, para Linux com gtk.

Citação:
Postado Originalmente por jackinabox
Bons programas orientados a objeto não precisam (e não devem) misturar paradigmas de linguagens. "Poder fazer" não significa necessariamente que o que se pode fazer seja bom.

Fica difícil discutir tópicos como esse sem discutir questões como: coesão e acoplamento, design patterns e antipatterns, arquitetura de software, etc.
Touché. Quem quer programar bem numa linguagem orientada a objetos deve entender bem o modelo de orientação a objetos. E isso muitas vezes significa bloquear a sua doutrinação "Von Newman"(*). Não é fácil, como todos os que aprenderam primeiro alguma linguagem que segue o paradigma da programação estruturada para depois aprender POO devem concordar.

(*) Von Newman (pronuncia-se "fon nóiman", pelo menos era como meus professores o chamavam) formulou alguns princípios básicos do modelo de programação, o principal deles é que os programas deveriam ser cadeias de instruções simples, que deveriam ser executadas em sequência, uma por vez. As implicações disso são várias, a começar pela arquitetura dos processadores, que se baseiam nesse princípio para usar um "contador de programa", que nada mais é do que o indicador de qual instrução ele vai processar a seguir.

Outra implicação disso é que, como as instruções são processadas em sequência, você pode admitir que se o processador executou uma instrução no endereço X, há uma chance enorme de que a próxima instrução a ser executada seja a do endereço X+1. E mesmo que não seja, a chance de que esteja próxima de X (antes ou depois) ainda é imensa. Isso é o chamado "princípio da localidade", e é a base do funcionamento das caches.

Um programa orientado a objeto é chamado "não Von Newman" pois não há uma correlação entre as instruções. Na verdade, não há "um fluxo de programa"; tudo pode acontecer ao mesmo tempo, e pode não acontecer nada. O controle flui de um objeto para o outro através de mensagens, e nada impede que num determinado momento qualquer objeto mande mensagem para qualquer outro objeto. O que significa que podem haver mensagens simultâneas. Em POO pura, o tempo não existe. Quando você insere o conceito de tempo na POO, vc cria um novo
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns
jqueiroz está offline   Responder com Quote
Antigo 30-12-2004, 15:53   #15 (permalink)
jqueiroz
Highlander
 
Avatar de jqueiroz
 
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.782
Reputação: 1756 jqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputação
Padrão

Uia, outro morto-vivo à solta... acho que vou espalhar sal por esta sala, os zumbis detestam sal.

Vamos lá:

Citação:
Postado Originalmente por jackinabox
Nope. Java tem, sim, alocação dinâmica de memória. E não vejo porque seja muito mais simples do que C++.
Claro que tem. Só que isso não existe para o usuário. Ele apenas cria objetos, ele não precisa saber que quando ele cria objetos está alocando memória dinamicamente. Só isso já torna Java mais simples do que C++ ou C. O que não quer dizer que seja melhor. Nem pior.

Citação:
Sobre "garbage collection": sim, garbage collection é um recurso positivo, mas não faz mágica. Mesmo com garbage collection, é possível escrever programas que aprensentam memory leaks, levando a um OutOfMemoryError.
Não se a alocação de memória for transparente para o usuário, o sistema de controle de referências às áreas de memória (base do sistema de Garbage Collection) bem azeitado, e, claro, você não fique indefinidamente criando mais objetos do que destrói. Afinal, se é um recurso, há um limite para o seu uso.

Citação:
Postado Originalmente por intruso
as bibliotecas que implementam o c++ são escritas em que linguagem??
Não faz diferença pra vc como elas são escritas. Basta que haja uma interface que o seu programa possa usar. Nossa, essa frase ficou POO demais...

Citação:
Postado Originalmente por niTsumuji
Essa é uma força do C++. Você pode usar código orientado a objeto(C++ puro), e ainda se quiser, utilizar umas funções escritas em C puro. Com Java a princípio não se pode fazer isso. Só código java mesmo.
Mito. Eu já desenvolvi programas em Java que chamavam funções escritas em C. Como eu disse, basta haver uma interface.

Citação:
E abrindo um perênteses aqui: programação Java é muito chata! Pelo menos eu acho. C++ eu acho até mais organizado... mas claro que depende muito de programador...
Concordo quanto à chatice (qual a emoção de trabalhar sem ponteiros?), mas daí a dizer que esse monstro mutante que é C++ é mais organizada do que Java, vai uma longa discussão. Por esse caminho estaremos lamentando os gostos uns dos outros mais rápido do que gostaríamos.

Citação:
Claro a portabilidade é um ponto bem forte, mas nada que uma recompilada nos fontes também não resolva
Convido-o (na verdade desafio) a portar um programa desenvolvido em Qt, para Windows. Ou um escrito para DirectX, para Linux com gtk.

Citação:
Postado Originalmente por jackinabox
Bons programas orientados a objeto não precisam (e não devem) misturar paradigmas de linguagens. "Poder fazer" não significa necessariamente que o que se pode fazer seja bom.

Fica difícil discutir tópicos como esse sem discutir questões como: coesão e acoplamento, design patterns e antipatterns, arquitetura de software, etc.
Touché. Quem quer programar bem numa linguagem orientada a objetos deve entender bem o modelo de orientação a objetos. E isso muitas vezes significa bloquear a sua doutrinação "Von Newman"(*). Não é fácil, como todos os que aprenderam primeiro alguma linguagem que segue o paradigma da programação estruturada para depois aprender POO devem concordar.

(*) Von Newman (pronuncia-se "fon nóiman", pelo menos era como meus professores o chamavam) formulou alguns princípios básicos do modelo de programação, o principal deles é que os programas deveriam ser cadeias de instruções simples, que deveriam ser executadas em sequência, uma por vez. As implicações disso são várias, a começar pela arquitetura dos processadores, que se baseiam nesse princípio para usar um "contador de programa", que nada mais é do que o indicador de qual instrução ele vai processar a seguir.

Outra implicação disso é que, como as instruções são processadas em sequência, você pode admitir que se o processador executou uma instrução no endereço X, há uma chance enorme de que a próxima instrução a ser executada seja a do endereço X+1. E mesmo que não seja, a chance de que esteja próxima de X (antes ou depois) ainda é imensa. Isso é o chamado "princípio da localidade", e é a base do funcionamento das caches.

Um programa orientado a objeto é chamado "não Von Newman" pois não há uma correlação entre as instruções. Na verdade, não há "um fluxo de programa"; tudo pode acontecer ao mesmo tempo, e pode não acontecer nada. O controle flui de um objeto para o outro através de mensagens, e nada impede que num determinado momento qualquer objeto mande mensagem para qualquer outro objeto. O que significa que podem haver mensagens simultâneas. Em POO pura, o tempo não existe. Quando você insere o conceito de tempo na POO, vc cria um novo conceito de programação chamado "Programação Orientada a Eventos". Mas aí já complica demais.
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns
jqueiroz está offline   Responder com Quote
Antigo 30-12-2004, 16:34   #16 (permalink)
jackinabox
Veterano
 
Avatar de jackinabox
 
Registrado em: Nov 2004
Mensagens: 1.055
Reputação: 17 jackinabox está indo no caminho certo
Padrão

Citação:
Postado Originalmente por jqueiroz
Ele apenas cria objetos, ele não precisa saber que quando ele cria objetos está alocando memória dinamicamente.
Em Java, o programador precisa saber que está alocando memória dinamicamente, e prestar atenção nisso. Se não fosse assim, não seria necessário tomar cuidado para não manter muitas referências, e não seria necessário fazer ajustes manuais no tamanho do heap, em determinadas circunstâncias, para evitar garbage collections demoradas ou muito freqüentes.

Citação:
Só isso já torna Java mais simples do que C++ ou C. O que não quer dizer que seja melhor. Nem pior.
Sim, porém garbage collection é apenas uma das características a serem levadas em conta. Provavelmente Java seja realmente mais simples do que C++ em alguns aspectos, mas certamente é mais complexa em outros. Além disso, minha contestação foi em relação à afirmação de que "Java é muito mais simples do que C++". Muito?

Além disso, em C++, é possível alocar objetos no stack ou no heap. Posso escrever programas enormes sem nunca utilizar o operador new, e portanto, não preciso me preocupar com desalocar memória com delete.

Citação:
Não se a alocação de memória for transparente para o usuário, o sistema de controle de referências às áreas de memória (base do sistema de Garbage Collection) bem azeitado, e, claro, você não fique indefinidamente criando mais objetos do que destrói. Afinal, se é um recurso, há um limite para o seu uso.
Pois é, foi o que eu disse: mesmo com garbage collection, pode-se fazer um programa que apresente memory leaks. É necessário tomar cuidados, diferentemente do que algumas pessoas pensam. Se não for assim, vou dizer que em C++ é semelhante, se você não esquecer de desalocar a memória alocada, não há problema algum.

Citação:
Convido-o (na verdade desafio) a portar um programa desenvolvido em Qt, para Windows. Ou um escrito para DirectX, para Linux com gtk.
Hehe. Essa foi engraçada.
__________________
Jeferson Charles Mayer

"Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?"
jackinabox está offline   Responder com Quote
Antigo 30-12-2004, 17:16   #17 (permalink)
jqueiroz
Highlander
 
Avatar de jqueiroz
 
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.782
Reputação: 1756 jqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputação
Padrão

Citação:
Hehe. Essa foi engraçada.
pro bem ou pro mal???

Citação:
Além disso, em C++, é possível alocar objetos no stack ou no heap. Posso escrever programas enormes sem nunca utilizar o operador new, e portanto, não preciso me preocupar com desalocar memória com delete.
Também dá pra eu ir da minha casa até a sua dirigindo de marcha-a-ré. Só não vejo utilidade nisso, a menos que a minha caixa de marchas esteja quebrada, e vc seja o meu mecânico. Ou se vc precisa fazer um programa não OO e só dispõe de uma linguagem OO para isso.

Citação:
Pois é, foi o que eu disse: mesmo com ****, pode-se fazer um programa que apresente memory leaks. É necessário tomar cuidados, diferentemente do que algumas pessoas pensam. Se não for assim, vou dizer que em **** é semelhante, se você não esquecer de desalocar a memória alocada, não há problema algum.
Interessante, eu removi as referências a Java e a C++, e o texto continua fazendo sentido. Acho que quer dizer que não importa a qualidade ou o tipo da ferramenta que vc coloque na mão do sujeito, se ele tiver o talento pra fazer bobagem vai fazer alguma com capricho, não?
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns
jqueiroz está offline   Responder com Quote
Antigo 30-12-2004, 17:43   #18 (permalink)
jackinabox
Veterano
 
Avatar de jackinabox
 
Registrado em: Nov 2004
Mensagens: 1.055
Reputação: 17 jackinabox está indo no caminho certo
Padrão

Citação:
Postado Originalmente por jqueiroz
Citação:
Hehe. Essa foi engraçada.
pro bem ou pro mal???
Você tocou de forma engraçada em um ponto bastante relevante, você tem razão. Então, acho que foi "pro bem" :-)

Citação:
Também dá pra eu ir da minha casa até a sua dirigindo de marcha-a-ré. Só não vejo utilidade nisso, a menos que a minha caixa de marchas esteja quebrada, e vc seja o meu mecânico. Ou se vc precisa fazer um programa não OO e só dispõe de uma linguagem OO para isso.
Então você acha que criar objetos C++ no stack e não no heap é andar de marcha-a-ré? Ou significa não utilizar OO? Desenvolvi um sistema totalmente orientado a objeto (não muito grande, mas tem mais de 50000 linhas C++) que aloca a grande maioria dos objetos no stack simplesmente porque não há razão para alocá-los no heap.

Por que motivo esse código:
Código:
void CPointOfSale::ConfirmTransaction(Transaction& transaction) { Connection *connection = new Connection; // fazer alguma coisa com o objeto connection delete connection; }
seria melhor do que esse:
Código:
void CPointOfSale::ConfirmTransaction(Transaction& transaction) { Connection connection = Connection(); // fazer alguma coisa com o objeto connection // não é necessário delete, pois objeto foi alocado no stack }
:?: :?: :?:
Citação:
Interessante, eu removi as referências a Java e a C++, e o texto continua fazendo sentido. Acho que quer dizer que não importa a qualidade ou o tipo da ferramenta que vc coloque na mão do sujeito, se ele tiver o talento pra fazer bobagem vai fazer alguma com capricho, não?
Isso aí!
__________________
Jeferson Charles Mayer

"Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?"
jackinabox está offline   Responder com Quote
Antigo 01-01-2005, 20:45   #19 (permalink)
jqueiroz
Highlander
 
Avatar de jqueiroz
 
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.782
Reputação: 1756 jqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputação
Padrão

Citação:
Então você acha que criar objetos C++ no stack e não no heap é andar de marcha-a-ré? Ou significa não utilizar OO? Desenvolvi um sistema totalmente orientado a objeto (não muito grande, mas tem mais de 50000 linhas C++) que aloca a grande maioria dos objetos no stack simplesmente porque não há razão para alocá-los no heap.
Na hora, eu quis dizer que vc não tinha seguido o paradigma OO. Quis também dizer que há muitas coisas que são possíveis, apesar de não serem úteis.

Depois eu vi o seu exemplo, e apesar de não ter "mudado de idéia", vejo que minha alegoria não se aplica. Mas fico um pouco de pé atrás, pois você não deixa de estar usando uma característica da linguagem que está fortemente associada ao caráter híbrido dela... pois você não está alocando as variáveis "no stack", está criando no "registro de ativação da função". Por acaso, nessa implementação, eles andam juntos (também por acaso, todas as que eu conheço fazem isso --- mas não há nada que impeça que não seja feito). E o registro de ativação é uma característica específica das linguagens estruturadas.

Fico pensando em como seu programa se comportaria num sistema realmente OO, onde vc não tem variáveis "simples" ou stack, vc só tem "objetos". Poderia se comportar magistralmente bem, se vc tiver usado o registro de ativação apenas como um atalho para a criação dos objetos, ou desastrosamente ruim, se vc tiver tirado algum proveito desse atalho que cause efeitos colaterais.
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns
jqueiroz está offline   Responder com Quote
Antigo 02-01-2005, 19:05   #20 (permalink)
jackinabox
Veterano
 
Avatar de jackinabox
 
Registrado em: Nov 2004
Mensagens: 1.055
Reputação: 17 jackinabox está indo no caminho certo
Padrão

Citação:
Postado Originalmente por jqueiroz
Quis também dizer que há muitas coisas que são possíveis, apesar de não serem úteis.
Ah, concordo totalmente, costumo dizer isso em alguns posts também.

Citação:
você não está alocando as variáveis "no stack", está criando no "registro de ativação da função". Por acaso, nessa implementação, eles andam juntos (também por acaso, todas as que eu conheço fazem isso --- mas não há nada que impeça que não seja feito).
Também não conheço alguma implementação que não crie variáveis automatic "no stack". Muitas vezes, isso faz parte da própria especificação da linguagem (Java, por exemplo). Várias documentações oficiais do C++ falam explicitamente em "criar objetos no stack ou no heap". Mas OK, podemos então falar em "activation frame", e não em "stack". De qualquer forma, isso é uma questão do compilador, e não tem nada a ver com OO. Você cria objetos - se eles são criados no heap, no stack, no activation frame ou em qualquer outro lugar, isso não faz parte de nenhum princípio de OO.

Há muitas informações sobre os trade-offs entre alocação no frame ou no heap. Segue aqui um link do MSDN:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/html/_core_memory_management.3a_.frame_allocation.asp

Trechos do texto: "The key advantage of allocating objects on the frame is that they are automatically deleted. When you allocate your objects on the frame, you don’t have to worry about forgotten objects causing memory leaks."
...
"A disadvantage of frame allocation is that frame variables cannot be used outside their scope. Another factor in choosing frame allocation versus heap allocation is that for large structures and objects, it is often better to use the heap instead of the stack for storage since stack space is often limited."

Citação:
E o registro de ativação é uma característica específica das linguagens estruturadas.
Ah, não. Java, por exemplo, é uma linguagem totalmente OO, e a Java Language Specification trata, especificamente, dos activation frames:

http://java.sun.com/docs/books/vmspec/2nd-edition/html/Overview.doc.html#1962

Trecho da JLS: "A frame is used to store data and partial results, as well as to perform dynamic linking , return values for methods, and dispatch exceptions.
A new frame is created each time a method is invoked. A frame is destroyed when its method invocation completes, whether that completion is normal or abrupt (it throws an uncaught exception). Frames are allocated from the Java virtual machine stack (§3.5.2) of the thread creating the frame. Each frame has its own array of local variables (§3.6.1), its own operand stack (§3.6.2), and a reference to the runtime constant pool (§3.5.5) of the class of the current method."

Citação:
Fico pensando em como seu programa se comportaria num sistema realmente OO, onde vc não tem variáveis "simples" ou stack, vc só tem "objetos". Poderia se comportar magistralmente bem, se vc tiver usado o registro de ativação apenas como um atalho para a criação dos objetos, ou desastrosamente ruim, se vc tiver tirado algum proveito desse atalho que cause efeitos colaterais.
É, fica bem difícil pensar diante de uma situação teórica como essa. Mas, no caso de C++, não estamos falando em um "atalho" ou algum tipo de "gambiarra". É uma característica da linguagem, amplamente documentada e discutida, e que tem vantagens e desvantagens. E se você analisar detidamente, deverá concluir que essa caraterística não tem nenhuma relação relevante com conceitos de OO.

Ah, e agradeço pela boa discussão. Eu já andava meio enferrujado, mas desde que comecei a participar do fórum, tenho tido a oportunidade de discutir vários assuntos técnicos e profissionais. :wink:
__________________
Jeferson Charles Mayer

"Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?"
jackinabox está offline   Responder com Quote
Resposta


Opções do Tópico

Regras de Mensagens
Você não pode criar tópicos
Você não pode postar respostas
Você não pode anexar arquivos
Você não pode editar suas mensagens

Código vB está Ligado
Smiles estão Ligado
Código [IMG] está Ligado
Código HTML está Desligado
Ir para...


Horários baseados na GMT -3. Agora são 8:33.