FAQ Lite
Grandes Temas

[ 6.1 ] C++ é uma linguagem prática?
[ 6.2 ] C++ é uma linguagem perfeita?
[ 6.3 ] Qual a grande questão da orientação a objeto (OO)?
[ 6.4 ] C++ é melhor que Ada? (ou Visual Basic, C, FORTRAN, Pascal, Smalltalk ou qualquer outra linguagem?
[ 6.5 ] Quem usa C++?
[ 6.6 ] Quanto tempo se leva para aprender C++?
[ 6.7 ] Quais são os aspectos mais importantes do C++, de um ponto de vista comercial?
[ 6.8 ] As funções virtuais (ligação dinâmica) são aspectos centrais de OO/C++?
[ 6.9 ] Você pode me dar uma simples razão pela qual a função virtual faça uma grande diferença?
[ 6.10 ] C++ é compatível, retroativamente, com ANSI/ISO-C?
[ 6.11 ] C++ é padronizado?
[ 6.12 ] Onde eu posso obter uma cópia do padrão ANSI/ISO-C++?

[ 6.1 ] C++ é uma linguagem prática?

Sim. C++ é uma ferramenta prática. Não é perfeita, mas é muito útil.

No universo do software industrial, C++ é visto como um recurso sólido e maduro; o principal recurso de desenvolvimento. C++ tem suporte abrangente para as necessidades da indústria de software, o que o torna "bom" sob todos os pontos de vista.

Topo
[ 6.2 ] C++ é uma linguagem perfeita?

Não. C++ não foi projetada para demonstrar o que seja uma linguagem perfeitamente orientada a objeto (OO). C++ foi projetada para ser uma ferramenta prática para solucionar problemas do mundo real. C++ tem alguns poucos defeitos, mas somente o ambiente acadêmico poderia sustentar o desenvolvimento de uma linguagem até que ela se torne perfeita. Esse não é o objetivo do C++.
Topo
[ 6.3 ] Qual a grande questão da orientação a objeto (OO)?

As técnicas de orientação a objeto são, até o momento, a melhor maneira que se conhece para se desenvolver sistema de aplicação grandes ou complexos.

OO afirma: A indústria de software está falhando em satisfazer as demandas por sistemas grandes e complexos. Essa falha é, na verdade, devida ao nosso próprio sucesso. Os sucessos da indústria de software acabaram compelindo os usuários a pedir mais. Infelizmente (sic) a indústria de software criou um apetite no mercado, que as técnicas estruturadas não podem mais satisfazer. Tornou-se necessário criar um paradigma melhor. 

C++ é uma linguagem de programação OO. Contudo, C++ pode também ser usada apenas como uma linguagem C melhorada, ou seja, sem aplicação das técnicas OO. Se você usar o C++ apenas como uma linguagem C melhorada, não deve esperar atingir os benefícios da OO.

Topo

[ 6.4 ] C++ é melhor que Ada? (ou Visual Basic, C, FORTRAN, Pascal, Smaltalk ou qualquer outra linguagem?)

Essa questão gera mais discussão do que luz.

Em 99% dos casos, a seleção de uma linguagem de programação é determinada por consideração comerciais, não por considerações técnicas. O que realmente pesa na escolha de uma linguagem são aspectos como disponibilidade de ambiente de desenvolvimento, disponibilidade de ambiente de execução, questões legais e de licenciamento de ambientes de desenvolvimento e ambientes de execução (run time), disponibilidade de programadores já treinados no mercado, disponibilidade de suporte e consultoria para uso da linguagem, fatores políticos e culturais da empresa. Essas questões comerciais têm muito mais peso do que aspectos técnicos como performance de compilações, performance dos programas executáveis, etc.

Qualquer um que argumente em favor de uma linguagem, contra uma outra, considerando aspectos meramente técnicos, ou seja, ignorando as questões comerciais que são as predominantes, se apresenta como alguém excessivamente técnico, e acaba não merecendo ser ouvido num caso real de escolha de linguagem de programação.

Topo
[ 6.5 ] Quem usa C++?

Muitas e muitas companhias e escritórios governamentais. Muita gente mesmo!

O número de desenvolvedores C++ dobra a cada ano. Considere que cinco pessoas estão se tornando desenvolvedores C++ enquanto você lê esse FAQ.

Crescimento é uma das muitas facilidades importantes do C++.

Topo
[ 6.6 ] Quanto tempo se leva para aprender C++?

Várias companhias ensinam C++ com sucesso em cursos curtos, onde se condensa um semestre de universidade em um curso de 40 horas. Independentemente de onde você vai fazer o curso de C++, verifique se os curso oferece os elementos essenciais para o aprendizado. Lembre-se que as pessoas aprendem melhor quando têm projeto reais para consolidar os conceitos aprendidos. Mas por melhor que seja o curso, ao concluí-lo você ainda não estará pronto.  

São necessários de 6 a 12 meses para se tornar proficiente em C++. Menos tempo se você tiver acesso a um grupo de desenvolverdores mais experientes. Mais tempo se você não dispuser de uma boa biblioteca de classes genéricas em C++. Para tornar-se um expert em C++, capaz, inclusive, de ensinar a outras pessoas, você levará em torno de 3 anos. 

Algumas pessoas nunca chegam a isso. É que você não terá chance se não tiver capacidade de aprender e postura profissional. Um mínimo de capacidade profissional fará com que você esteja pronto para admitir seus próprios erros. A postura profissional levará você a despender algumas horas extras em seu aprendizado. Note que é muito mais fácil aprender fatos novos do que modificar seus dogmas, isto é, modificar sua maneira de pensar; seu conceito de bom;   seu modelo mental do mundo da tecnologia.

Duas coisas que você deve fazer:

  • Eleger um mentor
  • Ler dois livros: um que trate do que é legal e outro que trate do que é moral

Duas coisas que você não deve fazer:

Topo
[ 6.7 ] Quais são os aspectos mais importantes do C++ de um ponto de vista comercial?

Aqui estão alguns dos aspectos mais importantes do C++ de um ponto de vista comercial:
Topo
[ 6.8 ] As funções virtuais (ligação dinâmica) são aspectos centrais de OO/C++?

Sim.

Sem funções virtuais, C++ seria apenas uma variante sintática do C. Sobrecarga de operador e funções membro não-virtuais são bons recursos, mas são, em última análise, apenas melhoria sintática se comparados a noção típica do C de se passar um pointer de uma estrutura para uma função.

De um ponto de vista comercial, C++ sem funções virtuais tem pouco valor adicional, se comparado ao C. O pessoal técnico geralmente julga haver uma grande diferenca entre C e não-OO C++, mas sem OO, a diferença não seria suficiente para justificar o custo de treinar programadores, adquirir novas ferramentas, etc. Em outras palavras, se eu prestasse consultoria a um gerente sobre trocar de C para não-OO C++ (isto é, trocar as linguagens mas não os paradigmas) eu o desencorajaria. De um ponto de vista comercial, OO pode ajudar a se desenvolver sistemas extensíveis e adaptáveis, mas apenas a sintaxe de classes do C++  sem OO pode não reduzir os custos de manutenção do software, e ainda aumentar os custos de treinamento de pessoal significativamente.

Em síntese: C++ sem funções virtuais não é OO. Programação com classes mas sem ligação dinâmica é denominada baseada em objeto mas não orientada a objeto. Remover as funções virtuais é o mesmo que remover OO. Tudo o que restaria é programação baseada em objeto, semelhante à linguagem Ada original. (A nova linguagem Ada, a propósito, suporta verdadeira OO, bem como apenas programação baseada em objeto)

Topo
[ 6.9 ] Você pode me dar uma simples razão pela qual a função virtual faça uma grande diferença?

Visão geral: Ligação dinâmica melhora a reutilização de código, poque permite que códigos antigos chamem (call) códigos novos.

Antes do advento de OO, a reutilização de código consistia em código novo chamar (call) código antigo. Por exemplo, um programador poderia escrever um código novo que chamasse um código re-usável como printf ()

Com OO, a reutilização de código pode ser feita tendo códigos antigos chamando (call) códigos novos. Por exemplo, um programador pode escrever um código que é chamado por uma estrutura escrita pelo seu bisavô. Isso não implica na necessidade de qualquer alteração no código do bisavô. De fato, o código antigo não precisa sequer ser recompilado. Mesmo que tudo o que se tenha do código antigo seja o arquivo objeto, que o código fonte tenha sido perdido há 25 anos atrás, o velho arquivo objeto chamará a nova extensão sem qualquer problema.

Isso é estensibilidade, e isso é OO

Topo
[ 6.10 ] C++ é compatível, retroativamente, com ANSI/ISO-C?

Quase.

C++ é, tanto quanto possível, compatível com C, mas não é totalmente compatível. Na prática, a principal diferença é que C++ requer protótipos, e que f() declara uma função que não tem parâmetros,  ao passo que em C f() é o mesmo que f(...)

Há outras diferenças sutís, tais como, sizeof('x') é igual a sizeof(char) em C++, mas é igual a sizeof(int) em C. Mais, C++ armazena as tags de estrutura no mesmo espaço-de-nomes (name space) usados para os demais nomes do código, já o C requer a definição explícita de struct, por exemplo

typedef struct Fred Fred.

Essa técnica também funciona, mas é redundante em C++. 

Topo
[ 6.11 ] C++ é padronizado?

Sim.

C++ foi padronizado por ANSI (The American National Standards Organization),  BSI (The Britsh Standards Institute), DIN (The German National Standards Organization), vários outros órgãos nacionais de padronização, e ISO (The International Standards Organization). O padrão ISO foi finalizado e adotado por votação unânime em 14 de novembro de 1997.

O comitê ANSI-C++ é chamado "X3J16". O grupo ISO de padronização C++ é denominado WG21.

O processo de padronização ANSI/ISO C++ inclui representantes de praticamente todo o mundo: representante da Austrália, Canadá, Dinamarca, França,  Alemanha, Irlanda, Japão,  Paises Baixos, Nova Zelândia, Suécia, Reino Unido da Grã Bretanha e Estados Unidos da América, além de representantes de uma centena de empresas e outros  indivíduos interessados. Entre as principais empresas estão AT&T, Ericson, Digital, Borland, Hewllet Packard, IBM, Mentor Graphics, Microsoft, Silicon Graphics, Sun Microsystems e Siemens.     

Após 8 anos de trabalho, o padrão está completo. Em 14 de novembro de 1997, o padrão foi aprovado por votação unânime dos representantes nacionais presentes em Morristown. A ratificação final por 24 países é esperada para março de 98.

Topo
[ 6.12 ] Onde eu posso obter uma cópia do padrão ANSI/ISO C++?

Você pode obter uma cópia em papel dos padrões ANSI, tanto enviando um email para Lynn Barra, ou enviando cartas para o endereço abaixo, solicitando a versão mais recente de "Draft Proposed American National Standard for Information Systems - Programming Language C++", que é o documento número CD14882. Envie sua carta para

X3 Secretariat / 1250 Eye Street NW / Suite 200 / Washington, DC.

Você não pode obter uma cópia on line desse documento, porque a ISO não disponibiliza nenhum documento "machine readable" para acesso público. Contudo, se você se satisfaz com uma cópia desatualizada, poderá obtê-la em:

Finalmente, você pode ler o pré-release do comitê ISO aqui. Esse pré-release é inteligível por não-programadores.
Topo Próximo Índice
C++ FAQ Lite
Copyright © 1991-98 by Marshall Cline Ph.D., cline@parashift.com
Tradução: Dagoberto Haele Arnaut

| Home | Bookmarks | Universidades | Para Saber mais | Universidades | WEB Directory | Mapa do site |