Jiraspiom

Blog Pessoal

Lição 01

Lição 1 – Introdução e Breve História

Introdução ao C++

O C++ é uma linguagem de programação de alto nível(¹) com facilidades para o uso em baixo nível(²) (herdados do C), multiparadigma e de uso geral. Desde os anos 1990 é uma das linguagens comerciais mais populares, sendo bastante usada também na academia por seu grande desempenho e base de utilizadores.

Durante sua fase inicial de desenvolvimento, a linguagem era chamada “novo C” ou ainda “C com classes”. O termo “C++” é creditado a Rick Mascitti, e foi utilizado pela primeira vez em dezembro de 1983. Ele é uma referência ao operador de incremento ++, significando um acréscimo (uma evolução) à linguagem C.

Breve História do C e do C++

A linguagem C foi desenvolvida por Denis Richard em 1972 e teve origem na linguagem B, desenvolvida por Ken Thompson, em 1970. C teve sua divulgação e sucesso graças à vendagem do livro “The C Programmign Language” e ao fato de ser independente de hardware. Vale notar que C e o Sistema Operacional Unix foram desenvolvidos conjuntamente, o que faz que ambientes Unix, Linux e MacOS X e a linguagem C tenham uma interação forte.

BjarneStroustrupFigura – 1

Em 1980, Bjarne Stroustrup desenvolveu o C++ no Bell Labs como um adicional à linguagem C. Hoje em dia quase todas as grandes empresas que desenvolvem softwares usam C++. Mas a pergunta principal é: “Devemos aprender primeiro o C e depois C++ ou ir direto ao C++? Bjarne Stroustrup afirmou em 1999: “estou firmemente convencido de que é melhor ir direto ao C++”.

Algumas novidades…

A linguagem C++ consegue agrupar uma funcionalidade que envolve formulações como classes, altamente abstratas, que permitem um trabalho de alto nível e formulações de baixo nível. Com isso é uma das melhores LPs (Linguagens de Programação) que existem. As principais novidades existentes no C++ em relação ao C são:

Uso de classes, funções, inline, conversão de tipo, verificação de argumentos de uma função, operadores para gerenciamento de memória, referências, constantes, sobrecarga de operador, sobrecarga de funções, polimorfismo, templates (gabaritos), tratamento de exceções e espaços de nomes (namespace). Também podemos citar o aumento da produtividade, maior reaproveitamento de código, maior qualidade geral do projeto, facilidade de extensão e manutenção. Maior compreensão geral pela equipe de desenvolvimento, já que com C++ um único programador é apto gerenciar uma quantidade maior do código.

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#.

É importante dizer que uma parte curso está baseado guia do C++ Tutorial, cujo link está disponibilizado na bibliografia.

(¹) Linguagem de programação de baixo nível, próximas a máquina, como Assembly
(²)Linguagem de programação de alto nível, no nível da especificação de algoritmos, como Pascal, Fortran, Java, C, C++

OBS: ainda temos as Linguagem de programação de muito alto nível, no nível da especificação declarativa, como SQL.

Características do C++

Algumas regras que o próprio Bjarne Stroustrup utilizou para desenvolver a linguagem são:

  • C++ é desenvolvido para ser uma linguagem tipada (forte uso de tipos dinâmicos) estaticamente e de proposta geral que é tão eficiente e portável quanto o C;
  • C++ é desenvolvido para suportar múltiplos paradigmas de linguagem (Orientada a Objetos, Estruturada, Funcional, lógica, etc);
  • C++ é desenvolvido para fornecer ao programador escolhas, mesmo que seja possível ao programador escolher a opção errada;
  • C++ é desenvolvido para ser o quanto 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 (tempo de processamento excessivo) para facilidades que não são utilizadas;
  • C++ é desenvolvido para ser utilizado mesmo sem um ambiente de desenvolvimento sofisticado.

Alguns conceitos básicos

Debuger
Ajuda o programador a encontrar os erros de programação, famosos bugs.

Profiler
Ajuda a identificar os pontos onde o programa está sendo lento, ou que consomem mais tempo; com isso pode-se melhorar a qualidade do programa e sua velocidade. Apenas rodamos o programa dentro do profiler e analisamos os resultados de tempo de execução de cada método ou função.

Linker
Transforma um ou mais arquivos *.o (no Unix/Linux) em um arquivo executável. Os arquivos que serão unidos são definidos em um arquivo de projeto ou em um arquivo makefile. No linux, depois de linkado, um programa tem um arquivo ‘a.out’. Os erros de ligação são detectados pelo linker.

Compilador
Encontra erros de sintaxe do programa e realiza a tradução do código em linguagem de máquina. Após o processo, o programa passa a ter um arquivo ‘*.o’.

Ambientes de Desenvolvimento

Antes de começarmos a teoria propriamente dita, abaixo serão listados os principais ambientes de desenvolvimento C++, sejam eles compiladores ou ambientes de desenvolvimento integrado (IDE) que rodam em ambiente Linux:
G++ Um componente do GCC, compilador padrão do Projecto GNU.
Intel C++ Produz código otimizado para processadores Intel.
C++ Builder Ferramenta da Borland que oferece versões antigas gratuitas sem presença de IDE. Possui integração com Delphi.
Comeau C++ Pode ser experimentado pela Internet.
Eclipse Disponível para C++ através da extensão CDT.
Code::Blocks Ambiente aberto e multi-plataforma, em sua versão para Windows utiliza o compilador MinGW, apesar de também suportar outros compiladores como o Visual C++, Digital Mars, Borland C++ 5.5 e Open Watcom.
Não mostrarei métodos de instalação no curso pois, além de serem extremamente triviais, são muitos os compiladores existentes. Para dúvidas, procure um tutorial ou guia de instalação de seu compilador favorito, ou mesmo entre em contato com os monitores no fórum de dúvidas.

Compilando um arquivo C++

Em ambientes GNU/Linux, no nosso caso o Debian, podemos compilar um arquivo gerado na linguagem C++ usando alguma IDE ou pelo próprio terminal. No caso de estarmos usando o GCC pelo terminal, compilamos o arquivo desta maneira:

# g++ [nome_do_arquivo_fonte].cpp -o [nome_do_arquivo_executavel]


,onde -o
[nome_do_arquivo_executavel] é uma das várias opções de uso que temos disponíveis.

Se quisermos saber outras opções do gcc, basta digitarmos g++ –help e temos uma lista de opções que o compilador fornece.

Exemplo de compilação de um arquivo nomeado teste.cpp:

# g++ teste.cpp -o testesaida

Para executar podemos fazer:

# ./testesaida

Incompatibilidades

Considerar o C++ como um superconjunto, uma linguagem que implementa completamente o C e adiciona novas funcionalidades ao C é um erro. Grande parte do código C pode ser perfeitamente compilado em C++, mas existem algumas diferenças sintáticas e semânticas entre elas que tornam alguns trechos de código C válidos em código C++ inválido, ou códigos que exibem comportamentos diferentes em cada linguagem. A mais comum é que C permite conversão implícita entre o tipo void* para ponteiros para outros tipos, algo que o C++ não permite. Seria inválido então o seguinte código em C++:

int *i = malloc(sizeof(int) * 5);


, a não ser que explicitemos a conversão:

int *i = (int *) malloc(sizeof(int) * 5);


Outro ponto é o fato do C++ adicionar novas palavras reservadas, como new e class, que podem ser utilizadas como identificadores (por exemplo nomes de variáveis) em C, gerando incompatibilidade.

Anúncios
%d blogueiros gostam disto: