Programação orientada a objetos com C / C++ em ambiente multiplataforma Porque escolher C /C++ versão 2.1 de 05 de Março de 2001 Por Sergio Barbosa Villas-Boas www.del.ufrj.br/~villas villas@del.ufrj.br Escolha tecnológica: uma decisão estratégica Escolher tecnologia erradamente pode fazer perder tempo e/ou dinheiro. Não se escolhe um software apenas pelos seus méritos e pelo seu preço. Se seus amigos usam o software x, você tende a escolher essa opção também. Um software usado por uma grande comunidade é geralmente a melhor opção de escolha. Ou seja, um software muito usado ele tem adquire mais valor, mesmo que não tem muitos méritos. 1
Características do produto software (1) Produto tangível? software Custo de desenvolvimento alto, custo de reprodução zero. Grande concorrência, obsolescência precoce. Não faz sentido oferecer um produto tangível gratuitamente. Mas faz sentido oferecer um software gratuitamente. Características do produto software (2) O comportamento humano é inercial em relação ao uso de tecnologia. Tende-se a querer preservar o investimento de energia no aprendizado de uma tecnologia, ou seja, tende-se a não mudar a forma de se trabalhar (se essa forma estivar satisfatória). Uma explicação para a febre da Internet no final do milênio é a tentativa de se capturar rapidamente o mercado ainda virgem. Após a fase inicial, a inércia faria manter o espaço conquistado. 2
Características do produto software (3) O consumidor final vê vantagem em padronização Compra-se uma TV de uma marca, mas a próxima TV pode ser de outra marca. O mesmo vale para carro, bicicleta, relógio, etc. No caso de software, compra-se um software, depois não se quer mais mudar, para não perder investimento em cima do que já se aprendeu e já se produziu. Escolha tecnológica = escolha estratégica Os profissionais de tecnologia tendem a se organizar em tribos, ou torcidas em torno das tecnologias que preferem usar. Para ter flexibilidade na vida profissional, é conveniente adotar uma tribo que tenha a maior abrangência possível. 3
Escolha tecnológica estudos de caso Casos: Sistema operacional os/2? win3.1 (win95). cgi (perl, asp, php, cold fusion, jsp, C++, etc.) Bancos usando Mainframe ou Workstation. O Bamerindus precipitou-se no uso de Workstation e teve resultado ruim. Quem acertou foi quem esperou, e não quem adotou a ferramenta da moda. Curva de incorporação de novidades Maioria dos que tem sucesso A B C D Desbravadores Primeira Maioria Maioria Atrasada Retardatários 10% 40% 40% 10% D C B A observação tempo 4
Vida de Programador... class MyCareer { private: mytruepurpose; // be flexible and adapt to any change public: MyCareer() { learn_cpp(); } // constructor ~MyCareer() { // destructor learn_cobol(); learn_fortran(); keep_learning_different_languages_forever(nevergettobeguru); learn_a_different_language_for_each_project(); }; }; if (use_cpp) { uselibraries(); // eventually create a new library solvetheproblem(); // get the work done! learnbettercpp(nextprojectwillbedonefaster); } else { learnaspecificlanguageandsolvetheproblem(); if (changefocusorplatform) { learnanotherlanguage(wasteprecioustime); } } Porque C / C++? (1) O compilador é fácil de se fazer. Isso é uma vantagem indireta. Há compilador C/C++ para virtualmente todas as plataformas que interessam. Alguns exemplos: Windows Unix (todas as variações) Machintosh Mainframe Handhelds (Palm Pilot, Windows CE) Chips sem sistema operacional (Microcontroladores, DSP, etc) Programação para Internet (CGI) 5
Porque C / C++? (2) C++ contém os mais evoluídos conceitos de software orientado a objetos. Desde que há muitos compiladores C/C++ (inclusive gratuitos, como o compilador da gnu.org, que dá de graça até o fonte do compilador), ninguém é dono da linguagem. Trata-se de um padrão aberto. Porque C / C++? (3) Há inúmeros projetos de software de alto nível, cujo fonte é disponível em C/C++ (legacy applications). Há também várias bibliotecas gratuitas. Alguns exemplos: Unix (Linux) e seus muitos componentes Latex Netscape gcc/g++ (compilador c/c++ da gnu.org) qmail Napster 6
C++ ANSI C FAQ Qual a diferença entre C e C++? em programação C, ++ significa incremento. Quando surgiram os conceitos de orientação a objetos e implementou-se esses conceitos em C, a linguagem ficou incrementada. Alguém deu para a nova linguagem o nome de C++ e o nome não mudou mais. Um programa em C compila num compilador C++? C++ é um superset de ANSI C, isto é, possui tudo de ANSI C e mais algumas coisas. Portanto, um programa em ANSI C é compilável com compilador C++. O C Kernighan& Richie (padrão de C anterior ao ANSI C) não compila em C++. Desvantagens de C / C++ Mais difícil de aprender que algumas alternativas As alternativas não estão disponíveis em tantas plataformas quanto C / C++. Essa desvantagem pode ser compensada com um bom esforço didático. Essa é uma desvantagem para quem precisa contratar programadores baratos para terefas simples. Possui comandos poderosos (entenda-se: perigosos). O programador pode travar a máquina com um programa errado. 7
Teoria das transações econômicas (1) Numa transação em que alguém compra algo, há 2 atores: Comprador Vendedor A natureza do que está sendo negociado está em algum ponto da escala abaixo, cujos extremos são mostrados. mercadoria produto em negociação produto diferenciado Teoria das transações econômicas (2) Quando o produto é uma mercadoria, quem está em boa posição é o comprador. Nesse caso, desde que haja oferta, pode-se escolher o produto mais barato. O vendedor não consegue diferenciar o seu produto e é forçado a operar com margem de lucro muito baixa. mercadoria produto em negociação produto diferenciado Quando trata-se de um produto diferenciado, o comprador não tem opção. O vendedor reconhece esse fato e coloca preços altos. É o vendedor que está em boa posição. 8
Mercadoria escassa O mercado diz: mercadoria escassa, preço bom. Mas o mesmo mercado tende a controlar esse preço, pois a boa remuneração atrai novos atores para o setor. No ambiente globalizado, quase tudo acaba tornando-se uma mercadoria, com competição e atuação global. Somente sustentam o preço bom (premium) os produtos diferenciados. A capacidade profissional é negociada no mercado A capacidade profissional é um produto negociado no mercado. O preço é a remuneração. Quem usa uma linguagem (ou ferramenta) fácil torna-se rapidamente uma mercadoria, sendo portanto difícil negociar boas remunerações. Há uma infindável fonte de novidades no ambiente tecnológico. A linguagem C/C++ evolui devagar (para absorver as novidades), mas não requer o abandono dos conceitos anteriores. Com isso, sempre é possível fazer com C/C++ os programas nos ambientes que interessam, enquanto preserva-se os investimentos de tempo feitos em seu estudo. 9
Porque sim java Java é uma linguagem que tem código intermediário (bytecode). Supostamente, um código em bytecode pode ser executado em qualquer ambiente onde haja uma máquina virtual java (todos os computadores que interessam). Trata-se de uma iniciativa apoiada por diversas empresas, incluindo Sun, Oracle, IBM, etc. (mas não todas. A Microsoft não apóia java). Pode-se fazer applets dentro de browser. Porque não java (1) Java é gratuito, mas não gratuito para sempre. Isto é, a Sun (dona do Java) não divulga o código fonte do compilador nem da máquina virtual Java. Em contraste, o código fonte do compilador g++ pode ser baixado em gnu.org. Já houve caso de conflito de interesses sobre royalties a respeito de java (a Sun quiz cobrar royalties da IBM pelo Java 2). Não é impossível que java torne-se um produto pago no futuro. 10
Porque não java (2) Java tem problemas sérios de desempenho (resultantes da necessidade de conversão de bytecode para código nativo). Esses problemas são menos relevantes para servidores, mas são bastante visíveis para clientes. Concretamente: para fazer um bom programa para windows, para ser usado pelo cliente, e que deva ser executado com desempenho aceitável, java pode ser uma má opção. Porque não java (3) Java é bastante complicado. Optar por fazer programas CGI com JSP e Java Beans pode ser uma má opção para empresas que pretendem não investir muito nos programadores. Java não está totalmente maduro ainda. Há problemas de compatibilidade, de versões, etc. Por exemplo: nem as últimas versões dos browsers podem executar applets em java2 sem plug-in. 11