366_c ou c++

Upload: edson-bt

Post on 08-Jul-2015

60 views

Category:

Documents


0 download

TRANSCRIPT

C / C++ e Orientao a Objetos em Ambiente MultiplataformaPor: Sergio Barbosa Villas-Boas, Ph.D.Professor Adjunto do DEL - Departamento de Eletrnica e Computao da UFRJ. (www.del.ufrj.br)

Resumo do Currculo:Tcnico Eletrnico pelo CEFET-RJ Engenheiro Eletrnico pelo DEL, UFRJ M.Sc. em Engenharia Eltrica pela COPPE PEE - Controle Ph.D. em Engenharia de Controle por Chiba University - Japo MBA em Inteligncia Empresarial e Gesto do Conhecimento (MBKM) 1981 1987 1991 1998 2000 www.cefet-rj.br www.del.ufrj.br www.coep.ufrj.br www.chiba-u.ac.jp www.crie.coppe.ufrj.br/mbkm/

Email do Autor:[email protected]

URL do Autor:www.del.ufrj.br/~villas

URL do Livro:www.del.ufrj.br/~villas/livro_c++.html

Verso do Livro: 5.1, de 17 de Agosto de 2001

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 2

ndice

ndice ........................................................................................................................................................2 Captulo 1) Introduo............................................................................................................................17 1.1 1.2 1.3 1.3.1 1.3.2 1.4 1.4.1 1.5 1.5.1 1.5.2 1.5.3 1.6 1.6.1 1.6.2 1.7 1.8 1.9 1.10 1.11 1.11.1 2.1 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 Prefcio...................................................................................................................................17 Histrico do livro....................................................................................................................19 Escolha de uma tecnologia: uma deciso estratgica .............................................................20 Caractersticas do produto software Incorporao de novidades 22 Mercadoria e produto diferenciado ........................................................................................24 Mercadoria escassa 24 Sociedade do conhecimento ...................................................................................................25 Mudana do paradigma de negcios Mercadorizao 26 Remunerao agregao de valor na cadeia produtiva 27 Porque C/C++ ? ......................................................................................................................27 Tribos de tecnologia 27 A escolha tecnolgica uma escolha estratgica 28 Breve histria do C/C++.........................................................................................................30 Qualidades da Linguagem C/C++ ..........................................................................................31 Classificao de interfaces de programas...............................................................................32 Programando para console .....................................................................................................32 Linguagens de programao de computador..........................................................................33 Alto nvel baixo nvel 33 26 21

Captulo 2) Conhea o Seu Compilador.................................................................................................35 Visual C++ 6.0 .......................................................................................................................35 Reconhecendo o Compilador Hello world para DOS 2.1.2.1 Usando o Help Bibliotecas 46 45 46 41 35

Adicionando argumentos para a linha de comando....................................................44

Projetos (programas com mltiplos fontes)

C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 3

2.1.5.1 2.1.5.2 2.1.5.3 2.1.6 2.1.7 Debug 2.1.7.1 2.1.7.2 2.1.7.3 2.1.7.4 2.1.7.5 2.1.8 2.2 2.2.1 2.2.2 2.3 2.3.1

Fazer uma biblioteca ..................................................................................................46 Incluir uma biblioteca num projeto ............................................................................48 Examinar uma biblioteca............................................................................................48 48 Acrescentando Lib no Project Settings ......................................................................49 Class View..................................................................................................................50 Usando bibliotecas de ligao dinmica (DLL) .........................................................51 DLL para Windows ....................................................................................................55 Otimizao do linker para alinhamento de cdigo .....................................................55 55

Dicas extras 49

Detectando vazamento de memria Reconhecendo o Compilador Hello world para DOS 2.2.2.1 57 57

Borland C++ builder 5.0.........................................................................................................56

Adicionando argumentos para a linha de comando....................................................59 60

C++ for win32 gratuito...........................................................................................................60 Ming (da GNU)

Livro patrocinado, que histria essa ?Vivemos atualmente num mundo conectado e globalizado. H tecnologia de sobra para copiar conhecimentos em praticamente qualquer forma que possa ser registrado. Portanto, tentar bloquear a cpia do texto pode ser um trabalho de remar contra a mar. Optei por disponibilizar gratuitamente a verso em PDF desse texto. Ao faze-lo, investigo um modelo de negcios que pode ser o mais adequado ao ambiente atual. O autor do texto pode doar seu material se quiser, e o que estou fazendo. Mas ao faze-lo, a atividade de dar autoria ao texto torna-se obviamente no remunerada. Ento que estmulo teria o autor em fazer o texto ? Resposta: usa-se o texto como veculo para mensagens de patrocinadores. Isso feito nesses quadros, inseridos nas pginas de ndice. Esse livro no est pronto ainda. H trechos por melhorar, e outros a acrescentar. Procure por novas verses a cada incio de semestre.

C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 4

2.3.2 2.4 2.4.1 2.4.2 2.4.3 2.4.4

djgpp

60 61 61 61

g++ (do unix)..........................................................................................................................60 Hello world 2.4.1.1 Usando o Help Bibliotecas 62 2.4.4.1 2.4.4.2 2.4.4.3 Incluir uma biblioteca num projeto ............................................................................62 Fazer uma biblioteca ..................................................................................................62 Examinar uma biblioteca............................................................................................62 63 Instalando uma biblioteca dinmica ...........................................................................64 65 66 Adicionando argumentos para a linha de comando....................................................61

Projetos (programas com mltiplos fontes)

2.4.5 2.4.6 2.4.7 2.4.8

Fazendo uma biblioteca usando libtool 2.4.5.1 Debug

Definindo um identificador para compilao condicional 65 O pacote RPM do linux 2.4.8.1 2.4.8.2 rpm binrio e rpm com fonte ......................................................................................66 Alguns comandos do rpm...........................................................................................66

Patrocine essa publicaoPblico Alvo: Profissionais e estudantes de tecnologia de informao. Circulao: Esse texto literatura recomendada para cerca de 100 alunos por ano (circulao mnima). Considerando as verses anteriores do livro, pelo menos 200 alunos j usaram esse texto. Os alunos so usurios influenciadores, que mostram o material em empresas que trabalham. Na pgina web do livro h uma lista de interessados em receber notcia sobre novas verses do livro. O nmero de pessoas que deseja receber notcias sobre o livro mostrado na pgina web. Sendo que o formato do livro em PDF pode ser copiado livremente, no h registro de quantas cpias esto efetivamente em circulao, mas seguramente muito mais que o nmero de pessoas mostrado na pgina web do livro. Periodicidade: A cada semestre, o texto atualizado e melhorado. A nova verso corrente do texto pode sempre ser copiada a partir da pgina web. A prxima verso est programada para incio de 2002.

C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 5

2.4.8.3

Construindo um rpm...................................................................................................67

2.4.8.3.1 Introduo.............................................................................................................67 2.4.8.3.2 O header ...............................................................................................................68 2.4.8.3.3 Preparao (prep)..................................................................................................69 Captulo 3) Princpios de C/C++ ............................................................................................................70 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 O primeiro programa ..............................................................................................................70 Formato livre ..........................................................................................................................70 Chamada de funo ................................................................................................................70 Declarao e definio de funes .........................................................................................71 Comentrios............................................................................................................................71 Identificador ...........................................................................................................................72 Constantes literais...................................................................................................................72 Escopo ....................................................................................................................................72 Tipos de dados padro (Standard Data Types) ......................................................................73 Palavras reservadas do C++ (keywords) ................................................................................74 Letras usadas em pontuao ...................................................................................................74 Letras usadas em operadores ..................................................................................................74

Surgiram oportunidades profissionais ? lembre-se do autor ! http://www.del.ufrj.br/~villasO primeiro patrocinador o autor, cujos dados de contato esto divulgados no texto. Espero ser lembrado pelos leitores em consultorias, projetos, cursos ou empreendimentos que surjam, no ambiente profissional sempre em grande mutao. Como membro da comunidade acadmica, sou entusiasta defensor de uma parceria tipo ganha-ganha entre universidade e empresas privadas ou pblicas. Acredito que implantar com sucesso esse tipo de parceria fator essencial de desenvolvimento econmico e social. Qualquer pas precisa muito disso. No caso do Brasil, a necessidade de que a inteligncia das universidades seja traduzida em desenvolvimento econmico e bem estar social evidente e urgente. Veja slides desse livro na web em http://del.ufrj.br/~villas/slides.html

C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 6

Captulo 4) Estrutura do Compilador .....................................................................................................75 4.1 4.2 4.3 4.4 4.5 4.5.1 4.5.2 4.6 5.1 5.2 5.3 5.4 5.5 5.6 5.7 Entendendo o Compilador......................................................................................................75 Prottipos (prototypes) ...........................................................................................................76 Projetos em C/C++ .................................................................................................................77 Header Files (*.h)...................................................................................................................79 Biblioteca (library).................................................................................................................79 Utilizando Bibliotecas prontas Fazendo bibliotecas 80 Regras do compilador.............................................................................................................82 Chamada de funo por referncia e por valor.......................................................................84 Tipos de dados definidos pelo programador ..........................................................................85 Maquiagem de tipos (type casting) ........................................................................................85 Operaes matemticas ..........................................................................................................86 Controle de fluxo do programa ..............................................................................................86 Execuo condicional.............................................................................................................87 Laos (loop) de programao .................................................................................................87 80

