You are on page 1of 57

A ENGENHARIA DA COMPUTAO

Trabalho avaliativo que tem como objetivo principal avaliar os conhecimentos dos alunos do curso de hardware sobre a engenharia principal que constitui a computao, sob orientao do professor Gustavo.

SO PAULO 2011

RESUMO

A engenharia da computao foi a abordada de forma bem simples nesse trabalho, pois sobre esse assunto existe muito o que se falar. Os principais temas dentro da engenharia foram apresentados de forma simplificada e resumida, infatizando apenas os componentes fundamentais, tanto fisicamente, quanto logicamente. Esse trabalho abordou, em hardware: resistores, capacitores e transistores, que em circuitos eltricos de computadores, esses trs componentes so fundamentais, exercendo funes de resistir correntes extras, estabilizar tenso, amplificar sinal, entre outras. Tambem foi abordado, em software: as linguagens C, C++, C# e Java e os bancos de dados Oracle, MySQL e SQL Server que so linguagem de programao que a maioria dos programadores utiliza na criao de seus software e os principais sistemas gerenciadores de bancos de dados.

SUMRIO

Introduo 1. A engenharia da computao 2. Resistor 2. 1. Resistncia e resistividade 2. 2. Resistor varivel 2. 1. 1. Termistores 2. 3. Cdigo de cores 2. 2. Resistor varivel 2. 4. Estrutura 2. 5. Transdutores 3. Capacitor 3. 1. Histria 3. 2. Funcionamento 3. 3 Capacitncia 3. 4. Aplicaes 3. 5. Identificao de valor 3. 5. 1. Capacitor cermico 3. 6. Capacitores variveis 4. Transistor 4. 1. Histria 4. 2. Funcionamento 4. 2. 1. Caractersticas de um transistor 4. 3. Fabricao 4. 4. Importncia 5. Engenharia de Software 6. Linguagem C 6. 1. Histria 6. 2. Caractersticas do C 6. 3. Tipos de dados 6. 4. Matemtica 6. 5. Estruturas de dados 6. 6. Ferramentas de programao 7. Linguagem C++ 7. 1. Histria 7. 1. 1. Etimologia 7. 1. 2. Trabalhos futuros 7. 2. Caractersticas 7. 2. 1. Filosofia

07 08 08 08 09 10 10 11 12 12 13 13 15 15 16 17 17 17 18 19 19 21 21 23 24 24 25 25 25 26 28 28 29 30 30 31 32 32

7. 2. 2. Biblioteca padro 7. 2. 3. Operadores 7. 2. 4. Objetos 7. 2. 5. Encapsulamento 7. 2. 6. Polimorfismo 7. 2. 6. 1. Esttico 7. 2. 6. 2. Dinmico 7. 2. 7. Tratamento de excees 7. 2. 8. Espao de nomes 7. 2. 9. Incompatibilidade com C 7. 3. Ferramentas 7. 3. 1. Ambientes de desenvolvimento 7. 3. 2. Aplicativos desenvolvidos em C++ 8. Linguagem C# 8. 1. Histria 8. 1. 1. Etimologia 8. 2. Caractersticas 8. 3. Bibliotecas de cdigos 9. Linguagem Java 9. 1. Histria 9. 2. Caractersticas 9. 2. 1. Simplicidade 9. 2. 2. Orientao a objetos 9. 2. 3. Processamento distribudo 9. 2. 4. Multithreading 9. 2. 5. Excees 9. 2. 6. Garbage collector 9. 2. 7. Machine independent 9. 2. 8. Polimorfismo 9. 2. 8. 1. Polimorfismo Universal 9. 2. 8. 2. Paramtrico ou parametrizao 9. 2. 8. 3. Incluso 9. 2. 8. 4. Polimorfismo Ad-Hoc 9. 3. Arquitetura e Ferramentas 9. 3. 1. Ferramentas para desenvolvimento em Java 9. 3. 2. Java e a Internet 10. Banco de Dados Oracle 10. 1. Edies 11. Banco de Dados MySQL 11. 1. Histria 11. 2. Caractersticas 12. Banco de Dados SQL Server 12. 1. Produtivo

32 33 33 34 34 34 35 35 36 37 37 38 38 40 41 41 41 41 43 43 43 45 45 45 45 46 46 46 46 47 47 47 48 48 49 50 51 51 52 52 53 53 53

12. 2. Inteligente Consideraes Finais

55 56

INTRODUO

O tema abordado nesse trabalho um tema de interesse e de necessidade a todos os estudantes e profissionais na rea de informtica, pois sem conhecimento da ferramenta em que se trabalha, impossvel ter total certeza do resultado final do projeto a ser realizado dentro da computao. Antes de escolher a profisso na rea de informtica, fundamental para o futuro profissional conhecer como funciona a futura ferramenta de trabalho, qual componente faz o que, qual falta de componente causa determinado problema, como deve ser estruturado um software e entre outros tpicos. O principal foco dessa pesquisa oferecer informaes e conhecimentos sobre a estrutura que envolve a computao, tanto a parte fsica (circuitos) quando a parte lgica (softwares), quais os componentes principais para a arquitetura da computao, ou como diz o titulo desse trabalho, os componentes da engenharia da computao. Nesse trabalho so apresentadas as principais e fundamentais partes dentro da computao, onde mostra como cada componentes falado tem um papel fundamental para a estrutura de computadores.

1. A engenharia da computao
A engenharia da computao a cincia que estrutura as partes da computao. Essa engenharia responsvel por criar e definir o melhor caminho para a organizao e estrutura de um computador, nessa engenharia se estuda como um computador montado, desde os seus circuitos at os sistemas operacionais, e ela tambm responsvel pela criao de futuras e melhoradas tecnologias. A engenharia da computao composta por diversas etapas, onde se projeta e, posteriormente, se cria hardware (partes fsicas), que a parti desses hardwares, se projeta e cria softwares equivalentes.

2. Resistor
Resistores so componentes que tm por finalidade oferecer uma oposio passagem de corrente eltrica, atravs de seu material. A essa oposio damos o nome de resistncia eltrica, que possui como unidade ohm. Causam uma queda de tenso em alguma parte de um circuito eltrico, porm jamais causam quedas de corrente eltrica. Isso significa que a corrente eltrica que entra em um terminal do resistor ser exatamente a mesma que sai pelo outro terminal, porm h uma queda de tenso. Utilizando-se disso, possvel usar os resistores para controlar a corrente eltrica sobre os componentes desejados. Alguns resistores so longos e finos, com o material resistivo colocado ao centro, e um terminal de metal ligado em cada extremidade. Este tipo de encapsulamento chamado de encapsulamento axial. A fotografia a direita mostra os resistores em uma tira geralmente usados para a pr-formatao dos terminais. Resistores usados em computadores e outros dispositivos so tipicamente muito menores, freqentemente so utilizadas tecnologia de montagem superficial (Surface-mount technology), ou SMT, esse tipo de resistor no tem "perna" de metal (terminal). Resistores de maiores potncias so produzidos mais robustos para dissipar calor de maneira mais eficiente, mas eles seguem basicamente a mesma estrutura.

2. 1. Resistncia e resistividade
Os resistores so utilizados como parte de um circuito elctrico e incorporados dentro de dispositivos microelectrnicos ou semicondutores. A medio crtica de um resistor a resistncia, que serve como relao de Tenso para corrente medida em ohms, uma unidade SI. Um componente tem uma resistncia de 1 ohm se uma tenso de 1 volt no componente fizer com que percorra, pelo mesmo, uma corrente com a intensidade de 1 ampre, o que equivalente circulao de 1 coulomb de carga eltrica, aproximadamente 6.241506 x 1018 eltrons por segundo. Qualquer objeto fsico, de qualquer material um tipo de resistor. A maioria dos metais so materiais condutores, e ope baixa resistncia ao fluxo de corrente eltrica. O corpo humano, um pedao de plstico, ou mesmo o vcuo tm uma resistncia que pode ser mensurada. Materiais que possuem resistncia muito alta so chamados isolantes ou dieltricos. A relao entre tenso, corrente e resistncia, atravs de um objeto dada por uma simples equao, Lei de Ohm:

Onde V (ou U ) a diferena de potencial em volts, I a corrente que circula atravs de um objeto em ampres, e R a resistncia em ohms. Se V e I tiverem uma relao linearisto , R

constanteao longo de uma gama de valores, o material do objeto chamado de hmico. Um resistor ideal tem uma resistncia fixa ao longo de todas as frequncias e amplitudes de tenso e corrente. Materiais supercondutores em temperaturas muito baixas tm resistncia zero. Isolantes (tais como ar, diamante, ou outros materiais no-condutores) podem ter resistncia extremamente alta (mas no infinita), mas falham e admitem que ocorra um grande fluxo de corrente sob tenses suficientemente altas. A resistncia de um componente pode ser calculada pelas suas caractersticas fsicas. A resistncia proporcional ao comprimento do resistor e resistividade do material (uma propriedade do material), e inversamente proporcional rea da seco transversal. A equao para determinar a resistncia de uma seo do material :

Onde a resistividade do material, o comprimento, e a rea da seco transversal. Isso pode ser estendido a uma integral para reas mais complexas, mas essa frmula simples aplicvel a fios cilndricos e maioria dos condutores comuns. Esse valor est sujeito a mudanas em altas freqncias devido ao efeito skin, que diminui a superfcie disponvel da rea. Resistores padres so vendidos com capacidades variando desde uns poucos miliohms at cerca de um gigaohm; apenas uma srie limitada de valores, chamados valores preferenciais, esto disponveis. Na prtica, o componente discreto vendido como "resistor" no um resistor perfeito como definido acima. Resistores so freqentemente marcados com sua tolerncia (a variao mxima esperada da resistncia marcada). Em resistores codificados com cores, uma faixa mais cinza direita demonstra uma tolerncia de 10%, uma faixa dourada significa 5% de tolerncia, uma faixa vermelha marca 2% e uma faixa marrom significa 1% de tolerncia. Resistores com tolerncia menores, tambm chamados de resistores de preciso, tambm esto disponveis. Um resistor tem uma d.d.p. e corrente mximas de trabalho, acima das quais a resistncia pode mudar (drasticamente, em alguns casos) ou o resistor pode se danificar fisicamente (queimar, por exemplo). Embora alguns resistores tenham as taxas de d.d.p. e corrente especificadas, a maioria deles so taxados em funo de sua potncia mxima, que determinada pelo tamanho fsico. As taxas mais comuns para resistores de composio de carvo e filme de metal so 1/8 watt, 1/4 watt e 1/2 watt. Resistores de filme de metal so mais estveis que os de carvo quanto a mudanas de temperatura e a idade. Resistores maiores so capazes de dissipar mais calor por causa de sua rea de superfcie maior. Resistores dos tipos wire-wound e sand-filled so usados quando se necessita de taxas grandes de potncia, como 20 Watts. Alm disso, todos os resistores reais tambm introduzem alguma indutncia e capacitncia, que mudam o comportamento dinmico do resistor da equao ideal.

2. 2. Resistor varivel
O resistor varivel um resistor cujos valores podem ser ajustados por um movimento mecnico, por exemplo, rodando manualmente. Os resistores variveis podem ser de volta simples ou de mltiplas voltas com um elemento helicoidal. Alguns tm um display mecnico para contar as voltas. Reostato um resistor varivel com dois terminais, sendo um fixo e o outro deslizante. Geralmente so utilizados com altas correntes. Potencimetro um tipo de resistor varivel comum, sendo comumente utilizado para controlar o volume em amplificadores de udio.

Metal xido Varistor ou M.O.V. / Varistores um tipo especial de resistor que tem dois valores de resistncia muito diferentes, um valor muito alto em baixas voltagens (abaixo de uma voltagem especfica), e outro valor baixo de resistncia se submetido a altas voltagens (acima da voltagem especfica do varistor). Ele usado geralmente para proteo contra curtos-circuitos em extenses ou pra-raios usados nos postes de ruas, ou como "trava" em circuitos eletromotores.

2. 2. 1. Termistores
Do resistncias que variam o seu valor de acordo com a temperatura a que esto submetidas. A relao geralmente directa, porque os metais usados tm uma coeficiente de temperatura positivo, ou seja se a temperatura sobe, a resistncia tambm sobe. Os metais mais usado so a platina, da as desisgnao Pt100 e Pt1000(100 porque temperatura 0 C, tm uma resistncia de 100ohm, 1000 porque temperatura 0 C, tm uma resistncia de 1000ohm) e o Nquel (Ni100). Os termistores PTC e NTC, so um caso particular, visto que em vez de metais usam semicondutores, por isso alguns autores no os consideram resistores. PTC (Positive Temperature Coefficient) um resistor dependente de temperatura com coeficiente de temperatura positivo. Quando a temperatura se eleva, a resistncia do PTC aumenta. PTCs so freqentemente encontrados em televisores, em srie com a bobina desmagnetizadora, onde so usados para prover uma curta rajada de corrente na bobina quando o aparelho ligado. Uma verso especializada de PTC o polyswitch que age como um fusvel auto-rearmvel. NTC (Negative Temperature Coefficient) Tambm um resistor dependente da temperatura, mas com coeficiente negativo. Quando a temperatura sobe, sua resistncia cai. NTC so freqentemente usados em detectores simples de temperaturas, e instrumentos de medidas. LDR (Light Dependent Resistor) uma resistncia que varia, de acordo com a intensidade luminosa incidida. A relao geralmente inversa, ou seja a resistncia diminui com o aumento da intensidade luminosa. Muito usado em sensores de luminosidade ou crespusculares.

2. 3. Cdigo de cores
PRETO MARROM VERMELHO LARANJA AMARELO VERDE AZUL VIOLETA CINZA BRANCO

A primeira faixa em um resistor interpretada como o primeiro digito do valor hmico da resistncia do resistor. Para o resistor mostrado abaixo, a primeira faixa amarela, assim o primeiro dgito 4: A segunda faixa d o segundo dgito. Essa uma faixa violeta, ento o segundo dgito 7. A terceira faixa chamada de multiplicador e no interpretada do mesmo modo. O nmero associado cor do multiplicador nos informa quantos "zeros" devem ser colocados aps os dgitos que j temos. Aqui, uma faixa vermelha nos diz que devemos acrescentar 2 zeros. O valor hmico desse resistor ento 4 7 00 ohms, quer dizer, 4 700 ou 4,7 k. Verifique novamente, nosso exemplo, para confirmar que voc entendeu realmente o cdigo de cores dados pelas trs primeiras faixas coloridas no corpo do resistor. A quarta faixa (se existir), um pouco mais afastada das outras trs, a faixa de tolerncia. Ela nos informa a preciso do valor real da resistncia em relao ao valor lido pelo cdigo de

10

cores. Isso expresso em termos de porcentagem. A maioria dos resistores obtidos nas lojas apresentam uma faixa de cor prata, indicando que o valor real da resistncia est dentro da tolerncia dos 10% do valor nominal. A codificao em cores, para a tolerncia a seguinte:
COR TOLERNCIA MARROM + ou 1% VERMELHO + ou 2% OURO + ou 5% PRATA + ou 10%

Nosso resistor apresenta uma quarta faixa de cor OURO. Isso significa que o valor nominal que encontramos 4 700 tem uma tolerncia de 5% para mais ou para menos. Ora, 5% de 4 700 so 235 ento, o valor real de nosso resistor pode ser qualquer um dentro da seguinte faixa de valores: 4 700 - 235= 4 465 e 4 700+ 235= 4 935. A ausncia da quarta faixa indica uma tolerncia de 20%.

2. 4. Estrutura
A ilustrao mostra detalhes construtivos de um resistor de filme de carbono (carvo):

