livro_cpp

Upload: carlos-henrique-da-mata

Post on 11-Jul-2015

331 views

Category:

Documents


0 download

TRANSCRIPT

C++ Multiplataforma e Orientao a Objetosverso preliminarEssa verso no foi 100% revista, mas est sendo liberada a pedido de muitos alunos.

Por Sergio Barbosa Villas-Boas (sbVB) Email: [email protected] URL: www.sbvb.com.br Verso 7.0, de 23 de Maro de 2006 Consultor em tecnologia e estratgia para desenvolvimento de software multiplataforma, baseado em tecnologias gratuitas e padres abertos.

Sobre o AutorSergio Barbosa Villas-Boas atua como Professor Adjunto no DEL (Departamento de Engenharia Eletrnica e Computao da UFRJ), desde 1987. Sua carreira sempre esteve ligada a desenvolvimento de software. J trabalhou com instrumentao e controle, em sistemas em tempo real, em simulao numrica, sistemas cliente-servidor, sistemas GUI multiplataforma (com wxWidgets), segurana de informao, sistemas web, integrao de sistemas e XML (principalmente com Xerces), sistemas corporativos, sistemas baseados em componentes, objetos distribudos, uso de software gratuito, entre outros assuntos. Ultimamente tem havido nfase no desenvolvimento de sistemas usando o paradigma orientado a objetos. Desde a volta do doutorado no Japo, em 1998, tem se dedicado ao ensino na universidade, e ao continuado aprendizado por participar de diversos cursos e conferncias. Alm disso, dedica-se a projetos de extenso universitria, em geral com consultoria especializada em parcerias com diversas empresas. Participou e participa diretamente de diversos projetos de desenvolvimento de software, especialmente para COTS (Commercial Off-The-Shelf, ou produto de prateleira), usando principalmente C++ multiplataforma e tambm java. Desde 2000, mantm o site www.sbvb.com.br, onde divulga o material de diversos cursos que ministra. Esse livro est sendo re-editado em funo de vrios pedidos, mas no o material mais recente e revisado do autor a respeito de C++. Os slides do curso disponveis no site esto mais atualizados que esse livro.

2 / 441

ndiceSobre o Autor.......................................................................................................................2 ndice .....................................................................................................................................3 1 1.1 1.2 1.3 2 2.1 2.2 2.3 2.4 2.5 2.6 2.6.1 2.7 2.8 2.9 2.9.1 2.10 2.11 2.12 2.13 2.13.1 2.13.2 2.14 2.15 2.16 2.16.1 2.16.2 2.16.3 2.17 Introduo ...............................................................................................................14 Prefcio .................................................................................................................14 Histrico do livro.................................................................................................19 Como usar o livro ................................................................................................21 Tecnologia da informao e negcios.................................................................24 Experincia de vida e viso de negcios.........................................................24 Negcios forjam a tecnologia............................................................................27 Classificao dos atores do ambiente para TI ..............................................29 Ambiente econmico e modelo de negcio....................................................30 Web impacta ambiente econmico .................................................................31 Analogia entre militarismo e negcios............................................................32 Inteligncia 33 Conhecimento empacotado..............................................................................34 O produto software .........................................................................................36 Analogia entre biologia e negcios ..................................................................38 Zona de conforto 39 Resultado da competio: resta um ou poucos ............................................40 Melhores prticas................................................................................................40 Incorporao de novidades ...............................................................................41 Mercadoria e produto diferenciado .................................................................44 Mercadoria escassa 45 Estratgia lucrativa 46 O objetivo atender ao cliente ?......................................................................47 Vantagem competitiva.......................................................................................49 Sociedade do conhecimento.............................................................................50 Mudana do paradigma de negcios Mercadorizao 53 52

Remunerao agregao de valor na cadeia produtiva 54 Polticas de apoio a economia do software.................................................54 3 / 441

2.17.1 2.17.2 2.17.3 2.17.4 2.18 2.18.1 2.18.2 2.18.3 2.18.4 2.18.5 2.18.6 2.18.7 2.19 2.20 2.21 2.21.1 2.21.2 2.21.3 2.21.4 2.22 2.22.1 2.23 2.24 2.25 2.26 3 3.1 3.2 3.3 3.4 4 4.1 4.1.1 4.1.2

O que o governo pode fazer 54 O que os indivduos podem fazer 56 O que as universidades podem fazer O que as empresas podem fazer 57 Livro no Sculo 21...............................................................................................58 O modelo tradicional 58 Mudanas no ambiente O novo modelo 61 Leitor gosta de ter livro em formato eletrnico Aferio de mrito acadmico Idioma Portugus no mundo 65 66 66 Quem est usando o modelo novo 63 59 56

Tribos de tecnologia ...........................................................................................67 A escolha tecnolgica uma escolha estratgica.........................................68 Java C++ ...........................................................................................................70 Porque sim Java Porque no Java Porque sim C++ Porque no C++ Anlise SWOT 78 Resumo .................................................................................................................80 Estratgia e C++ ................................................................................................83 Humor ...................................................................................................................84 Exerccios .............................................................................................................84 Conceitos introdutrios ........................................................................................87 Breve histria do C/C++....................................................................................87 Classificao de interfaces de programas ......................................................89 Programando para console ...............................................................................90 Linguagens de programao de computador................................................90 Conhea o Seu Compilador ..................................................................................92 Visual C++ 6.0 SP5 .............................................................................................92 Reconhecendo o Compilador Hello world para DOS 4.1.2.1 98 4 / 441 92 70 71 73 74

Estratgia para integradores de soluo........................................................75

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

4.1.3 4.1.4 4.1.5

Usando o Help 102 Projetos (programas com mltiplos fontes) Bibliotecas 4.1.5.1 4.1.5.2 4.1.5.3 104 103

Fazer uma biblioteca..........................................................................104 Incluir uma biblioteca num projeto ................................................106 Examinar uma biblioteca ..................................................................106 106 108 Macro para formatao do texto fonte...........................................108 Acrescentando Lib no Project Settings .........................................125 Class View.............................................................................................126 Usando bibliotecas de ligao dinmica (DLL) ...........................127 DLL para Windows.............................................................................131 Otimizao do linker para alinhamento de cdigo ......................131 131

4.1.6 4.1.7

Debug 4.1.7.1 4.1.7.2 4.1.7.3 4.1.7.4 4.1.7.5 4.1.7.6

Dicas extras

4.1.8 4.2 4.2.1 4.2.2 4.3 4.3.1 4.3.2 4.4 4.4.1 4.4.2 4.4.3 4.4.4 4.5 4.5.1 4.5.2 4.5.3 4.5.4

Detectando vazamento de memria Reconhecendo o Compilador Hello world para DOS 4.2.2.1 MinGW djgpp 134 133

Borland C++ builder 5.0..................................................................................133

Adicionando argumentos para a linha de comando ....................136 137 137 138

C++ para win32 gratuito .................................................................................137

Dev-C++ 4.0 .......................................................................................................138 Reconhecendo o Compilador Hello world 4.4.2.1 139

Adicionando argumentos para a linha de comando ....................140 142

Usando o Help 142 Projetos (programas com mltiplos fontes) Hello world 4.5.1.1 143 g++ (do unix) ....................................................................................................142 Adicionando argumentos para a linha de comando ....................143 143

Usando o Help 143 Projetos (programas com mltiplos fontes) Bibliotecas 4.5.4.1 144 5 / 441

Incluir uma biblioteca num projeto ................................................144

4.5.4.2 4.5.4.3 4.5.5 4.5.6 4.5.7 4.5.8 4.5.5.1 Debug

Fazer uma biblioteca..........................................................................144 Examinar uma biblioteca ..................................................................145 Instalando uma biblioteca dinmica ..............................................146 148 149

Fazendo uma biblioteca usando libtool 145

Definindo um identificador para compilao condicional 148 O pacote RPM do linux 4.5.8.1 4.5.8.2 4.5.8.3 rpm binrio e rpm com fonte............................................................149 Alguns comandos do rpm .................................................................149 Construindo um rpm..........................................................................150

4.5.8.3.1 Introduo ........................................................................................150 4.5.8.3.2 O header ............................................................................................151 4.5.8.3.3 Preparao (prep) ...........................................................................152 5 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12 5.13 5.13.1 6 6.1 6.2 6.3 6.4 6.5 6.5.1 Princpios de C/C++ ............................................................................................154 O primeiro programa........................................................................................154 Formato livre .....................................................................................................154 Chamada de funo ..........................................................................................155 Declarao e definio de funes.................................................................155 Comentrios.......................................................................................................156 Identificador.......................................................................................................156 Constantes literais ............................................................................................157 Escopo.................................................................................................................157 Tipos de dados padro (Standard Data Types) .........................................158 Palavras reservadas do C++ (keywords) .....................................................158 Letras usadas em pontuao..........................................................................159 Letras usadas em operadores.........................................................................159 Exerccios resolvidos ........................................................................................159 Resposta 160 Estrutura do Compilador....................................................................................161 Entendendo o Compilador ..............................................................................161 Prottipos (prototypes)...................................................................................162 Projetos em C/C++ ...........................................................................................164 Header Files (*.h) ............................................................................................166 Biblioteca (library) ..........................................................................................167 Utilizando Bibliotecas prontas 167 6 / 441

