Introdução a C++

 

    O C++ foi inicialmente desenvolvido por Bjarne Stroustrup dos Bell Labs, durante a década de 1980 com o objetivo implementar uma versão distribuída do núcleo Unix. Como o Unix era escrito em C, dever-se-ia manter a compatibilidade, ainda que adicionando novos recursos. Alguns dos desafios incluíam simular a infraestrutura da comunicação entre processos num sistema distribuído ou de memória compartilhada e escrever drivers para tal sistema. Stroustrup percebeu que a linguagem Simula 67 possuía características bastante úteis para o desenvolvimento de software, mas que era muito lenta para uso prático. Por outro lado, a linguagem BCPL era rápida, mas possuía demasiado baixo nível, dificultando sua utilização no desenvolvimento de aplicações. A partir de sua experiência de doutorado, começou a acrescentar elementos do Simula 67 no C, especialmente os recursos de criação e manipulação de objetos. 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.

    Ainda em 1983 o nome da linguagem foi alterado de C with Classes para C++. Antes implementada usando um pré-processador, a linguagem passou a exigir um compilador próprio, escrito pelo próprio Stroustrup. 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 ( // ).

    C++ é uma linguagem de programação multi-paradigma e de uso geral. A linguagem é considerada de médio nível, pois combina características de linguagens de alto e baixo níveis. Desde os anos 1990 é uma das linguagens comerciais mais populares, sendo bastante usada por seu grande desempenho e base de utilizadores. Por ser multi-paradigma C++ dá suporte a reusabilidade, ou seja, é possível criar de forma bem harmoniosa o seu código.

    Algumas dicas para reusabilidade/reutilização bem sucedida em C++:

  • Criar classes com interfaces pequenas e facilmente inteligíveis;
  • Definir suas classes com funções de entrada (read) e saída (write);
  • Procurar algoritmos de finalidade especial que possam ser generalizados.

   

    A Linguagem C++ não possui uma boa ortogonalidade, pois ao programar se tem a necessidade de especificar as variáveis e delimitar as instruçoes de atribuição, além disso possue uma regra comum em C que é uma falta de ortogonalidade: parâmetros são passados por valor, a menos que sejam matriz, em cujo caso são, com efeito, passados por referência ( porque o aparecimento do nome de uma matriz isoladamente, ou seja, sem nenhum colchete, em um programa em C++ é interpretado como o endereço do primeiro elemento da matriz).

    A abordagem "small is beaultifull" é muito importante no projeto de classes C++. Criação de objetos que possam ser persistentes pode ajudar a ampliar a utilização de muitos componentes. 

    Em muitos projetos de desenvolvimento em C++, há um pequeno número de classes centrais, com interfaces grandes e complexas. Um projeto desse tipo é uma garantia de que essas classes serão específicas para uma única aplicação.

   A melhor estratégia é criar um grande número de classes individualmente mais simples, e potencialmente mais reutilizáveis. Classes muito grandes são geralmente o resultado de se reprojetar um sistema já existente, cujo projeto não foi orientado a objeto, mas se você planeja continuar a fazer modificações no projeto ao longo do tempo, você tem que começar a decompor o antigo sistema em termos de grupos lógicos de dados.

    Portabilidade em C++: 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; Contudo 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.

    Novas características foram adicionadas com o tempo, como funções virtuais, sobrecarga de operadores, herança múltipla, gabaritos e tratamento de exceções. Após a padronização ISO realizada em 1998/1999 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.

    Por muito tempo, o C++ foi encarado como um superconjunto do C. Entretanto, em 1999 o novo padrão ISO para a linguagem C tornou as duas linguagens ainda mais diferentes entre si. Devido a essas incompatibilidades, muitas empresas que desenvolvem compiladores não oferecem suporte à versão mais recente da linguagem C.

    Pode-se dizer que C++ foi a única linguagem entre tantas outras que obteve sucesso como uma sucessora à linguagem C, inclusive servindo de inspiração para outras linguagens como Java, a IDL de CORBA e C♯.

    

    Filosofia

    No livro In The Design and Evolution of C++ (1994), Bjarne Stroustrup descreve algumas regras que ele utiliza para desenvolver a linguagem, como exemplificado abaixo:

  • C++ é desenvolvido para ser uma linguagem tipada estaticamente e de propósito geral que é tão eficiente e portátil quanto o C;
  • C++ é desenvolvido para suportar múltiplos paradigmas;
  • C++ é desenvolvido para fornecer ao programador escolhas, mesmo que seja possível ao programador escolher a opção errada;
  • C++ é desenvolvido para ser o mais compatível com C possível, fornecendo transições simples para código C;
  • C++ evita fornecer facilidades que são específicas a certas plataformas ou a certos grupos de desenvolvedores;
  • C++ não exige overhead para facilidades que não são utilizadas;
  • C++ é desenvolvido para ser utilizado mesmo sem um ambiente de desenvolvimento sofisticado.

 

Fontes: 

pt.wikipedia.org/wiki/C%2B%2B

www.arnaut.eti.br/op/CPPAR001.htm

pt.wikiversity.org/wiki/Introdu%C3%A7%C3%A3o_%C3%A0s_Linguagens_de_Programa%C3%A7%C3%A3o/C_e_C%2B%2B

Conceito de linguagens de Programação - 5ª Edição - Robert W. Sebesta