Durante a construo, uma pelcula fina de carbono (filme) depositada sobre um pequeno tubo de cermica. O filme resistivo enrolado em hlice por fora do tubinho at que a resistncia entre os dois extremos fique to prxima quanto possvel do valor que se deseja. So acrescentados terminais (um em forma de tampa e outro em forma de fio) em cada extremo e, a seguir, o resistor recoberto com uma camada isolante. A etapa final pintar faixas coloridas transversais para indicar o valor da resistncia.

O "retngulo" com terminais uma representao simblica para os resistores de valores fixos tanto na Europa como no Reino Unido; a representao em "linha quebrada" (zig-zag) usada nas Amricas e Japo

2. 5. Transdutores

10

11

Resistores especiais tambm so usados como transdutores em circuitos sensores. Transdutores so componentes eletrnicos que efetuam converso de energia de uma modalidade para outra onde, uma delas, necessariamente energia eltrica. Microfones, interruptores e Resistores Dependentes da Luz ou LRDs, so exemplos de transdutores de entrada. Alto-falantes, lmpadas de filamento, rels, "buzzers" e tambm os LEDs, so exemplos de transdutores de sada. No caso dos LRDs a quantidade de luz em suas superfcies resultam na alterao dos valores hmicos de suas resistncias. Como se ver (Teoria III), um transdutor de entrada freqentemente associado a um resistor para fazer um circuito denominado divisor de tenso. Nesse caso, a tenso recolhida sobre esse divisor de tenso ser um "sinal de tenso" que reflete as mudanas de iluminao sobre o LDR. Em outros circuitos, os resistores podem ser usados para dirigir fraes da corrente eltrica para partes particulares do circuito, assim como podem ser usados para controlar o "ganho de tenso" em amplificadores. Resistores tambm so usados em associaes com capacitores no intuito de alterar sua "constante de tempo" (ajuste do tempo de carga ou descarga). A maioria dos circuitos requerem a presena de resistores para seus corretos funcionamento. Assim sendo, preciso saber alguns detalhes sobre diferentes tipos de resistores e como fazer uma boa escolha dos resistores disponveis (valores adequados, seja em k u M para uma particular , o ) aplicao.

3. Capacitor
Capacitor (ou condensador) um componente eletrnico que armazena energia eltrica em um campo eltrico existente em seu interior. Apesar de no conduzir corrente eltrica, a corrente que ele armazena ser descarregada assim que no houver mais resistncia entre seus terminais, podendo assim, manter uma corrente alternada estabilizada, como em um sinal de udio ou filtro de baixa.

3. 1. Histria
A Jarra de Leyden foi a primeira forma de capacitor. Fora inventada na Universidade de Leyden, na Holanda por Pieter van Musschenbroek. Ela era uma jarra de vidro coberta interna e externamente, mas sem se tocarem, com metal. A cobertura interna era conectada a uma vareta que saia pelo gargalo da jarra e terminava numa bola de metal, desta forma o vidro da jarra comportava-se como o dieltrico armazenador das cargas eltricas e os metais das paredes interna e externa como as armaduras deste capacitor primitivo.

3. 2. Funcionamento

11

12

Os capacitores so formados por dois condutores, denominados armaduras, as armaduras esto sempre separadas por substncias dieltricas ou isolantes (ar, gua pura, leo). Um capacitor funciona da seguinte forma: em um circuito eltrico, sempre existir a fonte de energia (uma pilha por exemplo) e o objeto que receber a corrente eltrica (uma lmpada por exemplo), e dentro de circuitos eltricos, por existe os capacitores que funcionam como ajudantes no enviou da corrente eltrica, ou seja, quando a carga eltrica liberada excessiva, o capacitor tem a funo de armazenar a energia extra impedindo que o objeto queime ou estoure. Para explicar melhor, uma maneira de visualizar a ao do capacitor imagin-lo como uma torre de gua conectada a uma tubulao. Uma torre de gua "armazena" presso de gua - quando as bombas do sistema de gua enviam mais gua do que a cidade necessita, o excesso armazenado na torre de gua, ento, nos momentos de maior demanda, o excesso de gua flui para fora da torre para manter a presso alta. Um capacitor armazena eltrons da mesma forma, e pode liber-los mais tarde. Em um circuito eletrnico, um capacitor indicado da seguinte forma:

Quando voc conecta um capacitor a uma pilha, isto que acontece:

a placa do capacitor conectada ao terminal negativo da pilha aceita os eltrons que a pilha produz a placa do capacitor conectada ao terminal positivo da pilha perde os eltrons para a pilha

Depois de carregado, o capacitor possui a mesma tenso que a pilha (1,5 volts na pilha significa 1,5 volts no capacitor). Em um capacitor pequeno, a capacidade pequena. Porm capacitores grandes podem armazenar uma carga considervel. Voc poder encontrar capacitores do tamanho de latas de refrigerante, por exemplo, que armazenam carga suficiente para acender o bulbo de uma lmpada de flash por um minuto ou mais. Quando voc v relmpagos no cu, o que voc est vendo um imenso capacitor onde uma placa a nuvem e a outra placa o solo, e o relmpago a liberao da carga entre essas duas "placas". Digamos que voc conecte um capacitor desta maneira:

12

13

Voc tem uma pilha, uma lmpada e um capacitor. Se o capacitor for grande, voc notar que, quando conecta a pilha, a lmpada se acender medida que a corrente flui da pilha para o capacitor e o carrega. A lmpada diminuir sua luminosidade progressivamente at finalmente apagar, assim que o capacitor atingir sua capacidade. Ento voc poder remover a pilha e substitu-la por um fio eltrico. A corrente fluir de uma placa do capacitor para a outra. A lmpada acender e ento comear a diminuir cada vez mais sua luminosidade, at apagar assim que o capacitor estiver totalmente descarregado (o mesmo nmero de eltrons nas duas placas).

3. 3 Capacitncia
Capacitncia capacidade que um capacitor tem de armazenar corrente eltrica em um campo eletrosttico. A capacitncia medida pelo quociente de cargas (Q) armazenadas pela diferena de potencial ou tenso (V) que existe entre as placas:

A unidade que medida a capacitncia o farad. Pelo Sistema Internacional de Unidades (SI), um capacitor tem a capacitncia de um farad (F) quando um coulomb de carga causa uma diferena de potencial de um volt (V) entre as placas. O farad considerado muito grande para circuitos prticos, sendo assim, necessrio usar os valores de microfarads (F), nanofarads (nF) ou picofarads (pF). A capacitncia de um capacitor de placas paralelas constitudo de dois eletrodos planos idnticos de rea A separados distncia constante d aproximadamente igual a:

Onde: C a capacitncia em faraday

13

14

0 a permissividade eletrosttica do vcuo ou espao livre r a constante dieltrica ou permissividade relativa do isolante utilizado.

3. 3. 1. Circuitos eltricos
Os eltrons no podem passar diretamente atravs do dieltrico de uma placa do capacitor para a outra. Quando uma tenso aplicada a um capacitor atravs de um circuito externo, a corrente flui para uma das placas, carregando-a, enquanto flui da outra placa, carregando-a, inversamente. Em outras palavras, quando a Tenso que flui por um capacitor muda, o capacitor ser carregado ou descarregado. A frmula corrente dada por:

Onde I a corrente fluindo na direo convencional, e dV/dt a derivada da tenso, em relao ao tempo. No caso de uma tenso contnua (DC ou tambm designada CC) logo um equilbrio encontrado, onde a carga das placas correspondem tenso aplicada pela relao Q=CV, e nenhuma corrente mais poder fluir pelo circuito. Logo a corrente contnua (DC) no pode passar. Entretanto, correntes alternadas (AC) podem: cada mudana de tenso ocasiona carga ou descarga do capacitor, permitindo desta forma que a corrente flua. Propriedades importantes dos capacitores, alm de sua capacitncia, so a mxima tenso de trabalho e a quantidade de energia perdida no dieltrico. Para capacitores de alta potncia a corrente mxima e a Resistncia em Srie Equivalente (ESR) so consideraes posteriores. Um ESR tpico para a maioria dos capacitores est entre 0,0001 ohm e 0,01 ohm, valores baixos preferidos para aplicaes de correntes altas. J que capacitores tm ESRs to baixos, eles tm a capacidade de entregar correntes enormes em circuitos curtos, o que pode ser perigoso. Por segurana, todos os capacitores grandes deveriam ser descarregados antes do manuseio. Isso feito colocando-se um resistor pequeno de 1 ohm a 10 ohm nos terminais, isso , criando um circuito entre os terminais, passando pelo resistor. Capacitores tambm podem ser fabricados em aparelhos de circuitos integrados de semicondutores, usando linhas metlicas e isolantes num substrato. Tais capacitores so usados para armazenar sinais analgicos em filtros chaveados por capacitores, e para armazenar dados digitais em memria dinmica de acesso aleatria (DRAM). Diferentemente de capacitores discretos, porm, na maior parte do processo de fabricao, tolerncias precisas no so possveis (15 % a 20 % considerado bom).

3. 4. Aplicaes
Os capacitores so usados nas fontes de alimentao, nas placas me e em inmeros outros componentes. A funo mais comum retificar e estabilizar a corrente eltrica, evitando que variaes possam danificar qualquer dispositivo. Capacitores tambm so usados na correo de fator de potncia. justamente por causa dos capacitores que nunca devemos tocar nos

14

15

componentes internos da fonte de alimentao sem os cuidados adequados. Voc pode levar um choque considervel mesmo que a fonte esteja desligada da tomada. Os capacitores so tambm a base da memria RAM, onde para cada bit de dados temos um capacitor e um transstor. O transstor se encarrega de ler e gravar o bit, enquanto o capacitor armazena-o. Quando o capacitor est descarregado temos um bit 0 e quando est carregado temos um bit 1. Como no caso da memria o capacitor mantm sua carga por apenas alguns milsimos de segundo, os dados precisam ser reescritos continuamente. por isso que a memria RAM voltil. A diferena entre um capacitor e uma pilha que o capacitor pode descarregar toda sua carga em uma pequena frao de segundo, j uma pilha demoraria alguns minutos para descarregarse. por isso que o flash eletrnico em uma cmera utiliza um capacitor, a pilha carrega o capacitor do flash durante vrios segundos, e ento o capacitor descarrega toda a carga no bulbo do flash quase que instantaneamente. Isto pode tornar um capacitor grande e carregado extremamente perigoso, os flashes e as TVs possuem advertncias sobre abri-los por este motivo. Eles possuem grandes capacitores que poderiam mat-lo com a carga que contm. Os capacitores so utilizados de vrias maneiras em circuitos eletrnicos: Algumas vezes, os capacitores so utilizados para armazenar carga para utilizao rpida. isso que o flash faz. Os grandes lasers tambm utilizam esta tcnica para produzir flashes muito brilhantes e instantneos; Os capacitores tambm podem eliminar ondulaes. Se uma linha que conduz corrente contnua (CC) possui ondulaes e picos, um grande capacitor pode uniformizar a tenso absorvendo os picos e preenchendo os vales; Um capacitor pode bloquear a CC. Se voc conectar um pequeno capacitor a uma pilha, ento no fluir corrente entre os plos da pilha assim que o capacitor estiver carregado (o que instantneo se o capacitor pequeno). Entretanto, o sinal de corrente alternada (CA) flui atravs do capacitor sem qualquer impedimento. Isto ocorre porque o capacitor ir carregar e descarregar medida que a corrente alternada flutua, fazendo parecer que a corrente alternada est fluindo; Uma das utilizaes mais comuns dos capacitores combin-los com indutores para criar osciladores.

3. 5. Identificao de valor 3. 5. 1. Capacitor cermico


Os capacitores cermicos apresentam impressos no prprio corpo um conjunto de trs algarismos e uma letra. Para se obter o valor do capacitor os dois primeiros algarismos representam os dois primeiros dgitos do valor do capacitor, e o terceiro algarismo (algarismo multiplicador) representa o nmero de zeros direita. A letra representa a tolerncia do capacitor (a qual pode ser omitida), que a faixa de valores em que a capacitncia variar. Para os capacitores cermicos at 10pF esta expressa em pF. Para os acima de 10pF expressa em porcentagem. Por exemplo um capacitor com 224F impresso no prprio corpo, possuir uma capacitncia de 220000pF com uma tolerncia de +/- 1% (seu valor pode ser um ponto percentual mais ou menos desse valor).

15

16

3. 5. 2. Capacitor de polister
Para a identificao dos valores do capacitor de polister usado um conjunto de 7 faixas coloridas (conforme tabela), embora seja um mtodo em desuso pelos fabricantes, no qual cada faixa representar respectivamente:primeiro algarismo,segundo algarismo, algarismo multiplicador, tolerncia e tenso.O valor obtido em pF.

Tabela para identificao dos valores do capacitor de polister

3. 6. Capacitores variveis
H dois tipos distintos de capacitores variveis, cujas capacitncias podem ser mudadas intencionalmente e repetidamente ao longo da vida do dispositivo: Aqueles que usam uma construo mecnica para mudar a distncia entre as placas, ou a superfcie da rea das placas superpostas. Esses dispositivos so chamados capacitores de sintonia, ou simplesmente "capacitores variveis", e so usados em equipamentos de telecomunicao para sintonia e controle de frequncias.Neste tipo de capacitor o elemento dieltrico o prprio ar. Aqueles que usam o fato de que a espessura da camada de depleo de um diodo varia com a tenso da corrente contnua atravessando o diodo. Esses diodos so chamados de diodos de capacitncia varivel, varactores ou varicaps. Qualquer diodo exibe esse efeito, mas dispositivos vendidos especificamente como varactores tm uma rea de juno grande e um perfil de dopagem especificamente dimensionado para maximizar a capacitncia.

16

17

Em um capacitor microfone (comumente conhecido como um microfone condensador), o diafragma age como uma placa do capacitor, e as vibraes produzem alteraes na distncia entre o diafragma e uma placa fixa, alterando a tenso entre as placas.

Capacitor varivel de sintonia de rdio

4. Transistor
O transistor um componente eletrnico que comeou a popularizar-se na dcada de 1950, tendo sido o principal responsvel pela revoluo da eletrnica na dcada de 1960. O termo vem de transfer resistor (resistor/resistncia de transferncia), como era conhecido pelos seus inventores. Os transistores so principalmente usados como amplificadores e interruptores de sinais eltricos. A corrente eltrica que passa entre coletor e emissor do transistor varia dentro de determinados parmetros pr-estabelecidos pelo projetista do circuito eletrnico. Esta variao feita atravs da variao de corrente num dos terminais chamados base, o que, conseqentemente, ocasiona o processo de amplificao de sinal. Entende-se por "amplificar" o procedimento de tornar um sinal eltrico mais fraco num mais forte. Um sinal eltrico de baixa intensidade, como os sinais gerados por um microfone, injetado num circuito eletrnico (transistorizado por exemplo), cuja funo principal transformar este sinal fraco gerado pelo microfone em sinais eltricos com as mesmas caractersticas, mas com potncia suficiente para excitar os alto-falantes. A este processo todo d-se o nome de ganho de sinal.

4. 1. Histria
Durante a dcada de 1940 e incio da de 1950, a maior parte da indstria continuou trabalhando no aperfeioamento das vlvulas, obtendo modelos menores e mais confiveis. Porm, vrios pesquisadores, comearam a procurar alternativas menos problemticas. Vrias dessas pesquisas tinham como objetivo o estudo de novos materiais, tanto condutores quanto isolantes. Os pesquisadores comearam ento a descobrir que alguns materiais no se enquadravam nem em um grupo nem em outro, pois, de acordo com a circunstncia, podiam atuar tanto como isolantes quanto como condutores, formando uma espcie de grupo intermedirio que foi logo apelidado de grupo dos semicondutores.