Captulo 5) Fundamentos de C /C++......................................................................................................84

Balico o mercado de trabalho na web http://www.balico.com.br

O Balico um sistema na web para cadastrar profissionais a procura de emprego, e empresas com ofertas de emprego. O sistema permite o cadastro imediato e gratuito tanto de empresas quanto de profissionais. Formulrios especficos do perfil para as empresas e para os profissionais, de forma que as buscas por oportunidades so eficientes e focadas. Se voc est procurando talentos, o Balico o melhor local para veicular o seu anncio.

C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 7

5.7.1 5.7.2 5.7.3 5.7.4 5.7.5 5.8 5.9 5.9.1 5.10 5.11 5.12 5.13 5.14 5.15 5.16 6.1

Lao tipo do-while while for 88 88

87

Alterando o controle dos laos com break e continue Exerccio 89

89

switch-case .............................................................................................................................90 arrays ......................................................................................................................................90 Arrays multidimensionais 92 Parmetros da funo main ....................................................................................................92 Compilao condicional .........................................................................................................93 Pr processador e tokens (smbolos) usados pelo pr-processador ........................................93 #define ....................................................................................................................................94 operador # ..............................................................................................................................94 operador ## ............................................................................................................................94 Nmero varivel de parmetros..............................................................................................95 Reutilizao de cdigo ...........................................................................................................96

Captulo 6) Tcnicas para melhoria de rendimento em programao....................................................96

Vogsys http://www.vogsys.com.br/

A Vogsys Consultoria e Desenvolvimento de Sistemas, uma empresa especializada no fornecimento de solues integradas para o segmento de mdia, possui uma expressiva participao no mercado de publicao impressa e on-line.

C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 8

6.2 6.3 7.1 7.1.1 7.1.2 7.1.3 7.2 7.3 7.3.1 7.4 7.5 7.6 7.7 7.7.1 7.7.2 7.7.3

Desenvolvimento e utilizao de componentes......................................................................97 Programao estruturada ........................................................................................................98 Introduo...............................................................................................................................99 Abstrao do software Objetos 100 99 Mudana de nomenclatura 100 Introduo a anlise orientada a objetos...............................................................................100 Polimorfismo ........................................................................................................................101 Argumento implcito (default argument) 102 Uso de classes.......................................................................................................................102 Herana.................................................................................................................................103 Sobrecarga de operadores.....................................................................................................106 Construtor e destrutor de um objeto .....................................................................................107 Default constructor (construtor implcito) 108 Ordem de chamada de construtor e destrutor para classes derivadas Inicializao de atributos com construtor no implcito 109 108

Captulo 7) Programao orientada a objeto ..........................................................................................99

VBMcgi programao para Internet (CGI) com C++ http://www.vbmcgi.org

Para quem sabe C++, ou quer saber, VBMcgi a melhor opo para programao de sistemas de software para Internet. Trata-se de uma biblioteca gratuita, distribuda com cdigo fonte original. A sua melhor caracterstica o fato de isolar o trabalho do webmaster do webdesigner. Isto , o webdesigner pode usar programas de HTML comerciais, como Dream Weaver ou Front Page. Apenas o webmaster programador C++ e lida com banco de dados. Alm disso, VBMcgi multiplataforma, testado em Windows e Unix. Quem desenvolve usando ASP, PHP, JSP (java), Perl ou Cold Fusion, pode usar com C++ e VBMcgi. No h problema em usar ao mesmo tempo C++/VBMcgi e outra tecnologia.

C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 9

7.7.4 7.8 7.9 7.10 7.10.1 7.11 7.12 7.12.1 7.12.2 7.12.3 8.1 8.2 8.3 8.4 8.4.1 8.4.2

Copy constructor (construtor de cpia)

110

lvalue ....................................................................................................................................111 Encapsulamento de atributos e mtodos ..............................................................................112 Unio adiantada unio atrasada (early bind late bind) ..................................................114 Destrutores virtuais 116 Classe base virtual ................................................................................................................117 Alocao de Memria ..........................................................................................................119 Vazamento de memria 120 121 123 Objetos com memria alocada

Array de objetos com construtor no padro

Captulo 8) Biblioteca padro de C++..................................................................................................125 Introduo.............................................................................................................................125 Entrada e sada de dados pelo console .................................................................................125 Sobrecarga do operador insersor ()..........................................................126 Formatando Entrada / Saida com streams ............................................................................127 Usando flags de formatao 128 129 Examinando os flags de um objeto ios

VBLib biblioteca gratuita multiplataforma para uso geral http://www.vbmcgi.org/vblibPara quem usa C++, a VBLib oferece algumas classes bastante teis. A VBMcgi usa VBLib. Classe genrica (template) para lista encadeada (class VBList) Classe de string fcil e poderosa (class VBString) Classe para detectar vazamento de memria (VisualC++ only) VBMemCheck Classe para ajudar a medio de tempo (class VBClock) Classe para mostrar o contedo de um contenedor STL (class VBShowSTLContainer) Uma classe de calendrio, que retorna o dia da semana para uma data dada (class VBCalendar)

C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 10

8.4.3 8.4.4 8.4.5 8.4.6 8.4.7 8.5 8.5.1 8.5.2 8.5.3 8.5.4 8.5.5 8.6 8.6.1 8.6.2 8.6.3 8.6.4

Definindo o nmero de algarismos significativos 130 Preenchendo os espaos vazios com o mtodo fill 131 Manipuladores padro 131 133 134 Manipuladores do usurio 132 Sada com stream em buffer Acesso a disco (Arquivos de texto para leitura/escrita) .......................................................134 Escrevendo um arquivo de texto usando a biblioteca padro de C++ Escrevendo um arquivo de texto usando a biblioteca padro de C 134 Lendo um arquivo de texto usando a biblioteca padro de C++ Dica para leitura de arquivo de texto. 135 136 136 Lendo um arquivo de texto usando a biblioteca padro de C 135

Acesso a disco (Arquivos binrios para leitura/escrita) .......................................................136 Escrevendo um arquivo binrio usando a biblioteca padro de C++ Escrevendo um arquivo binrio usando a biblioteca padro de C. 137 Lendo um arquivo binrio usando a biblioteca padro de C++ Lendo um arquivo binrio usando a biblioteca padro de C 138 138

Captulo 9) Programao genrica (template)......................................................................................140

VBMath biblioteca gratuita multiplataforma para matemtica http://www.vbmcgi.org/vbmathPara quem usa C++, a VBMath oferece classes para matemtica matricial. Desenvolvida em programao genrica (template), o usurio pode facilmente criar classes matriciais codificadas com float, double ou long double, por exemplo. As funes bsicas de operao matemtica matricial esto implementadas (+, -, *, /, inverse, etc). Essa biblioteca recomendada para implementao de contas matriciais de pequena dimenso, ou quando o requerimento de desempenho de execuo no severo. Nesse caso, aproveita-se a vantagem de fazer o programa de forma rpida e facilmente compreensvel. Tambm est implementada uma classe (genrica) VBParser para calcular em tempo de execuo o resultado de uma frmula matemtica.

C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 11

9.1 9.2

Uma lista encadeada simples com template .........................................................................141 VBMath - uma biblioteca de matemtica matricial usando classe template ........................146

Captulo 10) Tratamento de exceo (exception handling)..................................................................152 Captulo 11) RTTI Identificao em tempo de execuo..................................................................154 11.1 11.2 12.1 12.2 12.3 12.4 13.1 13.1.1 13.1.2 13.1.3 13.2 Introduo.............................................................................................................................154 typeid ....................................................................................................................................154 Introduo.............................................................................................................................156 Namespace aberto.................................................................................................................157 Biblioteca padro de C++ usando namespace......................................................................158 Adaptando uma biblioteca existente para uso de namespace std .........................................159 Introduo.............................................................................................................................161 Classes contenedoras Classes iteradoras 162 Algoritmos 162 Prembulo.............................................................................................................................162 161

Captulo 12) namespace .......................................................................................................................156

Captulo 13) STL - Standard Template Library ...................................................................................161

Confraria de Mercado restaurante & palestras: encontre-se aqui http://www.confrariademercado.com.br

A Confraria de Mercado o seu ponto de encontro no Rio de Janeiro, no bairro de Botafogo (em frente a um estacionamento). um restaurante que com comida muito boa, no estilo simple chic. Mas o grande diferencial o fato de ter infra-estrutura para apresentao de palestras, com projetor (datashow) sofisticado, ligado a um computador moderno com Internet, a um vdeo cassete e ao sinal de TV a cabo. A agenda de palestras e eventos (sempre gratuitos) pode ser conferida no site, assim como mapa para chegar l, informaes de contato, etc. Para quem se cadastrar, a confraria envia propaganda dos eventos por email. Quem precisar de um local para almoo de negcios, pode reservar o local. Marque sua comemorao de formatura na Confraria de Mercado !

C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 12

13.2.1 13.2.2 13.2.3 13.2.4 13.2.5 13.3 13.3.1 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.4.5 13.4.6