6.5.2 6.6 7 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.8 7.9 7.10 7.10.1 7.11 7.12 7.13 7.14 7.15 7.16 7.17 7.18 7.19 7.20 8 8.1 8.2 8.3 9 9.1

Fazendo bibliotecas 168 Regras do compilador ......................................................................................169 Linguagem C/C++................................................................................................171 Chamada de funo por referncia e por valor ...........................................171 Tipos de dados definidos pelo programador ...............................................172 Maquiagem de tipos (type casting) ..............................................................173 Operaes matemticas ..................................................................................174 Controle de fluxo do programa ......................................................................174 Execuo condicional.......................................................................................175 Laos (loop) de programao.........................................................................175 Lao tipo do-while 175 while for 176 Alterando o controle dos laos com break e continue Exerccio 178 switch-case .........................................................................................................178 arrays ...................................................................................................................179 Ponteiros.............................................................................................................181 Ponteiro para ponteiro 182 Arrays e ponteiros.............................................................................................184 Arrays multidimensionais ...............................................................................184 Parmetros da funo main ............................................................................184 Compilao condicional...................................................................................186 Pr processador e tokens (smbolos) usados pelo pr-processador.......186 #define ................................................................................................................186 operador # ..........................................................................................................187 operador ## ........................................................................................................187 Nmero varivel de parmetros.....................................................................187 Exerccios ...........................................................................................................188 Tcnicas para melhoria de rendimento em programao............................190 Reutilizao de cdigo .....................................................................................190 Desenvolvimento e utilizao de componentes..........................................192 Programao estruturada ...............................................................................193 Programao orientada a objeto .......................................................................195 Conceitos bsicos..............................................................................................195 7 / 441 177 176

9.2 9.3 9.4 9.4.1 9.4.2 9.5 9.5.1 9.6 9.7 9.8 9.9 9.10 9.10.1 9.10.2 9.11 9.11.1 9.11.2 9.11.3 9.11.4 9.11.5 9.11.6 9.11.7 9.12 9.12.1 9.12.2 9.12.3 9.12.4 9.13 9.14 9.15 9.15.1 9.16 9.16.1 9.16.2 9.16.3

Nomenclatura para paradigma procedural e para paradigma OO .........195 Representao grfica de classes ..................................................................196 Objetos................................................................................................................197 Uso de classes (funes dentro de estruturas) Operador de escopo 199 Polimorfismo ......................................................................................................200 Argumento implcito (default argument) 200 Anlise, projeto e programao OO ..............................................................201 Exemplo conceitual sobre herana ...............................................................201 Herana...............................................................................................................203 Herana mltipla e classe base virtual .........................................................210 Unio adiantada unio tardia (early bind late bind)...........................213 Classe abstrata 215 Porque usar unio tardia ? 219 Construtor e destrutor de um objeto............................................................220 Default constructor (construtor implcito) 222 Ordem de chamada de construtor e destrutor para classes derivadas 223 Inicializao de atributos com construtor no implcito 225 Construtor de cpia (copy constructor) e operator= Destrutores virtuais 229 Array de objetos 231 232 233 233 Array de objetos e construtor com parmetros 228 198

Polimorfismo - sobrecarga de operadores....................................................233 Operador de atribuio (assignment operator operator=) O nico operador ternrio 234 Operadores binrios e unrios 235 this .......................................................................................................................239 lvalue ...................................................................................................................239 Encapsulamento de atributos e mtodos ....................................................240 friend 244 247 248 Alocao de Memria.......................................................................................246 Vazamento de memria Objetos com memria alocada Porque redefinir o construtor de cpia e operador de atribuio ?

Array de objetos com construtor no padro 251 8 / 441

9.17 10 10.1 10.2 10.3 10.4 10.4.1 10.4.2 10.4.3 10.4.4 10.4.5 10.4.6 10.4.7 10.5 10.5.1 10.5.2 10.5.3 10.5.4 10.5.5 10.6 10.6.1 10.6.2 10.6.3 10.6.4 11 12 12.1 12.2 12.3 12.4 12.5 13 13.1 13.2 13.3

Criando uma nova classe .................................................................................252 Biblioteca padro de C++ ..................................................................................255 Introduo..........................................................................................................255 Entrada e sada de dados pelo console.........................................................255 Sobrecarga do operador insersor () ...........................256 Formatando Entrada / Saida com streams..................................................258 Usando flags de formatao 259 261 262 Examinando os flags de um objeto ios 260 Definindo o nmero de algarismos significativos Preenchendo os espaos vazios com o mtodo fill Manipuladores padro 262 264 Manipuladores do usurio 263 Sada com stream em buffer Acesso a disco (Arquivos de texto para leitura/escrita)............................265 Escrevendo um arquivo de texto usando a biblioteca padro de C++ 266 Escrevendo um arquivo de texto usando a biblioteca padro de C Lendo um arquivo de texto usando a biblioteca padro de C++ Dica para leitura de arquivo de texto. 268 Lendo um arquivo de texto usando a biblioteca padro de C 268 Acesso a disco (Arquivos binrios para leitura/escrita)............................269 Escrevendo um arquivo binrio usando a biblioteca padro de C++ 269 Escrevendo um arquivo binrio usando a biblioteca padro de C. Lendo um arquivo binrio usando a biblioteca padro de C++ 270 Lendo um arquivo binrio usando a biblioteca padro de C 270 Tratamento de exceo (exception handling) ...............................................272 RTTI Identificao em tempo de execuo .................................................276 Introduo..........................................................................................................276 Configurando o compilador para RTTI ........................................................276 Palavras reservadas para RTTI......................................................................276 typeid...................................................................................................................276 typeid e late bind ..............................................................................................277 namespace .............................................................................................................278 Introduo..........................................................................................................278 Namespace aberto ............................................................................................280 Biblioteca padro de C++ usando namespace...........................................281 9 / 441 269 266 267

13.4 14 14.1 14.2 14.2.1 14.3 14.4 14.5 14.5.1 14.5.2 14.5.3 14.6 14.6.1 14.6.2 14.6.3 14.6.4

Adaptando uma biblioteca existente para uso de namespace std .........282 Programao para web com C++ e VBMcgi...................................................286 Introduo..........................................................................................................286 Navegando na teia ............................................................................................288 CGI 290 Escolha de uma tecnologia para web/cgi .....................................................291 Histria e futuro da VBMcgi ...........................................................................293 Instalando VBMcgi ...........................................................................................294 Windows, Visual C++ Unix, Gnu C++ compiler 294 298 300 301 Windows, Borland Builder C++ 5.0

Usando VBMcgi.................................................................................................301 Programas CGI e web server Hello VBMcgi 309 Decodificando o formulrio 309 14.6.4.1 14.6.4.2 14.6.4.3 14.6.4.4 14.6.4.5 14.6.4.6 textbox (caixa de texto)....................................................................310 textarea (rea de texto). ...................................................................311 checkbox (caixa de checagem) ........................................................312 radio button (boto radial) ..............................................................313 drop-down (deixar escapulir para baixo) ......................................315 Exemplo completo na web................................................................316 316 320 Adicionando implicitamente strings...............................................319 Passando parmetros para a funo da call function ..............323 326 Programas CGI e o ambiente (environment) 305

14.6.5 14.6.6 14.6.7 14.6.8

Usando a funcionalidade string change 14.6.5.1 14.6.6.1 Usando a funcionalidade call function Redirecionando um programa cgi Cookies 327 14.6.8.1 14.6.8.2 14.6.8.3 14.6.8.4

Configurao do navegador para ver os cookies ..........................328 Expirao .............................................................................................328 Domnio de um cookie .......................................................................330 Sistema na web com login usando cookies....................................330 334

14.6.9 14.7 14.8

Programas cgi com dados no html

Contador de pgina ..........................................................................................334 Calendrio ..........................................................................................................336 10 / 441

14.9 14.10 15 15.1 15.2 15.2.1 15.2.2 15.2.3 15.3 15.3.1 15.4 16 16.1 16.1.1 16.1.2 16.1.3 16.2 16.2.1 16.2.2 16.2.3 16.2.4 16.2.5 16.3 16.3.1 16.4 16.4.1 16.4.2 16.4.3 16.4.4 16.4.5 16.4.6

Menu em arquivo ..............................................................................................338 Programao em 3 camadas e sistemas na web com VBMcgi..............342 Analogia entre template e frma de bolo .....................................................344 Programao genrica por exemplos ............................................................345 Funo genrica Classe genrica 346 Algoritmos genricos 348 Classes genricas contenedoras.....................................................................352 VBList: uma lista encadeada genrica 352 VBMath - uma biblioteca de matemtica matricial em genrico............358 STL - Standard Template Library ....................................................................364 Introduo..........................................................................................................364 Classes contenedoras Classes iteradoras Algoritmos 365 367 368 371 365 365 345 Programao genrica (template) ....................................................................344

