Neste tpico so apresentadas diferentes definies de software, para que seja
possvel tirar algumas concluses importantes, e os tipos de software encontrados. Existem inmeras definies para software, dependendo da viso utilizada. A seguir so apresentadas quatro definies. Definio 1 Parte lgica que dota o equipamento fsico de capacidade para realizar todo tipo de trabalho. Definio 2 Ingrediente que estabelece que o computador executar uma tarefa especfica (instrues eletrnicas que em geral residem em um meio de armazenamento). Um conjunto especfico dessas instrues chamado programa. Definio 3 Software : (1) instrues programas de computador que, quando executadas, produzem a funo e o desempenho desejados; (2) Estruturas de dados que possibilitam que os programas manipulem adequadamente a informao e (3) Documentos que descrevem a operao e o uso dos programas.
Definio 4 Software no apenas o programa, mas tambm toda a documentao associada aos dados de configurao necessrios para fazer com que esses programas operem corretamente. Um sistema de software, usualmente, consiste em uma srie de programas, documentao do sistema que descreve a estrutura desse sistema, e documentao do usurio que explica como utilizar o sistema.
A partir das definies apresentadas possvel definir software como:
Software - a parte lgica do sistema de computao que armazenada eletronicamente. composto por um ou mais programas (conjuntos de instrues) que capacitam o hardware a realizar tarefas especificas, pelos dados manipulados por eles, pela documentao de especificao (projeto) dos programas e pela documentao de operao dos programas.
1. Evoluo do Software Para compreender melhor o que os softwares podem realizar hoje, importante conhecer como evoluram. Observe que as etapas da figura abaixo se sobrepem, indicando a ocorrncia de muitos aspectos ao mesmo tempo.
Evoluo do software. Fonte: Pressman (1995, p.5) Primeiros anos (anos 50 at meados dos anos 60) Sistema de computao realizava, sequencialmente, conjuntos de instrues agrupadas em lotes (batch). No era interrompido at o encerramento do processo. Existiam poucos programas disponveis no mercado, pois eram customizados (feitos especialmente para cada sistema de computao). Segunda Era (incio dos anos 60 at meados dos anos 70) Programas passaram a ser usados por vrias pessoas ao mesmo tempo real. Surgiram os primeiros programas de banco de dados, permitindo que os dados fossem armazenados no sistema de computao para tratamento especfico. Comearam a ser criados softwares para venda como produto, ou seja, o mesmo software utilizado por vrias empresas.
Terceira Era ( incio dos anos 70 at final dos anos 80 ) Surgiu o conceito de sistemas distribudos, que representam processamento realizado no somente por um computador central, mas tambm por outros ligados a ele. O software comeou a ser usado em equipamentos de uso dirio. Era a chamada inteligncia dos equipamentos. Computadores ficaram muito mais baratos permitindo que empresas e pessoas em maior nmero pudessem adquiri-los. Quarta Era (meados dos anos 80 at os dias de hoje) Computadores pessoais passam a ter a capacidade de processamento equivalente (ou superior) a antigos computadores de grande porte, disseminando o seu uso. Surgem as tecnologias orientadas a objeto, que procuram apresentar uma nova (e mais prxima da realidade) forma de criar software. Software passam a ser usados para a tomada de decises, inclusive com o surgimento dos Sistemas Especiais, que permitem o uso do conhecimento humano como base da tomada de deciso. A inteligncia artificial (por exemplo, redes naturais) comea a apresentar aplicaes prticas, aprendendo e corrigindo decises futuras. Sistemas de computao comeam a processar instrues de forma paralela aumentando ainda mais a velocidade de processamento. Daqui para frente... Estas so apenas algumas das tendncias relacionadas aos softwares: Uso cada vez mais intensivo da computao distribuda ( redes de computadores ). Aplicaes de inteligncia artificial cada vez mais prximas do usurio comum. Computadores com capacidade de armazenamento e processamento cada vez maiores, permitindo programas mais extensos e potentes. Softwares cada vez mais fceis de usar, inclusive ajudando o prprio usurio a escolher a melhor maneira de realizar as tarefas.
2. Categorias Qualquer classificao que for adotada para os softwares pode ser considerada correta, dependendo do enfoque adotado. A seguir, representada uma categorizao possvel. a) Software de sistema (Bsico): trabalha fortemente integrado com o sistema de computao, realizando as tarefas de gerenciamento necessrias ao seu funcionamento. Fazem parte dessa categoria:
Sistema operacional: software responsvel pelo funcionamento geral dos sistemas de computao. Sem eles os sistemas de computao no funcionam.
Utilitrios de sistema: softwares que acompanham o sistema operacional e o auxiliam nas suas tarefas.
b) Software Aplicativo: software que realiza algum trabalho para o usurio.
c) Linguagem de Programao: software utilizado para criao de softwares aplicativos.
Essa classificao abrange quase todos os softwares existentes, mas alguns tipos so de difcil classificao, tais como: Midleware (software que faz a mediao entre um aplicativo e o sistema operacional, ou entre dois aplicativos) ou Firmware (cdigo impresso no processador ou gravado em memrias ROM, visto, como parte do hardware).
3. Tipos de Software Os softwares apresentam algumas definies relacionadas forma de aquisio e uso. As definies no so padronizadas e muitos softwares podem ser enquadrados em mais de um tipo:
Freeware: software distribudo gratuitamente, mas que limitao no revela o cdigo-fonte (instrues). Possui licena para redistribuio, mas pode ter limitao para uso comercial.
Free Software: a distribuio desse software pode ser gratuita ou paga, mas permitido o seu uso, modificao e redistribuio (aqui free significa liberdade de ao).
Open Source: software distribudo sob licena de open-source, cujo cdigo-fonte de domnio pblico ou com copyright (direitos autorais). Esse tipo de licena permite que o cdigo-fonte seja livremente modificado, mas quando for distribudo, deve permanecer livre para modificaes. Alm disso existem algumas pequenas restries quanto modificaes. necessrio manter o nome do autor original e o copyright (operao conhecida como copyleft). Alguns exemplos dessas licenas so: GNU General Public License, Mozila Public License.
Shareware: software distribudo gratuitamente, mas que requer pagamento depois de um perodo (teste) ou para obter mais funes (verso completa), nesse caso, conhecido como Crippleware.
Adware: software distribudo gratuitamente, mas requer que o usurio visualize propagandas para usar o software.
Domnio Pblico: software sem copyright, por isso pode ser distribudo gratuitamente.
4. Meios de aquisio de Software Os Software, quando adquiridos, permitem a sua transferncia para o sistema de computao cpia ou instalao por meio de comandos especficos. Os meios pelos quais chegam ao sistema de computao podem ser :
Discos Flexveis: Atualmente, quase no so mais utilizados como meio de aquisio softwares devido a sua pequena capacidade de armazenamento. CD- Rom/DVD: os meios pticos so os mais utilizados atualmente na aquisio de software devido a sua alta capacidade de armazenamento. Download: Os softwares so trazidos ao sistema de computao de destino atravs de uma rede de computadores. Os programas ficam armazenados em um computador e so transferidos (download) para o destino por sinais que fluem em meios de comunicao como fios eltricos, fibra ptica, sinais de rdio, etc .
Questionrio para entrega na prxima aula:
1) Como voc define um software? 2) Quais as principais caractersticas da quarta era do software? 3) Quais so as tendncias para o futuro do software? 4) Qual a diferena de um software do tipo freeware e um do tipo open source?
Linguagens de Programaa o Este tpico apresenta os principais conceitos relacionados s linguagens de programao, os tipos encontrados e detalhes de algumas linguagens de programao comerciais. A linguagem de programao pode ser entendida como conjunto de palavras (vocabulrio) e um conjunto de regras gramaticais (para relacionar essas palavras) que serve para instruir o sistema de computao a realizar tarefas especficas e com isso, criar os programas. Cada linguagem tem o seu conjunto de palavras chave e sintaxes. A pessoa responsvel por criar o programa (programador) escreve comandos na linguagem de programao (cdigo fonte). A linguagem de programao deve traduzir o cdigofonte em uma linguagem compreensvel pela CPU (linguagem de mquina). Essa transformao pode acontecer por meio de Compilao ou Interpretao. Em alguns casos as linguagens de programao so conhecidas indistintamente como compiladores. 1. Compilao A Compilao transforma cdigo-fonte em programa executvel pela CPU, de modo a criar programas autnomos que no necessitam da linguagem de programao para serem executados. Para isso, so necessrias algumas etapas. O programador escreve os comandos que realizaro a tarefa desejada na linguagem de programao (usando palavra-chave e sintaxes prprias ). Nesse caso ele est utilizando uma linguagem de alto nvel, pois os comandos esto mais prximos da linguagem humana do que linguagem de mquina. Ele cria o cdigo-fonte. Nessa etapa o cdigo-fonte passa por um processo de compilao. Nesse processo a linguagem de programao utiliza um de seus mdulos internos conhecido como programa compilador para transformar os comandos do cdigo-fonte em comando de linguagem de mquina, criando o cdigo objeto.
Processo de Compilao. Fonte: Marula (2005, p.169) Durante esse processo, a linguagem de programao realiza anlises lxica, sinttica e semntica para detectar se os comandos feitos pelo programador utilizaram a palavra-chave vlidas e se essas palavras esto dispostas em uma ordem correta. O processo poder parar nesse momento, mas a criao de programas executveis possui algumas caractersticas adicionais. O cdigo-fonte de um programa pode ser formado por somente um conjunto de comandos, mas boa parte dos programas formada por vrios desses conjuntos interligados. Isso permite que um programa com uma quantidade de funes muito grande possa ser desenvolvido por um grupo de pessoas, cada uma desenvolvendo uma parte dele. Outro aspecto importante que um programa pode utilizar cdigos ou dados criados previamente e armazenados em arquivos conhecidos como Bibliotecas. O processo de compilao deve agrupar todas essas partes, ligando as de forma adequada. Esse processo realizado por um mdulo da linguagem de programao conhecido como Linkeditor (Ligador). Terminado o processo de Linkedio (Ligao), gerado o cdigo executvel, um programa autnomo pode ser executvel em outros sistemas de computao, sem a necessidade da presena da linguagem de programao. A compilao deve levar em conta o tipo de CPU na qual o programa ir rodar, pois o cdigo executvel consiste em instrues que sero executadas pela CPU. Algumas linguagens, como Java, conseguem criar cdigos executveis em praticamente qualquer tipo de CPU. Muitas linguagens de programao utilizam o processo de compilao, como, por exemplo, Delphi (Borland), Visual Basic (Microsoft) e C++. 2. Interpretao A interpretao consiste em executar o cdigo-fonte diretamente por meio de um mdulo da linguagem de programao conhecido como Interpretador. Nesse processo, no existe cdigo objeto nem cdigo executvel. Desta forma, existe a necessidade da presena da linguagem de programao no sistema de computao no qual o programa ser executado. Os programas no so autnomos. Um dos problemas da interpretao que em determinados comandos, por exemplo, comandos de repetio de funes, a linguagem vai interpretar o comando tantas vezes quantas ele for repetido, o que a torna mais lenta na execuo dos programas, isso no acontece com os programas compilados. Apesar dessa vantagem, o processo de interpretao utilizado em algumas linguagens de programao em conjunto com a compilao, no para gerar os programas executveis, mas na fase de desenvolvimento, quando o programados desejar executar o cdigo-fonte para detectar problemas, ento a interpretao usada para esse propsito. Algumas linguagens interpretadas so : COBOL, LISP e Pascal. 3. Escolha da linguagem de programao. A escolha da linguagem de programao depende de alguns fatores que dever ser levados em considerao, e abordamos os seguintes: rea de aplicao do programa a ser criado, pois cada linguagem de programao voltada para criao de determinados tipos de aplicao. Complexidade do programa a ser criado e da estrutura dos dados que sero gerados por ele, pois a linguagem pode ajudar a diminuir essa complexidade. Tipo de sistema de computao no qual o programa ser executado, pois existe uma interao entre o cdigo gerado pela linguagem de programao a CPU do sistema. Desempenho desejado, pois isso bastante influenciado pelo tipo de linguagem escolhida. Especializao da equipe de programadores. Quanto mais especializada na linguagem for a equipe, mais eficaz ela ser. Disponibilidade da linguagem de programao.
4. Categorias de linguagens de programao.
Geraes de linguagens de programao. Fonte: Pressman (1995, p.695) As linguagens de programao so dividas em geraes. Mas essas geraes no tem relao somente com a poca em que foram criadas conforme figura a cima, mas tambm com a proximidade que a linguagem utilizada para escrever os comandos tem com a linguagem natural humana. Essa proximidade conhecida como abstrao, pois cada vez mais o programador no precisa se preocupar com detalhes ligados diretamente ao sistema, por exemplo, representar os comandos com zeros e uns.
As linguagens de programao que necessitam de comandos escritos mais prximos da linguagem de mquina (microcdigo formado por zeros e uns) conhecida como uma linguagem de baixo nvel. J uma linguagem que utiliza palavras em idioma normal conhecida como uma linguagem de alto nvel.
As empresas que criam linguagens de programao procuram, a cada novo lanamento, aproximar a linguagem de programao da linguagem natural humana, e com isso facilitar o processo de programao. A seguir so apresentadas algumas linguagens de programao e suas caractersticas principais.
a) Linguagens de primeira gerao
So as linguagens de mais baixo nvel, pois o programador necessita escrever comandos praticamente no nvel da mquina. Inicialmente, os programas eram codificados bit a bit (zeros e uns), mas com tempo, surgiu a Linguagem Assembly que permite o uso de instrues escritas em cdigo hexadecimal, reduzindo o trabalho de programao. Uma caracterstica dessa linguagem que cada comando tem correspondncia direta com um comando em microcdigo da CPU. Essa linguagem usada quando outras, de nvel mais alto, no cumprem requisitos de velocidade de processamento ou utilizao de memria, ou no so suportadas pelo sistema.
b) Linguagens de segunda gerao
So linguagens que apresentam um avano em relao ao Assembly. Os comandos so dados por intermdio de palavras utilizadas no dia a dia (normalmente verbos em ingls). Alguns especialistas no consideram a Assembly uma linguagem de programao, portanto essa gerao marcaria o incio das linguagens de programao.
Essas linguagens foram muito utilizadas serviram de base para as mais modernas. Exemplos de linguagens de segunda gerao :
FORTRAN: reconhecida como a primeira linguagem de programao (os comandos no so escritos em linguagem de mquina). ideal para aplicaes matemticas e de engenharia, mais no adequada para criao de software bsicos, de tempo real e embutidos. COBOL: Primeira linguagem voltada para criao de aplicaes comerciais. Programas criados em COBOL, ainda so muito utilizados, principalmente em empresas que utilizam computadores de grande porte. BASIC: Linguagem desenvolvida para o ensino de programao, que renasceu nos anos 70 com os computadores pessoais. ALGOL: Linguagem voltada para aplicaes cientficas, bastante utilizada na Europa, mas que apresenta compiladores caros. Foi percursora das linguagens de terceira gerao.
c) Linguagens de terceira gerao (linguagens de programao estruturadas ou modernas)
As linguagens de programao de terceira gerao podem ser classificadas em trs categorias: Linguagens de Alto Nvel, Linguagens Orientadas a Objeto e Linguagens Especializadas: Apesar de as categorias todas apresentarem uma caracterstica em comum, seguem, de alguma forma, as tcnicas de Programao Estruturada.
Linguagens de alto nvel de uso geral: So linguagens de programao baseadas no ALGOL, e bastante utilizadas. So exemplos desse tipo de linguagem:
Pascal: primeira linguagem de programao estruturada. Foi criada para ensinar essas tcnicas de programao. uma descendente direta do ALGOL , podendo ser utilizada para criar aplicativos para as reas de engenharia, cientfica e de software bsico.
PL/1 : criada pela IBM, foi a primeira linguagem verdadeiramente de amplo espectro, utilizada tanto para aplicaes cientficas quanto para aplicaes comerciais.
C: originalmente criada para o desenvolvimento de sistemas operacionais e compiladores (o UNIX implementado em C), tambm pode ser usada para criaes de aplicaes comerciais.
Ada: linguagem criada pelo Departamento de Defesa dos Estados Unidos para criao de sistemas de computao de tempo real para uso militar ( embutidos em armamentos ). Semelhante Pascal, tambm utilizada para aplicaes no - militares.
Linguagem Orientadas a Objeto: So linguagens de programao que permitem a implementao dos modelos de anlise e projeto orientados a objeto. Usam todos os conceitos ligados orientao a objeto. So exemplos desse tipo de linguagem:
Smalltalk: linguagem criada para explicar conceitos de orientao a objeto.
C++: linguagem derivada da linguagem C utilizada para uma ampla gama de aplicaes.
Java: linguagem de programao criada pela Sun apresenta a vantagem de poder ser executada em qualquer sistema de computao, no importando a CPU que utilize, caracterstica muito importante para aplicaes voltadas para a internet.
Linguagem de Script (internet): linguagens que melhoram a funcionalidade das pginas de internet. Alguns exemplos so: JavaScript (Netscape), VBScript e Jscript (Microsoft).
Linguagens internet: linguagens que, na maioria dos casos, so utilizadas para criao de pginas de internet dinmicas. Alguns exemplos so: PHP, ASP Active Server Pages ou .Net (Microsoft), JavaServer Pages (Sun), Perl - Practical Extraction and Report Language e Python.
Linguagens Especializadas: Linguagens de programas que apresentam sintaxe dos comandos bastante incomum (em relao a outras linguagens) e so criadas para aplicaes especiais. Exemplos dessas linguagens:
LISP: usada quase que exclusivamente para aplicaes de Inteligncia Artificial ( IA ), como Sistemas Especialistas. Trabalha com traduo e documentao automtica de com a manipulao de smbolos e listas.
PROLOG: tambm utilizada em IA para desenvolvimento de sistemas especialistas. Tambm orientada a objeto.
FORTH: utilizada para desenvolvimento de softwares para microprocessadores.
Linguagens de quarta gerao ( 4GL Fourth Generation Language): At agora so as linguagens que apresentam o maior nvel de abstrao (mais alto nvel). Para conseguir isso, automatizam muitas das tarefas (quanto no todas elas). Podem ser classificadas em trs categorias: linguagens de consulta, geradores de programa, linguagens de prototipao.
Linguagens de consulta: So linguagens de programao declarativas criadas para trabalhar em conjunto com bancos de dados, permitindo que esses dados sejam manipulados. Os comandos dessas linguagens devem ser utilizados dentro do cdigo gerado por outras linguagens que hospedam esses comandos em alguns aspectos, elas no poderiam nem ser consideradas linguagens de programao, pois no traduzem os comandos para linguagem de mquina. O principal exemplo desse tipo de linguagem o SQL ( Structured Language ). A linguagem SQL padronizada pelo ANSI, mas praticamente todos os fabricantes de bancos de dados criam extenses transformando-a em uma linguagem SQL proprietria.
Geradores de programas: So linguagens de programao que permitem que o programador crie programas inteiros usando apenas declaraes baseadas nos modelos gerado pelo projeto do programa. Nesse tipo de linguagem, o trabalho de programao muito pequeno. uma linguagem de programao de nvel muito elevado. Algumas ferramentas CASE (Computer-Aided System Engineering), que so ferramentas que autorizam vrias tarefas na criao de modelos e projetos nos sistemas de software, implementam esse tipo de linguagem.Exemplos de ferramentas CASE so: Rational Rose (IBM), System Architect (Popkin) e ERWin (CA Computer Associates).
Linguagens de prototipao: So linguagens de programao que facilitam a criao da interlace com o usurio, sendo conhecidas como Linguagens Visuais. O programa recebe um conjunto de componentes de interface que so montados para configurar a interface com o usurio. Depois disso, ele se preocupa em programar o que deve ser executado conhecidas como Linguagens orientadas a eventos. Essas linguagens de programao proporcionam a Prototipao, ou seja, permitem que sejam criados esboos visuais do programa final ( inclusive com alguma funcionalidade) para que o usurio identifique problemas de operao, de esttica, etc. Exemplos dessas linguagens de prototipao so Delphi (Borland), Visual Basic e C# (Microsoft).