17

18

Haviam encontrado a chave para desenvolver o transstor. O primeiro prottipo surgiu nos Laboratrios da Bell Telephone por Bardeen e Brattain em 16 de dezembro de 1947 (Era consistindo em um pequeno bloco de germnio (que na poca era junto com o silcio o semicondutor mais pesquisado) e trs filamentos de ouro. Um filamento era o plo positivo, o outro, o plo negativo, enquanto o terceiro tinha a funo de controle.) e foi inicialmente demonstrado em 23 de Dezembro de 1948, por John Bardeen, Walter Houser Brattain e William Bradford Shockley, que foram laureados com o Nobel de Fsica em 1956. Ironicamente, eles pretendiam fabricar um transistor de efeito de campo (FET) idealizado por Julius Edgar Lilienfeld antes de 1925, mas acabaram por descobrir uma amplificao da corrente no ponto de contato do transistor. Isto evoluiu posteriormente para converter-se no transistor de juno bipolar (BJT). O objetivo do projeto era criar um dispositivo compacto e barato para substituir as vlvulas termoinicas usadas nos sistemas telefnicos da poca. Os transistores bipolares passaram, ento, a ser incorporados a diversas aplicaes, tais como aparelhos auditivos, seguidos rapidamente por rdios transistorizados. Mas a indstria norteamericana no adotou imediatamente o transistor nos equipamentos eletrnicos de consumo, preferindo continuar a usar as vlvulas termoinicas, cuja tecnologia era amplamente dominada. Foi por meio de produtos japoneses, notadamente os rdios portteis fabricados pela Sony, que o transistor passou a ser adotado em escala mundial. No houve muitas mudanas at ento. A grande vantagem dos transistores em relao s vlvulas foi demonstrada em 1958, quando Jack Kilby, da Texas Instruments, desenvolveu o primeiro circuito integrado, consistindo de um transistor, trs resistores e um capacitor, implementando um oscilador simples. A partir da, via-se a possibilidade de criao de circuitos mais complexos, utilizando integrao de componentes. Isto marcou uma transio na histria dos transistores, que deixaram de ser vistos como substitutos das vlvulas e passaram a ser encarados como dispositivos que possibilitam a criao de circuitos complexos, integrados. O primeiro transstor era muito grande, mas no demorou muito para que esse modelo inicial fosse aperfeioado. Durante a dcada de 1950, o transstor foi aperfeioado e passou a gradualmente dominar a indstria, substituindo rapidamente as problemticas vlvulas. Os modelos foram diminuindo de tamanho, caindo de preo e tornando-se mais rpidos. Alguns transstores da poca podiam operar a at 100 MHz. Claro que essa era a freqncia que podia ser alcanada por um transstor sozinho, nos computadores da poca, a freqncia de operao era muito menor, j que em cada ciclo de processamento o sinal precisa passar por vrios transstores. Mas, o grande salto foi a substituio do germnio pelo silcio. Isso permitiu miniaturizar ainda mais os transstores e baixar seu custo de produo. Os primeiros transstores de juno comerciais (j similares aos atuais) foram produzidos a partir de 1960 pela Crystalonics, decretando o final da era das vlvulas.

18

19

O primeiro transistor

4. 2. Funcionamento
No transistor de juno bipolar ou TJB (BJT Bipolar Junction Transistor na terminologia inglesa), o controle da corrente coletor-emissor feito injetando corrente na base. O efeito transistor ocorre quando a juno coletor-base polarizada reversamente e a juno base-emissor polarizada diretamente. Uma pequena corrente de base suficiente para estabelecer uma corrente entre os terminais de coletor-emissor. Esta corrente ser to maior quanto maior for a corrente de base, de acordo com o ganho.

4. 2. 1. Caractersticas de um transistor
O fator de multiplicao da corrente na base (iB), mais conhecido por Beta do transistor ou por hfe, que dado pela expresso iC = iB x iC: corrente de coletor iB: corrente de base B: beta (ganho de corrente de emissor)

Configuraes bsicas de um transistor:

19

20

Existem trs configuraes bsicas (BC, CC e EC), cada uma com suas vantagens e desvantagens. Base comum (BC) Baixa impedncia(Z) de entrada. Alta impedncia(Z) de sada. No h defasagem entre o sinal de sada e o de entrada. Amplificao de corrente igual a um. Coletor comum (CC) Alta impedncia(Z) de entrada. Baixa impedncia(Z) de sada. No h defasagem entre o sinal de sada e o de entrada. Amplificao de tenso igual a um. Emissor comum (EC) Mdia impedncia(Z) de entrada. Alta impedncia(Z) de sada. Defasagem entre o sinal de sada e o de entrada de 180. Pode amplificar tenso e corrente, at centenas de vezes. Os transistores possuem diversas caractersticas. Seguem alguns exemplos dos parmetros mais comuns que podero ser consultadas nos datasheets dos fabricantes: Tipo: o nome do transistor. Pol: polarizao; negativa quer dizer NPN e positiva significa PNP. VCEO: tenso entre coletor e emissor com a base aberta. VCER: tenso entre coletor e emissor com resistor no emissor. IC: corrente mxima do coletor. PTOT: a mxima potncia que o transistor pode dissipar

20

21

Hfe: ganho (beta). Ft: freqncia mxima. Encapsulamento: a maneira como o fabricante encapsulou o transistor nos fornece a identificao dos terminais. Existem tambm outros tipos de transistores, notadamente os de efeito de campo (transistores FET, de Field Effect Transistor); neste caso, o controle da corrente feito por tenso aplicada porta.

4. 3. Fabricao

Smbolos dos transistores bipolares Os materiais utilizados na fabricao do transistor so principalmente o Silcio (Si), o Germnio (Ge), o Glio (Ga) e alguns xidos. Na natureza, o silcio um material isolante eltrico, devido conformao das ligaes eletrnicas de seus tomos, gerando uma rede eletrnica altamente estvel. Atualmente, o transistor de germnio no mais usado, tendo sido substitudo pelo de silcio, que possui caractersticas muito melhores. O silcio purificado e passa por um processo que forma uma estrutura cristalina em seus tomos. O material cortado em finos discos, que a seguir vo para um processo chamado de dopagem, onde so introduzidas quantidades rigorosamente controladas de materiais selecionados (conhecidos como impurezas) que transformam a estrutura eletrnica, introduzindo-se entre as ligaes dos tomos de silcio. O Silcio realiza ligaes covalentes de quatro eltrons. Quando adicionamos uma impureza com 3 eltrons na ltima camada, faltar um eltron na ligao covalente, formando os buracos e caracterizando a pastilha como pastilha P. Quando adicionamos uma impureza com 5 eltrons na ltima camada, vai sobrar um eltron na ligao covalente com o silcio. Esses eltrons livres tm pouca interao com seu tomo, ento qualquer energia fornecida o faz sair, sendo assim um eltron livre (assim se forma a pastilha N, que tem esse nome por ter maior nmero de eltrons livres). A pastilha P tem menos eltrons livres e mais "buracos" e a Pastilha N tem mais eltrons livres que buracos. No podemos dizer que a pastilha P positiva nem que a pastilha N negativa, porque a soma total de eltrons igual soma total de prtons. Quando unimos a pastilha P e a pastilha N, os eltrons livres em excesso na pastilha N migram para a pastilha P e os buracos da pastilha P migram para a pastilha N. Deste modo a pastilha P fica negativa e a pastilha N fica positiva. Isto o diodo.

21

22

O transistor montado justapondo-se uma camada P, uma N e outra P (unindo-se dois diodos), criando-se um transistor do tipo PNP. O transistor do tipo NPN obtido de modo similar. A camada do centro denominada base, e as outras duas so o emissor e o coletor. No smbolo do componente, o emissor indicado por uma seta, que aponta para dentro do transistor se o componente for PNP, ou para fora, se for NPN.

4. 4. Importncia
O transistor considerado por muitos uma das maiores descobertas ou invenes da histria moderna, tendo tornado possvel a revoluo dos computadores e equipamentos eletrnicos. A chave da importncia do transistor na sociedade moderna sua possibilidade de ser produzido em enormes quantidades usando tcnicas simples, resultando preos irrisrios. conveniente salientar que praticamente impossvel serem encontrados circuitos integrados que no possuam, internamente, centenas, milhares ou mesmo milhes de transistores, juntamente com outros componentes como resistncias e condensadores. Por exemplo, o microprocessador Cell do console Playstation 3 tem aproximadamente 234 milhes de transistores, usando uma arquitetura de fabricao de 45 nanmetros, ou seja, a porta de controle de cada transistor tem apenas 45 milionsimos de um milmetro. Seu baixo custo permitiu que se transformasse num componente quase universal para tarefas no-mecnicas. Visto que um dispositivo comum, como um refrigerador, usaria um dispositivo mecnico para o controle, hoje frequente e muito mais barato usar um microprocessador contendo alguns milhes de transistores e um programa de computador apropriado para realizar a mesma tarefa. Os transistores, hoje em dia, tm substitudo quase todos os dispositivos eletromecnicos, a maioria dos sistemas de controle, e aparecem em grandes quantidades em tudo que envolva eletrnica, desde os computadores aos carros. Seu custo tem sido crucial no crescente movimento para digitalizar toda a informao. Com os computadores transistorizados a oferecer a habilidade de encontrar e ordenar rapidamente informaes digitais, mais e mais esforos foram postos em tornar toda a informao digital. Hoje, quase todos os meios na sociedade moderna so fornecidos em formato digital, convertidos e apresentados por computadores. Formas analgicas comuns de informao, tais como a televiso ou os jornais, gastam a maioria do seu tempo com informao digital, sendo convertida no formato tradicional apenas numa pequena frao de tempo.

5. Engenharia de Software
Engenharia de software denomina o planejamento, a estruturao, a criao e o aperfeioamento e manuteno de software com custo e prazo estimados, essa disciplina que aborda a construo de software complexo - com muitas partes interconectadas e diferentes verses - por uma equipe de analistas, projetistas, programadores, gerentes, "testadores", etc. A engenharia de software tem por objetivos a aplicao de teoria, modelos, formalismos e tcnicas e ferramentas da cincia da computao e reas afins para a produo (ou desenvolvimento) sistemtica de software.

22

23

Associado ao desenvolvimento preciso tambm aplicar mtodos, tcnicas e ferramentas para o gerenciamento do processo de produo. Isto envolve planejamento de custos e prazos, montagem da equipe e garantia de qualidade do produto e do processo. Finalmente, a engenharia de software visa a produo da documentao formal do produto, do processo, dos critrios qualidade e dos manuais de usurios finais.

6. Linguagem C
A linguagem C uma linguagem de alto nvel, genrica. Foi desenvolvida por programadores para programadores tendo como meta caractersticas de flexibilidade e portabilidade. C uma linguagem de programao compilada1 de propsito geral, estruturada2 , imperativa3, procedural3, de alto nvel, padronizada pela ISO, criada em 1972, por Dennis Ritchie, no AT&T Bell Labs, essa linguagem nasceu juntamente com o advento da teoria de linguagem estruturada e do computador pessoal. Assim tornou-se rapidamente uma linguagem popular entre os programadores. O C foi usado para desenvolver o sistema operacional UNIX, e hoje esta sendo usada para desenvolver novas linguagens, entre elas a linguagem C++ e Java.

6. 1. Histria
O desenvolvimento inicial de C ocorreu no AT&T Bell Labs entre 1969 e 1973. No se sabe se o nome "C" foi dado linguagem porque muitas de suas caractersticas derivaram da linguagem B e C a letra conseguinte no alfabeto, ou porque "C" a segunda letra do nome da linguagem BCPL, da qual derivou-se a linguagem B. C foi originalmente desenvolvido para a implementao do sistema Unix (originalmente escrito em PDP-7 Assembly, por Dennis Ritchie e Ken Thompson). Em 1973, com a adio do tipo struct, C tornou-se poderoso o bastante para a maioria das partes do ncleo do Unix, serem reescritas em C. Este foi um dos primeiros sistemas que foram implementados em uma linguagem que no o Assembly, sendo exemplos anteriores os sistemas: Multics (escrito em PL/I) e TRIPOS (escrito em BCPL). Segundo Ritchie, o perodo mais criativo ocorreu em 1972.

6. 2. Caractersticas do C
C uma linguagem para implementao de sistemas, que tem acesso de baixo nvel memria e baixos requerimentos do hardware. Tambm foi desenvolvido para ser uma linguagem de alto nvel, para maior reaproveitamento do cdigo. C foi til para muitas aplicaes que foram codificadas originalmente em Assembly. A linguagem C foi criada com o objectivo principal em mente: facilitar a criao de programas extensos com menos erros, recorrendo ao paradigma da programao procedural, mas sobrecarregando menos o autor do compilador, cujo trabalho complica-se ao ter de realizar as caractersticas complexas da linguagem. Entre as principais caractersticas do C, podemos citar: O C uma linguagem de alto nvel com uma sintaxe bastante estruturada e flexvel tornando sua programao bastante simplificada.

23

24

Programas em C so compilados, gerando programas executveis. O C compartilha recursos tanto de alto quanto de baixo nvel, pois permite acesso e programao direta do microprocessador. Com isto, rotinas cuja dependncia do tempo crtica, podem ser facilmente implementadas usando instrues em Assembly. Por esta razo o C a linguagem preferida dos programadores de aplicativos. O C uma linguagem estruturalmente simples e de grande portabilidade. O compilador C gera cdigos mais enxutos e velozes do que muitas outras linguagens. Embora estruturalmente simples (poucas funes intrnsecas) o C no perde funcionalidade pois permite a incluso de uma farta quantidade de rotinas do usurio. Os fabricantes de compiladores fornecem uma ampla variedade de rotinas pr-compiladas em bibliotecas. C tem como ponto forte, a sua eficincia, e a linguagem de programao preferida para o desenvolvimento de sistemas e softwares de base, apesar de tambm ser usada para desenvolver programas de computador. tambm muito usada no ensino de cincia da computao, mesmo no tendo sido projetada para estudantes e apresentando algumas dificuldades no seu uso. Outra caracterstica importante de C, sua proximidade do cdigo de mquina, que permite que um projetista seja capaz de fazer algumas previses de como o software ir se comportar, ao ser executado.

6. 3. TIPOS DE DADOS
C tem um sistema de tipos semelhante ao de alguns descendentes da linguagem ALGOL, tais como Pascal. Possui tipos para nmeros inteiros de vrios tamanhos com e sem sinal, nmeros de ponto flutuante, caracteres e estruturas (structs). C usa extensivamente ponteiros, um tipo muito simples de referncia que guarda o endereo de memria da varivel. O ponteiro pode ser desreferenciado, uma operao que busca o objecto que se encontra na morada da memria que o ponteiro possui, morada essa que pode ser manipulada atravs de aritmtica de ponteiros. Durante o tempo de execuo, o ponteiro simplesmente uma morada de mquina tais como aquelas manipuladas em Assembly, mas em tempo de compilao possui um tipo complexo que indica o tipo do objecto para onde ele aponta, permitindo que se verifique o tipo de expresses, incluindo ponteiros. Os ponteiros so usados extensivamente em C. O tipo linha de texto de C simplesmente um ponteiro para um vetor de caracteres e alocao dinmica de memria, descrita abaixo, efectuada atravs de ponteiros. Os ponteiros em C possuem um valor reservado especial, NULL, que indica que no esto a apontar para uma morada. O uso desse valor como morada muito til na construo de vrias estruturas de dados, mas causa comportamento no-definido (possivelmente uma falha de sistema) ao ser desreferenciado. Um ponteiro que possui o valor NULL chamado ponteiro nulo. Os ponteiros so declarados (e desreferenciados) com um * (asterisco), portanto o tipo int* denota um ponteiro para nmero(s) inteiro(s). A linguagem C tambm fornece um tipo especial de ponteiros, o void*, que se traduz num ponteiro que aponta para um objecto de tipo desconhecido.