Prembulo ..........................................................................................................365 Classes e funes auxiliares 16.2.1.1 Operadores de comparao Classes de comparao 369 Classes aritmticas e lgicas 16.2.5.1 Par (pair) ..............................................................................................367

Complexidade de um algoritmo 371 Algumas regras....................................................................................372 Iterador (iterator).............................................................................................373 Iteradores padro para insero em contenedores 373 Contenedor (container)...................................................................................375 Vector List376 Pilha (Stack) Fila (Queue) 377 377 379 375

Fila com prioridade (priority queue) 16.4.6.1 16.4.6.2

Contenedores associativos ordenados 380 Set..........................................................................................................381 Multiset.................................................................................................383 11 / 441

16.4.6.3 16.4.6.4 16.5 16.5.1 17 17.1 17.1.1 17.1.2 17.1.3 17.2 17.2.1 17.2.2 17.3 17.3.1 17.3.2 17.3.3 17.3.4 18 18.1 18.2 18.2.1 18.2.2

Map........................................................................................................383 Multimap ..............................................................................................385

Algoritmos ..........................................................................................................385 remove_if 385 Componentes de Programao..........................................................................388 Para Windows & DOS ......................................................................................388 Programa para listar o diretrio corrente (Visual C++) Porta Serial 389 Porta Paralela 392 Componentes para unix (inclui Linux).........................................................394 Programa para listar o diretrio corrente 394 398 Entrada cega (til para entrada de password) Conceitos de programao em tempo real Programa em tempo real com interrupo 399 403 388

Elementos de programao em tempo real .................................................399 Programa em tempo real com status loop 399 Programas tipo watch dog (co de guarda) 405 Boa programao m programao...............................................................406 Introduo..........................................................................................................406 Itens de boa programao...............................................................................407 Identao correta 407 No tratar strings diretamente, mas por classe de string 407 18.2.2.1 Motivos pelos quais m programao tratar strings diretamente ...........................................................................................................408 18.2.2.2 Soluo recomendada para tratamento de strings: uso de classe de string 409

18.2.3 18.2.4 18.2.5 18.2.6 18.2.7 19 19.1 19.2 19.3 19.4

Acrescentar comentrios elucidativos 411 Evitar uso de constantes relacionadas 411 Modularidade do programa412 Uso de nomes elucidativos para identificadores Programar em ingls 413 Erros de programao, dicas e truques............................................................416 Cuidado com o operador , (vrgula) ..............................................................416 Acessando atributos privados de outro objeto ...........................................416 Entendendo o NaN ...........................................................................................417 Uso de const_cast .............................................................................................418 12 / 441 413

19.5 19.6 19.7 19.8

Passagem por valor de objetos com alocao de memria.......................419 Sobrecarga de insersor e extrator quando se usa namespace .................420 Inicializando membro esttico de uma classe ............................................421 Alocao de array de objetos no permite parmetro no construtor ....422

19.9 Ponteiro para funo global e ponteiro para funo membro (ponteiro para mtodo) ................................................................................................................422 19.10 19.11 19.12 19.13 20 20.1 20.1.1 20.1.2 20.1.3 SingleTon ........................................................................................................423 Slicing em C++ ..............................................................................................424 Uso desnecessrio de construtores e destrutores ..................................426 Dicas de uso de parmetro implcito.........................................................427 Visual C++ 6.0 SP5 ...........................................................................................429 for no isola escopo 429 Comportamento do ifstream quando o arquivo no existe inicializao de variveis membro 429 estticas ios::nocreate no existe quando fstream usado com namespace std 430

Incompatibilidades entre compiladores C++ ................................................429

20.1.4 Compilador probe diretamente 430 20.1.5 20.1.6 20.1.7 20.2 20.2.1 20.2.2 20.2.3 20.3 20.3.1 21 21.1 21.2

Namespace lookup no funciona em funes com argumento 430 Encadeamento de using no funciona 431 431 Erro em instanciamento explcito de funes com template Inabilidade de distinguir namespace global de local 431

Borland C++ Builder (verso 5.0, build 12.34)............................................431 Erro na deduo de funes com template a partir de argumentos const 431 Erro na converso de const char * para std::string Valor do elemento em vector de STL 432 432 Gnu C++ (verso 2.91.66) ...............................................................................432 Bibliografia.............................................................................................................433 Livros ...................................................................................................................433 Pginas web .......................................................................................................438

13 / 441

1 Introduo

1.1

Prefcio

A linguagem de programao C/C++ um assunto j 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 ou necessidade para um novo livro sobre C/C++ ? Acredito que sim, pelos motivos abaixo. 1. Deve-se discutir a opo de uso de C/C++ como uma escolha estratgica. Mesmo que no seja gestor de uma empresa, o indivduo precisa gerenciar a prpria carreira. Mesmo que no se trabalhe com vendas, preciso ser capaz de vender a prpria fora de trabalho no mercado. muito conveniente para o profissional de tecnologia de informao desenvolver minimamente o conhecimento sobre estratgia (empresarial e pessoal). Para desenvolver esse tipo de pensamento e atitude, deve-se discutir elementos que auxiliem a interpretao o mundo a partir de uma viso de negcios, particularmente negcios relacionados a tecnologia de informao. Inmeros negcios e inovaes na rea de tecnologia envolvem o uso de C/C++, mas curiosamente nunca vi um livro tutorial sobre C/C++ que discutisse minimamente sobre o ambiente de negcios, e o relacionando da escolha de tecnologia e de estratgia pessoal e empresarial. A escolha da linguagem C/C++ deve (ou no) ser feita, com conhecimento das vantagens e desvantagens dessa escolha. Na primeira parte deste livro, a partir da pgina 23, discute-se o relacionamento entre tecnologia e negcios, escolha tecnolgica, estratgia de indivduos empresas, e assuntos relacionados. Como conseqncia dessa reflexo, analisa-se a escolha da linguagem C/C++ ou alternativas, verificando vantagens e desvantagens. 2. Deve-se mostrar que C/C++ opo concreta para programao para web/cgi. Ainda h MUITO o que fazer no mundo a partir do desenvolvimento de sistemas com tecnologia de web/cgi. Quando a web conquistou para o mundo, a partir de cerca de 1995, eu j trabalhava h muito tempo com C/C++. Tive a expectativa que a web seria mais uma novidade no setor de tecnologia de informao, para a qual se poderia desenvolver software com a linguagem C/C++. No incio, fiquei incomodado pela dificuldade de se encontrar referncias boas sobre como programar para web/cgi com C/C++.

14 / 441

A expectativa de ser possvel usar C/C++ para web/cgi correta, apenas o material tutorial e as bibliotecas de apoio ainda no eram boas o suficiente. Resolvi ento estudar e pesquisar sobre assunto, fazendo o trabalho convergir para uma biblioteca e um material tutorial para desenvolvimento de sistemas web/cgi baseado em C++. O resultado a biblioteca gratuita VBMcgi [45], que permite desenvolvimento de software para web/cgi usando C++ multiplataforma. Esse desenvolvimento feito com uma arquitetura de software elegande, em que se garante isolamento entre a camada de apresentao (onde o webdesigner usar html) e a camada de implementao das regras de negcio (onde o webmaster usa C++ e VBMcgi). Quem usa ou quer usar C++ no precisa aprender outra linguagem para desenvolver software para web/cgi. O uso da biblioteca VBMcgi permite o desenvolvimento de software para web em C++ com arquitetura em 3 camadas. Isso leva o que leva ao desenvolvimento de sistemas com boa manutebilidade (isto , pode-se fazer manuteno facilmente). 3. 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. Considero isso em geral 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 23), h um conjunto de explicaes sobre operacionalidade dos principais compiladores para Windows e unix. Alm disso, h um captulo sobre Diferenas entre compiladores (pagina 426), onde so listadas pequenas (porm importantes) diferenas de comportamento entre os compiladores. 4. C/C++ deve ser ensinado com nfase em Orientao a Objetos. Os conceitos de desenvolvimento de sistemas orientados a objetos no esto maduros ainda. Apesar de todas as publicaes sobre desenvolvimento de sistemas usando paradigma orientado a objetos, nem todas as questes foram resolvidas ainda. Por exemplo: banco de dados orientados a objetos algo ainda precisa provar que tem vantagens em relao a banco de dados relacionais (desses que usam SQL). Mas mesmo assim, basicamente claro que a linguagem C++ e o paradigma OO so em muitos casos mtodo superior de desenvolvimento se comparado linguagem C e paradigma procedural. Embora C++ tenha surgido depois de C, no em geral uma boa abordagem didtica ensinar a um jovem profissional C puro antes de C++. Isso porque seria uma grande perda de tempo (para dizer o mnimo). A melhor abordagem didtica ensinar C++ diretamente, com nfase em orientao a objetos, e apenas mencionar C quando for preciso.

15 / 441

