sebenta_4

download sebenta_4

of 48

description

LOO

Transcript of sebenta_4

  • Linguagens Orientadas por Objetos

    Licenciatura em Informtica de Gesto

    Ano letivo 2014/2015

    Dora [email protected]

    Setembro de 2014

  • Contedo

    1 Introduo Programao Orientada por Objetos 4

    1.1 Programao Orientada por Objetos . . . . . . . . . . . . . . . . . . . . . 4

    1.2 Origens e Benefcios do modelo POO . . . . . . . . . . . . . . . . . . . . 5

    1.3 Classes, Objetos e Mensagens . . . . . . . . . . . . . . . . . . . . . . . . 6

    1.4 Abstrao e Encapsulamento . . . . . . . . . . . . . . . . . . . . . . . . . 7

    1.5 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    2 Linguagem de Programao Java 10

    2.1 Introduo Histrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    2.2 Vantagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    2.3 Applets e Aplicaes Java . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    2.3.1 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

    2.4 Sintaxe e Semntica da Linguagem de Programao Java . . . . . . . . . 15

    2.4.1 Declaraes e Atribuies . . . . . . . . . . . . . . . . . . . . . . 15

    2.4.2 Comentrios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    2.4.3 Literal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    2.4.4 Expresses e Operaes . . . . . . . . . . . . . . . . . . . . . . . . 19

    2.4.4.1 Operadores Numricos . . . . . . . . . . . . . . . . . . 19

    2.4.4.2 Operadores de Atribuio . . . . . . . . . . . . . . . . . 20

    2.4.4.3 Incrementao e Decrementao . . . . . . . . . . . . . 20

    2.4.4.4 Operadores de Comparao . . . . . . . . . . . . . . . . 20

    Dora Melo [email protected]

  • 22.4.4.5 Operadores Lgicos . . . . . . . . . . . . . . . . . . . . 21

    2.4.4.6 Precedncia dos Operadores . . . . . . . . . . . . . . . 21

    2.4.5 Funes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    2.4.6 Bloco de Instrues . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    2.4.7 Estruturas Condicionais . . . . . . . . . . . . . . . . . . . . . . . 23

    2.4.8 Estruturas de Repetio . . . . . . . . . . . . . . . . . . . . . . . 24

    2.4.9 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    2.5 Algumas caractersticas do Java . . . . . . . . . . . . . . . . . . . . . . . 27

    3 Programao Orientada por Objetos e a Linguagem Java 30

    3.1 A linguagem Java - Packages . . . . . . . . . . . . . . . . . . . . . . . . . 30

    3.2 Exerccios - Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    3.3 Classes e Instncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    3.4 Exerccios - Classes e Instncias . . . . . . . . . . . . . . . . . . . . . . . 33

    3.5 Mtodos Construtores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    3.6 Polimorfismo de Mtodos (Overloading) . . . . . . . . . . . . . . . . . . 35

    3.7 Exerccios - Mtodos Construtores e Polimorfismo de Mtodos . . . . . 35

    3.8 Gesto de Memria - Garbage Collector . . . . . . . . . . . . . . . . . . . 36

    3.9 Exerccios - finalize() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

    3.10 Mtodos Modificadores e Seletores . . . . . . . . . . . . . . . . . . . . . 38

    3.11 Exerccios - Mtodos Modificadores e Seletores . . . . . . . . . . . . . . 39

    3.12 A palavra reservada this . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

    3.13 Exerccios - this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

    3.14 O mtodo toString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

    3.15 Exerccios - toString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

    3.16 Array (vetor) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    3.17 Exerccios - Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

    3.18 BlueJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

    Dora Melo [email protected]

  • 33.19 Exerccios - BlueJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

    Referncias bibliogrficas 47

    Dora Melo [email protected]

  • Captulo 1

    Introduo Programao Orientadapor Objetos

    1.1 Programao Orientada por Objetos

    A orientao a objetos um paradigma de anlise, projeto e programao de sistemasde software baseado na composio e interao entre diversas unidades de softwarechamadas de OBJETOS.

    Em alguns contextos, prefere-se usar modelao orientada aos objetos, em vez de pro-gramao. De fato, o paradigma orientado a objetos tem bases conceituais e origem nocampo de estudo da cognio (ato de adquirir um conhecimento), que influenciou area de Inteligncia Artificial e da Lingustica, no campo da abstrao de conceitos domundo real.

    Na qualidade de mtodo de modelao, tida como a melhor estratgia para se elimi-nar o fosso semntico, i.e., a dificuldade recorrente no processo de modelar o mundoreal, de acordo com o domnio do problema, num conjunto de componentes de soft-ware e que seja o mais fiel na representao desse domnio. Facilita a comunicao doprofissional modelador e do utilizador da rea alvo, na medida em que a correlao dasimbologia e conceitos abstratos do mundo real e da ferramenta de modelao (con-ceitos, terminologia, smbolos, grafismo e estratgias) a mais bvia, natural e exatapossvel.

    Na Programao Orientada a Objetos (POO), uma aplicao vista como uma rede di-nmica de objetos que colaboram e interagem (se relacionam) entre si. Desta forma, osprogramadores de software podem gerir de uma forma mais fcil a complexidade dodomnio do problema, bem como, desenvolver softwares mais flexveis, com manuten-o mais facilitada, alm de melhorar as possibilidades de reutilizao do cdigo.

    Dora Melo [email protected]

  • 5Deste modo, utilizando o paradigma orientado a objetos, modelamos e construmossistemas, baseado nos objetos que compem o mesmo. Como exemplo, poderamospensar numa aplicao de uma agncia bancria como sendo implementada atravs deobjetos cliente, conta corrente, aplicao financeira e assim por diante que se relacio-nam mutuamente.

    Muitos softwares a serem desenvolvidos no futuro usaro algum nvel de Orientao aObjetos.

    Atualmente, o Paradigma Orientado a Objetos engloba uma srie de disciplinas, taiscomo: Programao Orientado a Objetos, Modelao e Design Orientado a Objetos,Banco de dados Orientado a Objetos, Interfaces Orientadas a Objetos , MetodologiasOrientadas a Objetos de desenvolvimento de software, . . .

    C++, C#, VB.NET, Java, Object Pascal, Objective-C, Python, SuperCollider, Ruby eSmalltalk so exemplos de linguagens de programao orientadas por objetos.

    ActionScript, ColdFusion, Javascript, PHP (a partir da verso 4.0), Perl (a partirda verso 5) e Visual Basic (a partir da verso 4) so exemplos de linguagens deprogramao com suporte orientado a objetos.

    1.2 Origens e Benefcios do modelo POO

    A necessidade de, para efeitos de simulao e anlise de sistemas, desenvolver uma lin-guagem de programao com a capacidade de modelar facilmente sistemas (Nygaard,61).

    Na dcada de 1960, o contrato entre a NCC (Norwegian Computing Center) e a UNIVACresultou o desenvolvimento da linguagem SIMULA I (Nygaard e Dahl, 65), linguagemde programao de simulao. Esta linguagem considerada a primeira linguagemorientada por objetos.

    Vrios melhoramentos deram origem ao SIMULA 67 que introduziu a grande maioriados principais conceitos da Programao Orientada por Objetos: classes, objetos, he-rana, mtodos virtuais. O mais recente standard o SIMULA 87.

    Em 1988, nos laboratrios BELL, Bjarne Stroustrup desenvolveu uma extenso lin-guagem C ANSI, destinada a suportar todos os conceitos chaves do SIMULA, e que to-mou a designao de C++.

    No incio da dcada de 1990, um pequeno grupo de engenheiros da Sun Microsys-tems (Sun), chamado Green Team e liderado por James Gosling, criou a linguagem deprogramao orientada por objetos Java.

    A POO , atualmente, o paradigma predominante na implementao de programas

    Dora Melo [email protected]

  • 6complexos, caracterizados pela interao de um largo nmero de componentes.

    Entre as muitas linguagens orientadas por objectos encontram-se o Smalltalk (Xerox),Eiffel (B. Meyer), CLOS (D. Bobrow e G. Ziczales), SELF (D. Ungar), JAVA (SUN) e C#(Microsoft).

    De entre todos os benefcios da utilizao do modelo orientado por objetos, destacam-se:

    Reutilizao de cdigo

    Modelao dos objetos do mundo real

    Polimorfismo

    Simplificao dos processos de teste e debugging (localizar e eliminar os erros)

    Facilidade de manuteno do cdigo

    1.3 Classes, Objetos e Mensagens

    da natureza humana realizar modelaes a partir da maneira como interpreta a natu-reza. No contexto da POO, consiste em modelar e implementar sistemas utilizando-seobjetos.

    O foco da POO no est nos procedimentos do universo e sim nos objetos que existemnele, j que eles formam um elemento natural para o modelo e o mundo compostopor objetos.

    Definio 1.3.1 (Objeto) O conceito OBJETO representa uma abstrao de algo no dom-nio do problema que reflete os recursos de um sistema de reter informaes sobre ele, interagircom ele, ou ambas as coisas (Richard C. Lee e Willian M. Tepfenhart em UML e C++ GuiaPrtico de Desenvolvimento Orientado a Objetos).

    Definio 1.3.2 Na POO implementa-se um conjunto de classes que definem os objetospresentes no sistema de software. Cada CLASSE determina o comportamento (operaes,definidas nos mtodos) e estados possveis (atributos) de seus objetos, assim como o relaci-onamento (interao) com outros objetos. Todo objeto possui atributos e pode prestar algumtipo de servio. Estes atributos e servios so conhecidos, respetivamente, como membros dedados e mtodos.

    Os objetos na POO so ento gerados a partir de uma estrutura conhecida como classe,que define conjunto de dados e rotinas para processar estes dados. Estas classes podem

    Dora Melo [email protected]

  • 7ser vistas como moldes (modelos, padres) que representam o conjunto de objetos quecompartilham os mesmos atributos, operaes e relacionamentos.

    Cada classe contm todas as informaes que ela precisa para executar qualquer pro-cessamento exigido pelo objeto que ela representa. Desde modo, para termos um ob-jeto para utilizao pelo nosso programa, temos que ger-lo a partir da classe desejada.

    Podemos fazer uma analogia com o tipo de dado inteiro das linguagens de programa-o. Para armazenarmos em nosso programa um valor inteiro, precisamos declararcom o nome que desejarmos, uma varivel deste tipo no programa.

    Resumindo, objetos podem ser vistos como instncias de classes.

    Na POO o programador responsvel por moldar o mundo dos objetos, e explicar paraestes objetos como eles devem interagir entre si. Os objetos "conversam"uns com osoutros atravs do envio de mensagens, e o papel principal do programador especificarquais sero as mensagens que cada objeto pode receber, e tambm qual a ao queaquele objeto deve realizar ao receber aquela mensagem em especfico.

    Definio 1.3.3 Uma mensagem uma chamada a um objeto para invocar uma das suasoperaes, ativando um comportamento descrito por sua classe. A resposta a uma mensagem o resultado da execuo da operao invocada para o estado do objeto.

    1.4 Abstrao e Encapsulamento

    Um modelo orientado por objetos constitudo por um conjunto de Classes, que cor-respondem a definies de conceitos, e pelas relaes que possvel estabelecer en-tre elas, num determinado contexto associado ao problema. Ou seja, na forma maissimples, um problema orientado por objetos representado pela interao entre asdiferentes instncias (objetos) das classes.

    A abstrao e o encapsulamento da definio de um problema consiste no mtodo deanlise que examina os requisitos sob a perspetiva das classes e objetos encontrados novocabulrio do domnio do problema.

    A abstrao e o encapsulamento so dois elementos fundamentais do modelo de obje-tos.

    Definio 1.4.1 (Abstrao) A abstrao a habilidade de concentrar nos aspetos essen-ciais de um contexto qualquer, ignorando caractersticas menos importantes ou acidentais.

    Em modelao orientada a objetos, uma classe uma abstrao de entidades existentesno domnio do sistema de software.

    Dora Melo [email protected]

  • 8Definio 1.4.2 (Encapsulamento) O encapsulamento consiste na ocultao do estadode um objeto, i.e., existe informao associado a um objeto que de ndole privado e porconseguinte o seu acesso ter de ser protegido.

    O principal objetivo da abstrao e do encapsulamento criar a iluso de simplici-dade, protegendo o utilizador da vasta e frequente arbitrria complexidade externa,em particular da implementao.

    Desta forma a abstrao caracterizada pela forma de se concentrar nos aspetos queso relevantes para determinado propsito, ignorando aqueles que no o so. A abs-trao permite modelar o mundo real, est menos sujeito a alteraes e permite sim-plificar o tratamento de informao complexa.

    As boas abstraes so difceis de encontrar. A procura faz-se de forma evolutiva eiterativa. Podemos definir que uma boa abstrao caracteriza por ser apropriada(corresponder a uma necessidade e ser capaz de a satisfazer) e possuir o nvel ade-quado.

    As vantagens do encapsulamento consistem na

    independncia das caractersticas de implementao duma entidade relativamentes outras - modularidade;

    possibilidade de mudar a implementao sem alterar o interface;

    o utilizador da entidade no precisa de conhecer os detalhes da sua implementa-o;

    Na POO o programador responsvel por moldar o mundo dos objetos, e explicar paraestes objetos como eles devem interagir entre si. Os objetos conversam/interagemuns com os outros atravs do envio de mensagens, e o papel principal do programador especificar quais sero as mensagens que cada objeto pode receber, e tambm qual aao que aquele objeto deve realizar ao receber aquela mensagem em especfico.

    1.5 Exerccios

    1. Imagine que pretende desenvolver uma aplicao de uma aula como sendo im-plementada atravs de objetos, i.e, tendo por base a modelao orientada porobjetos. Tendo em conta o contexto do problema, estabelea os conceitos quepodem ser considerados como Classes, Objetos, Atributos, Operaes e Relacio-namentos.

    Dora Melo [email protected]

  • 92. Imagine que pretende desenvolver uma aplicao de uma agncia bancria comosendo implementada atravs de objetos, i.e, tendo por base a modelao orien-tada por objetos. Tendo em conta o contexto do problema, estabelea os conceitosque podem ser considerados como Classes, Objetos, Atributos, Operaes e Re-lacionamentos.

    Dora Melo [email protected]

  • Captulo 2

    Linguagem de Programao Java

    2.1 Introduo Histrica

    No incio dos anos 90, ampliar o poder da computao em rede para as atividadesda vida quotidiana era uma viso radical. A World Wide Web (www) iniciou o seucrescimento efetivo durante a segunda metade da dcada de 1990, quando se verificouuma expanso em grande escala dos servidores www e do aparecimento de aplicaescomerciais na web.

    Em 1991, um pequeno grupo de engenheiros da Sun Microsystems (Sun), chamadaGreen Team, acreditava que a prxima gerao na computao era a unio dos dis-positivos digitais de consumo e computadores. Liderada por James Gosling, a equipacriou a linguagem de programao orientada por objectos que iria revolucionar o nossomundo e que foi intitulada de Java.

    Em 1997, a Sun tentou submeter a linguagem a padronizao pelos rgos ISO/IEC eECMA, mas acabou por desistir. O Java ainda se mantm como uma linguagem padro,que controlada atravs da Java Community Process (JCP).

    Em 13 de Novembro de 2006, a Sun lanou a maior parte do Java como software livre,sob os termos da GNU General Public Licence (GPL).

    Em 8 de Maio de 2007, a Sun finalizou o processo, tornando praticamente todo o cdigoJava como software de cdigo aberto.

    A utilizao do Java veio mudar a forma como a interao ocorria na web. Pequenosprogramas (Applets) podem ser integrados em pginas www e assim realizar as mais va-riadas aes. Uma vez que se trata de um ficheiro executvel, as Applets Java podemrealizar todo o tipo de tarefas numa pgina web, tais como: animao, interao com outilizador, processamento de dados, e tudo o que possvel um programa realizar.

    Dora Melo [email protected]

  • 11

    O tipo de interatividade que estava disponvel antes do aparecimento do Java era ba-seado em aplicaes CGI (Common Gateway Interface)1 que corriam nos servidoreswww. A comunicao entre o cliente www e o servidor baseado no HTML (HyperTextMarkup Language)2, o protocolo de comunicaes na web.

    A linguagem Java diferencia-se das linguagens convencionais por ser compilada paraum bytecode que executado por uma mquina virtual Java Virtual Machine (JVM),ver Figuras 2.1 e 2.2.

    Figura 2.1: Processo de compilao de um programa na linguagem Java.

    2.2 Vantagens

    A linguagem Java foi projetada tendo em vista os seguintes objetivos:

    Orientao por objetos - Baseado no modelo de Simula67;

    Portabilidade - Independncia de plataforma write once, run anywhere;

    Recursos de Rede - Possui extensa biblioteca de rotinas que facilitam a coo-perao com protocolos TCP/IP (Transmission Control Protocol/Internet

    1CGI o mtodo padro utilizado para gerar contedos dinmicos nas pginas e aplicaes web. Omtodo CGI, quando implementada num servidor web, fornece um interface entre o servidor web e osprogramas que geram os contedos dinmicos.

    2HTML a linguagem padro de Marcao utilizada para criar pginas web.

    Dora Melo [email protected]

  • 12

    Figura 2.2: Processo de compilao de um programa na linguagem Java.

    Protocol)3, como HTTP e FTP (File Transfer Protocol)4;

    Segurana - Pode executar programas via rede com restries de execuo.

    Destacam-se ainda outras vantagens, tais como:

    Sintaxe similar ao C/C++;

    Facilidades de Internacionalizao Suporta de forma natural caracteres Uni-code;

    Simplicidade na especificao, tanto da linguagem como do ambiente de execu-o (JVM);

    Disponibiliza um vasto conjunto de bibliotecas (ou APIs, Application Program-ming Interface);

    2.3 Applets e Aplicaes Java

    Os programas em Java dividem-se em dois grupos principais: Applets e Aplicaes.

    Definio 2.3.1 (Applets) Os Applets so programas Java transferidos pela internet en-tre um servidor e um cliente WWW e executados no browser da mquina do cliente.

    3TCP/IP um conjunto de protocolos de comunicao entre computadores em rede.4FTP uma forma bastante rpida e verstil de transferir arquivos (ficheiros), sendo uma das mais

    usadas na Internet.

    Dora Melo [email protected]

  • 13

    Os Applets s podem ser executadas utilizando browsers (navegadores de internet)capazes de interpretar Java (Appletviewer)

    O desenvolvimentos de Applets segue o seguinte conjunto de polticas de segurana:

    No podem ler ou escrever no disco da mquina do cliente (exceo para algunsbrowsers);

    No pode haver comunicao entre a Applet e outros servidores www;

    Nenhuma Applet pode executar outros programas existentes na mquina do cli-ente.

    Definio 2.3.2 (Aplicaes Java) As aplicaes Java so programas mais gerais escritosna linguagem Java e executadas localmente. As aplicaes Java no necessitam de um brow-ser para serem executadas, pois o cdigo resultante ele prprio um executvel e indepen-dente da plataforma.

    Definio 2.3.3 (Programas Java) Um programa Java pode ser um Applet ou uma apli-cao, ou ambos, dependendo da forma como se escreve esse programa e os recursos que oprograma utiliza.

    Exemplo 2.3.1 (Primeiro Progama Java)

    Primeiro exemplo de um programa

    / * ** @( # ) F i r s tProgram . j a v a** F i r s t j a v a program** @author Dora Melo** @vers ion 1.0 30/09/2014* /

    public c l a s s FirstProgram {

    / * ** @param a r g s* /

    public s t a t i c void main ( S t r in g [ ] args ) {

    / / TODO, add your program codeSystem . out . p r i n t l n ( " HelloWorld ! " ) ;

    }

    Dora Melo [email protected]

  • 14

    }

    Exemplo 2.3.2 (Primeira Applet em Java)

    Primeiro exemplo de um Applet

    / * ** @( # ) F i r s t A p p l e t . j a v a** F i r s t j a v a a p p l e t** @author Dora Melo** @vers ion 1.0 30/09/2014* /

    import j ava . applet . * ;import j ava . awt . * ;

    public c l a s s Firs tApple t extends Applet {

    public void i n i t ( ) { }public void stop ( ) { }public void paint ( Graphics g ) {

    g . se tColor ( Color . BLUE ) ;g . f i l l R e c t ( 0 , 0 , 400 , 4 0 0 ) ;

    g . se tColor ( Color .CYAN) ;g . drawRect (20 , 20 , 30 , 3 0 ) ;

    g . se tColor ( Color .RED ) ;g . f i l l O v a l (60 , 70 , 20 , 5 0 ) ;

    }}

    2.3.1 Exerccios

    1. Crie uma pasta denominada aulas na sua zona de trabalho.

    2. Execute a aplicao Eclipse.

    3. Altere o seu atual espao de trabalho (workspace) para a pasta aulas, criadaanteriormente.

    4. Crie o seu primeiro projeto Java, intitulado PrimeiroPrograma.

    Dora Melo [email protected]

  • 15

    5. Crie o seu primeiro programa, transcreva-o do Exemplo 2.3.1.

    6. Adicione ao programa anterior uma instruo que imprima para o standard out-put uma mensagem diferente.

    7. Sabendo que os caracteres \n representam uma quebra de linha, acrescente aoprograma uma instruo que imprima para o standard output duas linhas detexto.

    2.4 Sintaxe e Semntica da Linguagem de ProgramaoJava

    2.4.1 Declaraes e Atribuies

    Definio 2.4.1 (Declarao) Uma declarao a instruo mais simples que pode serfeita em Java. Toda a instruo terminada com o caracter ;.

    Exemplo 2.4.1 (Declaraes em Java)

    int i = 1 ;import j ava . awt . Font ;System . out . p r i n t l n ( " Thismotorcycle i s a " + c o l o r + " " + make ) ;m. engineState = true ;

    Para se utilizarem variveis numa aplicao em Java necessrio a sua declarao pr-via.

    Definio 2.4.2 (Declarao de variveis) A declarao de uma varivel consiste numainstruo constituda por um tipo de dados seguido do nome para a varivel.

    Definio 2.4.3 (Regras e convenes de nomenclatura: Nome de atributos ou variveis)Os nomes dos atributos (variveis) podem comear com qualquer letra e os caracteres $ ou_, porm no podem comear com nmeros.

    Caso o nome de um atributo (varivel) seja composto por mais de uma palavra, a primeiraletra de cada palavra deve ser em maiscula, exceto a primeira palavra.

    Dora Melo [email protected]

  • 16

    Figura 2.3: Tipos de Dados Primitivos na Linguagem Java.

    Exemplo 2.4.2 (Declarao de variveis)

    int myAge ;S t r i n g myName;boolean i s T i r e d ;

    Definio 2.4.4 (Tipos de dados das variveis) Em adio ao nome da variveis, cadadeclarao de uma varivel deve ter um tipo, que define os possveis valores que a varivelpode tomar.

    O tipo de dados de uma varivel pode ser um dos seguintes tipos:

    Um dos 8 tipos de dados simples (inteiros, reais, caracteres e lgicos), ver Figura 2.3;

    O nome de uma classe ou interface;

    Um array.

    Definio 2.4.5 (Instruo de Atribuio) Uma atribuio uma instruo que per-mite definir um determinado valor para uma varivel. Depois de uma varivel estar de-clarada possvel atribuir-lhe valores. O operador de atribuio o smbolo =.

    Exemplo 2.4.3 (Instrues de atribuio)

    s i z e = 14;tooMuchCaffeine = true ;

    Dora Melo [email protected]

  • 17

    2.4.2 Comentrios

    O Java permite definir 3 tipos de comentrios.

    Os smbolos /* e */ limitam o incio e o fim de um longo comentrio, respetivamente.

    Exemplo 2.4.4 (Comentrio longo)

    / * I don t know how I wrote t h i s next p a r t ; I was workingr e a l l y l a t e one n i g h t and i t j u s t s o r t o f appeared . Is u s p e c t t h e code e l v e s d id i t f o r me . I t might be wisenot t o t r y and change i t .

    * /

    O smbolo // utilizado para uma nica linha de comentrio.

    Exemplo 2.4.5 (Comentrio de uma linha)

    int v i c e s = 7 ; / / a r e t h e r e r e a l l y only 7 v i c e s ?

    Os smbolos /** e */ limitam o incio e o fim de um longo comentrio (idntico aoprimeiro). So utilizados para comentar o incio dos documentos, de uma classe ou deuma funo, quando colocados imediatamente antes da sua definio. Estes coment-rios aparecem como informao explicativa do conceito definido e que includa nadocumentao do programa.

    Exemplo 2.4.6 (Comentrio de cabealho de um documento ou de um mtodo)

    / * ** @( # ) Fi r s tProgram . j a v a** F i r s t j a v a program** @author Dora Melo** @vers ion 1.0 21/02/2014* /

    ou

    / * ** @param a r g s* /public s t a t i c void main ( S t r in g [ ] args ) {. . .}

    No possvel definir comentrios dentro de comentrios.

    Dora Melo [email protected]

  • 18

    2.4.3 Literal

    Definio 2.4.6 (Literal) Um valor constante definido num programa denominado deliteral. Os literais representam valores numricos (inteiros ou reais), caracteres, booleanosou strings.

    Os literais Booleanos ou Lgicos correspondem aos valores pr-definidos true e false.

    Os literais inteiros representam os nmeros inteiros e podem ser de base octal, decimal,ou hexadecimal:

    Literais Inteiros Decimais - so nmeros na base decimal que representam umvalor inteiro. Eles podem ser tanto byte, como short, int ou long. Para escreverum literal inteiro na base decimal, basta digitar o seu valor com um desses dgitos0, 1, 2, 3, 4, 5, 6, 7, 8 e 9.

    Literais Inteiros Octais - so nmeros na base octal que representam um valorinteiro. Para representar este tipo de literal, basta escrever os seus dgitos co-locando 0 (dgito zero) antes. Os dgitos para este tipo so 0, 1, 2, 3, 4, 5, 6 e7.

    Literais Inteiros Hexadecimais - so nmeros na base hexadecimal que represen-tam um valor inteiro. Para representar este tipo de literal, basta escrever os seusdgitos normalmente precedidos pelos caracteres 0x (zero xis) ou 0X. Os dgitospermitidos so o 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, a, B, b, C, c, D, d, E, e, F, f.

    Literais Fracionrios (virgula flutuante) - correspondem aos nmeros racionais.Para represent-los, basta escrever um nmero inteiro seguido por um ponto epor sua parte decimal - o ponto faz o lugar da vrgula. Outra opo seria es-crever o nmero em notao cientfica, escrevendo primeiro o valor da mantissa,seguido do caracter e e do valor do expoente (de base 10).

    Os literais Caracteres correspondem a um caracter. Para represent-los, bastaescrever o caracter cercado por apstrofos. Tambm podem armazenar caracteresde controle de formatao (quebra de linha, etc.) e tambm caracteres no formatoUnicode.

    Os literais de cadeias de caracteres (denominados de Strings) correspondem asequncias de caracteres. Para represent-los, escreva o(s) caracter(es) cercado(s)por aspas.

    O literal nulo representa a ausncia de tipo e de dado (valor). Para representarutiliza-se a palavra null.

    Dora Melo [email protected]

  • 19

    Exemplo 2.4.7 (Literais)boolean r e s u l t = true ;char capi ta lC = C ;byte b = 100;short s = 10000;int i = 100000;double d1 = 1 2 3 . 4 ;double d2 = 1.234 e2 ; / / mesmo v a l o r que d1 , mas na notacao c i e n t i f i c af l o a t f1 = 123.4 f ;int decVal = 26; / / o numero 26 na base dec imalint octVal = 032; / / o numero 26 na base o c t a lint hexVal = 0x1a ; / / o numero 26 na base hexadec iaml

    S t r i n g minhaString = "Como e s t a s ? " ,vazia = " " , / / S t r i n g v a z i as1 = " \" " , / / s t r i n g que contem o c a r a c t e r "s2 = " I s t o euma s t r i n g " , / / s t r i n g que contem 17 c a r a c t e r e ss3 = " I s t o euma s t r i n g " + / / na verdade o v a l o r f i n a l da s t r i n g e formado

    " deduas l i n h a s " ; / / p e l a c o n s t i t u i c a o de d o i s l i t e r a i s s t r i n g ,/ / onde o s imbo lo + r e p r e s e n t a a c o n c a t e n a c a o/ / das duas s t r i n g s

    2.4.4 Expresses e Operaes

    Definio 2.4.7 As expresses so a forma mais simples de declaraes em Java que real-mente faz algo.

    As expresses so declaraes que retornam valores.

    Os operadores so smbolos especiais que so utilizados nas expresses.

    2.4.4.1 Operadores Numricos

    Na Figura 2.4 est representados o conjunto de operadores numricos que fazem parteda linguagem Java.

    Figura 2.4: Operadores Numricos.

    Dora Melo [email protected]

  • 20

    2.4.4.2 Operadores de Atribuio

    Na Figuras 2.5 est representado o conjunto de operadores de atribuio que fazemparte da linguagem Java.

    Figura 2.5: Operadores de Atribuio.

    2.4.4.3 Incrementao e Decrementao

    Tal como na linguagem C, os operadores ++ e so utilizados para incrementar edecrementar, respectivamente, um valor de uma unidade.

    Exemplo 2.4.8 (Incrementar e Decrementar)

    x++; / / o mesmo que x = x + 1 ;Y; / / o mesmo que y = y 1 ;

    2.4.4.4 Operadores de Comparao

    Os operadores de comparao so simbolos utilizados para a comparao entre ex-presses numricas e cujo resultado um valor lgico, i.e., true ou false. A Figura2.6 apresenta o conjunto de operadores numricos que existem na linguagem Java.

    Figura 2.6: Operadores de Comparao.

    Dora Melo [email protected]

  • 21

    2.4.4.5 Operadores Lgicos

    Os operadores lgicos so simbolos utilizados em expresses lgicas. A Figura 2.7apresenta os vrios operadores lgicos que existem no Java.

    Figura 2.7: Operadores Lgicos.

    2.4.4.6 Precedncia dos Operadores

    As seguintes Figuras 2.8 apresenta por ordem decrecente a prioridade, na libguagemJava, entre os diferentes operadores.

    Figura 2.8: Precedncia dos Operadores.

    Para alterar a ordem natural da avaliao de expresses, basta colocar parnteses aenvolver a expresso que se pretende avaliar em primeiro.

    Dora Melo [email protected]

  • 22

    2.4.5 Funes

    Definio 2.4.8 Funes so rotinas ou sub-rotinas automatizadas.

    Sintaxe:

    v i s i b i l i d a d e tipoDadosRetorno nomeFuncao ( tipoDados1 arg1 , tipoDados1 arg2 , . . . ) {codigo da funcao( corpo da funcao , conjunto de i n s t r u c o e s a serem executadas )

    }

    A visibilidade corresponde ao tipo de acesso (permisses de acesso): pblico, privado ouprotegido (no prximo captulo abordaremos este assunto mais detalhadamente).

    Sempre que se pretende utilizar a mesma codificao para algo especfico, define-seuma funo. Dessa forma, sempre que se queira utilizar aquela codificao, ao invsde repetirmos o cdigo inteiro novamente, basta invocar a funo. As funes soextremamente teis e adaptveis.

    Exemplo 2.4.9 (Funes)

    public c l a s s ExemploFuncao {/ / c r i a n d o a funcaopublic s t a t i c void mostrarMensagem ( ) {

    System . out . p r i n t l n ( " MinhaMensagem" ) ;}

    public s t a t i c boolean ePrimo ( long nr ) {i f ( nr < 2) return f a l s e ;for ( long i = 2 ; i

  • 23

    2.4.6 Bloco de Instrues

    Definio 2.4.9 Um bloco de instrues um conjunto de instrues rodeado pelos smbolos{ e }.

    Exemplo 2.4.10 (Bloco de Instrues)

    void blocoTeste ( ) {/ / i n i c i o do corpo da funcao

    int i = 10;{ / / i n i c i o do b l o c o ( con junto ) de i n s t r u c o e s

    int i = 50;System . out . p r i n t l n ( " dentrodobloco : " ) ;System . out . p r i n t l n ( " x= " + x ) ;System . out . p r i n t l n ( " y= " + y ) ;

    } / / f im do b l o c o de i n s t r u c o e s}

    2.4.7 Estruturas Condicionais

    Definio 2.4.10 (Estrutura if) A estrutura condicional if semelhante utilizada naslinguagens C. No entanto, o teste condicional tem de retornar um valor lgico, no poderretornar um inteiro como acontece na linguagem C.

    Sintaxe:

    Definio 2.4.11 (Estrutura Switch) A estrutura condicional switch na linguagem Javatem o mesmo comportamento e sintaxe da linguagem C

    Sintaxe:

    Dora Melo [email protected]

  • 24

    Exemplo 2.4.11 (Estruturas Condicionais)

    int a = 10 , b = 20 , c = 30;int s t a t u s = 1;i f ( a > b && a > c ) {

    s t a t u s = 1 ;}e l s e i f ( b > c ) {

    s t a t u s = 2 ;}e l s e {

    s t a t u s = 3 ;}switch ( s t a t u s ) {case 1 :

    System . out . p r i n t l n ( " aeomaior " ) ;break ;

    case 2 :System . out . p r i n t l n ( " beomaior " ) ;break ;

    case 3 :System . out . p r i n t l n ( " ceomaior " ) ;break ;

    default :System . out . p r i n t l n ( "Naoep o s s i v e l determinar " ) ;

    }

    2.4.8 Estruturas de Repetio

    Definio 2.4.12 (Estrutura for) A estrutura de repetio for semelhante utilizadana linguagem C, repete uma instruo ou um bloco de instrues um determinado nmerode vezes at uma condio ser alcanada.

    Sintaxe:

    Definio 2.4.13 (Estruturas while e do) As estruturas de repetio while e do tal comoo for, permitem que um bloco de instrues possa ser executado repetidamente at que umadeterminada condio seja alcanada. No entanto, na linguagem Java a condio de testetem de ser um booleano.

    Sintaxe:

    Dora Melo [email protected]

  • 25

    Exemplo 2.4.12 (Estruturas de repetio)

    for ( int i = 1 ; i

  • 26

    iv. Crie tambm as variveis gastosFevereiro e gastosMarco , inicializando-as com os valores 23000 e 17000, respectivamente, utilize uma linhapara cada declarao;

    v. Crie uma varivel chamada gastosT rimestre e inicialize-a como a somadas outras 3 variveis:

    int gastosT rimestre = gastosJaneiro+ gastosFevereiro+ gastosMarco;

    vi. Imprima para o standard output o valor da varivel gastosT rimestre.

    (b) Adicione cdigo (sem alterar as linhas que j existem) na classe anterior paraimprimir a mdia trimestral de gasto junto com uma mensagem adequada,criando para o efeito a varivel mediaT rimestral. Para isso, a mensagem aescrever no standard output ser a concatenao de uma String com o valorda varivel, por exemplo, Valor da mdia trimestral = + mediaT rimestral.

    (c) Construa uma funo que inclua todo o cdigo escrito anteriormente e nafuno principal invoque-a. Verifique o resultado obtido.

    4. Crie um novo projeto Java denominado exercicios. Dentro deste, crie a classeprincipal denominada ExerciciosDeJava. Construa uma funo que respondaa cada um dos seguintes exerccios. Na funo principal dever colocar o cdigonecessrio para que o resultado de cada funo seja mostrado no standard output.

    (a) Imprima todos os nmeros de 150 a 300.

    (b) Imprima a soma total de todos os nmeros de 1 at 1000.

    (c) Imprima todos os mltiplos de 3, entre 1 e 100.

    (d) Altere as funes criadas nos exerccios das alneas anteriores, de forma queos valores necessrios para o clculo sejam passados por argumentos.

    (e) Imprima o fatorial de 10, utilizando o mtodo iterativo.

    O fatorial de um nmero n n (n 1) (n 2) ... 1. O fatorial de 0 1. Ofatorial de 1 (0!) 1 = 1. O fatorial de 2 (1!) 2 = 2, etc.

    (f) No cdigo do exerccio anterior, altere-o de forma que o valor do fatorial acalcular possa ser enviado por parmetro para a funo.

    (g) Imprima o fatorial de qualquer nmero, utilizando o mtodo recursivo.

    (h) Crie uma funo que calcule os fatoriais de 20 a 30 e depois imprima osseus resultados. Para o clculo dos fatoriais utilize uma das funes criadasanteriormente.

    (i) Altere a funo criada na alnea anterior de forma que os valores, mnimose mximos dos fatoriais a calcular, sejam passados por argumento funo.

    Dora Melo [email protected]

  • 27

    5. Construa um novo projeto denominado metodos. Dentro deste, crie a classeprincipal denominada ExerciciosDeJava. Construa uma funo que respondaa cada um dos seguintes exerccios. Na funo principal dever colocar o cdigonecessrio para que o resultado de cada funo seja mostrado no standard output.

    (a) Escreva uma funo que, dada uma varivel x com algum valor inteiro, te-mos um novo x de acordo com a seguinte regra:

    se x par, x = x/2;

    se x mpar, x = 3 x+ 1; imprime x;

    a funo deve parar quando x tiver o valor final de 1. Por exemplo, parax = 40, a sada ser:

    40 > 20 > 10 > 5 > 16 > 8 > 4 > 2 > 1(b) Construa uma funo que desenhe para o standard output a seguinte pir-

    mide de nmeros.

    0102 0203 03 0304 04 04 0405 05 05 05 0506 06 06 06 06 0607 07 07 07 07 07 0708 08 08 08 08 08 08 0809 09 09 09 09 09 09 09 0910 10 10 10 10 10 10 10 10 1011 11 11 11 11 11 11 11 11 11 11

    2.5 Algumas caractersticas do Java

    O Java no tem um tipo ponteiros explcito.

    Todas as referncias a objetos, atribuies de variveis, argumentos passados para osmtodos e os elementos de matriz so realizados usando referncias implcitas.

    As referncias e os ponteiros so essencialmente a mesma coisa, exceto na impossibili-dade de se poder fazer a aritmtica de ponteiro sobre as referncias.

    As referncias permitem definir facilmente estruturas em Java, como listas ligadas, semexplicitar ponteiros. Basta criar um n de lista ligada com as variveis que apontam

    Dora Melo [email protected]

  • 28

    para o seguinte e anterior n. Para inserir itens na lista, atribuir a essas variveis osobjetos correspondentes a outro n.

    No Java, as strings so objetos da classe String, e todos os mtodos que operam sobreas strings, tratam-nas como verdadeiras entidades. As strings no so terminadas como caracter nulo e o seu tamanho obrigatoriamente cumprido.

    No Java, toda a gesto de memria automtica. A reserva de memria feita auto-maticamente aquando da criao de um objeto. Em runtime, o Garbage Collector (gc)liberta a memria atribuda a um objeto quando este j no necessrio. As funestais como malloc() e free()s da linguagem C, no existem no Java.

    No Java no existem tipos de dados sem sinal (unsigned data types). exceo doscaracteres que so por definio 16-bit unsigned integer.

    No Java, os valores booleanos no so tratados como inteiros. O tipo de dados booleancontm apenas 2 valores - true, false.

    O agrupamento de dados feito exclusivamente atravs da definio de classes. Ter-mos como struct, enum, typedef foram excludos da linguagem Java.

    As precedncias e associaes dos operadores comportam-se como na linguagem C.

    As estruturas de controlo if e de repetio while e do funcionam como no C. excep-o de que a condio de controlo uma expresso lgica.

    O Java no suporta mecanismos de listas de argumentos de comprimento varivel parafunes, como na linguagem C. Todas as definies de mtodo devem ter um nmeroespecfico e explcito de argumentos. No Java, os argumentos da linha de comandoJava tm um comportamento diferente dos do C. O primeiro elemento do vector deargumentos argv[0] no C/C++ o nome do prprio programa. No Java, o primeiroelemento corresponde ao primeiro dos restantes argumentos. Ou seja, no Java argv[0]corresponde ao argv[1] na linguagem C/C++. No Java no existe forma de dentro doprograma se saber o seu nome.

    O Java no contm um pr-processador, e por esta razo no contm #defines oumacros.

    As constantes podem ser criadas utilizando o modificador final, quando se declaraclasses e instncias variveis.

    O Java no contm a palavra chave const ou a capacidade da passagem de refernciasconstantes, como no C/C++;

    No Java, s existe a relao de herana simples entre classes. Poder eventualmenteexistir um conceito semelhante herana mltipla quando estabelecida atravs de in-terfaces.

    Dora Melo [email protected]

  • 29

    Todas as funes so definidas como mtodos. No existem funes fora do mbito declasses.

    O termo goto no existe no Java.

    Dora Melo [email protected]

  • Captulo 3

    Programao Orientada por Objetos e aLinguagem Java

    3.1 A linguagem Java - Packages

    Um programa na linguagem Java , simplesmente, a representao e construo deum conjunto de classes. A execuo de um programa em Java consiste na criao,interao e destruio de instncias dessas classes.

    O ambiente Java disponibiliza uma biblioteca de classes que implementam uma sriede comportamentos bsicos - Java Class Library (JCL).

    As caractersticas da biblioteca de classes so acedidas atravs de classes agrupadas emPackages (java.lang; java.math; java.io, etc.).

    Definio 3.1.1 As Packages em Java so uma forma de agrupar classes e interfaces. Umnome de uma package o mesmo que o nome da diretoria (pasta) que contm os ficheiros*.java. As package so criadas quando se define um programa em Java, e cujo nome sepretende usar a partir de outras bibliotecas atravs de uma declarao de importao.

    Exemplo 3.1.1 (Packages)

    package b i b l i o t e c a ; / / d e c l a r a a d e f i n i c a o a t u a l como fazendo/ / p a r t e d e s t a package

    import b i b l i o t e c a . Constra int ; / / impor tar a c l a s s e C o n s t r a i n t que/ / f a z p a r t e da package b i b l i o t e c a

    import b i b l i o t e c a . Var iable ;

    As Packages permitem:

    Dora Melo [email protected]

  • 31

    Que os mdulos dos grupos de classes estejam disponveis, apenas quando foremnecessrios;

    Eliminar potenciais conflitos entre nomes de classes em diferentes grupos declasses.

    As bibliotecas de classes do Java Developers esto contidas numa package chamadajava. A package java contm as packages de classes que definem a prpria linguagem(java.lang), as classes input e output (java.io), alguns servios bsicos de rede e awindow toolkit functions.

    As classes definidas noutras packages (tais como: sun e netscape) podem estar dispo-nveis apenas em implementaes especficas.

    Por defeito, as classes do utilizador tm acesso automtico apenas s classes do java.lang.O uso de classes contidas noutras packages obriga referncia explcita do nome daclasse ou a importao da classe no ficheiro fonte do utilizador.

    3.2 Exerccios - Packages

    1. No projeto metodos, criado em 5, defina uma funo que imprima 50 nmerosinteiros gerados aleatoriamente de 1 a 100 e teste a sua execuo. Para tal, deverutilizar o mtodo nexInt(intn), includo na biblioteca java.util.Random. Con-sulte:

    http://docs.oracle.com/javase/6/docs/api/java/util/Random.html

    http://www.tutorialspoint.com/java/util/random_nextint_inc_exc.htm.

    2. Generalize a funo anterior, de forma que os valores importantes para o clculosejam passados por argumento. Teste as alteraes efetuadas.

    3.3 Classes e Instncias

    Na Programao Orientada aos Objetos (POO), uma aplicao vista como uma rededinmica de objetos que colaboram e interagem entre si. Esta visualizao permite aosimplementadores de software gerir mais facilmente a complexidade do domnio doproblema e desenvolver aplicaes mais flexveis, para alm de melhorar as possibili-dades de reutilizao do cdigo desenvolvido.

    Deste modo, utilizando o paradigma Orientado a Objetos, modelamos e construmossistemas, baseado nos objetos que compem o mesmo. Como exemplo, poderamospensar numa aplicao de uma agncia bancria como sendo implementada atravs de

    Dora Melo [email protected]

  • 32

    objetos que se relacionam mutuamente, tais como cliente, conta corrente, aplicaofinanceira, etc.

    Muitos aplicaes atuais, e a serem desenvolvidas no futuro, usam algum nvel de Ori-entao aos Objetos. Atualmente, o Paradigma Orientado aos Objetos engloba umasrie de disciplinas, tais como: Programao Orientado aos Objetos, Modelao e De-senho Orientado aos Objetos, Base de dados Orientado aos Objetos, Interfaces Orienta-das aos Objetos, Metodologias Orientadas aos Objetos de desenvolvimento de software,etc.

    Na verdade, da natureza humana realizar modelaes a partir da maneira como in-terpreta a natureza. Neste caso, modelar e implementar sistemas utilizando-se objetos.

    O foco da POO no est nos procedimentos do universo e sim nos objetos que existemnele, j que eles formam um elemento natural para o modelo, e o mundo compostopor objetos. O conceito de objeto representa uma abstrao de algo no domnio doproblema, que reflete os recursos de um sistema de reter informaes sobre ele, inte-ragir com ele, ou ambas as coisas (Richard C. Lee e Willian M. Tepfenhart em UML eC++ Guia Prtico de Desenvolvimento Orientado aos Objetos).

    Todo objeto possui atributos (caractersticas prprias que os distinguem de outros) epode prestar algum tipo de servio (funcionalidades, mtodos, comportamentos pr-prios). Estes atributos e servios so conhecidos como membros de, respetivamente,dados e mtodos.

    Os objetos na POO so gerados a partir de uma estrutura conhecida comoclasse, que define um conjunto de dados e mtodos para processar estesdados. Estas classes podem ser vistas como modelos (templates), represen-tando um conjunto de objetos que compartilham os mesmos atributos, ope-raes e relacionamentos.

    Cada classe contm todas as informaes que ela precisa para executar qualquer pro-cessamento exigido pelo objeto que ela representa. Desde modo, para termos um ob-jeto a ser utilizado pelo nosso programa, temos que ger-lo a partir da classe desejada.Por exemplo, relativamente ao exemplo do sistema bancrio, se precisamos trabalharcom um objeto conta corrente de um cliente, precisamos instanciar um objeto da classeque representa a conta corrente (ContaCorrente) e realizar, com ele, as operaes quese mostrarem necessrias e/ou desejadas. Ou seja, declararamos uma instncia daclasse ContaCorrente em nosso programa. Nesta instncia, conhecida como objeto,pode-se executar todas as operaes que tenhamos no perfil do seu utilizador.

    Podemos fazer uma analogia com o tipo de dados inteiro das linguagens de programa-o. Para armazenarmos no nosso programa um valor inteiro, precisamos declarar noprograma uma varivel deste tipo, com o nome que desejarmos. Resumindo, objetospodem ser vistos como instncias de classes.

    Dora Melo [email protected]

  • 33

    Definio 3.3.1 A definio de uma Classe na linguagem Java caracterizada por

    Todas as funes membro da classe devem ser declaradas e definidas dentro da decla-rao da classe. A especificao de visibilidade, que representa o controle de acesso,deve ser feita para cada membro, incluindo a prpria classe.

    Definio 3.3.2 (Utilizao de uma Classe) A definio de uma Classe traduz-se na de-clarao de um novo Tipo de Dados que traduz um conjunto de atributos com determina-dos comportamentos. Assim, a utilizao dos conceitos definidos pelas classes so utilizadosatravs da criao de instncias da classe, tambm denominados de objetos.

    No Java, a criao de um objeto faz-se sempre com recurso utilizao da palavrareservada new.

    Exemplo 3.3.1 Criao de uma instncia da classe Account: o objeto acc1

    Note-se o acesso a pub_data_mem do objeto acc1: tal s possvel porque o membroest declarado public.

    3.4 Exerccios - Classes e Instncias

    1. Na plataforma Eclipse, crie um novo projeto denominado exemplos.

    Dora Melo [email protected]

  • 34

    (a) Defina a classe denominada Account, apresentada na Definio 3.3.1.

    (b) Crie uma classe denominada Principal e teste as instrues apresentadasno Exemplo 3.3.1.

    3.5 Mtodos Construtores

    Definio 3.5.1 (Construtor) Quando se cria uma nova instncia de uma classe (um novoobjeto) usando a palavra chave new, um construtor para essa classe invocado.

    O construtor garante que um determinado objeto seja adequadamente inicializado antes deser utilizado.

    O Java contm a implementao do conceito de construtor.

    O construtor, quando declarado, tem que ser public, possuir o mesmonome da classe e no pode devolver qualquer tipo de dados, porque re-sulta sempre na criao de um objeto dessa classe.

    Um construtor pode ter argumentos.

    A linguagem Java especifica a visibilidade (quando omitida) dos membros de umaclasse como pblicos.

    Quando um construtor no explicitamente declarado, o Java utiliza o default parame-terless constructor . criado um objeto, atravs da invocao do default constructor doseu pai (identificado na linguagem Java por super()) que inicializa todos os seus atri-butos aos respetivos valores por defeito (zero para os nmeros, null para as refernciase false para os booleanos).

    Quando declarado um construtor, o default constructor deixa de estar disponvel.

    Exemplo 3.5.1 Construtor da Classe

    Utilizao do Construtor

    Dora Melo [email protected]

  • 35

    3.6 Polimorfismo de Mtodos (Overloading)

    No mbito da Programao Orientada por Objetos, por vezes existem comportamentosde um determinado objeto cuja concretizao depende do contexto, i.e., a execuo deuma determinada funcionalidade depende do contexto do instante em que invocadae por conseguinte a tarefa associada ser diferente. Por exemplo, a tarefa de somar n-meros inteiros e a tarefa de somar caracteres diferente. No entanto, a funcionalidadesomar (adio, concatenao) representam a

    O termo polimorfismo originrio do grego e significa muitas formas (poli = muitas,morphos = formas).

    O polimorfismo de mtodos (denominado de overloading de mtodos) uma caracte-rstica definida em vrias linguagens de programao, em especial, as orientadas porobjetos, e que permite criar vrios mtodos com o mesmo nome e que diferem uns dosoutros pela lista de argumentos e pelo tipo de retorno. Ou seja, caracteriza simples-mente a capacidade de definir-se uma determinada funcionalidade capaz de executardiferentes tarefas.

    3.7 Exerccios - Mtodos Construtores e Polimorfismo deMtodos

    1. Acrescente classe Account, do Exerccio 3.4, dois mtodos construtores. O pri-meiro construtor sem argumentos, predefinindo os valores dos atributos id_no= 1, balance = 50.0 e rate = 0.15, e o segundo construtor com os argumentosbalance e rate e o atributo id_no inicializado a 2.

    2. Na classe Principal defina algumas instrues de forma a testar os mtodosconstrutores definidos.

    Dora Melo [email protected]

  • 36

    3.8 Gesto de Memria - Garbage Collector

    A utilizao incorreta de memria por parte das aplicaes pode influenciar a eficin-cia e eficcia de uma aplicao. Uma boa gesto de memria pode ser suficiente paraotimizar a utilizao de uma aplicao.

    Na gesto de memria um dos problemas mais comuns a libertao de memria, queocorre quando uma quantidade de memria reservada e no disponibilizada parafuturas utilizaes, quando j no necessria.

    De forma a melhorar e a tornar mais eficiente a gesto de memria, libertando o pro-gramador de se preocupar com estes aspetos, o Java contm um mecanismo prprioque suporta toda a gesto de memria, denominado de Garbage Collector. Assim, aocontrrio de outras linguagens, o Java no tem (nem necessita de) um destrutor deobjetos.

    O Garbage Collector disponibilizado pelo servio JVM e o seu funcionamento imper-cetvel. Este mecanismo tem como principal objetivo libertar de forma automtica osblocos de memria que no sero mais utilizados e disponibiliz-los para utilizaofutura.

    Uma das vantagens desse sistema para o programador a no obrigao de manipu-lar diretamente o acesso memria do computador. O mecanismo funciona como umvigia relativamente ao comportamento dos objetos e quando estes no so mais refe-renciados na continuao da execuo de uma programa, a memria utilizada por estesobjetos libertada. Porm o Garbage Collector funciona aleatoriamente sendo impres-cindvel que o programador garanta a otimizao do cdigo desenvolvido atravs daadequada anlise da utilizao de memria do sistema.

    Desta forma, o Garbage Collector do Java responsvel por libertar a memria de obje-tos que no so mais usados, desde que o objeto seja criado utilizando a palavra chavenew. Quando se declara um objeto sem a utilizao da palavra chave new, ele pode noser recolhido pelo Garbage Collector, condicionando a adequada gesto de memria.

    A linguagem Java disponibiliza um mtodo denominado finalize() que permite aoGarbage Collector saber como tratar os objetos instanciados sem a utilizao da pa-lavra chave new. Todas as classes herdam o mtodo finalize() da classe principaljava.lang.Object. O mtodo invocado pelo Garbage Collector quando se verificaque no existem mais referncias para o objeto. Na figura 3.1 apresentado uma linhado tempo relativo a um objeto que finalizado.

    Definio 3.8.1 (Mtodo finalize()) O mtodo finalize() permite gerir de forma adequadaa memria ocupada por objetos que no so criados utilizando o termo new.

    O mtodo finalize() pode ser declarado como membro das classes, no tem qualquer argu-

    Dora Melo [email protected]

  • 37

    Figura 3.1: Tempo de vida de um objeto finalizado.

    mento, retorna o tipo de dados void, e deve ser declarado como protected.

    Quando se declara o mtodo finalize(), este sobrepe-se ao mtodo predefinido do Java.

    Exemplo 3.8.1 (Redefinio e utilizao do mtodo finalize())

    Dora Melo [email protected]

  • 38

    3.9 Exerccios - finalize()

    1. Na plataforma Eclipse, crie um novo projeto denominado exemploFinalize.

    2. Defina as classes necessrias de forma a testar o cdigo apresentado no Exemplo3.8.1.

    3.10 Mtodos Modificadores e Seletores

    Definio 3.10.1 (Mtodos Modificadores (setters)) Os mtodos modificadores (setters)so mtodos que permitem adicionar ao interface da classe uma forma de modificar os valo-res dos atributos, permitindo garantir o princpio de encapsulamento. Normalmente, estesmtodos so definidos da seguinte forma, para serem de fcil identificao:

    public void setNomeDoAtributo(tipoDeDadosdoAtributo nomeDoAtributo){this.nomeDoAtributo = nomeDoAtributo;

    }

    Dora Melo [email protected]

  • 39

    Definio 3.10.2 (Mtodos Seletores (getters)) Os mtodos seletores (getters) so mto-dos que permitem adicionar ao interface da classe uma forma de retornar os valores dosatributos, permitindo garantir o princpio de encapsulamento. Normalmente, estes mtodosso definidos da seguinte forma, para serem de fcil identificao:

    public tipoDeDadosdoAtributo getNomeDoAtributo(){return nomeDoAtributo;

    }

    3.11 Exerccios - Mtodos Modificadores e Seletores

    1. Acrescente classe Account, do Exerccio 3.4, os mtodos modificadores e sele-tores adequados a todos os atributos.

    2. Na classe Principal defina algumas instrues de forma a testar os mtodosmodificadores e seletores.

    3.12 A palavra reservada this

    Definio 3.12.1 (this) Dentro de um mtodo de instncia ou um construtor, this umareferncia ao objeto atual, ao qual o mtodo ou construtor invocado. possvel referir-se a qualquer membro do corrente objeto de dentro de qualquer mtodo da instncia ouconstrutor utilizando a palavra reservada this.

    Um dos principais motivos para a utilizao da palavra reservada this quando umcampo ocultado por um parmetro de um mtodo ou construtor.

    Exemplo 3.12.1 (Campo ocultado por um parmetro)

    public c l a s s Ponto {public int x = 0 ;public int y = 0 ;

    / / c o n s t r u c t o rpublic Ponto ( int a , int b ) {

    x = a ;y = b ;

    }}

    mas deve ser escrito como:

    Dora Melo [email protected]

  • 40

    public c l a s s Ponto {public int x = 0 ;public int y = 0 ;

    / / c o n s t r u c t o rpublic Ponto ( int x , int y ) {

    t h i s . x = x ;t h i s . y = y ;

    }}

    Cada argumento do construtor oculta cada um dos campos do objeto - dentro doconstrutor x uma cpia local do primeiro argumento do construtor. Para nosreferirmos ao campo x do Ponto, o construtor deve utilizar a expresso this.x.

    Na definio de um construtor tambm possvel utilizar a palavra reservada thispara invocar outro construtor. Desta forma, o construtor invocado de forma explcita.

    Quando necessrio invocar outro construtor, esta instruo deve ser aprimeira instruo do construtor.

    Exemplo 3.12.2 (Utilizao do termo this na definio de um construtor)

    public c l a s s Retangulo {private int x , y ;private int largura , comprimento ;

    public Retangulo ( ) {t h i s ( 0 , 0 , 1 , 1 ) ;

    }public Retangulo ( int largura , int comprimento ) {

    t h i s ( 0 , 0 , largura , comprimento ) ;}public Retangulo ( int x , int y , int largura , int comprimento ) {

    t h i s . x = x ;t h i s . y = y ;t h i s . l a rgura = largura ;t h i s . comprimento = comprimento ;

    }. . .

    }

    Esta classe contm um conjunto de construtores. Cada construtor inicializa algunsou todos os membros atributos do retngulo. Os construtores definem o valor

    Dora Melo [email protected]

  • 41

    por defeito para qualquer membro atributo cujo valor inicial no fornecido porargumento. O compilador determina qual o construtor que ir executar, baseadono nmero e no tipo de argumentos.

    3.13 Exerccios - this

    1. Altere o cdigo da classe Account, do Exerccio 3.4, os mtodos modificadores eseletores adequados a todos os atributos. Teste na classe principal as alteraesefetuadas.

    2. No projeto definido para o exerccio anterior, construa as classes correspondentesaos Exemplos 3.12.1 e 3.12.2.

    3. Atualize as classes definidas, de forma a incluir um mtodo que permita mostraras suas caractersticas.

    3.14 O mtodo toString

    Definio 3.14.1 O mtodo toString devolve uma String que representa o objeto.

    O mtodo toString um mtodo predefinido na classe Object e permite definir arepresentao em String das instncias de uma classe. O mtodo predefinido quandoinvocado por um objeto mostra uma String que contm informao sobre a classe aque pertence e a sua referncia interna.

    O valor devolvido pelo mtodo toString pode ser qualquer coisa mas tipicamenteorganizado de modo a devolver uma representao que facilite a nossa leitura. Porexemplo, uma classe que represente um ponto poder devolver as coordenadas sob aforma (x, y), uma classe que represente uma pessoa poder devolver o nome, etc.

    O mtodo toString pode ser invocado de forma explcita, como outro mtodo pblicode um objeto, ou de forma implcita, para tal basta invocar o objeto a partir de umainstruo que obrigue a sua interpretao corresponda a uma String.

    3.15 Exerccios - toString

    1. Atualize o cdigo das classes Account, Ponto e Retangulo, do Projeto exemplos,de forma a incluir o mtodo toString adequado a uma possvel representaodas caractersticas das classes.

    Dora Melo [email protected]

  • 42

    2. Teste na classe principal as alteraes efetuadas. Utilize as duas formas de invo-cao do mtodo toString.

    3. Qual (ou quais) os mtodos definidos nas referidas classes j no fazem sentidocom a definio do mtodo toString?

    3.16 Array (vetor)

    Definio 3.16.1 Os arrays (vetores) so estruturas de dados que permitem agrupar umconjunto de elementos pertencentes ao mesmo tipo de dados. Na linguagem Java, um array sempre um objeto. Quando se declara uma varivel array, a linguagem Java interpreta-ocomo sendo uma referncia.

    Para criar um Array em Java, deve-se:

    1. Declarar uma varivel que o represente;

    2. Criar um novo objeto array e atribui-lo varivel array;

    3. Armazenar valores dentro do array.

    Exemplo 3.16.1 (Declarao de um array)int idades [ ] ; / / o mesmo que i n t [ ] i d a d e s d e c l a r a c a o da v a r i a v e l a r ray i d a d e sidades = new int [ 1 0 ] ; / / c r i a r um array de i n t de 10 p o s i c o e s e a t r i b u i r o e n d e r e c o

    / / no qual e l a f o i c r i a d aidades [ 3 ] = 25; / / a t u a l i z a a p o s i c a o 3 do array i d a d e s para o v a l o r 25

    No Java, os ndices do array vo de 0 a n1, onde n o tamanho dado no momento emque se cria o array. Se se tentar aceder uma posio fora desse valor, ocorrer um errodurante a execuo.

    A partir do momento que um array for criado, o seu tamanho no poder ser alterado.Se for necessrio aumentar o nmero de elementos de um array, a forma correta criarum novo array, e copiar os elementos do array inicial antes de o utilizar.

    Exemplo 3.16.2 (Percorrer os elementos de um array)/ / c r i a r o ar ray i d a d e s de dimensao 10 e c u j o s e l e m e n t o s sao i n t e i r o sint [ ] idades = new int [ 1 0 ] ;/ / p r e e n c h e r o ar rayfor ( int i = 0 ; i < 10; i ++) {

    idades [ i ] = i * 10;}/ / e s c r e v e r no s t d o u t os e l e m e n t o s do ar rayfor ( int i = 0 ; i < 10; i ++) {

    System . out . p r i n t l n ( idades [ i ] ) ;}

    Dora Melo [email protected]

  • 43

    As referncias aos arrays e seu contedo realizada atravs de referncias implcitas eno atravs de aritmtica de ponteiros.

    Os limites de um array so rigorosamente aplicados.

    Tal como acontece com outros objetos, a passagem de um array para um mtodo atra-vs do argumento faz-se atravs da passagem de uma referncia para o array original.Alterar o contedo do array de referncia muda o objeto do array original.

    Arrays de objetos so matrizes de referncias que no so inicializados automatica-mente.

    O Java no suporta arrays multidimensionais. necessrio criar arrays que contmobjetos arrays.

    3.17 Exerccios - Array

    1. Na plataforma Eclipse, no projeto anteriormente criado "exemplos". Copie, parao mtodo main, o cdigo apresentado no Exemplo 3.16.2 e teste-o.

    2. Elabore um conjunto de instrues que permitam guardar num vetor 5 instnciasdas classes Account, Ponto e Retangulo e depois mostre essas instncias para ostandard output.

    3.18 BlueJ

    BlueJ (http://www.bluej.org/) um ambiente de programao que permite desen-volver programas na Linguagem Java de uma forma fcil e rpida. As suas principaiscaractersticas so:

    Um interface agradvel e mais simples que os ambientes profissionais;

    Desenhado para ser utilizado como uma ferramenta de ensino;

    A sua utilizao independente da plataforma;

    A integrao do ambiente grfico do modelo orientado por objetos e do respe-tivo cdigo permitem uma mais fcil compreenso dos conceitos subjacentes aoparadigma.

    Dora Melo [email protected]

  • 44

    3.19 Exerccios - BlueJ

    1. Defina no BlueJ um novo projeto denominado classes.

    2. Defina o package com o nome classes.automoveis.

    3. Automveis

    (a) Crie uma classe Automovel com os atributos marca, cor e matricula.

    (b) Crie os mtodos seletores e modificadores relativos a cada um dos atributos.

    (c) Crie um mtodo que permita mostrar as caractersticas dos automveis.

    (d) Crie um mtodo construtor que permita a criao de um novo automvelcom valores para as caractersticas.

    (e) Crie dois automveis (objetos), com os seguintes valores: a1 - ferrari, Ver-melho, 23-AD-23; a2 - Opel, Azul, 34-ER-45.

    (f) Invoque o mtodo em cada um dos objetos que mostra as caratersticas dosmesmos.

    (g) Altere a cor do a1 para amarelo e a cor do a2 para verde.

    (h) Volte a invocar para cada automvel o mtodo que mostra as suas caracte-rsticas.

    4. Defina o package com o nome classes.operacoes.

    5. Soma

    (a) Defina uma nova classe Soma com dois atributos a e b inteiros.

    (b) Crie os mtodos modificadores relativos a cada um dos atributos.

    (c) Crie dois mtodos construtores, um que coloca os valores de a = 0 e b = 0 eoutro que coloque os valores de a e b iguais a dois parmetros de entrada ae b.

    (d) Crie um mtodo soma que devolve a soma de dois valores a e b.

    (e) Crie um mtodo mostraSoma que utilize a funo anterior para mostrar oresultado da soma de dois valores.

    (f) Crie dois objetos, s1 e s2, um com o construtor sem parmetros e outro comos valores 2 e 3.

    (g) Invoque o mtodo mtodo mostraSoma nos dois objetos e veja o seu resul-tado.

    (h) Altere no objeto s1 o valor de a para 4 e b para 5 invocando os mtodosapropriados. Invoque novamente o mostraSoma.

    6. Defina o package com o nome classes.maquinaBilhetes.

    Dora Melo [email protected]

  • 45

    7. Mquina de bilhetes

    (a) Pretende-se criar uma mquina de tirar bilhetes com um determinado preo.

    (b) A mquina tem como caractersticas o preo do bilhete, o dinheiro j inse-rido para tirar um bilhete e o nmero de bilhetes j tirados pela mquina.

    (c) Crie um construtor que permita criar uma mquina para tirar bilhetes comum determinado preo.

    (d) Crie um mtodo que permita ao saber o preo do bilhete.

    (e) Crie um mtodo que permita inserir as moedas para comprar os bilhetes.

    (f) Crie um mtodo que permita imprimir o bilhete.

    (g) A mquina criada no permite validar se as quantias introduzidas so valo-res positivos. Adicione as instrues necessrias a esta validao.

    (h) Altere o mtodo de impresso de bilhetes para que este s imprima caso odinheiro inserido o permita e que d troco caso o utilizador tenha inseridodinheiro a mais.

    (i) Crie um mtodo que permita devolver o dinheiro caso o utilizador assim odeseje.

    8. Defina o package com o nome classes.relogio.

    9. RelgioPretende-se criar um objeto relgio que utilize dois objetos numero para mostraras horas e os minutos, da seguinte forma 20:22.

    (a) Definir uma classe Numero com dois atributos inteiros, o valor que comeaem 0 e o limite superior (23 ou 59).

    (b) Crie o mtodo incrementa para incrementar em 1 o atributo valor. Quandochegar ao limite superior deve voltar ao inicio.

    (c) Definir uma classe Relogio com trs atributos, dois objetos Numero e umterceiro String para mostrar as horas.

    10. Defina o package com o nome classes.turmaAlunos.

    11. Turma de alunos

    (a) Defina uma nova classe Aluno com os atributos nome e numero.

    (b) A classe Aluno dever ter um construtor que recebe o nome e o numero dealuno.

    (c) A classe Aluno dever ter os mtodos para ler e alterar o nome do aluno eler o numero de aluno.

    Dora Melo [email protected]

  • 46

    (d) Crie uma classe Turma, com os seguintes atributos, nome do professor, n-mero da sala de aula, numero de alunos da turma e um vetor com os estu-dantes da turma.

    i. Na primeira verso utilizar um vetor atravs da declarao de vetor;

    ii. Na segunda verso utilizar a classe ArrayList disponvel na packagejava.util.*.

    (e) A classe dever ter o mtodo construtor que permita criar um objeto turmacom os dados necessrios, nomeadamente, nome do professor, nmero dasala de aula e o nmero de estudantes por turma.

    (f) Crie um mtodo que permita adicionar alunos turma. Este mtodo deververificar se j se atingiu a capacidade mxima da turma.

    (g) Crie um mtodo que devolva o nmero de alunos da turma.

    (h) Crie um mtodo que permita listar todos os alunos da turma.

    (i) Crie quatro objetos aluno e dois objetos turma.

    (j) Adicione dois dos alunos a uma turma e o outro dois a outra turma.

    (k) Liste os alunos da turma 1 e da turma 2.

    Dora Melo [email protected]

  • Referncias Bibliogrficas

    1. Fernando Mrio Junqueira Martins, JAVA6 e Programao Orientada pelos Objec-tos, 4 Edio, FCA, 978-972-722-624-5

    2. Joo Cortez, Henrique Mamede, Introduo s Tcnicas de Programao, Edito-rial Presena.

    3. Antnio Adrego da Rocha / Osvaldo Manuel da Rocha Pacheco, Introduo Pro-gramao em Java, FCA, 978-972-722-623-8

    4. Antnio Adrego da Rocha, Estruturas de Dados e Algoritmos em Java, FCA, 978-972-722-704-4

    5. Pedro Coelho, Programao em Java - Curso Completo, FCA, 978-972-722-361-9

    6. Adelaide Carvalho, Exerccios de Java: Algoritmia e Programao Estruturada,FCA, 978-972-722-723-5

    7. Richard C. Lee e Willian M. Tepfenhart, UML e C++ Guia Prtico de Desenvolvi-mento Orientado a Objetos

    8. The Java Tutorials -> Trail: Learning the Java Languagehttp://docs.oracle.com/javase/tutorial/java/index.htmldata 29/setembro/2014.

    9. The Java Tutorialshttp://docs.oracle.com/javase/tutorial/index.htmldata 29/setembro/2014.

    10. Packageshttp://docs.oracle.com/javase/tutorial/java/package/index.htmldata 06/outubro/2014.

    Dora Melo [email protected]

    Introduo Programao Orientada por ObjetosProgramao Orientada por ObjetosOrigens e Benefcios do modelo POOClasses, Objetos e MensagensAbstrao e EncapsulamentoExerccios

    Linguagem de Programao JavaIntroduo HistricaVantagensApplets e Aplicaes JavaExerccios

    Sintaxe e Semntica da Linguagem de Programao JavaDeclaraes e AtribuiesComentriosLiteralExpresses e OperaesOperadores NumricosOperadores de AtribuioIncrementao e DecrementaoOperadores de ComparaoOperadores LgicosPrecedncia dos Operadores

    FunesBloco de InstruesEstruturas CondicionaisEstruturas de RepetioExerccios

    Algumas caractersticas do Java

    Programao Orientada por Objetos e a Linguagem JavaA linguagem Java - PackagesExerccios - PackagesClasses e InstnciasExerccios - Classes e InstnciasMtodos ConstrutoresPolimorfismo de Mtodos (Overloading)Exerccios - Mtodos Construtores e Polimorfismo de MtodosGesto de Memria - Garbage CollectorExerccios - finalize()Mtodos Modificadores e SeletoresExerccios - Mtodos Modificadores e SeletoresA palavra reservada thisExerccios - thisO mtodo toStringExerccios - toStringArray (vetor)Exerccios - ArrayBlueJExerccios - BlueJ

    Referncias bibliogrficas