Você está na página 1de 53

Pensando em Java, 3 ed. Reviso 4.

0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

Pensando em Java, 3 ed. Reviso 4.0


[ Viewing Hints ] [ Book Home Page ] [ Free Newsletter ] [ Seminars ] [ Seminars on CD ROM ] [ Consulting ]

1: Introduo a Objetos
[en-usa] Dividimos a [Traduzir] e atribuimos [+ Trad.]

natureza em partes, organizando-a em conceitos, significados como o fazemos, principalmente por sermos as partes de um acordo que se sustenta na nossa comunidade verbal e est codificado em nossos padres lingsticos ... no podemos conversar seno obedecendo organizao e classificao de dados que o acordo determina. Benjamin Lee Whorf (1897-1941)

[en-usa] A gnese da revoluo dos computadores foi numa mquina. A [Traduzir] gnese de nossas linguagens de programao portanto tende a [+ Trad.]

parecer com essa mquina.

[en-usa] Mas os computadores no so mais mquinas do que [Traduzir] ferramentas de amplificao da mente (bicicletas para [+ Trad.]

a mente, como Steve Jobs gosta de dizer) e um tipo diferente de meio de expresso. Conseqentemente, as ferramentas esto comeando a parecer menos com mquinas e mais com partes de nossas mentes, e tambm com outras formas de expresso como a escrita, a pintura, a escultura, a animao e o cinema. A programao orientada a objetos (POO) parte desse movimento em direo ao uso do computador como um meio de expresso. Comentrios (em ingls) captulo introduzir os conceitos bsicos da POO, incluindo uma viso geral de mtodos de desenvolvimento. Este captulo,

[en-usa] Este [Traduzir]

1 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

[+ Trad.]

e este livro, assumem que o leitor j tenha tido experincia com uma linguagem de programao procedural, embora no necessariamente C. Se voc acha que precisa de uma melhor preparao na programao e sintaxe de C antes de explorar este livro, voc deve trabalhar com o CD ROM Foundations for Java anexo no final do livro. Comentrios (em ingls)

[en-usa] Este captulo apresenta uma base para os estudos, alm de [Traduzir] material suplementar. Muitas pessoa no se sentem confortvei [+ Trad.]

de se aventurar na programao orientada a objetos sem ter uma viso mais completa do assunto. Dessa forma, h muitos conceitos introduzidos aqui para dar ao leitor uma viso slida do que POO. Entretanto, outras pessoas podem no conseguir entender os conceitos mais gerais antes de ver como a mecnica, mais especfica funciona; estas pessoas podem ficar bloqueadas e perdidas sem algum cdigo para mexer. Se voc fizer parte deste ltimo grupo, e estiver vido para conhecer a linguagem, fique vontade para pular este captulopular neste ponto no o impedir de escrever programas nem de aprender a linguagem. No entanto, em algum ponto, voc desejar voltar aqui para completar o seu conhecimento, de forma que possa entender porque os objetos so importantes e como desenvolver com eles. Comentrios (em ingls)

O progresso da abstrao
[en-usa] Todas a [Traduzir] Pode-se [+ Trad.]

linguagens de programao provem abstraes. argumentar que a complexidade dos problemas passveis de soluo est diretamente ligada ao tipo e qualidade da abstrao. Por tipo quero dizer, O que que voc est abstraindo?. A linguagem assembly uma pequena abstrao da mquina que a suporta. Muitas das chamadas linguagens imperativas que a seguiram (tais como FORTRAN, BASIC, e C) eram abstraes da linguagem assembly. Estas linguagens so melhorias considerveis em relao linguagem assembly, mas sua abstrao primria ainda requer que se pense em termos da estrutura do computador em vez da estrutura do problema que se tenta resolver. O programador precisa estabelecer a associao entre o modelo da mquina (no espao de solues, que onde se modela o problema, no caso um computador) e o modelo do problema que est efetivamente sendo resolvido (no espao de problemas, que onde o problema existe). O esforo requerido para realizar este mapeamento, e o fato de ele ser extrnseco linguagem de programao, produz programas difceis de escrever e caros

2 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

para manter, e como efeito colateral criou toda a indstria dos mtodos de programao. Comentrios (em ingls)
[en-usa] A alternativa modelagem da mquina modelar [Traduzir] Linguagens antigas, como LISP e APL, escolheram [+ Trad.]

o problema. vises particulares do mundo (Todos os problemas so, no final das contas, listas ouTodos os problemas so algoritmicos, respectivamente). PROLOG transforma todos os problemas em cadeias de decises. Algumas linguagens foram criadas para programao baseada em restries, outras para programao exclusivamente atravs da manipulao de smbolos grficos. (A segunda provadamente restritiva demais.) Cada uma dessas estratgias apresenta uma boa soluo para a classe de problemas para a qual so projetadas, mas quando se pisa fora desse domnio, elas ficam complicadas e ineficazes.Comentrios
(em ingls)

[en-usa] A estratgia da orientao a objetos vai um passo adiante, [Traduzir] provendo ferramentas para o programador representar [+ Trad.]

elementos no espao de problemas. Esta representao geral o suficiente de forma que o programador no fique restrito a nenhum tipo particular de problema. Referimo-nos aos elementos no espao de problemas e s suas representaes no espao de solues como objetos. (Voc tambm precisar de outros objetos que no tm anlogos no espao de problemas.) A idia que o programa pode se adaptar linguagem do problema adicionando-se novos tipos de objetos, de forma que, quando se l o cdigo descrevendo a soluo, l-se palavras que tambm expressam o problema. Essa uma abstrao de linguagem mais flexvel e poderosa do que o que tivemos antes. Assim, a POO permite que se descreva o problema em termos do problema, em vez de faz-lo em termos do computador onde a soluo rodar. Mas ainda h uma conexo com o computador: cada objeto parece um pouco com um pequeno computadorele tem um estado, e tem operaes que se pode pedi-lo para realizar. No entanto, isto no parece uma analogia assim to ruim a objetos no mundo realeles tm caractersticas e comportamentos. Comentrios (em
ingls)

[2]

[en-usa] Alan Kay resumiu as cinco caractersticas bsicas do [Traduzir] a primeira lguagem orientada a objeto de sucesso e [+ Trad.]

Smalltalk, uma das lnguagens no qual o Java foi baseado. Estas caractersticas representam a pura aproximao a programao orientada a objeto : Comentrios (em ingls) 1. Tudo um objeto. Pense num objeto como uma varivel

3 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

2.

3.

4.

5.

imaginria; este armazena dados, mas voc pode fazer requisies para o objeto, requisitando a ela para efetuar operaes em si mesmo. Em teoria, voc pode se apropriar de qualquer componente conceitual do problema que voc esta tentando resolver (cachorros, predios, servios, etc.) e representar este como um objeto em seu programa. Feedback Um programa um conjunto de objetos que se comunicam entre eles atravs da emisso de mensagens. Para fazer a requisio a um objeto, voc envia uma mensagem para aquele objeto. Mais concretamente, voc pode pensar numa mensagem como a requisio de uma chamada a um mtodo que pertence a um objeto em particular.Feedback Cada objeto composto por outros objetos. De outro ponto de vista, voc cria um novo tipo de objeto fazendo um pacote contendo objetos j existentes. Assim, voc pode construir uma complexidade num programa enquanto esconde esta atravs da simplicidade dos objetos. Feedback Cada objeto tem um tipo. Usando o jargo, cada objeto uma instncia de uma classe, em que classe o sinnimo de tipo. A mais distinta caracterstica de uma classe Que tipo de mensagens voc pode enviar para ela? Feedback Todos os objetos de um tipo em particular podem receber as mesmas mensagens. Este atualmente a indicador carregado, como voc ir ver mais tarde. Por isto um objeto do tipo crculo tambm um objeto do tipo figura, um crculo garante a aceitar as mensagens da figura. Isto significa que voc pode escrever cdigo que fala para a figura e automaticamente interpretar qualquer coisa que se comporte na descrio da figura. Esta substituio um dos conceitos mais poderosos da POO. Feedback oferece uma descrio mais sucinta de um objeto:

[en-usa] [Traduzir] Booch [+ Trad.] [en-usa] [Traduzir] Um [+ Trad.]

objeto tem estado, comportamento e identidade.

[en-usa] Isto significa que um objeto tem dados internos (que lhe d [Traduzir] estado), mtodos (para criar comportamento), e cada objeto [+ Trad.]

pode ser unicamente distingido de outro objetopara que isto tenha um senso concreto, cada objeto tem um nico endereo de memria.
[3]
Comentrios (em ingls)

Um objeto tem uma interface


[en-usa] Aristteles foi provavelmente o primeiro a iniciar um [Traduzir] cuidadoso do conceito de tipo; Ele falou "a classe de [+ Trad.]

estudo peixes e a classe de pssaros. A ideia que todos os objetos, enquanto

4 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

nicos, so tambm parte de uma classe de objetos que tem caractersticas e comportamentos em comum foi usada diretamente na primeira lnguagem orientada a objeto, Simula-67, onde introduziu uma nova palavra chave class que introduz um novo tipo num programa. Comentrios (em ingls)
[en-usa] Simula, como o seu nome indica, foi criado para o [Traduzir] desenvolvimento de simulaes como o clssico problema [+ Trad.]

do caixa de banco. Neste, voc tem um grupo de caixas, clientes, contas, transaes e unidades de dinheiroum monte de objetos. Objetos que so identicos exceto pelo seu estado durante uma execuo de programa so agrupados juntos em classes de objetos dai de onde a palavra chave class veio. Criando tipos abstratos de dados (classes) o conceito fundamental na programao orientada a objeto. Tipo de dados abstratos trabalham exatamento como na construo de tipos internos: Voc pode criar variveis do tipo (chamado objetos ou instncias no jargo da orientao a objetos) e manipular estas variveis (chamado enviando mensagens ou requisies; voc envia uma mensagem e um objeto que a processa). Os membros (elementos) de cada classe compartinha as mesmas coisas em comum: cada conta tem um balano, cada caixa pode aceitar um depsito, etc. Ao mesmo tempo, cada membro tem seu prprio estado: cada conta tem um difernte balano, cada caixa tem um nome. Assim, os caixas, clientes, contas, transaes, etc., podem cada um ser representado com uma nica entidade num programa de computador. Esta entidade um objeto, e cada objeto pertence a uma classe particular que define suas caractersticas e comportamentos. Comentrios (em
ingls)

[en-usa] Portanto, muito embora o que realmente fazemos [Traduzir] programao orientada a objetos seja criar novos [+ Trad.]

na tipos de dados, virtualmente todas as linguagens orientadas a objetos usam a palavra-chave class. Quando vir a palavra type pense em class e vice-versa.
[4]
Comentrios (em ingls)

[en-usa] Como uma classe descreve um conjunto de objetos que tm [Traduzir] caractersticas (elementos de dados) e comportamentos [+ Trad.]

(funcionalidade) idnticos, uma classe na verdade um tipo de dado porque um nmero em ponto flutuante, por exemplo, tambm tem caractersticas e comportamento. A diferena que um programador define uma classe para se adequar a um problema em vez de ser forado a usar um tipo de dado existente que foi desenvolvido para representar uma unidade de armazenamento numa mquina. Voc extende a linguagem de programao adicionando novos tipos de dados especficos

5 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

s suas necessidades. O sistema de programao recebe as novas classes e realiza todo o tratamento e verificao de tipos nela que realiza com os tipos internos. Comentrios (em ingls)
[en-usa] A abordagem orientada a objetos no se limita construo de [Traduzir] simulaes. Quer voc concorde ou no que todo programa [+ Trad.]

uma simulao do sistema que voc est desenvolvendo, o uso de tcnicas de POO podem facilmente reduzir um grande conjunto de problemas a uma soluo simples. Comentrios (em
ingls)

[en-usa] Uma vez estabelecida a classe, voc [Traduzir] objetos dessa classe quantos quiser, [+ Trad.]

pode fazer quantos e ento manipular esses objetos como se fossem elementos existentes no problema que voc est tentando resolver. Na verdade, um dos desafios da programao orientada a objetos criar um mapeamento um-para-um entre os elementos no espao do problema e objetos no espao de soluo. Comentrios (em ingls)

[en-usa] Mas como fazer um objeto fazer algo de til para voc? Deve [Traduzir] haver alguma maneira de fazer umpedido ao objeto de forma [+ Trad.]

que ele faa algo, tal como completar uma transao, desenhar algo na tela, ou ligar um interruptor. E cada objeto s pode satisfazer certos pedidos. Os pedidos que voc pode fazer a um objeto so definidos por sua interface, e o tipo o que determina a interface, Um exemplo simples pode ser a representao de uma lmpada:Comentrios (em ingls)

[en-usa] Light lt = new Light(); [Traduzir] lt.on(); [+ Trad.]

[en-usa] A interface estabelece quais pedidos voc pode fazer a um [Traduzir] objeto especfico. Entretanto, precisa haver cdigo em algum [+ Trad.]

lugar para satisfazer o pedido. Isso, junto com os dados ocultos, compe a implementao. Do ponto de vista da

6 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

programao procedural, no to complicado. Um tipo tem um mtodo associado a cada possvel pedido, e quando voc faz um dado pedido a um objeto, o mtodo chamado. Este processo normalmente sumarizado dizendo que voc envia uma mensagem (faz um pedido) a um objeto, e o objeto sabe o que fazer com a mensagem (ele executa o cdigo). Comentrios
(em ingls) [en-usa] Aqui, o nome do [Traduzir] especfico lt, e [+ Trad.]

tipo/classe Light o nome deste objeto Light os pedidos que voc pode fazer a um objeto Light so ligar (on), desligar (off), aumentar a intensidade (brighten), ou diminui-la (dim). Voc cria um objeto Light definindo uma "referncia" (lt) para o objeto e chamando new para pedir um novo objeto daquele tipo. Para enviar uma mensagem ao objeto, voc d o nome do objeto e o conecta mensagem atravs de um ponto. Do ponto de vista do usurio de uma classe pr-definida, basta isso pra programar com objetos. Comentrios (em ingls) da Linguagem de representada por uma caixa, com o nome do tipo na parte superior da caixa, os membros de dados (se voc decidir descrev-los) na parte do meio, e os mtodos (as funes que pertencem a este objeto, que recebem as mensagens que voc enviar ao objeto) na parte de baixo. comum mostrar apenas o nome da classe e os mtodos pblicos nos diagramas de UML, de forma que a perte do meio no mostrada. Se voc s estiver interessado no nome da classe, ento a parte de baixo tambm no precisa ser mostrada. Comentrios (em ingls)