O fato de haver um legado extenso sobre C (literatura, exemplos, etc.), e de que C++ tem compatibilidade reversa com C (isso , em geral um programa C tambm um programa C++), faz com que muita literatura tradicional seja na prtica algo contra-indicado para um profissional jovem. A nfase em C++ e OO, em detrimento de C, deve ser a nfase de um livro didtico moderno. Ainda h relativamente poucos livros com essa nfase. 5. Deve-se pensar em produzir um livro num modelo inovador, compatvel com o sculo 21. Apesar de toda a modernidade, e de toda a impressionante produo de obras de literatura tcnica, o modelo de negcios na produo de livros curiosamente pouco evoluiu em relao ao modelo tradicional. Esse livro est sendo produzido e distribudo num modelo inovador, compatvel com o ambiente do sculo 21. Leia mais sobre assunto na seo 2.18. 6. Deve-se ensinar regras prticas para boa programao. Ainda h relativamente poucos livros de C/C++, principalmente em Portugus, que enfatizam a boa programao, reutilizao de cdigo e o trabalho em equipe. Uma abordagem simplria da atividade do profissional de TI acreditar que programa de boa qualidade aquele que funciona. Essa abordagem est superada hoje. H valorizao do processo de desenvolvimento, na arquitetura e na manutebilidade do software. H interesse no ciclo de vida do produto que se est desenvolvendo. De uma forma geral, entende-se que quando o processo de desenvolvimento feito dentro de certas caractersticas, a qualidade do produto final melhor. Isso se reflete na programao, onde se espera que o profissional siga regras de boa programao, e que tenha atitude de usar (e eventual mente desenvolver) componentes de software. No captulo Boa programao m programao (pgina 406), enfatizase 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. Alm disso, o conhecimento consolidado de como se desenvolvem e se usam bibliotecas e componentes, discutido na parte 2 do livro, permite ao programador usar com destreza bibliotecas e componentes feitas por outras pessoas, e com isso melhorar muito seu desempenho de programao. Eventualmente pode-se tambm trabalhar no sentido inverso, isto , desenvolvendo bibliotecas para que outros usem, e considerar a biblioteca como o produto da empresa. 7. Deve-se produzir obras originais em Portugus. amplamente aceito o fato de que atualmente o centro do desenvolvimento de tecnologia de

16 / 441

informao produz obras originais no idioma Ingls. Muitos livros so produzidos originalmente em Ingls, e posteriormente so traduzidos para Portugus e outros idiomas. Qualquer indivduo ou empresa que pretenda ter seu trabalho de computao reconhecido no atual momento do mundo, com pensamento global, deve ter contedo produzido em Ingls. Portanto, produzir uma obra original em Portugus seria investir num idioma fora do centro de progresso, e portanto um desperdcio de energia (pois se poderia estar investindo para produzi-lo em Ingls, com visibilidade para todo o mundo). Enquanto me dedico a esse livro, observo alguns colegas professores de universidade que se empenham por produzir livros em Ingls, o que merece muito respeito. O fato de produzir uma obra original como essa em Portugus portanto, antes de tudo, um ato de amor ao nosso pas e a nossa cultura. tambm um ato de f nas chances do Brasil (e nos pases que falam Portugus) de assumir um papel mais slido no mercado mundial de software e assuntos relacionados. Nosso povo tem reconhecidas caractersticas de criatividade e flexibilidade muito valorizadas na atividade de desenvolvimento de software. Na seo 2.18.7, na pgina 66, fala-se mais sobre a situao do idioma Portugus no mundo. Na seo 18.2.7, na pgina 413, discute-se sobre a escolha do idioma para a programao em si. Apesar de esse livro ser produzido originalmente em Portugus, quase sempre se escreve cdigo fonte no idioma Ingls. Isso no uma contradio, mas uma forma de ao recomendada a partir de uma anlise ponderada do ambiente, e de formulao de estratgia. a. Idioma ingls nos cdigos fonte. Considerando-se combinadamente alguns fatores j abordados, conclui-se que o melhor idioma para os programas fonte de exemplo ingls. O desenvolvedor deve trabalhar com ateno ao mesmo tempo em tecnologia e em negcios. No mundo globalizado, empresas so compradas por outras empresas a todo momento. Seja uma empresa A, cujo produto um software. Seja uma empresa maior B, que se interessa em comprar a empresa A (menor que B, mas apresentando bom crescimento). O processo de a empresa compradora B avaliar no valor da empresa A inclui a observao do cdigo fonte. Se o cdigo fonte em Ingls, a empresa A passa a ser vendvel mundialmente. Se o desenvolvedor e o empreendedor entendem que escrever o cdigo fonte de seus programas em ingls o que deve ser feito, ento o material tutorial deve ensinar e induzir o profissional a trabalhar dessa forma. Mas como se deseja produzir um material em Portugus, ento o livro deve ter explicaes em texto corrido em Portugus, mas ter os cdigos fonte de exemplo em Ingls.

17 / 441

Convm comentar que como autor, sou tambm consumidor de livros sobre desenvolvimento de software. Qualquer livro sobre tecnologia atualmente produzido em relativamente pouco tempo, e isso faz aumentar a probabilidade de erro. Um livro sobre software traduzido de Ingls para Portugus, cheio de cdigos fonte, em que o tradutor opte por traduzir esse cdigo fonte, faz aumentar muito a probabilidade de haver erro no livro. Isso porque quase certo que o tradutor jamas compilou o texto que apresenta no livro (mas o autor original em geral faz isso). Em outras palavras: alm de poder ser considerado conceitualmente inadequado desenvolver software escrevendo em Portugus, o leitor de livro traduzido ainda tem que enfrentar os provveis erros na traduo do cdigo fonte. Por tudo isso, e tambm pelo fato de o leitor desse livro certamente complementar seus conhecimentos lendo diretamente em Ingls, creio que o melhor que se deve fazer pelo profissional em fase de formao ensina-lo com cdigos de exemplo basicamente em Ingls, como feito nesse livro. 8. Mais lenha na famosa briga entre C++ e 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 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++. Na seo Java C++, na pgina 70, discute-se a comparao entre C++ e Java, do ponto de vista estrutural e estratgico. Em pleno sculo 21, C++ uma linguagem viva, vibrante e com muito, muito, futuro. Pensando assim, 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. Enfim, a partir das justificativas acima, creio que ainda h trabalho a ser feito no campo de autoria de livros para C++. Trabalho diretamente lecionando C++, programao e desenvolvimento de sistemas usando o paradigma orientado a objetos. Percebo que h constante escassez de gente qualificada, seja para os diversos projetos que fao na universidade, seja para ofertas de emprego em empresas boas (isto , onde se desenvolve software de alta densidade). H

18 / 441

inmeras ofertas profissionais para quem realmente conhece esse assunto, com remunerao em geral bem acima da mdia nacional. Espero que a disponibilizao desse livro sobre C++ incentive a formao de profissionais de software. Como efeito imediato, espero perceber um aumento na quantidade e qualidade de profissionais de software nessa linguagem. Assim, haver gente para compor quadros especializados para tocar projetos interessantes que vo surgir. Como efeito indireto, e muito desejvel, espero ajudar o Brasil, bem como todos os povos que falam Portugus, a melhorar sua qualificao tcnica, e com isso obter melhoria no nvel de emprego humano em atividade econmica. Em ltima anlise, espero colaborar com o desenvolvimento econmico e bem estar social.

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 Borland 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, com o projeto de escreve-lo aos poucos e disponibilizar as verses correntes em pgina web. Definiu-se o nome do livro como C/C++ Multiplataforma. Chamou-se essa verso de 1.0, ainda com inconsistncias. Mesmo assim foi 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.

19 / 441

6. Em Julho de 2000, fiz diversas melhorias baseado na experincia de um curso oferecido com esse livro. Essa foi a 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. 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 verso 5.1 basicamente idntica a verso 5.0, apenas acrescentando-se os links PDF). Essa foi a primeira verso divulgada amplamente pela web. a. Incluiu-se um ndice. b. Retirados quase todos os trechos de cdigo c++ 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 pacotes RPM para linux. e. Melhorou-se o captulo sobre tratamento de exceo. f. Melhorou-se o captulo sobre namespace.

20 / 441

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, e com isso iniciou-se o formato compatvel com o modelo de negcios atual do livro. 9. Em Maro de 2002, verso 6.0. (essa verso no chegou a ser divulgada) a. Inclui-se diversos comentrios construtivos e sugestes de leitores enviadas por email. b. Re-escreveu-se toda a parte de estratgia e C++, o que corresponde a primeira parte do livro. c. A Bibliografia foi toda refeita, com incluso de inmeros livros e sites na web. Nessa parte h um breve comentrio sobre cada uma das referncias. d. Nova diviso do livro em 8 partes. e. Refez-se os slides que apoiam o curso de C++, em concordncia com as 8 partes do livro. f. Incluso de captulo sobre programao cgi com VBMcgi. g. Incluiu-se uma seo com um componente para varrer rvore de diretrios em unix. h. Acrescentou-se o compilador Dev-C++ na lista de compiladores comentados no captulo Conhea o Seu Compilador. i. Incluiu-se exerccios. 10. Em Maro de 2006, verso 7.0. a. Reformulao profunda nos slides que acompanham o curso. b. Melhorias na parte de STL. c. Mudana na ordem das partes do livro. d. Pequenas mudanas gerais