Classes e funes auxiliares 13.2.1.1 Operadores de comparao 164 Classes de comparao 165 Classes aritmticas e lgicas Complexidade de um algoritmo 13.2.5.1

164

Par (pair)...............................................................................................................164

167 167

Algumas regras.....................................................................................................168

Iterador (iterator) ..................................................................................................................168 Iteradores padro para insero em contenedores 169 Contenedor (container).........................................................................................................170 Vector List 171 Pilha (Stack) Fila (Queue) 172 173 174 175 170

Fila com prioridade (priority queue) Contenedores associativos ordenados 13.4.6.1

Set .........................................................................................................................176

Kmail email com inteligncia. Venha para K voc tambm. http://www.kmail.com.br

Kmail a marca que representa tecnologia de email inteligente. Filtros de email, logs especializados de email e segurana de email so alguns dos servios que se sabe prestar. Na pgina da Internet, oferece-se servio inteligente e gratuito de redirecionamento de email. O cadastro feito imediatamente, e o redirecionamento feito para at 5 locais, com filtros independentes.

C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 13

13.4.6.2 13.4.6.3 13.4.6.4 13.5 13.5.1 14.1 14.1.1 14.1.2 14.1.3 14.2 14.2.1 14.3 14.3.1 14.3.2 14.3.3 14.3.4

Multiset.................................................................................................................177 Map.......................................................................................................................178 Multimap ..............................................................................................................179

Algoritmos............................................................................................................................179 remove_if 179 Para Windows & DOS .........................................................................................................181 Programa para listar o diretrio corrente (Visual C++) Porta Serial 182 Porta Paralela 182 183 Componentes para unix (inclui Linux).................................................................................183 Entrada cega (til para entrada de password) Conceitos de programao em tempo real 184 Programa em tempo real com status loop Programa em tempo real com interrupo 186 Programas tipo watch dog (co de guarda) 188 184 Elementos de programao em tempo real...........................................................................184 181

Captulo 14) Componentes de Programao ........................................................................................181

DEL Departamento de Engenharia Eletrnica e de Computao da UFRJ

http://www.del.ufrj.brEm 1934 a UFRJ abriu o Departamento de Engenharia Eltrica (juntamente com a inaugurao de outros departamentos). Em 1962 o Departamento de Engenharia Eltrica passou para a sua atual localizao fsica, no Centro de Tecnologia, na Cidade Universitria (Ilha do Fundo, RJ). Em 1968, surge o DEL. O ento Departamento de Engenharia Eletrnica da UFRJ passa a atuar de forma independente do Departamento de Engenharia Eltrica. Em 1994 o DEL implantou uma mudana de currculo e incorporou computao ao seu escopo. A sigla DEL foi mantida, mas o nome passou a ser Departamento de Engenharia Eletrnica e de Computao da UFRJ. O DEL atua em nvel de graduao, mas tem forte integrao com programas de ps graduao da COPPE. No ano de 2001, o DEL conta com 33 professores, sendo 23 (70%) com doutorado. Destes 29 (88%) tem dedicao exclusiva. O curso dura 5 anos e est com cerca de 500 alunos inscritos.

C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 14

Captulo 15) Boa programao m programao..............................................................................189 15.1 15.2 15.2.1 15.2.2 Introduo.............................................................................................................................189 Itens de boa programao.....................................................................................................190 Identao correta 15.2.2.1 15.2.2.2 15.2.3 15.2.4 15.2.5 15.2.6 15.2.7 16.1 16.2 16.3 16.4 190 190 No tratar strings diretamente, mas por classe de string

Motivos pelos quais m programao tratar strings diretamente ......................190 Soluo recomendada para tratamento de strings: uso de classe de string...........191 193 193 194

Acrescentar comentrios elucidativos Evitar uso de constantes relacionadas Modularidade do programa 193

Uso de nomes elucidativos para identificadores Programar em ingls 195

Captulo 16) Erros de programao, dicas e truques............................................................................197 Cuidado com o operador , (vrgula) .....................................................................................197 Acessando atributos privados de outro objeto......................................................................197 Entendendo o NaN ...............................................................................................................198 Uso de const_cast .................................................................................................................198

GEI Gesto Estratgica da Informao http://www.engenharia.ufrj.br/geiO GEI um curso de ps graduao latu sensu ministrado pelo DEL que surgiu para cumprir o papel de formar profissionais aptos a acompanhar as tendncias tecnolgicas do mercado. O GEI utiliza a bem sucedida experincia da Escola de Engenharia da Universidade Federal do Rio de Janeiro em cursos de especializao em diversas reas do conhecimento. O curso tem uma viso estratgica, e estar situado em um ambiente de economia globalizada, onde rapidez e preciso das decises so considerados requisitos bsicos. O curso dirigido a profissionais com nvel superior e alguma experincia na rea de tecnologia da informao, como analistas de sistemas, gerentes e usurios em geral. No segundo semestre de 2001, inicia-se a 4a turma do GEI.

C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 15

16.5 16.6 16.7 16.8 16.9 16.10 17.1 17.1.1 17.1.2 17.1.3 17.1.4 17.1.5 17.1.6 17.1.7 17.2 17.2.1

Passagem por valor de objetos com alocao de memria...................................................198 Sobrecarga de insersor e extrator quando se usa namespace ...............................................199 Inicializando um array esttico, membro de uma classe ......................................................200 SingleTon .............................................................................................................................200 Slicing in C++ ......................................................................................................................201 Dicas de uso de parmetro implcito ................................................................................202 Visual C++ 6.0 SP5 ..............................................................................................................204 for no isola escopo 204 205 205 Comportamento do ifstream quando o arquivo no existe 204 ios::nocreate no existe quando fstream usado com namespace std Namespace lookup no funciona em funes com argumento 205 Encadeamento de using no funciona 205 205 Erro em instanciamento explcito de funes com template Inabilidade de distinguir namespace global de local 206 Compilador probe inicializao de variveis membro estticas diretamente

Captulo 17) Incompatibilidades entre compiladores C++...................................................................204

Borland C++ Builder (verso 5.0, build 12.34)....................................................................206

TELECOM - Curso de Especializao em Sistemas de Telecomunicaes

http://www.lps.ufrj.br/telecom.html

O TELECOM um curso de ps graduao latu sensu ministrado pelo DEL que oferece a profissionais de nvel superior interessados nas modernas tcnicas de telecomunicaes conhecimentos tericos e prticos em sistemas de telecomunicaes, processamento digital de voz e imagem, sistemas de transmisso e recepo, telefonia mvel e redes de computadores.

C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 16

17.2.2 17.2.3 17.3 17.3.1

Erro na deduo de funes com template a partir de argumentos const 206 Erro na converso de const char * para std::string Valor do elemento em vector de STL 206 206 Gnu C++ (verso 2.91.66)....................................................................................................206

Captulo 18) Glossrio..........................................................................................................................208 Captulo 19) Bibliografia......................................................................................................................209 Captulo 20) ndice remissivo ..............................................................................................................210

Marlin http://www.marlin.com.br/

Empresa que atua na rea de acesso a Internet, hospedagem, comrcio eletrnico, smart cards, etc. Desenvolve solues baseadas em XML. A empresa parceira certificada Microsoft.

C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Captulo 1)

Introduo

1.1

Prefcio

A linguagem C/C++ um assunto relativamente tradicional no dinmico mercado de tecnologia de informao, sempre cheio de novidades. Existe um acervo bibliogrfico substancial sobre esse assunto. Portanto surge a pergunta: ainda h espao para um novo livro ensinando C/C++ ? Acredito firmemente que sim, pelos motivos que exponho a seguir. 1. C/C++ deve ser ensinado como multiplataforma. Ainda h relativamente poucos livros que enfatizam o aspecto multiplataforma dessa linguagem. Muitos livros se prope a ensinar C/C++ a partir de um compilador especfico. Mas eu considero isso um erro. A nfase no ensino de C/C++ deve ser em cima dos conceitos, e no no compilador ou no sistema operacional. No captulo Conhea o Seu Compilador (pgina 35), h um conjunto de explicaes sobre operacionalidade dos principais compiladores para Windows e unix. Alm disso, h um captulo sobre Diferenas entre compiladores (pagina 202), onde so listadas pequenas (porm importantes) diferenas de comportamento entre os compiladores. 2. Talvez seja um erro abandonar C++ pela linguagem java. A linguagem C++ implementa os conceitos de orientao a objetos, que so de grande valor em projetos de tecnologia de informao. Outras linguagens tambm o fazem. A linguagem java tambm implementa muito bem os conceitos de orientao a objetos, e claramente concorre com C++ como alternativa tecnolgica para implementao de projetos de sistemas. H um debate quente sobre C++ versus java. Vrias universidades acreditam que no mais necessrio ensinar C/C++, porque supostamente java a substituiria com vantagem de ser mais segura, elegante, robusta, portvel, etc. Eu sustento que embora a linguagem java tenha vrias qualidades, um erro parar de ensinar C/C++. Portanto, o mercado precisa seguir melhorando sempre o material tutorial para C/C++, inclusive porque h novidades acrescentadas a linguagem h relativamente pouco tempo, (e.g. namespace, RTTI, programao genrica com template, STL), e que precisam ser ensinadas com material didtico sempre melhorado. 3. Deve-se ensinar regras prticas para reutilizao de cdigo, e o trabalho em equipe. Ainda h relativamente poucos livros de C/C++ que enfatizam a reutilizao de cdigo e o trabalho em equipe. A linguagem C/C++ possui grande tradio. Na prtica isso significa que existem vrias bibliotecas e componentes disponveis para apoiar o desenvolvimento de projetos, sendo que boa parte desses componentes gratuita. Mas para ser capaz de usar esse tipo de componente preciso conhecimento. O foco apoiar a formao de profissionais que saibam participar na prtica de um esforo coletivo de desenvolvimento de um sistema. O programador deve saber usar um componente de software feito por outra pessoa, e explorar essa habilidade no sentido de maximizar seu desempenho profissional. Analogamente, preciso saber fazer um componente de software, que possa ser usado em diversos projetos diferentes, inclusive por outras pessoas. No captulo Boa programao m programao (pgina 189), enfatiza-se os aspectos que um programa deve ter para atingir as necessidades prticas de empresas e organizaes. Nesse captulo, o objetivo de se obter reutilizao de cdigo, trabalho em equipe, bem como mtodos prticos para minimizar a possibilidade de bugs traduzido em regras escritas.

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 18

