Você está na página 1de 148

AULA 1 - Introduo ao Paradigma de Programao Orientada a Objetos Atualmente, o Paradigma de Programao Orientado a Objetos POO o mais utilizado no mercado.

o. Saber sobre esse assunto um requisito quase obrigatrio para os profissionais desenvolvedores de aplicaes. As empresas desenvolvedoras de software esto sempre atrs de bons programadores especialistas nesse paradigma para fazerem parte de seus quadros funcionais. Ao final desta aula voc ser capaz de compreender os motivos que propiciaram a grande adeso ao paradigma de orientao a objetos. Voc tambm ver como foi a evoluo desse tipo de linguagem e os conceitos relacionados a ela, como o de abstrao e de modelos. Alm de um breve histrico da linguagem Java, voc tambm perceber suas principais caractersticas: orientada a objetos, independente de plataforma, ambiente de programao multithread, case-sensitive e de alto nvel. Sero apresentadas as Edies (Java SE - Standard Edition, Java EE - Enterprise Edition e Java ME - Micro Edition) e as Ferramentas de Desenvolvimento (NetBeans e Eclipse). Por fim, os passos necessrio instalao de um JDK (Java Development Kit).

Abertura
A expresso Programao Orientada a Objetos foi criada por Alan Klay http://pt.wikipedia.org/wiki/Alan_Kay , considerado um dos criadores desse conceito de programao. Ele tambm foi inventor da linguagem Smalltalk http://pt.wikipedia.org/wiki/Smalltalk, uma linguagem totalmente orientada a objetos, na qual no possui tipos primitivos, todos os tipos so objetos. Hoje, disponvel no mercado existem vrios exemplos de linguagens orientadas a objetos como Java http://pt.wikipedia.org/wiki/Linguagem_de_programa %C3%A7%C3%A3o_Java , C++ http://pt.wikipedia.org/wiki/C%2B%2B , Object Pascal http://pt.wikipedia.org/wiki/Object_Pascal , Ruby http://pt.wikipedia.org/wiki/Ruby_(linguagem_de_programa

%C3%A7%C3%A3o) , Python http://pt.wikipedia.org/wiki/Python , entre outras.

Texto base
INTRODUO O aumento da complexidade dos Sistemas de Informao SI foi um dos motivos que propiciou a grande adeso orientao a objetos. Os SI modernos esto cada vez mais importante para as organizaes pois so mais rpidos, mais robustos e podem responder a mais questionamentos, ajudando nas decises estratgicas e automatizando um grande nmero de tarefas. Por isso, esses Sistemas de Informaes no podem ficar a merc de um programador apenas. Hoje, as equipes que cuidam dos SI esto maiores, mais qualificadas e os sistemas so construdos em mdulos, para que haja uma melhor compreenso e para facilitar a sua manuteno. Esses requisitos so essenciais, principalmente, quando ao se incorpora um novo programador na equipe. Manuteno A atividade de manuteno est cada vez mais presente na vida til dos SI. Isso ocorre porque natural que os sistemas cresam, que o tempo passe, que a legislao se modifique, que as necessidades aumentem, que os requisitos apaream e desapaream com maior rapidez. A programao orientada a objetos permite uma melhor execuo da atividade de manuteno. Na programao estruturada era difcil fazer manuteno quando o SI alcanava um tamanho considerado grande. Isso porque, entre outros motivos, a manipulao de dados ficava espalhada pelo cdigo e era mais difcil encontrar a raiz do problema. No paradigma de Programao Orientado a Objetos (POO), a gama de informaes, a documentao, a programao padronizada, os recursos de infra-estrutura mais robustos, os mecanismos de log mais modernos e confiveis, tudo isso ajuda a se chegar mais rpido ao ponto exato em que o problema est acontecendo.

1 Evoluo A Programao Orientada a Objetos (POO) uma evoluo do paradigma de programao estruturada. Todo o conhecimento adquirido com a programao estruturada no ser esquecido, pelo contrrio, o aprendizado ser aproveitado com a aquisio de novos conceitos. Agora, voc ver que os SI so abstraes do mundo real, utilizando classes, modelos, objetos, herana, encapsulamento e polimorfismo. Muitos nomes novos!? Tenha calma! Veremos tudo isso com detalhes nas aulas seguintes! Como dito acima, a POO visa aproximar o mundo real do mundo computacional. A forma de projetar o software modificada e a programao adquire uma nova estrutura, para que os seus objetos possam interagir da mesma maneira como acontece no mundo real. Por isso, abstraes so necessrias, para que o programador possa pensar o software da mesma maneira como os objetos se inter-relacionam no mundo fsico em que vivemos. Dependendo do domnio do problema a ser tratado em um SI, voc ver que poder haver uma classe (veremos o conceito detalhado de classe na nossa aula 3) com caractersticas e comportamentos totalmente diferentes de uma outra classe, de mesmo nome, mas com propriedades e comportamentos distintos, em um outro domnio do problema. Por exemplo: uma classe de POO que poderia ser chamada de Pessoa. Uma pessoa, no mundo real, pode realizar operaes como andar, correr, sentar, falar etc. J pessoa, em um contexto de biblioteca, pode ter o papel de scio da biblioteca e ter operaes de solicitar emprstimo de livro, devolver livro. No mesmo contexto, mas com o papel de empregado da biblioteca, a pessoa pode executar as operaes de conceder emprstimo de livro, autorizar reserva, entre vrias outras. Esses papis, operaes, comportamentos e caractersticas particulares de uma pessoa no mundo real, tambm fariam parte da classe Pessoa em uma implementao de sistema orientado a objetos. Portanto, o jeito ideal para programar observar como feito um determinado processo de trabalho. Deve-se propor melhorias e codificar

computacionalmente os processo percebidos no mundo real, usando a metodologia de orientao a objetos. Assim, voc poder construir um software capaz de atender ao problema proposto, da melhor maneira possvel, com todas as caractersticas de um bom software. Capaz de atingir os melhores ndices de qualidade e de gerar informaes necessrias para agregar valor ao negcio. 2 Abstrao Abstrao um conceito muito particular da Programao Orientada a Objetos. No campo terico importante o programador abstrair, para projetar o sistema de forma semelhante ao mundo real. O desenvolvedor deve imaginar qual seria a melhor soluo para atender quele problema, para isso, ele precisa abstrair. Ao se construir um sistema, muito difcil prever e tratar todas as possibilidades existentes em uma determinada situao. Por isso, caro aluno, saiba que seu nvel de abstrao vai determinar o que deve ser levado em considerao e o que ser desprezado quando determinado assunto for tratado. De toda sorte, essa uma atividade um tanto quanto complexa; quanto mais experincia o programador tiver sobre o tema proposto e tambm em projetar sistemas, mais fcil ser, para ele, encontrar a melhor soluo. 3 Modelos Modelos so representaes utilizadas para transpor determinado problema do mundo real para a POO e seu emprego bastante comum. Antes de comear a programar importante planejar o que deve ser feito, esse planejamento feito por meio de modelos. Essa modelagem, normalmente conhecida como documentao do sistema. Os desenvolvedores podem assumir vrios papis quando desenvolvem um software. Dependendo do perfil do sistema, ou do prprio profissional, uma pessoa pode executar mais de um papel. Entre esses papis est o de projetista de software, que o responsvel por receber a demanda e pensar, antes de desenvolver, como o software vai ser tecnicamente

construdo. Aps essa reflexo, o projetista faz o modelo do software, grficos cujo contedo a representao de como funcionar o sistema com todas as informaes necessrias para o programador entender a soluo e, posteriormente, codificar o software. O objeto principal desse curso no ser a construo desses modelos, e sim o desenvolvimento efetivo do software, utilizando a metodologia de orientao isso, a objetos. No entanto, necessrio aprender sobre a modelagem, utilizada no dia a dia do desenvolvimento de sistemas; por voc acompanhar mais sobre esse assunto na disciplina de Requisitos e Projetos de Software. 4 Linguagem Java Usaremos a linguagem Java para exemplificao dos cdigos a serem apresentados neste material. importante mencionar que poderia ser utilizada qualquer outra linguagem orientada a objetos. Os conceitos de programao vistos aqui no se restringem a uma linguagem especfica, no entanto, pela facilidade, e tambm pela abrangncia da linguagem Java no mercado de trabalho, achamos por bem utiliz-la como ferramenta do nosso curso. No decorrer das prximas aulas sero explicadas algumas convenes e padronizaes amplamente utilizadas no Java. Voc ver que essa padronizao fundamental para os programadores, pois facilita o entendimento do cdigo. A incorporao de um programador novo equipe de desenvolvimento facilitada quando ele j chega no ambiente de trabalho consciente dessas definies. 4.1 Breve histrico da linguagem Java No incio dos anos 90, um grupo de especialistas da Sun Microsystems http://pt.wikipedia.org/wiki/Sun_Microsystems Patrick Naughton, Mike Sheridan, e James Gosling iniciou um projeto chamado Green Project cujo objetivo era desenvolver um mecanismo que permitisse a integrao de diversos dispositivos como computadores e eletrodomsticos utilizados no dia a dia das pessoas.

Depois de vrios meses de trabalho desenvolveram um prottipo chamado *7 (StarSeven), que consistia em uma espcie de controle remoto com habilidade de controlar diversos dispositivos e aplicaes, na poca, objetivando automao de equipamentos e casas inteligentes. Para o correto funcionamento do aparelho foi necessria a criao de uma linguagem de programao, inicialmente batizada de Oak http://pt.wikipedia.org/wiki/Linguagem_de_programa %C3%A7%C3%A3o_Oak (carvalho em ingls), uma rvore tpica do hemisfrio norte, que podia ser observada da janela do escritrio enquanto eles trabalhavam no projeto. O fato era que o projeto andava de mal a pior, em uma poca em que os visionrios da Sun no eram compreendidos pelas empresas de TV a cabo, primeiro pblico alvo do projeto, pois a idia era controlar televisores e vdeo por demanda, mediante o uso de equipamentos algo muito comum hoje em dia, mas ainda incompreendido na poca. Em meados dos anos 90, o avano da internet permitiu uma reviravolta no projeto. Uma grande rede interativa estava se formando e os projetistas da Sun viram uma grande oportunidade de adaptar sua linguagem para ser utilizada em redes heterogneas, como a prpria internet. Devido a problemas de direitos autorais, a linguagem teve de ser rebatizada. Escolheram o nome Java (sugerido por acaso, quando a equipe visitava uma cafeteria - Java era o nome da ilha de origem de um caf importado) e foi o incio do sucesso. Novas aplicaes comearam a ser utilizadas dentro dos browsers de navegao. O Java deu a dinmica nas pginas HTML, antes estticas, medida que mundo da internet tambm ia se modificando rapidamente. A adeso linguagem de programao Java foi feita de maneira muito veloz. Grandes indstrias de software, como a IBM http://www.ibm.com/br/pt/, comearam a dar suporte linguagem. Ela se tornou bastante popular e logo j estava presente em grandes sistemas coorporativos, sistemas operacionais, celulares, palmtops e vrias outras tecnologias. O nmero de desenvolvedores cresceu muito rapidamente, por

isso,

tambm A

foi JCP

criada

JCP

Java

Community envolve as

Process partes

http://jcp.org/en/home/index responsvel por controlar e padronizar a linguagem. http://jcp.org/en/home/index interessadas no Java, de forma que possam ser discutidas definies, suas funcionalidades e verses futuras da linguagem. Em abril de 2009, a Sun foi adquirida pela ORACLE

http://www.oracle.com/br/index.html, gigante do setor de banco de dados. Desde ento, o mercado ficou apreensivo com o futuro da linguagem. Mas, em janeiro de 2010, quando finalizou o processo de aquisio, a ORACLE http://www.oracle.com/br/index.html anunciou que vrios projetos da Sun iriam ter continuidade, entre eles, o Java, sem qualquer prejuzo a seus usurios e desenvolvedores. 4.2 Caractersticas Na pgina de abertura do Java, a ORACLE

http://www.oracle.com/br/index.html define a linguagem como orientada a objetos, independente de plataforma, ambiente de programao multi-thread. Outras caractersticas da linguagem Java referem-se a ele ser case-sensitive e de alto nvel. Essas peculiaridades so fundamentais para desenvolvimentos para Web e servios de rede, aplicaes, estaes de trabalho independentes de plataforma, robtica e outros dispositivos embutidos. A seguir, vamos ver cada uma dessas caractersticas. Visite a pgina do Java, ela uma excelente leitura complementar! http://www.oracle.com/us/technologies/java/index.html Orientada a Objetos A linguagem Java orientada a objetos. Isso significa que ela funciona com todas as caractersticas do paradigma de orientao a objetos. Usando essa linguagem, o programador pode definir tipos complexos de dados, denominados classes. Por meio dessas classes, o programador pode instanci-las. Quando dizemos que uma classe instanciada, significa que um objeto na memria criado. A interao desses objetos permite a execuo das tarefas designada a eles,

conseqentemente,

sistema

funciona

do

jeito

previsto

pelo

projetista e implementado pelo programador. Veremos mais detalhes sobre classes, objetos e instncia nas nossas prximas aulas. Independente de plataforma (portvel) A linguagem Java altamente portvel, ou seja, independente de plataforma. Java (JVM Ela utiliza Java um componente Machine). responsvel uma mquina pela de independncia de hardware e sistema operacional: a mquina virtual Virtual computao abstrata. Como uma mquina real de computao, a JVM tambm possui uma configurao de instrues que manipulam vrias reas de memria em tempo de execuo, mecanismo conhecido como interpretao. Porm, a mquina virtual Java no sabe sobre a linguagem de programao, apenas conhece um tipo binrio que o arquivo .class. O arquivo .class contm instrues da mquina virtual bytecodes e uma tabela de smbolos, bem como informaes auxiliares. Para se gerar o arquivo .class o Java deve ser compilado. Portanto, pode-se dizer que Java uma linguagem hbrida, pois a mquina virtual interpreta e compila essas classes para que se tenha uma execuo mais otimizada. Maiores detalhes sobre a Java Virtual Machine, voc encontra nesta leitura complementar! http://java.sun.com/docs/books/jvms/second_edition/html/Introducti on.doc.html#3057 No vdeo abaixo voc poder compreender melhor o funcionamento dos compiladores, montadores e interpretadores; no processo de traduo de cdigos-fonte para programas executveis. VDEO CD - AULA 1 VDEO 1 - TRADUTORES E JAVA Ambiente de programao multi-thread Programao multi-thread consiste no fato da linguagem Java ser capaz de executar mltiplos threads simultaneamente. Thread pode

ser entendida como segmento ou linha de execuo. Assim, possvel chamar vrias linhas de execuo independentes, que operam seus objetos Mais e valores em uma memria principal ser em compartilhada. encontradas doc.html#33308. Case-Sensitive A linguagem Java faz diferenciaes entre letras maisculas e minsculas. Veremos que uma varivel, nome de classe, mtodo ou um identificador qualquer, definido com um nome especfico, ser diferente de outro, com mesmo nome e diferente apenas no tamanho das letras. Por exemplo, se uma varivel for definida com o nome dataNascimento, ser diferente de outra varivel com o nome DATANASCIMENTO ou ainda DataNascimento. Por questes de entendimento semntico do cdigo, deve-se evitar o uso de variveis com diferena apenas no tamanho das letras, mas a linguagem entende as denominaes acima como variveis totalmente diferentes. Linguagem de alto nvel A linguagem Java possibilita um alto grau de abstrao. Fica fcil para o programador escrever um cdigo em Java. So comandos e instrues mais entendveis ao linguajar humano. Uma linguagem de baixo nvel escrita em cdigo de mquina, que so instrues muito especficas e pouco convencionais maioria dos seres humanos. Um exemplo de linguagem de baixo nvel o Assembly http://pt.wikipedia.org/wiki/Assembly. 4.3 Edies Cada edio corresponde a uma plataforma tecnolgica para utilizao da linguagem. O Java possui trs extenses: informaes sobre Threads podem

http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.

Java SE (Standard Edition) Nessa edio o programador capaz de desenvolver aplicaes seguras, portveis e de alto desempenho, para vrias plataformas como Macintosh, Linux, Microsoft Windows e Oracle Solaris. a edio padro. Ser utilizada para exemplificar o objeto do nosso estudo a POO. O Java SE dividido em duas vertentes, o Java Development Kit JDK e o Java Runtime Environment JRE. O JRE contm o software Java Plug-in e tambm a Mquina Virtual Java (JVM). Como vimos anteriormente, a mquina virtual responsvel por interpretar os bytecodes e executar os programas Java. O JDK o JRE acrescido do kit de desenvolvimento, que consiste nas ferramentas e na linguagem de programao. O quadro abaixo, retirado da pgina oficial de documentao da linguagem Java, representa bem as tecnologias contempladas tanto na JRE quanto no JDK. Veja mais em: http://download.oracle.com/javase/6/docs/index.html.

Fonte: http://download.oracle.com/javase/6/docs/index.html

Java EE (Enterprise Edition)

Elaborado possibilita

para a

aplicaes de

coorporativas. sistemas

edio

Enterprise

criao

distribudos,

multicamadas,

executadas em um ou mais servidores de aplicaes. considerado um padro de desenvolvimento, uma vez que o fornecedor deve seguir regras pr-definidas para seu produto ser considerada compatvel com Java EE. Java ME (Micro Edition) a plataforma Java para aplicaes embarcadas ou embutidas (embedded). So aquelas na qual o computador destinado a um dispositivo especfico. So aparelhos compactos como celulares, PDAs, controle remotos, entre outros. Informaes detalhadas sobre cada uma dessas edies, voc pode encontrar na pgina do Java. Acesse! http://www.oracle.com/us/technologies/java/index.html. 5 Ferramentas de Desenvolvimento (IDE) Um Ambiente de Desenvolvimento Integrado (IDE Integrated Development Environment) um programa que permite a criao (ou desenvolvimento) de novos programas. A IDE d apoio ao desenvolvimento, permitindo padronizao, agilidade, maior qualidade e produtividade. As principais IDEs para aplicaes em Java so: NetBeans O NetBeans uma IDE bastante popular. Ele tem a chancela da Sun, e o projeto continua mesmo depois da empresa ter sido adquirida pela ORACLE. uma ferramenta gratuita, multiplataforma (pode ser usada no Windows, Linux, Solaris e Maos), possui cdigo aberto, totalmente escrito em Java e permite o desenvolvimento em outras linguagens alm do Java, como por exemplo: C/C++, PHP, Groovy, Ruby entre outras. Para baixar o NetBeans, voc pode acessar http://netbeans.org/downloads/index.html.

Eclipse A IDE Eclipse Eclipse Foundation bastante encontrada nas empresas de desenvolvimento de software. No exagero afirmar que a IDE Java mais utilizada entre os desenvolvedores. O projeto eclipse foi iniciado pela IBM. Depois de um tempo, a IBM entregou o Eclipse para a comunidade de software livre. uma ferramenta gratuita, de cdigo aberto, multiplataforma e possui vrias extenses (plug-ins) responsveis por facilitar a vida dos desenvolvedores e tornar o trabalho muito mais produtivo. Para baixar o eclipse, acesse: http://www.eclipse.org/downloads/. ATENO PROGRAMADOR!

A linguagem Java foi uma das grandes precursoras, uma das responsveis pela da popularizao dos softwares livres. Por isso, inicialmente, a idia dos desenvolvedores era no estarem vinculados a nenhum tipo de ferramenta de desenvolvimento, nenhum fornecedor, nenhuma IDE especfica. A idia era liberdade no desenvolvimento! O foco deveria ser o programa em si, sem qualquer referncia a plataformas de desenvolvimento. A prpria Sun, inicialmente, esteve reticente quanto ao desenvolvimento de uma IDE comercial para o Java. Entretanto, o Java foi ganhando cada vez mais dimenso, mais popularidade e se tornando essencial em diversos sistemas. Cada vez mais, tornou-se necessrio aumentar a produtividade e encurtar o tempo de respostas, desde o levantamento de requisitos at a verso final do programa. Conseqentemente, a Sun adotou o NetBeans como sua IDE oficial. Hoje, comum o desenvolvimento dos cdigos Java atravs das IDE, que facilitam o trabalho e aumentam a produtividade. Por isso, para desenvolver os seus POOs, voc poder escolher entre as IDEs propostas. Mas, caso seja de seu interesse, voc tambm poder rodar seus programas a partir de editores de texto comuns. Neste caso, voc dever acompanhar a leitura anexa para instalar e configurar o Java e comear a programar utilizando apenas um editor de texto simples.

Nesse caso, no preciso voc ter uma IDE em seu computador para programar em Java, Basta possuir o JDK instalado. JAVA EXECUO A PARTIR DO EDITOR CMD ARQUIVO CD - AULA 1 - Leitura complementar Java execuo a partir do editor cmd Desenvolver programas a partir de editores de texto comuns, como fazem os mais saudosistas; ou aproveitar a agilidade e a facilidade proporcionadas pelas IDEs? A deciso sua! Agora, que finalizamos toda a parte de instalao e configurao, j estamos aptos rodar programas Java sem problemas. A partir da prxima aula vamos comear a ver o conjunto de comandos que nos possibilitar entrar no mundo da programao Java.

Resumo da aula
Nesta aula voc foi capaz de compreender que o aumento da complexidade dos Sistemas de Informao SI foi um dos motivos que propiciou a grande adeso orientao a objetos. A programao orientada a objetos (POO) uma evoluo do paradigma de programao estruturado, pois visa aproximar o mundo real do mundo computacional. Voc tambm viu que a JCP Java Community Process a entidade responsvel por controlar e padronizar a linguagem, que definida pela ORACLE como orientada a objetos, independente de plataforma, ambiente de programao multithread. Alm disso, voc compreendeu que o Java possui trs extenses (Java SE - Standard Edition, Java EE - Enterprise Edition e Java ME - Micro Edition). As Ferramentas de Desenvolvimento (IDEs) mais populares so NetBeans e Eclipse. Ao final da aula voc pde baixar o Kit de Desenvolvimento Java JDK e decidir entre elaborar programas a partir de editores de texto ou de IDEs.

Atividade
1. Explique o que significa POO. 2. Explique com suas palavras o que so modelos.

3. Identifique e relacione as principais caractersticas da linguagem Java. 4. Defina o conceito de abstrao. 5. Identifique as Edies do Java e resuma as particularidades de cada uma delas. 6. O que uma IDE? 7. Faa uma pesquise e identifique as principais IDEs para a linguagem JAVA.