1.3

Como usar o livro

O livro est dividido em 8 partes. Abaixo est o resumo do contedo de cada uma das partes. Parte 1: Porque C / C++ ? Tecnologia & estratgia pgina 23. Nessa parte discute-se possibilidades e estratgias para profissionais e empresas que atuam no mercado de tecnologia de informao. No contexto da discusso, aborda-se a escolha de tecnologia como uma escolha estratgica. Discute-se tambm

21 / 441

aspectos da sociedade do conhecimento. Essa parte do livro no explora a carne da linguagem C/C++ em si. Para leitores interessados em apenas aprender a linguagem, essa parte pode ser ignorada. Pode-se tomar essa parte do livro como uma resposta a seguinte pergunta: Porque estudar C++ ao invs das alternativas ? . Parte 2: Fundamentos de C / C++. Nessa parte discute-se os fundamentos da linguagem. Trata-se de um texto dirigido a iniciantes, mas que eventualmente pode ser til tambm para profissionais experientes. Destaca-se o captulo Conhea o Seu Compilador, que mostra o uso de vrios compiladores C++ diferentes. Parte 3: C++ e Orientao a objetos. Nessa parte apresenta-se os conceitos bsicos de orientao a objetos (herana, encapsulamento, polimorfismo, etc.), e discute-se a forma de implementar esses conceitos em C++. Parte 4: C++ e Orientao a objetos (adendo). Nessa parte so discutidos assuntos complementares da programao orientada a objetos. Por exemplo: Tratamento de exceo (try-catch), namespace, RTTI (Run Time Type Identification), uso da biblioteca padro de C++ (inclui acesso a disco), manipulao segura de strings, uso de const, etc. Parte 5: Programao para web com C++ e VBMcgi. Nessa parte discute-se como utilizar na prtica a linguagem C++ no desenvolvimento de sistemas para web (programao CGI). Para apoio ao desenvolvimento para web com C++, usa-se a biblioteca multiplataforma gratuita VBMcgi (www.vbmcgi.org), mantida pelo autor. Nessa parte h tambm uma discusso estratgica sobre as alternativas tecnolgicas para programao cgi, vantagens e desvantagens das opes. Parte 6: Programao genrica (template). Nessa parte discute-se programao genrica, que em C++ feita com o uso da palavra reservada template (frma, gabarito). Parte 7: STL Standard Template Library. Nessa parte discute-se de forma introdutria o uso da poderosa biblioteca STL, que toda escrita em genrico, e implementa diversos contenedores e algoritmos muito usados em diversas aplicaes. STL atualmente considerado como parte da biblioteca padro de C++. Parte 8: Complementos. Nessa parte apresentam-se alguns conceitos de fechamento, incluindo incompatibilidades entre compiladores, dicas, componentes de programao, etc.

22 / 441

C++ Multiplataforma e Orientao a Objetos

Parte 1:Porque C++ ? Tecnologia & Estratgia

23 / 441

2 Tecnologia da informao e negciosH inmeras linguagens de computador. Porque estudar a linguagem C++ ao invs alguma das alternativas ? Esse captulo procura responder a essa pergunta. A resposta um pouco demorada, pois inclui discusso sobre negcios (business). Mesmo para quem est vido por aprender a programar, uma leitura que vale a pena.

2.1

Experincia de vida e viso de negcios

Em 1982, tendo recm concludo o curso tcnico de eletrnica, eu programava em FORTRAN, assembler de 8080 (antiga CPU da Intel) e calculadoras HP e Texas. O primeiro emprego que tive na vida foi com instalao e manuteno de equipamentos para estdio de TV, na TV Record do Rio de Janeiro, onde tive a oportunidade de ver como um estdio de televiso funciona por dentro. Um dos legados mais importantes que conservo do perodo de 1 ano e meio que trabalhei l a interpretao que passei a dar a programas de TV. Quem j acompanhou a produo de programas de TV, assiste aos programas pensando em como atuam os profissionais do estdio e nos recursos tcnicos que se dispe. O contedo do programa em si apenas uma das informaes que se observa. Nunca mais assisti TV da mesma forma. Posteriormente, a partir de 1985, trabalhei como tcnico num projeto de pesquisa em controle de processos qumicos, no programa de engenharia qumica da COPPE. Esse trabalho tcnico tornou-se trabalho de engenharia, com projeto de software e hardware para aquisio e exteriorizao de sinais analgicos. Na seqncia, o mesmo trabalho tornou-se uma pesquisa de mestrado, em que se analisou, pesquisou, implementou e testou algoritmos de controle multivarivel, aplicados experimentalmente em tempo real numa planta piloto. Para a implementao desse projeto de pesquisa, foi necessrio um grande estudo de programao e desenvolvimento de sistemas. O que se estudava no curso de engenharia e de mestrado, aplicava-se no projeto de pesquisa. Desenvolvi um programa enorme que implementava o controle em tempo real, exibia graficamente os resultados, recebia comandos do console (implementando multi-task cooperativo), interagia com o hardware de aquisio e exteriorizao de dados. Esse programa foi desenvolvido em C++ (compilador Borland C) e executado num PC-XT (o computador que se usava na poca), com sistema operacional MS-DOS 3.3. O programa oferecia ainda um ambiente para que terceiros pesquisadores acrescentassem cdigo de algoritmo de controle que desejassem testar. Em 1991 conclu a tese de mestrado entitulada ambiente de estudos para controle de processos, resultado de mais de 6 anos

24 / 441

de trabalho. O desenvolvimento desse trabalho ajudou a sedimentar diversos conceitos de programao tais como programao em tempo real, interface com hardware, gesto de projeto de software, reutilizao de cdigo, especificao de ambiente de software, programao orientada a objetos, etc. Entre outros legados dessa experincia, quando vejo uma placa de hardware (por exemplo placa com conversor AD/DA, ou placa de vdeo, ou de som) com um manual para desenvolvimento de software, imagino sempre o trabalho do engenheiro que desenvolveu todo o kit. Nunca mais consumi um kit desses da mesma forma. Adicionalmente, costumo imaginar as dificuldades por que passa um gestor de projeto de software que desenvolvido por uma equipe. fcil criticar os bugs dos programas que usamos, mas gerir uma equipe para desenvolver um programa grande e sem bugs no tarefa fcil. Quando fui fazer doutorado no Japo, a partir de 1993, dediquei-me a pesquisa cientfica na rea de controle. Boa parte do trabalho consistia de ler, discutir e entender diversos papers (artigos cientficos), alm de livros e outras referncias. Para implementar os testes da pesquisa, era preciso desenvolver muitos programas, em C++ e em Matlab. Por motivos indiretos foi necessrio um estudo enorme de programao e desenvolvimento de sistemas. Entender o vasto material que se estava estudando j era tarefa rdua, mas no o suficiente. O trabalho de doutorado essencialmente o de produzir conhecimento cientfico, em geral propondo um mtodo, e publicar as concluses na forma de paper, numa revista tcnica indexada. Com isso, empurra-se a cincia para frente. A publicao parte indissocivel do trabalho cientfico. No pode haver uma cincia oculta. Cincia por definio no pode ser oculta. preciso que se publique as concluses do trabalho, para que uma comunidade cientfica possa critica-lo. Qualquer concluso necessariamente deve poder ser confirmada por fatos. Um trabalho cientfico publicado (tornado pblico) tem dois destinos possveis: ou contestado (tambm publicamente), ou por excluso aceito como correto. Por passar pelo curso de doutorado, aprende-se muitssimo, publica-se alguns papers e observa-se o ambiente no qual se produz conhecimento e se expande a cincia. Depois de passar por esse processo, nunca mais interpretei a cincia como antes. Um paper antes de tudo a sntese de um projeto de pesquisa de um ser humano. Depois do doutorado, achei que estava faltando viso de negcios na minha formao, e no ano 2000 fiz o curso de MBKM - um mestrado lato sensu em administrao de negcios com nfase em inteligncia empresarial e gesto do conhecimento. Em paralelo com esse mestrado, dediquei-me a diversos cursos, experincias e pesquisas sobre programao e desenvolvimento de sistemas para web, banco de dados, anlise de sistemas, programao orientada a objetos e outros assuntos relacionados a software. Durante o um de durao ano desse mestrado, ocorreu a ltima fase de euforia da web, e o estouro da bolha. Tudo o que estava ocorrendo no cenrio econmico foi tema de debates e anlises no

25 / 441