24

25

A linguagem C tambm tem apoio a nvel de linguagem para vetores estticas (de dimenso fixa) de tipos. As disposies de tipos podem parecer ter mais que uma dimenso apesar de serem tecnicamente disposies de disposies de tipos. Em memria, tais estruturas so posicionadas com as linhas uma depois da outra (a alternativa seria armazenar os dados em colunas, usado em outras linguagens). O acesso a disposies de tipos feito atravs de ponteiros e aritmtica de ponteiros; o nome da disposio tratado como se fosse um ponteiro que aponta para o incio da disposio. Em certas aplicaes no razovel usarem-se disposies de tipos de dimenso fixa e por isso a alocao dinmica de memria pode ser usada para criar disposies de tipos de dimenso varivel. Como a linguagem C regularmente usada em programao de baixo-nvel de sistemas, h casos em que necessrio tratar um nmero inteiro como sendo um ponteiro, um nmero de ponto flutuante como sendo um nmero inteiro ou um tipo de ponteiro como sendo outro. Para estes casos, a linguagem C fornece a capacidade de "moldagem" (tambm denominado "converso de tipo" ou casting), uma operao que, caso seja possvel, fora a converso de um objecto de um tipo para outro. Apesar de ser por vezes necessrio, o uso de converses de tipo sacrifica alguma segurana oferecida pelo sistema de tipos.
int

O tipo de dado int (inteiro) serve para armazenar valores numricos inteiros. Existem vrios tipos de inteiros, cada um de um tamanho diferente (dependendo do sistema operacional e/ou arquitetura do processador):
int, pode possuir 16 bits, 32 bits ou 64 bits short int, deve possuir tamanho de no mnimo 16 bits e no pode ser maior que int long int, deve possuir tamanho mnimo de 32 bits long long int, deve possuir tamanho mnimo de 64 bits

Todos estes tipos de inteiros podem ainda ser declarados precedidos da clusula unsigned, o que faz com que s suporte nmeros positivos. Isto faz com que, com o mesmo tamanho, uma varivel suporte mais nmeros positivos do que um signed (todos os inteiros so signed por omisso).
char

O tipo char ocupa 1 byte, e serve para armazenar caracteres ou inteiros. Isso significa que o programa reserva um espao de 8 bits na memria RAM ou em registradores do processador para armazenar um valor (char de tamanho maior que 8 bits permitido pela linguagem, mas os casos so raros). Com vetores do tipo char possvel criar cadeias de caracteres (strings).
float

O tipo de dado float serve para armazenar nmeros de ponto flutuante, ou seja, com casas decimais. O padro mais utilizado nos ltimos 10 anos o IEEE 754-1985.
double

25

26

O tipo de dado double serve para armazenar nmeros de ponto flutuante de dupla preciso, normalmente tem o dobro do tamanho do float e portanto o dobro da capacidade. O padro mais adotado tambm o IEEE 754-1985.
struct

Em C podem ser usadas estruturas (chamados de registos em outras linguagens de programao). As estruturas so grupos de variveis organizadas arbitrriamente pelo programador. Uma estrutura pode criar um novo tipo de varivel caso typedef seja usado em sua declarao.

6. 4. MATEMTICA
O seguinte cdigo realiza seis operaes matemticas, adio, subtrao, multiplicao, diviso, exponenciao e radiciao, e em seguida envia os seus respectivos resultados para a sada padro (normalmente o console).
#include <math.h> // necessria para pow() e sqrt() #include <stdio.h> // necessria para printf() e getchar() int main() { int a = 2, b = 3; printf("%d + printf("%d printf("%d x printf("%d / printf("%d expoente) printf("raiz getchar(); return 0; } %d = %d\n", a, %d = %d\n", a, %d = %d\n", a, %d = %0.1f\n", elevado a %d b, b, b, a, = a + b); a - b); a * b); b, (float) a / b); // resultado fracionrio %0.1f\n", a, b, pow(a, b)); // pow(base,

quadrada de %d = %0.1f\n", a, sqrt(a));

6. 5. ESTRUTURAS DE DADOS
No exemplo seguinte, criada uma estrutura composta por 3 elementos de tipos diferentes. Aps ser declarada uma varivel "x" do tipo struct "y", onde "y" o nome da estrutura, para se acessar os elementos usa-se a seguinte sintaxe: x.elemento.
#include <stdio.h> struct Pessoa { char nome[64]; // vetor de 64 chars para o nome unsigned short int idade; char rg[13]; }; int main() {

26

27
struct Pessoa exemplo = {"Fulano", 16, "00.000.000-00"}; // declarao da varivel "exemplo" printf("Nome: %s\n", exemplo.nome); printf("Idade: %hu\n", exemplo.idade); printf("RG: %s\n", exemplo.rg); getchar(); return 0;

Ou, equivalente:
#include <stdio.h> typedef struct Pessoa { char nome[64]; // vetor de 64 chars para o nome unsigned short int idade; char rg[13]; } Pessoa; int main() { Pessoa exemplo = {"Fulano", 16, "00.000.000-00"}; // declarao da varivel "exemplo" printf("Nome: %s\n", exemplo.nome); printf("Idade: %hu\n", exemplo.idade); printf("RG: %s\n", exemplo.rg); getchar(); return 0; }

6. 6. Ferramentas de programao

Bloodshed Dev-C++ Code::Blocks GNU Compiler Collection Make Significados: 1 - Linguagem compilada uma linguagem de programao, onde o cdigo fonte nessa linguagem executado diretamente pelo sistema operacional ou pelo processador, aps ser traduzido, atravs de um processo chamado compilao, usando um programa de computador chamado compilador, para uma linguagem de baixo nvel, como linguagem de montagem ou cdigo de mquina. 2 - Programao estruturada uma forma de programao de computadores que preconiza que todos os programas possveis podem ser reduzidos a apenas trs estruturas: sequncia, deciso e interao,a Programao estruturada orienta os programadores para a criao de estruturas simples em seus programas, usando as subrotinas e as funes.

27

28 3 - Programao imperativa (ou programao procedural) um paradigma de programao que descreve a computao como aes (comandos) que mudam o estado (variveis) de um programa. Muito parecido com o comportamento imperativo das linguagens naturais que expressam ordens, programas imperativos so uma sequncia de comandos para o computador executar.

7. Linguagem C++
O C++ uma linguagem de programao multi-paradigma e de uso geral. A linguagem considerada de mdio nvel, pois combina caractersticas de linguagens de alto e baixo nveis. Desde os anos 1990 uma das linguagens comerciais mais populares, sendo bastante usada tambm na academia por seu grande desempenho e base de utilizadores. Bjarne Stroustrup desenvolveu o C++ (originalmente com o nome C with Classes, C com classes, em portugus) em 1983 no Bell Labs como um adicional linguagem C. Novas caractersticas foram adicionadas com o tempo, como funes virtuais, sobrecarga de operadores, herana mltipla, gabaritos e tratamento de excees. Aps a padronizao ISO realizada em 1998 e a posterior reviso realizada em 2003, uma nova verso do padro da linguagem est em desenvolvimento. Conhecida informalmente como C++0x, seu lanamento est previsto para 2011.