Instalao do JDK Depois que a ORACLE comprou a Sun, tornou-se necessrio fazer um cadastro gratuito para baixar o JDK. Para baixar o Kit de Desenvolvimento Java JDK acesse o link abaixo: http://www.oracle.com/technetwork/java/javase/downloads/jdk 6-jsp-136632.html Caso esteja utilizando o Windows, instale o JDK como qualquer outro programa. Clique duas vezes para iniciar a instalao e depois pressione o boto Next at concluir. Abaixo, voc encontra a primeira tela desse procedimento.

No momento de construo deste material, a verso disponvel para download do Java era o jdk1.6.0_21. Aps o procedimento de instalao, basta voc pressionar o boto Finish que significa a concluso dessa etapa.

Depois disso, voc deve dizer ao sistema operacional onde esto localizadas as classes do Java para que voc possa compilar e executar seus programas tranquilamente. Esta etapa caracteriza-se por configurar as variveis de ambiente. Novamente, caso esteja utilizando o sistema operacional Windows, v ao Painel de Controle e acesse a opo Sistema.

Aps isso, v em Avanado e depois Variveis de ambiente.

Na tela Variveis de ambiente clique em Nova.

Ao abrir a tela Nova varivel de sistema, crie uma varivel de ambiente de nome JAVA_HOME. Essa varivel vai dizer ao sistema operacional em qual pasta est instalado o Java. No nosso caso, por convenincia,

escolhemos instalar o Java na pasta padro designada no momento da instalao, localizada em C:\Arquivos de programas\Java\jdk1.6.0_21. Logo, a tela ficar assim:
Nome da varivel: JAVA_HOME Valor da varivel: C:\Arquivos de programas\Java\jdk1.6.0_21

Depois,

voc

dever

criar

outra

varivel

de

ambiente,

de

nome

CLASSPATH. Ela indicar ao sistema operacional onde esto localizadas as classes Java responsveis por ler, compilar e interpretar o cdigo Java que voc escreveu. A tela ficar assim:
Nome da varivel: CLASSPATH Valor da varivel: .;%JAVA_HOME%\lib\tools.jar

Para finalizar, basta editar a varivel Path para que o Windows saiba localizar os comandos Java. importante lembrar que voc no deve apagar o contedo da varivel Path mas, sim, acrescentar o valor correspondente no final dos valores pr-existentes. A tela da varivel Path ficar assim:

Nome da varivel: Path Valor a ser acrescentado na varivel: ;%JAVA_HOME%\bin

Para

garantir

funcionamento

dessas

implementaes,

reinicie

seu

computador e depois v ao prompt (console) Iniciar -> Executar -> cmd e digite javac.

Quando voc for programar, poder escolher por escrever em um editor de texto simples ou utilizar uma IDE. Caso sua escolha seja por um editor simples, ento ser necessria a compilao de cada uma das classes que voc construir. Utilizando uma IDE, ela j compila as classes, sem precisar de um comando especfico para isso. Em um ambiente coorporativo, no entanto, voc necessariamente usar ferramentas que faro todo este trabalho pesado.

Veremos mais adiante, quando comearmos a executar nossas aplicaes, um passo a passo bem detalhado sobre como rodar um programa em Java utilizando o bloco de notas e tambm utilizando a IDE eclipse. Depois do primeiro exemplo, para ganharmos tempo, produtividade e tambm para facilitar nossa vida, sempre utilizaremos a IDE eclipse.

AULA 2 - CONCEITOS Compreender os conceitos fundamentais relacionados programao em Java muito importante para que voc tenha um bom aproveitamento nesta disciplina. Apesar dos operadores, das estruturas de controle e de deciso, serem similares s que voc j conhece em programao estruturada, esta aula fundamental para que voc possa relembrar (e sedimentar) esses importantes conceitos. Assim, voc estar mais seguro na hora de desenvolver seus programas em Java. Nesta aula voc ver os tipos de referncia, as palavras reservadas e os operadores utilizados na programao Java (atribuio, aritmticos, lgicos, relacionais e bit a bit). Alm disso, voc tambm revisar as Estruturas de Controle e Deciso, como as condicionais (if,

if

else, if else if, if switch)

aninhado,

Operador Ternrio

?,

e as de Repetio (for,

while, do/while e break).


Abertura

At

hoje,

plataforma

Java

atraiu

mais

de

6,5

milhes

de

desenvolvedores de software. utilizada em todos os principais segmentos da indstria, estando presente em uma ampla gama de dispositivos, computadores e redes. Sua versatilidade, eficincia, portabilidade de plataforma e segurana fazem dela a tecnologia ideal para a computao em rede. A tecnologia Java est em todo lugar! Ela pode ser encontrada em laptops, datacenters, consoles de jogo, supercomputadores cientficos, telefones celulares e at na Internet.

A tecnologia Java est presente em mais de 4,5 bilhes de dispositivos, incluindo: Mais de 800 milhes de PCs 2,1 bilhes de telefones celulares e outros dispositivos

portteis (fonte: Ovum) 3,5 bilhes de cartes inteligentes

Alm de set-top boxes, impressoras, webcams, jogos, sistemas de navegao para automveis, terminais lotricos, dispositivos mdicos, guichs de pagamento de estacionamento etc. Para conhecer os locais de aplicao do Java in Action em sua vida diria, explore o site java.com. Fonte: http://www.java.com/pt_BR/about/

Texto base
1 Tipos Java uma linguagem fortemente tipada, ou seja, toda varivel deve ser de um tipo especfico conhecido pelo compilador. Para utilizar um tipo o programador deve colocar o tipo seguido de um nome de varivel. Conforme padronizao da JCP, ao se declarar uma varivel, o nome a ser utilizado deve ter letras minsculas; caso seja um nome composto, apenas a primeira letra dos nomes posteriores deve ser com letra maiscula. Os tipos podem ser categorizados como primitivos ou de referncia. Os tipos de referncia so, principalmente, as classes utilizadas na linguagem Java, mas tambm podem ser arrays ou interfaces (temas que veremos mais frente no nosso curso). Voc ver que o programador pode usar classes pr-definidas para linguagem (elaboradas por fornecedores de componentes, por outros programadores, desenvolvedores e projetistas) ou pode definir novas classes, sempre que desejar. Na nossa prxima aula vamos aprender a definir e utilizar essas classes (tipos de referncia), pois

atravs delas que poderemos, efetivamente, programar orientado a objeto. Nessa aula, vamos nos concentrar nos tipos primitivos, que podem ser booleanos (boolean ), numricos (byte, e os pontos flutuantes (float e

short, int, long,

char),

double). Abaixo, segue uma

tabela com

os tipos primitivos utilizados em Java.


Tipo boolean byte short int long char float double Tamanho 8 bits 8 bits com sinal 16 bits com sinal 32 bits com sinal 64 bits com sinal 16 bits sem sinal 32 bits com sinal 64 bits com sinal Valores true ou false -128 a + 127 - 32.768 a + 32.767 - 2.147.483.648 a + 2.147.483.647 - 9.223.372.036.854.775.808 a + 9.223.372.036.854.775.807 0 a 65535 - 1.40239846E-45 a + 3.40282347E + 38 * - 4.94065645841246544E-324 a + 1.79769313486231570E + 308 **
** 18 dgitos de preciso

* 9 dgitos de preciso

Abaixo, veja a definio de um tipo primitivo. Um exemplo de declarao de varivel, com o nome salrio:
double salario;

Caso a varivel possua nome composto como, por exemplo, imposto de renda:
double impostoRenda;

Veja que estamos observando padronizao da JCP! 2 Palavras reservadas A linguagem Java possui uma gama de palavras reservadas. Essas palavras reservadas no podem ser utilizadas como identificadores http://pt.wikibooks.org/wiki/Java/Identificadores , ou seja, nenhuma delas poder ser utilizado como nome de classe, objeto, varivel, etc. So elas:
abstract assert boolean break byte case catch char continue default do double else enum extends final for if goto implements import instanceof int interface new package private protected public return short static switch synchronized this throw throws transient try void

class const

finally float

long native

strictfp super

volatile while

No decorrer das prximas aulas, veremos o significado e a utilizao dessas palavras reservadas, utilizadas na programao Java. 3 Operadores em Java Por ter sido inspirada nas linguagens C/C++, o Java possui uma sintaxe muito semelhante a elas, inclusive quanto aos operadores. Muito provavelmente voc j viu linguagem C em Programao Estruturada no semestre passado, se este for o seu caso, encare esta parte como uma espcie de reviso. As particulares que, por ventura, vierem a aparecer na utilizao da linguagem Java, sero vistas em momentos oportunos. Operadores so instrues que realizam transformaes e/ou comparaes a partir de dados ou operandos fornecidos no decorrer do programa. Os operadores podem ser categorizados em: operadores de atribuio, aritmticos, lgicos, relacionais e bit a bit. 3.1 Operador de atribuio Operador de atribuio identificado por um sinal de igual

=;

sendo o mais

fcil de ser compreendido, pois se restringe a atribuir um valor a uma varivel. Para atribuir um valor a uma varivel, basta que a varivel seja seguida do operador varivel. Exemplo:
int x = 2;

e, posteriormente, indicado o valor a ser atribudo

3.2 Operadores aritmticos Os operadores aritmticos so aqueles que possibilitam a execuo de operaes matemticas. So eles:
Sinal + * / % Especificao soma de valores inteiros e de ponto flutuante subtrao de valores inteiros e de ponto flutuante multiplicao de valores inteiros e de ponto flutuante diviso de valores inteiros e de ponto flutuante obteno do valor de resto, em formato inteiro, aps uma diviso

Possibilita Possibilita Possibilita Possibilita Possibilita

a a a a a

++ --

Possibilita o incremento de valores inteiros e de ponto flutuante Possibilita o decremento de valores inteiros e de ponto flutuante

Alguns operadores so triviais como, por exemplo: merecem especial ateno, so eles: representada por:

+,

. Outros

/, %, ++

--.

No caso da diviso,

/ ; importante salientar que, se a diviso for feita entre

nmeros inteiros o resultado vir apenas em formato inteiro. Por exemplo: se considerarmos duas variveis inteiras valores

com os

respectivamente, aps efetuarmos a diviso

a/b

colocarmos o resultado em outra varivel inteira

c,

o valor da varivel

(resultado) seria

2.

Representando o caso acima temos:


... int a = 8; int b = 3; int c = a / b; Resultado: c igual a 2

Perceba que o valor decimal no aparece, justamente pelo fato de o resultado ter sido colocado em uma varivel do tipo exemplo acima, a varivel ainda seria

int c. float,

Caso, no

fosse declarada como

o resultado

mas, agora, com casas decimais (2,00000...). O

resultado seria

porque a diviso ainda seria com dois nmeros inteiros.

Como o resultado seria colocado em uma varivel de ponto flutuante, as casas decimais com valor resultado (a ou

fariam parte do resultado. Para obter o

2,6666... b)

seria necessrio que pelo menos uma das variveis

fosse declarada como

float.

Isso foraria o compilador a

efetuar uma operao com ponto flutuante e, ao colocar o resultado em uma varivel de ponto flutuante, o valor seria apresentado corretamente com as casas decimais. O operador

retorna o resto da diviso. Utilizando os mesmos valores do

nosso exemplo inicial, podemos visualizar um fragmento de programa contendo a situao acima, da seguinte forma:

Representao da utilizao do operador


... int a = 8; int b = 3; int c = a % b; Resultado: c igual a 2

%:

Repare que no nosso exemplo, as variveis poderia ser

a 8

so inteiras e

c 2

inteira

ou

float. %

Esse programa vai imprimir como dividido por

resultado o valor 2. Todos ns sabemos que com resto resto. Os operadores

3,

resulta em

2.

Portanto, o operador

mostra como resultado o valor de

++

--

(cuidado, no h espao entre os dois sinais

e nem entre os sinais

) representam o incremento e o

decremento respectivamente. So considerados operadores unrios, pois modificam a prpria varivel na qual o operador aplicado. Se, em uma varivel inteira

x,

for aplicado o operador

++,

ento significa que

ser incrementado de Exemplo (++):


x++; o mesmo que: x = x + 1;

1.

Por similitude, se em uma varivel inteira ento, significa que Exemplo (--):
x--; o mesmo que: x = x 1;

xfor aplicado o operador --,

xser decrementado de 1.

importante salientar que esses operadores podem vir antes ou depois da varivel. Caso venham antes, ento a varivel sofre o incremento ou decremento e, depois, retorna o valor correspondente. Se vierem depois,

ento a varivel primeiramente retorna o valor e, s depois, sofre o incremento ou decremento. 3.3. Operadores Lgicos So operadores usados em expresses que retornam os valores lgicos
verdadeiro

ou falso. Seguem os operadores:


Operador && || ! Operao lgica (e lgico) (ou lgico) (no lgico)

and or not

3.4. Operadores Relacionais So operadores que possibilitam a execuo de comparaes entre valores. So eles:
Operador > < >= <= == != Descrio esquerdo maior que o operando do lado direito esquerdo menor que o operando do lado direito esquerdo maior ou igual ao operando do lado direito esquerdo menor ou igual ao operando do lado direito esquerdo igual ao operando do lado direito esquerdo diferente ao operando do lado direito

Compara Compara Compara Compara Compara Compara

se se se se se se

o o o o o o

operando operando operando operando operando operando

do do do do do do

lado lado lado lado lado lado

Logo abaixo, segue a representao de um trecho de cdigo. Um exemplo de como utilizaremos os operadores relacionais e lgicos no decorrer de um programa:
... int altura = 182; if(altura < 170) Altura menor que a mdia if((altura >= 170) && (altura < 180)) Altura mdia if(altura >= 180) Altura maior que a mdia

Repare que, no trecho de cdigo acima, so feitas comparaes entre uma determinada altura dada em centmetros altura menor que a mdia

(182)

e valores indicadores de

(<170),

altura mediana

(>=170 e <180)

e altura maior que a mdia

(>=180). &&

Repare ainda que, na comparao

de alturas, foram utilizados os operadores relacionais menor e maior igual. Foi utilizado o operador lgico (e) para indicar que, quando a altura

fosse mediana, ela teria que ser maior ou igual a cm, ou seja, teria que atender as duas situaes.

165 cm e menor que 180

Voc reparou outro detalhe fundamental nesse trecho de cdigo? Perceba que foi utilizada a palavra chave

if.

Esta palavra chave foi utilizada como

uma estrutura de deciso. Veremos mais detalhes sobre essas estruturas mais frente. 3.5 Operadores bit a bit Os operadores bit a bit realizam suas operaes sobre os bits de um determinado nmero, e no sobre o valor. O operador AND (&) o de precedncia mais alta. Depois de analisar dois bits ele retorna 1 caso os bits sejam iguais a 1, caso contrrio retorna 0. Em segundo lugar, em relao a procedncia vem o operador bit a bit OR exclusivo (^) cujo resultado 1 caso os bits sejam diferentes e 0 para o caso de serem iguais. Para finalizar, o operador OR (|), na qual retorna 0 se os bits forem 0 e 1 caso se os bits forem 1.
Operador Operao and or or exclusivo (xor) Deslocamento direita Deslocamento esquerda

& | ^ >> <<

Os operadores bit a bit, quando utilizados, executam uma ao lgica a cada bit nos argumentos da operao. Por exemplo, imagine uma varivel inteira com nome

x,

de 4 bits, de valor

2.

Sua representao seria

0010. Caso queiramos a negao desse nmero, ento o resultado seria


1101. Esses operadores s podem ser utilizados nos tipos

char, int

long int.

Os operadores de deslocamento funcionam da mesma forma,

se, por exemplo, aplicssemos o operador de deslocamento esquerda: ; com o valor

<<

no mesmo nmero inteiro. Dessa forma, teramos como

resultado o valor, em bits, de

1000.

Veja o exemplo:
int i = 2; ~i = 13; i<<2 = 8

4 Estruturas de Controle e Deciso As estruturas de controle e deciso so essenciais para programao, independentemente de ser ou no orientada a objetos. Por meio delas conseguimos implementar as regras de negcio levantadas pela anlise de requisitos. As decises aplicadas sobre os dados fazem a diferena na hora de saber se determinado sistema atende ou no a necessidade para a qual ele foi concebido. Estruturas de controle e deciso dependem fortemente das operaes com operadores lgicos vistos anteriormente. 4.1 Condicionais 4.1.1

if if
bastante conhecida entre os programadores.

A estrutura de deciso

Ela permite que o fluxo da execuo seja desviado, assim, trechos de cdigo podem ser executados ou ignorados, dependendo do resultado de uma determinada condio. Por exemplo, no caso abaixo, se a condio for verdadeira, o trecho de cdigo dentro do

if

executado, caso a condio

seja falsa, ento o trecho dentro bloco de comandos do