curso MBKM. Apoiado pelos estudos desse curso, que incluram diversos estudos de caso de negcios, passei a ver os negcios de forma diferente. Agora, quando sou cliente de uma empresa, reflito sobre a misso da empresa, seu modelo de negcios, sua estratgia e toda a dinmica pela qual a empresa passa para por fim oferecer o tal produto. Aps esses estudos, nunca mais fui um cliente de empresa como antes. Com respeito a atividades acadmicas no DEL (Departamento de Engenharia Eletrnica e Computao da UFRJ), venho ultimamente dedicando-me a lecionar linguagens de programao, com nfase em C++ e orientao a objetos. Adicionalmente, ainda aps o doutorado, tive oportunidade de executar algumas consultorias em que se desenvolveu software em parceria com empresas privadas. Uma dessas experincias foi particularmente boa. O software em questo era bastante avanado. Um mdulo foi o desenvolvimento de um applet java com vrias funcionalidades, sendo uma delas a de enviar dados criptografados (desenvolvido em cima de soquete seguro SSL) para um servio para Windows NT, escrito em C++. No se encontra gente facilmente para desenvolver esse tipo de aplicao. Foi de particular valor a experincia de colaborar com a equipe da empresa privada, num contexto onde h necessidade de respeito a prazos, discusso de opes tecnolgicas, qualidade de software, necessidade de integrar os mdulos, prestar ateno as especificaes exigidas pelo cliente, etc. Essas experincias de vida acumuladas mostram claramente que existe uma dinmica econmica e social sobre a qual as empresas e os negcios se desenvolvem. A viso de negcios claramente influencia as atividades profissionais que fiz televiso, processos qumicos, instrumentao, controle, cincia e consultoria em tecnologia de informao. Obviamente, essa mesma viso influencia muitas outras atividades profissionais, praticamente todas as que existem. Percebi que na compreenso e gesto do mundo, h relativamente poucos nveis pensamento que se situam acima do nvel de negcios. Questes relacionadas a princpios morais, existenciais, filosficos, preservao ambiental e liberdade so alguns desses nveis de pensamento. Mas o que importante enfatizar que a tecnologia (particularmente a tecnologia de informao) claramente um nvel que situa-se abaixo do nvel de negcios. Em outras palavras, em geral a TI serve aos propsitos dos negcios, e no o contrrio seja do ponto de vista de quem usa a tecnologia, seja do ponto de vista de quem a integra, seja do ponto de vista de quem a produz. Na figura 1, mostra-se os nveis de pensamento humano, mostrando como os negcios situam-se acima da tecnologia de informao.

26 / 441

princpios morais, existenciais, de liberdade serve a negcios (business) serve a tecnologia de informaoFigura 1: Nveis de pensamento humano Porque discutir negcios num livro sobre C++ ? Resposta: porque por entender de negcios, pode-se avaliar melhor a estratgia das empresas que produzem as ferramentas de TI que se usa. Em funo dessa estratgia, possvel interpretar as novas funcionalidades que as ferramentas tem, e avaliar se ou no interessante estuda-las e usa-las. Quem entende de negcios nunca mais consome ferramentas de TI como antes. Nas sees seguintes, a discusso prossegue.

2.2

Negcios forjam a tecnologia

As foras que impulsionam o desenvolvimentos de produtos e o ambiente profissional de tecnologia de informao so fortemente influenciadas pela viso de negcios. Portanto, muito importante que um profissional ou estudante de tecnologia de informao seja minimamente iniciado em negcios, administrao e assuntos relacionados. A partir de uma compreenso mnima de como geralmente se pensa e age no ambiente de negcios, pode-se definir melhor uma estratgia de atuao pessoal e/ou empresarial. til entender de negcios tambm pelo fato de que a experincia mostra que uma carreira no setor de TI muitas vezes culmina com o profissional tornando-se gerente ou empresrio. Por um motivo ou por outro, o conhecimento de negcios de grande valor. Como se sabe, o empresrio deve entender bem de negcios, ou sua empresa provavelmente quebrar. O cargo de gerente igualmente requer do profissional viso de negcios. comum que o gerente tenha remunerao varivel, e existe necessidade de ele assumir e compartilhar riscos praticamente como se fosse o prprio dono da empresa. Somente consegue esse posto profissional a partir de uma atitude empreendedora, ou viso de negcios.

27 / 441

Mesmo enquanto no se atinge posto de gerncia ou de dono de empresa, um profissional de TI mais valorizado por compreender o significado de negcios em que se insere o projeto com o qual est envolvido. Por compreender bem a misso da empresa que representa, o profissional ter melhores condies de executar adequadamente suas tarefas. Boa parte dos clientes de TI so empresas que compram sistemas com objetivo de melhorar a eficincia de seus prprios negcios. Por exemplo: uma loja compra um sistema para automatizar as vendas e fazer gesto integrada do estoque. Para que se possa entender claramente o que o cliente quer seja para desenvolver ou para instalar um sistema, ou ainda para treinar os operadores preciso ter viso de negcios. Quem paga pelo sistema, em ltima anlise o dono da empresa, e preciso que ele seja convencido na sua linguagem de que o sistema tem valor. O sistema de informao deve ser desenvolvido para satisfazer em primeiro lugar o dono da empresa, e no o operador ou o gerente de TI. H inmeras referncias de boa qualidade para quem se interessa por negcios. Revistas Brasileiras como Exame, Isto Dinheiro, e estrangeiras tais como Fortune, The Economist e Fast Company divulgam excelentes matrias sobre negcios. Todas elas possuem tambm pgina na web (veja a seo de bibliografia para referncias, na pgina 433). Uma referncia boa para o estudar o relacionamento entre tecnologia e negcios o livro Empresa na velocidade do pensamento, por Bill Gates [42]. Esse livro no uma propaganda de Windows. Trata-se de um texto MUITO acima desse nvel, abordando o funcionamento de diversos negcios, e a forma como devem ser os sistemas de informao para suprir suas necessidades. O livro descreve claramente como um sistema de informao deve ser projetado para gerar valor para diversos tipos de negcios. Projeto de avies, banco e financeira, venda de veculos, educao, sade, gesto e biotecnologia so alguns dos tipos de negcios que se aborda. A linguagem utilizada enfatiza os resultados e a relao custo/benefcio que a tecnologia traz (ou deveria trazer) para os negcios, que em ltima anlise so os clientes da tecnologia. Uma das idias sustentadas nesse livro a frase abaixo. Se a velocidade de circulao da informao rpida o suficiente, o prprio significado dos negcios (misso da empresa) precisa ser repensado. Com a Internet/web, a informao circula quase instantaneamente. Como devem ser os negcios nesse ambiente ? Como devem ser os sistemas de informao

28 / 441

para atender a essas necessidades ? Que oportunidades se abriro para profissionais e empresas de TI ? Que estratgia esses profissionais e empresas devem ter para aproveitar bem essas oportunidades ? Outra referncia muito boa o filme Piratas da Informtica (pirates of silicon valley). A verso em VHS ou DVD desse filme est disponvel em boas locadoras. O enredo conta a histria verdica do incio da era dos computadores pessoais, desde o incio da dcada de 1970 (quando no haviam computadores pessoais) at a polmica compra de aes da Apple pela Microsoft. Conceitos como capitalismo de risco (venture capitalism), empreendedorismo (entrepreneurship), inteligncia competitiva, inovao, competncia essencial (core competence) so alguns dos que se usa para descrever as cenas do filme. Entre os personagens, incluem-se Steve Jobs, Steve Wozniak (scios iniciais da Apple), Bill Gates, Paul Allen e Steve Balmer, (scios iniciais da Microsoft). H cenas gloriosas, como aquela em que a Microsoft consegue tornar-se fornecedora do sistema operacional DOS para a IBM acrescentar no seu computador pessoal IBM-PC prestes a ser lanado.

2.3

Classificao dos atores do ambiente para TI

Uma forma de se resumir o ambiente econmico relacionado a tecnologia de informao classificar os seus atores em 3 categorias, como mostrado abaixo. 1. Consumidores de TI 2. Integradores de soluo 3. Produtores de tecnologia Os consumidores de TI so lojas, secretarias, reparties, escritrios, escolas, comrcio, indstria, etc. So entidades que por sua prpria atividade precisam de sistemas de informao para apoiar o trabalho administrativo, contabilidade, pesquisa de informao, etc. O objetivo dos atores dessa categoria usar a tecnologia de informao para obter produtividade ou algum outro valor na misso de suas respectivas entidades. Os integradores de soluo so empresas que atendem os consumidores de TI como clientes. Uma atividade caracterstica dessa categoria a anlise de sistemas. O analista estuda o problema do cliente e faz um modelo para a sua soluo. Em seguida, projeta o sistema e envia informaes para que o sistema seja desenvolvido por programadores. H inmeras empresas nesse segmento, por exemplo Alternex, Data-Bras e Tera-Brasil e Mdulo, apenas para citar algumas empresas brasileiras. Alm da excelncia tecnolgica, empresas desse segmento cultivam valores importantes no que tange a relacionamentos no mercado. Por isso a tradio e a qualidade do atendimento so fundamentais. Outra vertente importante para empresas desse segmento a contnua atualizao tecnolgica e a certificao dos profissionais.

29 / 441