4. C/C++ como escolha estratgica. O importante segmento de computao comercial tem geralmente resistncia a adotar C/C+ por considerar essa linguagem demasiado sofisticada, e portanto propensa a bugs. Alm disso, justamente por essa sofisticao, leva mais tempo para se formar um bom profissional de C/C++ em comparao com linguagens que foram projetadas para serem simples. Para as empresas, optar por trabalhar com C/C++ pode significar depender de profissionais mais escassos e mais caros. Se essa escolha faz aumentar o custo e o risco, sem oferecer uma vantagem palpvel em relao a uma linguagem mais fcil, claro que seria uma m escolha. Contudo, desde que consolida-se o ambiente empresarial de Sociedade do conhecimento (veja a seo 1.5 , na pgina 25), outras influncias podem fazer um estrategista de empresa querer optar por C/C++ por escolha estratgica. Ainda existem relativamente poucas referncias de programao em C/C++ para quem precisa atuar no rpido mercado de computao comercial. O texto tutorial deve ter linguagem deve ser o mais objetiva possvel, conter todos os exemplos que elucidam os conceitos usados na prtica, expor regras prticas para se obter resultados eficientes em empresas, etc. Esse livro tem essa proposta. 5. A linguagem C/C++ forte candidata para ser considerada como habilidade essencial e estratgica na formao de um profissional de tecnologia de informao, pelos motivos abaixo. a. O termo novidade no sinnimo de qualidade, especialmente no mercado de tecnologia de informao. Vrias tecnologias e linguagens mais novas que C++ introduzem diversas funcionalidades, mas no substituem-na em toda a sua potencialidade. b. O profissional que domina C/C++ altamente adaptvel, e deve continuar a s-lo. Na histria do mercado de tecnologia de informao, sempre houve espao para uso de C/C++. Ambientes to distintos quanto unix (todas as variantes), Windows, programao para Internet (CGI), banco de dados, computadores de grande porte, dispositivos digitais de mo, chips processadores sem sistema operacional, etc. podem valer-se de conhecimentos de C/C++ para que se gere programas executveis. a nica linguagem com essa abrangncia. Portanto, o profissional com conhecimentos de C/C++ sempre conseguiu se adaptar s mudanas que o mercado exigiu. Portanto, desenvolver sistemas em C/C++ considerado como escolha estratgica pessoal por muitos profissionais, isto , apesar de haver alternativa em outra linguagem, pode ser melhor fazer o sistema nessa linguagem para que se aumente sempre a habilidade essencial que se pretende definir numa carreira. No caso a habilidade essencial a capacidade de resolver o problema em questo usando componentes em C/C++. c. O mercado de software bsico possui tradio slida. H inmeros projetos j feitos em C/C++. Essa tradio por si s (leia-se: a necessidade de se manter o que j existe) j justifica a necessidade de se seguir formando profissionais capacitados nessa linguagem. Para quem trabalha com software bsico, a linguagem C/C++ absoluta. E h bastante mercado a se explorar no segmento de software bsico, que certamente bastante lucrativo. d. A linguagem C/C++ absoluta no segmento de software bsico. A experincia mostra que as tecnologias criam tribos de usurios em torno de si e essas tribos simplesmente no param de usar o que j aprenderam. Linguagens tradicionais como FORTRAN e COBOL se recusam a morrer, e continuam bastante vivas nos segmentos em que se estabeleceram h tempos (computao cientfica e comercial C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 19

respectivamente). A linguagem C/C++ absoluta no segmento de software bsico, com inmeros projetos no currculo, entre eles o kernel do sistema operacional unix. Somente por isso j haveria motivo suficiente para que se continuasse a ensinar C/C++. Ressalte-se que java no competidor efetivo com C/C++ nesse segmento. e. H inmeros grupos de ajuda no uso, farta bibliografia (inclusive gratuita), famosas aplicaes com fonte aberto, ampla disponibilidade de compiladores nas mais diversas plataformas e vrios outras indicaes claras de que trata-se de um padro bastante maduro.

1.2

Histrico do livro

