Introdução
No mundo da programação nós podemos classificar as linguagens de duas maneiras: Linguagem de Baixo Nível e Linguagem de Alto Nível. Quando nos referimos à linguagem de Baixo Nível estamos nos referindo a sintaxes próximas ao código de maquina, ou seja, a linguagem que o computador consegue facilmente interpretar. Em contrapartida a definição de linguagem de Baixo Nível nós encontramos as linguagem de Alto Nível, com relação a esse tipo de linguagem podemos afirmar que a mesma possui uma sintaxe próxima à linguagem humana um exemplo desse tipo de linguagem é o próprio C/C++, ente outras.
O C++ foi inicialmente desenvolvido por Bjarne Stroustrup dos Bell Labs durante a década de 1980 (originalmente com o nome C with Classes, como um adicional à linguagem C) com o objectivo de melhorar a linguagem de programação C ainda que mantendo máxima compatibilidade. Em 1983 o nome da linguagem foi alterado de C with Classes para C++, novas características foram adicionadas, como funções virtuais, sobrecarga de operadores e funções, referências, constantes, gerenciamento manual de memória, melhorias na verificação de tipo de dado e estilo de comentário de código de uma linha (//).
Stroustrup percebeu que a linguagem simula possuía características muito úteis para o desenvolvimento de software, mas era muito lenta para uso prático. Por outro lado, a linguagem BCPL era rápida, mas possuía muito baixo nível, dificultando sua utilização em desenvolvimento de aplicações. Durante seu período na Bell Labs, ele enfrentou o problema de analisar o kernel do Unix com respeito à computação distribuída. A partir de sua experiência de Doutorado, começou a acrescentar elementos do simula no C. O C foi escolhido como base de desenvolvimento da nova linguagem, pois possuía uma proposta de uso genérico, era rápido e também portável para diversas plataformas. Algumas outras linguagens que também serviram de inspiração para o cientista da computação foram Algol 68, Ada, Clu e Ml. Em 1985 foi lançada a primeira edição do livro The C++ Programming Language, contendo referências para a utilização da linguagem, já que ainda não era uma norma oficial. A primeira versão comercial foi lançada em outubro do mesmo ano. Em 1989 a segunda versão foi lançada, contendo novas características como herança múltipla, classes abstratas, métodos estáticos, métodos constantes e membros protegidos, incrementando o suporte a orientação a objeto. Em 1990 foi lançado o livro The Annotated C++ Reference Manual, que se tornou base para o futuro padrão. Outras adições na linguagem incluem Templates, tratamento de exceções, espaço de nomes, conversão segura de tipo de dado e o tipo Booleano.
Um fator extremamente importante para as pessoas que estão conhecendo a linguagem de programação C++ é afirmar que é mesma é case sensitive, ou seja, ao programar nesse tipo linguagem as pessoas devem tomar muito cuidado ao declarar variáveis ou fazer o uso de determinados métodos, pois ao se declarar uma variável chamada conta e outra chamada cONta (note as letras maiúsculas), nesse caso o compilador entenderá que isso são variáveis distintas e provavelmente ocorrera algo completamente diferente do resultado esperado. O mesmo vale ressaltar sobre o uso da estrutura de seleção if (se) e else (senão), a declaração das mesmas devem ser sempre minúsculas, caso o programador defina as mesmas com letras maiúsculas o compilador entenderá que a declaração corresponde a uma variável.
Após a padronização ISO realizada em 1998 e a posterior revisão realizada em 2003, uma nova versão da especificação da linguagem foi lançada em setembro de 2011, conhecida informalmente como C++11 ou C++0x. Este novo padrão incluirá muitas adições ao núcleo da linguagem (sua implementação principal), e estenderá a biblioteca padrão do C++, incluindo a maior parte da biblioteca do chamado C++ Technical Report 1 — um documento que propõe mudanças ao C++ — com exceção das funções matemáticas específicas.
Ambiente de Linguagem
O C++ pode ser chamado de linguagem compilada, ou seja, além de escrever o código, é necessário um outro software que possa entender esse código e traduzí-lo para uma sintaxe que o computador possa interpretar denominado Código de Máquina.
É necessário um editor de texto puro (como o Bloco de Notas) e um compilador para o desenvolvimento de aplicativos na linguagem C++, nesse caso quando o programador digitar o código-fonte o mesmo deve ser salvo com a extensão .CPP ao invés de .TXT, em seguida o índividuo deve abrir o prompt digitar o comando de compilação do compilador instalado (por exemplo no compilador Borland C++Builder 3.0 o respectivo comando de compilação é bcc32) seguido pelo nome do arquivo salvo.CPP, ou então o programador pode optar por utilizar um Ambiente de Desenvolvimento Integrado (IDE - Integrated Development Environment) para otimizar o desenvolvimento de suas aplicações.
Instalação
A primeira coisa a fazer antes de desenvolver programas usando a linguagem C++ é instalar um compilador. Existem diversos compiladores C++ disponíveis para os programadores, a decisão sobre qual compilador utilizar pode ser baseada em vários fatores:
- qualidade do compilador (rapidez, está conforme com a padronização da linguagem, a interface com o usuário é agradável, possui ou não um IDE (Integrated Development Enviroment), possui diversas opções de compilação);
- sistema(s) operacional(is) que o compilador funciona (e gera códigos);
- custo do compilador;
- documentação disponível e suporte.
Características do C++
C++ pode ser visto como uma linguagem procedimental tradicional com alguns construtores adicionais. Começando pelo C, alguns construtores para programação orientada a objetos e para melhorar a sintaxe procedimental foram acrescentados.
Um programa bem escrito em C++ irá refletir elementos tanto do estilo de programação orientada a objetos como programação procedimental clássica. Isto porque o C++ é na verdade uma linguagem extensível já que podemos definir novos tipos de tal maneira que eles agem de mesmo modo que os tipos pré-definidos que fazem parte da linguagem padrão.
Abaixo estão listados itens que caracterizam a linguagem C++:
- Programação Orientada à Objetos: A possibilidade de utilizar programação orientada a objetos permite ao programador projetar aplicações de um ponto de vista mais parecido com comunicação entre objetos que de uma seqüência estruturada de código. Alem disso, permite a reusabilidade de código de uma forma mais lógica e produtiva. A linguagem foi desenvolvida com o cuidado de prover atributos Orientados à Objeto para a linguagem C sem comprometer a eficiência;
- Portabilidade: Pode-se praticamente compilar o mesmo código C++ em qualquer tipo de computador e sistema operacional sem fazer grandes mudanças. C++ é uma das mais usadas e portadas linguagens de programação;
- Brevidade: Código escrito em C++ é muito menor em comparação com outras linguagens, desde o uso de caracteres especiais e preferidos antes de palavras chave, evitando esforço;
- Programação Modular: Um corpo de aplicação em C++ pode ser feita de vários arquivos de código que serão compilados separadamente e “linkados” juntos. Economizando tempo, pois não é necessário recompilar toda a aplicação quando se faz uma mudança simples, mas apenas aquele arquivo que a contem. Alem do mais, esta característica permite C++ ligar com código produzido em outras linguagens como o Assembler ou C;
- Compatibilidade com C: Qualquer código escrito em C pode ser facilmente incluído em um programa C++ sem fazer grandes mudanças;
- Velocidade: O código resultante de uma compilação C++ é muito eficiente, devido a sua dualidade de linguagem de Alto e Baixo nível e do tamanho reduzido da linguagem em si;
- Não há um "dono" da linguagem. Há vários compiladores e sistemas operacionais que utilizam o padrão C/C++ ANSI. Isto significa na prática que esta linguagem tem inúmeros patrocinadores, famosos e anônimos. Isto mantém o suporte sempre muito atualizado e disponível pela internet.
- C++ é desenvolvido para fornecer ao programador múltiplas escolhas, mesmo que seja possível ao programador escolher a opção errada.
Vantagens
- Produção de código o quanto mais eficiente possível;
- Possibilidade em programação de alto e baixo nível;
- Alta flexibilidade, portabilidade e consistência;
- Adequado para grandes projetos;
- Não está sob o domínio de uma empresa (em contraste do Java — Sun ou Visual Basic — Microsoft);
- Padronização pela ISO;
- Grandes possibilidades para a meta-programação e programação genérica;
- Compatibilidade com C, resultando em vasta base de códigos.
Desvantagens
- Compatibilidade com o C, herdou os problemas de entendimento de sintaxe do mesmo;
- Os compiladores atuais nem sempre produzem o código mais otimizado, tanto em velocidade quando tamanho do código;
- Grande período para o aprendizado;
- A biblioteca padrão não cobre áreas importantes da programação, como threads, conexões TCP/IP, interface gráfica e manipulação de sistemas de arquivos, o que implica na necessidade de criação de bibliotecas próprias para tal, que pecam em portabilidade;
- Devido à grande flexibilidade no desenvolvimento, é recomendado o uso de padrões de programação mais amplamente que em outras linguagens.
Críticas
"C faz com que dar um tiro no pé seja fácil; C++ torna isso mais difícil, mas quando nós o fazemos arrebentamos com a perna toda." - Bjarne Stroustrup
A linguagem é por vezes criticada como sendo muito complicada e, portanto, difícil de dominar completamente, porque ele inclui a maior parte da linguagem de programação C como um subconjunto. C++ também herda muitas das críticas feitas ao C.
Outras críticas relacionam-se à ausência de funcionalidades, como a falta de facilidades multithreading "nativas" -- recurso presente em alguns outras linguagens como, por exemplo, Ada, C# e Java. O atual padrão C++11 resolve este problema, adicionando suporte para concorrência direta com a linguagem, mas no momento isto só é possível usando chamadas do sistema operacional ou bibliotecas de terceiros.
C++ também é por vezes comparada desfavoravelmente com linguagens como Eiffel, Java ou Smalltalk por permitir aos programadores "misturar e combinar" estilos de programação declarativa, funcional, genérico, modular, e processuais com programação orientada a objetos, ao invés de estritamente impor um estilo único, embora C++ seja intencionalmente uma linguagem multi-paradigma.
Um artigo satírico amplamente distribuído apresenta uma suposta entrevista com Bjarne Stroustrup em 1998 que seria publicada na revista Computer, editada pela IEEE Computer Society. Nela haveria a confissão de que C++ foi deliberadamente concebida para ser complexa e difícil, com o intuito de eliminar programadores amadores e elevar os salários dos poucos programadores capazes de dominar a linguagem. A seção FAQ do site pessoal Stroustrup contém uma negação e um link para a entrevista real.
Outro ponto de crítica é a característica de herança múltipla, cujo uso descuidado produz uma codificação confusa e de manutenção difícil. Um exemplo é o problema conhecido como Diamond problem.
Conclusão
Um dos objetivos da criação da linguagem de programação C++ foi a programação orientada à objetos pois, possibilita ao programador projetar aplicações de um ponto de vista mais parecido, com comunicação entre objetos. O programador pode programar tanto em alto nível como em baixo nível, entre outras coisas. Porém, devido à semelhança que possui com a linguagem de programação C, herdou os seus problemas de entendimento de sintaxe.
C++ foi escolhida por possuir uma proposta de uso genérico, ser rápido e portável para diversas plataformas e também por apresentar grandes possibilidades para a meta-programação e programação genérica.
É uma linguagem complexa, utilizada principalmente por programadores profissionais.