Os produtores de tecnologia so empresas ou entidades que desenvolvem produtos de aplicao geral para TI. Dentre os atores nesse segmento encontram-se Microsoft, Oracle, Sun, Macromedia, Adobe, Rational, Red Hat, Apache, Gnu, Conectiva, Mdulo e Microsiga. H vrios programas de computador que so desenvolvidos para aplicao genrica. Por exemplo: sistema operacional, editor de texto, banco de dados, cliente web, servidor web, compilador C++ e ferramenta de autoria de contedo web. Quem desenvolve esse tipo de produto tem como cliente um pblico diversificado, tanto na categoria de consumidor de TI como na categoria de integrador de soluo.

2.4

Ambiente econmico e modelo de negcio

Existe um ambiente econmico. Resumidamente, h produtos e servios em oferta, e um mercado para consumi-los. A oferta suprida por indivduos ou grupos que possuem empresas, e esto a frente de negcios. H tambm empresas pblicas, isto , que pertencem a sociedades. A histria mostra que empresas so criadas, e eventualmente morrem. Se o ambiente muda, uma certa demanda pode desaparecer, e com isso uma atividade econmica pode deixar de fazer sentido. Portanto, a empresa que tem por misso suprir essa demanda tende a quebrar ou a mudar de misso. H exemplos de sobra de empresas que quebraram ou foram foradas a adaptarse porque o ambiente mudou, e a demanda original deixou de existir. Segue-se apenas um exemplo: muito antigamente no havia qualquer iluminao nas ruas. A primeira tecnologia que se usou para suprir a demanda de iluminao pblica foi baseada em gs. Surgiu portanto demanda para equipamentos de iluminao baseado em gs. A tecnologia de eletricidade para iluminao pblica tornou obsoleto o uso de gs para iluminao pblica. A partir de um certo momento, deixou-se definitivamente de se fabricar equipamentos para iluminao a gs. Uma empresa que vivesse de fabricar esse tipo de equipamento estava fadada a fechar ou mudar de misso, no por suas deficincias internas, mas pela mudana do ambiente econmico. No passado, a velocidade com que as novidades surgiam e eram disseminadas era bem menor que atualmente. O ambiente econmico mudava devagar. Em muitos casos, era preciso que uma gerao inteira fosse substituda pela nova gerao, com novas idias, para que inovaes fossem incorporadas ao uso social. Atualmente, a velocidade de mudana do ambiente to grande particularmente em TI que a possibilidade de que seja necessria a mudana de misso da empresa, ou que o profissional precise reciclar-se praticamente uma certeza. Esse um ambiente de alta voltagem, que traz muitos riscos, mas tambm muitas oportunidades. muito recomendvel que indivduos e empresas pensem de forma estratgica para atuar no ambiente econmico em constante mutao.

30 / 441

2.5

Web impacta ambiente econmicoA Internet/web no est criando somente novos negcios. Ela est criando novos modelos de negcio.

A frase acima foi repetida em diversas reportagens e artigos que tentavam entender como fica o ambiente econmico com a existncia de Internet e web. Um fator que produza oportunidade para novos negcios j por si s de muita importncia. Quando um fator chega a produzir novos modelos sobre os quais se concebe negcios, ento definitivamente trata-se de fator de importncia capital. Esse o caso da Internet e da web (um subconjunto da Internet). Algumas atividades que esto presentes no ambiente econmico pr-Internet eventualmente podero deixar de fazer sentido. Novas atividades surgem. Quais so as oportunidades que esto se forjando nesse ambiente ? Que estratgia indivduos e empresas devem adotar para posicionar-se no sentido de aproveitar bem as oportunidades do ambiente que est se formando ? Esse tipo de pergunta ecoa na cabea de muita gente. Em Abril de 2002, o canal de TV BBC World exibiu uma srie de programas entitulados The future just happened (o futuro acabou de acontecer), em que mostra com vrios exemplos concretos de que forma a Internet/web est afetando a forma como as pessoas se relacionam a nvel pessoal e profissional, e como novos modelos de negcio esto silenciosa e rapidamente se implantando. Enfim, como a humanidade est escrevendo sua histria no novo ambiente que j chegou. O profissional de TI diretamente interessado nessa discusso, pois suas oportunidades profissionais dependem disso. No final do segundo milnio houve um estado de euforia coletiva com as potencialidades de ganhar dinheiro a partir de novos negcios, viabilizados a partir do novo ambiente com Internet/web. A euforia terminou (ou diminuiu muito) quando as aes das novas empresas comearam a cair. Foram testados modelos de negcio absurdos, e muitos se mostraram inviveis. Mesmo antes da queda das aes, diversos artigos mostraram que havia algo de fundamentalmente errado e insustentvel com alguns dos pr-supostos que alimentavam a euforia. Um desses pr-supostos era que quanto mais trfego numa pgina web, melhor, pois ganha-se dinheiro com propaganda. Se a lgica fosse apenas essa, teoricamente o seguinte modelo absurdo de negcios seria vivel. Uma pgina chamada dinheiro_de_graa.com d dinheiro para os visitantes, sem sorteio. A atratividade da pgina obviamente seria enorme. Se a pgina fatura proporcionalmente ao trfego supe-se que faturaria muito nesse caso. Portanto, supostamente haveria dinheiro para pagar aos visitantes e ainda restaria um bom lucro. A fragilidade do modelo que o trfego alto de uma pgina web somente valorizado como veculo de propaganda caso corresponda

31 / 441

em capacidade real de influenciar um pblico consumidor para o qual se far a propaganda. A atratividade aleatria que se geraria com um site tipo dinheiro de graa no seria facilmente aproveitvel para uma campanha publicitria. Portanto no seria um bom negcio fazer propaganda nesse tipo de site da web. O fato de que muitos modelos de negcio testados se mostraram falhos no quer dizer que a importncia da Internet/web para o mundo seja pequena. Como subproduto da euforia de Internet houve um desenvolvimento tecnolgico slido, e a tecnologia de web tornou-se bastante testada e madura. Apesar do exagero inicial, ainda h grandes oportunidades para aplicao de tecnologia web. Um nicho onde atualmente h particularmente muita oportunidade de aplicao de tecnologia web so os sistemas corporativos, incluindo automao comercial, industrial e de escritrios. Com criatividade, conhecimento e viso de negcios, pode-se ainda identificar muitos nichos a serem atendidos.

2.6

Analogia entre militarismo e negcios

H analogias possveis entre o militarismo e o mundo dos negcios. O general (comandante mximo das foras militares) v o campo de batalha como o executivo (chefe/comandante mximo da empresa) v o mercado. Ambos querem conquista-lo. preciso defender o pedao que j se conquistou, e ter uma estratgia para conquistar o pedao restante. Em tese, ambos atuam dentro da lei, embora usando meios diferentes. Ambos tem tentao de agir fora da lei para atingir seu objetivo. Em ambos os casos, h mecanismos que procuram inibir a atuao fora da lei. A terminologia usada em ambos os casos tambm possui muito em comum. Quando um inimigo invade seu territrio, o general refere-se ao fato como uma agresso. muito comum um executivo usar o mesmo termo agresso para referir-se a uma investida de um concorrente que lhe toma uma parte do mercado. Tanto o general quanto o executivo precisam de estratgia. De fato, uma das definies da palavra estratgia : estratgia a arte do general. Mais especificamente, pode-se definir estratgia como sendo o plano de ao que se adota com a inteno de chegar a um objetivo. Ttica uma estratgia de curto prazo. Para se ter pensamento estratgico pressupe-se a existncia de objetivos. A falta de viso estratgica pode levar a uma situao como a da Alice no Pas das Maravilhas. A Alice pergunta ao gato mgico: Que caminho devo tomar ?. O gato responde: Depende. para onde voc quer ir ?. Alice novamente: No sei. E o gato: Ento qualquer caminho serve.

32 / 441