Esse um livro que vem sendo escrito aos poucos. A seo abaixo mostra a evoluo das diversas verses do texto. 1. Em 1992 foi feita uma verso chamada Conceitos Bsicos de C / C++, para um curso oferecido Rede Ferroviria Federal. Nessa poca, estava na moda usar o compilador Borlanc C++ 3.1. (No perodo de 1993 a 1998, o autor esteve no Japo, Universidade de Chiba, fazendo curso de Doutorado). 2. Em 1999, foi feita uma verso profundamente modificada, chamada Conceitos de software para sistemas de armas, para um curso oferecido Marinha do Brasil. Esse curso foi efetivamente C++ e orientao a objetos, em console. Para esse curso, usou-se o compilador Borland C++ 5.0. 3. Em 31 de agosto de 1999 foi feita a uma verso esqueleto desse livro. Na nova abordagem est sendo feito um esforo de depurar todo o material gerado, e fazer um livro chamado C/C++ Multiplataforma. Esse livro abordar os aspectos mais importantes da programao em C/C++, com nfase em deixar o leitor livre de uma plataforma em particular. Basicamente, os trechos de programa de exemplo devero funcionar em unix ou em Windows sem problemas. Esse livro vai ser produzido aos poucos. Chamou-se essa verso de 1.0, ainda com inmeras inconsistncias. Mesmo assim est sendo tornada pblica na Internet a pedido de alunos. 4. Em 15 de Fevereiro de 2000, a pedido de um amigo, eu publiquei a verso 1.1 do livro. H inmeras melhorias em relao verso 1.0, mas essa verso ainda continha inconsistncias. 5. Em 15 de Maro de 2000, aps vrias modificaes e acrscimos em relao a verso anterior, foi disponibilizada a verso 2.0. Essa verso ainda possua diversas sees incompletas (marcadas com //todo), e algumas sees inconsistentes. Essa verso trouxe uma mudana de ttulo, que passou a se chamar C/C++ e Orientao a Objetos em Ambiente Multiplataforma. 6. Em Julho de 2000, fiz diversas melhorias baseado na experincia de um curso oferecido com esse livro. Verso 3.0. a. Refeito e melhorado o captulo Conhea Seu Compilador. 7. Em Fevereiro de 2001, aps um curso para o PCT-DEL, surgiram diversas sugestes de melhorias, que foram implementadas nessa verso 4.0. a. Modificou-se bastante o captulo 1: Introduo, inclusive com o acrscimo de sees sobre estratgia na escolha de tecnologia. Para escrever essa parte, aproveitei material do interessante curso de MBA em Inteligncia Competitiva e Gesto do Conhecimento, recm concludo. C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 20

b. Acrescentou-se captulo de boa programao vs. m programao c. Acrescentou-se captulo sobre STL d. Acrescentou-se tutorial para DLL em Visual C. e. No captulo Conhea o Seu Compilador, acrescentou-se referncia para o compilador Borland Builder 5.0. f. Acrescentou-se ndice remissivo. Nas prximas verses, esse ndice deve melhorar. g. Acrescentou-se uma seo inicial de introduo dando ao leitor uma justificativa para existncia desse livro, face ao ambiente do mercado de tecnologia de informao. h. Reviso geral. 8. Em Agosto de 2001, verso 5.0 a. Incluiu-se um ndice. b. Retirados trechos de cdigo em portugus do livro. Dessa forma, ilustra-se que boa programao escrever o cdigo em si em ingls. c. Incluiu-se informao sobre uso da ferramenta libtool, para criao de bibliotecas de ligao dinmica em unix (embora ainda seja preciso melhorar essa informao). d. Incluiu-se informao sobre desenvolvimento de pacores RPM para linux. e. Melhorou-se o captulo sobre tratamento de exceo. f. Melhorou-se o captulo sobre namespace g. Acrescentou-se informao sobre construtor de cpia, e criao de objetos com memria alocada. h. Acrescentou-se um captulo sobre dicas de programao. i. Acrescentou-se mensagem do patrocinador

1.3

Escolha de uma tecnologia: uma deciso estratgica

O mundo que vivemos complexo e possui quantidade extremamente grande de informaes. O ambiente profissional no ramo de tecnologia de informao muda rapidamente. Muitas tecnologias nasceram e ficaram obsoletas rapidamente. Os profissionais de tecnologia de informao convive com um problema bsico: que estratgia devem ter para manter-se atualizado nos conhecimentos valorizados no mercado ? Heis alguns itens a considerar na hora de definir essa estratgia: Conhecer o mais possvel o teor das opes tecnolgicas disponveis no mercado. Estimar em que setores desse mercado se pretende atuar. Conhecer o comportamento humano, e juntando-se o conhecimento tcnico que se tem, tentar antecipar tendncias do mercado. Observar historicamente quais tipos de conhecimentos tornaram-se obsoletos, e quais foram relativamente bem aproveitados, apesar da mudana do ambiente.

C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 21

1.3.1 Caractersticas do produto software O software um produto com caractersticas especiais, diferentes de quase todos os outros produtos. Nessa seo, comenta-se sobre essas diferenas. Um produto tangvel (televiso, computador, etc.) precisa que cada unidade seja produzida para que seja vendida. De forma semelhante, servio tangvel (limpeza, preparao de comida, segurana, etc.) precisa ser feito a cada vez que vendido. J um software um produto que na prtica custa apenas para ser desenvolvido. O custo de produo ou cpia to pequeno que pode ser considerado nulo. Uma vez desenvolvido, a firma poderia em princpio copiar e vender o software indefinidamente, com excelente lucro. Mas nem tudo so flores para uma firma de software. A concorrncia muito grande, e no se sabe a princpio se um software vai ter boa aceitao no mercado. Portanto, o negcio de desenvolver software um tanto arriscado. Alm disso, o ambiente tecnolgico muda rapidamente. Para desenvolver um software, preciso investir em salrios de profissionais caros, e gastar tempo. Quando o produto fica pronto, preciso convencer o mercado a aceita-lo, sendo que h inmeras informaes sobre software, que podem confundir o cliente final. Uma outra diferena fundamental entre o software e os demais produtos o fato de que h vantagens para o consumidor final em haver padronizao do software usado. A existncia de pluralidade de padres geralmente causa confuso, pois no vivel na prtica conhecer todas as tecnologias em profundidade. Concretamente: o mundo seria muito confuso se cada indivduo ou empresa usassem um computador diferente, com um sistema operacional diferente, com editor de texto diferente, etc. A padronizao do software faz facilitar a rdua tarefa de se aprender uma nova e complexa forma de se trabalhar, e mesmo de se pensar. A existncia de pessoas prximas com as quais pode-se tirar dvidas a respeito do uso do software facilita muito a efetiva assimilao do seu uso. Se um consumidor escolher uma televiso da marca x, a probabilidade de que a prxima televiso seja da mesma marca relativamente pequena. H vrias marcas disponveis, e muitas delas so muito boas. O produto televiso uma mercadoria. Mas se um consumidor escolhe um software para resolver um problema, se o software satisfatrio, a tendncia o consumidor recomendar sempre o mesmo software para resolver o tal problema. fcil entender o motivo desse comportamento. A complexidade do uso do software pode ser grande, e portanto h um esforo em se aprender a usa-lo bem. Esse esforo pode ser bastante grande. O consumidor tende a recomendar o software que j usou para no jogar fora o investimento que j fez em aprender a usar o software. Outra forma de entender a diferena fundamental entre software e a maioria dos outros produtos a seguinte. Seria possvel um futuro em que produtos como televiso, gasolina, energia, roupas, etc. fossem oferecidos gratuitamente ? muito difcil imaginar que isso pudesse acontecer. No entanto, perfeitamente possvel que exista software gratuito. Se o criador de um software no ganha dinheiro diretamente distribuindo um software gratuito, que interesse haveria em faze-lo ? Muito simples: sendo gratuito, o consumidor torna-se mais interessado em experimentar o software. Assim, facilita-se a criao de uma base de usurios do software, e portanto o produto fica mais confivel e tambm mais valioso. Com a base de usurios consolidada, muito possvel pensar em formas indiretas de se ganhar dinheiro. Um exemplo disso o linux. A inrcia um termo importado do estudo de fsica. Sabe-se que difcil mudar a velocidade de um corpo que possui grande massa. Para tal corpo mudar de velocidade, preciso que se gaste muita energia. Em outras palavras: o tal corpo possui grande inrcia. O comportamento humano inercial em relao ao relacionamento com a tecnologia. Para efetivamente usar um produto tecnolgico tal como um software preciso que se invista energia (tempo, pacincia, etc.) no estudo desse produto. Uma vez vencida a inrcia e adquirido conhecimento sobre o uso de uma tecnologia, torna-se um tanto C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 22

difcil convencer um consumidor a adotar uma soluo alternativa, especialmente se no houver uma vantagem palpvel. Uma das formas de se interpretar o frenesi de Internet que ocorreu no final do milnio justamente o reconhecimento de que seria preciso explorar rapidamente o mercado ainda virgem de pessoas que precisam de servios de Internet. Aps passada a fase na qual muitos se acostumariam com os servios, seria cada vez mais difcil para novos entrantes no mercado, pois haveria inrcia para se mudar de servio. Atualmente vivemos uma batalha entre grandes desenvolvedores de software pago e alternativas gratuitas (por exemplo linux). As grandes firmas do setor de software procuram fazer ver ao cliente que embora seus produtos sejam pagos, o TCO (Total Cost of Ownership ou custo total de propriedade) mais baixo que a alternativa. Supostamente, segundo o ponto de vista das grandes empresas, seria mais barato comprar produtos dela e valer-se da base instalada de usurios, suporte, etc. A alternativa de instalar um produto gratuito para a qual h muito menos disponibilidade de assistncia seria mais cara, pois seria necessrio pagar caro por consultoria. Alm disso, os bugs que supostamente seriam mais numerosos causariam despesas para o cliente. 1.3.2 Incorporao de novidades

muito comum no mercado de software (na realidade para vrios produtos de tecnologia de informao) uma situao tipo competio Darwiniana. Isto , para um problema dado surgem diversas alternativas para soluciona-lo. No incio, todas as alternativas so incompletas e insatisfatrias. Com o tempo, vo surgindo evolues na qualidade do software, e cada vez menos alternativas se sustentam. Geralmente apenas uma alternativa efetivamente usada, ou no mximo muito poucas. A competio Darwiniana descreve a competio para a definio do hardware bsico (arquitetura do computador, CPU, etc.), para sistema operacional para esse hardware, para editor de texto e demais aplicativos de escritrio, para comunicao pessoal com cliente de email ou outras, para navegador de Internet, etc. Uma empresa que tem um produto de software deve ter uma estratgia para fazer o seu produto ser aceito no mercado. Isso deve ser feito rapidamente, pois do contrrio a maioria do mercado tender a convergir para uma alternativa concorrente, e depois haver inrcia para deixar de usar o que j se sabe. H estudos que mostram como uma novidade costuma ser incorporada por um grupo social. Pode-se classificar (de forma simplificada) os usurios em 4 grupos, com suas porcentagens: 1. A - Desbravadores (10%) 2. B - Primeira maioria (40%) 3. C - Maioria atrasada (40%) 4. D - Retardatrios (10%)

C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 23

D

C

B

A tempo

observaoFigura 1: Diagrama mostrando a porcentagem de usurios que incorporam uma novidade em relao ao tempo. Em software, os desbravadores so os que esto sempre testando software beta, e correndo atrs de todo tipo de novidades. Os da primeira maioria so aqueles que lem os comentrios feitos pelos desbravadores e identificam as tendncias consistentes e minimamente maduras, e incorporam-nas. Os da maioria atrasada so os que correm atrs dos outros, e apressam-se a incorporar as novidades quando j h muita gente usando-as. Os retardatrios so os ltimos a adotarem a novidade, e apenas o fazem quando absolutamente evidente que precisam faze-lo, sendo que quase todos j o fizeram. As porcentagens de pessoas em cada uma das categorias mostrado acima. interessante cruzar a informao de classificao de usurios com o perfil de sucessos. A experincia mostra que a maior parte dos indivduos e firmas bem sucedidos so os que se comportam como primeira maioria, e no como desbravadores. Enquanto os desbravadores freqentemente gastam tempo precioso para depurar problemas de novidades, os da primeira maioria optam pela novidade quando j h cultura suficiente para utilizar a novidade de forma efetiva. A dinmica de incorporao de novidades, portanto, comea pelos desbravadores, seguindo-se da primeira maioria, maioria atrasada e retardatrios. Uma firma ou indivduo que queira tornar uma alternativa tecnolgica efetivamente usada no mercado deve ser capaz de influenciar os desbravadores, para que ento a dinmica de incorporao de novidades siga seu caminho natural. Em outras palavras: pode-se dizer que h dois tipos de usurios: Usurio influenciador Usurio comum.

O usurio influenciador aquele que tem influncia sobre os desbravadores e principalmente sobre a primeira maioria. Trata-se de um usurio que observa atentamente as reportagens dos desbravadores e sintetiza essa informao de forma interpretada para produzir concluses que so por sua vez observadas pela primeira maioria. As revistas especializadas trazem sempre reportagens sobre novidades tecnolgicas. Quem escreve essas reportagens est entre os usurios influenciadores. H uma categoria de profissionais que precisa tomar decises sobre uma tecnologia a adotar para solucionar determinado problema. So por exemplo os gerentes de informtica de empresas. Ter capacidade de convencer esse tipo de pessoa absolutamente importante para o sucesso comercial de uma firma de software, pois so eles quem decidem como alocar recursos financeiros da firma para adquirir tecnologia no mercado.

C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 24

1.4

Mercadoria e produto diferenciado

Quando ocorre uma transao econmica, h dois atores o comprador e o vendedor. O produto que est sendo negociado est em algum pondo de uma escala, cujos extremos esto marcados com: mercadoria1 e produto diferenciado.

produto em negociao mercadoria produto diferenciado

Quando o produto uma mercadoria, quem est em boa situao para o negcio o comprador. Quando trata-se de um produto diferenciado, a situao se inverte. A capacidade profissional de um indivduo um produto no mercado. O preo a remunerao. Para o profissional pretender obter boa remunerao, necessrio que esse profissional seja um produto diferenciado no mercado. 1.4.1 Mercadoria escassa Quando uma mercadoria necessria e escassa, o seu valor tende a subir. Quem pode suprir a mercadoria escassa pode praticar um preo que lhe vantajoso (se for bom negociador). Mas vivemos numa sociedade com abundncia de informao. Se uma mercadoria de boa demanda no mercado torna-se escassa e seu preo sobe, muitos sabero disso. Portanto, ser provavelmente bastante lucrativo investir no sentido de atender a demanda. Costuma haver bastante investidores dispostos a quase todo tipo de investimento. Portanto, com o tempo a tendncia que uma mercadoria torne-se plenamente atendida, e portanto o preo de comercializao tende a cair at o mnimo possvel para o mercado em questo. Considere os conceitos acima aplicados a profissionais de tecnologia de Internet. Desde que a Internet tornou-se muito importante para empresas, em torno do ano de 1995, surgiu demanda para desenvolvimento de pginas e sistemas de Internet. Como essa profisso no existia at ento, os poucos que sabiam fazer o servio tornaram-se mercadoria escassa, e puderam cobrar alto. H no muito tempo atrs, o simples desenvolvimento de uma pgina html simples era muito bem remunerado. Com essa situao bastante reportada pela imprensa, surgiu interesse em criao de cursos para webdesign, e tambm desenvolvimento de software para facilitar o desenvolvimento de html. Tudo isso foi feito e hoje h muito mais profissionais habilitados a desenvolver pginas html, usando software muito mais fcil de usar. Com isso, o preo do profissional de webdesign caiu um pouco, mesmo com uma demanda slida por profissionais desse tipo. Uma das caractersticas na nossa poca que quase tudo tornou-se uma mercadoria, inclusive nossa capacidade profissional. Essa uma das conseqncias do fenmeno econmico conhecido como globalizao. Como estamos comentando, a longo prazo, a nica forma de se manter um preo premium para um produto torna-lo um produto diferenciado. Portanto, qual deve ser a estratgia de um profissional de tecnologia de informao para evitar ser transformado numa mercadoria e portanto jogado numa situao onde ganhar pouco ?

1

mercadoria em ingls commodity

C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 25

evidentemente uma pergunta complexa, mas a resposta certamente estar na capacidade de o profissional reciclar-se mais rpido que a mdia, mantendo-se sempre como um produto diferenciado. Na hora de escolher uma linguagem de programao para estudar, procure pensar a longo prazo e avaliar em quais mercados pretende atuar.

1.5

Sociedade do conhecimento

A humanidade est vivendo a sociedade do conhecimento. O conhecimento tornou-se o mais valorizado ativo das empresas. Obter, assimilar, classificar, recuperar, acessar, interpretar, gerenciar e manipular conhecimentos so algumas das habilidades valorizadas nesse ambiente. Dentre os conhecimentos que se deve ter no incluem-se apenas os conhecimentos tcnicos. Igualmente importante ter conhecimentos sociais (relacionamentos), conhecimentos de mercado, conhecimento de como e onde se produz e se acessa (ou se compra) conhecimentos de boa qualidade, saber distinguir um conhecimento de boa qualidade de um conhecimento de qualidade desconfivel, saber para que servem os conhecimentos tcnicos que se dispes, etc. Alguns conceitos fundamentais: Dados: um valor derivado da observao de objeto ou referncia. Exemplo: 15 graus celcius. Para serem registrados, guardados e disponibilizados os dados devem estar ligados a um quadro referencial. No caso o quadro referencial a escala de temperatura. Informao: uma coleo de dados relacionados que, dentro de um determinado contexto, podem transmitir algum significado a que os consulta. Exemplo: guia telefnico, tabela de temperaturas. Para quem no sabe o que um telefone, o guia telefnico no contm informao alguma. Comunicao: a transferncia de informaes de um agente de processamento dessa informao para outro. Conhecimento: a familiaridade, a conscincia ou entendimento conseguido seja atravs da experincia ou do estudo. O conhecimento pode ser classificado nas formas abaixo: o Tcito - algo pessoal, formado dentro de um contexto social e individual. No propriedade de uma organizao ou de uma coletividade. Em geral difcil de ser transmitido. Por exemplo: um craque de futebol sabe dar uma bicicleta e marcar um gol. Por mais que se veja e reveja o craque fazendo isso, difcil fazer o mesmo. o Explcito - envolve conhecimento dos fatos. adquirido principalmente pela informao, quase sempre pela educao formal. Est documentado em livros, manuais, bases de dados, etc. Por exemplo: o conhecimento da sintaxe e da programao de C/C++ um conhecimento explcito. J a boa programao em parte explcito, mas envolve uma certa dose de conhecimento tcito. A capacidade de trocar informaes com um grupo (tribo) do mesmo segmento de tecnologia um complemento fundamental para o profissional, e envolve muito conhecimento tcito. Sabedoria: a qualidade de possuir grande conhecimento, geralmente de mais de uma rea do saber. A associao de compreenso de diversos conhecimentos faz surgir uma compreenso geral, ou compreenso da grande figura, que exatamente o aspecto que configura a sabedoria. Uma das vertentes da sabedoria conseguir ver o mundo pelo ponto de vista de outras pessoas.

C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 26

1.5.1

Mudana do paradigma de negcios

Pode-se chamar de sociedade do conhecimento a sociedade que em grande parte adotou para si os paradigmas economia do conhecimento, mais atuais, que se opes aos paradigmas da economia do conhecimento. Um quadro comparativo desses paradigmas mostrado abaixo.

Paradigmas da Economia IndustrialFordismo, economia de escala, padronizao Grandes tempos de resposta Valorizao de ativos tangveis Atuao local, regional Intensivo em energia (petrleo) e materiais Ramos matrizes: petrolferas, petroqumicas, automveis, aeroespacial Qualidade do produto

Paradigmas da Economia do Conhecimento

Escala flexvel, customizao, pequenos estoques, just in time. Tempo real Valorizao de ativos intangveis Atuao global Intensivo em informao e conhecimento Ramos matrizes: eletrnico, informtica, telecom., robtica, gentica Qualidade do processo (alm do produto) Grandes organizaes verticais Sub-contratao (tercerizao), downsizing, redes de relacionamento entre empresas Rigidez da hierarquia administrativa, Flexibilidade e integrao de separada da produo empresa com clientes, colaboradores e fornecedores Taylorismo. Decomposio do Trabalhador polivalente processo de trabalho Empregado como gerador de custo Empregado como geradores de receita (capital intelectual) Pleno emprego Empregabilidade Pouco ou nenhum aprendizado no Aprendizado contnuo trabalho Qualificao formal Competncia (capacidade efetiva de resolver problemas) 1.5.2 Mercadorizao Tradicionalmente, se um segmento do mercado estiver na situao de escassez e com ganhos relativamente altos, esse segmento torna-se atrativo para negociantes. Desde que exista informao disponvel sobre o ambiente de negcios, a tendncia de o segmento atrair novos entrantes, que faro aumentar a oferta de produtos, at que o preo se estabilize num patamar razovel (com taxas de lucro relativamente pequenas), quando ento diz-se que o segmento de mercado est maduro. No ambiente atual, a Internet ajudou a tornar as informaes mais abundantes e baratas. Portanto como nunca h reportagens informando qualquer segmento de mercado que esteja dando dinheiro. Alm disso, a facilidade de comunicao tornou o conhecimento rapidamente transfervel de um local

C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 27

a outro. Com isso, servios de conhecimento passaram a ser globalizados. Por exemplo: pode-se desenvolver software num pas para um cliente em outro pas. O efeito final desses fatores a chamada mercadorizao do ambiente de negcios. Isto , tudo transforma-se numa mercadoria, e rapidamente. A concorrncia em todos os setores parece ser incrivelmente grande, e o consumidor exige preo e qualidade como nunca, sabendo que h inmeras opes caso no se sinta satisfeito. Isso bom para quem compra, mas torna-se difcil a vida de quem quer vender. E todos ns temos que vender alguma coisa, nem que seja a nossa capacidade profissional no mercado. 1.5.3 Remunerao agregao de valor na cadeia produtiva O processo de produo de um produto (ou servio) geralmente composto de vrias etapas, ou elos. Pode-se dizer que h uma cadeia produtiva que faz surgir o produto. Com a comercializao do produto final, faz-se caixa (ganha-se dinheiro), com o qual se remunera direta ou indiretamente toda a cadeia produtiva. Uma das caractersticas da sociedade do conhecimento que as melhores remuneraes da cadeia de valor acabam sendo dos elos que agregam alto valor de conhecimento. Por exemplo: na produo de um carro, o ato de montar as peas no agrega tanto valor de conhecimento quando o projeto de um carro novo. E a remunerao do projetista maior do que a do montador. Na escala mercadoriaproduto_diferenciado, o projetista de carro est mais para produto diferenciado, enquanto o montador est mais para mercadoria, Mas gradativamente mesmo o projetista torna-se tambm uma mercadoria, e passa a ter menores remuneraes. Apenas um projetista que saiba fazer algo difcil (entenda-se: que poucos sabem fazer) e til (entenda-se: valorizado no mercado) consegue obter boa remunerao.

1.6

Porque C/C++ ?

De tudo o que foi dito (at agora) nesse captulo de introduo, o que se pode concluir sobre a escolhe de uma linguagem de programao para um estudo profundo ? 1.6.1 Tribos de tecnologia

O uso de uma tecnologia - tal como uma linguagem de computador - geralmente cria uma tribo de usurios que gostam dessa tecnologia. Os membros da tribo costumam achar que a sua linguagem a melhor, por isso que torna-se difcil julgar de forma isenta qual seria a linguagem melhor. A mentalidade de tribo de certa forma semelhante a mentalidade que une os torcedores de um time de futebol, ou os crentes de uma religio. Por exemplo: quem est habituado a usar unix (e.g. linux) como servidor, geralmente no tolera usar Windows. Vice versa tambm acontece. Uma empresa com cultura Windows bem consolidada muitas vezes reluta em usar servidores unix, ainda que gratuitos. Para quem conhece bem uma certa linguagem de computador, e essa linguagem atende s suas necessidades, a tal linguagem em princpio a melhor opo. Mas a experincia mostra que o ambiente de trabalho com tecnologia de informao muda constantemente, e muito rapidamente. Uma linguagem de computador no se deteriora, no mesmo sentido que uma mquina velha o faz. Mas considerando-se a constante mudana do ambiente, se uma linguagem de computador deixa de ter suporte s novidades que o mercado exige, ento essa linguagem de certa forma est se deteriorando. H inmeros exemplos de linguagens de programao muito boas que entraram em desuso, pois no houve uma manuteno. O dBase ou o Clipper para sistema operacional DOS, so um bom exemplo. So duas linguagens que foram muito importantes no seu tempo. Mas o ambiente passou a C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 28

valorizar o Windows, e as verses para Windows desses programas custaram muito a sair. Alm disso, com o crescimento meterico do tamanho das bases de dados que para as quais se desenvolvem sistemas, era imperioso que houvesse suporte para uso de hardware mais moderno (que lanado a toda hora). Assim, os usurios ficaram de certa forma pressionados a migrar para uma alternativa. Uma boa tribo de tecnologia costuma trocar muitas informaes entre seus membros. Na era da Internet, essa troca de informaes costuma dar-se por web sites e listas de email. Quem trabalha com recursos humanos para tecnologia deve estar sempre ciente do comportamento de tribo que esses profissionais tem. No basta oferecer salrio (embora isso seja bastante importante). preciso oferecer para o profissional de tecnologia um ambiente em que ele se desenvolva profissionalmente a partir das tribos a que pertence ou que gostaria de pertencer. 1.6.2 A escolha tecnolgica uma escolha estratgica A escolha de uma linguagem de computador a escolha de uma tecnologia. Essa escolha estratgica, pois uma escolha errada pode fazer perder tempo e/ou dinheiro. No se escolhe um software apenas pelos seus mritos e pelo seu preo. Se seus amigos usam o software x, voc tende a escolher essa opo tambm. Se um software muito usado, apenas por isso ele tem mais valor. Um software que no tem intrinsecamente muitos mritos (mas que funciona), mas que usado por uma comunidade grande geralmente a melhor opo de escolha. Exemplo: Windows. sabido que o ser humano tende a acrescentar conhecimentos a sua mente, em forte associao com os conhecimentos que j possui. No caso de linguagem de programao isso significa que em geral aprende-se uma linguagem de programao em tende-se a no querer mudar de linguagem, para aproveitar o que j se sabe. Para um profissional de tecnologia em formao (um aluno), ou um profissional trainee (com relativamente pouca experincia), a questo que se coloca a seguinte: preciso estudar, e h coisas demais para aprender. Portanto o ideal optar por um caminho de alta flexibilidade, que d ao profissional condies de atuar de forma bastante ampla. Para ter flexibilidade na vida profissional, conveniente adotar uma tribo que tenha a maior abrangncia possvel.

O nosso curso visa ensinar conceitos de desenvolvimento de software. Para que isso seja feito, importante que o aluno faa programas prticos, de forma a ilustrar os conceitos. A linguagem escolhida C++. Essa a opo de escolha principalmente pelas razes abaixo. 1. O compilador fcil de se fazer. Isso no uma vantagem direta, pois no se est falando em fazer um compilador. Contudo trata-se de uma grande vantagem indireta, pois h inmeros compiladores C / C++ no mercado, e isso bom para o programador. H compilador C / C++ para praticamente qualquer CPU e sistema operacional que exista. 2. No havendo um dono da linguagem, acaba que o padro C / C++ tem inmeros patrocinadores, famosos e annimos, o que aumenta o desenvolvimento e o suporte. 3. estrategicamente mais seguro para uma empresa confiar seu sistema de informao em um padro de mltiplos donos que comprar um pacote que pertena a um nico fornecedor, por C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 29

mais renomado que seja. H muito mais fornecedores de bibliotecas para ligar com C / C++ que em qualquer outra linguagem.

C++ C

Figura 1: C++ um super-set de C

As linguagens C / C++ possuem uma filosofia de retirar da prpria linguagem tudo o que pode ser escrito em cima dela. Isto quer dizer que muitos comandos que o leitor dever usar (tais como aqueles necessrios para colocar mensagens na tela ou manipular arquivos) e que em outras linguagens correspondem a comandos intrnsecos da linguagem, passaro a ser em C / C++ simples chamadas de funes escritas na prpria linguagem. Estas funes, que sero mostradas mais tarde, esto disponveis na biblioteca padro da linguagem e podem ser usadas em qualquer compilador C / C++. Esta sutil diferena de filosofia levar a facilitar o trabalho daquele que cria o compilador de uma linguagem de muito poucos comandos onde se compila a biblioteca padro. O mercado comprova este fato oferecendo ao comprador muito mais opes de compilador C / C++ que qualquer outra linguagem. Acredito que para se obter qualquer aprendizado, fundamental que se esteja motivado. Quando o objeto do aprendizado uma tecnologia, isso mais verdade do que nunca. O mundo tecnolgico tumultuado de opes, que competem entre si pelo direito a sua ateno. Essa seo de introduo para o aprendizado de C/C++ pretende motivar o leitor para o aprendizado, e situar a alternativa dessa linguagem no contexto das demais tecnologias que lhe so alternativas. A linguagem de programao C/C++ no especialmente fcil de ser aprendida. Existem alternativas que tem curva de aprendizado mais rpida. Ento porque utilizar esta linguagem ? Acontece que h uma vantagem indireta no uso de C/C++, que a seguinte: trata-se de uma linguagem para a qual fcil de se fazer um compilador. Esse fato s pode ser considerado como vantagem (direta) para quem se interessa pela tarefa de fazer um compilador. Mas pouca gente se interessa por isso. E esse texto voltado para quem quer aprender a programar a partir de um compilador j pronto, e no para quem pretende desenvolver um novo compilador C/C++. Ento porque seria considerado vantagem usar uma linguagem para a qual fcil de se fazer um compilador ? Porque graas a esse fato, sempre h um compilador C/C++ para qualquer computador ou dispositivo programvel que se pense ! Sendo que em muitos casos, h pelo menos uma opo de compilador que gratuita. E essa caracterstica no existe para nenhuma outra linguagem ! Para alguns dispositivos (DSPs, microcontroladores, etc.) h apenas compilador C, no havendo compilador C++. Essa uma das poucas razes para ainda se estudar C puro (sem ++). Tendo dito isso, o propsito do ttulo do livro torna-se mais claro. Um bom programador em C/C++ deve, sempre que possvel, abstrair-se da CPU, do compilador e do sistema operacional que est usando. Em alguns casos, no sequer necessrio que exista um sistema operacional. Fazendo isso, o programador estar pensando de forma multiplataforma. Dessa forma, o conhecimento adquirido C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 30

na linguagem C/C++ levar o programador a uma versatilidade enorme. Esse conhecimento pode ser usado para programar inmeros ambientes, incluindo Windows, Unix (Linux, FreeBSD, etc.), computador de grande porte, implementao de interatividade em pginas Internet, dirios portteis tipo Palm Pilop ou Windows CE, dispositivos programveis como DSPs, microcontroladores, etc. Se surgir no futuro algum tipo novo de processador ou computador que apresente alguma vantagem sobre o que existe hoje, com certeza uma das primeiras coisas que se far para esse novo processador o compilador mais fcil de se fazer - da linguagem C/C++.

1.7

Breve histria do C/C++

A linguagem de programao C / C++ est em constante evoluo, e isso bom. Tudo comeou com a linguagem BCPL, por Martin Richards, que rodava no computador DEC PDP-7, com sistema operacional unix (verso da poca). Em 1970, Ken Thompson fez algumas melhorias na linguagem BCPL e chamou a nova linguagem de B. Em 1972, Dennis Ritchie e Ken Thompson fizeram vrias melhorias na linguagem B e para dar um novo nome a linguagem, chamaram-na de C (como sucessor de B). A linguagem C no foi um sucesso imediato aps a sua criao, ficando restrita a alguns laboratrios. Em 1978 (um ano histrico para os programadores C), lanado um livro famoso por Brian Kernigham e Dennis Ritchie. Esse livro serviu de tutorial para muita gente e mudou a histria da programao em C. De fato, essa primeira verso da linguagem C at hoje conhecida como C Kernigham e Ritchie ou simplesmente C K&R. Em 1981, a IBM lana o IBM PC, iniciando uma famlia de computadores de muito sucesso. A linguagem C estava no lugar certo e na hora certa para casar-se com o fenmeno dos computadores pessoais. Logo foram surgindo inmeros compiladores para PC e a linguagem C estava livre do seu confinamento inicial no sistema operacional unix. Conforme a tecnologia de software foi se desenvolvendo, o mercado exigiu que se introduzisse mudanas na linguagem C. Talvez ns devssemos nos referir as vrias verses de C como C 1.0, C 2.0, etc., mas o mercado geralmente no usa essa nomenclatura. O fato que modificaes importantes foram pouco a pouco sendo introduzidas na linguagem. Uma modificao importante foi a padronizao feita pelo American National Standards Institute (ANSI), em 1983, que criou uma linguagem conhecida como C ANSI. Entre outras modificaes, o C ANSI mudou a forma de se definir um prottipo de funo, para que se possa conferir esse prottipo na hora da compilao e acusar erros no caso de se chamar uma funo com parmetros errados. No quadro abaixo mostrado um exemplo de como se escrevia uma funo (fun1) em C K&R e como passou a se escrever em C ANSI. Se segunda funo (fun2) chama a primeira com parmetros errados, o C K&R no tem como saber do erro na hora da compilao, mas o C ANSI acusa o erro e com isso ajuda o programador a depurar o seu cdigo. C K&Rvoid fun1 (i, k) int i, k; { ... }

C ANSIvoid fun1 (int i, int k) { ... }

C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 31

void fun2 () { int a1, a2; float b1, b2; /* variveis locais */ fun1(a1,a2); /* OK em ambas as verses de C */ fun1(b1,b2); /* um erro, pois os parmetros esto errados. Mas somente surgir um erro de compilao no C ANSI, no C K&R no h esse tipo de checagem */ }

No C K&R, como no havia como checar se uma funo foi chamada com os argumentos certos, no se proibia o uso de identificadores que no previamente declarados. No exemplo acima significa que podia-se chamar a funo fun1 a qualquer momento, sem necessidade de declarar o identificador da funo. Com o C ANSI, passou a se recomendar (como tcnica de boa programao) que toda funo fosse declarada antes de ser usada, para que o compilador pudesse checar a chamada da funo. A partir do C++ essa recomendao tornou-se uma obrigao, isto , o compilador simplesmente no aceita compilar um identificador que no tenha sido previamente declarado2.1970C (K&R) (1972)

livro do K&R, The C programming language (1978)

1980

C com classes (1980) ANSI C 1983; C++ (1983/84) livro do Stst, The C++ programming language (1986)

1990

livro do Stst, C++ reference manual (1990)

livro do Stst, The annotaded C++ reference manual (1995)

ano

Figura 2: Alguns fatos relevantes na evoluo da linguagem C / C++

1.8

Qualidades da Linguagem C/C++

H ainda outras qualidades interessantes na linguagem C/C++, listadas abaixo. 1. No h um dono desta linguagem. H vrios sistemas operacionais e compiladores 100% gratuitos que usam o padro C/C++ (o exemplo mais visvel o Linux). Isso significa na prtica que essa linguagem tem inmeros patrocinadores, famosos e annimos. Isso mantm o suporte sempre muito atualizado e amplamente disponvel na Internet. 2. Escolher C/C++ uma opo estratgica muito interessante para uma empresa ou consultor, pois sendo um padro amplamente difundido e com opes gratuitas. Portanto pode-se reproduzir infinitamente (sem custo adicional e sem fazer pirataria) qualquer soluo que se aprenda ou se desenvolva a partir dessa linguagem. H inmeras opes tecnolgicas de

2

Para quem est no comeo da aprendizagem, pode ser um tanto difcil compreender agora a diferena entre o C K&R e o C ANSI. O importante lembrar que o C K&R mais antigo e mais sem proteo. O C ANSI mais moderno e d algumas dicas a mais para facilitar encontrar erros de programao. O C++ mais moderno ainda, e melhor que C.

C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 32

programas (com fonte includo) disponveis na Internet. Os links de algumas delas esto listadas na pgina web desse livro. 3. verdade que a curva de aprendizado de C/C++ tende a ser mais lenta (especialmente no incio) que a de outras linguagens. Mas isso pode ser compensado com um bom material didtico. Esse livro, que gratuito e distribudo na Internet, uma contribuio no sentido de se aumentar a oferta de material didtico para o estudo de C/C++. 4. Conforme ser explicado em detalhes em outro trecho complexidades de programao de forma a tornar o uso mesmo para um programador inexperiente. Isso pode ser (que existem em enorme quantidade a disposio desenvolvidas/adaptadas para necessidades especficas). do livro, possvel encapsular de C/C++ perfeitamente digerveis feito a partir do uso de bibliotecas na Internet, e que podem ser

5. Pode-se usar C/C++ com tcnicas apropriadas para trabalho em equipe. Dessa forma, um gerente de projeto de software pode alocar tarefas para diversos programadores, que trabalham em paralelo. Com essas tcnicas pode-se obter resultados excelentes no tempo de desenvolvimento de um software.

1.9

Classificao de interfaces de programas

Na informtica h hardware e software. O hardware fisicamente tangvel, ao contrrio do software. A palavra software significa um programa de computador ou um sistema, que um conjunto de programas de computador. H basicamente 3 tipos de interface para programas, como mostrado abaixo em ordem de complexidade (1 = menos complexo, 3 = mais complexo). 1. Console (ou linha de comando), tela de texto tipo scroll (rolar). Exemplo: xcopy, grep. 2. Console (ou linha de comando), tela de texto cheia. Exemplo: Lotus 1-2-3, WordStar (para DOS). 3. GUI (graphics user interface), tambm chamado de interface Windows. Exemplo: sistema operacional Windows e qualquer aplicao para Windows ou o ambiente xWindows do unix. Uma interface mais complexa agrada mais ao usurio, porm complica a vida do programador. Quando o objetivo estudar conceitos de programao, a interface algo que a princpio no est no foco. Portanto, a interface mais adequada para estudo a interface tipo 1 console do tipo scroll. Em Windows, necessrio que se abra uma janela de DOS para se ter acesso ao console e poder usar programas com linha de comando (como se fazia na poca que no havia Windows). Em unix, h o xWindows, que um dos tipos de interface grfica, e tambm o console de unix.

1.10 Programando para consoleUltimamente, h particular interesse por aplicativos grficos, com uso intensivo de GUI e multimedia. H tambm muito interesse em programao para Internet. Para quem est em fase de aprendizado, importante que se tenha uma base slida de programao em console antes de se pretender programar em ambientes mais complexos. Programar para console a abordagem que historicamente surgiu primeiro que a programao GUI. Programas para console NO esto caindo em desuso, apesar da popularidade dos ambientes grficos. Um exemplo importante de como a programao para console muito presente na modernidade do C / C++ e Orientao a Objetos em Ambiente Multiplataforma, verso 5.1 Esse texto est disponvel para download em www.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (www.del.ufrj.br/~villas)

pg. 33

mercado de informtica, o caso de programao para Internet com interface CGI. Outro exemplo a programao para dispositivos programveis como DSPs, microcontroladores, etc. Mesmo para quem pretende programar para GUI (como o Windows ou xWindows), extremamente importante saber programar para console. Fazendo programas para console que se consegue-se depurar trechos de programa facilmente, e com isso pode-se produzir componentes de software que sero aproveitados em programas quaisquer, incluindo programas grficos.

1.11 Linguagens de programao de computadorUm computador acionado por um processador central, conhecido como CPU (central processing