7. 1. Histria
O C++ foi inicialmente desenvolvido por Bjarne Stroustrup dos Bell Labs, durante a dcada de 1980 com o objetivo de implementar uma verso distribuda do ncleo Unix. Como o Unix era escrito em C, teve que ser mantido a compatibilidade, ainda que adicionando novos recursos. Alguns dos desafios incluam simular a infraestrutura da comunicao entre processos num sistema distribudo ou de memria compartilhada e escrever drivers para tal sistema. Stroustrup percebeu que a linguagem Simula possua caractersticas bastante teis para o desenvolvimento de software, mas que era muito lenta para uso prtico. Por outro lado, a linguagem BCPL era rpida, mas possua demasiado baixo nvel, dificultando sua utilizao no desenvolvimento de aplicaes. A partir de sua experincia de doutorado, comeou a acrescentar elementos do Simula no C. O C foi escolhido como base de desenvolvimento da nova linguagem pois possua uma proposta de uso genrico, era rpido e tambm portvel para diversas plataformas. Algumas outras linguagens que tambm serviram de inspirao para o cientista da computao foram ALGOL 68, Ada, CLU e ML. Ainda em 1983 o nome da linguagem foi alterado de C with Classes para C++. Antes implementada usando um pr-processador, a linguagem passou a exigir um compilador prprio, escrito pelo prprio Stroustrup.[1] Novas caractersticas foram adicionadas, como funes virtuais,[1] sobrecarga de operadores e funes,[1] referncias, constantes, gerenciamento manual de memria, melhorias na verificao de tipo de dado e estilo de comentrio de cdigo de uma linha (//). Em 1985 foi lanada a primeira edio do livro The C++ Programming Language, contendo referncias para a utilizao da linguagem, j que ainda no era uma norma oficial. A primeira verso comercial foi lanada em outubro do mesmo ano.[4] Em 1989 a segunda verso foi lanada, contendo novas caractersticas como herana mltipla, classes abstratas, mtodos estticos, mtodos constantes e membros protegidos, incrementando o suporte a orientao a objeto. Em 1990 foi lanado o livro The Annotated C++ Reference Manual, que tornou-se base para o futuro

28

29

padro. Outras adies na linguagem incluem gabaritos, tratamento de excees, espao de nomes, converso segura de tipo de dado e o tipo booleano. Assim como a linguagem, sua biblioteca padro tambm sofreu melhorias ao longo do tempo. Sua primeira adio foi a biblioteca de E/S, e posteriormente a Standard Template Library (STL); ambas tornaram-se algumas das principais funcionalidades que distanciaram a linguagem em relao a C. Criada primordialmente na HP por Alexander Stepanov[5] no incio da dcada de 1990 para explorar os potenciais da programao genrica, a STL foi apresentada a um comit unificado ANSI e ISO em 1993 convite de Andrew Koenig. Aps uma proposta formal na reunio do ano seguinte, a biblioteca recebe o aval do comit. Depois de anos de trabalho, o mesmo comit ANSI/ISO padronizou o C++ em 1998 (ISO/IEC 14882:1998). Aps alguns anos foram reportados defeitos e imprecises no documento, e uma correo foi lanada em 2003.[6] Por muito tempo, o C++ foi encarado como um superconjunto do C.[nota 1] Entretanto, em 1999 o novo padro ISO para a linguagem C tornou as duas linguagens ainda mais diferentes entre si. Devido a essas incompatibilidades, muitas empresas que desenvolvem compiladores no oferecem suporte verso mais recente da linguagem C. Pode-se dizer que C++ foi a nica linguagem entre tantas outras que obteve sucesso como uma sucessora linguagem C, inclusive servindo de inspirao para outras linguagens como Java, a IDL de CORBA e C.

7. 1. 1. ETIMOLOGIA
Durante sua fase inicial de desenvolvimento, a linguagem era chamada "novo C", "C84" ou ainda "C com classes".[1] O termo "C++" creditado a Rick Mascitti,[7] e foi utilizado pela primeira vez em dezembro de 1983. Ele uma referncia ao operador de incremento ++, significando um acrscimo (uma evoluo) linguagem C. Em tom humorado, desenvolvedores software e especialistas em informtica no incio da dcada de 1990 costumavam relacionar o ++ do nome grande insistncia dos programadores em utilizar o C++ da mesma forma que a linguagem C, no usufruindo das novas facilidades que a linguagem poderia fornecer. Assim como o ++ estava sendo aplicado de maneira ps-fixa letra C, a linguagem C++ era uma evoluo do C ps-fixada, que s tornar-se-ia realidade em algum futuro remoto, no naquele momento.

7. 1. 2. TRABALHOS FUTUROS
A linguagem continua evoluindo de forma a fornecer novas funcionalidades. O grupo de desenvolvimento Boost.org trabalha para evoluir a biblioteca padro, informando o comit oficial da linguagem quais facilidades possuem maior retorno positivo dos usurios, seja por qualidade ou por utilidade, e quais ainda devem ser desenvolvidas. Tudo indica que o C++ continuar com sua natureza multiparadigma. Por exemplo, o trabalho da Boost.org dedica-se a acrescentar as qualidades da programao funcional e genrica. O padro C++ no define a implementao para a definio de nomes e tratamento de excees, entre outras facilidades especficas, o que frequentemente torna incompatveis cdigos objeto produzidos por diferentes compiladores. Apesar

29

30

disso, existem padres perifricos especficos para certas plataformas ou sistemas operacionais para padronizar compiladores dessas plataformas, como por exemplo o C++ ABI. Atualmente o comit de padronizao do C++ est trabalhando para estender a linguagem em uma nova especificao, conhecida informalmente por C++0x.

7. 2. Caractersticas 7. 2. 1. Filosofia
No livro In The Design and Evolution of C++ (1994), Bjarne Stroustrup descreve algumas regras que ele utiliza para desenvolver a linguagem, como exemplificado abaixo: C++ desenvolvido para ser uma linguagem tipada estaticamente e de propsito geral que to eficiente e porttil quanto o C. C++ desenvolvido para suportar mltiplos paradigmas. C++ desenvolvido para fornecer ao programador escolhas, mesmo que seja possvel ao programador escolher a opo errada. C++ desenvolvido para ser o mais compatvel com C possvel, fornecendo transies simples para cdigo C. C++ evita fornecer facilidades que so especficas a certas plataformas ou a certos grupos de desenvolvedores. C++ no exige overhead para facilidades que no so utilizadas. C++ desenvolvido para ser utilizado mesmo sem um ambiente de desenvolvimento sofisticado. Stanley B. Lippman documenta em seu livro Inside the C++ Object Model (1996)[10] como compiladores convertem cdigo de programas C++ em mapeamentos de memria. Lippman trabalhou implementando e mantendo o C-front, a implementao original do C++ nos Bell Labs. Stroustrup sempre desejou que o C++ fosse mantido como uma linguagem de especificao pequena, apesar de presses externas para adies de novas funcionalidades na especificao da prpria linguagem ao invs da codificao de novas bibliotecas para a biblioteca padro. Brian Kernighan notou que enquanto em C existe geralmente uma maneira de resolver problemas, em C+ + existem vrias. Na maioria das linguagens de programao, um padro ou um conjunto bastante restrito de padres de projeto de software escolhido para o desenvolvimento. Entretanto, isso no acontece em C++, pois a escolha delegada ao desenvolvedor. um conceito que prega que no existe paradigma de programao ou padro de desenvolvimento que resolva todos os problemas, por isso a pluralidade e generalidade de aplicaes para a linguagem. Tal filosofia assusta iniciantes e professores, que sentem que a linguagem deveria ser de fcil aprendizado, algo que o C++ no .

7. 2. 2. Biblioteca padro

30

31

A biblioteca padro do C++ incorpora a biblioteca padro do C com algumas pequenas modificaes para trabalhar melhor com as novas funcionalidades criadas pela linguagem. Outra grande parte da biblioteca composta pela biblioteca padro de gabaritos (STL). Ela fornece ferramentas teis como containers (vetores, listas, entre outros), algoritmos (filtragem de elementos de container, busca, ordenao, entre outros) e iteradores (ponteiros inteligentes genricos para acessar tais containers e interlig-los aos algoritmos). Usando gabaritos possvel escrever algoritmos genricos que funcionam para qualquer container ou sequncia definida por iteradores. Tendo em vista que um iterador nada mais que um ponteiro encapsulado, possvel tambm utilizar os algoritmos genricos em vetores C, utilizando-se ponteiros comuns para tal. Como em C, os mdulos da biblioteca so acessadas utilizando a diretiva #include; ao todo so fornecidos 69 cabealhos-padro, dos quais 19 esto em depreciao. Devido ao fato da biblioteca padro ter sido desenvolvida por especialistas e de j ter sido amplamente utilizada comercialmente e academicamente, recomendado utilizar seus componentes ao invs de componentes prprios. Por exemplo, utilizar std::vector e std::string ao invs de declarar vetores herdados do C no somente torna o desenvolvimento mais simples, como tambm traz mais segurana e escalabilidade para o sistema.

7. 2. 3. Operadores
Os operadores em C++ so um conjunto de todos os operadores do C mais novas adies linguagem. Um grupo de novos operadores do C++ so os relativos converso de tipo de dado, e consistem em const_cast, static_cast, dynamic_cast e reinterpret_cast. Eles so uma evoluo a converso de dados utilizada em C, que limitava-se a oferecer um mtodo para converso tal qual static_cast. dynamic_cast refere-se diretamente ao suporte de herana e polimorfismo oferecido pela linguagem, e est relacionado a outro novo operador, typeid, que retorna informaes sobre o tipo de dado derivado pelo operando. Ambos os operadores requerem a habilitao de RTTI para funcionar. Outro grupo de novos operadores so os relativos alocao de memria, e consistem em new e delete. Assemelham-se s funes malloc e free respectivamente, que esto presentes na biblioteca padro do C. Outro novo operador o de resoluo de mbito, ::, e que refere-se diretamente ao suporte de espao de nomes e orientao a objeto oferecido pela linguagem. Com ele possvel declarar e acessar espaos de nomes, e tambm declarar classes e acessar objetos. O C++ define que alguns dos operadores podem ser sobrecarregados, o que permite, assim como na sobrecarga de funes, que diferentes tipos de dados sejam passados para um operador de forma a produzir diferentes resultados.

7. 2. 4. Objetos
O C++ introduziu alguns conceitos de orientao a objetos ao C, como exemplificado pelas classes, que apresentam quatro caractersticas comumente presentes em linguagens de programao orientadas a objeto: abstrao, encapsulamento, herana e polimorfismo. Cada vez que uma classe instanciada criado um objeto na memria, que basicamente um conjunto de atributos e operaes reunidos.

7. 2. 5. Encapsulamento

31

32

O encapsulamento permite que os atributos de classes possam ser declarados como pblicos, privados ou protegidos. Um atributo pblico (o menos restrito) pode ser acessado a partir de qualquer mtodo que tenha acesso ao objeto. Um atributo privado (o mais restrito) s pode ser acessado por mtodos da prpria classe e por mtodos explicitamente declarados como permitidos para tal (utilizando a palavra reservada friend). Atributos protegidos s podem ser acessados por mtodos da mesma classe, por mtodos de classes herdadas e por mtodos explicitamente declarados (utilizando a palavra reservada friend). considerado como uma boa prtica de programao restringir ao mximo o acesso aos atributos, de forma a isolar detalhes de implementao de uma classe, tornando pblicas somente as funes membro que realizam uma interface mnima da classe com outros componentes. O isolamento dos dados proposto pelo encapsulamento no infalvel, podendo ser contornado ao realizar operaes de baixo nvel em objetos. Dessa maneira, um atributo privado pode ser acessado e modificado a partir de um ponteiro para seu endereo de memria sem problemas, ainda que isso seja considerado uma m prtica de programao.

7. 2. 6. Polimorfismo
Polimorfismo a capacidade de usar um operador ou uma funo de diferentes maneiras, permitir fornecer diferentes significados de acordo com o contexto. Uma vez que um aplicativo escrito utilizando o conceito de polimorfismo, pode ser facilmente estendido, oferecendo novos objetos que estejam em conformidade com a interface original. No necessrio recompilar programas originais, adicionando novos tipos. Apenas a re-vinculao necessria para expor as novas mudanas juntamente com a antiga aplicao. Ele auxilia na reutilizao de cdigo e contribui para a criao de aplicaes robustas. C++ suporta diversos tipos de polimorfismos, sejam estticos (resolvidos em tempo de compilao de cdigo) ou dinmicos (resolvidos em tempo de execuo de cdigo).

7. 2. 6. 1. Esttico
A sobrecarga de funes um polimorfismo esttico que permite que um programa possa declarar vrias funes com o mesmo nome, diferenciando entre si pela quantidade de parmetros apresentados e por seus respectivos tipos de dado. Assim, o mesmo nome de funo pode referir-se a diferentes funes dependendo do contexto em que ela usada. O tipo retornado pela funo no utilizado para distinguir funes sobrecarregadas. A sobrecarga de operadores tambm um polimorfismo esttico que permite que a definio de certos operadores resultem em uma chamada de funo que depende dos tipos de dado dos operadores sendo utilizados. O C++ tambm suporta argumentos padro para os parametros das funes, o que permite omitir tal parmetro na invocao da funo. Quando uma funo chamada com menos argumentos que o esperado e os argumentos explcitos so compatveis com os parmetros da esquerda direita, os ltimos parmetros so atribudos de acordo com o argumento padro. Semanticamente parecida com a sobrecarga de funes, essa tcnica permite simplificar situaes em que uma funo declarada somente para invocar uma sobrecarga dela prpria com algum parmetro especificado. O C++ implementa polimorfismo paramtrico atravs de gabaritos, que fazem o compilador gere uma instncia separada da classe ou funo usada como gabarito para cada permutao de

32

33

parmetros de tipo usado com ele, o que pode levar a dificultar a depurao de cdigo. Um benefcio que os gabaritos C++ tm sobre Java e C permitir a metaprogramao por gabaritos, uma forma de pr-avaliao de parte do cdigo em tempo de compilao ao invs de tempo de execuo. Os gabaritos em C++ fornecem um mecanismo sofisticado para a criao de cdigo genrico polimrfico. Em particular, por meio da tcnica Curiously Recurring Template Pattern possvel implementar uma forma de polimorfismo esttico que imita a sintaxe para substituir as funes virtuais. Uma vez que gabaritos so sensveis aos tipos de dados e tambm so Turing completos, tambm podem ser usados para permitir que o compilador resolva condicionais recursivas e gerar programas substanciais atravs de metaprogramao por gabaritos.

7. 2. 6. 2. Dinmico
O polimorfismo por herana um exemplo de polimorfismo dinmico no qual ponteiros de uma classe base podem referenciar objetos de classes derivadas, o que permite que uma chamada de funo virtual seja resolvida em tempo de execuo de cdigo. Ponteiros e referncias de uma classe base podem referenciar objetos de qualquer classe derivada de si, o que permite que arranjos e outros containers de um dado tipo possam armazenar ponteiros de diversos tipos de dados, o que no poderia ser feito de outra maneira em C++. Como no possvel descobrir se a converso do tipo base para o tipo derivado segura em tempo de compilao, a verificao deve ser feita durante a execuo do cdigo. Para isso fornecido o operador dynamic_cast, que permite tentar a converso segura de uma classe mais abstrata (classe base) para outra mais especfica (classe derivada). Para sua utilizao a linguagem dispe do RTTI, uma tcnica para manter em memria informaes sobre o tipo de dado de objetos. Caso a converso no seja possvel uma exceo especfica lanada. Normalmente, quando uma funo em uma classe derivada substitui uma funo em uma classe base, a funo chamada determinada pelo tipo do objeto. Uma dada funo sobrescrita quando no existe nenhuma diferena no nmero ou tipo de parmetros, entre duas ou mais definies para aquela funo. Assim, em tempo de compilao pode no ser possvel determinar o tipo do objeto e, portanto, a funo a ser chamada, tendo apenas um ponteiro de classe base, a deciso adiada at o tempo de execuo. Isso chamado de despache dinmico. Funes ou mtodos virtuais permitem a implementao mais especfica da funo a ser chamada, de acordo com o tipo do objeto em tempo real. Em C++, isto geralmente feito usando tabelas de funes virtuais. Se o tipo de objeto conhecido, isso pode ser contornado, antecipando o nome da classe antes da chamada de funo, mas, em geral chamadas de funes virtuais so resolvidas em tempo de execuo. Alm das funes de membro padro, sobrecargas do operador e destrutores podem ser virtuais. A regra geral que, se todas as funes da classe so virtuais, o destrutor tambm deve ser assim. Como o tipo de criao de um objeto conhecido em tempo de compilao, construtores de cpia e de extenso, no pode ser virtuais. No entanto pode acontecer de uma cpia de um objeto ser criado quando um ponteiro para um objeto derivado passado como um ponteiro para um objeto base. Nesse caso, uma soluo comum criar um clone() (ou similar) e declarar que a funo como virtual. O mtodo clone() cria e retorna uma cpia da classe quando chamado.

33

34

Um membro da funo tambm pode ser declarado puramente virtual, acrescentando = 0 aps o parntese de fechamento e antes do ponto e vrgula. Os objetos no podem ser criados de uma classe com uma funo virtual pura e so chamados de tipos de dados abstratos. Esses tipos de dados abstratos s podem ser derivados. Qualquer classe derivada herda a funo virtual pura deve apresentar uma definio no-pura (e todas as outras funes virtuais puras), antes de objetos da classe derivada poderem ser criados.

7. 2. 7. Tratamento de excees
O tratamento de exceo um mecanismo desenvolvido para lidar com a ocorrncia de algumas condies (chamadas excees) que alteram o funcionamento normal do fluxo de um programa de computador. O C++ suporta tal tratamento, de forma que o estado atual de um programa aps uma exceo alterado automaticamente para outro estado pr-definido para a recuperao do sistema. Para isso foram adicionadas linguagem as palavras reservadas try e catch. A primeira especifica um bloco de cdigo que ser vigiado em relao excees, de forma que se uma for identificada, o fluxo de programa ser desviado para um bloco especificado pela segunda palavra reservada. Para um dado bloco try podem existir diversos blocos catch, capturando excees de diferentes tipos de dado. Alternativamente, a sintaxe catch() foi introduzida para especificar um bloco de tratamento de exceo independente do tipo da exceo, genrico. O conceito puro da cincia da computao para tratamento de excees ainda inclui o bloco de instrues finally, que indica um bloco de cdigo executado aps um bloco try caso nenhuma exceo tenha sido lanada, indicando sucesso na operao. Tal abordagem no foi adicionada ao C++, sendo substituvel por outras tcnicas como RAII[14][16]. De qualquer forma, possvel que essa funcionalidade seja adicionada na prxima especificao da linguagem.

7. 2. 8. Espao de nomes
O C++ introduziu os espaos de nomes para a organizao das bibliotecas, e sua funo agrupar um contexto para identificadores (variveis, funes, classes, estruturas, entre outros). No contexto de sistemas operativos, o espao de nomes poderia ser representado por diretrios. Toda a biblioteca padro est contida no espao de nomes std (abreviao de standard, que em ingls significa padro). Para utilizar um espao de nomes pode ser feita tanto uma declarao global dos espaos quanto local. Uma declarao global normalmente inserida no incio dos mdulos, aps a importao dos mdulos externos, utilizando a palavra reservada using (como em using namespace std;, ver exemplo contextualizado em anexo). Ela tambm pode ser usada em um mbito prdeterminado por um bloco de cdigo. Uma declarao local inserida antes de invocar o identificador envolvido, utilizando o operador de resoluo de mbito :: (como em std::cout, ver exemplo contextualizado em anexo). A declarao global til para reduzir a quantidade de cdigo produzido, sub entendendo a origem dos identificadores utilizados em todo um mbito. Apesar disso, ela deixa margem ambiguidades, pois possvel que um mesmo identificador esteja presente em mais de um espao de nome importado no mdulo. Para eliminar esse problema devese, alm de utilizar a declarao global, declarar o identificador ambguo localmente cada vez que ele for utilizado.

7. 2. 9. Incompatibilidade com C

34

35

incorreto considerar o C++ como um super conjunto de C, isto , uma linguagem que implementa o C completamente e que adiciona novas funcionalidades. Grande parte de cdigo C pode ser perfeitamente compilado em C++, mas existem algumas pequenas diferenas sintticas e semnticas entre as linguagens que tornam alguns trechos de cdigo C vlidos em cdigo C++ invlido, ou cdigos que exibem comportamentos diferentes em cada linguagem. Talvez a diferena mais comum que C permite a converso implcita entre o tipo de dado void* para ponteiros para outros tipos, algo que o C++ no permite. Logo, o seguinte cdigo em C vlido: int *i = malloc(sizeof(int) * 5); /* converso implcita de void* para int* */

Para assegurar-se que o cdigo funcione tanto em C quanto C++ necessrio explicitar a converso: int *i = (int *) malloc(sizeof(int) * 5); /* converso explcita de void* para int* */ Outra questo de portabilidade entre as linguagens o fato do C++ adicionar vrias novas palavras reservadas, como new e class, que podem ser utilizadas como identificadores (por exemplo nomes de variveis) em C, gerando incompatibilidade. Algumas outras incompatibilidades foram removidas no padro C99, que agora suporta facilidades como comentrios por //.[18] Tanto C99 quanto C++ definem o tipo de dado bool e suas respectivas constantes true e false. Apesar disso, enquanto a definio no C++ embarcada na prpria linguagem, tornando tais elementos palavras reservadas, em C tais identificadores so declarados atravs da biblioteca padro stdbool.h. Algumas construes sintticas so vlidas tanto em C quanto C++, mas produzem resultado diferente. Por exemplo, o valor literal 'a' possui tipo de dado int em C e char em C++, o que significa que uma chamada sizeof('a'), que retorna a quantidade de bytes ocupada pelo identificador, pode resultar em resultados diferentes entre as duas linguagens. Na prtica, esse exemplo especfico no realmente um problema j que caracteres literais so convertidos para o tipo int implicitamente pelo compilador tanto em C quanto em C++.

7. 3. Ferramentas 7. 3. 1. AMBIENTES DE DESENVOLVIMENTO


Abaixo mostrada uma lista dos principais ambientes de desenvolvimento C++, sejam eles compiladores ou ambientes de desenvolvimento integrado (IDE).
Nome Comentrio Plataforma Tipo de licena compilador IDE depurador s ? ? ?

35

36

G++

Um componente do GCC, compilador padro do Projecto GNU IDE livre famosa entre iniciantes. Seu compilador o MinGW, uma verso do G++ para Windows.

Livre

Unix, Linux, Mac OS X, Windows e AmigaOS

Dev-C++

Livre

Windows[nota
6]

U++ um framework C++ multiplataforma, para desemvolvimento Ultimate++ rpido de aplicaes, focado na produtividade de programadores. Intel C++ Produz cdigo otimizado para processadores Intel

Livre

Unix, Linux, Mac OS X e Windows

Proprietria

Windows e Linux

o mais conhecido para a plataforma Windows, com ferramentas e tecnologias auxiliares para Microsoft desenvolvimento Visual C++ nessa plataforma (como MFC, ATL, COM, entre outras). Oferece ainda uma verso gratuita com restries de uso[27] C++ Builder Ferramenta da Borland que oferece verses antigas gratuitas sem presena de IDE. Possui integrao

Proprietria

Windows

Proprietria

Windows e Linux

36

37 com Delphi IDE especializada em (mas no restrita a) desenvolvimento na plataforma Qt. Utiliza o g++ como Livre/Proprietri Qt Creator compilador e o gdb a como depurador (ou seus equivalentes para MinGW em Windows). Suporta plataformas antigas, at ento sem suporte completo biblioteca padro

Linux, Windows e Mac OS X

Open Watcom

Livre

DOS, Windows, OS/2 e Netware Windows, Linux e Solaris

Pode ser Comeau C++ experimentado pela Internet[28] Possui verso gratuita[no stio oficial e tambm uma Turbo C++ verso paga.] similar ao C++ Builder. Eclipse Disponvel para C++ atravs da extenso CDT. Suporta muitas capacidades avanadas como gerenciamento de projetos e um poderoso editor de cdigo fonte. Uma nova verso do Anjuta (Anjuta 2.*) que integra o Glade est em desenvolvimento ativo.

Proprietria

Proprietria

Windows

Livre

Windows, Linux, JVM

Anjuta

Livre

Linux

37

38 Ambiente aberto e multi-plataforma, em sua verso para Windows utiliza o compilador MinGW, apesar de tambm Code::Blocks suportar outros compiladores como o Visual C++, Digital Mars, Borland C++ 5.5 e Open Watcom.
[32]

Livre

Windows, Linux, Mac OS X

Digital Mars

Proprietria

Windows, DOS Windows, Linux, Mac OS X Windows, Linux Windows, Linux, Solaris Windows, Linux

Codelite

Livre

Geany GNAT Utiliza o compilador Programming GCC Studio KDevelop Utiliza o compilador GCC

Livre

Livre

Livre

7. 3. 2. APLICATIVOS DESENVOLVIDOS EM C++


Abaixo segue uma lista de exemplos de aplicativos parcial ou totalmente escritos em C++, de acordo com Bjarne Stroustrup, que no garante sua preciso e veracidade, ainda que seja responsvel por sua publicao.

Adobe Acrobat Adobe Illustrator Adobe Photoshop Amazon BeOS Blender Common Desktop Environment Doom III (motor de jogo) eMule Motores de busca Google, em especial Googlebot[34]

Maya Mars Pathfinder, Opportunity e outras sondas da NASA Microsoft Office Microsoft Visual Studio (Visual Basic, Visual FoxPro, Visual C++) Microsoft Windows (diversas verses) Mozilla Firefox Mozilla Thunderbird MySQL

38

39

Srie Half-Life Internet Explorer iPod (GUI) KDE (Qt) Lunar Magic Mac OS X

Mquina virtual Java OpenOffice.org e BrOffice.org Outlook Express PCSX2 (Emulador de Playstation 2) SETI@home Symbian OS Winamp Tibia

8. Linguagem C#
C# (CSharp) uma linguagem de programao orientada a objetos criada pela Microsoft, faz parte da sua plataforma .Net. A sua sintaxe orientada a objetos foi baseada no C++ mas inclui muitas influncias de outras linguagens de programao, como Object Pascal e Java.

8. 1. Histria
A linguagem C# foi criada junto com a arquitetura .NET. Embora existam vrias outras linguagens que suportam essa tecnologia (como VB.NET, C++, J#), C# considerada a linguagem smbolo do .NET pelas seguintes razes: Foi criada praticamente do zero para funcionar na nova plataforma, sem preocupaes de compatibilidade com cdigo de legado. O compilador C# foi o primeiro a ser desenvolvido. A maior parte das classes do .NET Framework foram desenvolvidas em C#. A criao da linguagem, embora tenha sido feita por vrios desenvolvedores, atribuda principalmente a Anders_Hejlsberg, hoje um Distinguished Engineer na Microsoft. Anders Hejlsberg era desenvolvedor de compiladores na Borland, e entre suas criaes mais conhecidas esto o Turbo Pascal e o Delphi.

8. 1. 1. Etimologia
Muitos pensam que o nome C# viria de uma sobreposio de 4 smbolos "+" dando a impresso de "++++". Na verdade o "#" de C# refere-se ao sinal musical (sustenido), que aumenta em 1/2 tom uma nota musical. O smbolo real seria o e no o #, porm, devido a limitao de telas, fontes e alguns browsers, no momento da normalizao junto a ECMA, fora especificado apenas que o nome da linguagem seria uma letra C maiscula (U+0043) e o sinal "#" (U+0023), facilitando assim, publicaes e artigos com um caracter encontrado facilmente dos layouts de teclado padres. Desta forma, caso o nome fosse usado em portugus, seria "C-Sustenido" (ou "DSustenido"), e no "C-cerquilha".

8. 2. Caractersticas

39

40

C# (C Sharp) , de certa forma, a linguagem de programao que mais diretamente reflete a plataforma .NET sobre a qual todos os programas .NET executam. C# est de tal forma ligado a esta plataforma que no existe o conceito de cdigo no-gerenciado (unmanaged code) em C#. Suas estruturas de dados primitivas so objetos que correspondem a tipos em .NET. A desalocao automtica de memria por garbage colletor alm de vrias de suas abstraes tais como classes, interfaces, delegados e excees so nada mais que a exposio explicita recursos do ambiente .NET. Quando comparada com C e C++, a linguagem restrita e melhorada de vrias formas incluindo: Ponteiros e aritmtica sem checagem s podem ser utilizados em uma modalidade especial chamada modo inseguro (unsafe mode). Normalmente os acessos a objetos so realizados atravs de referncias seguras, as quais no podem ser invalidadas e normalmente as operaes aritmticas so checadas contra sobrecarga (overflow). Objetos no so liberados explicitamente, mas atravs de um processo de coleta de lixo (garbage collector) quando no h referncias aos mesmos, previnindo assim referncias invlidas. Destrutores no existem. O equivalente mais prximo a interface Disposable, que juntamente com a construo using block permitem que recursos alocados por um objeto sejam liberados prontamente. Tambm existem finalizadores, mas como em Java sua execuo no imediata. Como no Java, no permitida herana mltipla, mas uma classe pode implementar vrias interfaces abstratas. O objetivo principal simplificar a implementao do ambiente de execuo. C# mais seguro com tipos que C++. As nicas converses implcitas por default so converses seguras, tais como ampliao de inteiros e converses de um tipo derivado para um tipo base. No existem converses implcitas entre inteiros e variveis lgicas ou enumeraes. No existem ponteiros nulos (void pointers) (apesar de referncias para Object serem parecidas). E qualquer converso implcita definida pelo usurio deve ser marcada explicitamente, diferentemente dos construtores de cpia de C++. A sintaxe para a declarao de vetores diferente ("int[] a = new int[5]" ao invs de "int a"). Membros de enumerao so colocados em seu prprio espao de nomes (namespace) C# no possui modelos (templates), mas C# 2.0 possui genricos (generics). Propriedades esto disponveis, as quais permitem que mtodos sejam chamados com a mesma sintaxe de acesso a membros de dados. Recursos de reflexo completos esto disponveis Apesar de C# ser freqentemente tido como similar a Java, existem uma srie de diferenas importantes, tais como:

40

41

Java no implementa propriedades nem sobrecarga de operadores. Java no implementa um modo inseguro que permita a manipulao de ponteiros e aritmtica sem checagem. Java possui excees checadas, enquanto excees em C# so no checadas como em C++. Java no implementa o goto como estrutura de controle, mas C# sim. Java utiliza-se de comentrios Javadoc para gerar documentao automtica a partir de arquivos fonte. C# utiliza comentrios baseados em XML para este propsito. C# suporta indexadores e delegados.

8.3. Bibliotecas de cdigos


Ao contrrio das outras linguagens de programao, nenhuma implementao de C# atualmente inclui qualquer conjunto de bibliotecas de classes ou funes. Ao invs disso, C# est muito vinculada ao framework .Net, do qual C# obtm suas classes ou funes de execuo. O cdigo organizado em um conjunto de namespaces que agrupam as classes com funes similares. Por exemplo: System.Drawing para grficos, System.Collections para estrutura de dados e System.Windows.Forms para o sistema Windows Form. Um nvel de organizao superior fornecido pelo conceito de montador (assembly). Um montador pode ser um simples arquivo ou multiplos arquivos ligados juntos (como em al.exe) que podem conter muitos namespaces ou objetos. Programas que precisam de classes para realizar uma funo em particular podem se referenciar a montadores como System.Drawing.dll e System.Windows.Forms.dll assim como a biblioteca core (conhecida como mscorlib.dll na implementao da Microsoft).

9. Linguagem Java
Java uma linguagem de programao orientada a objeto desenvolvida na dcada de 90 por uma equipe de programadores chefiada por James Gosling, na empresa Sun Microsystems, Inicialmente elaborada para ser a linguagem-base de projetos de software para produtos eletrnicos, Java teve seu grande boom em 1995, devido ao sucesso mundial da World Wide Web.. Diferentemente das linguagens convencionais, que so compiladas para cdigo nativo, a linguagem Java compilada para um bytecode que executado por uma mquina virtual. A linguagem de programao Java a linguagem convencional da Plataforma Java, mas no sua nica linguagem.

9. 1. Histria
O propsito inicial do desenvolvimento de Java foi para funcionar em processadores de eletrodomsticos. Os projetistas de sistemas de controle desses processadores, descontentes com linguagens convencionais de programao, como C, propuseram a criao de uma linguagem especfica para uso em processadores de aparelhos domsticos, como geladeiras e torradeiras. Todo o descontentamento dos projetistas residia no fato de que programas escritos e compilados em C

41

42

so fortemente dependentes da plataforma para a qual foram desenvolvidos. Como o ramo de eletro-eletrnicos est em constante evoluo, a cada novo liquidificador lanado no mercado com um novo processador embutido, um novo programa deveria ser escrito e compilado para funcionar no novo compilador, ou ento, na melhor das hipteses, para reaproveitar o antigo programa, no mnimo ele teria de ser re-compilado para o novo processador. No incio de 1990, Naughton, Gosling e Sheridan comearam a definir as bases para o projeto de uma nova linguagem de programao, apropriada para eletrodomsticos, sem os problemas j to conhecidos de linguagens tradicionais como C e C++. O consumidor era o centro do projeto, e o objetivo era construir um ambiente de pequeno porte e integrar esse ambiente em uma nova gerao de mquinas para "pessoas comuns". A especificao da linguagem terminou em agosto de 1991, e a ela deu-se o nome de "Oak" (Carvalho). Por problemas de copyrigth (j existia uma linguagem chamada Oak) o nome foi mudado em 1995 para Java, em homenagem ilha de Java, de onde vinha o caf consumido pela equipe da Sun. Em 1992, Oak foi utilizada pela primeira vez em um projeto chamado Projeto Green, que tinha por propsito desenvolver uma nova interface de usurio para controlar os aparelhos de uma casa. Tal interface consistia em uma representao animada da casa, que era exibida em um computador manual (chamado star seven, bisav dos palmtops de hoje), e que tinha uma tela sensvel ao toque que permitia a manipulao dos eletrodomsticos. Essa interface era totalmente escrita em Oak, e evoluiu para um projeto de interface para redes de televiso pay-per-view. Contudo, o padro proposto por esses dois projetos no vingou, e outros padres, pelo menos em sistemas de TV payper-view vm tomando conta do mercado. Um personagem animado desses projetos, Duke, tornouse um dos smbolos de Java. Em meados de 1993, pode-se dizer que Oak ia "mal das pernas". Os projetos propostos no eram economicamente viveis, e no se via um grande futuro no desenvolvimento de aparelhos que suportassem essa nova linguagem. Justamente nessa poca, a World Wide Web estava em seu nascimento, trazendo um novo horizonte para a Internet. ( importante lembrar que a Internet j existia muito antes do surgimento da WWW. A WWW nada mais que um conjunto de protocolos que permite um acesso mais amigvel aos recursos disponveis na Internet. Dentre esses protocolos, por exemplo, o mais conhecido em geral o de transferncia de hipertexto [http]). Com o lanamento do primeiro browser do mercado, o Mosaic, ocorreu equipe de desenvolvimento da Sun que uma linguagem independente de plataforma, segura e robusta como a que estava sendo desenvolvida para eletrodomsticos caberia como uma luva para uso na Internet, uma vez que um aplicativo gerado nessa linguagem poderia rodar nos diversos tipos de computadores ligados na Internet, rodando qualquer sistema operacional, de PCs rodando OS/2 a estaes RISC rodando AIX Unix, ou SparcStations rodando Solaris, os programas escritos nessa linguagem que viria a ser conhecida por Java seriam o modelo para qualquer aplicativo Web. Com o novo nimo trazido pelo advento da WWW, a equipe da Sun desenvolveu um browser totalmente escrito em Java, tendo-o terminado no incio de 1995 e denominado-o HotJava. O grande diferencial de HotJava para outros browsers da poca (como o Mosaic, o Netscape Navigator e o Lynx) que ele permitia a insero de programas escritos em Java dentro de pginas HTML comuns. HotJava como browser foi um fiasco comercial, mas abriu os olhos dos desenvolvedores para um fato muito importante: as pginas HTML estariam fadadas a serem estticas e sem aes embutidas em si, no houvesse uma linguagem padro na qual fossem escritos programas que pudessem ser embutidos nas pginas Web. HotJava demonstrou que isso

42

43

era possvel (ou seja, incluir um programa, no caso escrito em Java, em uma pgina HTML rodando em um browser preparado para dar suporte execuo do programa, no caso o prprio HotJava). O grande "pulo do gato" de Java veio logo a seguir, quando a Netscape anunciou que sua prxima verso do browser Navigator, iria dar suporte a aplicativos Java embutidos em documentos HTML. Em seguida, a Microsoft anunciou o mesmo para o seu Internet Explorer. E Java estourou no mundo, a Sun contabilizava inmeros downloads de seu JDK, diversas empresas desenvolveram IDEs para a programao em Java, e vieram JavaScript, JavaBeans e ActiveX.

9. 2. Caractersticas
Java uma linguagem de alto nvel, com sintaxe extremamente similar do C++, e com diversas caractersticas herdadas de outras linguagens, como Smalltalk e Modula-3. antes de tudo uma linguagem simples ( mesmo!), fortemente tipada, independente de arquitetura, robusta, segura, extensvel, bem estruturada, distribuda, multithreaded e com garbage collection.

9. 2. 1. Simplicidade:
Java, muito parecida com C++, mas muito mais simples. Java no possui sobrecarga de operadores, structs, unions, aritmtica de ponteiros, herana mltipla, arquivos .h, diretivas de prprocessamento e a memria alocada dinamicamente gerenciada pela prpria linguagem, que usa algoritmos de garbage collection para desalocar regies de memria que no esto mais em uso.

9. 2. 2. Orientao a objetos
Ao contrrio de C++, que uma linguagem hbrida, Java uma linguagem orientada a objetos que segue a linha purista iniciada por Smalltalk. Com a exceo dos tipos bsicos da linguagem (int, float, etc.), a maior parte dos elementos de um programa Java so objetos. (A ttulo de curiosidade, Smalltalk j considerada puramente O.O. [orientada a objeto], pois absolutamente tudo em Smalltalk so objetos, no h tipos bsicos em Smalltalk.) O cdigo organizado em classes, que podem estabelecer relacionamentos de herana simples entre si. Somente a herana simples permitida em Java. (H uma forma de "simular" herana mltipla em Java com o uso interfaces, que veremos em outros passos do curso).

9. 2. 3. Processamento distribudo
Chamadas a funes de acesso remoto (sockets) e os protocolos Internet mais comuns (HTTP, FTP, Telnet, etc.) so suportadas em Java, de forma que a elaborao de aplicativos baseados em arquiteturas cliente-servidor facilmente obtida.

9. 2. 4. Multithreading
A maior parte dos sistemas operacionais hoje no mercado do suporte multitarefa, como o Windows, OS/2 e Unix, ou seja, o computador capaz e executar diversas tarefas ao mesmo tempo. Cada um desses sistemas tem o seu tipo de multitarefa, preemptiva ou no, com ou sem multiprocessamento. Java tem o suporte a multitarefa embutido na linguagem: um programa Java

43

44

pode possuir mais de uma linha de execuo (thread). Por exemplo, clculos extensos, que em geral demandam muito tempo do processador, podem ser escritos em uma thread, e a parte de interface com o usurio, que depende mais dos perifricos de I/O que do processador, pode ser executada em outra thread. Programao concorrente em geral uma tarefa difcil, mas Java fornece diversos recursos de sincronizao de processos que tornam a programao mais simples.

9. 2. 5. Excees
Todo programador em geral est bastante acostumado com o computador "travando" por causa de um erro em um programa. Em C++, por exemplo, a simples tentativa de abertura de um arquivo inexistente pode obrigar ao programador a reiniciar o computador. Programas Java, contudo, no "do pau" no computador, j que a mquina virtual Java faz uma verificao em tempo de execuo quanto aos acessos de memria, abertura de arquivos e uma srie de eventos que podem gerar uma "travada" em outras linguagens, mas que geram excees em programas Java. Em geral, ao escrever programas Java utilizando-se de herana de classes predefinidas, forase em geral ao programador escrever algumas rotinas de tratamento de exceo, um trabalho que, se de incio pode parecer forado, ir poupar o programador de bastante dor de cabea no futuro.

9. 2. 6. Garbage collector
Em Java, os programadores no necessitam preocupar-se com o gerenciamento de memria como em C++. Em C++, todo bloco de memria alocado dinamicamente (com new, malloc ou funo similar) deveria ser liberado quando no fosse mais usado (com free, delete e parentes prximos). Isso acarretava diversos problemas mesmo ao programador mais experiente, que tinha que manter sempre um controle das reas de memria alocadas para poder liber-las em seguida. Java, ao contrrio, utiliza-se de um conceito j explorado por Smalltalk, que o de garbage collection (coleta de lixo). Sua funo a de varrer a memria de tempos em tempos, liberando automaticamente os blocos que no esto sendo utilizados. Se por um lado isso pode deixar o aplicativo um pouco mais lento, por manter uma thread paralela que dura todo o tempo de execuo do programa, evita problemas como referncias perdidas e avisos de falta de memria quando sabese que h megas e megas disponveis na mquina.

9. 2. 7. Machine independent
Uma das caractersticas de Java que tornou-a ideal para seu uso na elaborao de aplicativos distribudos foi a sua independncia de plataforma. Afinal, a Internet uma grande "salada" de computadores de todos os tipos, dotados dos mais diversos sistemas operacionais e ambientes grficos que se possa imaginar. Java consegue essa independncia devido ao fato de que o compilador Java no gera instrues especficas a uma plataforma, mas sim um programa em um cdigo intermedirio, denominado bytecode, que pode ser descrito como uma linguagem de mquina destinada a um processador virtual que no existe fisicamente. Na realidade, existe. A Sun est desenvolvendo, j com alguns resultados prticos, microprocessadores cuja linguagem nativa o Java: o picojava, microjava e ultrajava. O cdigo Java compilado pode ento ser executado por um interpretador de bytecodes, a JVM - Java Virtual Machine, que um emulador de processador.

9. 2. 8. Polimorfismo

44

45

O Polimorfismo uma caracterstica muito importante em sistemas orientados a objetos. Termo proveniente do grego que significa "muitas formas". Atravs dele conseguimos realizar vrias tarefas. Existem 4 tipos de polimorfismo divididos em 2 categorias (todos eles so implementados em Java), so descritos a seguir:

9. 2. 8. 1. Polimorfismo Universal
Como o prprio nome diz, ele universal, ou seja, ele pode ser aplicado em vrios casos, logo no consegue saber quantas vezes ser aplicado o polimorfismo. Trabalha potencialmente num conjunto infinito de tipos, de modo disciplinado. Este polimorfismo possui duas formas:

9. 2. 8. 2. Paramtrico ou parametrizao
A ideia do polimorfismo universal paramtrico ao definir um elemento(que pode ser uma classe, um mtodo ou alguma outra estrutura da linguagem), a definio do tipo sozinha ela incompleta, ela precisa parametrizar este tipo, ou seja, teoricamente no existiria o tipo sozinho, o que sim existe e o tipo de alguma coisa de alguma coisa, por exemplo, uma list no seria s do tipo list, e sim do tipo list de elefantes. Vale lembrar que este polimorfismo s foi implementado em Java a partir da verso 1.5. Exemplo de polimorfismo paramtrico em Java: // Aqui no exemplo criado um ArrayList do tipo ArrayList de Aluno, e no ArrayList, isso o polimorfismo universal paramtrico

ArrayList<Aluno> alunos = new ArrayList<Aluno>(); // aqui h o como aluno Aluno a = new Aluno("Rafael"); alunos.add(a);

Aluno x = alunos.get(0); System.out.println("Nome: " + x.getNome());

9. 2. 8. 3. Incluso
quando voc tem um ponteiro para me e ele consegue apontar para um objeto da filha, j que esse polimorfismo muito bsico, difcil voc conseguir outras coisas sem ele, por isso boa parte das linguagens orientadas a objetos conhecidas implementam esse polimorfismo. Exemplo em Cdigo:
class Porca { int faces; void acopleETorca();

45

46 } class Porca8mm extends Porca { void acopleETorca(){ if (...) ... } } class Porca10mm extends Porca { void acopleETorca(){ for (...) ... } }

9. 2. 8. 4. Polimorfismo Ad-Hoc
implementado quando queremos definir uma coisa especfica, ou seja, este polimorfismo, diferente do universal, no pode ser usado em todo lugar, logo sabemos quantas vezes ele ser aplicado.

9. 3. Arquitetura e Ferramentas
O processo de compilao de um programa Java feito de acordo com os seguintes passos: o cdigo fonte (extenso .java) compilado e armazenado em um arquivo de extenso .class. De cara, percebe-se a impossibilidade de utilizar-se de DOS como sistema operacional para a elaborao de aplicativos Java, uma vez que o mesmo tem um suporte limitado a nomes de arquivos. Mas essa limitao quanto ao nome dos arquivos somente a razo aparente da noportabilidade de Java para DOS. A grande razo reside no fato de que Java foi projetada para sistemas de 32 bits, e s foram escritas Mquinas Virtuais Java para ambientes de 32 bits. A portabilidade de Java depende fortemente da existncia de JVMs que rodem em diversas plataformas. Um programa Java rodar em um computador se existir uma JVM que nele rode. Ao contrrio de programas Java, as JVMs devem ser programas feitos e compilados para mquinas especficas, de forma que sero as JVMs as responsveis pela traduo de bytecodes Java para as linguagens nativas das mquinas. O conjunto de instrues da Mquina Virtual Java otimizado para ser pequeno e compacto, tendo sido elaborado para ser uma espcie de processador RISC virtual: a rapidez da interpretao s vezes sacrificada para garantir esse reduzido conjunto de instrues. O compilador mais utilizado para a transformao de arquivos-fonte java (.java) em arquivos de bytecodes o javac da Sun (h diversos outros compiladores no mercado, mas o javac foi o primeiro e o mais popular ainda hoje).

46

47

Uma vez gerado o arquivo .class, ele deve ser passado JVM instalada no computador. No caso mais comum, a JVM utilizada a distribuda pela Sun em seu JDK (Java Developers Kit), denominada java. Isso no caso de aplicativos. No caso de Applets, os browsers que suportam Java j contm em si uma JVM que interpreta os bytecodes das Applets.

9. 3. 1. Ferramentas para desenvolvimento em Java


A Sun, ao lanar a linguagem Java, ps disposio gratuitamente o pacote JDK - Java Developer's Kit, que inclui, entre outros: Javac - o compilador de arquivos .java para bytecodes .class; Java - a JVM especfica para a plataforma; Appletviewer - visualizador de applets, sem a necessidade de execuo das mesmas num browser. Diversas empresas desenvolveram ambientes para programao em Java, mas por enquanto nenhum deles firmou-se no mercado. Alguns IDEs (Integrated Development Environments) disponveis para shareware ou para compra so mostrados a seguir: Microsoft Visual J++ - A Microsoft, que de incio menosprezou todo o potencial da Internet, e que subestimou Java como uma linguagem promissora, agora "retomou o bonde" e tenta, com o seu VJ++, estabelecer um padro para IDEs Java. Contudo, o VJ++ tem mecanismos intrincados de instalao, consome muito espao em disco e exige a presena do Internet Explorer no computador. Symantec Visual Caf - A Symantec foi uma das poucas a acertarem em ambientes para Java. O seu Symantec Caf fez grande sucesso em 1996, e o Visual Caf parece ser bastante promissor. O ambiente de programao lembra o de Visual Basic. Asymetrix SuperCede - Na tentativa de desenvolver um compilador para Java, a Asymetrix desenvolveu o SuperCede, que peca por ferir um dos principais conceitos de Java: a portabilidade. SuperCede possui um compilador prprio que no gera bytecodes, mas sim cdigo executvel, na tentativa de ganho de performance.

47

48

9. 3. 2. Java e a Internet
Como sabemos, a Internet uma gigantesca "rede" (conceitualmente falando) que liga "zilhares" de computadores entre si. uma rede heterognea, j que diversos tipos de computadores esto ligados a ela. Todos esses computadores utilizam-se do protocolo TCP/IP para comunicarem-se. Como eles so distintos, eles precisam de uma linguagem que no esteja necessariamente amarrada a uma plataforma de hardware/software especfica. Como j vimos, Java mostra-se ideal quanto a esse fator. Uma vez que os programa Java so transmitidos como bytecodes, eles podem rodar em qualquer computador sem necessitar uma nova recompilao, independente da plataforma na qual ele ser executado. Programas Java sempre so carregados no computador cliente e nele executado. H dois tipos bsicos de programas Java: Aplicativos, que so programas como outros quaisquer, e Applets, programas especialmente confeccionados para executarem dentro de uma pgina HTML. Ao abrir uma pgina HTML que tenha inserida em si uma applet Java, esta automaticamente descarregada para seu computador e executada. Da vem a pergunta: h riscos de um vrus infectar o seu computador cliente??? Isso no ocorre, devido a uma srie de limitaes que os projetistas de Java impuseram s applets, por razes de segurana puramente, de forma que nenhuma applet Java seja capaz de "roubar" informaes ou danificar dados do computador. A razo de toda essa segurana reside no fato de que programas Java so compilados em bytecodes que so verificados. Instrues bytecode so muito similares a outros conjuntos de instrues projetados para plataformas especficas, com a diferena de que bytecodes so conferidos atravs de informaes adicionais que eles carregam em si informando a legitimidade ou no do arquivo. Programas C++ em geral chamam funes por endereo. Como o endereo um nmero simples que pode ser construdo de qualquer forma, o programa pode utilizar-se de qualquer nmero para executar uma funo. Java, ao contrrio, tem uma abordagem muito diferente. Mtodos e variveis no so acessados por endereo, mas sim por nomes. a esse processo de verificar quais mtodos e variveis que sero realmente usados e que chamamos verificao, que necessrio para garantir que os bytecodes no sofram qualquer adulterao e que continuem obedecendo s restries de Java. Uma vez verificado o bytecode, a JVM ir traduzir enfim os nomes de funes para endereos.

10. Banco de Dados Oracle


O Oracle um SGBD (sistema gerenciador de banco de dados) que surgiu no fim dos anos 70, quando Larry Ellison vislumbrou uma oportunidade que outras companhias no haviam percebido, quando encontrou uma descrio de um prottipo funcional de um banco de dados relacional e descobriu que nenhuma empresa tinha se empenhado em comercializar essa tecnologia. A Oracle Corporation foi fundada em 1977 e tem escritrios em mais de 145 pases. Em 2004, empregava mais de 43000 pessoas no mundo inteiro. Ellison e os co-fundadores da Oracle Corporation, Bob Miner e Ed Oates, perceberam que havia um tremendo potencial de negcios no modelo de banco de dados relacional tornando assim a maior empresa de software empresarial do mundo. Lawrence J. Ellison (Larry Ellison) foi o presidente (CEO - Chief Executive Officer) da

48

49

empresa por vrios anos. Depois de ser diretor geral da empresa at 2003, foi sucedido por Jeff Henley em 2004. Ellison mantm seu posto de CEO. Alm da base de dados, a Oracle desenvolve uma sute de desenvolvimento chamada de Oracle Developer Suite, utilizada na construo de programas de computador que interagem com a sua base de dados. A Oracle tambm criou a linguagem de programao PL/SQL, utilizada no processamento de transaes.

10. 1. Edies
Alm das diferentes verses do software de gerenciamento de banco de dados Oracle, a Oracle Corporation subdivide seu produto em "edies" variveis - aparentemente por razes de marketing e controle de licenas. Enterprise Edition (EE) inclui mais funcionalidades que a 'Standard Edition', especialmente nas reas de performance e segurana. A Oracle Corporation licencia este produto na base de usurios ou de ncleos de processamento, normalmente para servidores com 4 ou mais UCPs. EE no tem limite de memria e pode utilizar clusterizao usando o software Oracle RAC. Standard Edition (SE) contem a a funcionalidade bsica de banco de dados. A Oracle Corporation licencia este produto na base de usurios ou de sockets, normalmente para servidores com um quatro UCPs. Se o nmero de UCPs exceder 4, o usurio deve migrar para a licensa Enterprise. SE no possui limite de memria e pode utilizar clusterizao com o Oracle RAC sem custo adicional. Standard Edition One, introduzido com o Oracle 10g, possui algumas restries de funcionalidades adicionais. A Oracle Corporation comercializa-o para uso em sistemas com uma ou duas UCPs. Ela no possui limitaes de memria. Express Edition ('Oracle Database XE'), introduzido em 2005, oferece o Oracle 10g livre para distribuio nas plataformas Windows e Linux (com uma limitao de apenas 150 MB e restrita ao uso de apenas uma UCP, um mximo de 4 GB de dados de usurio e 1 GB de memria). O suporte para esta verso feito exclusivamente atravs de fruns on-line, sem o suporte da Oracle. Oracle Personal Edition fornece a funcionalidade de "alto fim" da Enterprise Edition mas comercializada (e licenciada) para desenvolvedores especficos que trabalham em estaes de trabalho pessoais. Oracle Database Lite, destinada para rodar em dispositivos mveis. O banco de dados, localizado parcialmente no dispositivo mvel, pode sincronizar com uma instalao baseada em servidor.

11. Banco de Dados MySQL


O MySQL um sistema de gerenciamento de banco de dados (SGBD), que utiliza a linguagem SQL (Linguagem de Consulta Estruturada, do ingls Structured Query Language) como

49

50

interface. atualmente um dos bancos de dados mais populares, com mais de 10 milhes de instalaes pelo mundo. Entre os usurios do banco de dados MySQL esto: NASA, Friendster, Banco Bradesco, Dataprev, HP, Nokia, Sony, Lufthansa, U.S. Army, U.S. Federal Reserve Bank, Associated Press, Alcatel, Slashdot, Cisco Systems, Google e outros.

11. 1. Histria
O MySQL foi criado na Sucia por dois suecos e um finlands: David Axmark, Allan Larsson e Michael "Monty" Widenius, que tm trabalhado juntos desde a dcada de 1980. Hoje seu desenvolvimento e manuteno empregam aproximadamente 400 profissionais no mundo inteiro, e mais de mil contribuem testando o software, integrando-o a outros produtos, e escrevendo a respeito dele. No dia 16 de Janeiro de 2008, a MySQL AB, desenvolvedora do MySQL foi adquirida pela Sun Microsystems, por US$ 1 bilho, um preo jamais visto no setor de licenas livres. No dia 20 de Abril de 2009 a Oracle compra a Sun Microsystems e todos o seu produtos, incluindo o MySQL. Aps investigaes da Comisso Europeia sobre a aquisio para evitar formao de monoplios no mercado a compra foi autorizada e hoje a Sun faz parte da Oracle. O sucesso do MySQL deve-se em grande medida fcil integrao com o PHP includo, quase que obrigatoriamente, nos pacotes de hospedagem de sites da Internet oferecidos atualmente. Empresas como Yahoo! Finance, MP3.com, Motorola, NASA, Silicon Graphics e Texas Instruments usam o MySQL em aplicaes de misso crtica. A Wikipdia um exemplo de utilizao do MySQL em sites de grande audincia. O MySQL hoje suporta Unicode, Full Text Indexes, replicao, Hot Backup, GIS, OLAP e muitos outros recursos de banco de dados.

11. 2. Caractersticas
Portabilidade (suporta praticamente qualquer plataforma atual); Compatibilidade (existem drivers ODBC, JDBC e .NET e mdulos de interface para diversas linguagens de programao, como Delphi, Java, C/C++, C#, Visual Basic, Python, Perl, PHP, ASP e Ruby) Excelente desempenho e estabilidade; Pouco exigente quanto a recursos de hardware; Facilidade de uso; um Software Livre com base na GPL; Contempla a utilizao de vrios Storage Engines como MyISAM, InnoDB, Falcon, BDB, Archive, Federated, CSV, Solid Suporta controle transacional; Suporta Triggers;

50

51

Suporta Cursors (Non-Scrollable e Non-Updatable); Suporta Stored Procedures e Functions; Replicao facilmente configurvel; Interfaces grficas (MySQL Toolkit) de fcil utilizao cedidos pela MySQL Inc.

12. Banco de Dados SQL Server


O MS SQL Server um SGBD - sistema gerenciador de Banco de dados relacional criado pela Microsoft em parceria com a Sybase em 1988 e inserido como produto complementar do Windows NT. Ao final da parceria, em 1994, a Microsoft continuou aperfeioando o produto. Com a nova verso o Microsoft SQL Server 2008 fornecida uma plataforma de dados confivel, produtiva e inteligente que permite que voc execute suas aplicaes de misso crtica mais exigentes, reduza o tempo e o custo com o desenvolvimento e o gerenciamento de aplicaes e entregue percepo que se traduz em aes estratgicas em toda sua organizao.O SQL um Banco de dados robusto e usado por sistemas corporativos dos mais diversos portes.

12. 1. Produtivo
Para obter as vantagens das novas oportunidades no dinmico mundo corporativo, as empresas precisam de capacidades para rapidamente criar e implantar solues baseadas em dados. O Microsoft SQL Server 2008 reduz o tempo e o custo de gerenciamento e de desenvolvimento de aplicaes. Gerenciamento Baseado em Diretivas Gerenciamento Baseado em Diretivas: O Gerenciamento Baseado em Diretivas uma estrutura para o gerenciamento de umas ou mais instncias de SQL Server 2008. Use essa estrutura com o \MS-SQL Server Management Studio para criar diretivas que gerenciem entidades no servidor, tais como a instncia de MS-SQL Server, bancos de dados e outros objetos do SQL Server. Instalao Dinmica: O SQL Server 2008 introduz melhorias significantes ao ciclo de vida de servio para o MS-SQL Server, atravs da re-engenharia da instalao, configurao e arquitetura. Essas melhorias separam a instalao dos bits fsicos do hardware, a partir de uma configurao do MS-SQL Server, permitindo que as empresas e os parceiros de software forneam as configuraes de instalao recomendadas. Coleo de Dados de Desempenho: A resoluo de problemas e o ajuste de desempenho so tarefas demoradas para o administrador. Para fornecer percepo de desempenho aos administradores, o MS-SQL Server 2008 inclui uma coleo de dados de desempenho mais ampla, um novo repositrio de dados centralizado para armazenar os dados de desempenho e novas ferramentas para relatrio de monitoramento. Simplifique o Desenvolvimento de Aplicaes LINQ (Language Integrated Query): Permite que os desenvolvedores utilizem objeto para enderear as consultas em relao aos dados usando uma linguagem de programao gerenciada,

51

52

como C# ou VB.NET, ao invs das declaraes SQL. Permite consultas transparentes, intuitivas e orientadas ao conjunto, escritas em linguagens.NET para serem executas em ADO.Net (LINQ para SQL), ADO.Net DataSets (LINQ para DataSets), ADO.NET Entity Framework (LINQ para Entidades) e provedor de mapeamento de servios de dados de entidade. Use o novo provedor LINQ para SQL, que permite que os desenvolvedores usem a LINQ diretamente nas tabelas e colunas do SQL Server 2008. Servios de Objeto ADO.NET: A camada de servios de objeto do ADO.NET permite a materializao, o acompanhamento de mudanas e a persistncia dos dados como objetos CLR. Os desenvolvedores que usam o ADO.NET Framework podem programar em um banco de dados usando os objetos CLR que so gerenciados pelo ADO.NET. O SQL Server 2008 introduz um suporte mais eficiente e otimizado, que melhora o desempenho e simplifica o desenvolvimento. Armazene Qualquer Informao DATA/HORA: O MS-SQL Server 2008 introduz novos tipos de dados de data e hora, conforme as especificaes do padro SQL: DATA somente um tipo de data HORA somente um tipo de hora DATETIMEOFFSET um tipo datetime com suporte a fusos horrios DATETIME2 um tipo datetime c/ maior frao de segundos e quantidade de anos que o tipo DATETIME existente Os novos tipos de dados permitem que as aplicaes tenham tipos de dados e de hora separados, ao mesmo em que fornecem grande variedade de dados ou preciso definida pelo usurio para os valores de hora. HIERARCHY ID: Permite que as aplicaes de banco de dados modelem as estruturas de rvores de uma maneira mais eficiente do que a atualmente possvel. O novo tipo de sistema, HierarchyId, pode armazenar os valores que representam os ns em uma rvore hierrquica. Este novo tipo ser implementado como um CLR UDTe expe vrios mtodos nativos teis e eficientes para criar e operar nos ns hierrquicos com um flexvel modelo de programao. Dados FILESTREAM: Permite que grandes dados binrios seja armazenados diretamente no sistema de arquivos NTFS, ao mesmo tempo em que preserva uma parte integrante do banco de dados e mantm a consistncia transacional. Permite o escalonamento de grandes dados binrios tradicionalmente gerenciados pelo banco de dados para serem armazenados fora do banco de dados, em um armazenamento mais vivel financeiramente. Pesquisa de Texto Completamente Integrada: A pesquisa de Texto Completamente Integrada torna transparente a transio entre a pesquisa de texto e os dados relacionais e permite que os usurios utilizem os ndices de texto para desenvolverem pesquisas de texto com alta velocidade e em grandes colunas de texto.

52

53

Colunas Dispersas: Os dados NULL no consomem nenhum espao fsico, o que fornece uma maneira altamente eficiente de gerenciar os dados null (vazios) em um banco de dados. Por exemplo, as Colunas Dispersas permitem que os objetos de modelos, que tipicamente tm nmeros com valores nulos, sejam armazenados em um banco de dados do MS-SQL Server 2005 sem ter custos grandes com o espao. Tipos Amplos Definidos pelo Usurio: O MS-SQL Server 2008 elimina o limite de 8KB para os Tipos Definidos pelo Usurio (UDTs), permitindo que os usurios ampliem bastante o tamanho de seus UDTs. Tipos de Dados Espaciais: Cria capacidades espaciais em suas aplicaes, usando o suporte para dados espaciais. Implemente solues Round Earth com o tipo de dado geography. Use as coordenadas de latitude e longitude para definir as reas de superfcie da Terra. Implemente solues Flat Earth com o tipo de dado geometry. Armazene polgonos, pontos e linhas que esto associados com as superfcies planas e dados naturalmente planos, tal como espaos interiores.

12. 2. Inteligente
O MS-SQL Server 2008 fornece uma plataforma abrangente, entregando inteligncia onde seus usurios precisam dela. Integre Qualquer Tipo de Dados Compresso de Backup: Manter online os backups baseados em disco caro e demorado. Com a compresso de backup do SQL Server 2008 exige-se menos armazenamento para manter os backups online e os backups so executados de forma muito mais rpida porque exige-se menos I/O (entrada/sada) de disco. Paralelismo de Tabela Particionada: As parties permitem que as empresas gerenciem grandes tabelas de maneira mais efetiva, quebrando-as de forma transparente em blocos gerenciveis de dados. O SQL Server 2008 foi construdo sobre os avanos de particionamento no SQL Server 2005, melhorando o desempenho nas grandes tabelas particionadas. Otimizaes de Consulta Star Join: O MS-SQL Server 2008 fornece um aprimorado desempenho de consulta para os cenrios comuns de data warehouse. As Otimizaes de Consulta Star Join reduzem o tempo de resposta consulta, reconhecendo os padres de unio de data warehouse. Grouping Sets: Os Grouping Sets so uma extenso da clusula GROUP BY, que permitem que os usurios definam mltiplos agrupamentos na mesma consulta. Os Grouping Sets produzem um nico conjunto de resultados que equivalente a uma UNION ALL de linhas agrupadas de forma diferente, tornando a consulta de agregao e relatrios mais fceis e rpidos.

53

54

Captura de Alteraes de Dados: Com o recurso Captura de Alteraes de Dados, as mudanas so capturadas e colocadas em tabelas de alteraes. Ele captura o contedo completo das alteraes e mantm a consistncia na tabela cruzada e, at mesmo, trabalha nas alteraes de esquemas. Isto permite que as organizaes integrem as informaes mais recentes no data warehouse. Declarao MERGE SQL: Com a introduo da Declarao MERGE SQL, os desenvolvedores podem controlar os cenrios comuns de data warehousing de maneira mais efetiva, por exemplo, verificando se uma linha existe e, depois, fazendo uma insero ou atualizao. Melhorias de Pipeline do MS-SQL Server Integration Services (SSIS): Os pacotes de Integrao de Dados agora podem escalonar de maneira mais efetiva, fazendo uso dos recursos disponveis e gerenciando as maiores cargas de trabalho da empresa. O novo design melhora a escalabilidade do tempo de execuo em mltiplos processadores. Pesquisas Persistentes do MS-SQL Server Integration Services (SSIS): A necessidade de realizar pesquisas uma das operaes de ETL mais comuns. Isto prevalece especialmente no data warehousing, onde os registros de dados precisam usar as pesquisas para transformarem as chaves corporativas em seus substitutos correspondentes. O SSIS aumenta o desempenho das pesquisas para dar suporte s tabelas maiores. Entrega de Informaes Relevantes Desempenho e Escalonamento das Anlises: O MS-SQL Server 2008 conduz as anlises mais amplas com capacidades analticas avanadas e com agregaes e computaes mais complexas. As novas ferramentas de design de cubo ajudam os usurios a agilizarem o desenvolvimento da infra-estrutura de anlise, permitindo que eles construam solues para a otimizao de desempenho. Computaes de Bloqueio: As Computaes de Bloqueio fornecem melhorias significantes ao desempenho, permitindo que os usurios aumentem a profundidade de suas hierarquias e a complexidade das computaes. Writeback: O novo recurso de writeback habilitado a MOLAP do MS-SQL Server 2008 Analysis Services remove a necessidade de consultar as parties ROLAP. Este recurso fornece aos usurios cenrios avanados de writeback dentro das aplicaes analticas sem sacrificar o tradicional desempenho do OLAP. Permite Uma Maior Percepo Mecanismo de Relatrio Corporativo: Os relatrios podem facilmente serem entregues a organizao inteira, tanto interna como externamente, com a implantao e a configurao simplificadas. Isto permite que os usurios facilmente criem e compartilhem relatrios de qualquer tamanho e complexidade. Implantao de Relatrios na Internet: Os clientes e fornecedores podem ser alcanados com menos esforos implantando-se relatrios na Internet.

54

55

Gerencie a Infra-Estrutura de Relatrios: Aumente o suporte e a capacidade de controlar o comportamento do servidor com o gerenciamento de memria, consolidao de infra-estrutura e configurao mais fcil atravs de uma API e armazenamento centralizado para todos os ajustes de configurao. Melhorias no Report Builder: Construa facilmente relatrios ad-hoc e de autor com qualquer estrutura atravs do Report Designer. Autenticao Nativa de Formulrios: A autenticao nativa de formulrios permite que os usurios facilmente alternem entre Janelas e Formulrios. Report Server Application Embedding: O recurso Report Server Application Embedding permite que as URLs em relatrios e assinaturas apontem para o front-end das aplicaes. Integrao com o Microsoft Office: O MS-SQL Server 2008 fornece nova renderizao do Word, que permite que os usurios utilizem os relatrios diretamente de dentro do Microsoft Office Word. Alm disso, a renderizao existente do Excel foi muito aprimorada para acomodar o suporte aos recursos, como regies de dados aninhados, sub-relatrios, bem como melhorias de clulas mescladas. Isto permite que os usurios mantenham a fidelidade do layout e melhora a utilizao geral dos relatrios a partir de aplicaes do Microsoft Office.

55

56

CONSIDERAES FINAIS
Pode se concluir que baseado nesse trabalho e nas pesquisas realizadas para criar o mesmo, que a engenharia da computao a cincia que estuda a estrutura de computadores, porm a estrutura que essa engenharia estuda, no apenas estrutura fisica (hardwares) mas tambm estrutura logica (softwares), que dentro da engenharia, falando de hardware, estruturada desde os menos componentes, que no trabalho foi citado os resistores, capacitores e transistores, que so a base dos circuitos dos hardwares, desde a placa-me at o ncleo do HD. E falando de sofware, a estrutura apresentada a base dos software, as linguagens de programao, que foi citada as linguagens C, C++, C# e Java, que de modo geral, so as liguagens predominantes e de uso mais facil na criao de sofwares, desde programas editores de imagens at sistemas operacionais. E, sem deixar de fora, os bancos de dados (SGBD Sistemas gerenciadores de bancos de dados) que tem a funo principal, de auxiliar os softwares, a armazenar as informaes primordiais de forma organizada e de facil entendimento, e de modo que o computador possa ler e enterpretar as informaes.

56

57

REFERNCIAS
http://pt.wikipedia.org/wiki/Capacitor http://eletronicos.hsw.uol.com.br/capacitor.htm http://pt.wikipedia.org/wiki/Resistor http://discipulosdeeinstein.vilabol.uol.com.br/Resumos/Resistores.html http://pt.wikipedia.org/wiki/Transstor http://pt.scribd.com/doc/7155293/Eletronica-Transistores http://pt.wikipedia.org/wiki/C_(linguagem_de_programao) http://www.dca.ufrn.br/~xamd/dca0800/apostila_C.pdf http://www.inf.puc-rio.br/~maia/apres/cpplang.pdf http://pt.wikipedia.org/wiki/C%2B%2B http://paginas.fe.up.pt/~jpf/talks/CSharpFEUP10SET2001.pdf http://altabooks.tempsite.ws/capitulos_amostra/programando.pdf http://pt.wikipedia.org/wiki/C# http://pt.wikipedia.org/wiki/Java_(linguagem_de_programao) http://www.infowester.com/lingjava.php http://www.cin.ufpe.br/~arfs/introjava.pdf http://pt.wikipedia.org/wiki/Oracle_(banco_de_dados) http://pt.wikipedia.org/wiki/MySQL http://www.infowester.com/postgremysql.php http://pt.wikipedia.org/wiki/Microsoft_SQL_Server http://www.luis.blog.br/o-que-e-banco-de-dados.aspx

57