[en-usa] O diagrama acima segue o formato [Traduzir] Modelagem Unificada . Cada classe [+ Trad.]

Um objeto presta servios


[en-usa] Enquanto voc est tentando desenvolver ou entender a [Traduzir] estrutura de um programa, uma das melhores maneiras de [+ Trad.]

pensar sobre objetos como prestadores de servio. O prprio programa que voc est fazendo prestar servios ao usurio, e ele far isso usando os servios oferecidos por outros objetos. Seu objetivo produzir (ou melhor ainda, localizar em bibliotecas de cdigo j existentes) um conjunto de objetos que prestem os servios ideais para resolver o seu problema.
Comentrios (em ingls)

[en-usa] Uma maneira [Traduzir] magicamente [+ Trad.]

de comear perguntar se eu pudesse tir-los de uma cartola, que objetos resolveriam o meu problema imediatamente? Por exemplo, suponha que voc

7 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

esteja criando um programa de gerenciamento de livros. Voc pode imaginar alguns objetos que contenha telas de entrada pr-definidas para o gerenciamento de livros, outro conjunto de objetos que realizem os clculos do gerenciamento de livros, e um objeto que lide com a impresso de cheques e recibos em vrios tipos de impressoras. Talvez alguns desses objetos j existam, e para os que ainda no existam, como seriam? Que servios esse objetos prestariam, e que objetos eles precisariam para completar suas obrigaes? Se continuar fazendo isso, voc terminar chegando a um ponto onde poder dizer este objeto parece simples o suficiente para eu sentar e escrev-lo ou Tenho certeza que este objeto j deve existir. Esta uma maneira razovel de decompor um problema num conjunto de objetos.Comentrios (em ingls)
[en-usa] Pensar num objeto como um prestador [Traduzir] benefcio adicional: ajuda a melhorar a [+ Trad.]

de servios tem um coeso do objeto. Alta coeso uma qualidade fundamental do projeto de software: isso significa que os vrios aspectos de um componente de software (tal como um objeto, embora tambm possa se referir a um mtodo ou a uma biblioteca de objetos) se combinam. Um dos problemas que as pessoas tm quando projetam um objeto colocar excessivas funcionalidades em um objeto. Por exemplo, no seu mdulo de impresso de cheques, voc pode decidir que precisa de um objeto que saiba tudo sobre formatao e impresso. Voc provavelmente descobrir que isso demais para um nico objeto, e que o que voc precisa so trs ou mais objetos. Um objeto pode ser um catlogo de todos os possveis layouts de cheques, que possa ser perguntado sobre informaes de como imprimir um cheque. Um objeto, ou um conjunto de objetos, poderia ser uma interface de de impresso genrica que saiba tudo sobre os diferentes tipos de impressoras (mas nada sobre gerenciamento de livroseste um candidato a ser comprado em vez de voc escrev-lo). E um terceiro objeto poderia usar os servios dos outros dois para realizar a tarefa. Dessa forma, cada objeto tem um conjunto coeso de servios que oferece. Em um bom projeto orientado a objetos, cada objeto faz uma coisa bem, mas no tenta fazer muito. Como visto aqui, isso no s permite a descoberta de objetos que poderiam ser comprados (o objeto de interface de impressora), como tambm produz a possibilidade de um objeto que poderia ser usado em outro lugar (o catlogo de layouts de cheques).
Comentrios (em ingls)

[en-usa] Tratar [Traduzir]

os objetos como prestadores de servios uma tima

8 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

[+ Trad.]

ferramenta de simplificao, e tambm utilssimo, no s no processo de projeto como tambm quando algum estiver tentando entender o seu cdigo ou reusar um objetose a pessoa puder ver o valor do objeto baseado nos servios que ele presta, fica muito mais fcil encaix-lo no projeto. Comentrios
(em ingls)

A implementao oculta
[en-usa] til dividir o campo de trabalho em criadores [Traduzir] classescriadores de classes (aqueles que criam [+ Trad.]

de novos tipos de
[5]

dados) e Programadores de aplicaes no lado cliente (os consumidores das classes, que usam os tipos de dados em suas aplicaes). O objetivo do client programmer juntar uma caixa cheia de classes para usar no desenvolvimento rpido de aplicaes. O objetivo do class creator construir uma classe que exponha somente o que for necessrio ao client programmer e mantenha todo o resto oculto. Por qu? Porque se estiver oculto, o client programmer no poder acessar, o que significa que o class creator pode modificar a poro oculta como bem desejar sem se preocupar com o impacto sobre quem quer que seja. A poro oculta normalmente representa as partes internas, mais sensveis, de um objeto, as quais poderiam facilmente ser corrompidas por um client programmer descuidado ou desinformado, portanto, ocultar a implementao reduz bugs no programa. Comentrios (em ingls)
[en-usa] O conceito da ocultao da implementao no pode ser [Traduzir] superenfatizado. Em qualquer relao importante ter limites [+ Trad.]

que sejam respeitados por todas as partes envolvidas. Quando voc cria uma biblioteca, estabelece uma relao com o client programmer, que um programador tambm, mas um que est montando uma aplicao usando a sua biblioteca para isso, possivelmente para montar uma biblioteca maior. Se todos os membros de uma classe estiverem disponveis para todos, ento o client programmer poder fazer qualquer coisa com a classe, sem que haja maneiras de forar regras. Mesmo que voc preferisse que o client programmer no manipulasse diretamente alguns dos membros de sua classe, no h como evitar sem um controle de acesso. Tudo est aberto para o mundo. Comentrios (em ingls) razo para usar controle de acesso client programmers longe das partes que no devem tocarpartes que sejam necessrias operao

[en-usa] Portanto, a primeira [Traduzir] manter as mos dos [+ Trad.]

9 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

interna do tipo de dado, mas no parte das interface que os usurios precisam para resolver os seus problemas especficos. Isto na verdade um servio aos usurios, porque eles podem facilmente ver o que importante e do que podem ignorar.
Comentrios (em ingls) [en-usa] A segunda razo para usar controle de [Traduzir] desenvolvedor de bibliotecas modificar [+ Trad.]

acesso permitir ao o funcionamento interno da classe sem se preocupar como isso afetar o client programmer. Por exemplo, voc poderia implementar uma dada classe de forma simples para facilitar o desenvolvimento, e depois descobrir que ter que reescrev-la para faz-la rodar mais rpido. Se a interface e a implementao estiverem claramente separadas e protejidas, voc poder fazer as modificaes com facilidade.Comentrios (em ingls)

[en-usa] O Java usa trs palavras-chave explicitas para definir os limites [Traduzir] em uma classe: public, private, and protected. Seus usos e [+ Trad.]

significados so bem simples e diretos. Estes especificadores de acesso determinam quem poder usar as definies que as seguem. public significa que o elemento seguinte est disponvel para todos. A palavra-chave private por outro lado, significa que ningum mais pode acessar o elemento exceto voc, o criador do tipo, mtodos internos do tipo. private um muro entre voc e o client programmer. Algum que tente acessar um membro private receber um erro de tempo de compilao. A palavra-chave private receber um erro de tempo de compilao. A palavra-chave protected age como o private, com a excesso que uma classe herdeira tem acesso aos membros protected, mas no aos membros private. A herana ser introduzida em breve. Comentrios (em ingls)

[en-usa] Java tambm possui um acesso padro, que entra em ao [Traduzir] se no for utilizado nenhum dos especificadores mencionados [+ Trad.]

acima. Este normalmente chamado de package access (acesso de pacote) porque as classes podem acessar os membros de outras classes no mesmo pacote, mas fora do pacote aqueles membros parecero ser private. Comentrios (em
ingls)

Reutilizando a implementao
[en-usa] Uma vez criada e testada [Traduzir] representar uma unidade [+ Trad.]

a classe, ela deve (idealmente) de cdigo til. Acontece que essa reusabilidade no assim to fcil de se atingir como muitos esperariam; preciso experincia e viso para produzir um

10 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

projeto de objeto reusvel. Uma vez que voc tenha este projeto, ele pedir para ser reusado. O reuso de cdigo uma das maiores vantagens que as linguagens de programao orientadas a objetos tm. Comentrios (em ingls)
[en-usa] A forma mais simples de reutilizar uma classe usar um objeto [Traduzir] da classe diretamente, mas voc pode tambm incluir um [+ Trad.]

objeto de uma classe em uma nova classe. Ns denominamos esta ao de "criar um objeto membro." Sua nova classe pode ser formada por quaisquer quantidades e tipos de objetos, combinados livremente da maneira que voc necessite para conferir sua nova classe a funcionalidade desejada. Como voc est compondo uma nova classe a partir de classes existentes, este conceito denominado composio (costumamos chamar de agregao as composies que ocorrem dinamicamente). A composio comumente referenciada como uma relao "tem-um", como em "um carro tem um motor." Comentrios (em ingls)

