Guia_Tecnologia_2 - Blog do Prof. PC
Transcrição
Guia_Tecnologia_2 - Blog do Prof. PC
Parte XXX Guia de Tecnologia 2 Guias de Tecnologia 1 2 3 4 5 Hardware Software Dados e Bancos de Dados Telecomunicações Visão Técnica da Análise e Projeto de Sistemas Software GT2.1 GT2.2 GT2.3 GT2.4 Noções básicas e tipos de software GT2.5 Questões e tendências de software Software de aplicação Software de sistema Linguagens de programação, desenvolvimento de software e ferramentas CASE GT2-2 Guias de Tecnologia GT2.1 Noções básicas e tipos de software O hardware do computador, redes e dispositivos móveis, como PDAs e iPhones, não funcionam nem executam uma operação sem que recebam instruções. Essas instruções são conhecidas como software ou programas, aplicações ou plug-ins de computador. O software permite que o usuário customize um computador ou dispositivo. NOÇÕES BÁSICAS DE SOFTWARE O software consiste em sequências de instruções que um computador, uma rede ou um dispositivo executa a fim de realizar uma tarefa. O processo de escrever um programa é chamado de programação, e os indivíduos que realizam essa tarefa são os programadores. Programas de software armazenados são acessados e suas instruções são executadas na CPU. Programas de computador incluem uma documentação, que é a descrição, por escrito, das funções do programa. A documentação ajuda o usuário a operar o sistema computacional e ajuda outros programadores a entender o que o programa faz e como ele realiza suas tarefas. A documentação é vital ao negócio da organização. Sem ela, se um programador ou usuário abandona o projeto (ou se esquece dele), o conhecimento sobre como usar o programa ou sobre como foi desenvolvido pode se perder. Todos os softwares são escritos em uma linguagem de programação, como Visual Basic, PHP, COBOL, C++ ou Java. Para uma lista das linguagens de programação mais populares, visite o site langpop.com (em inglês). TIPOS DE SOFTWARE Existem dois tipos principais de software: software de aplicação e software de sistema. Ambos têm tarefas específicas a executar. O software de aplicação é um conjunto de instruções de computador, escrito em uma linguagem de programação. As instruções orientam o hardware do computador a executar atividades de processamento de dados ou de processamento de informações que fornecem funcionalidade ao usuário. Essa funcionalidade pode ser ampla, como no caso de um processador de texto, ou restrita, como o programa de folha de pagamentos de uma organização. Software de sistema agem principalmente como intermediários entre o hardware do computador e programas de aplicação, e os usuários podem manipulá-los diretamente. Software de sistema, como, por exemplo, o sistema operacional (OS) Windows, possuem funções autorregulatórias importantes para os sistemas computacionais, como carregar (inicializar) a si mesmo quando o computador é ligado pela primeira vez. Programas de aplicação manipulam dados ou texto para produzir ou fornecer informação. Programas de sistema manipulam os recursos de hardware de computador. O software de sistema instalado em um computador determina as capacidades e as limitações dentro das quais o software de aplicação opera. A Figura GT2.1 mostra que um software de sistema é um intermediário necessário entre o hardware e o software de aplicação; o software de aplicação não executa sem o software de sistema. Tanto o software aplicativo quanto o software de sistema são escritos em linguagens de programação, as quais também são apresentadas neste guia. re de aplicaç ftwa ão So are de sistem ftw a So Hardware Figura GT2.1 O software de sistema é um intermediário necessário entre o hardware e o software aplicativo 2 • Software GT2-3 GT2.2 Software de aplicação Um software de aplicação é um programa que executa tarefas específicas. Todos nós já usamos muitos tipos diferentes de aplicações. Eis alguns deles: • Aplicações de planilha para criar documentos que gerenciam e organizam dados numéricos. • Aplicações de processamento de texto para criar documentos que são formatados e organizados para leitura. • Aplicações de bancos de dados para desenvolver bancos de dados que organizam e recuperam grandes quantidades de informação. • Aplicações contábeis para gerenciamento de finanças pessoais ou para a contabilidade de empresas. • Aplicações gerenciadoras de atividades, como calendários e agendas de endereços. • Aplicações de apresentações para a confecção de slides. • Aplicações gráficas para a criação de imagens. • Programas de comunicação como programas de e-mail, mensagens de texto e fax para enviar e receber mensagens. • Aplicações multimídia para a criação de vídeos e músicas. • Utilitários ou programas de serviço para executar várias tarefas de manutenção ou melhoria do sistema operacional do computador. A Tabela GT 2.1 mostra pacotes de software de produtividade mais populares para três tipos diferentes de software: proprietários, de código aberto e baseados na Web. Algumas dessas ferramentas genéricas são, na verdade, ferramentas de desenvolvimento. Ou seja, são ferramentas usadas para construir aplicações. Por exemplo, é possível usar o Excel para criar aplicações de suporte à tomada de decisão, como alocação de recursos, sincronização ou controle de inventário. É possível usar pacotes semelhantes para realizar análises estatísticas, para executar análises financeiras e para conduzir pesquisas de marketing. O software de aplicação de prateleira pode ser comprado ou alugado de um fornecedor que desenvolve e vende programas para várias organizações. Software de prateleira pode ser TABELA GT 2.1 Software de produtividade populares: proprietário, de código aberto e baseado na Web Proprietário Microsoft Office Código aberto Open Office Baseado na Web Google Docs Preço Varia; a partir de US$ 59,95 (versão para estudantes) Openoffice.org gratuito; Oracle Open Office a partir de US$ 49,95 por licença Gratuito para uso pessoal; Google Apps for Business custa US$ 50,00 anuais por conta de usuário Sistemas operacionais suportados Windows; há uma versão para o OS X da Apple Windows, OS X, Linux, Solaris e vários outros sistemas operacionais Roda em qualquer sistema operacional que ofereça um navegador Web como IE, Firefox, Chrome ou Safari Online e offline Principalmente offline; a versão 2010 oferece aplicativos online Apenas offline O Google Gears permite que o Google Docs seja usado offline Processador de texto Word Writer Documentos Planilha Excel Calc Planilhas Apresentação PowerPoint Impress Apresentações Banco de dados Access Base Não tem software de banco de dados Outro software OneNote, Outlook, Publisher, Groove, Communicator, InfoPath Math, Draw Desenho, Formulários GT2-4 Guias de Tecnologia um pacote padrão ou personalizáveis. Programas de uso especial, ou “pacotes”, podem ser criados para fins específicos, como controle de estoque ou folha de pagamento. A palavra pacote é comumente utilizada para designar um programa (ou conjunto de programas) desenvolvido por um fornecedor e está disponível para compra em um formato pré-configurado. Muitas aplicações de suporte à tomada de decisão e aplicações comerciais são construídas com linguagens de programação em vez de com programas de aplicação de uso geral. Isso é o que acontece especialmente com problemas complexos e não estruturados. Aplicações de sistemas de informação também podem ser criadas a partir de uma mistura de programas de uso geral e/ou com várias ferramentas de desenvolvimento, desde editores a geradores de números aleatórios. Conjuntos de software como, por exemplo, o Microsoft Office, o Open Office ou o Google Docs são de especial interesse, pois podem acelerar o desenvolvimento de aplicações. Também de especial interesse são as ferramentas CASE e os softwares corporativos integrados, descritos mais adiante. Outras aplicações. Existem centenas de outros softwares de aplicação. Os mais interessantes para a gestão de negócios são os seguintes: 1. Middleware. Aplicações de Internet criadas para permitir a interação de uma empresa com outras são complexas em função da variedade de componentes de hardware e software com os quais essas aplicações precisam trabalhar. Essa complexidade aumenta quando dispositivos móveis sem fio passam a acessar as redes da empresa pela Internet. O middleware é um software que conecta módulos de aplicações desenvolvidos em diferentes linguagens de computador e que roda em plataformas heterogêneas, seja em uma única máquina ou em uma rede. O middleware mantém um registro da localização dos módulos de software que precisam ser conectados uns aos outros através de um sistema distribuído e gerencia a troca de informações. 2. Aplicações corporativas. Um software empresarial consiste em programas que gerenciam operações vitais de uma organização, como gestão da cadeia de suprimentos (movimento desde a obtenção de matérias-primas de fornecedores à entrega de produtos finais aos clientes), reposição de estoque, encomendas, coordenação logística, gestão de recursos humanos, fabricação, operações, contabilidade e gestão financeira. Alguns módulos comuns de software de aplicações corporativas são a folha de pagamento, o processamento do pedido de vendas, contas a pagar/receber e contabilidade fiscal. Fornecedores de software empresarial têm produzido software mais barato, baseado em padrões da indústria, compatível com os produtos de outros fornecedores e mais fácil de configurar e instalar. Os maiores fornecedores – SAP, Oracle, PeopleSoft e Computer Associates – oferecem programas que facilitam o trabalho de usuários comerciais e de profissionais de TI. 3. Software de presença. A tecnologia de presença pode detectar quando você está online e que tipo de dispositivo está usando. Tem origem no sistema de mensagens instantâneas (instant messaging – IM). Quando você se conecta a um serviço de IM, sua chegada é imediatamente anunciada a uma lista de usuários que você selecionou para serem alertados sobre a sua presença online. GT2.3 Software de sistema O software de sistema controla e suporta o hardware de computador e suas atividades de processamento de informações. O software de sistema também facilita a programação, o teste e a depuração de programas de computador. Ele é mais genérico que o software de aplicação e costuma não depender de qualquer tipo específico de aplicação. Programas de software de sistema suportam software de aplicação direcionando as funções básicas do computador. Por exemplo, quando o computador é ligado, o programa de inicialização (um programa do sistema) prepara e prontifica todos os dispositivos para processamento. Outras tarefas comuns de sistemas operacionais são as seguintes: • Monitorar o desempenho • Corrigir erros • Fornecer e manter a interface com o usuário 2 • Software • • • • • • • • • • • • GT2-5 Iniciar (“inicializar”) o computador Carregar programas na memória Gerenciar alocação de memória para esses programas Colocar arquivos e programas no armazenamento secundário Criar e manter diretórios Formatar disquetes Controlar o monitor do computador Enviar trabalhos à impressora Manter a segurança e limitar o acesso Localizar arquivos Detectar vírus Compactar dados O software de sistema pode ser agrupado em três importantes categorias funcionais: 1. Programas de controle de sistema são programas que controlam o uso de hardware, software e recursos de dados de um sistema de computador durante sua execução do trabalho de processamento de informações de um usuário. Um sistema operacional é o principal exemplo de um programa de controle de sistema. 2. Programas de suporte ao sistema suportam as operações, o gerenciamento e os usuários de um sistema de computador por meio de uma série de serviços. Programas utilitários de sistema, monitores de desempenho e monitores de segurança são exemplos de programas de suporte ao sistema. 3. Programas de desenvolvimento de sistemas ajudam os usuários a desenvolver programas e procedimentos de processamento de informações e a preparar aplicações de usuário. Os principais programas de desenvolvimento são compiladores de linguagem, interpretadores e tradutores. PROGRAMAS DE CONTROLE DE SISTEMA Eis os programas de controle de sistema mais importantes. Sistemas operacionais. O componente principal de software de sistema é um conjunto de programas coletivamente conhecido como sistema operacional. O sistema operacional supervisiona a operação global do computador, incluindo o monitoramento do status do computador, o tratamento de interrupções de programas executáveis e o agendamento de operações, o que inclui o controle de processos de entrada e de saída. Computadores com apenas uma CPU parecem executar múltiplas tarefas ao mesmo tempo. Nesses casos, o sistema operacional controla que tarefa em particular terá acesso aos vários recursos do computador. Ao mesmo tempo, o sistema operacional controla o fluxo total de informações dentro do computador. Em um microcomputador, o sistema operacional controla a comunicação do computador com seu monitor, com a impressora e com os dispositivos de armazenamento. Ele também recebe e direciona entradas de teclado e outras fontes de entrada de dados. O sistema operacional é projetado para maximizar a quantidade útil de trabalho que o hardware do computador realiza. Os programas que executam no computador usam diversos recursos controlados pelo sistema operacional. Esses recursos incluem tempo de CPU, armazenamento primário ou memória e dispositivos de entrada/saída. O sistema operacional tenta alocar o uso desses recursos da maneira mais eficiente possível. O sistema operacional também é responsável pela interface entre o usuário e o hardware. Ao mascarar muitas das características do hardware, tanto o programador profissional quanto o usuário final dispõem de um sistema fácil de usar. A portabilidade, uma característica desejável do sistema operacional, significa que o mesmo software de SO pode ser executado em diferentes computadores. Um exemplo de sistema operacional com portabilidade é o UNIX e sistemas semelhantes a ele. Versões desses sistemas operacionais podem ser executadas em hardwares produzidos por vários fornecedores diferentes. Alguns exemplos incluem o Linux, o NetBSD, o AIX, da IBM, e o Solaris, da Oracle. Entretanto, não há uma única versão padrão do UNIX que execute em todas as máquinas. Funções do sistema operacional. O sistema operacional realiza quatro funções principais na operação de um sistema de computador: gerenciamento de tarefas, gerenciamento de recursos, consolidação de servidor e gerenciamento de dados. GT2-6 Guias de Tecnologia 1. O gerenciamento de tarefas é a preparação, o agendamento e o monitoramento de tarefas para processamento contínuo pelo sistema de computador. Job Control Language (JLC) é uma linguagem de computador especial encontrada no ambiente de computação de mainframe que permite que o programador se comunique com o sistema operacional. 2. O gerenciamento de recursos é o controle do uso de recursos de sistemas de computador empregados por outros produtos de software de sistema e programas de software de aplicação sendo executados no computador. Esses recursos incluem o armazenamento primário, o armazenamento secundário, o tempo de processamento da CPU e os dispositivos de entrada/saída. 3. A consolidação de servidor diz respeito à criação de uma infraestrutura mais simples, mais racional e gerenciável. Existem quatro estratégias de consolidação possíveis: consolidação lógica, consolidação física, consolidação da carga de trabalho e consolidação de aplicação. A consolidação leva também a um uso mais flexível, consistente e eficiente de recursos do que no caso de servidores distribuídos, pois permitem que os clientes encontrem o equilíbrio certo dentro de cada um dos servidores. 4. O gerenciamento de dados é o controle de entrada e saída de dados, bem como de sua localização, armazenamento e recuperação. Programas de gerenciamento de dados controlam a alocação de dispositivos de armazenamento secundários, o formato físico e a catalogação do armazenamento de dados. Sistemas operacionais de computador desktop e notebooks. O Microsoft Windows lidera a série de sistemas operacionais para desktops. O MS-DOS (Microsoft Disk Operating System) foi um dos sistemas operacionais originais para o PC da IBM e seus clones. O Windows 95, lançado em 1995, foi o primeiro de uma série de produtos no sistema operacional Windows a fornecer ícones através de uma interface GUI (graphic user interface) para fornecer acesso instantâneo às tarefas mais comuns. Produtos subsequentes no sistema operacional do Microsoft Windows são os seguintes: • O Windows 98 não foi uma atualização importante do Windows 95, mas ofereceu alguns refinamentos, reparou alguns bugs e apresentou algumas melhorias. • O Windows NT é um sistema operacional para desktops de alta performance, estações de trabalho e servidores. O Windows NT suporta software escrito para DOS e Windows e oferece excelente capacidade de computação para aplicações novas com requisitos de arquivo e uso intenso de memória. Além disso, foi criado para estabelecer conexões simples e confiáveis com redes e outros mecanismos de computação e é popular em sistemas em rede. • O Windows 2000 é a versão renomeada do Windows NT 5.0. Esse sistema operacional adicionou dispositivos de segurança e executa em computadores com vários processadores. • O Windows XP foi a primeira atualização do Windows 2000 e teve três versões: uma versão de 32 bits para o público em geral, uma versão profissional de 32 bits e uma versão de 64 bits, também profissional. • O Windows Vista foi o próximo grande lançamento do sistema operacional Windows. O Vista supostamente melhoraria a produtividade do usuário de forma considerável, ofereceria novos recursos para desenvolvedores de software e traria avanços significativos em segurança, implementação e confiança. • O Windows 7 apresenta melhorias em relação ao desempenho, à estabilidade e à segurança em relação ao Windows Vista. O Windows Touch otimiza o Windows 7 para ser usado com telas sensíveis ao toque. Isso melhora bastante a experiência do usuário que usa o Windows em um dispositivo com tela sensível ao toque. O Windows 7 Professional e o Ultimate incluem o modo Windows XP, que roda uma instalação virtual do Windows XP que permite aos usuários rodar softwares compatíveis apenas com esse sistema operacional. Novas funcionalidades de interface incluem o Snap, que redimensiona a janela dependendo de para onde ela é movida na tela. O UNIX é outro sistema operacional que oferece recursos sofisticados, incluindo multiprocessamento e multitarefas. O UNIX é de grande valor para organizações porque pode ser usado em muitas plataformas diferentes, suporta vários dispositivos de hardware (p.ex., impressoras, plotters, etc.) e há um grande número de aplicações escritas que é compatível com ele. O UNIX tem várias versões. A maioria dos fornecedores desse sistema operacional tem concentrado seus esforços no desenvolvimento de servidores, em detrimento de desktops, e alguns, como a IBM, 2 • Software GT2-7 promovem o Linux para o uso em desktops. Entretanto, a versão mais popular do UNIX em computadores pessoais é o OS X, da Apple. O Linux foi originalmente escrito por Linus Torvalds na Universidade de Helsinque, na Finlândia, em 1991. Ele então liberou o código-fonte para o mundo (chamado de software de código-fonte aberto). Desde aquela época, muitos programadores ao redor do globo trabalhavam em Linux e em componentes de software escritos para ele. O resultado é que, como o UNIX, o Linux roda em diversas plataformas de hardware, suporta vários dispositivos de hardware e há um grande número de aplicações que executa nele. O Linux (algumas vezes chamado de GNU/Linux) é um sistema operacional do tipo UNIX criado para oferecer aos usuários de computadores pessoais um sistema operacional gratuito ou de baixíssimo custo, em comparação aos sistemas UNIX tradicionais, mais caros. O Linux é um sistema operacional consideravelmente completo, que inclui uma interface gráfica, um X Window System, multitarefas, gerenciamento de memória virtual, TCP/IP, o editor Emacs e outros componentes que costumam ser incluídos em sistemas UNIX completos. O Linux foi criado para computadores pessoais, mas obteve grande parte de seu sucesso em servidores. Na verdade, a maioria dos servidores Web e dos supercomputadores roda o Linux. O Linux de fato é usado em computadores pessoais, mas tem no máximo 3% do mercado de sistemas operacionais desse segmento. Algumas estatísticas afirmam que o Linux tem apenas 1% do mercado. Como resultado, a maioria das empresas desenvolvedoras de Linux, como a Red Hat, concentra-se no mercado de servidores. Entretanto, a Canonical oferece um sistema operacional Linux para desktop fácil de usar chamado Ubuntu (ubuntu.com). O sistema operacional Macintosh, o Mac OS X, para microcomputadores da Apple, atualmente é um sistema operacional UNIX de 64 bits que roda em CPUs Intel X86_64. O OS X só pode rodar legalmente em um “computador da Apple”, de acordo com os termos de licença para o usuário final (end-user license agreement, ou EULA). O OS X dá suporte à integração com a Internet, a gerenciamento de memória virtual e à rede AppleTalk. O Mac OS X oferece uma interface com o usuário (chamada de Aqua), gráficos avançados, gerenciamento de memória virtual e multitarefas. Sistemas operacionais para netbooks. Atualmente, a maioria dos netbooks vem com o Windows 7 Starter, que é a versão mais simples do Windows 7. No entanto, ainda há alguns netbooks sendo distribuídos com Windows XP ou sistemas operacionais baseados em Linux. Outra opção que talvez esteja disponível no futuro é o SO Google Chromium, comumente chamado de Chromium. É um sistema operacional de código aberto para netbooks baseado em Linux. O código foi liberado sob licença BSD, mas é um trabalho ainda não concluído. Nenhum fabricante de peso distribuiu netbooks que executem o SO Chromium. A característica mais notável do Chromium é que ele executa somente o navegador Chrome, então só pode ser usado quando conectado à Internet. Smartphones têm sistemas operacionais próprios, como mostra a Tabela GT2.2. Sistemas operacionais de mainframe. Computadores mainframe em geral requerem sistemas operacionais especializados que possam lidar com grandes cargas e que tenham recursos avançados de segurança. Os principais sistemas operacionais de servidor são o Linux, o Windows Server 2008, o UNIX, o HP NonStop e o z/OS da IBM. Apesar de alguns deles também serem sistemas operacionais desktops, todos podem ser usados como sistemas operacionais de servidor departamentais, por causa de sua flexibilidade, confiabilidade, capacidade de restauração, segurança, tolerância a falhas, multiprocessamento, rede TCP/IP (integração com a Internet), gerenciamento de rede e serviços de diretório. Sistemas operacionais de servidor corporativo. Sistemas operacionais para servidores corporativos (p.ex., o RHES, da Red Hat, o SLES, da Novell, e o z/OS, da IBM) geralmente executam em mainframes e em sistemas de médio porte. Sistemas operacionais corporativos oferecem maior capacidade de gerenciamento, segurança e estabilidade e também maior suporte a aplicações online, comércio eletrônico seguro, múltiplos usuários ao mesmo tempo, grandes bancos de dados (terabytes) e milhões de transações por dia. Sistemas operacionais para servidores corporativos também oferecem particionamento, um método de segmentação dos recursos do servidor que permite o processamento de diversas aplicações em um único sistema. Sistemas operacionais para supercomputadores. Sistemas operacionais para supercomputadores visam atender o mercado de hardware para supercomputadores. A maioria desses sistemas Symbian Nokia com a Symbian Foundation Sistema operacional de telefones mais popular do mundo O Symbian v3 tem código aberto, qualquer um pode usá-lo; versões anteriores, no entanto, eram proprietárias Há várias lojas diferentes. Alguns exemplos são a loja Ovi, da Nokia, a Samsung Applications Store e a AT&T Media Mall Ericsson R380 Sim O Symbian provavelmente será usado em tablets Fabricante Comentários Quem pode usar o sistema operacional em seus dispositivos? Loja oficial de aplicações Primeiro telefone Plena capacidade multitarefas; executa várias aplicações ao mesmo tempo Também usado em Foi usado originalmente em pagers bidirecionais Sim Atualmente, não há dispositivo algum que rode Windows Phone 7 disponível ao público iPod Touch e versão modificada no iPad iPhone original A partir do 4.0, o iOS terá capacidade multitarefas plena Ainda não anunciado Tem a maior loja de aplicações e que mais cresce, com mais de 200 mil aplicações; todas as aplicações precisam ser aprovadas pela Apple Netbooks, tablets, leitores de e-book, tocador de mídia portátil Sim G1 O mercado Android tem a segunda maior loja de aplicações e a segunda que mais cresce, com mais de 38.000 aplicações Código aberto, mas fortemente controlado pela Google Código aberto sob a licença Apache 2.0, ainda fortemente controlado pela Google Mudou a maneira como os americanos encaram telefones celulares quando foi lançado em 19/06/2007 Apenas Apple Google com o Open Handset Alliance Android Apple iOS Ao contrário do Windows Mobile, o Windows Phone 7 não possui multitarefas para aplicações de terceiros; em vez disso, as aplicações são pausadas quando trocadas Mobile Marketplace A App World foi criada para competir com a loja de aplicações do iPhone; as aplicações podem ser adquiridas de outras fontes, assim como costumava ser feito antes do lançamento da App World BlackBerry 6710 e 6720 Licenciados para fabricantes de hardware pela Microsoft O Windows Phone 7 é uma revisão completa do Sistema Operacional para Smartphones da Microsoft Microsoft Windows Phone 7 Apenas RIM Smartphone mais popular nos Estados Unidos RIM (Research In Motion) BlackBerry OS Sistemas Operacionais de Smartphones Sistema operacional TABELA GT2.2 A HP tem planos de usar o WebOS em tablets Sim Palm Pre Catálogo de aplicações Palm Tanto componentes de código aberto quanto proprietário. A Palm cogitou licenciar o WebOS antes de ser comprada pela HP Após uma sucessão de decisões ruins da Palm, a HP comprou a Palm principalmente pelo WebOS Palm (agora da HP) WebOS GT2-8 Guias de Tecnologia 2 • Software GT2-9 é baseada em Linux, como o CNK/SLES 9 e o Red Hat Enterprise Linux 4. No entanto, sistemas operacionais de supercomputadores não se limitam a Linux. Alguns exemplos de sistemas não baseados em Linux incluem o Unicos, para o Cray X1, o 2000 K/S/X, da HP, e o AIX, da IBM (ambos tipos de UNIX). Outros fabricantes são a Sun, a NEC, a Silicon Graphics e a Fujitsu. Esses sistemas operacionais gerenciam ambientes multiprocessador e multiusuário altamente paralelos. Sistemas operacionais de interface gráfica com o usuário. Um sistema operacional de interface gráfica com o usuário (graphical user interface, ou GUI) é um sistema no qual os usuários têm controle direto sobre objetos visíveis (como ícones e ponteiros) e ações que substituem a complexa sintaxe de comandos. O próximo passo na evolução das interfaces gráficas são as interfaces sociais. Uma interface social é uma interface com o usuário que orienta o usuário por aplicações de computador usando personagens do tipo cartoon gráficos, animações e comandos de voz. Tarefas de processamento. Sistemas operacionais gerenciam as atividades de processamento com recursos de gerenciamento de tarefas que alocam recursos de computador para otimizar os ativos de cada sistema. Os recursos mais importantes são descritos a seguir. Multiprogramação e multiprocessamento. Multiprogramação envolve dois ou mais módulos de aplicações ou programas colocados na memória principal ao mesmo tempo. O primeiro módulo executa na CPU até que ocorra uma interrupção, como uma solicitação de entrada. A solicitação de entrada é iniciada e executada enquanto um segundo módulo de aplicação é iniciado. A execução do segundo módulo continua até que outra interrupção ocorra, quando a execução de um terceiro módulo começa. Quando o processamento da interrupção é completado, o controle é devolvido ao programa que foi interrompido. Uma vez que a troca entre programas ocorre rapidamente, todos os programas parecem estar em execução ao mesmo tempo. Em um sistema de multiprocessamento, mais de um processador está envolvido. Os processadores podem compartilhar dispositivos de entrada/saída, ainda que cada processador possa controlar alguns dispositivos exclusivamente. Em alguns casos, todos os processadores compartilham a memória principal. Como resultado, mais de uma operação de CPU pode ser realizada exatamente ao mesmo tempo; ou seja, cada processador pode executar um módulo de aplicação ou uma parte dele simultaneamente com outro. A multiprogramação é implementada inteiramente por software, ao passo que o multiprocessamento é, antes de qualquer coisa, uma implementação de hardware, com o auxílio de software sofisticado. Compartilhamento de tempo (time-sharing). O compartilhamento de tempo é uma extensão da multiprogramação. Nesse modo, um determinado número de usuários opera online a mesma CPU, mas cada um usa um terminal diferente de entrada/saída. Um módulo de aplicação de um usuário é colocado em uma partição (uma parte reservada do armazenamento primário). A execução é realizada por um certo período ou até que seja feita uma requisição de entrada/saída. Como na multiprogramação, os módulos de outros usuários também são colocados no armazenamento primário de outras partições. A execução passa adiante para outro módulo de aplicação no final do período determinado e alterna-se entre todos os usuários. Memória virtual. A memória virtual permite ao usuário escrever um programa como se a memória principal fosse maior do que realmente é. Os usuários recebem “praticamente” todo o armazenamento primário de que necessitam. Com a memória virtual, as páginas de um módulo de aplicação não precisam ser todas carregadas na memória principal ao mesmo tempo. Enquanto o programa é executado, o controle passa de uma página para outra. Se a página subsequente já está na memória principal, a execução prossegue. Se a página subsequente não está na memória principal, a página demora para ser carregada. Na verdade, a memória principal é estendida em um dispositivo de armazenamento secundário. Sistema operacional de máquina virtual. Uma máquina virtual é um sistema de computador que parece um computador real para o usuário mas, na realidade, foi criado pelo sistema operacional. Um sistema operacional de máquina virtual faz com que uma única máquina simule múltiplas máquinas aos usuários, cada uma com seu próprio sistema operacional. Cada usuário pode escolher um sistema operacional diferente para sua máquina virtual. Como resultado, diversos sistemas operacionais podem existir na máquina real ao mesmo tempo. GT2-10 Guias de Tecnologia Programas de suporte ao sistema. Utilitários de sistema são programas criados para desempenhar tarefas comuns como classificar registros, mesclar conjuntos de dados, verificar a integridade de discos magnéticos, criar diretórios e subdiretórios, restaurar arquivos deletados acidentalmente, localizar arquivos dentro da estrutura do diretório, gerenciar o uso de memória e redirecionar saídas. Essas são as tarefas básicas da maioria dos sistemas operacionais e programas de aplicação. O TestDrive, por exemplo, permite que você baixe um software; você testa o programa e o TestDrive o ajuda na compra ou na remoção do aplicativo. Alguns softwares de limpeza de disco, como o Desfragmentador de Disco da Microsoft, também conhecidos como desfragmentadores ou ferramentas de diagnóstico e reparo, ajudam a organizar o disco rígido ordenando arquivos a fim de liberar espaços contínuos para novos arquivos, localizam arquivos pouco usados, arquivos temporários e outros arquivos que desperdiçam espaço. O Norton Utilities realiza tarefas de manutenção de rotina em discos rígidos e em dispositivos de armazenamento secundário. Monitores de desempenho do sistema. Monitores de desempenho do sistema monitoram o desempenho do sistema de computador e produzem relatórios com estatísticas detalhadas sobre o uso de recursos do sistema, como tempo de processamento, espaço de memória, dispositivos de entrada/saída e programas de sistema e de aplicação. Monitores de segurança de sistema. Monitores de segurança de sistema são programas que monitoram o uso de um sistema de computador para proteger o computador e seus recursos contra usos não autorizados, fraudes ou destruição. Esses programas oferecem ao computador a segurança necessária para permitir apenas acessos autorizados ao sistema. Monitores de segurança de sistema controlam o uso de recursos de hardware, software e dados de um computador. Por fim, esses programas monitoram o uso do computador e coletam estatísticas de tentativas de uso impróprio. Programas de desenvolvimento de sistema. Traduzir programas de computador voltados ao usuário escritos em código-fonte para código de objeto ou máquina requer o uso de compiladores ou intérpretes, os quais são exemplos de programas de desenvolvimento de sistema. Outro exemplo são os programas de engenharia de software auxiliada por computador (computer-aided software engineering). GT2.4 Linguagens de programação, desenvolvimento de software e ferramentas CASE Linguagens de programação oferecem os componentes básicos para a construção de todos os softwares de sistema e de aplicação. Linguagens de programação são um conjunto de símbolos e regras para escrever o código do programa. Cada linguagem usa um conjunto diferente de regras e a sintaxe, que determina como os símbolos devem ser combinados para que façam sentido. As características das linguagens dependem de seu propósito. Por exemplo, se os programas têm o objetivo de rodar processamentos de lote, eles serão diferentes de programas com o objetivo de rodar processamentos em tempo real. Linguagens para programas de Internet são diferentes de programas destinados a rodar aplicações de mainframe. A EVOLUÇÃO DAS LINGUAGENS DE PROGRAMAÇÃO Os diferentes estágios das linguagens de programação são chamados de gerações. O termo geração pode ser mal interpretado. Na geração de hardware, as gerações mais antigas estão se tornando obsoletas e caindo em desuso. Já todas as gerações de software ainda estão em uso. Elas são descritas na Figura GT2.2 e discutidas a seguir. Linguagem de máquina. Primeira geração (1G). A linguagem de máquina é a linguagem de computador de mais baixo nível e consiste na representação interna de instruções e dados. O código de máquina – as instruções entendidas e diretamente executáveis pela CPU – é composto de dígitos binários. Um programa que usa esse nível de codificação é chamado de programa de linguagem de máquina e representa a primeira geração de linguagens de programação. A CPU de um computador executa somente programas em linguagem de máquina, que são dependentes da máquina. Ou seja, a linguagem de máquina para um tipo de processador central pode não rodar em outros tipos. GT2-11 2 • Software Máquina 1a 2a Gerações 3a 4a Linguagem de máquina Linguagem assembly Linguagens procedurais Linguagens não procedurais Linguagens inteligentes Incluem comandos, código mais curto Geradores de aplicações, comandos especificam resultados Processamento de linguagem natural Humano 0–1 Montam Programação instruções longa e difícil repetitivas, código mais curto Figura GT2.2 A evolução das linguagens de programação. A cada geração são feitos progressos em direção à linguagem natural. 5a Linguagem natural Progresso Entender e usar a linguagem de máquina é extremamente difícil para os programadores. Como resultado, cada vez mais linguagens orientadas ao usuário têm sido desenvolvidas. Essas linguagens facilitam a programação, mas não são executáveis pelo computador sem antes traduzir o programa para linguagem de máquina. O conjunto de instruções escritas em uma linguagem orientada ao usuário é conhecido como programa-fonte. Linguagem assembly. Segunda geração (2G). Uma linguagem assembly é uma linguagem mais orientada ao usuário que representa instruções e localizações de dados utilizando mnemônica, ou auxílios de memória, que são mais fáceis de usar. As linguagens assembly são consideradas a segunda geração de linguagens de computador. Comparada à linguagem de máquina, a linguagem assembly facilita consideravelmente o trabalho do programador. No entanto, uma instrução em linguagem assembly precisa ser traduzida em uma instrução na linguagem de máquina. Uma vez que a linguagem de máquina depende do hardware e que programas de linguagem assembly são traduzidos um a um, as linguagens assembly também dependem de hardware. Um programa de software de sistemas chamado de assembler realiza a tradução de um programa de linguagem assembly em linguagem de máquina. Um assembler aceita um programa-fonte como entrada e produz um programa-objeto como saída. O programa-objeto é então processado em dados, como mostra a Figura GT2.3. LINGUAGENS DE ALTO NÍVEL As linguagens de alto nível são o próximo passo na evolução de linguagens de programação orientadas ao usuário. Elas são muito mais parecidas com a linguagem natural e, portanto, são mais fáceis de escrever, ler e alterar. Além disso, uma instrução em uma linguagem de alto nível é traduzida em várias instruções de linguagem de máquina, tornando a programação mais produtiva. (a) Tradutor Programa-fonte CPU Escrito por um programador Convertida por um tradutor Programa objeto Pronto para executar como código de máquina (b) Programa objeto Figura GT2.3 O processo de tradução de linguagem. Dados CPU Saída Os dados são inseridos O programa é executado Os resultados são produzidos GT2-12 Guias de Tecnologia Linguagens procedurais. Terceira geração (3G). As linguagens procedurais são o próximo passo na evolução de linguagens de programação orientadas ao usuário. São conhecidas também como linguagens de terceira geração, ou 3GLs. Elas são muito mais parecidas com a linguagem natural (a maneira como falamos) e, portanto, são mais fáceis de escrever, ler e alterar. Além disso, uma instrução em uma linguagem procedural é traduzida em várias instruções de linguagem de máquina, tornando a programação mais produtiva. Em geral, as linguagens procedurais são mais parecidas com a linguagem natural do que as linguagens assembly. Além disso, usam palavras comuns em vez de mnemônica abreviada. Por causa disso, as linguagens procedurais são consideradas a primeira geração de linguagens de alto nível. As linguagens procedurais exigem que o programador especifique, passo a passo, exatamente como o computador realizará uma tarefa. Uma linguagem procedural é orientada focando como um resultado deve ser produzido. Uma vez que computadores entendem apenas linguagem de máquina (i.e., 0s e 1s), linguagens de alto nível precisam ser traduzidas em linguagem de máquina antes da execução. A tradução é feita por softwares de sistema chamados de tradutores de linguagem. Um tradutor de linguagem converte o programa de alto nível, chamado de código-fonte, em código de linguagem de máquina, chamado de código-objeto. Existem dois tipos de tradutores: compiladores e interpretadores. • Compiladores. A tradução de um programa de linguagem de alto nível para código-objeto é realizada por um programa de software chamado de compilador. O processo de tradução é conhecido como compilação. • Interpretadores. Um interpretador é um compilador que traduz e executa uma instrução de um programa-fonte por vez. Desse modo, interpretadores tendem a ser mais simples do que compiladores. Essa simplicidade permite que a depuração seja mais extensa e que a assistência ao diagnóstico esteja disponível em interpretadores. • Exemplos de linguagens procedurais. A FORTRAN (Formula Translator) é uma linguagem procedural algébrica do tipo fórmula. Ela foi desenvolvida para atender a requisitos de processamento científicos. A COBOL (Common Business-Oriented Language) foi desenvolvida como uma linguagem de programação para a comunidade de negócios. A intenção era fazer com que as instruções em COBOL fossem semelhantes ao modo como seriam expressas em inglês. Como resultado, os programas seriam “autodocumentáveis”. Há hoje em uso mais programas em COBOL do que em qualquer outra linguagem de computador. O Microsoft Visual BASIC é a extensão da linguagem de programação BASIC. Essa linguagem é famosa por sua interface gráfica com o usuário e é ideal para criar protótipos. Em 2002, a Microsoft lançou a plataforma .NET, para que todas suas linguagens, incluindo a Visual BASIC, suportassem essa poderosa plataforma. A linguagem de programação C foi a linguagem que mais cresceu nos anos 1990. A C é considerada mais transportável do que outras linguagens, o que significa que um programa escrito em C para um tipo de computador em geral executa em outros tipos de computador com poucas modificações, ou até mesmo sem modificação alguma. Além disso, a linguagem C é facilmente modificável. Linguagens não procedurais. Quarta geração (4G). Outro tipo de linguagem de alto nível, conhecida como não procedural ou de quarta geração (4GL), permite que o usuário especifique os resultados desejados sem ter que especificar os procedimentos detalhados necessários para atingir os resultados. Uma linguagem não procedural é orientada para aquilo que é requerido. As 4GLs, também referidas como linguagens de comando, simplificam e aceleram o processo de programação e reduzem o número de erros de codificação. Linguagens de programação naturais. Quinta geração. As linguagens de programação de linguagem natural (natural language programming language – NLPs) são o próximo passo evolutivo. São algumas vezes conhecidas como linguagens de quinta geração ou linguagens inteligentes. Os programas de tradução para traduzir linguagens naturais de forma estruturada e legível pela máquina são extremamente complexos e requerem uma grande quantidade de recursos de computador. Exemplos incluem a INTELLECT e a ELF. Esses são em geral front-ends (como a linguagem FOCUS) que melhoram a interface do usuário com as 4GLs. Diversas linguagens procedurais de inteligência artificial (como as LISP) são chamadas por alguns de 5GLs. 2 • Software GT2-13 Linguagens de programação objeto. Linguagens objeto foram criadas para se ajustar a novas tecnologias como multimídia, hipermídia, gerenciamento de documentos e Internet. Essas linguagens são descritas a seguir. Linguagens de programação orientada a objetos. A programação orientada a objetos (POO, ou object-oriented programming – OOP) modela um sistema como um conjunto de objetos. Como a programação estruturada, a POO tenta gerenciar a complexidade comportamental de um sistema, mas também tenta gerenciar a complexidade de informações de um sistema. A abordagem orientada a objetos (OO) envolve programação, ambientes de sistemas operacionais, bancos de dados orientados a objetos e um novo modo de abordar aplicações de negócios. Conceitos da abordagem orientada a objetos. Os conceitos básicos da abordagem OO são objetos, classes, transmissão de mensagens, encapsulamento, herança e polimorfismo. Como esses conceitos parecem complexos e técnicos demais à primeira vista, talvez seja útil relacioná-los a aspectos das interfaces gráficas com o usuário em sistemas operacionais populares, como Windows e o Mac OS X da Apple. Essas interfaces foram desenvolvidas por meio da programação orientada a objetos e incorporam recursos orientados a objetos. Sistemas orientados a objetos enxergam o software como uma coleção de objetos que interagem entre si. Um objeto modela coisas do mundo real. Essas coisas podem ser entidades físicas, como carros, alunos ou eventos. Ou podem ser coisas abstratas, como contas em bancos, ou aspectos de uma interface, como um botão ou uma caixa para entrada de texto. Quando nos referimos a um objeto, podemos ter dois sentidos: uma classe ou uma instância. Uma classe é um modelo ou uma estrutura geral que define os métodos e atributos a serem incluídos em um tipo particular de objeto. Um objeto é uma instância específica de uma classe, capaz de realizar serviços e armazenar dados. Por exemplo, “aluno” pode ser uma classe em sistema de matrícula de alunos. Um aluno em particular, por exemplo, John Kim, é uma instância dessa classe e, portanto, um objeto. Objetos têm dados associados a eles. Os elementos de dados são referidos como atributos ou variáveis porque seus valores podem mudar. Por exemplo, o objeto John Kim pode armazenar os dados que o identificam como formando, graduando em sistemas de informação, matriculado no último semestre do curso. Os objetos exibem comportamentos, que são as atividades que eles executam. O programador implementa esses comportamentos ao escrever seções de código que realizam os métodos de cada objeto. Métodos são os procedimentos ou comportamentos de um objeto que modificarão os valores de atributo daquele objeto. Os métodos são algumas vezes chamados de operações que manipulam o objeto. Comportamentos comuns incluem modificar os dados em um objeto e comunicar informações em valores de dados. Ao clicar em uma caixa de seleção em um sistema Windows, o usuário inicia o comportamento que modifica o atributo para “selecionado” e mostra um X ou uma marca de seleção na caixa. Os objetos interagem entre si utilizando mensagens. Essas mensagens representam solicitações para exibir os comportamentos desejados. O objeto que inicia uma mensagem é o remetente, e o objeto que recebe a mensagem é o receptor. Quando interagimos com objetos, enviamos mensagens a eles e eles também podem enviar mensagens para nós. Clicar em um botão, selecionar um item de um menu e arrastar e soltar um ícone são maneiras de enviar mensagens aos objetos. Essas mensagens podem ativar métodos no objeto destinatário e, assim, novas mensagens são geradas. Transmitir mensagens é o único meio de obter informações de um objeto, porque os atributos não são diretamente acessíveis. A falta de acessibilidade aos dados de um objeto é chamada de encapsulamento ou ocultamento de informação. Ao ocultar suas variáveis, um objeto protege outros objetos de complicações derivadas da dependência em sua estrutura interna. Os outros objetos não precisam conhecer o nome de cada variável, o tipo de informação que ela contém nem o formato de armazenamento físico da informação. Eles só precisam saber solicitar informações ao objeto. Com a herança, uma classe de objetos é definida como um caso especial de uma classe mais geral, incluindo automaticamente o método e as definições variáveis da classe geral. Classes especiais de uma classe são subclasses, e a classe mais geral é uma superclasse. Por exemplo, a classe aluno é uma subclasse de ser humano, que é uma superclasse. A classe aluno pode ser dividida ainda em alunos do estado, alunos de fora do estado ou alunos com GT2-14 Guias de Tecnologia bolsa, que seriam subclasses da classe aluno. Essa organização resulta em uma hierarquia de classes. A herança é particularmente valiosa, porque os analistas podem procurar em hierarquias de classes predefinidas, conhecidas como bibliotecas de classes, tratar por aquelas que sejam semelhantes às classes de que precisam em um novo sistema. Esse processo economiza muito tempo. Por exemplo, se o usuário final precisa tratar alunos como uma classe de objetos, o analista pode encontrar uma classe geral que seja similar à classe aluno, como vista pelo usuário final. Assim, o analista reutiliza informações de uma classe existente em vez de partir do começo para definir a classe aluno. A relação entre classes e subclasses é mostrada na Figura GT2.4. Polimorfismo é a habilidade de enviar a mesma mensagem a vários receptores diferentes (objetos) e fazer com que a mensagem desencadeie a ação desejada. Por exemplo, suponha que existam três classes de objetos em um sistema de ensino particular: alunos do estado, alunos de fora do estado e alunos com bolsa de estudos. Precisamos calcular a matrícula para cada tipo de aluno (classes), levando em conta que as matrículas serão diferentes para as três classes. O polimorfismo nos permite enviar a mesma mensagem “calcular matrícula” às três classes e obter a matrícula correta para cada uma. Programação com OO. Criar programas e aplicações usando linguagens de programação orientada a objetos é semelhante a construir um prédio usando partes pré-fabricadas. O objeto contendo os dados e os procedimentos é um bloco de construção de programação. Os mesmo objetos são usados repetidamente, um processo conhecido como reusabilidade, ou capacidade de reutilização. Ao reutilizar o código do programa, os programadores escrevem programas com muito mais eficiência e com muito menos erros. Linguagens de programação orientadas a objetos oferecem vantagens como código reutilizável, custos baixos, menor incidência de erros e quantidade de testes, e implementação mais rápida. Linguagens populares de programação orientadas a objetos incluem Smalltalk, C++, Java e C#. Smalltalk. A Smalltalk é uma linguagem orientada a objetos pura desenvolvida pelo Xerox Palo Alto Research. A sintaxe é razoavelmente fácil de aprender, sendo bem menos complicada que a da C e a da C++. C++. A C++ é uma extensão direta da linguagem C, com 80 a 90 por cento da C++ permanecendo C puro. Employee Name Title (Classe) (Variáveis de classe) Print (Methods) Contractor (Subclasse de funcionário) Name Title Contract_number Dollar_amount Print Horista Paid weekly Name Title (Subclasse de funcionário) Print Make_weekly_paycheck (Subclasse de funcionários pagos por semana) Name Title Hourly_wage Hours_per_week Print Make_weekly_paycheck - Redefinição Salaried (Subclasse de funcionários pagos por semana) Name Title Salary Print - Redefinição Make_weekly_paycheck - Redefinição Figura GT2.4 Classes, subclasses, herança e redefinição de objetos. (Fonte: © Cortesia da Apple Corporation. Usada com permissão.) 2 • Software GT2-15 Unified Modeling Language, (UML). Desenvolver um modelo para sistemas de software complexos é tão essencial quanto ter a planta para a construção de um edifício. A UML é uma linguagem para especificar, visualizar, construir e documentar os artefatos (como as classes, objetos, etc.) em sistemas de software orientados a objetos. Ela torna a reutilização desses artefatos mais fácil, porque a linguagem fornece um conjunto comum de notações que podem ser usadas para todos os tipos de projetos de software. Linguagem de Programação Visual. Linguagens de programação usadas em um ambiente gráfico costumam ser chamadas de linguagens de programação visuais. A programação visual permite aos desenvolvedores criar aplicações por meio da manipulação direta de imagens, em vez de especificar as características visuais no código. Essas linguagens usam mouses, ícones, símbolos na tela ou menus suspensos para facilitar a programação e torná-la mais intuitiva. A Visual Basic e o Visual C++ são exemplos de linguagens de programação visuais. LINGUAGENS DE PROGRAMAÇÃO WEB E SOFTWARE Várias linguagens existem especificamente para a Internet. A mais conhecida é a HTML. Hypertext Markup Language. A linguagem padrão que a Web usa para criar e reconhecer documentos hipermídia é a Hypertext Markup Language (HTML). A linguagem HTML relaciona-se fracamente com a Standard Generalized Markup Language (SGML), que é um método de representar linguagens de formatação de documentos. Linguagens como a HTML que seguem o formato SGML permitem que editores de documentos separem as informações da apresentação do documento. Ou seja, documentos com as mesmas informações podem ser apresentados de diversas maneiras. Os usuários têm a opção de controlar elementos visuais como fontes, tamanho da fonte e espaçamento entre parágrafos sem alterar as informações originais. A HTML é fácil de usar. Documentos na Web costumam ser escritos em HTML e são nomeados com o sufixo .html ou .htm. Documentos em HTML são arquivos ASCII de 7 ou 8 bits padrão com códigos de formatação que contêm informações sobre layout (estilos de texto, títulos, parágrafos, listas) e hiperlinks. A HTML padrão suporta a criação e o layout de documentos simples em hipertexto, bem como formas interativas e “pontos ativos” definidos em imagens. O hipertexto é uma abordagem para gerenciamento de dados na qual os dados são armazenados em uma rede de nós conectada por links (chamados de hiperlinks). Os usuários acessam os dados por um sistema de navegação interativo. A combinação de nós, links e índices de ajuda para qualquer tópico é um documento em hipertexto. Um documento em hipertexto pode conter textos, imagens e outros tipos de informação como arquivos de dados, áudio, vídeo e programas de computador executáveis. A rede mundial de computadores usa Uniform Resource Locators (URLs) para representar links de hipermídia e links para serviços de rede dentro de documentos em HTML. A primeira parte do URL (antes das duas barras) especifica o método de acesso. A segunda costuma ser o endereço do computador em que os dados ou serviços estão localizados. Um URL é sempre uma linha contínua sem espaços. A Dynamic HTML é o próximo passo, além da HTML. A Dynamic HTML oferece avanços como estes: • Oferece uma experiência mais agradável e dinâmica ao usuário na Web, tornando as páginas mais parecidas com aplicações dinâmicas, com menos conteúdo estático. Permite que o usuário interaja com o conteúdo das páginas sem precisar baixar conteúdo adicional do servidor. Isso significa que páginas Web que usam Dynamic HTML oferecem informações mais animadoras e úteis. • A Dynamic HTML dá aos desenvolvedores controle preciso sobre a formatação, as fontes e o layout, o que oferece um modelo de objeto aprimorado para tornar as páginas interativas. • Serve como base para crossware, uma nova classe de aplicações sob demanda, independente de plataforma, construída com Dynamic HTML, Java e JavaScript. O Netscape Netcaster, um componente do Netscape Communicator, foi a primeira aplicação crossware do Netscape. Aprimoramentos e variações de HTML tornam possíveis novos layouts e recursos designs em páginas Web. Por exemplo, as folhas de estilo em cascata (cascading style sheets – CSSs) GT2-16 Guias de Tecnologia são um complemento da HTML que atua como um modelo, definindo aparência ou estilo (como tamanho, cor e fonte) de um elemento de uma página Web, como uma caixa. XML. A XML (eXtensible Markup Language) é otimizada para distribuição de documentos pela rede. É construída com base na SGML. A XML é uma linguagem para definição, validação e compartilhamento de formatos de documentos. Ela permite que autores criem, gerenciem e acessem conteúdos dinâmicos, personalizados e customizados na Web sem introduzir extensões de HTML proprietárias. A XML é especialmente indicada para aplicações de comércio eletrônico. A XQuery é uma linguagem de consulta XML desenvolvida e padronizada pelo World Wide Web Consortium (W3C). A XQuery é uma linguagem poderosa e conveniente criada para o processamento de dados em XML: não apenas arquivos em XML, mas também outros dados, incluindo bancos de dados com estrutura similar à da XML. O objetivo da XQuery é localizar, recuperar e reorganizar dados vistos pelas lentes da XML. Java. Java é uma linguagem de programação orientada a objetos desenvolvida pela Sun Microsystems. Essa linguagem possibilita aos programadores desenvolver aplicações que funcionem na Internet. O Java é usado para desenvolver aplicações pequenas, chamadas de miniaplicações, que podem ser incluídas em uma página HTML na Internet. Quando o usuário usa um navegador compatível com Java para abrir uma página que contém uma miniaplicação Java, o código da miniaplicação é transferido ao sistema do usuário e executado pelo navegador. JavaScript. JavaScript é uma linguagem de criação de scripts orientada a objetos desenvolvida pela Netscape Communications para aplicações cliente/servidor. Ele permite que usuários tornem páginas Web mais interativas. Muitas pessoas confundem JavaScript com Java. Não há relação alguma entre essas duas linguagens. O JavaScript é uma linguagem bem básica e não tem semelhanças com a linguagem Java, que é sofisticada e complexa. JavaBeans. JavaBeans é a arquitetura de componente neutra em relação à plataforma do Java. É usado para desenvolver ou montar soluções cientes de rede para ambientes de hardware e sistemas operacionais heterogêneos, dentro da empresa ou na Internet. O JavaBeans estende a capacidade “escreva uma vez, execute em qualquer lugar”, para desenvolvimento de componentes reutilizáveis. O JavaBeans executa em qualquer sistema operacional e em qualquer ambiente de aplicação. ActiveX. O ActiveX é um conjunto de tecnologias da Microsoft que combina diferentes linguagens de programação em um site exclusivo e integrado. Antes do ActiveX, o conteúdo Web era constituído de textos e imagens estáticas bidimensionais. Com o ActiveX, os sites ganharam vida usando efeitos multimídia, objetos interativos e aplicações sofisticadas que criam uma experiência de usuário comparável à títulos de CD-ROM de alta qualidade. O ActiveX não é propriamente uma linguagem de programação, mas um conjunto de regras para compartilhamento de informações entre aplicações. ASP. ASP (Active Server Pages) é uma tecnologia do tipo CGI (Common Gateway Interface) da Microsoft que permite criar páginas Web geradas dinamicamente no lado do servidor usando uma linguagem de criação de scripts. Como o ASP comunica-se com controles ActiveX e com outros programas OLE, os usuários podem aproveitar diversos geradores de relatório, controles gráficos e todos os controles ActiveX para os quais podem ser utilizados. O ASP também pode ser programado em VBScript ou JavaScript, permitindo que os usuários trabalhem na linguagem de sua preferência. Software baseado na Web é um software que é instalado e executa em servidores e depois é acessado por um computador pessoal em rede. O computador pessoal costuma usar um navegador Web para acessar o software hospedado em um servidor. Um exemplo disso é o Google Docs. FERRAMENTAS CASE A CASE (computer-aided software engineering) é uma ferramenta para programadores, analistas de sistemas, analistas de negócio e desenvolvedores de sistema que ajuda a automatizar o desenvolvimento de software e ao mesmo tempo melhorar a qualidade de software. Ela é uma combinação de ferramentas de software e métodos estruturados de desenvolvimento de software. As ferramentas automatizam o processo de desenvolvimento de software, ao passo que as metodologias ajudam a identificar os processos a serem automa- 2 • Software GT2-17 tizados com ferramentas. Ferramentas CASE costumam usar elementos gráficos ou diagramas para ajudar a descrever e documentar sistemas e deixar mais claras as interfaces ou interconexões entre os componentes (ver Figura GT2.5). Elas em geral estão integradas, permitindo que os dados sejam transmitidos de ferramenta para ferramenta. Categorias de ferramentas CASE. Ferramentas CASE suportam aspectos individuais ou estágios do processo de desenvolvimento de sistemas, grupos ou aspectos relacionados, ou o processo como um todo. Ferramentas Upper CASE (U-CASE) concentram-se principalmente em aspectos de projeto de desenvolvimento de sistemas, por exemplo, ferramentas que criam diagramas de fluxo de dados ou de relacionamento de entidades. As ferramentas lower CASE (L-CASE) auxiliam a programação e atividades relacionadas, como testes, em estágios avançados do ciclo de vida. Ferramentas Integrated CASE (I-CASE) incorporam a funcionalidade das ferramentas U-CASE e L-CASE e oferecem suporte a várias tarefas por todo o ciclo de desenvolvimento de software. Ferramentas CASE são subdivididas em duas categorias: conjunto de ferramentas e workbenches. Um conjunto de ferramentas é uma coleção de ferramentas de software que automatiza um tipo de tarefa de software ou uma fase do processo de desenvolvimento de software. A subcategoria CASE workbench é uma coleção de ferramentas de software que se inter-relacionam com base em pressupostos comuns sobre a metodologia de desenvolvimento empregada. Um workbench também usa o repositório de dados que contém todas as informações técnicas e de gestão necessárias para construir o sistema de software. De modo ideal, workbenches oferecem suporte durante todo o processo de desenvolvimento de software e ajudam a produzir um sistema documentado e executável. Como a maioria das ferramentas CASE tem natureza gráfica e a habilidade de construir protótipos funcionais rapidamente, usuários sem treinamento técnico podem participar mais ativamente do processo de desenvolvimento. Eles podem ver como o sistema completo ficará antes que seja construído, o que resulta em menos mal-entendidos e erros de design. O uso de ferramentas CASE ajuda a tornar mais fácil a revisão de uma aplicação. Quando revisões são necessárias, só é preciso modificar especificações no repositório de dados, e não no código-fonte. Isso também permite que sistemas protótipos sejam desenvolvidos com mais Figura GT2.5 Tela de uma ferramenta CASE. GT2-18 Guias de Tecnologia rapidez e facilidade. Algumas ferramentas CASE ajudam a gerar códigos-fonte diretamente, com benefícios significativos. Mas elas também têm algumas desvantagens. A falta de suporte à gestão de ferramentas CASE dentro das organizações pode ser um problema. As CASE são caras para instalar, e o custo de treinamento de desenvolvedores é alto, o que torna seu uso adequado custoso também. Muitas empresas não sabem como medir a qualidade ou a produtividade no desenvolvimento de software e, por isso, acham difícil justificar as despesas de implementação de ferramentas CASE. Além disso, a receptividade de programadores profissionais pode influenciar bastante a eficiência dessas ferramentas. Muitos programadores que já dominam uma abordagem de desenvolvimento hesitam em adotar um novo método. GT2.5 Questões e tendências de software A importância do software em sistemas de computador trouxe novas questões e tendências para os gerentes organizacionais. Entre elas, avaliação e seleção de softwares, licença de software, atualizações e defeitos de software, malware, sistemas abertos, softwares de código-fonte aberto, shareware, pirataria de software, arquitetura orientada a serviços e computação autônoma. AVALIAÇÃO E SELEÇÃO DE SOFTWARE Há dúzias ou até mesmo centenas de pacotes de software para praticamente qualquer função. A avaliação e a seleção do software é uma decisão difícil e sofre a influência de diversos fatores. A primeira parte do processo seletivo envolve entender as necessidades de software da organização e identificar o critério que será usado na tomada de decisão. Uma vez que os requisitos de software são estabelecidos, produtos de software específicos devem ser avaliados. Uma equipe de avaliação, composta por representantes de cada um dos grupos que terá um papel na construção e no uso do software, deve ser escolhida. A equipe irá estudar as alternativas propostas e encontrar o software que prometa ser a melhor opção para aquilo que a organização precisa e o que ele oferece. LICENÇA DE SOFTWARE Licença proprietária. Fornecedores gastam tempo e dinheiro desenvolvendo produtos. Para proteger esse investimento, eles precisam impedir que o software seja copiado e distribuído por indivíduos e outras empresas de desenvolvimento de software. Uma empresa pode adquirir os direitos autorais do software que produz, o que significa que o Copyright Office dos Estados Unidos garante às empresas o direito legal exclusivo de reproduzir, publicar e vender o software. Licença de código-fonte aberto. Existem também licenças de software de código-fonte aberto. Software de código-fonte aberto pode ser distribuído e vendido livremente. Alguns exemplos de software de código-fonte aberto populares incluem GNU General Public License (licença pública geral), BSD e Licença Apache 2.0. Software licenciado sob licença de código-fonte aberto precisa ser livre para ser redistribuídos por qualquer pessoa, e o software precisa ser distribuído com o código-fonte junto com o direito de modificar o código-fonte e de produzir trabalhos derivados sob os mesmos termos da mesma licença. Para mais informações, ver Open Source Initiatives “Open Source Definition” em http://www.opensource.org/docs/osd. ATUALIZAÇÕES DE SOFTWARE Outra questão de interesse para a gestão organizacional são as atualizações de software (o que também é conhecido como manutenção de software). Fornecedores de software costumam revisar seus programas e vender novas versões. O software revisado pode oferecer melhorias importantes ou, por outro lado, oferecer pouco em termos de capacidades adicionais. Além disso, o software revisado pode apresentar erros (bugs). Decidir comprar ou não o software mais novo é um problema para empresas e administradores de SI. É também difícil decidir ser ou não uma das primeiras empresas a comprar e obter vantagens estratégicas de novo software antes dos competidores, arriscando encontrar bugs que não haviam sido descobertos. 2 • Software GT2-19 DEFEITOS DE SOFTWARE Um software de qualidade é usável, confiável, sem defeitos, tem bom custo-benefício e é passível de manutenção. Entretanto, é muito frequente que o código do programa seja ineficiente, mal projetado e repleto de erros. Defeitos de software arruinaram o lançamento de um satélite europeu, atrasaram a abertura do Aeroporto Internacional de Denver por um ano e destruíram uma missão da NASA a Marte. Em outro exemplo, no mesmo dia em que a Microsoft lançou o Windows XP, a empresa postou 18 megabytes de patches em seu site: correção de bugs, atualizações de compatibilidade e aprimoramentos. Com nossa dependência de computadores e redes, os riscos ficam cada vez maiores. De acordo com o Software Engineering Institute (SEI), programadores profissionais cometem em média 100 a 150 erros a cada mil linhas de código escritas. Usando a média do SEI, o Windows XP, com 41 milhões de linhas de código, teria mais de 4 milhões de bugs. A indústria reconhece o problema, mas ele é tão grande que apenas passos iniciais estão sendo dados. Um deles é melhorar o design e o planejamento no início do processo de desenvolvimento. SISTEMAS ABERTOS O conceito de sistemas abertos refere-se a um modelo de produtos de computador que trabalham em conjunto. Atingir esse objetivo é possível pelo uso do mesmo sistema operacional com software compatível em todos os diferentes computadores que irão interagir uns com os outros em uma organização. Uma abordagem complementar é produzir aplicativos que rodem em todas as plataformas. Se hardware, sistema operacional e software de aplicações forem projetados como sistemas abertos, o usuário poderá comprar o melhor software para aquilo que precisa sem se preocupar se irá rodar em um tipo específico de hardware. Como exemplo, a maioria dos pacotes de software de aplicação da Apple Macintosh não roda em computadores Wintel (Windows-Intel). No entanto, o Windows roda em computadores Apple mais novos com processadores Intel. Nenhum deles roda em mainframes. Certos sistemas operacionais, como o UNIX, rodam em quase todos os tipos de máquinas. Assim, para atingir o objetivo de sistemas abertos, as organizações costumam usar UNIX nos desktops e em máquinas maiores para que os softwares produzidos para UNIX opere em todas as máquinas. Avanços recentes em direção a sistemas abertos envolvem o uso da linguagem Java, que pode ser executada em vários tipos de computadores, no lugar de um sistema operacional tradicional. SOFTWARE DE CÓDIGO-FONTE ABERTO Sistemas abertos não devem ser confundidos com software de código-fonte aberto. O software de código-fonte aberto está disponível na forma de código-fonte sem custos para os desenvolvedores. Há muitos exemplos desse tipo de software, incluindo GNU (GNU’s NOT UNIX) (gnu.org/), desenvolvido pela Free Software Foundation (fsf.org/), o Linux kernel (kernel.org/), o servidor Web Apache (apache.org/), o servidor de e-mail sendmail SMTP (Send Mail Transport Protocol) (sendmail.org/), a linguagem de programação Perl (perl. com), o navegador Mozilla Firefox (mozilla.org/), o Oracle Open Office (oracle.com), o Android OS da Google e o Symbian v3. Software de código-fonte aberto é, em muitos casos, mais confiável que software proprietário. Como o código está disponível para muitos desenvolvedores, vários bugs são descobertos – mais cedo e rapidamente, sendo corrigidos de imediato. O suporte para software de código-fonte aberto também está disponível a partir de empresas que fornecem produtos derivados do software, como, por exemplo, Red Hat para Linux (redhat.com/). Essas empresas oferecem serviços pagos de treinamento e assistência técnica. O Linux foi usado para criar os impressionantes efeitos da trilogia O Senhor dos Anéis. Mais de 200 estações de trabalho e 450 servidores de processador duplo rodaram o Red Hat Linux 7.3 para identificar os recursos do sistema e distribuir tarefas de renderizações, como sombras e reflexos, através de processadores ociosos para acelerar a criação de cenas. Em termos de segurança e estabilidade, o código-fonte aberto é melhor porque várias pessoas podem encontrar problemas ocultos e erradicá-los mais cedo. Além disso, alguns empresários têm receio de ser bloqueados por software proprietário. Software de código-fonte aberto algumas vezes é produzido por fornecedores, mas costuma ser produzido por grupos de voluntários. Ele normalmente é distribuído a custo baixo GT2-20 Guias de Tecnologia ou sem custo algum por distribuidores que esperam ganhar dinheiro com treinamento, consultoria, produtos complementares e software personalizado. Inicialmente, isso não foi considerado confiável nem uma alternativa viável para o uso de software proprietário produzido por grandes empresas com reputação e recursos financeiros significativos. O Linux mudou essa percepção por meio do uso de software de código-fonte aberto; as empresas economizam muito sem comprometer qualidade, assistência e aprimoramentos futuros. SHAREWARE E FREEWARE Shareware é um tipo de software cujo autor espera que o usuário pague uma quantia modesta pelo privilégio de usar o programa. Freeware é gratuito. Ambos ajudam a manter os custos de software baixos. Shareware e freeware costumam não ser tão poderosos quanto as versões profissionais (não têm o conjunto completo de funcionalidades), mas a maioria dos usuários consegue o que precisa a um custo baixo. Eles estão disponíveis na Internet em grande quantidade (download.com). Um problema comum desse tipo de software é a eventual introdução de vírus ou de spyware. Alguns pacotes populares são o WinZip, o Adobe Reader, o Mozilla, o Zero Pop-up e o KaZaa.