No h vento favorvel para quem no sabe para onde quer ir. Tanto o general quanto o executivo cultivam objetivos de longo prazo. Ambos em geral dependem fortemente de tecnologia, e portanto preservam e gerenciam os conhecimentos tecnolgicos estratgicos para garantir seus objetivos de longo prazo. Ambos consideram o estabelecimento de alianas para facilitar a obteno de seus objetivos. 2.6.1 Inteligncia A inteligncia militar uma atividade desenvolvida por espies (o cargo pode ter outro nome) em funo de demandas criadas por guerras. Essa atividade inclui a coleta sistemtica de informaes, e sua classificao. H uma metodologia prpria para essa atividade. Algumas profisses usam mtodos semelhantes aos usados pelos espies. Por exemplo: bibliotecrio ou documentarista. Aps a segunda guerra mundial, muitos espies ficaram sem emprego. Gradualmente vrios deles passaram a usar seus conhecimentos de coleta e classificao de informaes para auxiliar negcios. Essa atividade passou a ser chamada de inteligncia competitiva. Uma definio para inteligncia competitiva : o processo de coleta e classificao sistemtica de informaes sobre as atividades dos concorrentes e tendncias gerais do cenrio econmico, executado dentro dos limites da lei. A inteligncia competitiva no espionagem ilegal, no um processo ilgico especular sobre o futuro (e.g. astrologia), no um simples relatrio gerado por um software. um processo sistemtico de coleta e interpretao de informaes com objetivo de evitar surpresas, identificar tendncias, ameaas e oportunidades, propor estratgias para obteno de vantagem competitiva. Boa parte do trabalho de inteligncia competitiva o de coletar informaes em rgos abertos (em geral informao diferente daquela obtida gratuitamente da Internet, mas informao de empresas respeitveis de comunicao), e interpreta-las em favor dos objetivos da entidade que se representa. Seja por exemplo uma empresa que produz agrotxico e/ou alimento transgnico. Um parmetro importante para essa empresa monitorar o grau de aceitao dos seus produtos pelas diversas sociedades do mundo. Caso um certo pas esteja demostrando claramente intolerncia para o uso desses produtos, provavelmente alguma ao precisar ser tomada pela diretoria da empresa. Se um pas funda uma sociedade para repudiar alimentos trangnicos (ou coisa parecida), algum jornal provavelmente publicar matria sobre o assunto. Outro exemplo: se est ocorrendo um grande aumento de demanda em cursos de utilizao de software gratuito (informao que se pega de jornal), pode-se concluir que as oportunidades futuras no mercado de TI provavelmente

33 / 441

requerero experincia com essa tecnologia. Portanto uma proposta de estratgia iniciar uma linha de trabalho usando software gratuito, e com isso cultivar a cultura de usa-lo.

2.7

Conhecimento empacotado

Seja o termo conhecimento empacotado (packed knowledge), que refere-se a uma condio de mercado de um produto ou servio. H muitos produtos e servios disponveis. Em muitos deles, h componente intensiva de conhecimento. Mas muitas vezes o mercado apenas vende o resultado do conhecimento, e no o conhecimento em si. Isto : trata-se de um conhecimento empacotado. Compra-se o conhecimento, e pode-se usa-lo, mas no se pode abrir o pacote. As caractersticas da condio de mercado de um produto ou servio ser classificado como conhecimento empacotado so: O seu custo deve-se em grande parte remunerao do conhecimento necessrio a produo, e no ao material fsico que compe o produto. O ato de compra no transfere para o comprador o conhecimento de como se produz, mas apenas o direito de uso e o conhecimento de como se usa. O vendedor procura preservar-se por proteger o seu conhecimento. Isso feito seja por meios legais (copywrite, patente, etc.), seja por dificultar a tentativa do comprador de apoderar-se do conhecimento ou duplica-lo sem interferncia do vendedor (chave de hardware, segredo industrial, bloqueadores de engenharia reversa, etc.) O modelo de negcios tpico leva o comprador dependncia tecnolgica, e portanto econmica, em relao ao vendedor. Em outras palavras: quem compra um conhecimento empacotado tende a seguir comprando-o. Por engajar-se no modelo de negcios proposto pelo vendedor, o comprador no adquire o conhecimento para produzir o produto ou servio em questo. No raro o comprador investe tempo para aprender a usar o produto, devido a sua complexidade. Com inteno de preservar seu investimento de tempo no aprendizado, o comprador considera com preferncia a compra do mesmo produto novamente, mesmo havendo alternativas e concorrentes. Essa caracterstica gera efeito econmico de haver vantagem para o primeiro a se mover (first mover). Aquele que consegue mover-se antes dos concorrentes e estabelecer seu produto num segmento de mercado ainda virgem, ter vantagem adicional para seguir explorando esse segmento do mercado. O custo do desenvolvimento em geral vultuoso, envolvendo a remunerao de profissionais caros. Para obter retorno do investimento faz sentido econmico vender em escala global.

34 / 441

Se o produto muito usado, adquire mais valor.

O software um exemplo perfeito de conhecimento empacotado. Quando compra-se um software, se est comprando o direito de executar um arquivo binrio, e no o conhecimento sobre como fazer o tal programa. Em geral, no se adquire o fonte de um programa ao compra-lo. Como referncia, vale citar alguns outros exemplos empacotados. No seria difcil citar ainda inmeros outros. de conhecimento

Boa parte do milho que se come hoje (seja diretamente, seja indiretamente quando usado como rao de animais) o chamado milho hbrido. Por motivos genticos, as qualidades que se espera do milho (crescer rpido, com espiga grande e de bom valor nutricional, etc.) so obtidas quando se cruza uma espcie de milho A com a espcie B, gerando 100% de milho hbrido AB. As sementes do milho hbrido so frteis, mas apenas 50% delas so do tipo AB. A partir da terceira gerao, a proporo de milho AB ainda menor. Ou seja, no processo de produo de milho, h a empresa produtora de sementes de milho hbrido, que vende sementes 100% AB, e o fazendeiro que executa o ato de plantar. A cada safra, o fazendeiro precisa comprar novamente as sementes. A empresa de sementes no fornece o milho A e o milho B, mas apenas as sementes AB prontas para plantar. O valor de se comprar essas sementes est no fato de que o milho melhorado geneticamente (supostamente) rende mais para o produtor. Sem exagero, podemos dizer que somos a civilizao do petrleo. Dependemos do uso regular de petrleo em grandes quantidades, por inmeros motivos. A indstria petroqumica alimenta diversas outras indstrias importantes. Para a indstria petroqumica funcionar, usa-se catalisadores (substncias que auxiliam o processamento qumico do petrleo). Sem os catalisadores, a indstria petroqumica no funciona. E a vida til de catalisadores no infinita. Mas os fornecedores no vendem o conhecimento para se fazer o catalisador. Vendem apenas o catalisador pronto para usar.

Num mundo j muito complexo, e ainda com complexidade crescente rapidamente, impossvel deter todo o conhecimento num nico povo. De fato, a idia de produzir tudo que necessrio dentro do pas considerada por muitos como uma estratgia j impossvel de se seguir. Muitos produtos importantes so hoje produzidos numa parceria econmica em que participam empresas em vrios pases. O computador que o leitor usa possui componentes fsicos e software fabricados/desenvolvidos em diversos pases. Nenhum pas ou empresa isoladamente capaz de fazer do zero um computador, e vende-lo no preo que se est praticando hoje em dia. Num exemplo brasileiro, o avio da Embraer produzido numa inteligente parceria de diversas empresas,

35 / 441

coordenada pela Embraer. No faz sentido pretender fazer 100% do avio dentro da empresa. Por vrios motivos faz mais sentido coordenar a cooperao de vrias empresas especializadas em componentes do avio. Numa situao de complexidade, particularmente fcil que produtos tipo conhecimento empacotado se estabeleam. A competio muito severa e o ambiente em rpida mutao faz com que a toda hora os modelos de negcios precisem ser repensados. Quando uma empresa consegue definir uma frmula de modelo de negcio em que sua atividade faz sentido, isso j um grande feito. Nessa situao, em geral no se questiona o preo de suprimentos. Por exemplo: seja uma empresa de telefonia celular. Essa empresa precisa de um sistema de informao para calcular a tarifao dos clientes. Suponha-se que um integrador de soluo j forneceu um sistema, que uma soluo satisfatria. Na hora de decidir por expanso do sistema, o gerente de tecnologia tender a escolher a mesma soluo, pois j h cultura na empresa de uso do sistema. Por motivo semelhante, h tendncia na padronizao de sistema operacional, ferramenta de uso escritrio (pacote office), etc. A complexidade grande do ambiente fator de inibio da busca de alternativas ao que est funcionando, pois o aprendizado em geral um investimento demorado e caro. Quando j se possui o conhecimento de como usar um produto, pode ser mais barato e inteligente compra-lo novamente do que investir para aprender a usar uma alternativa que custa mais barato para ser adquirida. Analisando o mesmo problema numa perspectiva de longo prazo, pode-se concluir pelo oposto (isto , a longo prazo, pode se mais interessante investir para aprender a usar uma soluo que mais barata para ser adquirida).

2.8

O produto software

Voltemos ao software, que um produto com caractersticas especiais, diferentes de quase todos os outros produtos, e um conhecimento empacotado por excelncia. 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.

36 / 441

Uma outra diferena fundamental entre o software e os demais produtos o fato de ser particularmente vantajoso para o consumidor final a padronizao. 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. Em outras palavras: se um software muito usado, existe boa probabilidade de se ter um amigo que conhece detalhes de sua utilizao. O software adquire valor adicional pelo fato de ser muito usado. Na verdade, essa caracterstica do software, em maior ou menor nvel, ocorre com produtos do tipo contedo. Um jornal tem mais valor se tem mais leitores. Um filme ou programa de TV tem mais valor se tiver mais espectadores. Um livro tem mais valor se tiver mais leitores. O autor ou produtor do contedo quer ganhar dinheiro com a venda e distribuio do contedo. Contudo, estabelecer uma forma demasiado severa de evitar cpias e observao do contedo pode eventualmente ser contra os objetivos do autor ou produtor. 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 de tempo 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