if(condio) { // cdigo executado }

if ignorado.

4.1.2

if / else if
/

A estrutura

else

tambm delimita blocos de acordo com uma

determinada condio. A diferena est localizada no trecho que est dentro do bloco

else,

uma vez que esse trecho s ser executado caso a

condio estipulada no

if seja falsa. Vamos visualizar

o trecho abaixo para

esclarecimento. Supomos que a condio comparada retorne um resultado verdadeiro (true).


if(condio) { /* Cdigo executado caso a condio seja verdadeira */ } else { /* Cdigo ignorado caso a condio seja verdadeira */ }

Em contra partida, caso o resultado da condio comparada seja falso (false), ento os blocos a serem executados sero invertidos.
if(condio) { /* Cdigo ignorado caso a condio seja falsa */ } else { /* Cdigo executado caso a condio seja falsa */ }

4.1.3

if else if if else
extensvel, pois podem ser colocados outros

A estrutura depois do

if

else.

Neste caso, as hipteses sero testadas e, caso satisfaa

a condio, a execuo entra no

if correspondente e no entra nos outros, if

mesmo que satisfaam a condio, a menos que algum desses outros no tenha um

else precedido.

if(Condio_Falsa) { //Instruo ignorada; } else if(Condio_Verdadeira) { //Instruo executada; } else if(Condio_Verdadeira) { /* Instruo ignorada mesmo sendo verdadeira pelo fato de j ter sido executada a segunda instruo; */ }

4.1.4

if aninhado if
tambm pode ser aninhado. Significa dizer

Para finalizar, o comando que pode existir um

if

dentro de outro

if.

Enquanto a condio for

satisfeita a execuo segue o fluxo normal e entra nos condio no for satisfeita a execuo segue o

ifs.

Quando a

fluxo

pelo

else

correspondente, se houver.
if(Condio_Verdadeira) { if(Condio_Verdadeira) { if(Condio_Verdadeira) { Instruo 1; } else { Instruo 2; } } else { Instruo 3; } }

Note que pode, ou no, existir

else else

para cada para cada

if. if.
O

Depende da

necessidade do programa, ter ou no

else

no

obrigatrio. utilizado apenas em caso de necessidade. 4.1.5 Operador Ternrio O operador ternrio

muito particular, e pode ser encarado como um if

simplificado. O seu funcionamento consiste em receber uma operao booleana para comparao e retornar o valor correspondente dependendo do resultado ter sido verdadeiro ou falso. Vamos ver abaixo como funciona esse operador.
int num1=3; int num2=6; int numMaior=0; numMaior = (num1 > num2) ? num1: num2;
(Valor retorno) = (Operao booleana)

(retorno verdadeiro) : (retorno falso)

No trecho acima, feita uma comparao entre dois nmeros (num1 e

num2), o maior deles retornado e alocado na varivel numMaior.


4.1.6

switch switch
outra estrutura de deciso. O

O comando

switch

mais

limitado em relao ao

if, porque os valores a serem testados no aceitam

expresses lgicas. Nele, compara-se apenas uma varivel com um valor fixo. Mesmo assim, se bem empregada, uma boa estrutura de tomada de decises, podendo auxiliar na limpeza, clareza e otimizao de cdigo. Representao do comando
switch (varivel) { case valor1: //bloco de instrues break; case valor2: //bloco de instrues break; case valorn: //bloco de instrues break;

switch

4.2 Repetio Sabemos que, em programao, as estruturas de repetio so

extremamente necessrias. Tambm chamadas de laos ou iteraes, so teis para vrios tipos de situaes. muito comum o programador precisar das estruturas de repetio para a confeco de um relatrio, percorrer uma lista de produtos em uma nota fiscal, lista de disciplinas por aluno, alunos por curso, entre outros exemplos. 4.2.1 O

for
de repetio cuja funo percorrer uma seqncia

for uma estrutura

de ndices e executar uma operao a cada passagem, at que esta

seqncia termine. Cada passagem de ndice chamada de iterao e comumente conhecida como lao ou loop.
for(inicializao; seqncia de execuo; incremento/decremento) { //bloco de instrues; }

Para compreender melhor o uso do comando:

for,

vamos analisar cada parte do

1 parte: inicializao. A inicializao a definio de quando comea a contagem do ndice. 2 parte: seqncia de execuo. A seqncia de execuo que determina o limite da iterao, ou seja, at quando o ndice ir percorrer. 3 parte: incremento/decremento. Determina a maneira com a qual o ndice percorre a seqncia de execuo. A linguagem Java ainda possui outros tipos de

for

personalizados. A

funcionalidade a mesma, apenas a sintaxe diferente. Existem

for

especficos para serem utilizados em iteraes e colees parametrizadas, por exemplo. No momento oportuno, veremos a utilizao dessas estruturas. 4.2.2

while while uma estrutura de repetio que testa uma condio e,

O comando

enquanto essa condio for satisfeita, a execuo dentro do comando

while continua.
Segue a representao do comendo
while(condio) { //bloco de instrues; }

while:

4.2.3.

do/while

O comando

do/while

se diferencia do comando

while,

pois executa a

iterao pelo menos uma vez, quando, s ento, a condio testada. Se a condio for verdadeira, a execuo continua, caso a condio seja falsa ento o lao interrompido. Enquanto no

while,

a execuo da iterao

s comea se o teste da condio for verdadeiro, no

do/while,

executado o loop logo na primeira vez e depois se testa a condio. Representao do comando
... do {

do/while:

// bloco de instrues } while (condio) ...

No se esquea que em todas as estruturas de repetio pode ser usado o comando

break,

ele tem a mesma funo de quando usado no comando

switch, break

que a de interromper a execuo. No caso de um loop, o

encaminha a execuo diretamente para o prximo bloco de

execuo, aps a estrutura de repetio.

Resumo da aula
Nesta aula voc foi capaz de compreender os tipos de referncia, as palavras reservadas e os operadores em Java (atribuio, aritmticos, lgicos, relacionais e bit a bit). Alm disso, voc tambm revisou as Estruturas de Controle e Deciso, como as condicionais (if,

if / else,
e as de sero que

if else if, if
Repetio (for,

aninhado, Operador Ternrio

?, switch) break),

while,

do/while

amplamente utilizadas na sua programao em Java.

Atividade
1. Especifique a diferena entre tipos primitivos e tipos de referncia. 2. Identifique a funo e cada um dos Operadores de atribuio abaixo: a. ==

b. := c. = d. += e. =+ 3. Descreva os tipos de operadores utilizados em Java. 4. Descreva o que , e qual a funo de um operador bit a bit? 5. Especifique o que um operador ternrio? 6. Escreva o que uma estrutura de controle condicional. 7. Descreva quais so e para que servem as estruturas de controle condicional. 8. Indique quais so, e para que servem, as estruturas de repetio. 9. Explique para que serve a palavra reservada break. 10.A ttulo de reviso, elabore um programa em linguagem C (ou outra linguagem estruturada), que solicite ao usurio que digite um nmero, apresentando uma resposta que faa com que o usurio consiga acertar o nmero pensado pelo programador. Acompanhe um vdeo com este exerccio resolvido! (AULA 2 VDEO 1 - EXERC. RESOLV. IF - ADIVINHE O NMERO) 11.Desenvolva o mesmo programa acima utilizando os comandos

if/else.
12.Elabore um programa em linguagem C (ou outra linguagem estruturada), que verifica e imprime como resultado se um nmero digitado pelo usurio par ou impar. Dica: Utilize if e o operador %. 13.Prepare um programa em linguagem C (ou outra linguagem estruturada), a que leia 5 valores inteiros e diga qual o maior, o menor, a soma, a mdia. 14.Desenvolva um programa em linguagem C (ou outra linguagem estruturada), que receba 3 notas de um determinado aluno digitadas pelo usurio (com pesos iguais a 3, 3 e 4), calcule a mdia e imprima se o aluno est aprovado ou reprovado sendo que a nota mnima para passar 7. Utilize

if.

15.Desenvolva um programa em linguagem C (ou outra linguagem estruturada), que simule uma calculadora simples. Onde o usurio escolhe uma opo que represente uma operao. Ex: 1 para somar;

2 para multiplicar; 3 para subtrair e 4 para dividir. Aps a escolha da operao o programa recebe dois nmeros e realiza a operao escolhida com esses dois nmeros. Utilize

switch. for
que apresente um

16.Elabore um programa utilizando a estrutura

loop infinito. O programa somente ser interrompido quando uma tecla especfica for acionada. Acompanhe o vdeo com este exerccio resolvido! (AULA 2 VDEO 2 - EXERC. RESOLV. LOOP INFINITO - FOR) 17.Elabore o mesmo programa acima utilizando a estrutura de repetio

while.
18.Desenvolva um programa que leia 10 nmeros, mas se entre eles existir o nmero 7 ento utilize o comando estrutura e encerrar o programa.

break

para sair da

AULA 5 - MTODOS E ATRIBUTOS Na aula passada, voc viu que os atributos so variveis que devem ser definidas dentro das classes. Por meio deles, so alocados os valores que so manejados no programa. J os mtodos so responsveis pelo manuseio dos valores definidos nos atributos. Os mtodos so os responsveis pelo fluxo da informao sistmica, pela formatao para correta apresentao ou pelo tipo de formatao que possibilita o correto armazenamento de informaes, por exemplo. Nesta aula, aprofundaremos um pouco mais nosso conhecimento sobre esses dois conceitos. Ao final desta aula voc ser capaz de compreender o que so atributos e mtodos. Voc tambm ver a funo dos modificadores de acesso (private, entender classes os

protected, public, static


Construtores. um Ao final de da

final)
aula, em

Mtodos

voc um

acompanhar a elaborao de um programa composto por trs que identificaro resumo compras estabelecimento comercial e uma vdeo-aula com mais alguns outros exemplos de classes.

Abertura
Vimos que a classe define a estrutura de um objeto. Portanto, uma classe especifica todos os atributos (propriedades) e mtodos (comportamento) dos objetos que pertencem quela classe. Abaixo, voc pode ver o exemplo de uma classe Carro e quatro objetos que foram gerados a partir dessa classe.

Agora, veja a representao do objeto gerado pela classe Carro, Porshe, GT-3, branco. Portanto a classe Carro tem como atributos: fabricante, modelo e cor. J os mtodos definidos nesta classe so: ligar, acelerar e desligar; comportamentos prprios do objeto em questo.

Veja que a classe um modelo para gerar objetos. Em uma classe, os atributos representam o estado do objeto. J os mtodos, a interao dos objetos com o mundo externo.

Texto base
1 Atributos Atributos so campos agrupados em uma classe. Eles so os responsveis pelo armazenamento dos valores utilizados no sistema. Em outras palavras, so variveis, que devem ser declaradas dentro das classes. Tecnicamente, voc pode compreend-los como endereos de memria utilizados para armazenamento de contedos, que dependem do tipo definido para o atributo. Um atributo pode ser de qualquer tipo pr-definido, desde os primitivos, como:

int, double, char;

at os de referncia, como as classes

String, Date

ou qualquer outra. No caso dos atributos de classe, eles

deve ser inicializados com algum valor correspondente; caso isso no ocorra, haver erro na compilao. Segundo padronizao da Sun os nomes de atributos devem comear com a letra minscula, caso seja um nome composto a primeira letra do nome subseqente deve iniciar com a letra maiscula e o restante deve continuar com letras minsculas. 2 Mtodos Mtodos so operaes pertencentes a uma determinada classe. O mtodo onde os cdigos so efetivamente executados. Um mtodo pode chamar outros mtodos, que podem estar na mesma classe ou em classes diferentes. A dinmica de um sistema feita por meio dos mtodos. Eles ditam o comportamento da aplicao e a seqncia das chamada das operaes que determina como funciona o sistema. Alguns autores preferem chamar os mtodos de mensagens. Assim, quando dissermos

que h um envio de mensagem significa dizer que determinado mtodo foi executado. Os mtodos podem receber parmetros, que por sua vez, podem ser de tipos primitivos (int, referncia

double, char, float,


etc).

etc) e de tipos de

(String, Date,

Nos exemplos vistos at agora,

voc pde acompanhar parmetros definidos para o mtodo consistiram em um array de strings:

main,

que

main(String[] args).

Perceba

que, para se fazer a declarao de parmetros necessrio colocar o tipo do parmetro e depois o nome da varivel. Caso haja mais de um deve-se separ-los por vrgula. Mtodos tambm podem retornar um valor, ou no. Caso retornem um valor, eles tambm podem ser do tipo primitivo ou de referncia. J conhecemos os tipos primitivos que so os booleanos, numricos e pontos flutuantes (todos aqueles vistos no incio da nossa aula 2). Portanto, os tipos de referncia sero todos aqueles utilizados no nosso sistema desde que no sejam os tipos primitivos. Abaixo, segue a estrutura de um mtodo.
<opcional> <obrigatrio>

modificador static final tipo_de_retorno nome_do_metodo(lista_de_parametros) { } <opcional>

Os parmetros so opcionais, mas devem existir os parnteses () mesmo que no haja parmetros. 3 Modificadores de acesso Uma caracterstica comum, tanto aos mtodos quanto aos atributos, consiste no uso dos modificadores de acesso. Mtodos e atributos podem ter os seguintes modificadores de acesso:

private, protected

public, alm dos static e final.

3.1

private

quando o mtodo ou atributo visualizado apenas dentro da prpria classe. Os mtodos/atributos privados (private ) de uma determinada classe, no so visualizados em outra classe. Isso ocorre independente de estarem localizadas no mesmo pacote ou de serem subclasse de uma classe com mtodos/atributos privados. Os mtodos/atributos 3.2

private so particulares da prpria classe.

protected

quando o mtodo/atributo pode ser visualizado tanto na prpria classe quanto em suas subclasses. Quando uma classe estende outra classe, todos os mtodos e atributos protegidos (protected ) podem ser visualizados e conseqentemente utilizados pela classe filha. 3.3

public

Os mtodos e atributos pblicos (public ) so vistos por todas as outras classes. Independentemente de serem subclasses ou no, sempre so visualizados e podem ser acessados por outras classes. So operaes e atributos que podemos usar normalmente nas classes que construmos. Vimos que um mtodo ou um atributo declarado na classe utilizado nas instncias daquela classe. Logo, um atributo de um tipo qualquer, como por exemplo

int,

ter um valor particular em cada um do objetos daquela

classe. Quando definimos operaes em uma classe, apenas objetos instanciados naquela classe podem executar aqueles mtodos. Obviamente, se no houver um objeto na memria capaz de chamar aquele determinado comando, no ser possvel acessar o mtodo declarado na classe. A linguagem Java aceita a declarao de atributos e mtodos sem modificadores de acesso. Dessa forma, esses atributos e mtodos so

enxergados por outras classes, diferentes daquela em que foi declarada, mas desde que estejam localizadas dentro do prprio pacote. As melhores prticas de programao orientada a objetos definem que todos os mtodos e atributos devem possuir modificadores de acessos. Logo, por uma questo de clareza e segurana, devemos evitar a utilizao de atributos e mtodos sem modificadores de acessos. Outra recomendao das melhores prticas de programao diz que todos os atributos declarados nas classes devem ser privados (private ) e qualquer manipulao desses atributos devem ser feitos por meio de mtodos pblicos. So os famosos

get e set, que veremos mais frente.

Alm dos modificadores vistos acima, ainda podemos citar tambm o

static

final,

que tambm so modificadores que agem sobre os

mtodos e atributos. 3.4

static

possvel acessar mtodos e atributos de classe, no sendo necessria a criao de instncias para poder manipul-los. Para isso, utilizamos o modificador

static.

Ao utilizar o

static

em um

atributo, dizemos que este atributo , na verdade, da classe, ou seja, todas as instncias dessa classe enxergaro o mesmo valor naquele atributo. O valor ser compartilhado por todos uma vez que o atributo no pertencer a uma instncia especfica e sim classe. Isso acontece tambm para os mtodos. Ao se fazer um mtodo esttico, o programador est fazendo um mtodo que no precisa de instncia para executar. Pode-se fazer a chamada do mtodo diretamente sem a necessidade de criar um objeto para isso. bom ressaltar que mtodos estticos no tero acesso a atributos e mtodos normais. O acesso pode ser feito somente a variveis do prprio mtodo ou outros mtodos tambm estticos, pelo simples fato de que no h garantias sobre a existncia de memria para tais mtodos e atributos.

3.5

final final
tambm utilizado em mtodos e atributos.

O modificador

Por meio desse modificador possvel restringir a sobrescrita de um mtodo ou definir uma constante em um atributo. Em outras palavras, quando declaramos um mtodo como final estamos dizendo que ele no poder ser reescrito em subclasses, ou seja, aquela implementao dele a ltima e no poder ser modificada. Se for colocado em um atributo, significa que ele no poder sofrer alteraes em seu valor, ou seja, ser constante, imutvel. Agora, acompanhe mais alguns exemplos de modificadores utilizados no escopo dos programas. VIDEO CD - Aula 05 - video 1 - modificadores priv prot 4 Mtodos Construtores Mtodos construtores so aqueles executados quando se cria uma instncia. Por exemplo, ao se aplicar a palavra reservada

new,

sabemos que um

objeto criado na memria, logo o mtodo correspondente construtor chamado para que essa operao seja feita. Caso o programador no crie explicitamente o mtodo construtor, ele criado automaticamente, da forma padro ou seja, sem parmetros. Caso seja criado explicitamente pelo programador (com parmetros ou no) o construtor padro no criado automaticamente pelo compilador. Em uma classe podem existir vrios mtodos construtores, a depender da vontade do desenvolvedor. Obviamente, encher uma classe com mtodos (sejam eles construtores ou no), atributos e objetos desnecessrios, no interessante para a estrutura do programa. O mtodo construtor executado ao se iniciar a classe. Ele no pode ser confundido com o mtodo

main,

que executado ao se iniciar a aplicao, sendo essa classe detentora

quando digitada a expresso do mtodo

java Classe,

main.

Abaixo, vamos elaborar um programa com as caractersticas expostas. Ele ser composto por classes que identificaro clientes, produtos e nota fiscal; e apresentar um resumo de compras em um estabelecimento comercial.

Analisando o cdigo acima, primeiramente vimos a classe Cliente com dois atributos de classe chamados nome que do tipo quantidadeProdutos do tipo

String,

int

(perceba que os nomes desses atributos

foram definidos de acordo com as melhores prticas). Alm disso, veja que os modificadores de acesso dos atributos foram definidos como privados e os mtodos que acessam esses atributos so pblicos. Isso acontece para ser mantido o encapsulamento, onde o acesso aos atributos deve ser restrito por meio de mtodos e no diretamente. Outro fator importante a ser verificado no programa acima o fato dos mtodos que acessam os atributos serem definidos com os prefixos

get

set.

Utilizamos o get para obter o valor de um atributo por meio de um

mtodo e set para fixar um valor em um atributo utilizando um mtodo. Quando utilizamos classes cujos valores dos atributos sero obtidos ou fixados fora da classe empregamos o get e set. No obrigatrio o uso dos prefixos get e set em nomes de mtodos que acessem atributos de classe. Isso apenas um padro utilizado pelos programadores da linguagem, assim fica mais fcil a identificao e a manuteno daqueles mtodos e atributos da classe. A sintaxe desses mtodos costuma ser get + nome do atributo e set + nome valor atributo. armazenado Como no exemplo, atributo podemos verificar utilizamos o o atributo mtodo quantidadeProdutos da classe Cliente acima. Repare que para obtermos o mencionado getQuantidadeProdutos. Da mesma forma, usamos setQuantidadeProdutos para fixar um novo valor no atributo quantidadeProdutos, passando este novo valor como parmetro. Outra caracterstica que podemos ressaltar nessa classe a utilizao da palavra

this.

Se

pegarmos

como

exemplo

mtodo

setQuantidadeProdutos(int

quantidadeProdutos),

utilizado nesse programa, podemos verificar que o nome do parmetro desse mtodo o mesmo do atributo de classe definido anteriormente. Para realizarmos a diferenciao entre o atributo da classe e a varivel definida no parmetro do mtodo, empregamos a palavra reservada

this

antes do

atributo de classe. Assim, o valor vindo pelo parmetro colocado no atributo. Caso o atributo de classe com o mesmo nome do parmetro do mtodo no estivesse precedido pela palavra

this,

o mtodo s

enxergaria seu prprio parmetro deixando o atributo da classe sem ser preenchido. A palavra reservada

this

indica que estamos falando da prpria classe ao

fazermos referncia a um determinado atributo ou mtodo. Portanto, quando quisermos dizer que um mtodo ou atributo parte integrante da prpria classe, deveremos colocar a palavra

this antes dele.

Podemos observar tambm a existncia de dois mtodos construtores, um sem parmetro, conforme podemos ver abaixo:
public Cliente(){ }

e outro com dois parmetros, denominados nome do tipo String e quantidadeProdutos do tipo inteiro.
public Cliente(String nome, int quantidadeProdutos){ }

Repare na diferena de mtodos convencionais e mtodos construtores. Os ltimos devem ter o mesmo nome da classe na qual eles pertencem, alm disso, tambm no possuem tipo de retorno. No momento de criao de um objeto dessa classe, o programador j pode preencher os dois atributos da classe em questo com os valores passados como parmetro pelo mtodo construtor que contm os parmetros. Continuando a construo do nosso programa, veremos agora o

funcionamento da classe Produto.

Veja que a classe Produto, definida acima, bastante semelhante classe Cliente vista anteriormente. Ela possui a mesma estrutura com dois atributos de classes, mtodos de acesso

get

set

e mtodos

construtores, sendo um padro, definido explicitamente pelo programador, e outro com parmetros para preenchimento dos atributos. O mtodo padro definido explicitamente pelo programador
public Produto() { }

O mtodo construtor com dois parmetros foi definido da seguinte forma:


public Produto(String nome, double valor){ . }

Abaixo segue a classe NotaFiscal que utilizar as classes definidas acima.

Temos algumas novidades nesta classe NotaFiscal. A primeira delas a utilizao de uma constante de nome

linha.

Para

isso,

bastou

declararmos um atributo com o modificador final e colocarmos ele de modo esttico. Assim, ele acessado dentro do mtodo

main

de maneira direta.

Veja que o mtodo tambm esttico. Caso o atributo no fosse esttico teramos que instanciar a classe NotaFiscal para poder utilizar o atributo. Outra novidade est na utilizao dos argumentos que so passados como parmetros pelo mtodo argumentos do tipo

main.

Na classe acima, estamos usando quatro

String

que so passados no momento em que a

classe chamada, como veremos na prxima figura tela de resultado. Aqui devemos prestar um pouco mais de ateno. Se estivermos utilizando o modo clssico de compilar e executar comando javac NomeClasse.java [ENTER] java NomeClasse ento, para passar os parmetros, basta preenchermos os valores no momento de digitar Cada valor, separado por espao,

java NomeClasse.
um parmetro

considerado

independente. Caso queiramos passar um nome composto, por exemplo, devemos pass-lo entre aspas para que a mquina virtual entenda que se

trata de apenas um parmetro. Agora, se estivermos utilizando o eclipse que o nosso caso devemos colocar os parmetros na tela especfica para parmetros. Para isso, devemos ir no menu Run -> Run Configurations....

Na tela de configuraes, na aba referente aos argumentos, coloque os argumentos do programa separados por espao. No nosso caso, conforme figura abaixo, colocamos os argumentos: Aderbal 15 Camisetas 30.45

Depois disso, basta clicarmos no boto Apply e depois Run, assim, o programa ser executado com os parmetros anotados. Ainda sobre a classe NotaFiscal, podemos observar a criao de objetos das classes Cliente e Produto cujos valores dos atributos vm dos argumentos passados pelo mtodo nome

main. Criamos um mtodo esttico cujo

getValorTotal,

passando como parmetros as referncias de

cliente e produto criadas anteriormente para que o valor total fosse calculado baseado na quantidade de produtos dos clientes e no valor desses produtos. Depois, de posse dos valores, basta que coloquemo-los na tela utilizando o mtodo

println.

Segue abaixo a tela de resultado referente a execuo do programa em seu modo clssico. Este o modo de chamar um programa com argumentos quando utilizamos apenas o JDK para confeco dos nossos programas.

Agora, vamos reparar a dinmica de funcionamento do programa em Java. Repare que, primeiramente, compilamos a classe Cliente usando o depois compilamos as classes Produto e NotaFiscal na seqncia.

javac,

importante

lembrar

que

devemos

primeiro

compilar

as

classes

independentes, para depois compilarmos as classes que dependem de outras. No nosso exemplo compilamos primeiramente as classes Cliente e Produto antes de compilar a classe NotaFiscal, pois em NotaFiscal so utilizadas as classes Produto e Cliente. Portanto, para ser compilada, uma classe necessita que as classes da qual ela depende j tenham sido anteriormente compiladas. Como o mtodo

main

s est na classe NotaFiscal, basta executarmos

essa classe para que o programa funcione. Repare que na hora de executar a classe NotaFiscal passamos os argumentos a serem colocados no array de Strings utilizados como parmetro no mtodo

main.

Assim, o primeiro

parmetro (com ndice 0) o nome do cliente, o segundo parmetro (ndice 1) a quantidade de produtos adquiridos pelo cliente, o terceiro parmetro (ndice 2) o nome do produto e o quarto parmetro (ndice 3) o valor de cada um dos produtos. A execuo do mtodo

main

colocou cada

argumento no seu devido lugar para a execuo correta do programa. Por fim, para executar o programa, devemos acessar o prompt de comando, ir pasta correspondente ao projeto, digitar as instrues:

javac javac

Cliente.java, Produto.java
compilao instruo: das

para

compilar

classe

Cliente,

depois

para compilar a classe Produto e finalmente digitar para compilar a classe NotaFiscal. Depois da executar o programa digitando a

javac NotaFiscal.java
classes

devemos

java NotaFiscal

e mais quatro parmetros que, no nosso

exemplo, foram: Joao Neto 4 Camisetas 30.20, assim o primeiro parmetro o nome do cliente, o segundo parmetro a quantidade de produtos adquiridos pelo cliente, o terceiro parmetro consiste no produto adquirido e por ltimo o valor unitrio de cada produto. Repare agora, a sada do programa quando utilizamos o eclipse. Colocamos os argumentos na tela de configuraes e o Java utiliza esses argumentos para execuo do programa.

A dinmica a mesma, o eclipse apenas encapsula esse mecanismo. Quando apertamos o boto Run como se digitssemos a expresso javac NomeClasse.java e depois java NomeClasse. Para executar com argumentos o eclipse reserva um espao especfico para esse fim, assim, quando o boto Run for pressionado ele saber onde buscar os argumentos e executar perfeitamente o programa. No programa acima, vimos todos os conceitos aprendidos nessa aula, utilizando trs classes: Cliente, Produto e NotaFiscal. Agora, veremos outro exemplo de programa utilizando os mtodos construtores. No projeto abaixo voc acompanhar um exemplo que utilizar as classes Construtor e Principal. Acompanhe! VIDEO CD - Aula 5 vdeo 2 construtores Agora, veremos outro exemplo de programa, mais completo, utilizando mtodos construtores, mtodo e atributo estticos. No projeto abaixo voc acompanhar um exemplo que utilizar as classes Cliente, Produto, Linha, Total e RelacaoCompras. Acompanhe! VIDEO CD - Aula 05 - video 3 - modificadores static final e construtores

Resumo da aula
Nesta aula, voc pde verificar que atributos so campos agrupados em uma classe, pois so responsveis pelo armazenamento dos valores utilizados na programao; enquanto os mtodos so as operaes

pertencentes

uma

determinada

classe.

Voc

observou

que

uma

caracterstica comum aos mtodos e atributos o uso dos modificadores de acesso e que os mtodos construtores so aqueles executados quando se cria uma instncia. Voc tambm teve a oportunidade de acompanhar a elaborao de um programa composto pelas classes clientes, produtos e nota fiscal, que apresentava um resumo de compras em um estabelecimento comercial. Por fim, voc acompanhou detalhadamente a dinmica de funcionamento desse programa, incluindo a execuo de cada uma das classes criadas.

Atividade
Criar Exerccios 1. Especifique quais so os modificadores de acesso. 2. Descreva o significado das seguintes palavras modificadoras: private, protected, public, static. 3. Elabore uma classe que calcule a mdia no mtodo main de dois nmeros passados como argumentos na chamada da classe. 4. Crie uma classe com dois atributos, um String e um inteiro, que sejam preenchidos com valores passados como argumentos na chamada da classe. 5. Elabore uma classe que possua um mtodo para calcular a mdia de dois nmeros passados como argumentos na chamada da classe. No mtodo main, deve haver apenas a chamada do mtodo calcularMdia e, em seguida, a apresentao do resultado. Dica: Lembre-se que o mtodo main esttico, portanto, para que no haja problema, instancie um objeto dessa classe no mtodo main para que no haja erros de compilao. 6. Elabore uma classe especfica que calcule a mdia de dois nmeros passados como argumentos na chamada da classe principal (possuidora do mtodo main). No mtodo main da classe principal deve haver a instanciao da classe especfica, a passagem dos valores obtidos como argumentos para a classe especfica por meio

de mtodos de acesso (get e set), a chamada do mtodo calcular mdia da classe especfica e a apresentao do resultado. 7. Elabore mais dois mtodos responsveis por calcular a mdia na mesma classe especfica acima, sendo que o primeiro realiza o clculo da mdia de 3 algarismos e o segundo realiza o clculo da mdia com 4 algarismos passados como argumentos pelo usurio da classe. Se achar necessrio, crie mais atributos e mtodos assessores. 8. Crie uma classe especfica que possua um mtodo construtor com uma mensagem qualquer. Crie tambm uma classe principal com o mtodo main instanciando a classe especfica para que a mensagem seja apresentada no console. 9. Crie uma classe especfica que possua uma constante do tipo String e um mtodo construtor chamando essa constante. Crie tambm uma classe principal com o mtodo main instanciando a classe especfica para que a mensagem da constante seja apresentada no console. 10. Crie uma classe especfica com mtodos responsveis por calcular a mdia, a soma, a subtrao, a multiplicao e a diviso de dois nmeros passados no momento de chamar a classe principal. A classe principal deve, em seu mtodo main, instanciar a classe especfica e chamar todos os mtodos de clculo dessa classe. Lembre-se que os atributos devem ser do tipo float ou double para que a operao de diviso seja feita corretamente. Desafio: Adapte as classes do exerccio 6 para que os valores passados como argumentos no momento de chamada da classe principal sejam passados para a classe especfica por meio do mtodo construtor dessa classe especfica.

AULA 3 SINTAXE BSICA DA POO . Ao final desta aula voc ser capaz de compreender a sintaxe bsica de uma linguagem OO, bem como os conceitos essenciais de abstrao, herana, polimorfismo e encapsulamento. Logo aps essa parte inicial, voc ser capaz de rodar o seu primeiro programa em Java (HelloWorld) e analisar, com calma, cada parte do cdigo fonte de programa executado. Tambm ser possvel acompanhar vdeos-aula com outros exemplos de programa.

Abertura
Uma das marcas registradas do Java a sua mascote Duke, criado ainda no projeto Green por Joe Palrang, quando a tecnologia Java foi anunciada pela primeira vez. O Duke pode ser visto em um conjunto de fotos que explica que sua transformao livre. H quem diga que o mascote da linguagem de programao Java baseado no emblema da federao da srie de televiso Star Trek. Os usurios podem incluir sua imagem em sistemas, sites, e merchandising, de acordo com os termos da licena. Voc poder ver uma coleo de imagens editadas do mascote Duke clicando em http://duke.kenai.com/

Texto base
1 Sintaxe bsica de uma linguagem OO Ainda nesta aula, rodaremos o nosso primeiro programa em Java. Portanto, j bom que voc se atenha a alguns conceitos fundamentais de sintaxe da linguagem Java, como: classe, atributo, objeto e mtodo. Veremos com detalhes cada uma dessas definies, mas, por enquanto, vamos passar rapidamente a idia principal que cerca cada um desses itens da linguagem orientada a objetos.

Classes As classes so as unidades de programao bsicas para o funcionamento de um sistema baseado no paradigma OO. Uma classe , antes de tudo, uma abstrao, pois serve como um conjunto de caractersticas e comportamentos. Ela pode ser encarada como um molde, ou seja, um modelo a ser seguido durante o programa, possuidor de atributos e mtodos.

Atributos

Os

atributos

definem

as

propriedades

(estado,

caractersticas) que um objeto pode ter. Geralmente eles funcionam como variveis, que devem ser definidas dentro das classes. Por meio deles so alocados os valores que so manejados no programa. Esses valores podem vir de usurios (em preenchimentos de formulrios via web, por exemplo), de outro sistema, por meio de processamento batch, web services, recuperao de informaes de banco de dados, entre muitos outros. Objeto - Um objeto uma representao abstrata de uma entidade do mundo real. Alm de possuir um identificador nico, o objeto tambm tem propriedades embutidas e a habilidade de interagir com outros objetos e consigo mesmo. As classes so utilizadas para criar objetos; e so elas definem os atributos e o comportamento dos objetos. Mtodos So os responsveis pelo manuseio dos valores definidos nos atributos. Os mtodos (tambm conhecidos como operaes) so os responsveis pelo fluxo da informao sistmica, pela formatao para uma determinada apresentao ou pelo tipo de formatao que possibilita o correto armazenamento de informaes. Os mtodos tambm pertencem a uma determinada classe. Eles ditam o comportamento da aplicao, manipulam os atributos e estabelecem a dinmica dos sistemas de informaes. No decorrer desta aula, veremos informaes mais detalhadas sobre classes e objetos. Nossa prxima aula falar apenas de mtodos e atributos. 2 Conceitos Essenciais Os conceitos que veremos agora tambm so de extrema importncia para o bom entendimento do paradigma orientado a objetos. No decorrer do

curso, nos aprofundaremos ainda mais nesses conceitos e tambm a na forma como eles so implement-los na linguagem Java. Lembre-se que estamos usando a linguagem Java como um meio para atingir o objetivo principal, que compreender o paradigma OO. Os conceitos que veremos a seguir so: abstrao, herana,

polimorfismo e encapsulamento. 2.1 Abstrao Consiste na habilidade do projetista em se concentrar no que essencial para o correto funcionamento do sistema. importante ignorar o que suprfluo! Na figura abaixo, voc pode observar um exemplo de abstrao. O objeto em questo: viagem; traz diferentes abstraes para diferentes pessoas. Para um passageiro, os itens fundamentais so: porto de embarque, hora de sada, nmero do vo. Para a torre de controle, as informaes importantes nesse objeto so: rota a ser definida, trfego na pista de decolagem, pista a ser utilizada, cdigo da aeronave, etc.
FIGURA 1 Exemplo de abstrao: VIAGEM

A abstrao particular de cada um, dependendo do foco e da abrangncia do tratamento a ser a determinado problema.

Outra aplicao importante da abstrao a possibilidade de o projetista prever uma determinada situao e esta poder ocorrer de diferentes maneiras. Assim, o responsvel pelo projeto implementa a parte genrica da soluo corretamente, mas deixa parte dessa soluo (aquilo que especifico de um determinado domnio, ou ainda que pode ser tratado de jeito diferente a depender de cada caso ou situao) para a responsabilidade do desenvolvedor. Assim, o projetista capaz de abstrair a soluo, embora j tenha deixado a arquitetura, a parte genrica da soluo, pronta. J o desenvolvedor, apenas se preocupar com aquilo que ser especfico, pois a responsabilidade por essa parte foi delegada a ele. 2.2 Herana A principal caracterstica da herana permitir a reutilizao de um cdigo. possvel que uma classe herde outra classe. Nesse caso, a herdeira tambm conhecida como subclasse ou classe filha recebe todas as caractersticas (desde que no sejam privadas) da classe base tambm comumente chamada de superclasse, classe antecessora, classe me ou classe pai. Assim, todos os atributos e mtodos no privados contidos na superclasse so acessveis pela classe filha. Ao se implementar uma subclasse, alm de herdar as caractersticas de uma superclasse, voc poder especializar mtodos da classe ancestral, alm de especificar novas operaes e atributos, para refinar, substituir ou estender as funcionalidades da superclasse. Portanto, como uma subclasse estende a superclasse (pois ela possui as caractersticas da classe me, alm de outras particulares criadas para ela mesma), a classe filha sempre maior do que a classe me. Ateno! De acordo com a hierarquia de classes, necessrio saber que h uma superclasse chamada Object. Portanto, qualquer classe implementada em Java, implicitamente, herda as caractersticas dessa classe, pois a classe Object a superclasse de todas as classes

implementadas em Java. Todas as classes implementadas em Java so, portanto, subclasses da Object. 2.3 Polimorfismo Esta a capacidade de um mtodo ter muitas formas. Neste primeiro momento, basta sabermos que em uma determinada classe podem existir dois mtodos com mesmo nome e assinaturas diferentes, o que caracteriza polimorfismo de sobrecarga. Outro caso de polimorfismo o de sobrescrita, que consiste em um mtodo existente na superclasse com um determinado comportamento e o mesmo mtodo, com a mesma assinatura, na subclasse com um comportamento distinto do mtodo da superclasse. Nossa aula 6 tratar o polimorfismo com maiores detalhes. 2.4 Encapsulamento Encapsulamento a tcnica de encapsular, ou seja, esconder os detalhes. Voc dirige um carro, acelera, passa marchas, freia, faz todas as operaes necessrias para guiar o carro da maneira correta. Mas, muito provavelmente, voc no saber de todos os detalhes do funcionamento do carro, a no ser que voc seja mecnico ou ento uma pessoa super curiosa. Do mesmo jeito voc assiste televiso, sabe as funes do controle remoto, mas no precisa saber dos detalhes eletrnicos responsveis pelo funcionamento da sua TV e do seu controle remoto. A idia a mesma quando falamos em POO para sistemas de informao. Voc ver que muitos programadores so usurios clientes de classes anteriormente criadas Isso por outros programadores, conosco, quando projetistas comearmos ou a desenvolvedores. acontecer

programar efetivamente. Voc ver que tambm utilizaremos as classes definidas pela Sun. Ns, programadores usurios, precisaremos apenas saber a finalidade de uma determinada classe ou mtodo, mas no precisamos saber os detalhes de como foram implementados. No ser necessrio verificar o cdigo fonte para conhecer o comportamento dos mtodos, apenas analisarmos se atende ou no nossa necessidade. Ser preciso apenas entender a finalidade da classe ou do mtodo em si.

Nossa aula 5 tratar apenas sobre encapsulamento. Portanto, veremos este assunto com maiores detalhes. 3 Caractersticas Java semelhantes linguagem C Como j foi dito em aulas anteriores, a linguagem Java derivou da linguagem C/C++. Portanto, sua sintaxe bem parecida com a dessas linguagens, inclusive na utilizao de chaves escopos, na utilizao do

{}

para abrir e fechar

main

como nome de mtodo principal, na forma

de fazer os comentrios, na utilizao dos tipos primitivos comuns como

int, char, float, double, long,

entre outras coisas, que veremos

medida em que formos avanando no contedo. 4 Primeiro programa Java 4.1 Programa desenvolvido em Editor de Textos e JDK Vamos comear ento a, efetivamente, rodar programas simples em Java. Assim, poderemos aprender na prtica. Esse primeiro exemplo ser em um editor de texto simples, o bloco de notas. Colocaremos os passos necessrios para os programas Java serem executados via bloco de notas e prompt de comando. importante entendermos bem como funciona a compilao e execuo de classes Java, por isso veremos este exemplo. Depois, faremos o mesmo exemplo utilizando o IDE Eclipse. Para facilitar, todos os outros exemplos tambm sero executados diretamente no IDE eclipse. A primeira coisa a fazer dedicar uma pasta em seu computador para os projetos que sero desenvolvidos. Em meu computador, usei a pasta C:\Projetos\Java, mas voc poder criar o caminho que desejar! Ali sero colocados todos os projetos que utilizaremos nessas aulas, como por exemplo, o nosso primeiro programa: HelloWorld. Em um editor de texto qualquer, utilizei o bloco de notas (mas voc poder usar o que desejar), digite o programa abaixo.

public class HelloWorld { public static void main(String[] args) { System.out.println("Meu primeiro programa Java"); } }

Salve o arquivo acima com o nome HelloWorld.java na pasta designada para o seu projeto. Depois disso, execute o prompt e acesse a pasta em que seu projeto foi salvo, no meu caso cd c:\Projetos\Java\HelloWorld. Ao chegar l, digite a seguinte instruo: javac HelloWorld.java. Repare que as letras maisculas e minsculas fazem diferena, pois, como vimos, Java case-sensitive.

Com o comando javac, a classe HelloWorld foi compilada. Nesse momento o compilador criou o arquivo HelloWorld.class na mesma pasta onde est localizada o arquivo HelloWorld.java. O arquivo HelloWorld.class o arquivo HelloWorld.java em formato binrio. O interpretador da mquina virtual Java vai ler esse arquivo .class e executar os comandos a partir desse arquivo binrio. Para ver o resultado da execuo dessa classe digite: java HelloWorld. Assim, voc ver a frase Meu primeiro programa Java na tela do prompt.

4.2 Programa desenvolvido no Eclipse Agora, desenvolveremos o mesmo programa acima utilizando as facilidades da IDE Eclipse. Ao utilizarmos o Eclipse, devemos primeiramente definir um workspace. Ou seja, um diretrio (uma pasta) raiz para os projetos a serem enxergados pela ferramenta. Para facilitar, podemos usar o diretrio padro indicado pelo prprio eclipse.

Aps a abertura do Eclipse, veremos a tela abaixo.

Para comear, definiremos um projeto. Para isso, basta irmos em File -> New -> Java Project.

Agora colocaremos o nome do projeto. Outros detalhes como, por exemplo, localizao padro, JRE a ser utilizada, podemos deixar os que o Eclipse indicar default.

Depois disso, podemos pressionar o boto Finish e o projeto ficar disponvel para ns no Package Explorer.

Repare que o projeto possui um pacote padro chamado src source; fonte , a partir desse pacote default iniciaremos os nossos pacotes. O Eclipse s trabalha com classes que possui pacote. Para isso, podemos selecionar este pacote src, ir em File -> New -> Package e criar um novo pacote com o nome primeiroprograma.

Agora, finalmente, criaremos a nossa primeira classe no Eclipse. Para isso basta clicarmos com o boto direito do mouse sobre o pacote gerado e selecionarmos New -> Class, conforme a figura abaixo.

Depois disso, basta preenchermos o nome da classe e, neste incio, podemos deixar os outros dados padro.

Aps apertarmos o boto Finish, veremos a classe disponvel para a gente.

Agora sim, podemos colocar o mtodo

main na classe HelloWorld.

Ateno, repare que o Eclipse exige o nome do pacote. Depois que escrevemos o programa, temos que compilar e executar. O

boto Run

compila e executa o programa, na qual conseguimos

verificar o resultado no console do eclipse localizado na parte inferior da janela. O console do Eclipse, em seu computador, dever estar com o fundo branco e letras pretas. Mas, voc pode personaliz-lo de acordo com a sua preferncia. O da figura abaixo, por exemplo, est foi preparado para apresentar a sada do programa com o fundo preto e letras brancas.

Utilizando os exemplos de cdigo acima, podemos aprender alguns conceitos e definies importantes utilizadas na linguagem Java. Agora, vamos analisar com calma cada parte do programa.

Na primeira parte do cdigo vemos:


public class HelloWorld { . . }

A palavra

class,

neste contexto, indica que estamos declarando uma

classe. O nome que escolhemos para esta classe

HelloWorld.

Por

padronizao, ao declararmos uma classe em Java, colocamos a primeira letra em maiscula e as seguintes em minsculas. Caso o nome seja composto, como no caso de

HelloWorld,

a primeira letra da palavra

subseqente tambm comea com maiscula e o restante das letras ficam minsculas (conforme padronizao Sun). J

public

um especificador (modificador de visibilidade). Dizemos que

a classe pblica quando ela pode ser acessada/utilizada normalmente por outra classe. Um arquivo Java deve possuir, obrigatoriamente, uma classe pblica com o mesmo nome do arquivo. Ateno! Um arquivo no pode possuir duas classes pblicas, o mais comum utilizar um arquivo Java para cada classe. Por enquanto, guarde esta parte da especificao do primeiro programa (public

class)

como o incio da declarao de uma

classe. Todas as classes sero declaradas assim por enquanto. As chaves

{} so delimitadoras de escopo. No cdigo, repare que depois da {


para identificar o contedo

declarao da classe existe uma chave aberta

da classe e, na ltima linha, uma chave fechada classe termina ali.

para indicar que aquela

public static void main(String[] args) { System.out.println("Meu primeiro programa Java"); }

Dentro do escopo da classe existe o mtodo

main.

Este o mtodo

principal das classes Java. Esse mtodo indica o incio da aplicao. Ao digitar o comando java HelloWorld, no caso de executar o programa Java da maneira tradicional, ou pressionar o boto Run, quando rodamos um

programa pelo eclipse, a mquina virtual procura o mtodo partir da, comea a execuo do programa. Esse

main

e, a

public,

definido em

main,

um qualificador do mtodo, que indica

que este acessvel externamente prpria classe, ou seja, pode ser enxergado de qualquer lugar da aplicao. Por enquanto, declararemos nossos mtodos como

public. static.
Esta outra palavra reservada,

O mtodo tambm esttico,

que indica que o mtodo deve ser utilizado com um mtodo da classe e no do objeto. Tambm veremos essa atribuio mais frente com mais detalhes. Em princpio, basta saber que este um mtodo de classe e que mtodos de classe podem ser executados sem a necessidade da criao de um objeto. Todo mtodo deve possuir um tipo de retorno, veremos mais detalhes sobre esses retornos nas prximas aulas. Por enquanto, saiba que o tipo de retorno definido para o mtodo retornam nenhum valor. O mtodo

main foi void (vazio). Mtodos void no

main ainda possui um parmetro de nome args, que significa args um array de objetos do tipo String, uma

argumentos. A varivel

classe fundamental para linguagem Java. Basicamente, por meio da classe String podemos escrever e manipular mensagens utilizadas no programa. atravs do parmetro (String

args[]) que o mtodo main

(conseqentemente, todo o programa) recebe argumentos da linha de comando. Veja que esse parmetro um array de Strings, inicializado quando os argumentos so passados por meio da invocao do nome do programa na linha de comando do sistema. Portanto a assinatura desse mtodo recebe como parmetros um array de strings, nesse exemplo, denominado args. Por meio desse array que so passados os parmetros para dentro do programa Java.

Por fim, dentro do mtodo contedo da execuo primeiro momento, vamos

main,

delimitado pelas chaves, temos um que, neste maneira de

System.out.println()
entender como sendo

uma

apresentarmos mensagens no prompt de sada. Ento, quando quisermos apresentar mensagens, basta coloc-las entre aspas dentro dos parnteses. Se no desejar utilizar as aspas, voc tambm poderia colocar a mensagem em um objeto da classe String e, posteriormente, pass-lo como parmetro. Veremos esse tipo de procedimento nas prximas alunas. Abaixo, voc encontrar um vdeo com outro exemplo de programa simples em Java, utilizando apenas os conceitos estudados at agora. VDEO CD - AULA 3 VDEO 1 PRIMEIRO PROGRAMA 2

Resumo da aula
Nesta aula, voc percebeu que preparamos um programa utilizando uma classe pblica, de nome HelloWorld. Alm disso, o mtodo utilizado foi o

main,
tipo

que tambm foi definido como Por fim, utilizamos o

public

e continha um retorno do

void.

System.out.println(), que contm


ou seja, a frase: "Meu primeiro

uma instruo para escrever, na sada padro, a String passada como parmetro para o mtodo

println,

programa Java". Lembre-se: o nome do arquivo fonte deve ser o mesmo nome da definio do

public class com a exteno .java.

Atividade
1. Defina quais so os conceitos essenciais de OO. 2. Qual o seu entendimento sobre os termos os termos Abstrao, Polimorfismo, Herana e Encapsulamento? 3. Qual o seu conceito para Abstrao, Herana, Polimorfismo e Encapsulamento? 4. Aps visualizar o primeiro programa em Java, cite algumas caractersticas do Java que so semelhantes linguagem C.

5. Elabore um programa simples, capaz de exibir o seu nome na tela. 6. Elabore um programa Java capaz de imprimir na tela o seu endereo completo, em mltiplas linhas. 7. Salve o programa abaixo em um arquivo de nome AloMundo.java public class AloMundo { public static void main(String[] args) { System.out.println("Ola Mundo"); } } a. Retire a instruo public da primeira linha e observe a mensagem de erro que aparece ao executar o programa. b. Retire a instruo static da linha de declarao do mtodo e observe a mensagem de erro que aparece ao executar o programa. c. Mude o nome da classe para HelloWorld e observe a mensagem de erro que aparecer ao compilar o programa. d. Troque o nome do mtodo de main para principal e observe a mensagem de erro que aparece ao executar o programa. e. Coloque outras instrues System.out.println a ponto de obter a seguinte formatao de sada: --------------Ola Mundo --------------f. Tente montar a seguinte sada: ------------------| Meu Primeiro | | Programa Java | ------------------A instruo System.out.println indica que a linha ser quebrada ao final da instruo. Se retirarmos o ln do final da instruo - System.out.print , poderemos exibir mensagens sem quebras de linha. g. Utilize essa instruo ao colocar os | na sada acima.

AULA 4 CLASSES E OBJETOS Para um melhor entendimento do paradigma OO, faz-se necessrio o correto aprendizado de alguns conceitos fundamentais, entre eles, os de classes e objetos. Entendendo estes conceitos voc ter um melhor aproveitamento dos recursos de orientao a objetos, pois eles so vitais para qualquer sistema construdo no paradigma OO e esto presentes em todas as linguagens OO. Classes e objetos esto refletidos em projetos de sistemas (onde sero posteriormente implementados) e so os grandes responsveis pela disseminao do uso da OO, bem como pelo crescimento do tamanho e das responsabilidades dos sistemas de informao existentes hoje Ao final desta aula voc ser capaz de compreender conceitos mais especficos sobre as classes, os pacotes, os objetos, as palavras reservadas (new, da API Java.

null, this

final),

alm da classe String e

Abertura
Como j vimos na aula 01, a linguagem Java orientada a objetos, isto , todos os elementos do mundo real so modelados como objetos. Os objetos so criados a partir das classes. Uma classe define a estrutura de um objeto. Uma classe especifica todos os atributos (propriedades) e mtodos (comportamento) que um objeto daquela classe pode ter. Na Figura 2.1, a seguir, tem-se uma classe automvel e trs objetos que foram gerados a partir dessa classe automvel. A classe automvel tem como atributos: cor, ano, modelo. Os mtodos so: desligar, acelerar, e ligar. A Figura 2.2 apresenta o objeto gerado por essa classe, que tem a cor laranja, ano 2007, modelo Punto. Uma classe um prottipo que define os atributos e os mtodos comuns a todos os objetos de um determinado tipo e da prpria classe, com a finalidade de servir como molde para a criao de objetos. Dessa forma, uma classe um template, um modelo para gerar objetos. Em uma classe, os atributos representam o estado do objeto, os mtodos e a sua interao com o mundo externo. Um objeto gerado (instanciado) por meio de uma classe.

Texto base
1 Classes A classe o elemento essencial na programao orientada a objetos. Todos os elementos do mundo real so modelados como objetos, esses objetos so criados a partir das classes. Portanto, a estrutura definida na classe serve como base para a criao de objetos. Uma classe pode ser encarada como um modelo. Em seu livro Introduo Programao Orientada a Objetos usando Java, Rafael Santos, afirma:
Classes so estruturas das linguagens de programao orientadas a objetos para conter, para determinado modelo, os dados que devem ser representados e as operaes que devem ser efetuadas com estes dados. Cada classe deve ter um nome que seja facilmente associvel ao modelo que a classe representa. (SANTOS, 2003, p.14)

Exemplificando uma abstrao do mundo real, vemos que uma classe poderia ser, por exemplo, Pessoa, Automvel, Conta, Livro ou qualquer outra coisa, dependendo do domnio do problema a ser abordado pelo programador. Suponhamos que voc seja contratado para a criao de um sistema de informao em um banco comercial. O banco atender clientes no varejo e far todas as operaes executadas em um banco normal, ter clientes possuidores de conta corrente, conta poupana, conta investimento, poder fazer saques, solicitar emisso de extrato bancrio, realizar pagamentos entre outras operaes bancrias comuns. Na especificao acima, de forma bem simplificada, j podemos identificar algumas classes como, por exemplo: Cliente, ContaCorrente, ContaPoupanca, ContaInvestimento, etc. 1.1 Nome da classe

Utilizaremos o exemplo acima para esclarecer sobre a escolha dos nomes das classes. Como j foi dito anteriormente, a linguagem Java possui um padro proposto pela Sun para nomes de classes e seguido por todos os programadores, a primeira letra do nome da classe deve ser escrita com letra maiscula seguida pelas demais minsculas. Caso o nome seja composto, ento a primeira letra do outro nome tambm dever conter letra maiscula seguida das outras minsculas. importante ressaltar que no se recomenda definir o nome de

identificadores separado por underline ou sublinhado (_), embora isso no seja proibido. Isso apenas uma recomendao de boas prticas de programao, procura-se assim estimular a utilizao de padres, tendo como finalidade a maior clareza e facilidade de entendimento de cdigo. A exceo utilizao de sublinhados est na utilizao de nomes de constantes (falaremos de constantes com detalhes quando estivermos estudando os atributos, na prxima aula). importante saber que o compilador rejeita nomes de classes que possuem acentos e tambm nomes de classes iniciados por nmeros. Os nmeros podem ser usados, desde que precedidos por outros caracteres como, por exemplo, letras, sublinhado ou $. Caracteres especiais como %, #, @ so considerados como identificadores ilegais, logo devem ser evitados sob pena de ter a compilao negada pela mquina virtual. 1.2 Criando uma classe Para definir uma classe, usa-se a seguinte sintaxe: o qualificador de acesso, a declarao class, o nome a classe, as chaves (para a implementao de todos os mtodos e atributos necessrios na criao dos objetos relacionados com essa classe). A sintaxe da declarao de uma classe, ento, :
QualificadorDeAcesso class NomeDaClasse

O qualificador de acesso determina o acesso a essa classe por outras classes (por exemplo: public usado no seu primeiro programa Java). A

palavra class informa que essa declarao refere-se a uma classe e, por fim, o NomeDaClasse. Voltando ao nosso exemplo do banco comercial, podemos dizer que o cliente essencial para o domnio do problema. Qualquer instituio de vendas, seja de produtos ou servios, precisa de clientes. Assim, identificamos a necessidade de uma classe Cliente. Entretanto, analisando o domnio do problema, percebemos tambm a necessidade das classes: ContaCorrente, ContaPoupana e ContaInvestimento, que so os servios oferecidos pelo banco aos seus clientes. Assim, poderamos escrever as classes Cliente, ContaCorrente, ContaPoupanca, ContaInvestimento como se segue:
public class Cliente { //Contedo da classe Cliente }

Como vimos, a classe pblica Cliente dever estar declarada em um arquivo de mesmo nome: Cliente.java.
public class ContaCorrente { //Contedo da classe ContaCorrente }

Classe

pblica

ContaCorrente,

declarada

em

um

arquivo

ContaCorrente.java.
public class ContaPoupanca { //Contedo da classe ContaPoupanca }

Classe ContaPoupanca, declarada em um arquivo ContaPoupanca.java.


public class ContaInvestimento { //Contedo da classe ContaInvestimento }

Classe

ContaInvestimento

declarada

em

um

arquivo

ContaInvestimento.java.

O Java possui uma sintaxe similar ao C. Como voc j pde notar, alm da utilizao das chaves para delimitar blocos de comandos, podemos tambm utilizar duas barras

//

para efetuar comentrios. Alm da utilizao das

duas barras, o comentrio em Java tambm pode ser feito usando barra asterisco
/** Comentrio para documentao */ public class Cliente { /* Um comentrio qualquer na classe Cliente */ }

/* para iniciar e asterisco barra */ para finalizar.

Outra forma importante de comentrio na linguagem Java a barra e dois asteriscos

/**

e para finalizar asterisco barra

*/.

Esse tipo de comentrio

utilizado para documentao da classe. O aplicativo javadoc existente no JDK usa esses comentrios e cria uma documentao para a classe nos moldes da API Java vista mais a frente na seo 3.10. Lembre-se que toda classe que definimos na linguagem Java descende, em ltima instncia, da classe Object. Mesmo que voc no defina uma superclasse assunto que veremos na aula sobre Herana (aula 7) ao declarar a sua classe, por padro, ela descender da classe Object. Na hora de projetar as classes, importante termos em mente como funcionar a hierarquia de classes, pois devemos visar sempre o mnimo acoplamento entre classes e reutilizao de cdigos. 2 Pacotes O crescimento dos sistemas de informao, o aumento da sua complexidade e a abrangncia da sua responsabilidade, gera a necessidade de maior organizao. Assim, faz-se necessrio organizar as classes classific-las em pacotes (packages). Esses pacotes agrupam as classes por assuntos relacionados.

Fisicamente esses pacotes so diretrios ou pastas do sistema operacional que indicam o caminho da localizao de uma determinada classe. Essa organizao facilita o entendimento no momento de se planejar e de se reutilizar as classes. Por padro, os pacotes devem ser definidos com letras minsculas, separados por pontos. Na prtica, cada ponto representa um sub-nvel na hierarquia de pastas do sistema operacional. 3 Objetos Um objeto gerado (instanciado) por meio de uma classe. Portanto, podese dizer que o objeto a instncia da classe. Se a classe o modelo, o objeto a parte fsica, construda na memria do computador e acessvel por meio de uma referncia. Uma classe, por si s (em regra), no capaz de receber valores em seus atributos e nem executar seus mtodos. Isso deve ser feito atravs dos objetos, que so criados por meio da palavra reservada

new.

Por exemplo: se definirmos uma classe Cliente, como visto na seo anterior, ento cada cliente ser um objeto diferente, o cliente Joo ser um objeto, o cliente Pedro ser outro objeto e assim por diante. Acontecer assim tambm com os objetos das classes ContaCorrente, ContaInvestimento e ContaPoupanca, a conta corrente do cliente Joo um objeto, a conta corrente do cliente Pedro outro objeto. Portanto, a classe serve de molde, um modelo, para a criao de vrios objetos. No h limite para nmero de objetos de uma classe, o limite a capacidade de memria da mquina. Segue abaixo, uma representao ilustrativa do funcionamento de um objeto na memria.

8 Palavras reservadas 8.1

new, null, this e final

new new
aquela responsvel por criar efetivamente o

A palavra reservada

objeto na memria. Para criar um objeto, inicialmente, voc deve declarar a varivel do tipo de referncia e depois utilizar a palavra

new

para dizer

mquina virtual que voc quer utilizar as operaes e atributos daquela classe no objeto. Assim, voc usar a referncia declarada anteriormente para manipular o objeto durante o programa. Devemos ter a certeza de que uma referncia sempre aponta para um objeto criado na memria. Caso contrrio, ocorrer erro de execuo, pois a referncia no ter o objeto correspondente para manipular. Vamos observar um programa com a utilizao da palavra reservada criar objetos e referenci-los.

new

para

Analisando o cdigo acima, vemos que a primeira linha indica o pacote na qual a classe est localizada. Depois, a segunda linha diz que estamos importando a classe

Date,

na qual faz parte do pacote

java.util,

para

ser utilizada em nossa classe. Esse um detalhe importante! Anteriormente, vimos que as classes podem ser definidas pelo prprio programador, mas tambm podemos utilizar classes j definidas por outros profissionais ou organizaes (as APIs). Nesse caso, estamos usando uma classe previamente existente, a classe

Date.

Na sua programao, para utilizar uma classe anteriormente

definida (ou API), necessrio utilizar a instruo

import,

seguido do

nome.do.pacote.NomeClasse Assim, voc avisa ao compilador quais so as classes pr-existentes que voc esta utilizando e que sero incorporadas sua prpria classe. Ao final desta aula veremos mais detalhes sobre as APIs. Aps esse procedimento, vem a declarao da classe e do mtodo

main,

que j conhecemos. Entretanto, agora cabem mais alguns detalhes sobre a implementao do mtodo

main. Date,

Veja que, primeiramente, declaramos uma referncia para a classe com o nome

dataAtual. A referncia dataAtual, da maneira como foi null,


ou seja, uma referncia nula, pois

concebida, inicializou valendo

no existe um objeto na memria associado a ela. O objeto criado somente depois, na outra linha, quando tambm associado referncia. Finalizando a anlise do nosso exemplo, vemos que o mtodo encerra com a utilizao do mtodo

main

println

para leitura da referncia

dataAtual. Assim, a data apresentada na tela de sada.


Na figura abaixo, voc poder observar o resultado da execuo do programa acima.

Agora, acompanhe um outro exemplo de programa com entrada de dados. VDEO CD - AULA 4 VDEO 1 IMPORTA CLASSE ENTRADA DE DADOS 8.2

null null
indica que uma referncia no tem um objeto

A palavra reservada

para manipular, ou seja, a referncia aponta para uma rea de memria nula. Dessa forma, no possvel manipular um objeto porque ele simplesmente no existe na memria. Voc, como programador, pode fazer sempre a operao de perguntar referncia se esse objeto existe ou no na memria por meio da estrutura de deciso

if.

Muitas vezes as referncias so criadas em outros mtodos

a depender da dinmica do sistema, assim, para nos resguardarmos de eventuais erros de execuo ou utilizamos o trecho de cdigo

if

referencia == null

if referencia != null,

caso o

objeto no exista na memria, podemos criar um novo objeto do tipo

declarado para a referncia e, assim, passamos a manipular os mtodos, atributos e objeto. Agora,vamos agora acompanhar um programa que utiliza a palavra para um melhor entendimento.

null

Repare que, neste cdigo, fizemos uso da estrutura de deciso verificar se a referncia est diferente de

if

para

null,

ou seja, para verificar se

existe um objeto na memria associada a ela. Nesse caso, como inicializamos a referncia na linha anterior, o resultado da verificao, do jeito que foi projetado, sempre ser verdadeiro e o cdigo descrito no bloco

else

nunca ser executado. Na figura abaixo voc poder observar o

resultado da execuo do programa acima.

Abaixo, voc encontrar uma vdeo-aula com mais um exemplo de programa utilizando os comandos

new e null.

VDEO CD - AULA 4 VDEO 2 NEWNULL 8.3

final final
na declarao de uma classe indica que a classe no

A palavra

poder ser estendida. Estamos restringindo a descendncia de uma classe ao declar-la como final. Assim, podemos dizer que a herana no ocorrer em classes do tipo final, ou seja, ela no ter classes filhas ou subclasses, ficando como ltima implementao daquela linhagem de classes. A palavra

final

tambm pode ser utilizada em atributos e mtodos. Veremos na

prxima aula mais detalhes sobre a incidncia deste conceito. 9 A Classe String A classe String uma classe especial na linguagem Java, que no precisa ser inicializada (no precisa da palavra

new);

apenas a declarao da

referncia j suficiente para sua utilizao. Essa classe permite que possamos colocar um texto dentro de uma referncia, servindo para passarmos mensagens, escrevermos uma seqncia de caracteres, entre outras opes. uma classe essencial para qualquer sistema escrito em Java. Veremos o exemplo de um programa utilizando a classe String.

Observe que, no cdigo acima, a varivel

str

j preenchida com um

contedo de vrias seqncias de caracteres. Para juntar mais de uma

seqncia de caracteres em uma nica varivel do tipo String, utilizamos o mecanismo da concatenao. Consiste em juntar seqncias com o operador +. Assim, juntamos strings variadas ao somarmos umas com as outras. Verifiquemos o exemplo abaixo.
. . String str1 = Joo ; String str2 = Manoel; String str3 = str1 + str2; . .

O contedo da varivel str3 ser: Joo Manoel. Repare tambm que no foi necessrio utilizar a palavra

new.

Essa uma

caracterstica bastante particular da classe String, quando voc quiser utilizar uma string basta declarar a referncia e colocar o contedo. Na hora de apresentar o contedo na tela voc pode passar a referncia da classe String, no caso

str,

como parmetro do mtodo

println,

como o

exemplo acima. Porm, voc tambm pode colocar a prpria seqncia, como feita nos programas anteriores. Veja abaixo o resultado da execuo deste nosso ltimo exemplo.

Em

Java

existem

caracteres

especiais

chamados

de

literais

para

manipulao de Strings. Como visto no programa anterior, podemos

utilizar caracteres

\n

para quebra de linha, entre outros. Abaixo, segue

uma tabela com os literais String.


Literal \b \t \n \f \r \ \ \\ Significado Backspace (retrocesso) Tabulao horizontal tab Quebra de linha Quebra de pgina Retorno de carro Aspas Apstrofo Barra Invertida

A classe String muito rica e permite vrias outras operaes. Por se tratar de um array de caracteres possvel percorrer seu contedo; dado um ndice, por exemplo, pode-se encontrar um determinado caractere. Logo abaixo, voc poder acompanhar outro exemplo de programa em Java, utilizando a classe String, os comandos manipulao de strings. VDEO CD - AULA 4 VDEO 3 STRING 10 API Java Application Programming Interface API o conjunto de classes

println e os literais para a

documentadas disponibilizadas pela Sun (Oracle). Todo desenvolvedor Java usa as APIs Java para saber qual classe, mtodo, rotina, atributo deve ser implementado para suprir uma necessidade especfica. Um exemplo de API que usamos nesta aula foi a classe exemplo de programa desta aula! As APIs esto organizadas por classes, com explicaes sobre a finalidade dessas classes e dos seus mtodos. Assim, quando precisar utilizar uma classe/mtodo para uma resolver determinado problema e no tiver certeza do resultado esperado para aquela classe/mtodo, v at a sua API e verifique. Para verificar as especificaes das APIs Java acesse: http://download-llnw.oracle.com/javase/6/docs/api/. Logo abaixo, voc poder acompanhar dois vdeos que envolvem a utilizao de APIs. No primeiro, voc acompanhar como podem ser

Date,

includa no primeiro

encontradas

as

classes (classes,

utilizadas atributos,

em

Java. No

Nesse

caso

especfico, voc

pesquisaremos e utilizaremos a classe Calendar, com toda a sua documentao etc). segundo vdeo, acompanhar a utilizao desta classe no escopo do programa. VIDEO CD AULA 4 VIDEO 4 - CLASSE CALENDAR PARTE 1 Agora, acompanhe a elaborao do cdigo utilizando a classe Calendar. VIDEO CD AULA 4 VIDEO 5 - CLASSE CALENDAR PARTE 2

Resumo da aula
Nesta aula voc foi capaz de compreender que uma linguagem orientada a objetos trabalha com o conceito de classes (unidade bsica para o funcionamento de um sistema baseado no paradigma OO). Alm disso, voc viu que os atributos so variveis de classes e que por meio deles so alocados valores para serem manejados em sistemas de informaes. Voc tambm verificou os conceitos de abstrao, herana, poliformismo e encapsulamento e conseguiu executar o seu primeiro programa em Java, analisando e compreendendo cada parte do programa. Por fim, voc viu que os pacotes agrupam as classes por assuntos relacionados, que o objeto a instncia da classe e estudou as palavras reservadas

new, null, this

final,
Atividade

alm de alguns exemplos prtico utilizando a Classe String.

1. O que so as classes em linguagem Java? 2. O que so os objetos em linguagem Java? 3. Defina para que servem a palavras new e this. 4. Elabore uma classe com o nome MinhaPrimeiraClasse. 5. Na classe acima crie um atributo de nome data do tipo java.util.Date e inicia-o com o valor null. 6. Utilize o atributo definido acima para imprimir na tela a data atual. No esquea de instanci-lo.

7. Defina uma varivel do tipo String dentro do mtodo main na classe que voc est manipulando. O nome dessa varivel deve ser msgData e o seu valor deve ser Data atual: . 8. Concatene a varivel que voc acabou de criar com o objeto data criado anteriormente para observar a data atual impressa na tela. 9. Escreva uma classe que leia dois nmeros de ponto flutuante digitados pelo usurio e depois imprima a mdia. Veja, logo abaixo, um vdeo com este exerccio resolvido! (VDEO CD Aula 04 video 6 - exerccio resolvido 09 valores def) 10.A partir do exemplo demonstrado no vdeo do item 9 desta aula, sobre a classe string, elabore um programa que retorne o mesmo clculo, porm, declarando uma String capaz de imprimir o seu contedo. Veja, logo abaixo, um vdeo com este exerccio resolvido! (VDEO CD Aula 04 - video 7 - exerccio resolvido 10 - string) 11. Crie uma classe com o nome Somar. Crie duas variveis com os nomes valor1 e valor2 do tipo inteiro e faa-as receber os valores 5 e 3 respectivamente. Depois, imprima o resultado da soma na tela. 12. Crie uma classe com o nome Subtrair. Crie duas variveis com os nomes valor1 e valor2 do tipo inteiro e faa-as receber os valores 23 e 9 respectivamente. Depois, imprima o resultado da subtrao na tela. 13. Crie uma classe com o nome Multiplicar. Crie trs variveis com os nomes valor1, valor2 e valor3 do tipo float e faa-as receber os valores 3, 5 e 6 respectivamente. Depois, imprima o resultado da multiplicao na tela. 14. Crie uma classe como nome Dividir. Crie duas variveis com os nomes valor1 e valor2 do tipo float e faa-as receber os valores 4500 e 50 respectivamente. Depois, imprima o resultado da diviso na tela. 15. Utilize o vdeo XXX como exemplo e substitua os valores fixos nos exerccios 9 a 12 por valores escolhidos livremente pelos usurios.

AULA 6 - Encapsulamento O conceito de encapsulamento no se restringe ao uso do paradigma orientado a objetos, est presente na vida cotidiana de todos. Em exemplos anteriores utilizamos o carro que dirigimos sem saber dos detalhes mecnicos que o fazem funcionar e do controle remoto da TV que obedece aos nossos comandos, atende aos nossos propsitos e no precisamos aprender como eles funcionam internamente. assim com vrias outras coisas do nosso dia a dia, no precisamos saber dos detalhes de funcionamento dos telefones celulares, das instalaes eltricas de nossas residncias ou dos sistemas internos de um computador quando queremos apenas utilizar um editor de texto ou a internet. Podemos usar tudo isso sem nos preocupar como foram feitos, bastando apenas utilizar as funes disponveis para a gente enquanto pessoas comuns. Ao final desta aula voc ser capaz de compreender o sentido de encapsulamento no mbito da Programao Orientada a Objetos, compreendendo o encapsulamento na reutilizao de classese a importncia das APIs nesses procedimento. Ao final da aula voc encontrar um exemplo de programa que utiliza o encapsulamento.

Abertura
A tcnica de esconder das pessoas, os detalhes sobre o funcionamento das coisas, em geral, bastante til. Imagine o trabalho que seria para os cidados comuns, terem que saber sobre o completo funcionamento de todos os objetos utilizados diariamente, quanto tempo desperdiaramos! E o pior, quanta coisa errada poderamos fazer! Alm disso, o fator psicolgico que age sobre o ser humano implica na dificuldade de utilizao de certos objetos. Quanto mais difcil for usar um objeto qualquer, menos utilizvel ser aquele objeto para a maioria das pessoas. Logo, quanto mais fcil e padronizada a forma de utilizao, mais as pessoas sero propensas a usar tal objeto ou funcionalidade.

O sucesso de um determinado mecanismo usado constantemente consiste, entre outras coisas, na facilidade de operao. Um exemplo disso so os prprios sistemas operacionais dos computadores atuais. Os mais antigos devem se lembrar o quanto era custoso mexer no computador quando o sistema operacional mais utilizado era o MS-DOS. Era tedioso, tnhamos que decorar vrios comandos, a tela era pouco amigvel e era muito penoso quando queramos fazer um trabalho que hoje considerado simples. Hoje, o Windows encapsula vrias tarefas trabalhosas do MS-DOS, com um simples clique! No precisamos nos preocupar como foi implementada tal funcionalidade. O prprio Linux s se tornou mais difundido entre os usurios de computadores comuns depois que adicionou um GUI (Graphic User Interface) amigvel para a maioria das pessoas. Os mais nostlgicos gostam dos comandos e das tarefas feitas via console, mas a maioria das pessoas prefere interfaces grficas mais fceis de usar, sem preocupar de como foram feitas ou concebidas. Obviamente, algumas pessoas gostam de mexer e saber dos detalhes de funcionamento dos mecanismos, vemos crianas que abrem os brinquedos para saberem de onde vem o barulho ou a luz que eles emitem, pessoas que gostam de abrir aparelhos mais sofisticados e observarem o funcionamento, ou programadores que abrem cdigos de programas j escritos com o intuito de aprender, inserir ou consertar alguma funcionalidade, mas, certamente esse no o comportamento da maioria das pessoas!

MS DOS 1.25 for Commodore B Series Computer with 8088 co-processor.

Fonte: http://www.vintagecomputer.net/PACS.cfm

Texto base
Encapsulamento Ao definirmos padres de uso, interfaces amigveis de entrada e sada, abstrao dos detalhes, para que a maioria das pessoas utilize as facilidades dos produtos e permaneam preocupadas apenas com os resultados esperados, no precisando nos aprofundar no detalhamento responsvel pelo funcionamento de cada servio. Assim, estamos utilizando o encapsulamento, em prol da facilidade de operacionalizao e conseqentemente da disseminao dos objetos e produtos na qual estamos trabalhando. 1 Encapsulamento na POO Encapsular, no mbito da Programao Orientada a Objetos, significa ocultar os detalhes de implementao, deixando poucas interfaces de entrada, apenas as extremamente necessrias, para os usurios de uma determinada funcionalidade. Ao criarmos uma classe temos que pensar em seu funcionamento. Temos que observar se essa classe a ser escrita realmente atender seu propsito, e mais, temos de nos preocupar em escrever a classe o mais enxuta possvel, obviamente, atendendo finalidade proposta e imaginando como a tornar reutilizvel. Classes genricas so aquelas que atingem ao seu propsito, sendo utilizada nas mais diversas situaes. Esse um dos grandes benefcios da programao orientada a objetos. Como fica o encapsulamento na reutilizao de classes? Simples, ao criarmos uma classe sem nos preocupar com o

encapsulamento, deixando uma classe de fora acessar diretamente seus atributos, uma pequena manuteno que fizermos na classe poder ter grandes impactos nos sistemas que a utilizam. Isso bem prejudicial para todos; tanto para o responsvel pela manuteno, que precisa daquela

classe funcionando de outra maneira, como para os clientes que j a utiliza de uma determinada forma que, agora, necessitaria ser modificada. Se, em vez disso, o programador inicial tivesse planejado uma forma de acessar mais eficiente, de forma encapsulada, ele poderia fazer a manuteno na classe de modo a no interferir no seu funcionamento e ainda atender a eventuais novos propsitos demandados pela manuteno. Encapsulamento na API Ao utilizar uma classe, o programador no necessita saber como ela foi projetada, para saber se ela atende ou no a sua necessidade. Tambm no necessrio saber quais foram os mecanismos utilizados pelo desenvolvedor dessa classe. Basta entender a finalidade da classe e, claro, do mtodo a ser utilizado. Essas informaes prprio programador consegue via API http://download-llnw.oracle.com/javase/6/docs/api/ conceito visto na nossa aula 3 onde esto expostas todas as documentaes das classes, com seus respectivos mtodos, atributos, formas de entrada de informao e resultados a se esperar. J vimos que a utilizao da API de suma importncia para os programadores, principalmente os iniciantes. Ela uma conveniente fonte de informaes, pois possui conhecimentos essenciais a qualquer desenvolvedor. fundamental ressaltar que todos os grandes fornecedores, quando disponibilizam pacotes com classes, publicam APIs sobre suas classes. Veja, logo abaixo, um exemplo da API da classe String. Todas as imagens esto disponveis em http://download.oracle.com/javase/7/docs/api/.

Fonte: http://download.oracle.com/javase/7/docs/api/.

Tendo a classe String como exemplo, vamos reparar como funciona a API. Repare na parte esquerda da tela. Nela, vemos todos os pacotes (na parte de cima) e as classes (na parte de baixo). Ao selecionarmos uma classe, vemos no frame principal a hierarquia e a definio da classe. Na figura abaixo, podemos ver uma breve explicao sobre a classe e, logo abaixo, a definio dos campos.

Fonte: http://download.oracle.com/javase/7/docs/api/.

A parte mais importante para o nosso assunto vem agora. Podemos ver na prxima figura uma importante descrio sobre os mtodos pertencentes

classe

String.

Primeiramente

podemos

observar

quantidade

de

informaes sobre os mtodos construtores. Veja que, baseado no conceito de encapsulamento, temos a explicao dos mtodos, o que eles fazem e quais os propsitos, mas, no precisamos saber como esses mtodos foram implementados.

Fonte: http://download.oracle.com/javase/7/docs/api/.

Um detalhe a ser observado sobre os mtodos acima o fato de alguns possurem, como primeira informao, no espao reservado explicao, a palavra Deprecated. Isso significa que o mtodo em questo est depreciado e no deve mais ser utilizado, ele fica neste estado para manter a compatibilidade com as verses anteriores e no ocorrer problemas com os sistemas j existentes que utilizam esses mtodos. Continuando nossa anlise sobre o encapsulamento, observemos os outros mtodos da classe String.

Fonte: http://download.oracle.com/javase/7/docs/api/.

Veja que, na API, esto as descries e objetivos dos mtodos da classe String e voc, enquanto programador, no precisa ver o cdigo dos mtodos para saber seu objetivo e conseqentemente o resultado a ser alcanado com sua utilizao. 2 Programando com encapsulamento Voc deve ter percebido que j utilizamos encapsulamento nos programas que fizemos nas aulas anteriores. Essa questo no foi levantada antes pois nosso enfoque era outro!

Agora, vamos analisar no programa sugerido abaixo, como podemos identificar o encapsulamento. Primeiramente, vamos definir uma classe Calculadora; repare que nela constaro apenas quatro mtodos, atendendo rigorosamente o propsito da classe. Seus mtodos simularo uma calculadora simples com as quatro operaes bsicas de soma, subtrao, multiplicao e diviso. Cada um dos mtodos receber dois parmetros do tipo

double

e retornaro um valor como resultado da execuo da

operao. Acompanhe:

Nas prximas imagens voc ir conferir a implementao da classe Principal. Essa classe a responsvel pela efetivao das operaes. Por meio dela, somos capazes de decidir qual operao iremos executar.

Primeiramente, vimos no mtodo tipo

main

a declarao de trs variveis do

double

e uma do tipo

String;

trs delas duas do tipo

double

a do tipo

String

so preenchidas com valores digitados pelo usurio.

Para fazer isso, pedimos ajuda classe Scanner, que serve, entre outras coisas, para ler dados vindos dos usurios. Depois foram feitas verificaes simples para conferir se os valores foram preenchidos de forma vlida. Para isso, os mtodos validaNumero(double, String) e validaOperador(String) foram confeccionados. Neste segundo mtodo pedimos ajuda a classe HashSet, que implementa a interface Set, para podermos validar o operador com segurana. Estes assuntos sero

vistos no decorrer do curso, mais especificamente quando falarmos de interfaces e colees. Na seqncia chamado um mtodo que, baseado no operador passado como parmetro, determina a operao a ser chamada por meio do objeto da classe Calculadora. Esse o ponto do encapsulamento que devemos nos atentar. Quando utilizamos a classe Calculadora no nossa obrigao saber como foram implementados os mtodos soma, subtrao, multiplicao e diviso, bastar sabermos que eles fazem a operao, e do o resultado esperado. Se, por acaso, resolvermos mudar a implementao desses mtodos em Calculadora, muito provavelmente no necessitaremos fazer manutenes na classe Principal. Para a execuo da classe Principal devemos pressionar o boto Run do eclipse e preencher as variveis dois nmeros e o sinal indicador da operao medida que o programa vai pedindo. Segue a tela de resultado para conferncia.

A seguir, veja mais um exemplo de encapsulamento. VDEO CD - Aula 06 - video 1 - encapsulamento Resumo da aula

Nesta aula voc foi capaz de compreender como funciona o encapsulamento no mbito da programao orientada a objetos. Voc percebeu que encapsular significa ocultar os detalhes de implementao, deixando poucas interfaces de entrada, apenas as extremamente necessrias, para os usurios de uma determinada funcionalidade. Desta forma, planejado um acesso encapsulado, pode-se efetuar a manuteno na classe, de modo a no interferir no seu funcionamento e ainda atender a eventuais novos propsitos demandados pela manuteno. Por fim, voc percebeu que, na API, esto as descries e objetivos dos mtodos das classes que possibilitam o encapsulamento.

Atividade
1. Defina o que encapsulamento. 2. Crie uma classe em Java que contenha os atributos nome e idade com modificadores de acesso private, crie mtodos de acesso com modificadores public, depois, crie um mtodo main que mostre os valores que esto nos atributos. Lembre-se que o mtodo main esttico, assim os mtodos s sero acessveis se tambm forem estticos ou se um objeto dessa classe for criado no mtodo main. 3. Desenvolva uma classe que possua um mtodo que incremente um valor de um atributo private inteiro e outro mtodo que decremente o valor do mesmo atributo, depois faa outra classe que chame e execute a primeira classe pelo mtodo main. 4. Crie uma classe com dois atributos private, que devero ser preenchidos por meio dos mtodos de acesso pblicos com os argumentos passados no momento da execuo da classe e, depois, crie um mtodo tambm pblico responsvel por trocar os valores dos atributos. Depois, crie uma classe principal com o mtodo main para chamar os mtodos da primeira classe. 5. Crie uma classe que calcule a bonificao de final de ano sobre o salrio bruto de um funcionrio de acordo com sua funo na empresa segundo a tabela abaixo: a. Funcionrio nvel mdio: 20% b. Funcionrio nvel superior: 35 %

c. Gerente: 50% d. Diretor: 70% Crie mtodos para encapsular de forma que o clculo da bonificao, assim como o preenchimento dos demais atributos sejam transparentes para o usurio da classe. Veja, logo abaixo, um vdeo com este exerccio resolvido! VDEO CD Aula 06 - video 2 - exercicio resolvido - bonificacao 6. Crie uma classe com um mtodo que calcule o valor recebido depois da incidncia de 15% de imposto sobre o valor bruto. O valor bruto dever ser passado no momento da execuo por meio de outra classe que possui o mtodo main. 7. Defina uma classe de nome CalcularQuadrado com um mtodo que receba um valor como parmetro e retorne o quadrado desse nmero. Depois, outra classe dever chamar, por meio do mtodo main, um objeto da classe CalcularQuadrado e apresentar o resultado da execuo do mtodo na tela. 8. Crie uma classe semelhante classe CalcularQuadrado, mas com a diferena de calcular qualquer potncia. Essa classe dever possuir dois atributos na qual um significa um nmero inteiro qualquer e o segundo a potncia. Ex: caso passemos como argumentos os nmeros 2 e 3, o nmero 2 deve ser elevado a terceira potncia (23), obtendo como resultado o nmero 8. Essa operao dever ser chamada de outra classe principal possuidora do mtodo main. Dica: Para resolver este exerccio utilize o mtodo pow da classe java.lang.Math. Veja o funcionamento do mtodo na api Java http://download.oracle.com/javase/6/docs/api/java/lang/Math.html# pow(double,%20double). 9. Crie uma classe que possua um mtodo responsvel por calcular o salrio lquido de um funcionrio. Para calcular o salrio lquido necessrio descontar 15% caso o salrio seja entre R$ 1501,00 e R$ 2500,00, 22% caso o salrio seja entre R$ 2501,00 e R$ 3500,00 e 27,5% caso o salrio seja mais de R$ 3500,00. O valor bruto deve ser passado como parmetro para a funo. Os valores referentes aos salrios bruto e lquido devero ser armazenados em atributos privados, e devero ser exibidos na tela por meio de mtodos de

acesso pblicos. Esses valores devero ser chamados por meio de outra classe com o mtodo main. 10. Para caracterizar bem o encapsulamento, modifique o mtodo responsvel por calcular o salrio liquido da classe acima para acrescentar os seguintes descontos: a. Quando a alquota a ser cobrada for de 15%, aplicar desconto de R$ 120,00 no valor cobrado do imposto. b. Quando a alquota a ser cobrada for de 22%, aplicar desconto de R$ 280,00 no valor cobrado do imposto. c. Quando a alquota a ser cobrada for de 27,5%, aplicar desconto de R$ 550,00 no valor cobrado do imposto. Repare que sua classe responsvel por calcular o valor do imposto foi modificada, mas as classes clientes aquelas que fazem chamadas a mtodos dessa classe no sofreram impactos.

AULA 7 - HERANA E POLIMORFISMO Os conceitos de herana e polimorfismo so essenciais para o

desenvolvimento de cdigos mais robustos. Com eles podemos re(utilizar) cdigos j definidos em outras classes superiores, economizando tempo e recursos computacionais. Ao final desta aula voc ser capaz de compreender a aplicar os conceitos relacionados a herana e polimorfismo, observando o uso da palavra

extends.

Voc tambm acompanhar a utilizao de

polimorfismos de sobrescrita, de sobrecarga e outros tipos de encapsulamento e polimorfismo; alm dos conceitos de assinatura do mtodo.

Abertura
VIDEO CD AULA 7 VDEO 1 - HERANA

Texto base
1 Herana Ocorre quando uma classe herda as caractersticas de outra classe. Como visto anteriormente, sabemos que, em ltima instncia, toda classe em Java herda caractersticas da superclasse Object. Mas, podemos explicitamente, ao projetar nossa classe, faz-la herdar caractersticas de outra qualquer. Isso possvel desde que a classe genrica, aquela na qual iremos herdar as caractersticas, no tenha sido declarada como

final.

Quando herdamos uma classe estamos criando um relacionamento de especializao, ou seja, estamos estendendo essa classe. Pense nesse conceito da seguinte forma: uma classe j existente e uma outra classe que, ao ser construda, ir especializar a primeira, pois ir estender sua utilizao. Essa nova classe ser mais especfica e possuir novas funcionalidades, por isso ela ser mais restrita, seu campo de atuao ser

mais especfico, mais especializado, pois est estendendo as funcionalidades de sua antecessora. O mecanismo da herana caracterizado pela pergunta: um...? Por exemplo: em uma hierarquia de classes onde a superclasse Animal e a subclasse um Cachorro, podemos perguntar: Cachorro um Animal? Se a resposta positiva ento cabe a herana. Se a pergunta fosse: Carro um Animal? Essa pergunta no faz sentido, logo, a subclasse carro no pode descender de uma superclasse Animal. Dessa forma, atestamos que Carro um Automvel e no um Animal. medida que formos subindo a hierarquia, no chegaremos a uma classe comum entre Carro e Cachorro. Da mesma forma, na linguagem Java no existe herana mltipla. Um Carro um Automvel, no um Animal e um Automvel ao mesmo tempo. Embora possamos simular essa situao com a utilizao de interfaces assunto que veremos na prxima aula isso no significa dizer que em Java teremos herana mltipla se utilizarmos interfaces. So propsitos diferentes. A herana um mecanismo muito til e bastante utilizado na programao orientada a objetos. Por meio dela conseguimos reutilizar muitos cdigos j definidos em classes superiores, com isso ganhamos tempo, economizamos recursos e conseguimos mais robustez no nosso cdigo. Um cdigo-fonte j utilizado significa, em tese, que j foi testado e seu funcionamento atinge o propsito para o qual foi projetado. Alm disso, o cdigo fica concentrado em um s lugar, ou seja, caso precise sofrer alguma manuteno, podemos ir direto nele e reestruturar apenas essa parte. No necessrio percorrer toda a aplicao para localizar os trechos que trabalham em discrepncia com o que desejado e nem mudar a implementao em vrios lugares. No existe limite no nmero de extenses em uma hierarquia de classes. Assim, podemos estender classes o quanto quisermos e o quanto for til para a aplicao. Mas, devemos nos atentar sempre para o entendimento. Se algo que fizermos comear a ficar complicado demais para ns ou para outros programadores, o melhor a fazer reestruturar ou, melhor dizendo, efetuar um refactor.

Para entender melhor como funciona o mecanismo da herana, suponha que voc tenha sido contratado para informatizar uma empresa, desde o sistema de pessoal RH at seu sistema fim, que pode, por exemplo, servio de vendas de algum produto. Observando as particularidades do domnio do problema, podemos nos concentrar em provveis classes, como a Funcionrio, quando tratarmos do mdulo de RH e a Cliente quando o enfoque for o mdulo de vendas dos produtos. Teoricamente, o funcionrio no tem nada a ver com cliente, um trabalha dentro da empresa, tem salrio, frias, controle de ponto, entre outras particularidades, prprias de funcionrios. O cliente, por sua vez, compra, paga, exige nota fiscal, ou seja, tem atribuies diferentes. No entanto, ao analisarmos de modo mais profundo perceberemos que os dois podem possuir caractersticas comuns! Vamos l: os dois possuem nome, data de nascimento, endereo, telefone, nmero de CPF, carteira de identidade, entre outras informaes compartilhadas. Portanto, seria muito ruim, do ponto de vista do desenvolvimento, que o sistema possusse dois lugares distintos para armazenar informaes semelhantes, poderamos ter duplicao de dados, uma vez que um funcionrio tambm poderia ser um cliente, alm de vrias outras desvantagens, como o overhead, por exemplo. Para resolver o problema exposto, podemos utilizar o mecanismo de herana, disponvel na programao orientada a objetos. Primeiramente colocaramos as informaes comuns entre funcionrio e cliente em uma classe de nome Pessoa. Depois, especializaramos essa classe com as informaes particulares dos tipos mais especficos Funcionario e Cliente. Assim, trataramos da classe genrica, Pessoa, com todas as caractersticas atributos e mtodos comuns de qualquer pessoa, manipularamos a classe Funcionario com todas as suas particularidades e depois cuidaramos da classe Cliente com as informaes restritas ao mbito de atuao de um cliente. Para fazer uma herana em Java basta usar a palavra reservada
class Animal {

extends, como no exemplo abaixo.

... } class Cachorro extends Animal { ... }

Depois de toda essa nossa discusso terica, vamos agora ver, no cdigo Java, como ficaria a implementao dessa hierarquia de classes definidas anteriormente: Pessoa, Funcionario e Cliente. Segue, primeiramente a definio da classe Pessoa, que possui apenas dois atributos e seus respectivos mtodos de acesso get e set.

Agora a classe Funcionario, que tambm possui apenas dois atributos e seus respectivos mtodos de acesso get e set. Observe o uso da palavra

extends para indicar a que Funcionario herda de Pessoa.

Nesse momento, observemos a classe Cliente, que tambm herda de Pessoa, mas diferentemente das outras possui quatro atributos.

Agora, voc pode verificar a classe Compra, responsvel por fazer as chamadas s outras classes e a conseqente dinmica dos acontecimentos.

interessante

observamos

algumas

particularidades

dessa

classe.

Primeiramente, ns tivemos que criar um objeto de compra no mtodo

main

Isso acontece porque o

main

um mtodo esttico, ou seja,

executa mesmo sem o objeto da classe existir. Entretanto, os outros mtodos no so estticos, logo, o

main

no pode chamar diretamente

esses mtodos, pelo fato de eles s poderem ser executados se for por meio de uma referncia a um objeto da classe Compra. Repare que, depois, fizemos os mtodos responsveis pelo preenchimento das informaes nos objetos das classes Funcionario e Cliente. Outra novidade o uso da classe Calendar no mtodo

getDate().

Essa classe

bem mais completa para a manipulao de datas do que a prpria classe Date, por isso, ela foi utilizada para fixar a data de incio das frias do funcionrio. Pronto, agora podemos pressionar o boto Run do eclipse e ver o resultado da execuo do programa. Segue a tela de resultado.

Logo abaixo, voc encontrar outro exemplo de programa que utiliza os conceitos de herana. Acompanhe com ateno o desenvolvimento deste cdigo. VIDEO CD - Aula 07 - video 2 - heranca

2 Polimorfismo Na nossa aula 3 vimos em uma pequena definio de polimorfismo que consiste na capacidade do mtodo possuir vaiadas formas. Um mtodo polimrfico quando o seu comportamento varia de acordo com uma determinada situao. Neste momento vamos nos em concentrar mtodos. nos tipos caso, mais usuais ver de o

polimorfismo (override),

utilizados

Nesse Na

podemos

polimorfismo de sobrecarga (overload) e o polimorfismo de sobrescrita ou apenas polimorfismo. linguagem Object Pascal necessrio que voc, enquanto programador, especifique para o compilador quando est usando polimorfismo de sobrecarga e de sobrescrita, j na linguagem Java no necessria qualquer especificao em relao a isso. Antes de definirmos os tipos citados de polimorfismo vamos fixar um conceito simples, que a assinatura do mtodo. Podemos dizer que assinatura aquilo que identifica o mtodo. No podero existir dois mtodos iguais, de mesma assinatura, em uma mesma classe. A assinatura do mtodo consiste no nome do referido mtodo e dos seus parmetros, mais precisamente, na ordem dos tipos dos parmetros definidos no mtodo. Um ponto importante a ser lembrado que o tipo de retorno do mtodo no faz parte da assinatura, logo, se voc mudar apenas o tipo de retorno em mtodos com a mesma assinatura, o mtodo ser considerado igual pelo compilador Java.

Assinatura do mtodo: nomeMetodo (lista_de_parametros);

2.1 Polimorfismo de Sobrescrita A sobrescrita de mtodos consiste em reescrever, na subclasse, um mtodo existente em uma superclasse. Deve-se manter a mesma assinatura do mtodo da classe pai para que haja a sobrescrita. Nesse caso, o mtodo foi

reescrito ou sobrescrito na classe filha e, quando esta for acionada, o mtodo a ser invocado ser esse novo mtodo reescrito. Se a instncia for a da superclasse, o comportamento a ser executado ser, obviamente, o da classe pai. Um ponto importante a ser levado em considerao que o modificador de acesso de um mtodo definido na superclasse no poder sofrer reduo de acessibilidade, assim, se um mtodo criado na superclasse for definido como pblico, no poder ser redefinido na subclasse como protegido ou privado. 2.2 Polimorfismo de sobrecarga Polimorfismo de sobrecarga consiste em existir, na classe, mais de um mtodo com o mesmo nome, mas com assinaturas diferentes. importante ressaltar que apenas os tipos so levados em considerao na lista de parmetros para a assinatura, assim, os nomes dos parmetros so ignorados na assinatura do mtodo. Por exemplo: suponhamos que ao definir uma classe voc tenha mtodos como os definidos no exemplo abaixo.
somar(); somar(int x); somar(double y); somar(double x, double y); somar(int x, double y); somar(int x, int y); somar(double x, int y);

Repare que, embora os mtodos possuam o mesmo nome, suas assinaturas so diferentes, pois os tipos dos parmetros esto em disposies diferentes em todos os mtodos especificados acima. Independente dos nomes dos parmetros, o que realmente importa nesse caso a ordem em que esto dispostos os tipos dos parmetros. 2.3 Outros tipos de encapsulamento e polimorfismo

Um outro tipo de encapsulamento o chamado Universal de Incluso, o qual permite que o programador declare um objeto do tipo superclasse e instancie uma subclasse. Assim, a referncia do tipo genrico e o objeto na memria do tipo especfico. Se levarmos em considerao o nosso exemplo inicial desta aula, sobre as classes Cachorro e Animal, teremos:
class Animal { ... } class Cachorro extends Animal { ... } Animal cachorro = new Cachorro();

Outra forma de polimorfismo considerado por alguns autores o Ad-Hoc de coero, bem simples. Ocorre quando a linguagem faz converses implicitamente, como atribuir um valor inteiro a uma varivel float, por exemplo.
int a = 10; float b = a;

Existem ainda alguns outros tipos de polimorfismo que veremos no momento oportuno, so eles: o polimorfismo paramtrico que veremos quando chegarmos em colees de objetos e tambm o polimorfismo em tipos abstratos que observaremos no captulo referente a interfaces e classes abstratas. Agora, vamos verificar os cdigos referentes ao polimorfismo. No nosso caso vamos utilizar a classe Animal, Gato, Cachorro e UsoPolimorfismo para podermos observar a utilizao desse mecanismo. A primeira classe que vamos desenvolver a classe Animal, que possui um nico mtodo denominado alimentar.

Agora, vamos observar a classe Cachorro com uma implementao simples, caracterizando a sobrescrita.

A seguir, verificaremos a classe Gato com dois mtodos alimentar. Um com a mesma assinatura da superclasse e outro com um parmetro do tipo

Boolean para caracterizar a sobrecarga.

Um detalhe a ser observado, tanto na classe Gato como na classe Cachorro, a utilizao da instruo

super. Isso significa que a classe herdeira

pode

pedir superclasse que execute o mtodo definido na superclasse para depois continuar a execuo do seu mtodo. Se no desejarmos que essa execuo ocorra, basta no colocarmos a instruo

super.

Vamos, agora observar a classe UsoPolimorfismo.

A classe UsoPolimorfismo possui o mtodo

main
Ao

para a execuo do

programa. Repare que declaramos as referncias com o tipo Animal e as instanciamos com suas respectivas classes. chamar o mtodo alimentar, os mtodos correspondentes nas classes foram executados. O ponto importante a ser comentado o fato da chamada aos mtodos

alimentar(Boolean).

Esses mtodos no puderam ser chamados

diretamente pela referncia gato porque eles no foram definidos na classe Animal e a referncia declarada foi da classe Animal. Essa referncia no enxerga o mtodo definido na classe Gato, a no ser que faamos um cast para a classe Gato. O cast pode ser entendido como uma adequao para a referncia se comportar da forma do objeto que est instanciado na memria. Com o uso desse mecanismo estamos dizendo ao interpretador que embora a referncia seja da superclasse o objeto na qual ela aponta de um tipo mais especializado e assim podemos utilizar o cast para que a mquina

virtual possa executar as operaes desse objeto mais especializado j existente na memria. Veja abaixo a tela de resultado de execuo desse programa.

A seguir, voc encontrar um vdeo com outro exemplo de polimorfismo. Acompanhe atentamente o desenvolvimento do cdigo e a execuo do programa. VIDEO CD - Aula 07 - video 3 - polimorfismo

Resumo da aula
Nesta aula, voc foi capaz de compreender conceitos de herana e polimorfismo. Herana ocorre quando uma classe herda as caractersticas de outra classe; nesse caso, estamos criando um relacionamento de especializao, estamos estendendo uma classe. O polimorfismo consiste na capacidade do mtodo possuir vaiadas formas. Podemos ver o polimorfismo de sobrecarga (overload) e o polimorfismo de sobrescrita (override). Outro conceito importante visto foi o de assinatura do mtodo. Agora chegou a sua vez de praticar esses conceitos!

Atividade
1. A partir da leitura dessa aula, defina qual o seu conceito de herana? 2. Defina qual o conceito de polimorfismo de sobrecarga? 3. O que polimorfismo de sobrescrita? 4. Defina uma hierarquia de classes que definam as classes Veiculo, Carro e Caminho, na qual existam os mtodos ligarMotor(), ligarMotor(Boolean ligar) e desligarMotor(). Esses mtodos devem ser

definidos na classe Veculo e sobrescritos nas subclasses com exceo do mtodo ligarMotor(Boolean ligar), que deve ter implementao apenas em Veculo. Veja, logo abaixo, um vdeo com este exerccio resolvido! VIDEO CD - Aula 07 - video 4 - exercicio resolvido - veculo 5. Crie duas classes com os nomes A e B. Crie os atributos x e y private do tipo inteiro na classe A. Crie mtodos de acesso a esses atributos com modificadores protected. Faa a classe B herdar de A. Crie os mtodos acessar e obter com modificadores pblicos na classe B, cujas implementaes devem conter a chamada aos mtodos de acesso definidos na classe A. Assim, setX(int) e setY(int) deve estar no contedo do mtodo acessar(int) e getX() e getY() deve estar no contedo de obter(). Faa uma terceira classe que contenha o mtodo main, instancie um objeto da classe B, chame o mtodo acessar, depois imprima o resultado obtido pela execuo do mtodo obter. 6. Crie a classe Pessoa com os atributos nome do tipo String e idade do tipo inteiro, ambos com modificadores pblicos. Crie mtodos de acesso (get e set) pblicos para esses atributos. Crie uma classe Funcionrio que herde de Pessoa. Inclua o atributo salrio do tipo double e modificador private com seus respectivos mtodos de acesso pblicos. Crie um atributo privado do tipo String com o nome cargo e mtodos de acesso pblicos para esse atributo. Crie uma terceira classe e no mtodo main instancie um objeto da classe Funcionrio e preencha os atributos nome, idade, cargo e salrio por meio dos mtodos de acesso set. Depois imprima o valor dos atributos na tela chamando os mtodos get. 7. Crie uma classe Gerente faa-a herdar de Funcionrio. Reescreva o mtodo setSalario(double) na classe Gerente para o atributo salario receber o valor que vem do parmetro acrescido de 25%. Depois, na classe que instancia um objeto da classe Funcionrio, instancie um objeto da classe Gerente para preencher e posteriormente mostrar os valores recuperados na tela. Repare que o mtodo setSalario funciona de forma diferente nas duas classes, embora tenham o mesmo nome e esto localizados na mesma hierarquia.

8. Utilize os mesmos moldes do exerccio anterior e crie a classe Diretor herdando de Gerente. Reescreva o mtodo setSalario(double) para o valor do salrio ser acrescido de 50%. 9. Crie um mtodo pblico chamado exibeVantagens() na classe Funcionrio. Coloque as seguintes mensagens no contedo deste mtodo: - Auxlio Transporte; - Auxlio Alimentao; - Plano de Sade; Depois disso, crie o mesmo mtodo na classe Gerente e coloque as seguintes mensagens: - Dcimo quarto salrio; - Telefone Celular Empresarial; Continuando, crie o mesmo mtodo na classe Diretor e coloque as mensagens: - Dcimo quinto salrio; - Participao nos lucros; Utilize a instruo super.exibirVantagens() na implementao do mtodo exibirVantagens() nas classes Gerente e Diretor para voc observar a chamada dos mtodos das classes superiores. Por exemplo, quando chamar o mtodo por meio do objeto da classe Diretor, as mensagens a serem mostradas so: - Auxlio Transporte; - Auxlio Alimentao; - Plano de Sade; - Dcimo quarto salrio; - Telefone Celular Empresarial; - Dcimo quinto salrio; - Participao nos lucros; Na classe possuidora do mtodo main que instancia um objeto da classe Funcionrio e Gerente, faa-o instanciar tambm um objeto da classe Diretor e depois faa os objetos dessas classes chamarem os mtodos exibirVantagens(). 10. Crie um mtodo pblico chamado exibeVantagens(Boolean permitirVisualizacao) na classe Diretor. Repare que a existncia do

parmetro diferencia este novo mtodo do criado anteriormente. Utilize este parmetro para controlar se o usurio pode ou no ver as outras vantagens de diretor que voc quiser colocar. No esquea de chamar este novo mtodo na classe que possui o mtodo main. 11. Faa um teste na classe que possui o mtodo main e declare um objeto do tipo Funcionrio e instancie com a classe Gerente. Faa-o exibir na tela as mensagens do mtodo exibirVantagens(). Repita o teste com a classe Diretor em vez de Gerente. Explique o que aconteceu nos dois casos.

AULA 8 - CLASSES ABSTRATAS E INTERFACES Na aula anterior, vimos o mecanismo de herana, que muito facilita a vida dos desenvolvedores de sistemas baseados em linguagens orientadas a objetos. Tudo o que vimos l, foi baseado em classes concretas, ou seja, classes que permitem serem instanciadas. No entanto, h situaes onde no de inteira responsabilidade do projetista o como fazer, e sim, o que fazer. Nesses casos, o projetista sabe que algo deve ser feito, porm, existem vrias possibilidades de isso ser feito. Nesse caso, teremos a implementao das Classes Abstratas e as Interfaces. Ao final desta aula voc ser capaz de compreender a funo das Classes Abstratas (implementadas atravs do modificador

abstract)

e das Interfaces, que correspondem a uma maneira

genrica de modelar um comportamento.

Texto base
Vamos iniciar esta aula com um exemplo de operao de transferncia bancria. Nesse caso, o projetista deve elaborar um procedimento capaz de retirar determinada quantia de um lugar e coloc-la em outro lugar; mas isso pode ser feito entre duas contas correntes, entre conta corrente e conta poupana, entre conta poupana e fundo de investimento, etc. Portanto, a correta implementao depende muito de como o processo foi concebido. E no s isso, existem inmeras situaes em que o projetista de software deixa a responsabilidade para o programador porque, dependendo do mdulo em questo, a operao dever funcionar de um jeito ou de outro. Nesses casos, temos um artifcio bastante poderoso para remediar tal situao. So os tipos abstratos de dados, as classes abstratas e as interfaces. 1 Classes Abstratas

Classes abstratas so tipos de dados em que o projetista j estipula uma regra de tratamento a ser feito em determinadas situaes, mas deixa ao programador a funo de fazer aquele tratamento especfico funcionar da maneira com a qual foi concebido. Isso no impede que outro programador faa aquela mesma operao funcionar de outra maneira, totalmente diferente, quando se tratar de outro domnio do problema. Para utilizar a forma abstrata, devemos utilizar o modificador na declarao do mtodo, como descrito abaixo.
public abstract <tipo_de_retorno> <nome_metodo>();

abstract

Suponha que o retorno do mtodo seja seja

boolean

e o nome do mtodo

executar();

public abstract boolean executar();

Ao se declarar um mtodo como

abstract,

fundamental, inicialmente,

declarar tambm a classe como abstrata. O compilador do Java exige isso. Assim, se houver um ou mais mtodos abstratos na classe, esta, por sua vez, tambm se torna abstrata. Isso acontece para evitar que esta classe seja um tipo concreto. Assim, no h possibilidade de algum programador querer instanciar a classe e, posteriormente, fazer uma chamada ao mtodo abstrato. Outra ao importante ocorre quando voc ou outro programador desejar criar uma subclasse dessa classe abstrata. O mtodo abstrato deve ser obrigatoriamente implementado, mesmo que no acontea nada no mtodo, ele deve possuir as chaves de abrir e fechar escopo seja delimitado.
public boolean executar(){ }

{ }

para que seu

Nada impede que as classes abstratas contenham mtodos que no sejam abstratos (com implementaes concretas), que podem ser utilizados pelas classes dependentes ou por ela prpria. O mtodo concreto da classe abstrata tambm pode fazer chamadas aos mtodos abstratos sem prejuzo algum para o correto funcionamento do programa. Isso ocorre porque o compilador obrigar a subclasse a implementar o mtodo abstrato, assim, na hora que esse mtodo for chamado a execuo desviar para o mtodo da subclasse. A classe abstrata uma classe normal com a nica restrio de no poder ser instanciada, mas pode possuir atributos, bem como mtodos estticos, desde que estes no sejam abstratos. Veremos agora um programa com utilizao de classe abstrata. Repare que a classe possui mtodos abstratos e um concreto.

A seguir, perceba a classe Carro que estende da classe abstrata denominada Motor. Repare que h um atributo de classe chamado Estado ao qual atribudo um valor verdadeiro quando o motor ligado e um valor negativo quando o motor desligado. Existe tambm a implementao dos mtodos definidos na classe abstrata Motor. Veja que estes mtodos esto marcados com a anotao sobrescritos.

@override,

significando que so mtodos

Agora, segue a classe Motocicleta, que tambm herda a classe abstrata Motor.

Na classe Motocicleta tambm existe o atributo Estado, que no tem nada a ver com o atributo Estado da classe Carro. As classes Carro e Motocicleta tm em comum com a classe abstrata Motor as declaraes dos mtodos, mas as implementaes das classes so diferentes.

Na classe UsoAbstrato mostrada a utilizao da classe abstrata Motor. O mtodo

imprimirDadosMotor(Motor)

apenas chama os mtodos

abstratos, independente de qual seja a classe concreta instanciada na memria. O mtodo

imprimirEstado(Motor)

exige um cast para o tipo

correspondente na memria para que imprima o resultado do mtodo

estadoMotor(),

isso porque este mtodo no faz parte da interface

Motor. Veja abaixo o resultado da execuo deste programa. Perceba que, como no sabemos qual ser a classe concreta a chegar ao parmetro do mtodo, utilizamos a instruo

instanceof

que pergunta ao objeto se

ele de determinada classe retornando verdadeiro ou falso para satisfazer a condio.

Assista mais uma vdeo-aula que contm exemplos de exerccios de classe abstrata. VIDEO CD - Aula 08 - video 1 abstrato Agora, uma adaptao do vdeo de polimorfismo da aula 07 para ser utilizado com classe abstrata. VDEO CD - Aula 08 - video 2 PeriodoAbstrato 2 Interfaces Interface corresponde a uma maneira genrica de modelar um

comportamento, voc pode usar deste artifcio para especificar algo que deve acontecer de uma maneira esperada. A interface determina o que fazer, por meio dos mtodos declarados em seu escopo. Ao projetar uma interface, o programador prev a estrutura para resolver um determinado problema, ditando quais so os passos que devem ser seguidos para que a soluo acontea. Interfaces so teis em diversas situaes. Sua utilizao quase (para no dizer totalmente) obrigatria quando utilizamos objetos distribudos, web-services, entre outras funcionalidades presentes no dia a dia do desenvolvimento de sistemas. O sistema se torna mais flexvel com o uso de interfaces. Pode-se dizer que Interfaces so como classes totalmente abstratas. Isso porque a abstrao dos mtodos da interface feita de maneira implcita pelo compilador. Ao declarar uma interface o programador no precisa especificar o modificador

abstract na declarao de cada mtodo.

Uma interface pode ser estendida como uma classe comum, mas no pode haver mtodos implementados, nem atributos, a no ser que sejam constantes, com os modificadores

static

ou

final

para poderem ser

acessados, sem que haja uma instncia e tambm indicar que no podem ser modificados. Essa forma de utilizao permite que, em muitos sistemas, sejam feitas bibliotecas de constantes em interfaces. Esse procedimento um facilitador, porque essa estrutura fora a utilizao de apenas esse tipo de atributo, alm de no permitir a existncia de mtodos implementados. Outra caracterstica da interface que todos os seus mtodos devem ser declarados como pblicos, assim, a interface atinge seu propsito de permitir a conexo entre as entidades. Vimos no captulo anterior que no existe herana mltipla em Java (diferentemente de C++, por exemplo), mas as interfaces tornam nossos programas muito flexveis, robustos e sem a confuso conceitual de herana mltipla. Uma classe implementa uma interface, isso quer dizer que uma classe vai dizer como ser executado aquele comportamento previsto na interface. Quando uma classe implementa uma interface ela tem a obrigao de codificar todos os mtodos previstos naquela interface. Mesmo que o programador no queira colocar nenhuma implementao, ele deve declarar o mtodo e abrir e fechar chaves

{ } para delimitar seu escopo.

Veja como declarar uma interface abaixo no exemplo abaixo.


public interface IExemplo { }

Agora, veja como declarar uma herana de interface.


public interface IExemplo extends ISuperExemplo { }

A utilizao da interface por uma classe pode ser feita como especificado abaixo.
public class Classe implements IExemplo {

Agora, vamos ver o mesmo exemplo de cdigo acima, porm, com utilizao do mecanismo de interface.

A classe Carro a mesma do exemplo abstrato acima, com a nica diferena de usar a instruo

implements em vez de extends.

A classe Motocicleta tambm a mesma do exemplo abstrato acima, mudando apenas a declarao de

extends para implements.

Abaixo, segue a classe UsoInterface.

A classe UsoInterface mostra a utilizao da interface Motor. O mtodo

imprimirDadosMotor(Motor)

apenas

chama

os

mtodos

da

interface, independente de qual seja a classe concreta instanciada na memria. Assim, no necessrio saber se o objeto Carro ou Motocicleta, pois ser executado o mtodo da classe que apontada pela referncia. Segue a execuo do programa.

Para fazermos uma ligao com a aula anterior, podemos dizer que tudo o que vimos nesta aula est intimamente ligado com os conceitos de herana e polimorfismo. Quando definimos o molde, utilizando tanto classe abstrata

quanto interface, e no nos preocupamos com o como isso ser implementado, estamos utilizando os conceitos de polimorfismo, sem deixar de lado a abstrao, a herana e o encapsulamento. Com isso, vemos na prtica todos os conceitos da orientao a objetos sendo utilizados em conjunto. Com essa aula ns aprendemos a manipular classes abstratas e interfaces. Abaixo, voc encontrar mais um exemplo de programa utilizando esses conceitos. Observe com ateno! VIDEO CD - Aula 08 - video 3 interface A seguir: adaptao do vdeo de polimorfismo da aula 07 para ser utilizado com interface outro exemplo. VIDEO CD - Aula 08 - video 4 PeriodoInterface

Resumo da aula
Nesta aula, voc foi capaz de compreender que Classes Abstratas so tipos de dados em que o projetista estipula uma regra de tratamento a ser feito em determinadas situaes, mas deixa ao programador a funo de fazer aquele tratamento especfico funcionar da maneira com a qual foi concebido. A classe abstrata uma classe normal com a nica restrio de no poder ser instanciada, mas pode possuir atributos, bem como mtodos estticos, modelar desde um que estes no sejam abstratos. usar deste Voc tambm para compreendeu que a Interface corresponde a uma maneira genrica de comportamento, podendo-se artifcio especificar algo que deve acontecer de uma maneira j esperada. Pode-se dizer que Interfaces so como classes totalmente abstratas. Utilizando esses artifcios, o sistema se torna mais flexvel.

Atividade
1. Defina qual o seu conceito de classe abstrata?

2. Defina qual o seu conceito de interface? 3. Defina uma interface com o nome Jogo. Crie os mtodos iniciar(), jogar() e finalizar(). 4. Crie uma classe abstrata com o nome JogoComBola e faa-a implementar a interface Jogo. Crie um mtodo abstrato denominado setNomesEquipes(String equipe1, String equipe2). 5. Crie uma classe com o nome Futebol e faa-a herdar da classe JogoComBola. Repare que, por se tratar de uma classe concreta, voc ser obrigado pelo compilador a implementar os mtodos da classe abstrata e tambm os mtodos definidos na interface. Coloque implementaes simples nestes mtodos como mensagens, por exemplo. 6. Para treinar, crie uma classe com o nome Vlei nos mesmos moldes da classe Futebol. 7. Crie um mecanismo com interfaces e classes abstratas a respeito de uma operao de contas bancrias. Veja, logo abaixo, um vdeo com este exerccio resolvido! VIDEO CD - Aula 08 - video 5 exercicio resolvido - conta bancria 8. Crie uma classe abstrata com o nome JogoDeCartas e faa-a herdar da interface Jogo. Crie um mtodo abstrato qtdCartasDistribuidas() com o retorno do tipo inteiro. Crie outro mtodo abstrato com o nome numeroParticipantes() tambm com retorno inteiro. 9. Crie uma classe concreta denominada Truco herdando de JogoDeCartas. Implemente de maneira simples os mtodos da interface Jogo e da classe abstrata JogoDeCartas. 10. 11. Para treinar, crie uma classe com o nome Buraco nos mesmos moldes da classe Truco. Crie o mtodo exibirRegras() na interface Jogo e depois implemente-o nas classes concretas que implementam esta interface.

AULA 9 - COLEES DE OBJETOS Quando fizermos uma consulta a um banco de dados, o retorno ser uma lista de elementos na qual teremos que escolher uma das opes. Isso acontece ao se pesquisar um aluno ou produto pelo nome ou categoria, um automvel pela marca, um curso pelo departamento, um livro por assunto, entre outras opes de pesquisa. Essa lista de elementos chamada de coleo de objetos. Ao final desta aula voc ser capaz de compreender o conceito de Polimorfismo Paramtrico e o funcionamento de Arrays. Voc tambm ver a utilizao das interfaces e classes do grupo Collection e a implementao das interfaces Set e List.

Texto base
Colees so grupos de objetos que possibilitam o acesso a cada elemento contido na coleo. Sempre necessitaremos de colees ao desenvolver sistemas comerciais. Pode ser uma lista de cursos, turma, alunos, produtos, itens de qualquer natureza, sempre haver uma manipulada. 1 Polimorfismo Paramtrico A partir da verso 5 do Java, foi adicionado linguagem o que alguns autores chamam de polimorfismo paramtrico. O polimorfismo paramtrico refere-se capacidade de, por exemplo, definir uma coleo e dizer ao compilador que aquela coleo de um tipo determinado. Suponha que voc crie uma coleo e resolva preench-la com objetos do tipo Pessoa. O simples fato de voc inserir objetos desse tipo na coleo no deixar claro ao compilador que aquela uma lista de tipos Pessoa, no entanto se voc especificar ao compilador que aquela coleo desse tipo, ele no deixar outro tipo objetos de outra classe fazer parte da lista. Segue um exemplo bsico. coleo para ser

class Pessoa { } //Antes do Java 5 a coleo era iniciada assim: Collection col = new collection (); col.add(new Pessoa()); //Aps Java 5 Collection<Pessoa> col = new collection<Pessoa>(); col.add(new Pessoa());

importante ressaltar que no ocorre erro caso o programador no tipifique sua coleo, no entanto com o uso do polimorfismo paramtrico as restries ficam mais evidentes o que obriga outros programadores a tomarem mais cuidado ao utilizar mtodos com especificaes desse tipo. 2 Arrays Ainda no falamos de arrays na linguagem Java, nem nossa pretenso dizer que array a soluo ao tratarmos de coleo. A saber, arrays so agrupamentos de objetos, uma lista, cujos elementos so acessveis por meio de um ndice.
int[] arrayInt = new int[3];

Arrays so tratados como objetos na linguagem Java, mas seus recursos so bastante limitados, o que praticamente impossibilita a confeco de um sistema comercial apenas com a utilizao de arrays. muito caro, computacionalmente falando, fazer as vrias manipulaes que um sistema de informaes precisa apenas com o uso de arrays. Para comear, seu tamanho esttico e se quisermos acrescentar mais elementos no array teremos que criar outro array com novo tamanho, copiar os elementos um a um do array antigo para o novo para, s ento, poder utilizar o novo array. Imagine se a cada elemento a ser acrescentado tivermos que fazer tal operao, seria invivel. No programa abaixo, repare que o array considerado um objeto em java, tanto que, para inici-lo, usamos o comando

new.

Esse programa, na classe ColecaoArray, foi elaborado apenas para mostrarmos como podemos fazer uma coleo utilizando array. Repare que Java d opes de como utilizar a estrutura de repetio tradicional como no array de

for.

Pode ser um

int,

ou um personalizado que retorna o

elemento de acordo com o tipo do array. Repare que o

for

pode ser

utilizado em qualquer coleo, veremos mais a frente este novo denominado for each (para cada) ou enhanced-for.

for,

Agora, veremos a tela de resultado com as iteraes explicitadas acima.

3 Collection O Java fornece um mecanismo bastante eficiente para o tratamento de colees. Consiste na utilizao das interfaces e classes do grupo

Collection. Segundo a prpria API disponibilizada pela Oracle, que trata da interface Collection (http://download.oracle.com/javase/7/docs/api/), essa interface a principal da hierarquia. Algumas colees permitem elementos duplicados e outras no. Algumas so ordenadas e outras desordenadas. No pacote de classes disponibilizadas pelo JDK no h classe que implementa diretamente a interface Collection, so disponibilizadas implementaes para interfaces mais especficas como Set e List. A interface Collection utilizada tipicamente para a passagem de parmetros, retornos de mtodos, ou seja, so utilizadas quando o programador desejar que as manipulaes sejam feitas de maneira mais genrica. Geralmente, as classes que implementam Collection de maneira indireta por meio de suas subinterfaces apresentam dois construtores, um vazio, sem parmetros e outro recebendo outra Collection como argumento. Na realidade a nova coleo copia a antiga, passada como parmetro no momento que esta instanciada. Algumas colees possuem restries quanto aos elementos por ela manipulados. Por exemplo, algumas implementaes probem elementos nulos ou a algum tipo especfico. Quando isso ocorre so lanadas algumas excees assunto tratado na nossa prxima aula. Os mtodos disponibilizados pela interface Collection so bastante teis para a manipulao de elementos presentes nesses grupos de objetos. As operaes mais utilizadas nas colees so:
- Adicionar objetos na coleo; - Remover objeto da coleo; - Pesquisar um objeto determinado dentro da coleo, por meio de uma chave de pesquisa. - Iterao, que significa percorrer os objetos de uma coleo.

4 Set uma coleo que no pode conter elementos duplicados, e no mximo um elemento nulo. Algumas implementaes da interface Set possuem restries nos elementos nela contida. Por exemplo, probem o uso de elementos nulos. Outras podem restringir alguns tipos em seus elementos.

Ao se tentar adicionar algum elemento no permitido, a depender da classe que implementa Set, pode ocorrer de ser lanada uma exceo ou, simplesmente, retornar falso. A seguir, vamos analisar um programa que utiliza a classe HashSet, classe de coleo que implementa a interface Set. Para este programa, vamos precisar de 3 classes: Pessoa, ColecaoPessoa e ColecaoSet. A classe Pessoa possuir apenas dois atributos, nome e data de nascimento, e seus respectivos mtodos de acesso. A classe ColecaoPessoa instancia cinco objetos da classe Pessoa e os coloca em uma coleo HashSet. Lembrando, as classes que implementam a interface Set no permitem que haja objetos repetidos dentro da coleo, assim, mesmo forando a incluso de dois objetos iguais na coleo pessoa2 veremos, na tela de resultado, que o referido objeto s aparecer uma vez. Por fim, a classe ColecaoSet. Sua nica funo ser instanciar a classe ColecaoPessoa para obter os objetos pessoa e imprimir suas informaes na tela. Segue a classe Pessoa.

Agora, vamos ver a classe ColecaoPessoa.

Repare que o detalhe destacado nos mostra a incluso do objeto pessoa2 na coleo. A seguir, vamos conferir a classe ColecaoSet.

Analisando o programa, vemos outra instruo

for

personalizada da

linguagem Java, na qual basta iniciarmos obtendo o iterator da coleo.

Utilizamos o mtodo hasNext(), que retorna verdadeiro caso ainda tenha objetos a serem percorridos no iterator e tambm o next() que efetivamente retorna o objeto encontrado na coleo. Estes dois mtodos next() e hasNext() so os principais quando manipulamos uma coleo por meio de seu iterator. Tambm podemos fazer o for each para percorrer essa coleo. como dizer: Execute esta operao para cada elemento desta coleo, no caso relatado acima o elemento um objeto do tipo Pessoa. Vamos ver abaixo como ficaria o mesmo programa acima com o for each em vez de utilizar o for com iterator.

Segue, abaixo, a tela de resultado da execuo da classe ColecaoSet.

Veja que o objeto Pessoa, com o nome Joao Augusto, aparece apenas uma vez, mesmo tendo sido colocado duas vezes na coleo. Os objetos pessoa3 e pessoa5, embora possuam os mesmos valores, referem-se a dois espaos de memria diferentes, por isso foram adicionados na coleo. 5 List List uma interface que apresenta uma coleo ordenada, como uma seqencia. O programador sabe onde os elementos da lista foram inseridos. A interface List permite acesso aos elementos por meio de ndices inteiros, responsveis pelas posies desses elementos. Assim, podemos acess-los diretamente ou percorrer a lista para encontr-los. Ao contrrio da interface Set, a List permite que a lista possua objetos duplicados, e tambm vrios elementos nulos. Acompanhe mais este exemplo abaixo.

Vimos a classe Carro com seus atributos e mtodos de acesso. Agora, vamos observar a classe ClasseLista com a responsabilidade de preencher

os objetos da classe Carro e, posteriormente, coloc-los na coleo que implementa a interface List. A coleo tambm parametrizada, a principal diferena em relao ao programa anterior que, nesta coleo da interface List, podemos colocar dois ou mais objetos repetidos, como podemos ver na listagem a seguir.

Repare que, nesse caso, a gente apenas criou um mtodo na classe possuidora do mtodo

main, em vez de criar outra classe para isso. Repare

tambm no detalhe que mostra a incluso do objeto carro3 na mesma coleo. Veremos agora, a tela de resultado da execuo dessa classe. Na tela abaixo voc pode observar que, na listagem, o objeto carro3 aparece duas vezes, pelo fato de ter sido colocado de forma duplicada na coleo.

Agora, acompanhe uma vdeo-aula com mais um exemplo de programa que agrega as informaes vistas nesta aula. VIDEO CD - Aula 09 - video 1 colees

Resumo da aula
Nessa aula vimos sobre colees, semelhanas, diferenas, como montlas, entre outras prticas relacionadas aos objetos. Vimos que Colees so grupos de objetos que possibilitam o acesso a cada elemento contido na coleo e que o Polimorfismo Paramtrico se refere capacidade de definirmos uma coleo e dizer ao compilador que aquela coleo de um tipo determinado. J os Arrays so tratados como objetos na linguagem Java, mas seus recursos so bastante limitados. Alm disso, o Java fornece um mecanismo bastante eficiente para o tratamento de colees, que consiste na utilizao das interfaces e classes do grupo Collection. Por fim, vimos que Set uma coleo que no pode conter elementos duplicados (alm de, no mximo, um elemento nulo) e que, ao contrrio da interface

Set, a List permite que a lista possua objetos duplicados, e tambm vrios elementos nulos. Agora, chegou a sua vez de praticar!

Atividade
1. Crie uma classe que, no mtodo main, instancie um objeto da classe LinkedList, acrescente 10 strings neste objeto e depois imprima o contedo dessa lista na tela. 2. Crie um programa que possua 3 classes Aluno com os atributos nome, matrcula, nota 1 e 2, Turma com o mtodo que retorna uma coleo de alunos e RelatorioAlunos que calcule a nota final do aluno e apresente sua respectiva meno. Veja, logo abaixo, um vdeo com este exerccio resolvido! VIDEO CD - Aula 09 - video 2 exercicio resolvido - lista alunos 3. Modifique a classe feita anteriormente para excluir todos os elementos da coleo de uma vez. Dica: Utilize o mtodo clear() http://download.oracle.com/javase/6/docs/api/java/util/LinkedList.ht ml#clear() para realizar esta operao. Depois disso, verifique se os elementos foram realmente excludos da coleo, observando a quantidade de elementos da coleo por meio do mtodo size() http://download.oracle.com/javase/6/docs/api/java/util/LinkedList.ht ml#size(), que deve retornar o valor 0. 4. Crie uma nova classe que possua uma coleo que implemente a interface List com os valores 10, 20, 25, 36, 84, 50, 60, 15, 20 e 25. Depois, crie um mecanismo que percorra a coleo, acumule o somatrio desses valores e seja apresentado na tela o valor acumulado, a quantidade de elementos e a mdia aritmtica. Utilize um for com Iterator. 5. Crie uma nova classe que possua uma coleo que implemente a interface Set com os valores 10, 20, 25, 36, 84, 50, 60, 15, 20 e 25. Depois, crie um mecanismo que percorra a coleo, acumule o somatrio desses valores e seja apresentado na tela o valor acumulado, a quantidade de elementos e a mdia aritmtica. Utilize o for each.

6. Refaa os exerccios anteriores 3 e 4 utilizando a estrutura de repetio while e verifique se isso interfere nos valores de mdia. 7. Explique com as suas palavras porque houve diferena entre os valores percebidos no exerccio 3 e no exerccio 4. 8. Crie uma classe Pessoa com os atributos nome, RG e CPF. Crie os mtodos de acesso para estes atributos e depois crie um mtodo responsvel por instanciar 5 pessoas com valores diferentes em seus atributos e os adicione em uma coleo. Recupere esta coleo no mtodo main e imprima os valores dos objetos na tela. 9. Crie uma classe Aluno com os atributos matricula e nome curso. Faa essa classe herdar da classe Pessoa do exerccio anterior. Preencha os atributos nome, RG, CPF, matrcula e nome do curso de 7 alunos e inclua-os em uma coleo. No mtodo main recupere esta coleo e imprima seus valores na tela. 10. Modifique o exerccio anterior para criar uma classe Turma com os atributos nome do curso e nmero da turma. Retire o atributo nome do curso da classe Aluno do exerccio 8. Associe uma classe Turma a classe Aluno. Crie dois objetos Turma e associe-os aos 7 objetos da classe Aluno. Crie uma classe com o mtodo main para imprimir os dados na tela. 11. Crie uma classe Automvel com os atributos cor, marca, modelo e ano de fabricao. Coloque os mtodos de acesso, instancie 5 objetos da classe Automvel, preencha os atributos com valores distintos, adicione os objetos em uma coleo e no mtodo main imprima-os na tela.

AULA 10 - TRATAMENTO DE ERROS E DE EXCEES Tratando as excees o nosso sistema ficar mais robusto, se tornar mais seguro, mais confivel e bem estruturado. Essas so caractersticas importantes para qualquer sistema, um software que responda bem as ocorrncias adversas e consiga tratar falhas de forma eficiente acaba por se tornar um software de alta qualidade. Ao final desta aula das voc rotinas ser para capaz de compreender de o

funcionamento

tratamento

excees,

implementadas em Java.

Abertura
VIDEO CD AULA 10 VIDEO 0 ERROS E EXCEES
Fonte: http://camilolopes.files.wordpress.com/2009/02/hierarquiaexcecoes.jpg

Texto base
Excees Quando falamos em sistemas de informaes, podemos dizer que exceo uma situao adversa, na qual a seqncia da execuo normal do programa alterada, deixando o sistema em uma condio anormal. A capacidade de tratamento de excees um importante mecanismo da linguagem Java, e tem a finalidade de resolver problemas ocasionados por desvios no fluxo de execuo dos programas. importante lembrar que esse mecanismo no de exclusividade da linguagem Java; outras linguagens de programao orientadas a objetos, como C++, Object Pascal, Python, .NET, por exemplo, tambm o possuem suporte tratamento a erros e excees. 1 Classificao das Excees As excees podem ser classificadas como verificadas e no verificadas. As excees verificadas so aquela s quais o programador deve tratar. So situaes que devem ser previstas e atendidas pelos desenvolvedores.

Todas

as

excees

dentro

dessa

categoria,

com

exceo

de

RuntimeException, derivam (so subclasses) da classe Exception. Essas excees devem ser tratadas dentro do mtodo ou lanadas para que outro mtodo as trate. As excees de RuntimeException so as no verificadas. Indicam erros, mas no so causados diretamente pela lgica do programador, nem erros de sintaxe, so erros relacionados mquina virtual Java, geralmente, algum problema no ambiente que roda o programa. 2 Hierarquia das classes de Excees Por meio do diagrama abaixo, podemos verificar como a hierarquia das classes de exceo. Assim, de maneira mais clara, poderemos compreender como funciona esse mecanismo. Voc pode reparar, por exemplo, que as classes Error e Exception descendem de Throwable superclasse de todas as excees enquanto as outras so subclasses de Exception.

As instrues para tratamento de excees so bastante simples. Voc deve colocar as palavras

try catch,

e eventualmente

finally.

Assim, todo

o cdigo que estiver dentro desse escopo ser denominado de rotina de tratamento de exceo. Caso ocorra uma exceo, esta ser capturada e devidamente tratada.

try { ... // Bloco de cdigo que lana a exceo } catch () { ... // Exceo tratada } finally { ... // Bloco opcional que sempre executado quando chamado }

Agora, vamos ver na prtica como tratar uma exceo. O primeiro exemplo que vamos utilizar a classe SimpleDateFormat. Essa classe pode ser iniciada com o construtor vazio ou com o formato de data, em String, passado no momento de instanciar a classe. A utilizao do mtodo parse que transforma uma String em data no formato passado anteriormente exige o tratamento da exceo como se segue.

Repare que a primeira vez no houve erro porque a string com a data 15/11/1889 foi passada de maneira correta, do jeito que a referncia da classe SimpleDateFormat estava esperando. Na segunda vez que o

mtodo parse foi chamado, o erro aconteceu porque a String com data 0709-1822 no estava no formato esperado pela referncia. Veremos agora a tela de resultado da execuo desse programa.

Apenas a ttulo de curiosidade, essa tela est diferente das outras em relao s cores apresentadas apenas por questes de leitura e clareza. Podemos tambm criar classes de excees especficas. Nesse caso, vamos criar uma classe que trata a exceo quando determinado atributo do tipo String for vazio, impossibilitando a correta execuo do fluxo. Segue a figura com a classe StringVaziaException subclasse de Exception.

Agora, vamos ver a execuo de um programa com uma classe que utiliza esta StringVaziaException.

Repare que podemos tratar a exceo ou fazer com que o mtodo a lance utilizando a clusula

throws.
o

Assim, a responsabilidade de tratar a

exceo pode ser delegada at o nvel mais alto da requisio. Observando o programa acima, mtodo main, que chamou o mtodo verificaArgumentos(String[]), trata a exceo StringVaziaException. Caso existissem outros mtodos que chamassem o verificaArgumentos(String[]), esses poderiam tratar ou jogar a responsabilidade para cima at chegar no primeiro mtodo que desencadeou todas as chamadas. Veja, logo abaixo, como fica a tela de resultado da execuo do programa acima.

Perceba que executamos a classe UsaExcecao duas vezes. Na primeira, no passamos argumentos para forar a ocorrncia do erro e a conseqente utilizao da classe StringVaziaException. Na segunda vez, ns passamos

um argumento, com isso a execuo no foi desviada a ponto de ocorrer a exceo. Vamos agora analisar o emprego do bloco

finally.

Utilizamos a mesma

classe UsaExcecao declarada acima, apenas com a diferena do bloco

finally,

declarado aps o bloco

catch.

Como j mencionado, esse

um bloco opcional, mas, caso seja declarado, ele sempre ser executado.

Para vermos o resultado necessrio compilar a classe UsaExcecao novamente. Isso, porque ela sofreu modificaes e o arquivo .class ficou desatualizado. Toda vez que alteramos uma classe ela precisar ser compilada novamente para o programador poder ver a nova execuo. Muitas vezes, ns programadores, esquecemos de compilar novamente a classe que sofreu modificao e comeamos a achar que as coisas no esto funcionando. Na dvida, basta compilar o projeto mais uma vez. A classe StringVaziaException no precisa ser compilada de novo pois, esta, por sua vez, no sofreu modificaes. Acompanhe a tela de resultado para ver a execuo do bloco

finally na classe UsaExcecao.

Veja que, independente do lanamento ou no da exceo, o trecho de cdigo presente no bloco

finally foi sempre executado.

Repare no quadro abaixo, algumas das classes de exceo mais comuns da linguagem Java.
ArrayIndexOutOfBoundsException Tenta de acessar uma posio inexistente em um array. ClassCastException Tenta executar um cast em uma referncia que no classe ou subclasse daquela esperada. NullPointerException Acesso a um objeto que no foi instanciado anteriormente, ou seja, seu valor nulo (null). NumberFormatException Tenta converter uma String em nmero, na qual essa String possui um formato diferente de um nmero. NoClassDefFoundError A JVM no localizou a classe para a execuo do programa.

Agora, acompanhe mais exemplos de programas implementando rotinas de tratamento de excees. VIDEO CD - Aula 10 - Aula 10 - video 1 - TratamentoExcecoes VIDEO CD - Aula 10 - video 2 - Excecao

Resumo da aula

Nesta aula, vimos que exceo uma situao adversa, na qual a seqncia da execuo normal do programa alterada. As excees podem ser classificadas como verificadas e no verificadas. As instrues para tratamento de excees consistem em colocar as palavras eventualmente

try catch,

finally.

Podemos tratar a exceo ou fazer com que o

mtodo a lance, assim, a responsabilidade de trat-la passa a ser do mtodo que a chamou, denominado lanador da exceo.

Atividade
1. Crie uma uma data classe em que instancie como um objeto da no classe formato

java.text.SimpleDateFormat. Utilize o mtodo parse para transformar String passada parmetro dd/MM/yyyy em um objeto java.util.Date. Tente compilar e executar esse programa sem utilizar a instruo try catch. Explique o erro acontecido baseado na mensagem exibida pela JVM 2. Agora, adapte seu programa para utilizar a instruo try catch para tratar a exceo lanada pelo mtodo parse. 3. Utilize o exerccio resolvido da aula 8, que trata da operao de transferncia entre contas bancrias e acrescente o tratamento de uma exceo no lugar da mensagem de saldo insuficiente. Veja, logo abaixo, um vdeo com este exerccio resolvido! VIDEO CD - Aula 10 - video 3 - exercicio resolvido - conta bancria com excecao 4. Crie uma classe na qual o mtodo main receba um objeto da classe Exception dentro de um bloco try. Passe um argumento String ao construtor da classe Exception. Capture a exceo dentro de uma clausula catch e imprima o argumento String. 5. Modifique o exerccio anterior, adicione uma clausula finally e imprima uma mensagem para observar que a execuo sempre passa por essa clusula. 6. Crie sua prpria classe de exceo herdando de Exception. Escreva um construtor para esta classe que possua um argumento String e armazene-o em um atributo. Escreva um mtodo que exiba a String passada como argumento

7. Crie uma classe com o mtodo main que possua uma clausula trycatch para exercitar a utilizao da classe confeccionada no exerccio anterior. 8. Crie uma classe que tenha um mtodo que lance a exceo criada por voc no exerccio 5. Depois, crie outra classe que possua um mtodo main que chame o mtodo que lana a exceo criada por voc e trate essa exceo. 9. Crie uma classe com o nome LimiteException que herde de Exception. Crie um construtor com a seguinte mensagem: O valor acumulado estourou o limite. 10.Crie uma nova classe que possua uma coleo que implemente a interface List com os valores 10, 20, 25, 36, 84, 50, 60, 15, 20 e 25. Depois, crie um mecanismo que percorra a coleo, acumule o somatrio desses valores e, caso o somatrio atinja o valor 300 o programa deve lanar a exceo criada no exerccio anterior. 11. Adapte as classes utilizadas no exerccio anterior para que a mensagem exposta na classe LimiteException seja impressa com o valor que causou o lanamento da exceo. Por exemplo, se o somatrio chegou ao valor 305, a mensagem exibida deve ser: O valor acumulado 305 estourou o limite.