[en-usa] (Este diagrama UML indica a composio com [Traduzir] preenchido, o que indica que existe um carro. [+ Trad.]

um losango Eu usarei tipicamente uma forma mais simples: apenas uma linha, sem o losango, para indicar uma associao.
[6]

Comentrios (em ingls)

[en-usa] A composio trs grande flexibilidade. Os objetos membros [Traduzir] sua nova classe so tipicamente privados, deixando-os [+ Trad.]

da

inacessveis aos client programmers que estiverem usando a classe. Isto permite que voc modifique esses membros sem afetar cdigo j existente dos usurios. Voc tambm pode modificar os objetos membros em tempo de execuo, para modificar dinamicamente o comportamento do seu programa. A herana, que ser descrita a seguir, no tem esta flexibilidade, j que o compilador precisa colocar restries de tempo de compilao em classes criadas com herana. Comentrios (em ingls) orientada

[en-usa] Devido herana ser to importante na programao [Traduzir] a objetos, ela com freqncia muito enfatizada, e o [+ Trad.]

programador novato pode ter a idia de que a herana deve ser usada em todo lugar. Isto pode resultar em projetos ineficazes e muito complicados. Em vez da herana, voc deve olhar primeiro para a composio quando estiver criando classes, j que mais simples e mais flexvel. Se voc tomar essa

11 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

estratgia, seus projetos ficaro mais claros. Quando voc tiver tido mais experincia, ser razoavelmente bvio quando estiver precisando de herana. Comentrios (em ingls)

Herana: reusando a interface


[en-usa] Sozinha, a idia de um objeto [Traduzir] Ela permite a voc empacotar [+ Trad.]

uma ferramenta conveniente. dados e funcionalidade juntos conceitualmente, assim voc pode representar uma idia do espao do problema apropriadamente em lugar de ser forado a usar os idiomas do mecanismo de sustentao. Estes conceitos so expressados com unidades funcionais na linguagem de programao atravs da utilizao da palavra chave class.Comentrios (em ingls) criar uma com funcionalidade similar. Seria melhor se pudssemos pegar a classe existente, clon-la, e ento fazer adies ou modificaes ao clone. Isto efetivamente o que voc obtm com a herana, com a exceo de que se a classe original (diz-se a classe base ou superclasse ou classe pai) for modificada, o clone alterado (diz-se a classe derivada ou classe herdeira ou subclasse ou classe filha) tambm reflete essas mudanas. Comentrios (em ingls)

[en-usa] Seria uma pena, entretanto, ter todo o trabalho de [Traduzir] classe e ento ser forado a criar uma outra, nova, [+ Trad.]

[en-usa] (A seta neste diagrama UML aponta de uma classe derivada [Traduzir] para uma classe base. Como voc ir ver, existe mais [+ Trad.] frequentemente do que uma classe derivada.) Comentrios (em ingls) [en-usa] Um tipo de dado [Traduzir] as restries em [+ Trad.]

realiza mais do que simplesmente descrever um conjunto de objetos; ele tambm possui um relacionamento com outros tipos de dados. Dois tipos de dados podem ter caractersticas e comportamentos em comum,

12 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

mas um tipo pode ter mais caractersticas do que outro e pode tambm manipular mais mensagens (ou manipul-las de modo diferente). A herana expressa esta semelhana entre tipos de dados pelo uso dos conceitos de tipos base e tipos derivados. Um tipo base contm todas as caractersticas e comportamentos que so compartilhados pelos tipos derivados a partir dele. Voc cria um tipo base para representar suas idias centrais sobre algum objeto de seu sistema. Do tipo base, voc deriva outros tipos para expressar as diferentes maneiras pelas quais aquelas idias centrais se concretizam.Comentrios (em ingls)
[en-usa] Por exemplo, uma [Traduzir] pedaos de lixo. O [+ Trad.]

mquina de reciclagem de lixo classifica tipo base "lixo", e cada pedao de lixo tem seu peso, valor, e assim por diante, e cada pedao de lixo pode ser triturado, fundido, ou decomposto. Deste tipo bsico, tipos mais especficos de lixo so derivados, os quais podem ter caractersticas adicionais (uma garrafa tem uma cor) ou comportamentos (alumnio pode ser compactado, ao magnetizvel). Alm disso, alguns comportamentos podem ser diferentes (o valor do papel depende de seu tipo e condio). Usando herana, voc pode construir uma hierarquia de tipos que expresse o problema que voc esta tentando resolver em termos dos tipos existentes no problema.Comentrios (em ingls)

[en-usa] Um segundo exemplo o clssico exemplo da "forma", [Traduzir] possivelmente usado em um sistema de desenho com auxlio [+ Trad.]

do computador (CAD) ou simulao de jogos. O tipo base "forma", e cada forma tem uma medida, uma cor, uma posio e assim por diante. Cada forma pode ser desenhada, apagada, movida, colorida, etc. Deste tipo bsico, tipos especficos de formas so derivados (herdados) - crculo, quadrado, tringulo, e assim por diante - cada um dos quais pode ter caractersticas e comportamentos adicionais. Certas formas podem ser invertidas, por exemplo. Alguns comportamentos podem ser diferentes, como quando voc tenta calcular a rea de uma forma. A hierarquia de tipos incorpora e expressa a ambas, similaridades e diferenas entre as formas. Comentrios (em ingls)

13 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

[en-usa] Modelar a soluo nos mesmos termos do problema [Traduzir] tremendamente benfico porque voc no precisa de uma [+ Trad.]

poro de modelos intermedirios para ir da descrio do problema descrio da soluo. Com os objetos, a hierarquia de tipos o modelo primrio, de modo que voc vai diretamente da descrio do sistema no mundo real para a descrio do sistema em cdigo. De fato, uma das dificuladades que as pessoas tm com o design orientado a objetos que com ele muito simples ir do ponto de partida ao ponto final. Uma mente treinada para procurar por solues complexas pode inicialmente ficar embaraada com esta simplicidade.Comentrios (em ingls) de um tipo existente, voc cria um novo contm no somente todos os membros do tipo existente (embora aqueles declarados como private estejam ocultos e inacessveis), mas, o que mais importante, ele duplica a interface da classe base. Quer dizer, todas as mensagens que voc pode enviar para objetos da classe base voc tambm pode enviar para objetos da classe derivada. Visto que conhecemos o tipo de uma classe atravs das mensagens que podemos enviar para ela, isto significa que a classe derivada do mesmo tipo da classe base. Esta equivalncia entre tipos via herana um dos portais de acesso fundamentais para a compreenso do significado da programao orientada a objetos.Comentrios (em ingls) que

[en-usa] Quando voc herda [Traduzir] tipo. Este novo tipo [+ Trad.]

[en-usa] Visto que a classe base e a classe derivada tm a mesma [Traduzir] interface fundamental, deve haver alguma implementao [+ Trad.]

acompanhe esta interface. Ou seja, tem que existir algum cdigo para ser executado quando um objeto recebe uma determinada mensagem. Se voc simplesmente herda uma

14 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

classe e no faz nada alm disso, os mtodos da interface da classe base vm junto, direto para dentro da classe derivada. O que significa que objetos da classe derivada no tm somente o mesmo tipo, eles tambm tm o mesmo comportamento, o que no particularmente interessante.Comentrios (em ingls)
[en-usa] Voc tem duas maneiras de diferenciar sua nova classe [Traduzir] derivada da classe base original. A primeira absolutamente [+ Trad.]

clara: Voc simplesmente adiciona mtodos novos classe derivada. Estes novos mtodos no fazem parte da interface da classe base. Isto significa que a classe base simplesmente no faz tudo o que voc gostaria que ela fizesse, logo voc adicionou mais mtodos. Este uso simples e primitivo para a herana , s vezes, a soluo perfeita para o seu problema. Entretanto, voc deveria considerar atentamente a possibilidade que que a sua classe base talvez necessite destes mtodos adicionais. Este processo de descoberta e repetico de seu projeto acontece regularmente na programao orientada a objetos.Comentrios (em ingls)

[en-usa] Embora a herana possa s vezes [Traduzir] Java, em que a palavra reservada [+ Trad.]

significar (especialmente em para herana extends) que voc v adicionar novos mtodos interface, isto no necessariamente verdade. A segunda e mais importante maneira de diferenciar sua nova classe mudar o comportamento de um mtodo j existente de uma classe base. Isto conhecido como uma sobrecarga daquele mtodo.Comentrios (em ingls)

15 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

[en-usa] Para sobreescrever um mtodo, voc simplesmente cria uma [Traduzir] nova definio para o mtodo numa classe derivada. Voc esta [+ Trad.]

dizendo, Eu estou usando a mesma mtodo da interface aqui, mas eu quero que isto faa algo diferente para o meu novo tipo. Comentrios (em ingls)

Relacionamentos um vs. como um


[en-usa] Existe uma certa polmica que [Traduzir] de herana: A herana deveria [+ Trad.]

pode acontecer quando se trata sobrecarregar apenas mtodos da classe base (e no adicionar novos mtodos que no estejam na classe base)? Isto significaria que o tipo derivado exatamente o mesmo tipo da classe base j que ele tem exatamente a mesma interface. Como resultado, voc pode substituir um objeto da classe derivada exatamente por um objeto da classe base. Isto pode ser encarado como pura substituio, e frequentemente referido como o princpio da substituio. Em um certo sentido, esta a maneira ideal de tratar a herana. Ns frequentemente nos referimos relao entre a classe base e a classe derivada, neste caso, como uma relao -um, porque voc pode dizer "um crculo uma forma." Um teste para a herana determinar se faz sentido voc expressar como -um ou -uma a relao entre as classes. Comentrios (em ingls) deve adicionar novos elementos de derivada, deste modo estendendo a interface e criando um novo tipo. O novo tipo pode ainda ser substitudo pelo tipo base, mas a substituio no perfeita

[en-usa] H vezes em que voc [Traduzir] interface uma classe [+ Trad.]

16 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

porque seus novos mtodos no so acessveis a partir da classe base. Isto pode ser descrito como uma relao -como-um (minha terminologia). O novo tipo tem a interface do antigo tipo mas ele tambm contm outros mtodos, assim, voc no pode realmente dizer que ele exatamente a mesma coisa. Por exemplo, considere um refrigerador de ar. Suponha que sua casa tem instalados todos os controles para refrigerao; quer dizer, ela tem uma interface que permite que voc controle a refrigerao. Imagine que o refrigerador de ar quebre e que voc o substitua por um condicionador de ar, que pode tanto refrigerar quanto aquecer. O condicionador de ar -como-um refrigerador de ar, mas ele pode fazer mais. J que o sistema de controle da sua casa projetado somente para controlar a refrigerao, ele est restrito a se comunicar apenas com a parte refrigeradora do novo objeto. A interface do novo objeto foi estendida, e o sistema existente no reconhece nada alm da interface original. Comentrios (em ingls)

[en-usa] Naturalmente, uma vez [Traduzir] torna claro que a classe [+ Trad.]

que voc olhe para este projeto, se base "cooling system" (sistema de refrigerao) no suficientemente genrica, e deveria ser renomeada como "temperature control system" (sistema de controle de temperatura) de maneira que pudesse incluir tambm o aquecimento - ponto no qual o princpio da substituio vai funcionar. Entretanto, este diagrama um exemplo do que pode acontecer com projetos no mundo real.
Comentrios (em ingls)

[en-usa] Quando voc v [Traduzir] percepo como [+ Trad.]

o princpio da substituio, natural ter a se esta tcnica (substituio pura) fosse a nica maneira de fazer as coisas e, de fato, legal se seu projeto funcionar desta maneira. Mas voc vai descobrir que h vezes em que igualmente claro que voc deve adicionar

17 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

novos mtodos interface de uma classe derivada. Com a inspeo ambos os casos deveriam ficar razoavelmente bvios.
Comentrios (em ingls)

Objetos intercambiveis atravs do polimorfismo


[en-usa] Quando estiver lidando com hieraquia de tipos, [Traduzir] frequentemente precisar tratar um objeto no [+ Trad.]

voc como do tipo especfico dele, mas, em vez disso, como de seu tipo base. Isto permite a voc escrever cdigo que no depende de tipos especficos. No exemplo da forma, mtodos manipulam formas genricas sem levar em conta que sejam crculos, quadrados, tringulos, ou alguma outra forma que sequer tenha sido definida ainda. Todas as formas podem ser desenhadas, apagadas e movidas, assim, esses mtodos simplesmente enviam uma mensagem para um objeto forma, sem se preocupar sobre como o objeto lida com a mensagem.
Comentrios (em ingls)

[en-usa] Tal cdigo no afetado pela adio de novos tipos, e adicionar [Traduzir] novos tipos o modo mais comum de estender um programa [+ Trad.]

orientado a objetos para que ele manipule novas situaes. Por exemplo, voc pode derivar um novo subtipo de forma chamado pentgono sem modificar os mtodos que lidam somente com formas genricas. Esta habilidade de facilmente estender um projeto derivando novos subtipos uma das maneiras essenciais de encapsular alteraes. Isto melhora consideravelmente os projetos ao mesmo tempo que reduz o custo de manuteno de software. Comentrios (em ingls)

[en-usa] H [Traduzir] de [+ Trad.]

um problema, entretanto, com a tentativa de tratar objetos tipos derivados como seus tipos bsicos genricos (crculos como formas, bicicletas como veculos, cormores como pssaros, etc.). Se um mtodo vai pedir para uma forma genrica desenhar-se a si mesma, ou para que um veculo genrico tome direes, ou a um pssaro genrico para se mover, o compilador no tem como saber em tempo de compilao exatamente qual pedao de cdigo ser executado. Esta toda a questo - quando a mensagem enviada, o programador no precisa saber qual pedao de cdigo ser executado; o mtodo desenhar pode ser aplicado igualmente a um crculo, um quadrado ou um tringulo, e o objeto executar o cdigo apropriado dependendo de seu tipo especfico. Se voc no tem que saber qual pedao de cdigo ser executado,

18 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

ento quando voc adiciona um novo subtipo, o cdigo que ele executa pode ser diferente sem que isso requeira mudanas na chamada do mtodo. Assim, o compilador no precisa saber exatamente qual pedao de cdigo executado, ento, o que ele faz? Por exemplo, no diagrama seguinte o objeto BirdController simplesmente funciona com objetos Bird genricos e no sabe de que tipo eles so exatamente. Isto conveniente do ponto de vista de BirdController porque ele no tem que escrever cdigo especfico para determinar o tipo exato de Bird com que ele est trabalhando ou qual o comportamento daquele Bird. Assim, como isso se d, quando move( ) chamado enquanto ignora o tipo especfico de Bird, o comportamento correto ir ocorrer (um Ganso corre, voa ou nada, e um Pinguim corre ou nada)? Comentrios (em ingls)

[en-usa] A resposta a trana primria na programao orientada a [Traduzir] objetos: o compilador no pode fazer uma chamada de funo [+ Trad.]

da forma tradicional. A chamada de funo gerada por um compilador no-POO causa o que chamamos de early binding (ligao atual), um termo que talvez voc ainda no conhea por nunca ter pensado nisto de qualquer outra forma. Significa que o compilador gera uma chamada a um nome de funo especfico e o linker traduz esta chamada ao endereo absoluto do cdigo a ser executado. Em POO, o programa no pode determinar o endereo do cdigo antes do tempo de execuo, ento algum outro esquema necessrio quando uma mensagem enviada para um objeto genrico.Comentrios (em
ingls)

[en-usa] Para resolver o problema, linguagens orientadas a objeto [Traduzir] utilizam o conceito de late binding (ligao tardia). Quando [+ Trad.]

voc envia uma mensagem para um objeto, o cdigo inicialmente chamado no determinado antes do tempo de execuo. O compilador se assegura que o mtodo existe e

19 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

executa checagem de tipo nos argumentos e valor de retorno (uma linguagem na qual isto no verdade chamada de fracamente tipada), mas no sabe qual seria o codigo exato a ser executado. Comentrios (em ingls)
[en-usa] Para realizar ligao tardia, Java usa um pedao especial de [Traduzir] cdigo em lugar da chamada absoluta. Este cdigo calcula o [+ Trad.]

endereo do corpo do mtodo, usando informaes armazenadas no objeto (este processo coberto com grande detalhamento no Captulo 7). Deste modo, cada objeto pode se comportar de maneira diferente, de acordo com o contedo daquele pedao especial de cdigo. Quando voc envia uma mensagem para um objeto, o objeto realmente no tem idia do que fazer com aquela mensagem. Comentrios (em ingls)

[en-usa] Em algumas linguagens voc tem que declarar explicitamente [Traduzir] que voc quer que um mtodo tenha a flexibilidade da [+ Trad.]

propriedade da ligao tardia (C++ usa a palavra reservada virtual para fazer isto). Nestas linguagens, por padro, os mtodos no so dinamicamente ligados. Em Java, ligao dinmica o comportamento padro e voc no precisa lembrar de adicionar qualquer palavra reservada extra para obter polimorfismo. Comentrios (em ingls)

[en-usa] Considere o exemplo da forma. A famlia de classes (todas [Traduzir] baseadas na mesma interface uniforme) foi desenhada [+ Trad.]

anteriormente neste captulo. Para demonstrar o polimorfismo, precisamos escrever um nico pedao de cdigo que ignora os detalhes especficos de tipo e que somente se comunica com a classe base. Este cdigo despido de informaes especficas do tipo e assim mais simples de escrever e mais fcil de entender. E, se um novo tipo - um Hexgono, por exemplo for adicionado atravs de herana, o cdigo que voc escrever simplesmente funcionar to bem para o novo tipo de Forma quanto funcionou nos tipos que j existiam. Deste modo, o programa extensvel. Comentrios (em ingls) (o que voc logo

[en-usa] Se voc escrever um mtodo em Java [Traduzir] aprender a fazer):Comentrios (em ingls) [+ Trad.] [en-usa] void doStuff(Shape s) { [Traduzir] s.erase(); // ... [+ Trad.] s.draw(); }

20 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

[en-usa] Este mtodo fala com qualquer Shape, assim [Traduzir] do tipo especfico de objeto que ele desenha ou [+ Trad.] Comentrios (em ingls) [en-usa] Circle c = new Circle(); [Traduzir] Triangle t = new Triangle(); [+ Trad.] Line l = new Line(); doStuff(c); doStuff(t); doStuff(l);

independente apaga. Se outras partes do programa utilizarem o mtodo doStuff( ):

[en-usa] as chamadas para doStuff( ) automaticamente funcionam [Traduzir] corretamente, sem levar em considerao o tipo exato do [+ Trad.] objeto. Comentrios (em ingls) [en-usa] [Traduzir] Isto [+ Trad.]

um truque particular inacreditvel. Considere a linha:

[en-usa] doStuff(c); [Traduzir] [+ Trad.]

[en-usa] Oque acontece aqui que um Circle [Traduzir] um mtodo que est aguardando um [+ Trad.]

est sendo passado para Shape. Como um Circle um Shape ele pode ser tratado como um por doStuff( ). Isto , qualquer mensagem que doStuff( ) puder remeter para um Shape, um Circle pode aceitar. Assim completamente seguro e a coisa lgica a fazer. Comentrios (em ingls) processo de tratar um tipo derivado como base de upcasting. O nome cast usado no sentido de atirar em um molde e o up vem da maneira como o diagrama de herana normalmente arrumado, com o tipo base no topo e as classes derivadas distribuidas mais abaixo. Ento, converter para um tipo base mover para cima no diagrama de herana: upcasting. Comentrios (em ingls)

[en-usa] Ns chamamos este [Traduzir] se ele fosse seu tipo [+ Trad.]

21 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

[en-usa] Um programa orientado a objeto contm alguns upcasting em [Traduzir] algum lugar, porque estes so como voc amaina exigncias [+ Trad.]

com voc mesmo do conhecimento a cerca do tipo exato com o qual est trabalhando. Observe o cdigo em in doStuff( ):
Comentrios (em ingls)

[en-usa] [Traduzir] [+ Trad.]

s.erase(); // ... s.draw();

[en-usa] Observe que no diz [Traduzir] for um Square, faa [+ Trad.]

Se voc um Circle, faa isso, se voc aquilo, etc. Se voc escreve este tipo de cdigo, o qual verifica por todos os tipos possveis que um Shape pode ser no momento, confuso e voc precisa alter-lo toda vez que voc adiciona um novo tipo de Shape. Aqui, voc s diz Voc um shape, Eu sei que voc pode erase( ) e draw( ) a voc mesmo, faa isso, e tome cuidado dos detalhes corretamente. Comentrios (em ingls) impressionante sobre o cdigo em doStuff( ) que, de modo, a coisa certa acontece. Chamando draw( ) para Circle causa cdigo diferente a ser executado que quando chamando draw( ) para um Square ou um Line, mas quando a mensagem draw( ) remetida para um Shape annimo, o comportamento correto ocorre baseado no tipo atual de Shape. Isto incrvel porque, como mencionado mais cedo, quando o compilador Java est compilando o cdigo para doStuff( ), ele no pode saber exatamente com que tipos est negociando. Assim ordinariamente, voc aguardaria o fim para chamar a verso de erase( ) e draw( ) para a classe base Shape, e no para um especfico Circle, Square, ou Line. E ainda a coisa certa acontece por causa do polimorfismo. O compilador e o sistema de execuo manuseiam os detalhes;

[en-usa] Oque [Traduzir] certo [+ Trad.]

22 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

tudo que voc precisa por agora saber que ele faz acontecer, e mais importante, como projetar com ele. Quando voc envia uma mensagem para um objeto, o objeto far a coisa certa, mesmo quando um upcasting estiver envolvido. Comentrios (em
ingls)

Classes base abstratas e interfaces


[en-usa] Frequentemente em um [Traduzir] apresente somente uma [+ Trad.]

projeto, voc quer a classe base interface para suas classes derivadas. Isto , voc no quer que algum crie agora um objeto da classe base, somente para mold-la assim como sua interface pode ser usada. Isto complementado por tornar aquela classe abstract pelo uso da palavra chave abstract . Se algum tentar fazer um objeto de uma classe abstract, o compilador o previne. Esta uma ferramenta para reforar um projeto particular. Comentrios (em ingls) palavra chave abstract para ainda no foi implementadocomo uma seta indicando aqui est um mtodo de interface para todos os tipos herdados desta classe, mas at este momento eu no tenho qualquer implementao para ele. Um mtodo abstract pode ser criado somente dentro de uma classe abstract . Quando a classe herdada, aquele mtodo deve ser implementado, ou a classe herdante se torna abstract tambm. Criar um mtodo abstract permite a voc colocar um mtodo em uma interface sem ser forado a providenciar um possvel corpo de cdigo sem significado para aquele mtodo.
Comentrios (em ingls)

[en-usa] Voc pode tambm usar a [Traduzir] descrever um mtodo que [+ Trad.]

[en-usa] A palavra chave interface leva o conceito de uma classe [Traduzir] abstract um passo adiante para preveno de quaisquer [+ Trad.]

definies de mtodo como um todo. A interface uma ferramenta muito til e comumente usada, pois ela prov a separao perfeita da interface e da implementao. Em adio, voc pode combinar muitas interfaces juntas, se voc desejar, enquanto que herana de mltiplas classes regulares ou abstratas no possvel. Comentrios (em ingls)

Criao de objetos, uso e tempo de vida


[en-usa] Tipicamente a Programao Orientada a Objetos [Traduzir] assuntos como tipo de dados abstratos, herana [+ Trad.]

aborda e

23 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

polimorfismo, bem como outras caractersticas importantes. Esta seo cobrir essas caractersticas.Comentrios (em ingls)
[en-usa] Um dos fatores mais importantes sobre objetos a maneira [Traduzir] que eles so criados e distribudos. Onde est o dado de um [+ Trad.]

objeto e como controlado o tempo de vida do objeto? H diferentes filosofias no trabalho aqui. C++ tem uma abordagem onde o controle de performance a mais importante caracterstica, ento C++ d ao programador uma opo de escolha. Para otimizar a velocidade de execuo, o armazenamento e o tempo de vida podem ser determinado enquanto o programa est sendo escrito, atravs da alocao (criao) dos objetos na memria (estes so algumas vezes chamados automticos ou variveis de escopo) ou em uma rea esttica de armazenamento. Isto coloca uma prioridade na velocidade de alocao e liberao de armazenamento, e o controle da alocao e desalocao podem ser muito vlido em algumas situaes. Entretanto, a flexibilidade pode ser prejudicada porque necessrio saber a quantidade exata, tempo de vida, e tipo dos objetos enquanto voc est escrevendo o programa. Se voc estiver tentando resolver um problema mais geral como o desenvolvimento auxiliado por computador, gerenciamento de estoque, ou o controle de trfego areo, isto tambm especfico.Comentrios (em ingls) a criao de objetos de memria chamada de memria heap. Nesta abordagem, voc no sabe at o momento da execuo quantos objetos voc precisar, qual o tempo de vida, ou quais os tipos exatos destes objetos. Tudo isso determinado exatamente no momento da execuo. Se voc precisar de um novo objeto, voc simplesmente o aloca na memria heap na hora que o objeto for necessrio. Pelo motivo de o armazenamento ser gerenciado dinamicamente, no tempo de execuo, a quantidade de tempo necessrio para alocar na memria heap pode ser notavelmente maior que o tempo para criar armazenamento no memria stack. (Criao de armazenamento na memria stack frequentemente uma nica montagem de instruo para mover o ponteiro da memria stack para baixo e outra para volta-lo ao incio. O tempo de criao do armazenamento na memria heap depende do mecanismo de armazenamento projetado). A abordagem dinmica geralmente supe que os objetos tendem a ser complicados, ento o esforo extra de encontrar o armazenamento e liber-lo no ter um impacto importante na criao do objeto. Em adio, uma maior flexibilidade

[en-usa] Uma segunda caracterstica [Traduzir] dinamicamente em um pool [+ Trad.]

24 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

essencial para resolver os problemas gerais de programao.Comentrios (em ingls)


[en-usa] [7] Cada vez [Traduzir] Java usa a segunda abordagem, exclusivamente. [+ Trad.] que voc quer criar um objeto, voc usa a palavra reservada

new para criar uma instncia do objeto.Comentrios (em ingls)


[en-usa] H outra caracterstica, que o tempo de vida de um [Traduzir] Como em linguagens que permitem que o objeto seja [+ Trad.]

objeto. criado na memria stack, o compilador determina em quanto tempo os ltimos objetos sero automaticamente destrudos. Entretanto se voc cri-los na memria heap o compilador no tem conhecimento do tempo de vida destes objetos. Em uma linguagem como C++, voc deve determinar programaticamente quando destruir o objeto, o que pode levar a uma invaso de memria se voc no fizer corretamente (e isto um problema comum em programas C++). Java fornece uma caracterstica chamada garbage collector que automaticamente descobre quando um objeto no est mais em uso e o destri. O garbage collector muito mais conveniente porque ele reduz o nmero de casos que voc pode acompanhar e o cdigo que voc deve escrever. Mais importante, o "garbage collector" fornece um nvel muito alto de segurana que vai de encontro ao problema de invaso de memria (que tem levado muitos projetos em C++ ao fracasso).Comentrios (em ingls)

Colees e iteraes
[en-usa] Se voc no sabe quantos objetos voc precisar para [Traduzir] solucionar um problema em particular ou qual o tempo [+ Trad.]

de vida deles, voc tambm no saber como armazen-los. Como voc pode saber qual o espao necessrio para criar tais objetos? Voc no pode, levando em conta que esta informao no conhecida at o momento da execuo. Comentrios (em
ingls)

[en-usa] A soluo [Traduzir] orientado [+ Trad.]

para a maioria dos problemas em desenvolvimento a objetos parece impertinente: voc cria outro tipo de objeto. O novo tipo de objeto que resolve este problema em particular manipula a referncia para outros objetos. Naturalmente, voc pode fazer a mesma coisa com array, que existe na maioria das linguagens. Mas este novo objeto, chamado de container (tambm chamado de collection, mas a biblioteca Java usa este termo de uma forma diferente ento neste livro usaremos "container"), ir se expandir sempre que

25 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

necessrio para acomodar tudo que voc acrescentar nele. Ento voc no precisa saber quantos objetos voc vai manipular em um container. s criar um objeto container e deix-lo cuidar dos detalhes.Comentrios (em ingls)
[en-usa] Felizmente, uma boa linguagem de Programao Orientada a [Traduzir] Objetos vem com um conjunto de containers como parte do [+ Trad.]

pacote. Em C++, parte da Biblioteca Padro C++ e algumas vezes chamado de Standard Template Library (STL). Object Pascal tem containers na Visual Component Library (VCL). Smaltalk tem um conjunto muito completo de containers. Java tambm tem containers em sua biblioteca padro. Em algumas bibliotecas, um container genrico considerado bom o suficiente para tudo o que for necessrio, e em outras (Java, por exemplo) a biblioteca tem diferentes tipos de containers para diferentes necessidades: vrios tipos diferentes de classes List (para manipular seqncias), Map (tambm conhecidos como arrays associativos, para associar objetos com outros objetos), e classes Set (para manipular cada um dos tipos de objetos). As bibliotecas de container tambm devem incluir queues (filas), trees (rvores), stacks (pilhas), etc.Comentrios (em ingls) os containers disponibilizam maneiras de se colocar nele e recuper-las; normalmente atravs de mtodos que adicionam elementos ao container, e outros que removem elementos do container. A recuperao de elementos pode ser mais problemtico, porque o mtodo de seleo simples restritivo. O que fazer se voc quiser manipular ou comparar um conjunto de elementos em um container ao invs de somente um elemento?Comentrios (em
ingls)

[en-usa] Todos [Traduzir] coisas [+ Trad.]

[en-usa] A soluo um iterador, que um objeto [Traduzir] selecionar os elementos em um container [+ Trad.]

que tem como funo e apresent-los ao usurio do iterador. Como uma classe, ele tambm prov um nvel de abstrao. Esta abstrao pode ser utilizada para separar os detalhes do container dos detalhes do cdigo que esto acessando o container. O container, via iterador, abstrado para ser simplesmente uma seqncia. O iterador permite percorrer uma seqncia sem se preocupar com a estrutura base isto , ser um ArrayList, um LinkedList, um Stack, ou algo parecido. Isto d flexibilidade para facilmente mudar a estrutura base de dados sem interferir no cdigo de seu programa. Java iniciou (nas verses 1.0 e 1.1) com um padro de iterador, chamado Enumeration, para todas as classes container. Java 2 incluiu uma biblioteca

26 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

container muito mais completa, que contm um iterador chamado Iterator, que faz mais que o velho Enumeration.
Comentrios (em ingls) [en-usa] Do ponto de vista de projeto, tudo que voc realmente [Traduzir] uma seqncia que pode ser manipulada para resolver [+ Trad.]

quer seu problema. Se um tipo simples de seqncia satisfizer tudo o que voc precisar, no haver razo para ter tipos diferentes. H 2 razes que podem levar voc a escolher entre containers. Primeiro, os containers fornecem diferentes tipos de interface e comportamento externo. Uma stack (pilha) tem uma interface diferente de uma queue (fila), que diferente do set ou da list. Um deles pode fornecer uma soluo mais flexvel para resolver seu problema que outra. Segundo, containers diferentes tm performances diferentes para certas operaes. O melhor exemplo compara dois tipos de List: um ArrayList e um LinkedList. Ambos so seqncias simples que podem ter interfaces idnticas e comportamentos externos. Mas certas operaes podem ter custos radicalmente diferentes. Aleatoriamente acessando elemento em um ArrayList uma operao de tempo constante; ele gasta o mesmo tempo desconsiderando o elemento que voc seleciona. Porm, um LinkedList expansivo para percorres a lista a fim de randomicamente selecionar um elemento, e demora para encontrar um elemento que est mais no final da lista. Em contrapartida, se voc quiser inserir um elemento no meio da seqncia, isto mais fcil em um LinkedList que em um ArrayList. Essas e outras opes tm diferentes performances dependendo da estrutura base da seqncia. Na fase de projeto, voc pode iniciar com uma LinkedList e, quando buscando melhorar a performance, alterar para um ArrayList. Por causa da abstrao da classe base List e dos iterators, voc pode mudar de um para o outro com impacto mnimo no seu cdigo.Comentrios (em ingls)

Fundamentos de hierarquia
[en-usa] Uma das caractersticas da Programao Orientada a Objeto [Traduzir] que tem sido especialmente destacada desde a introduo do [+ Trad.]

C++ que todas as classes devem herdar de uma nica classe base. Em Java (bem como todas as outras linguagens de Programao Orientada a Objeto, exceto para C++) a resposta sim, e o nome desta classe base Object. Isto demonstra que os benefcios da hierarquia so muitos.Comentrios (em ingls) Todos os objetos na rvore hierrquica tm uma interface em

[en-usa]

27 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

[Traduzir] comum, [+ Trad.]

ento todos eles so, no final das contas, os mesmos tipos base. Uma alternativa (fornecida por C++) que voc no sabe que todos possuem o mesmo tipo base. Do ponto de vista de compatibilidade interna isto cabe no mdulo C melhor e pode ser considerado menos restritivo, mas quando necessrio que a programao seja completamente orientado a objeto voc deve construir sua prpria hierarquia para fornecer a mesma convenincia que usa em outras linguagens de Programao Orientada a Objeto. E em qualquer biblioteca de classe nova que voc adquire, algumas outras interfaces incompatveis sero usadas. necessrio esforar (possivelmente como herana mltipla) para funcionar com nova interface no seu projeto. uma flexibilidade extra de valor de C++? Se voc precisar - um grande investimento em C - bastante vlido. Se voc estiver comeando a arriscar, outras alternativas como Java podem ser mais produtivas.Comentrios (em ingls) rvore hierrquica (como fornecido possue certas funcionalidades. Voc sabe pode executar algumas operaes bsicas em todo objeto no seu sistema. Uma rvore hierrquica, quando cria todos os objetos na memria, simplifica extremamente a passagem de argumentos (um dos tpicos mais complexos em C++).Comentrios (em ingls) mais fcil a implementao convenientemente implementado em Java). O suporte necessrio pode ser instalado na classe base, e o garbage collector pode ento enviar as mensagens apropriadas para todos os objetos no sistema. Sem a rvore hierrquica em um sistema que manipula um objeto atravs da referncia, difcil implementar o garbage collector Comentrios (em ingls)

[en-usa] Todos os objetos em uma [Traduzir] por Java) garantidamente [+ Trad.]

[en-usa] Uma rvore hierrquica torna muito [Traduzir] de um garbage collector (que j [+ Trad.]

[en-usa] No tempo de execuo, a informao do tipo garantida em [Traduzir] todos os objetos, voc nunca finalizar os objetos sem que eles [+ Trad.]

tenham seus tipos definidos. Isto importante especialmente com operaes de nvel de sistema, como a manipulao de exceo, a fim de permitir maior flexibilidade no programa.Comentrios (em ingls)

Converses versus genricos


[en-usa] Para tornar esses [Traduzir] tipo universal em [+ Trad.]

containers reutilizveis, eles manipulam o Java: Object. A rvore hierrquica significa

28 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

que tudo herda de Object, ento o container que manipula Object pode manipular qualquer outra classe. Isto torna os containers fceis de reutilizar.Comentrios (em ingls)
[en-usa] Para usar um container, [Traduzir] referncias para objetos e [+ Trad.]

[8]

voc simplesmente acrescenta mais tarde solicita a remoo dos mesmos. Mas, desde que o container manipula somente Object, quando voc adiciona sua referncia no container ele promovido para Object, perdendo assim a identidade. Quando voc recupera o objeto, voc obtm uma referncia de Object, e no a referncia para o tipo que voc colocou. Ento como voc recupera alguma coisa que tem uma interface til do objeto que voc colocou no container?Comentrios (em ingls) (converso) usado novamente, mas desta vez elevando a herana para um tipo mais geral. Ao contrrio, voc est convertendo para um tipo mais especfico. Esta maneira de converso chamada downcasting(converso p/ mais especfico). Com a converso para mais genrico, voc sabe, por exemplo que um Circle (crculo) um tipo de Shape (forma geomtrica) ento seguro uma converso para o mais genrico, mas voc no sabe se um Object necessariamente um Circleou um Shape ento no seguro fazer uma converso para o especfico, a menos que voc saiba exatamente com o que voc est lidando.Comentrios (em ingls)

[en-usa] Aqui, o cast [Traduzir] voc no est [+ Trad.]

[en-usa] Isto no completamente impraticvel, entretanto, se voc [Traduzir] fizer uma converso para o especfico para um tipo errado voc [+ Trad.]

ter um erro em tempo de execuo chamado exception,, que ser descrito brevemente. Quando voc recupera referncias de objeto de um container, ento, voc deve ter alguma maneira de lembrar exatamente o que eles so e como voc pode executar uma converso para o tipo especfico de forma apropriada. Comentrios (em ingls) tipo especfico e a verificao em tempo de de tempo extra para executar o programa e esforo extra do programador. No teria problema se quando criar o container, ele souber os tipos que ele manipula, eliminando a necessidade de converso para o tipo especfico como possvel engano? A soluo chamada como mecanismo de tipo parametrizado. Um tipo parametrizado uma classe que o compilador pode automaticamente ser customizado para funcionar com tipos particulares. Por exemplo, com um container parametrizado, o compilador deve customizar o container para que ele aceite s Shapee recupere somente Shapes. Comentrios (em ingls)

[en-usa] A converso para o [Traduzir] execuo necessita [+ Trad.]

29 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

[en-usa] Tipos parametrizados uma parte importante de C++, [Traduzir] principalmente porque C++ no tem hierarquia. Em C++, [+ Trad.]

palavra chave que implementa tipos parametrizados template. Java atualmente no tem tipos parametrizados desde que seja possvel ser recuperado usando herana simples. Entretanto, o propsito atual dos tipos parametrizados usa uma sintaxe que extremamente similar a C++, e ns podemos esperar que tipos parametrizados (que sero chamados genricos) na prpria verso de Java. Comentrios (em
ingls)

Assegurando uma limpeza apropriada


[en-usa] Todo objeto requer recursos a fim de [Traduzir] deles memria. Quando o objeto no [+ Trad.]

existir, sendo o principal mais necessrio o mesmo deve ser extinto (retirado ou limpado da memria) para que estes recursos sejam liberados para reuso. Em situaes de programao a questo sobre como um objeto retirado (limpado) no parece muito desafiador: voc cria um objeto, usa o objeto enquanto for necessrio, ento o mesmo deve ser destrudo. Entretanto, no difcil de encontrar situaes que so mais complexas.Comentrios (em ingls) que voc esteja projetando um sistema areo para um aeroporto. (O mesmo modelo deve tambm funcionar para outros exemplos.) Inicialmente isto parece simples: Faa um continer para gerenciar os avies, ento crie um novo avio e coloque o mesmo no continer para cada avio que entrar na zona de controle de trfego areo. Para limpar, simplesmente delete o objeto avio apropriado quando a aeronave deixar a zona.Comentrios (em ingls) sistema para gravar dados que no requerem ateno imediata como a funo de controle principal. Talvez estes registros so de todas as pequenas aeronaves que deixam o aeroporto. Ento voc tem um continer secundrio para aeronaves pequenas, e a qualquer momento em que voc criar um objeto aeronave voc tambm o colocar no continer secundrio se este uma aeronave pequena. Ento alguns processos secundrios executam operaes nos objetos neste continer durante momentos ociosos.Comentrios (em ingls) o problema mais difcil: Como voc pode possivelmente saber quando destruir os objetos? Quando voc tiver parado de

[en-usa] Suponha, por exemplo, [Traduzir] para gerenciar o trfico [+ Trad.]

[en-usa] Mas quem sabe voc tem algum outro [Traduzir] dados sobre as aeronaves; quem sabe [+ Trad.]

[en-usa] Agora [Traduzir]

30 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

[+ Trad.]

usar o objeto, alguma outra parte do sistema poderia ainda o estar usando. O mesmo problema pode ser levantado em um nmero de outras situaes, e na programao de sistemas (como os em C++) nos quais voc deve excluir explicitamente um objeto quando voc tiver terminado e isto pode se tornar bastante complexo. Comentrios (em ingls) coletor de lixo projetado para tomar conta do liberao de memria (embora isto no inclua outros aspectos da limpeza de objetos). O coletor de lixo sabe quando um objeto no usado a muito, e ento libera automaticamente a memria daquele objeto. Isto (combinado com o fato de que todos os objetos so herdados da classe raiz nica Object e que voc pode criar objetos somente de uma maneirana pilha) torna o processo de programao em Java muito mais simples que a programao em C++. Voc tem poucas e distantes decises por tomar e obstculos a ultrapassar. Comentrios (em ingls) Coletores de lixo x eficincia e flexibilidade

[en-usa] Com Java, o [Traduzir] problema da [+ Trad.]

[en-usa] Se todas estas so boas idias, por que eles no fizeram a [Traduzir] mesma coisa em C++? Bem, naturalmente, h um preo a [+ Trad.]

pagar por toda esta convenincia de programao, e este preo o tempo de execuo elevado. Como mencionado antes, em C++ voc pode criar objetos no stack, e neste caso eles so automaticamente limpos (mas voc no tem a flexibilidade criao to grande quanto voc gostaria em tempo de execuo). Criar objetos no stack a maneira mais eficiente para alocar memria para objetos e liberar aquela memria. Criar objetos na pilha pode ser muito mais custoso. Sempre herdando da classe base e tornando polimrficos todos os mtodos chamados tambm cobra um pequeno pedgio. Mas o coletor de lixo um problema particular porque voc nunca sabe o suficiente quando ser iniciado ou quanto ir demorar. Isto significa que h uma inconsistncia na taxa de execuo de um programa Java, assim voc no pode us-lo em certas situaes, como quando a taxa de execuo de um programa est uniformemente crtica. (Estes so chamados geralmente de programas em tempo real, embora no todos os problemas da programao em tempo real sejam assim estritos.)
Comentrios (em ingls)

[en-usa] Os projetistas da linguagem C++, tentando atrair [Traduzir] programadores C (e com muito sucesso, a isso), no [+ Trad.]

quiseram adicionar qualquer artifcio a linguagem que pudesse impactar

31 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

na velocidade ou no uso do C++ em qualquer situao onde programadores devessem escolher outro que C. Este objetivo foi alcanado, mas ao preo da grande complexidade da programao em C++. Java mais simples que C++, mas o prejuzo est na eficincia e algumas vezes na aplicabilidade. Para uma parte significativa de problemas de programao, contudo, Java a opo superior. Comentrios (em ingls)

Manuseio de excees: Negociando com erros


[en-usa] Desde o inicio das [Traduzir] erros tem sido um [+ Trad.]

linguagens de programao, tratamento de dos assuntos mais difceis. Pelo fato de ser muito difcil projetar um bom esquema de tratamento de erros, muitas linguagens simplesmente ignoram este assunto, passando o problema para os projetistas de bibliotecas que surgem com solues que funcionam na maioria das situaes mas que podem ser facilmente dribladas. O maior problema com a maioria dos esquemas de tratamento de erros que eles contam com a vigilncia dos programadores em seguir convenes que no so foradas pela linguagem. Se o programador no vigilante o tempo todo ou caso ele esteja em uma situao de presso este esquema pode facilmente ser esquecido.Comentrios (em ingls) de erros diretamente s vezes ao sistema operacional. Uma exceo (exception) um objeto que lanado (thrown) no lugar do erro e pode ser capturado (catch) por um tratador de excees apropriado que foi projetado para tratar aquele tipo de erro em particular. O tratador de excees e como se fosse, um caminho paralelo de execuo que pode ser tomado quando as coisas vo mal. E pelo fato dele usar um caminho de execuo separado, ele no precisa interferir com seu cdigo de execuo normal. Isto faz com que o cdigo seja mais simples de ser escrito uma vez que voc no constantemente forado a chegar os erros (cdigo de checagens entre o cdigo normal). Adicionalmente, uma exceo lanada diferente de um valor de erro que retornado de um mtodo ou um flag que setado por um mtodo com o propsito de indicar uma situao de erro-isto pode ser facilmente ignorado. Uma exceo no pode ser ignorada, ento temos a garantia de que a mesma ser tratada em algum ponto. Finalmente, excees prove uma forma

[en-usa] Tratamento de exceo liga tratamento [Traduzir] dentro da linguagem de programao e [+ Trad.]

32 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

confivel de se recuperar de situaes ruim (de erro). Ao invs de apenas sair do programa, voc freqentemente capaz de reorganizar a situao e restaurar a execuo, o que produz programas muito mais robustos.Comentrios (em ingls)
[en-usa] O tratamento de exceo de [Traduzir] linguagens de programao, [+ Trad.]

Java destaca-se entre as porque em Java, tratamento de exceo foi inserido no inicio e voc forado a usar. Se voc no escrever seu cdigo para adequadamente tratar as excees, voc receber uma mensagem de erro em tempo de compilao. Esta garantia de consistncia pode algumas vezes tornar o tratamento de erros mais fcil.Comentrios (em ingls) exceo no uma ainda que em linguagens orientadas a objetos uma exceo seja normalmente representada por um objeto. Tratamento de exceo existe antes das linguagens orientadas a objetos.Comentrios (em ingls)

[en-usa] importante notar que tratamento de [Traduzir] caracterstica da orientao a objetos, [+ Trad.]

Concorrncia
[en-usa] Um conceito fundamental [Traduzir] a idia de manusear mais [+ Trad.]

na programao de computadores de uma tarefa ao mesmo tempo. Vrios problemas de programao requer que o programa seja capaz de parar o que ele est fazendo, lidar com algum outro problema, e ento retornar para o processo principal. Aproximou-se da soluo de vrias formar. Inicialmente, programadores com conhecimento em baixo-nvel (low-level) da mquina escreveram rotinas de servio de interrupo, e a suspenso do processo principal era iniciado atravs do hardware. Apesar de funcionar bem, isto era difcil e no portvel, ento se tornava demorado e caro a transferncia de um programa para um novo tipo de mquina.Comentrios (em
ingls)

[en-usa] As [Traduzir] de [+ Trad.]

vezes, interrupes so necessrias para lidar com tarefas tempo-critico (time-critical), mas h uma grande classe de problemas em que voc est apenas tentando particionar o problema em pedaos de execuo separados ento o programa como um todo pode ser mais rpido na resposta ou usurio. Em programas, estes pedaos de execuo separados so chamados threads, e o conceito geral chamado de concorrncia ou multithreading. Um exemplo simples de multithreading a interface de usurio. Usando threads, um usurio pode pressionar um boto e receber uma resposta rpida ao invs de ser forado a esperar at que o programa

33 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

finalize sua tarefa atual.Comentrios (em ingls)


[en-usa] Geralmente, [Traduzir] de um nico [+ Trad.]

thread apenas uma maneira de alocar o tempo processador. Mas se o sistema operacional suportar mltiplos processadores, cada thread pode ser atribuda para um processador diferente, e elas podem verdadeiramente executar em paralelo. Uma das caractersticas convenientes de multithreading em nvel de linguagem de programao que o programador no precisa se preocupar se h muitos processos ou apenas um. O programa logicamente dividido em threads e se a mquina tem mais de um processador, ento o programa executa mais rpido, sem a necessidade de ajustes especiais.Comentrios (em ingls)

[en-usa] Tudo isso faz com que threading parea um tanto simples. H [Traduzir] um complicador: recursos compartilhados. Se voc tem mais [+ Trad.]

de uma thread em execuo que ir acessar o mesmo recurso, voc tem um problema. Por exemplo, dois processos no podem simultaneamente enviar informaes para um impressora. Para resolver o problema, recursos que podem ser compartilhados, como uma impressora, devem estar trancados (locked) enquanto eles esto sendo usados. Ento uma thread tranca (lock) um recurso, completa sua tarefa, e ento libera a tranca para que outros possam usar o recurso.Comentrios (em
ingls)

[en-usa] Threading em Java construdo dentro da linguagem, o que [Traduzir] de um assunto complicado muito mais simples. Threading [+ Trad.]

faz

suportado a nvel de objetos, ento uma thread de execuo representada por um objeto. Java tambm prov recursos para lock de recursos. Podendo fazer lock de memria de qualquer objeto (este , um tido de recurso compartilhado) ento apenas uma thread pode usar este recurso em um momento. Isto alcanado com a utilizao da palavra chave synchronized. Outros tipos de recursos devem ser travados explicitamente pelo programador, tipicamente criando um objeto para representar o lock que todas threads devem checar antes de acessar aquele recurso especfico.Comentrios (em ingls)

Persistncia
[en-usa] Quando voc cria [Traduzir] precisa dele, mas [+ Trad.]

um objeto, o mesmo existe enquanto voc em nenhuma circunstncia o mesmo existir depois que o programa terminar. Mesmo que isto no faa sentido inicialmente, h situaes em que seria til se um objeto pudesse existir e manipular suas informaes mesmo

34 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

que o programa no esteja mais em execuo. Ento da prxima vez que voc iniciar o programa, o objeto estaria l e ele teria as mesmas informaes que tinha no momento em que o programa executou da ltima vez. claro, voc pode ter um efeito similar escrevendo a informao para um arquivo ou para um banco de dados, mas no esprito de fazer tudo um objeto, seria um tanto conveniente ser capaz de declarar um objeto persistente e ter todos os detalhes sobre a recuperao dos dados cuidados para voc.Comentrios (em ingls)
[en-usa] Java [Traduzir] voc [+ Trad.]

prove suporte para "persistncia leve," o que significa que pode facilmente armazenar objetos em um disco e mais tarde recuperar o mesmo. A razo para "leve" que voc continua sendo forado a fazer chamadas explcitas para proceder a persistncia e a recuperao dos objetos. Persistncia leve pode ser implementada de ambas as formas, atravs de serializao de objetos (mostrado no capitulo 12) e atravs de Java Data Objects (JDO, mostrado em pensando em Java Enterprise). Comentrios (em ingls)

Java e a Internet
[en-usa] Se Java , de fato, mais uma linguagem de programao [Traduzir] computadores, voc pode questionar porque ela to [+ Trad.]

de

importante e porque tem sido propalada como um passo revolucionrio em programao de computadores. A resposta no imediatamente bvia se voc est vindo de uma perspectiva de programao tradicional. Ainda que Java seja muito til para solucionar problemas tradicionais de programao "standalone", ela tambm importante porque vai solucionar problemas na World Wide Web. Comentrios (em
ingls)

O que a Web?
[en-usa] A Web pode [Traduzir] conversa de [+ Trad.]

parecer ligeiramente misteriosa, com toda essa "surfar", "navegar", e "estar na web". de grande ajuda dar um passo atrs e olhar para o que ela realmente , mas para fazer isso voc precisa compreender os sistemas cliente/servidor, um outro aspecto de computao recheado de questes confusas.Comentrios (em ingls) Sitemas Cliente/Servidor

35 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

[en-usa] A idia bsica de um sistma cliente/servidor [Traduzir] um repositrio central de informaes - dados [+ Trad.]

que voc tenha de alugum tipo, muitas vezes em um banco de dados - que voc precisa distribuir para um grupo de pessoas ou mquinas, sob demanda. Uma idia chave para o conceito cliente/servidor que o repositrio de informaes est geograficamente centralizado, de modo que ele possa ser mudado e assim essas mudanas sejam propagadas para os consumidores das informaes. Juntando tudo, o repositrio de informao, o programa que distribui a informao e a mquina (ou mquinas) onde a informao e o programa residem chamado de servidor. O programa que reside na mquina remota, comunica-se com o servidor, traz a informao, processa-a, e ento a exibe na mquina remota chamado de cliente. Comentrios (em ingls)

[en-usa] Assim, o conceito bsico de computao cliente/servidor no [Traduzir] to complicado. O problema aparece quando voc tem um [+ Trad.]

nico servidor tentando atender a muitos clientes ao mesmo tempo. Geralmente, h tambm um banco de dados, em que o projetista distribui a informao em tabelas para uso otimizado. E mais, os sistemas geralmente permitem a um cliente inserir novas informaes no servidor. Isto significa que voc deve assegurar que os novos dados de um cliente no se sobreponham aos novos dados de outro cliente, ou que dados no sejam perdidos no processo de sua adio base de dados (isto chamado processamento da transao). Conforme o programa cliente muda, ele deve ser construdo, depurado e instalado nas mquinas clientes, o que acaba sendo mais complicado e dispendioso do que voc imagina. Ainda mais difcil o suporte a mltiplos tipos de computadores e sistemas operacionais. E h tambm a questo importantssima da performance: voc pode ter centenas de clientes fazendo solicitaes ao servidor simultaneamente em determinado momento, de modo que mesmo um pequeno atraso crucial. Para minimizar a latncia, os programadores se empenham em redirecionar a carga das tarefas de processamento, geralmente para a mquina cliente, mas tambm s vezes para outras mquinas no site do servidor, usando o assim chamado middleware (o middleware tambm utilizado para facilitar a manuteno). Comentrios (em ingls)

[en-usa] A simples idia de distribuio de informaes apresenta tantos [Traduzir] nveis de complexidade que o problema como um todo pode [+ Trad.]

parecer desesperadoramente enigmtico. E ainda assim crucial: a computao cliente/servidor corresponde a

36 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

aproximadamente metade das atividades de programao. usada em tudo, de transaes com cartes de crdito at a distribuio de diversos tipo de dados - mercado de aes, pesquisas cientficas, informaes governamentais, e por a vai. O que se tinha no passado eram solues individuais para problemas individuais, com uma nova soluo sendo inventada a cada vez. Estas eram difceis de criar e difceis de usar, tendo o usurio que aprender uma nova interface para cada uma delas. A questo cliente/servidor precisa ser resolvida de maneira ampla.Comentrios (em ingls) A Web como um servidor gigante
[en-usa] A Web na verdade um [Traduzir] pouquinho pior que isto, [+ Trad.]

sistema cliente/servidor gigante. um j que voc tem todos os servidores e clientes co-existindo ao mesmo tempo em uma nica rede. Voc no precisa saber disto, porque tudo o que tem a fazer se preocupar em conectar e interagir com um servidor de cada vez (embora voc tenha que circular por toda a terra em sua busca pelo servidor correto).Comentrios (em ingls)

[en-usa] Inicialmente o processo era simples e unidirecional. Voc fazia [Traduzir] uma requisio ao servidor e ele lhe entregava um arquivo, o [+ Trad.]

qual o seu software navegador (i.e., o cliente) interpretaria, formatando-o localmente na sua mquina. Mas em pouco tempo as pessoas comearam a querer fazer mais do que simplesmente entregar pginas com um servidor. Elas quiseram a funcionalidade cliente/servidor completa, tal que o cliente pudesse alimentar o servidor com informaes para, por exemplo, realizar consultas a bancos de dados, adicionar novas informaes ao servidor, ou para fazer um pedido (o que requeria mais segurana do que os sistemas originais ofereciam). Estas so as mudanas que temos visto no desenvolvimento da Web.Comentrios (em ingls) a

[en-usa] O navegador Web (browser) foi um grande passo adiante: [Traduzir] noo de que uma informao poderia ser visualizada em [+ Trad.]

qualquer tipo de computador sem ser alterada. Entretanto, os navagadores ainda eram bastante primitivos e rapidamente sobrecarregados com a demanda que lhes era imposta. Eles no eram essencialmente interativos, e tendiam a ocupar o servidor e a Internet porque sempre que se precisava fazer algo que requeria programao, era necessrio enviar informaes de volta ao servidor para processamento. Poderia-se levar vrios segundos ou minutos para descobrir que houve um erro de digitao na requisio. Como o

37 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

navegador era apenas um visualizador, no poderia executar nem as tarefas computacionais mais simples (por outro lado, ele era seguro, pois no poderia executar nenhum programa contendo erros ou vrus provveis na mquina local).Comentrios
(em ingls) [en-usa] Para resolver esse problema, diferentes estratgias foram [Traduzir] adotadas. Para comear, padres grficos foram melhorados [+ Trad.]

para permitir melhor capacidade de animao e vdeo aos navegadores. O resto do problema pode ser resolvido apenas pela incorporao da abilidade de executar programas na extremidade cliente, dentro do navegador. Isso chamado de programao client-side.Comentrios (em ingls)

Programao Client-side
[en-usa] O projeto inicial servidor-navegador da Web oferecia [Traduzir] para contedo interativo, mas a interatividade era [+ Trad.]

suporte

completamente provida pelo servidor. O servidor produzia pginas estticas para o navegador cliente, que simplesmente as interpretaria e mostraria. A HyperText Markup Language (HTML) bsica inclui mecanismos simples para coleta de dados: caixas de texto, caixas de seleo, botes, listas e reas te texto, bem como um boto que serve apenas para reinicializar os dados do formulrio e outro que envia os dados ao servidor. Esse envio passa atravs da Common Gateway Interface (CGI) provida por todos os servidores Web. O texto contido no envio indica CGI o que deve ser feito. A ao mais comun executar um programa localizado no servidor em um diretrio tipicamente chamado "cgi-bin" (se voc prestar ateno na barra de endereos no topo do navegador quando pressiona um boto numa pgina Web, s vezes voc pode distinguir o fragmento "cgi-bin" dentre a sopa de letrinhas encontrada ali). Esses programas podem ser escritos em vrias linguagens. Perl tm sido uma escolha comum, porque ela projetada para manipulao de texto e interpretada, de modo que pode ser instalada em qualquer servidor, independente do processador ou sistema operacional utilizado. Entretanto, Python (minha favorita veja www.Python.org) tm feito progresso devido ao seu maior poder computacional e simplicidade.Comentrios (em
ingls)

[en-usa] Vrios sites [Traduzir] com CGI, e [+ Trad.]

na Web de hoje foram construdos exclusivamente de fato pode-se fazer qualquer coisa com CGI. Entretanto, os sites construdos com programas CGI podem rapidamente se tornar complicados de manter, e h tambm o

38 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

problema do tempo de resposta. A responsividade de um programa CGI depende da quantidade de dados a enviar, bem como da quantidade de usurios conectadas ao servidor e Internet (alm disso, a inicializao de um programa CGI tende a ser lenta). Os primeiros projetistas da Web no previram quo rapidamente essa largura de banda seria exaurida para os tipos de aplicativos que as pessoas desenvolviam. Por exemplo, qualquer tipo de gerao dinmica de grficos praticamente impossvel de realizar com consistncia, pois um arquivo do tipo Graphics Interchange Format (GIF) deve ser criado e movido do servidor para o cliente para cada verso do grfico. E com certeza voc j teve experincia direta com algo to simples como a validao de dados em um formulrio Web. Voc pressiona o boto "submit" em uma pgina; os dados so enviados ao servidor; o servidor dispara um programa CGI que descobre um erro, constri uma pgina HTML informando-o do erro, e a envia de volta a voc; voc ento deve voltar e tentar novamente. Alm de lento, isso deselegante.Comentrios (em
ingls) [en-usa] A soluo a programao client-side. A maioria das mquinas [Traduzir] que executam navegadores Web so capazes de realizar muito [+ Trad.]

processamento e, com a estratgia original de HTML esttico, elas esto apenas ali, esperando ociosas enquanto o servidor prepara a prxima resposta. Programao client-side significa aproveitar o navegador Web para fazer o trabalho que puder ser feito, resultando em uma experincia menos demorada e mais interativa para o usurio do seu site Web.Comentrios (em
ingls)

[en-usa] O problema com discusses sobre [Traduzir] que elas no so muito diferentes [+ Trad.]

programao client-side das discusses sobre programao em geral. Os parmetros so quase os mesmos, mas a plataforma diferente; um navegador Web como um sistema operacional limitado. No fim das contas, voc ainda precisa programar, e isso justifica a vasta quantidade de problemas e solues produzidas pela programao client-side. O restante desta seo prov uma discusso geral dos problemas e estratgias na programao client-side.Comentrios
(em ingls)

Plug-ins
[en-usa] Um dos avanos mais [Traduzir] foi o desenvolvimento [+ Trad.]

significativos na programao client-side do plug-in. Essa uma forma de adicionar funcionalidade ao navagador atravs do download de

39 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

um componente que se acopla no local apropriado dentro do navegador. Ele diz ao navegador: "de agora em diante voc consegue realizar esta nova atividade" (o download do plug-in precisa ser feito apenas uma vez). Alguns comportamentos poderosos podem ser adicionados aos navegadores via plug-ins, mas construir um plug-in no uma tarefa trivial, e no algo voc gostaria de fazer como parte do processo de desenvolver um site. O valor do plug-in na programao client-side que ele permite a um programador experiente desenvolver uma nova linguagem e adicion-la a um navegador sem a permisso do fabricante do navegador. Portanto, os plug-ins provem uma "porta dos fundos" que permite a criao de novas linguagens de programao client-side (embora nem todas as linguagens sejam implementadas como plug-ins).Comentrios (em ingls) Linguagens de script
[en-usa] Os plug-ins [Traduzir] script. Com [+ Trad.]

resultaram numa exploso das linguagens de uma linguagem de script, voce insere o cdigo-fonte para o seu programa (que roda no cliente) diretamente na pgina HTML, e o plug-in que interpreta aquela linguagem automaticamente ativado quando a pgina exibida. Linguagens de script costumam ser de fcil entendimento e, por serem simples texto inserido na pgina HTML, carregam rapidamente como parte de um nico hit requerido para carregar a pgina. A desvantagem que seu cdigo fica exposto a todos para ver (e roubar). Geralmente, no entanto, voc no est fazendo nada espantosamente sofisticado com linguagens de script, e essa desvantagem no conta muito.Comentrios (em ingls) as linguagens de script usadas a inteno de resolver problemas especficos, principalmente a criao de uma interface grfica (GUI) mais rica e interativa. Entretanto, uma linguagem de script pode resolver 80% dos problemas encontrados na programao no lado do cliente. Seus problemas podem muito bem se encaixar completamente nesses 80%, e j que as linguagens de script permitem desenvolvimento mais fcil e rpido, voc provavelmente deveria considerar uma linguagem de script antes de olhar para uma soluo mais envolvente como Java ou ActiveX.Comentrios (em ingls) linguagens de script para navegadores mais comentadas so JavaScript (que no tem nada a ver com Java; s foi batizada

[en-usa] Isto levanta a questo de que [Traduzir] nos browsers de Internet tm [+ Trad.]

[en-usa] As [Traduzir]

40 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

[+ Trad.]

assim para tomar proveito do marketing em torno da linguagem Java), VBScript (que se parece muito com Visual BASIC), e Tcl/Tk, que vem da popular linguagem multiplataforma de criao de interfaces grficas (GUI). Existem outras por a, e sem dvida outras mais em desenvolvimento.
Comentrios (em ingls)

[en-usa] JavaScript certamente a de maior aceitao pelos [Traduzir] navegadores. J vem instalada tanto no Netscape Navigator [+ Trad.]

como no Microsoft Internet Explorer (IE). Infelizmente, nuances de JavaScript nesses dois navegadores podem variar imensamente (o navegador Mozilla, que pode ser baixado gratuitamente em www.Mozilla.org, oferece suporte ao padro ECMAScript, o que pode um dia se tornar aceito universalmente). Alm disso, existem provavelmente mais livros disponveis sobre JavaScript do que sobre todas as outras linguagens de navegador, e algumas ferramentas j criam automaticamente pginas usando JavaScript. Entretanto, se voc j fluente em Visual BASIC ou em Tcl/Tk, ser mais produtivo usar estas linguagens de script ao invs de aprender mais uma (voc j vai estar bastante ocupado lidando com os demais problemas da Web).Comentrios (em ingls) Java

[en-usa] Se uma linguagem de script [Traduzir] programao lado-cliente, o [+ Trad.]

resolve 80% dos problemas de que fazer com os outros 20% o "osso duro de roer"? Java uma soluo popular. No apenas uma linguagem poderosa, construda para ser segura, multiplataforma e internacional, como tambm vem sendo continuamente extendida para prover funes de linguagem e bibliotecas que lidam elegantemente com problemas que so de difcil resoluo em linguagems tradicionais, como multithreading, acesso a banco de dados, programao de rede, e computao distribuda. Java permite a programao lado-cliente atravs do applet e com o Java Web Start.
Comentrios (em ingls)

[en-usa] Um applet [Traduzir] navegador [+ Trad.]

um mini-programa que roda apenas em um da Web. O applet baixado automaticamente como parte de uma pgina Web (da mesma maneira, por exemplo, que uma imagem automaticamente baixada). Quando o applet ativado, ele executa um programa. Esta uma de suas belezas proporciona uma maneira de distribuir o programa cliente de forma automtica no momento em que o usurio o necessita, e no antes. O usurio recebe a verso mais recente

41 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

do programa, sem falha, e sem uma reinstalao dificultosa. Graas maneira como Java projetada, o programador s precisa criar um nico programa, e esse programa vai automaticamente funcionar em todos os computadores que tm navegadores com um interpretador Java embutido (e isso inclui seguramente a vasta maioria dos computadores). J que Java uma linguagem de programao completa, voc pode fazer o mximo de trabalho no lado do cliente antes e depois de fazer requerimento ao servidor. Por exemplo, voc no precisa submeter um formulrio atravs da Internet para descobrir que voc entrou uma data incorreta ou algum outro parmetro errado, e seu computador cliente pode rapidamente gerar um grfico baseado em seus dados, ao invs de esperar pelo servidor para gerar o grfico e enviar a imagem de volta para voc. No somente voc tem o ganho imediato da velocidade e prontas respostas, mas tambm o trfego da rede e a carga nos servidores pode ser reduzida, prevenindo uma vagarosidade na Internet toda.Comentrios (em ingls)
[en-usa] Uma vantagem que [Traduzir] linguagem de script [+ Trad.]

um applet de Java tem sobre uma ser compilado, portanto o cdigo fonte no est disponvel para o cliente. Por outro lado, um applet de Java pode ser descompilado sem muita dificuldade. Esconder seu cdigo, porm, no geralmente um ponto importante. Dois outros fatores podem ser de importncia. Como voc ver mais tarde neste livro, um applet de Java compilado pode requerer mais tempo para baixar, se for grande. Uma linguagem de script vai ser integrada na pgina Web como parte de seu texto (e em geral vai ser menor e reduzir o nmero de hits ao servidor). Isso pode ser importante para a capacidade do seu site Web de ser responsivo. Outro fator de importncia a curva de aprendizado. No importa o que voc tenha ouvido falar, Java no uma linguagem to fcil de se aprender. Se voc um programador de VISUAL BASIC, mudar para VBScript ser a soluo mais rpida (assumindo que voc possa limitar seus usurios s plataformas Windows), e j que vai resolver a maioria dos problemas tpicos em cliente/servidor, voc deve sentir dificuldade em justificar o aprendizado de Java. Se voc j tem experincia com uma linguagem de script, certamente se beneficiar em dar uma olhada em JavaScript ou VBScript antes de se envolver com Java, porque essas linguagens podem servir exatamente para o que voc precisa e voc vai ser mais produtivo, mais rapidamente. Comentrios (em ingls)

42 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

.NET e C#
[en-usa] Durante muito tempo, o principal competidor dos applets de [Traduzir] Java era o ActiveX da Microsoft, apesar de requerer que o [+ Trad.]

cliente rodasse Windows. Desde ento, a Microsoft produziu um competidor muito mais completo para a linguagem Java: a plataforma .NETe a linguagem C# . A plataforma .NET a grosso modo o mesmo que a mquina virtual Java e as bibliotecas Java, e C# apresenta similaridades inconfundveis linguagem Java. Este certamente o melhor que a Microsoft j fez na rea de linguagens e ambientes de programao. Claro, eles tiveram a vantagem considervel de poder ver o que funcionava bem e o que no deu to certo em Java, e construram a partir da, mas fizeram. Esta foi a primeira vez desde seu surgimento que a linguagem Java teve uma competio para valer, e se tudo der certo, o resultado ser que os designers de Java na Sun vo dar uma olhada sria em C# e nos motivos que levariam os programadores a mudar para aquela linguagem, e vo reagir fazendo melhorias fundamentais na linguagem Java. Comentrios (em ingls) que ela seja implementada completamente em outras plataformas. Eles alegam que no h problemas em faz-lo, e o projeto Mono (www.go-mono.com) tem uma implementao parcial de .NET rodando em Linux, mas at a implementao estar completa e a Microsoft decidir no espremer fora nenhuma parte, .NET como soluo multi-plataforma ainda um palpite arriscado. Comentrios (em ingls) in C# de

[en-usa] Atualmente, a principal vulnerabilidade e questo mais [Traduzir] importante em relao .NET se a Microsoft vai permitir [+ Trad.]

[en-usa] Para aprender mais sobre .NET e C#, veja Thinking [Traduzir] Larry OBrien e Bruce Eckel, Prentice Hall 2003. [+ Trad.]

Segurana
[en-usa] Baixar e rodar programas automaticamente atravs da Internet [Traduzir] pode parecer o sonho de um criador de vrus. Se voc clicar [+ Trad.]

num site da Web, voc pode automaticamente baixar uma srie de coisas junto com o HTML da pgina: arquivos GIF, cdigo de script, cdigo Java compilado, e componentes ActiveX. Alguns desses so benignos; arquivos GIF no podem causar mal, e linguagens de script so em geral limitadas no que podem fazer. Java tambm foi projetada para rodar seus applets em

43 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

um "canteiro" de segurana ("sandbox"), que a impede de salvar dados no disco rgido ou acessar memria fora da sandbox. Comentrios (em ingls)
[en-usa] O ActiveX da Microsoft est na extremidade oposta do espectro. [Traduzir] Programar com ActiveX como programar Windows voc [+ Trad.]

pode fazer qualquer coisa que quiser. Portanto, se voc clica numa pgina que baixa um componente ActiveX, esse componente pode causar danos aos arquivos no seu disco rgido. Claro, programas que voc carrega no seu computador que no esto restritos a rodar dentro de um navegador Web podem fazer o mesmo. Os vrus baixados dos Bulletin-Board Systems (BBSs) tm sido um problema h tempos, mas a velocidade da Internet amplifica a dificuldade. Comentrios (em
ingls)

[en-usa] A soluo parece ser [Traduzir] apresenta seu autor, [+ Trad.]

as "assinaturas digitais", em que o cdigo e tal informao verificada. Isso se baseia na idia de que um vrus pega porque seu criador pode ser annimo, logo se voc remove a anonimidade, os indivduos sero forados a ser responsveis por suas aes. Parece ser um bom plano porque permite aos programas ser muito mais funcionais, e eu imagino que v eliminar condutas maliciosas. Se, no entanto, um programa tiver um erro destrutivo no intencional, causar problemas da mesma forma. Comentrios (em
ingls)

[en-usa] A abordagem Java [Traduzir] uso do canteiro de [+ Trad.]

de prevenir esses problemas atravs do segurana. O interpretador Java que reside no seu navegador local examina o applet, procurando por desconfortveis, enquanto o applet carregado. Em particular, o applet no pode gravar arquivos em disco ou apagar arquivos (um dos suportes principais dos vrus). Applets so de modo geral considerados seguros, e como esse um ponto essencial para sistemas cliente/servidor confiveis, quaisquer problemas na linguagem Java que permitam vrus so rapidamente resolvidos (vale notar que o programa do navegador na verdade enfora essas restries de segurana, e alguns navegadores permitem que o usurio selecione diferentes nveis de segurana para prover diversos graus de acesso a seu sistema). Comentrios (em ingls) esta restrio um tanto em seu disco rgido. Por exemplo, voc pode querer criar um banco de dados local ou salvar data para uso posterior, quando desconectado. A viso inicial parecia ser de que todo mundo iria se conectar para fazer qualquer coisa importante, mas logo se percebeu que isso

[en-usa] Talvez voc esteja ctico quanto a [Traduzir] draconiana contra gravar arquivos [+ Trad.]

44 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

seria impraticvel (apesar da possibilidade das "ferramentas da Internet" de baixo custo poderem um dia satisfazer as necessidades de um segmento significante de usurios). A soluo o "applet assinado" que usa uma codificao de chave pblica para verificar se um applet vem realmente de onde ele diz que vem. Um applet assinado ainda pode danificar seu disco, mas a teoria de que j que voc pode responsabilizar os criadores do applet, eles no faro maldades. Java prov uma estrutura para assinaturas digitais, para que quando necessrio voc seja capaz de permitir a um applet pisar fora do canteiro de segurana. O captulo 14 apresenta um exemplo de como assinar um applet. Comentrios
(em ingls) [en-usa] Adicionando-se a isso, [Traduzir] relativamente nova de [+ Trad.]

o Java Web Start uma maneira distribuir com facilidade programas que rodam sozinhos e que no necessitam de um navegador web para funcionar. Essa tecnologia tem o potencial de resolver muitos problemas no lado cliente associados a rodar programas dentro de um navegador. Programas Web Start podem ser assinados, ou podem pedir ao cliente permisso todas as vezes que fazem alguma coisa potencialmente perigosa para o sistema local. O captulo 14 tem um examplo simples e uma apresentao do Java Web Start. Comentrios (em ingls) considerao um que as pessoas se movem atravs da Internet. Se voc baixa um programa com erros e ele faz algo indesejvel, quanto tempo vai levar para voc descobrir o estrago? Pode ser dias ou at semanas. A ento, como voc vai encontrar o programa que fez o estrago? E que bem vai fazer a essa altura? Comentrios (em ingls) Internet vs. intranet

[en-usa] Assinaturas digitais no esto levando em [Traduzir] ponto importante, que a velocidade com [+ Trad.]

[en-usa] A Web [Traduzir] portanto [+ Trad.]

a soluo mais geral para o problema cliente/servidor, faz sentido usar a mesma tecnologia para resolver um subconjunto do problema - em particular o problema clssico cliente/servidor interno a uma companhia. Nas solues cliente/servidor tradicionais h o problema da diversidade de tipos de computadores clientes, assim como a dificuldade de instalao de novos programas no cliente, ambas questes prontamente resolvidas com os navegadores para Web e programao lado-cliente. Quando a tecnologia Web usada para uma rede de informaes restrita a uma empresa, ela definida como uma intranet. Intranets fornecem muito mais

45 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

segurana do que a Internet, j que voc pode controlar fisicamente o acesso aos servidores dentro de sua companhia. Em termos de treinamento, parece que uma vez que as pessoas tenham compreendido o conceito geral de navegador, muito mais fcil para elas lidarem com as diferenas na forma em que as pginas e applets se apresentam, de modo que a curva de aprendizado para novos tipos de sistemas tende a ser reduzida. Comentrios (em ingls)
[en-usa] O problema da segurana nos remete a uma das subdivises [Traduzir] que parecem ter se formado automaticamente no mundo da [+ Trad.]

programao no lado-cliente. Se seu programa est rodando na Internet, voc no sabe sob que plataforma ele est trabalhando, e voc deseja tomar cuidado extra no sentido de no disseminar cdigo defeituoso. Voc precisa de alguma plataforma cruzada e segura, como uma linguagem de script ou Java.Comentrios (em ingls) poderia ter um que suas mquinas tenham todas a plataforma Intel/Windows. Em uma intranet, voc responsvel pela qualidade de seu prprio cdigo e pode reparar defeitos quando os mesmos forem descobertos. Alm disto, pode ser que voc j tenha um corpo de cdigo pronto que era utilizado em uma aproximao cliente/servidor mais tradicional atravs da qual voc tenha que instalar fisicamente programas clientes toda vez que voc faz uma atualizao. O tempo dispendido na instalao de atualizaes a razo mais forte que o compele a migrar para os navegadores, pois atualizaes so invisveis e automticas (Java Web Start tambm uma soluo para este problema). Se voc est envolvido com uma intranet deste tipo, o procedimento mais lgico a adotar tomar o caminho mais curto que lhe permita usar sua base de cdigo existente, ao invs de tentar recodificar seus programas em uma nova linguagem. Comentrios (em ingls)

[en-usa] Se voc est rodando em uma intranet, voc [Traduzir] outro conjunto de restries. No incomum [+ Trad.]

[en-usa] Quando confrontado com este conjunto confuso de solues [Traduzir] para o problema de programao lado-cliente, o melhor plano [+ Trad.]

de ataque uma anlise de custo-benefcios. Considere as restries do seu problema e qual seria o caminho mais curto para solucion-lo. Como a programao lado-cliente ainda programao, sempre uma boa idia adotar a abordagem de mais rpido desenvolvimento para sua situao particular. Esta uma postura vigorosa para prepar-lo para os inevitveis encontros com os problemas de desenvolvimento de programas. Comentrios (em ingls)

46 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

Programao lado-servidor
[en-usa] Toda esta discusso ignorou o [Traduzir] lado-servidor. O que acontece [+ Trad.]

tema da programao quando voc faz uma solicitao ao servidor? Na maioria das vezes a solicitao simplesmente "envie-me este arquivo." Seu navegador ento interpreta o arquivo com um tipo apropriado: como uma pgina HTML, uma imagem grfica, um applet Java, um programa de script, etc. Uma solicitao ao servidor mais complicada geralmente envolve uma transao de banco de dados. Um cenrio comum envolve uma solicitao para uma busca complexa em um banco de dados, que o servidor ento formata como uma pgina HTML e envia a voc como resultado. (Naturalmente se o cliente tiver mais capacidade atravs de Java ou uma linguagem de script, os dados podem ser enviados em sua forma original e formatados na extremidade do cliente, o que ser muito mais rpido e reduzir a carga no servidor). Ou voc poderia querer registrar seu nome em um banco de dados quando se associar a um grupo ou enviar um convite, o que envolveria alteraes naquele banco de dados. Estas solicitaes aos bancos de dados devem ser processadas por meio de algum cdigo no lado servidor, o que geralmente denominado programao lado-servidor. Tradicionalmente, a programao lado-servidor tem sido executada usando Perl, Python, C++, ou alguma outra linguagem, para criar programas CGI, mas sistemas mais sofisticados tm aparecido. Estes incluem servidores Web baseados em Java que permitem a voc executar toda a sua programao lado-servidor em Java escrevendo os assim chamados servlets. Servlets e seus descendentes, JSPs, so duas das razes mais persuasivas pelas quais as companhias que desenvolvem sites Web esto migrando para Java, especialmente porque so eliminados os problemas de lidar com navegadores de capacidades diferentes (estes tpicos so abordados em Thinking in Enterprise Java).
Comentrios (em ingls)

Aplicaes
[en-usa] Muito do alarido [Traduzir] na verdade uma [+ Trad.]

sobre Java gira em torno dos applets. Java linguagem de programao de objetivos gerais que pode resolver os tipos de problemas que podem ser resolvidos com outras linguagens - pelo menos na teoria. E como salientado anteriormente, podem existir maneiras mais

47 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

eficazes de se solucionar a maioria dos problemas cliente/servidor. Quando voc sai da arena do applet (e simultaneamente libera as restries, tais como aquela de impedir que se escreva no disco) voc entra no mundo de aplicaes gerais que so executadas sem depender de um sistema operacional, sem um navegador para Web, da mesmo forma como os programas comuns fazem. Neste aspecto, a fora de Java no apenas sua portabilidade, mas tambm sua programabilidade. Como voc ver no decorrer deste livro, Java possui muitas caractersticas que permitem a voc criar programas robustos em perodos mais curtos do que com as linguagens de programao anteriores. Comentrios (em ingls)
[en-usa] Esteja consciente de que este um benefcio relativo. Voc [Traduzir] paga pelos aperfeioamentos atravs de uma velocidade de [+ Trad.]

execuo mais baixa (embora haja um volume significativo de trabalho sendo desenvolvido nesta rea - em particular, os aprimoramentos denominados "hotspots" nas verses de Java mais recentes). Como qualquer linguagem, Java tem limitaes de origem que podem torn-la inadequada para resolver certos tipos de problemas de programao. Entretanto, Java uma linguagem que evolui rapidamente e a cada nova liberao torna-se mais e mais atraente para resolver conjuntos maiores de problemas. Comentrios (em ingls)

Por qu o sucesso de Java


[en-usa] A razo em [Traduzir] objetivo foi [+ Trad.]

que Java tem sido assim um sucesso que o o de resolver vrios dos problemas que encaram os desenvolvedores de hoje. Um objetivo fundamental do Java aumentar a produtividade. Esta produtividade vem de vrias maneiras, mas a linguagem projetada para ter uma melhoria significante sobre seus predecessores, e fornecer importantes benefcios para o programador. Comentrios (em ingls)

Sistemas so facilmente expressados e entendidos


[en-usa] Classes designed to fit the [Traduzir] This means that when you [+ Trad.]

problem tend to express it better. write the code, youre describing your solution in the terms of the problem space (Put the grommet in the bin) rather than the terms of the computer, which is the solution space (Set the bit in the chip that means that the relay will close). You deal with higher-level concepts

48 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

and can do much more with a single line of code.


ingls) [en-usa] O outro [Traduzir] que (se [+ Trad.]

Comentrios (em

benefcio desta facilidade de expresso a manuteno pudermos acreditar em relatrios) uma significativa parcela do custo durante a vida til do programa. Se um programa for mais fcil de se compreender, ento ser mais fcil de manter. Isto pode tambm reduzir o custo de elaborao e manuteno da documentao. Comentrios (em ingls)

Mximo aproveitamento com bibliotecas


[en-usa] A maneira mais rpida de se [Traduzir] cdigo que j esteja escrito: [+ Trad.]

criar um programa utilizar uma biblioteca. Um objetivo importante em Java tornar o uso de bibliotecas mais fcil. Este atingido moldando-se bibliotecas em novos tipos de dados (classes), de modo que importar uma biblioteca signifique adicionar novos tipos linguagem. Como o compilador Java cuida da forma como a biblioteca usada garantindo inicializao adequada e limpeza, e assegurando que os mtodos sejam chamados adequadamente - voc pode concentrar sua ateno naquilo que voc deseja que a biblioteca faa, e no em como voc deve faz-lo. Comentrios (em
ingls)

Manipulando erros
[en-usa] O tratamento de erros em C um problema notrio, [Traduzir] freqentemente ignorado -cruzar os dedos est [+ Trad.]

e um que

freqentemente envolvido. Se voc est construindo um programa grande, complexo, no h nada pior que ter um erro enterrado em algum lugar sem nenhuma pista de onde possa ter vindo. O tratamento de excees do Java um modo de garantir que um erro foi notado, e que algo acontece como resultado.Comentrios (em ingls)

Programando em larga escala


[en-usa] Muitas linguagens tradicionais trazem em seu cerne limitaes [Traduzir] quanto ao tamanho e complexidade do programa. BASIC, por [+ Trad.]

exemplo, pode ser excelente para reunir solues rpidas para certas classes de problemas, mas se o programa atingir mais de algumas pginas de tamanho, ou se aventurar alm do domnio normal de problemas daquela linguagem, como tentar nadar atravs de um fluido cada vez mais viscoso. No

49 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

h uma linha clara para inform-lo de que sua linguagem est falhando, e mesmo que tivesse, voc a ignoraria. Voc no diria. "Meu programa em BASIC ficou grande demais; terei que reescrev-lo em C!" Ao invs disto, voc iria tentar acrescentar algumas linhas a mais para adicionar uma nova funcionalidade. Ento os custos extras viriam sobre voc. Comentrios (em ingls)
[en-usa] Java projetada para auxiliar a programao em grande escala [Traduzir] - isto , para apagar aqueles limites de complexidade entre um [+ Trad.]

programa pequeno e um grande. Voc certamente no precisa usar POO quando est escrevendo um programa utilitrio do tipo "hello, world", mas as caractersticas esto l para quando voc necessitar delas. E o compilador eficiente em barrar erros que produzem defeitos em programas pequenos da mesma forma que em grandes. Comentrios (em ingls)

Java vs. C++?


[en-usa] Java se parece bastante com C++, ento naturalmente parece [Traduzir] que C++ vai ser substituido por Java. Mas eu estou comeando [+ Trad.]

a questionar esta lgica. Por um motivo, C++ ainda possui algumas caractersticas que Java no possui, e embora haja muitas promessas sobre algum dia Java ser to rpido quanto, ou mais que C++, ns temos visto constantes aperfeioamentos mas nenhuma mudana drstica. Alm disso, parece haver um continuo interesse por C++, portanto eu no acho que aquela linguagem ir desaparecer to cedo.Comentrios
(em ingls)

[en-usa] Eu estou comeando a pensar que a fora de Java [Traduzir] uma arena ligeiramente diferente da de C++, que [+ Trad.]

reside em uma linguagem que no tenta se ajustar a um molde. Certamente ela foi adaptada em numerosas vezes para resolver problemas particulares. Algumas ferramentas C++ combinam bibliotecas, modelos de componentes e ferramentas de gerao de cdigo para resolver o problema do desenvolvimento de aplicaes windows para usurio final (para o Microsoft Windows). E ainda, o que que a grande maioria dos desenvolvedores Windows utilizam? Microsoft Visual BASIC (VB). Isto apesar do fato de que VB produz cdigo que se torna intratvel quando o programa tem apenas algumas pginas de extenso (e sintaxe que pode ser absolutamente enganadora). To bem sucedida e popular quanto VB, no um bom exemplo de projeto de linguagem. Seria mais agradvel ter a facilidade e potencialidade de VB sem o cdigo intratvel resultante. E a

50 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

que eu penso que Java ir brilhar: como o "prximo VB. Voc pode tremer ou no ao ouvir isto, mas pense a respeito: a maior parte de Java tem como objetivo tornar fcil para o programador resolver problemas no nvel de aplicao como redes e UI multi-plataformas, e ainda tem um projeto de linguagem que permite a criao de corpos de cdigo muito grandes e flexveis. Adicione a isto o fato de que a verificao de tipos e manipulao de erros em Java um grande aprimoramento em relao maioria das linguagens e voc ter a estrutura de um salto significativo em direo produtividade de programao. Comentrios (em ingls)
[en-usa] Se voc est desenvolvendo todo o seu cdigo [Traduzir] nada, a partir do zero, ento a simplicidade de [+ Trad.]

[9]

antes de mais Java sobre C++ reduzir significativamente seu tempo de desenvolvimento-as lendas (estrias contadas por equipes de C++, com as quais conversei, que migraram para Java) sugerem o dobro da velocidade em relao a C++. Se a performance de Java no importar ou se voc encontrar alguma forma de contrabalan-la, questes de tempo para colocar o produto no mercado tornaro difcil a escolha de C++ ao invs de Java.
Comentrios (em ingls)

[en-usa] A maior questo a performance. Nos interpretadores [Traduzir] originais, Java imterpretada pode ser lenta, at 20 a 50 [+ Trad.]

vezes mais lenta que C. Com o tempo, este desempenho melhorou significativamente (especialmente com as verses mais recentes de Java), mas ainda permanece um nmero significativo. Em computadores a velocidade determinante; se no fosse significativamente mais rpido fazer algo no computador ento voc o faria a mo. (Eu j ouvi a sugesto de se comear com Java, para ganhar no tempo de desenvolvimento mais curto, ento usar uma ferramenta e bibliotecas de suporte para traduzir seu cdigo para C++, se voc necessitar de maior velocidade de execuo.) Comentrios
(em ingls)

[en-usa] A chave para tornar [Traduzir] aparente velocidade [+ Trad.]

Java possvel em muitos projetos a de melhorias como os chamados compiladores "just-in-time" (JIT), a tecnologia "hotspot" da Sun, e ainda compiladores de cdigo nativo. Claro que, compiladores de cdigo nativo eliminaro a perseguida execuo multi-plataforma dos programas compilados, mas eles tambm traro a velocidade de execuo para perto daquela em C e C++. E compilaes cruzadas (cross-compiling) em Java devero ser muito mais fceis do que em C ou C++. (Em teoria, voc apenas recompila, mas essa promessa j foi

51 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

feita antes em outras linguagens.)Comentrios (em ingls)

Summary
[en-usa] Este captulo tentou lhe dar uma viso geral da programao [Traduzir] orientada a objetos e de Java, incluindo o porqu de POO ser [+ Trad.]

diferente, e o porqu de Java em particular ser diferente.


Comentrios (em ingls)

[en-usa] POO [Traduzir] suas [+ Trad.]

e Java no podem ser para todos. importante avaliar prprias necessidades e decidir se Java satisfar essas necessidades a contento ou se seria melhor para voc adotar um outro sistema de programao (inclusive o que voc est usando atualmente). Se voc souber que suas necessidades sero muito especializadas em um futuro prximo e se voc tiver restries especficas que podero no ser satisfeitas por Java, ento recomendvel que voc investigue as alternativas (Em particular, eu recomendo que voc verifique em Python; veja www.Python.org). Mesmo se voc eventualmente escolher Java como sua linguagem, voc pelo menos ter compreendido quais eram as opes e ter uma viso clara das razes pelas quais voc tomou aquela direo. Comentrios (em ingls) como a estrutura de um programa procedural: de dados e chamadas de funes. Para descobrir o significado de tal programa, voc tem que trabalhar um pouco, procurando as chamadas de funes e conceitos de baixo-nvel para criar um modelo em sua mente. Esta a razo pela qual ns precisamos de representaes intermedirias quando desenhamos programas procedurais-por si s, estes programas tendem a ser confusos porque os termos e expresses so muito mais orientados para o computador do que para o problema que voc est resolvendo. Comentrios (em ingls) ao fato de Java introduzir muitos conceitos novos alm voc encontra em uma linguagem procedural, natural que voc imagine que a main( ) de um programa Java seja muito mais complicada do que a de um programa C equivalente. Aqui voc ter uma agradvel surpresa: Um programa Java bem-escrito ser em geral muito mais simples e muito mais fcil de se compreender do que um programa C equivalente. O que voc ver so as definies dos objetos que representam conceitos no espao do seu problema (ao invs de representaes do computador) e mensagens enviadas para esses objetos para representar as atividades naquele espao. Um dos prazeres da programao orientada a objetos que,

[en-usa] Voc sabe [Traduzir] definies [+ Trad.]

[en-usa] Devido [Traduzir] do que [+ Trad.]

52 of 53

12/02/2013 16:41

Pensando em Java, 3 ed. Reviso 4.0: 1: Introduo a Objetos

http://www.hwn.com.br/pej/tij2pej/PEJ303.htm

com um programa bem-desenhado fcil entender o cdigo pela sua simples leitura. Usualmente, h tambm muito menos cdigo, porque muitos dos seus problemas sero resolvidos pela reutilizao de cdigo existente na biblioteca. Comentrios (em
ingls)

[en-usa] [2] Alguns projetistas de linguagem decidiram que [Traduzir] [+ Trad.] orientada a objetos por si s no adequada para

programao resolver de forma fcil todos os problemas de programao, e defendem a combinao de vrias abordagens em uma Linguagem de Programao Multiparadigma. Veja Programao Multiparadigma em Leda por Timothy Budd (Addison-Wesley 1995).

[en-usa] [3] Na verdade isto um pouco restritivo, j que concebvel [Traduzir] [+ Trad.] que objetos existam em diferentes mquinas e espaos de

endereamento, alm de poderem ser armazenados em disco. Nestes casos, a identidade do objeto deve ser determinada por algo distinto do endereo de memria.
[en-usa] [4] Algumas [Traduzir] [+ Trad.] determina a

pessoas fazem uma distino, dizendo que tipo interface, enquanto classe uma implementao particular daquela interface. agradecido ao meu amigo Scott Meyers por este para a maioria dos se est usando

[en-usa] [5] Eu estou [Traduzir] [+ Trad.] termo.

[en-usa] [6] Isto , na verdade, detalhe suficiente [Traduzir] [+ Trad.] diagramas e voc no precisa especificar

agregao ou composio.
[en-usa] [7] Tipos primitivos, [Traduzir] [+ Trad.] caso especial.

que voc ir aprender mais tarde, so um Isto

[en-usa] [8] Exceto, desafortunadamente, para primitivos. [Traduzir] [+ Trad.] discutido em detalhes depois neste livro.

[en-usa] [9] O que a Microsoft est dizendo efetivamente "no to [Traduzir] [+ Trad.] rpido" com C# e .NET. Muitas pessoas levantaram a questo

sobre se programadores VB desejam mudar para qualquer outra coisa, se esta seria Java, C#, ou at VB.NET.

53 of 53

12/02/2013 16:41