You are on page 1of 121

Programação Orientada a Objetos Professores autores Adriano Bezerra Manuel Gomes Uirá Kulesza Aula 1 – Introdução à Programação Orientada

a Objetos Apresentação Nesta disciplina de Programação Orientada a Objetos(POO),você vai estudar os conceitos necessários para se aplicar o paradigma da Orientação a Objetos na programação de computadores. Nas primeiras aulas, você vai estudar basicamente a teoria e no decorrer do curso iremos colocar em prática os conceitos teóricos aprendidos. Os exercícios práticos serão desenvolvidos usando a linguagem Java. É natural e previsível que, após esse curso, você não seja ainda um excelente programador, pois isso leva anos de prática, mas podemos afirmar que você terá uma base sólida para construir sua carreira como programador utilizando esse que é o principal paradigma de desenvolvimento de software atualmente, a Orientação a Objetos. Ah! Um conselho de um experiente amigo para vocês jovens iniciantes, se você quer ser um ótimo profissional, veja nos problemas e desafios uma oportunidade de mostrar que você é capaz. Agarre as oportunidades. Aprendendo bem os fundamentos da Orientação a Objetos, você com certeza já estará dando um grande passo.

Objetivos Ao final desta aula, você será capaz de: • • • • diferenciar Programação Estruturada e POO; conceituar Classes e Objetos; conceituar Atributos e Métodos; entendera realidade sob o ponto de vista da POO.

Introdução

Olá pessoal, eu sou Dígito! E estarei com você nessa grande aventura sobre a Programação Orientada a Objetos. Nossa missão é explorar e descobrir os principais conceitos dessa tecnologia e juntos darmos os primeiros passos nesse admirável mundo novo. Vem comigo!!! A Programação Orientada a Objetos (POO) é um paradigma de programação de computadores que usa os conceitos de Objetos e Classes como elementos centrais para representar e processar dados usados nos programas.

Você sabe o que um Paradigma? Segundo o dicionário Houaiss, paradigma significa modelo, padrão, exemplo. Assim um paradigma de POO é a maneira como pensamos e iremos fazer nossos programas. E é dessa maneira que iremos aprender a ver o mundo em nossa volta. O mundo dos objetos! Como tudo começou De acordo com dados bibliográficos, os conceitos da programação orientada a objetos (POO) surgiram no final da década de 1960, quando a linguagem Simula-68 introduziu os conceitos de objetos e troca de mensagens para construção de programas. Tais conceitos foram posteriormente amadurecidos e aprimorados durante a década de 1970 pela linguagem de programação Smalltalk, desenvolvida no laboratório de pesquisa da Xerox, nos Estados Unidos. Entretanto, a popularização da POO só se deu ao longo da década de 80 e 90, com as linguagens C++ e Java. Java é uma das linguagens mais difundidas nos dias atuais e por conta disso foi escolhida para iniciarmos nossos estudos de POO. Ela surgiu, oficialmente, em 1995 e também tem uma historinha interessante... mas, essa história só veremos na próxima aula. Um dos principais pesquisadores que introduziu os conceitos de POO, foi o cientista Alan Kay (veja a Figura 1) da Xerox, um dos criadores da linguagem Smalltalk. Durante suas pesquisas, Alan desenvolveu a idéia de que poderíamos construir um programa usando conceitos e abstrações do mundo real, como objetos, troca de mensagens. Houve um dia em que Alan Kay pensou:

Figura 1 –Alan Kay Então, a partir desses questionamentos, ele começou a desenvolver suas ideias sobre um sistema de software fazendo uma comparação com o sistema de seres vivos, como ilustra aFigura 2.

Figura 2 –Alan Kay pensando na programação OO Nossa! Quantas ideias!!! Mas, não se preocupe que iremos falar e aprender sobre cada uma delas ao longo das diversas aulas deste curso.

Conceitos da Programação Orientada a Objetos Até aqui, você aprendeu o conceito de programação estruturada, na qual um programa é construído por meio de funções e procedimentos. Na programação estruturada na linguagem C, um programa é definido por meio de uma função principal a qual faz chamadas a outras funções implementadas por nós, programadores. Na programação OO, a forma de pensar (o paradigma) é diferente. Um programa é visto como um conjunto de objetos que se comunicam através de mensagens. Perceba que a Figura 3 ilustra essa ideia. Cada objeto mantém dados internos, chamados de atributos. Dessa forma, um sistema (programa de computador) desenvolvido usando a POO possui objetos que colaboram entre si, executando tarefas específicas em busca de um objetivo comum.

são eles: Encapsulamento.etc. ilustramos. Composição e Polimorfismo. hidráulico. Outro exemplo: quando um engenheiro civil projeta um edifício. por exemplo. os objetos são usados para representar aqueles elementos e abstrações que fazem parte da solução do programa que estamos desenvolvendo. veremos várias entidades ou abstrações as quais podem ser representadas como objetos no nosso programa. Se observarmos ao nosso redor. Veremos durante todo esse curso cada um desses pilares que compõem a Orientação a Objetos. objetos são usados para representar entidades do mundo real ou computacional. Figura 4 – Pilares da Orientação a Objetos Objetos O que são objetos? Na programação OO. ele abstrai sem desconsiderar as influências dos outros órgãos e foca apenas sua atenção nesse órgão. Herança. que é o tema central de nosso estudo ou foco em um dado momento. ele abstrai a complexidade como um todo e planeja seu projeto em partes: sistema elétrico.Figura 3 – Colaboração de Objetos A Programação Orientada a Objetos está sedimentada sobre quatro pilares derivados do princípio da abstração. estrutural. Ou seja. Por exemplo: quando um médico torna-se um especialista em algum órgão do nosso corpo (exemplo. a . Na Figura 5. o coração). O Princípio da abstração é a nossa capacidade de abstrair a complexidade de um sistema e se concentrar em apenas partes desse sistema. As pessoas e seus carros podem ser vistas como objetos.

A Figura 5também ilustra os comportamentos que objetos Pessoa e Carro podem ter. A Figura 3 mostra os diferentes atributos que os objetos “Camila” e “Ferrari” possuem. objetos podem também ter comportamentos associados. métodos) do cabelo: negro Figura 5 –Exemplos de objetos Atividade 1 1. acelerar. assim como os valores que estão assumindo. uma cor. Observe os objetos a sua volta. no linguajar da programação OO. Exemplos Características: tipo: placa: cor: número de portas: 2 Comportamentos: ligar desligar acelerar frear Características: nome: Camila cor biotipo: magro Comportamentos: andar correr dirigir Carro (dados. Objetos do tipo Pessoa. Enquanto os comportamentos também podem ser chamados de operações ou métodos. atributos) Ferrari KZE1018 vermelha (operações. etc. frear. desligar. uma quantidade de portas. por exemplo. Finalmente.pessoa de nome “Camila” que tem um carro “Ferrari”. Assim. Já os objetos do tipo Carro possuem um tipo. por exemplo. . um nome. uma data de nascimento. As características também podem ser chamadas de dados ou atributos. possui um RG. Já os objetos do tipo Carro podem ter os seguintes comportamentos: ligar. podem andar. na POO os objetos possuem características e comportamentos. escolha um deles e descreva de 3 a 5 características (atributos) e comportamentos (métodos). Os objetos possuem características pelas quais os identificamos e finalidades para as quais os utilizamos. Essas características são tipicamente chamadas de atributos. correr ou dirigir carros. Cada objeto Pessoa.

Se pensarmos no universo de objetos Carro. podemos passar para outro ponto da nossa conversa. Tipo: ? Cor: ? CLASSE → Placa: ? Número de Portas: ? . O mesmo vale para o universo de objetos Pessoa. Dois diferentes carros foram criados tomando como base a estrutura da classe. placa e número de portas. Cada classe funciona no fundo como um molde para a criação de um dado objeto. A modelagem e programação de um conjunto de objetos que possuem características (atributos) e comportamentos (métodos) comuns é feita na POO usando o conceito de Classe. Como pode ser observado. cor. Os objetos são vistos como representações concretas (instâncias) das classes. AFigura 6. Podemos dizer que no fundo todos nós pensamos e organizamos o mundo segundo a nossa visão das características e finalidades das coisas. a classe define que objetos devem ter tipo. possivelmente. É muito comum (e com muita frequência o fazemos) criar grupos de objetos com base nas suas características e comportamento. Outros objetos carro podem ser criados usando a classe Carro como molde.Classes Agora que você aprendeu o conceito de Objetos em programação OO. ilustra uma classe que representa os objetos Carro. um RG. por exemplo. uma data de nascimento e. que sempre vão possuir um nome. vamos perceber que todos eles sempre possuem os atributos tipo. logo pensamos o mundo Orientado a Objetos. mas não indica explicitamente quais são seus valores. por exemplo. cor e número de portas. Tipo: ? Cor: ? Placa: ? Número de Portas: ? Figura 6 – Classe Carro A Figura 7 mostra como a partir da classe (entidade abstrata) podemos criar vários objetos diferentes (entidades concretas).

um telefonema). Aves e Flores. SCHÜTZER. Exemplos de classes e objetos Como vimos. vendedor). Como seriam seus objetos? 2. imagine se a classe fosse: Livro. Celular. Disponível em: . Programação Java. Mamíferos. Na prática. Escreva apenas as características (ou atributos) das classes e objetos! Atenção – Em alguns livros. esses dois conceitos – classes e objetos – podem ser usados indistintamente. Leituras complementares MASSAGO. não existem limites ou restrições sobre o que você pode modelar e implementar. diferentes classes (e seus respectivos objetos) podem ser criados em POO. funções de pessoas para os sistemas (cliente. Waldeck.← OBJETOS → Tipo: Porsche Cor: Cinza Placa: MHZ-4345 Número de Portas: 2 Tipo: Ferrari Cor: Vermelho Placa: JKL-0001 Número de Portas: 4 Figura 7 – Classe Carro e dois objetos concretos Atividade 2 Observando o exemplo daFigura 7. uma nota fiscal). Sadao. uma mercadoria. lugares (loja matriz. revenda norte). para facilitar a programação do sistema. 1. eventos (uma compra. apresentamos alguns exemplos de classes/objetos para representação de diferentes abstrações em sistemas: • • • • objetos físicos (um livro. A seguir.

2003. H. 3. você estudou o que é a Programação Orientada a Objetos e o que a diferencia da Programação Estruturada. Laura.br/~waldeck/curso/java/>. LEMAY. Atributos e Métodos. Objetos. Referencias BARNES. professores. DEITEL. São Paulo: Editora Pearson Prentice Hall. Rio de Janeiro: Campos. Defina o conceito de classe e objetos. Resumo Nesta aula. você começou a observar o mundo a nossa volta sob o ponto de vista da Programação Orientada a Objetos. Disponível <http://java. em: . notas dos alunos etc. seguindo o exemplo da Figura 3. Identifique classes e objetos para um sistema escolar responsável por controlar as turmas. Para que servem atributos e métodos? 5. Aprenda Java em 21 dias. SINTES. DEITEL. J. São Paulo: Editora Campus. [Tutorial Oficial Java]. Apresente em detalhes também quem são os atributos e métodos de cada classe que você modelou.com/docs/books/tutorial/>.<http://www. Tradução: João Eduardo Nóbrega Tortello.sun. Acesso em: 13 maio 2010. Tradução: Daniel Vieira. Porto Alegre: Bookman. descreva os possíveis comportamentos (ou métodos) para cada um desses objetos. Introdução à programação orientada a objetos usando Java. Qual é a diferença entre classe e objeto? 6. Conhecemos os conceitos de Classes.. 2003. 2004. 2003. Aprenda a programar orientada a objeto em 21 dias.ufscar. Material online introdutório sobre Java. Acesso em: 13 maio 2010. Rafael. Além disso. 4. Quais as diferenças entre a Programação Estruturada e a POO? 2. SANTOS. São Paulo: Pearson Education do Brasil. THE JAVA: tutorials. David J.. Agora. Autoavaliação 1. Java como programar. M.Programação orientada a objetos com Java. P. 2002. KÖLLING Michael. Anthony. alunos.dm.

).class. a linguagem Java é atualmente uma das mais utilizadas e com maior número de programadores no mundo inteiro. Vai aprender também como se representa esse conceito na linguagem Java. além de criar características e comportamentos para uma classe. Sua popularidade se deve principalmente às seguintes características: 1. Você verá também um dos principais conceitos da Programação Orientada a Objetos – a Classe. você será capaz de: • • • • conhecer um pouco da história da linguagem Java e sua importância no desenvolvimento de software da atualidade. palmtop e PDA’s. disponibilidade em vários dispositivos móveis. a portabilidade – capacidade de escrever código capaz de ser executado em várias plataformas e sistemas operacionais. Veja a Figura 1. além de possuir várias ferramentas gratuitas disponíveis para os desenvolvedores.. 3. Um arquivo . Objetivos Ao final da aula. 2. torna-se um arquivo . entender a teoria sobre Classe. Esse . Introdução à linguagem Java Você já conhece a linguagem Java? Já pesquisou sobre isso? Bem. acesso a banco de dados etc. Para saber Funcionamento geral de programas Java mais. desde seu surgimento até os dias atuais. criar atributos e métodos em classes Java. .. suporte a várias tecnologias (redes. Outra característica fundamental é ser uma linguagem aberta e que evolui de acordo com os desejos da sua comunidade de programadores.Aula 2 – Introdução à Java Apresentação Nesta aula. você vai conhecer a linguagem Java e aprender um pouco mais sobre sua origem. como celular.java quando é compilado.class contém códigos bytecodes que é a linguagem utilizada pela Máquina Virtual Java (JVM ou Java VM). através do compilador Java. entender em detalhes uma classe codificada usando a linguagem Java.

que o computador possua uma Máquina Virtual Java. sem a participação humana. Mac. como mostra a Figura 2. Infelizmente. Em maio de 1995. James Gosling adaptou a linguagem OAK para Internet e batizou-a de Java.Figura 1 – Conversão de código Java em Linguagem de máquina A Máquina Virtual Java converte os bytecodes em linguagem de máquina de acordo com o processador do computador que está sendo executado o programa. Desde é claro.class pode ser executado em várias plataformas diferentes. Figura 2 –Java para os vários Sistemas Operacionais Histórico No inicio dos anos 1990. James Gosling. sentiu a necessidade de criar uma nova linguagem que superasse as limitações encontradas na linguagem C. Linux. tais como Windows. um dos mentores do projeto. Assim. foi inspirado na árvore que James via janela de seu escritório. um mesmo arquivo .a Sun Microsystems estava implementando um projeto chamado Green Project cujo objetivo era gerar a interação. segundo conta-se. A linguagem que foi projetada para dispositivos heterogêneos encontrou seu ambiente na rede mundial através de . Para a execução dessa ideia. Essa linguagem foi chamada de “OAK” (em português significa carvalho) que. a ideia e o projeto original de Oaknão obtiveram sucesso! Entretanto. a Internet estava crescendo e se apresentando como uma nova alternativa de interação. entre os eletrodomésticos comuns usados pelas pessoas.

Abra um editor de texto qualquer e digite o códigomostrado na Listagem 1. Acesso em: 4 fev. pois possuem as mesmas características e comportamentos. Para os nossos exemplos. A partir daí. (Baseado em: <http://pt. 2.org/wiki/Java e http://www. elas são abstratas.wikipedia. Soluções de Negócios.aplicações que podiam ser executada dentro dos browsers nosApplets Java. servem apenas para gerar os objetos. Cartões Inteligentes etc. A classe é abstrata (não existe concretamente). usuários e fornecedores (como a IBM) cresceram de maneira assustadora eela tornou-se a linguagem que se expandiu mais que qualquer outra linguagem da história da computação. Tipo: ? Cor: ? Placa: ? Número de Portas: ? Figura 3–Exemplo da ideia de uma classe Carro ATENÇÃO: já que as classes não existem concretamente. Hoje. Palmtops. Celulares. O modelo define as características e comportamentos que os objetos irão determinar seus valores e desempenhar suas ações.java” .java. vamos lá! 1. todos os carros (objetos) são da classe Carro. Jogos.com/en/javahistory>. • • • A classe é o modelo ou molde de construção de objetos. Esses grupos são chamados de classe. tais objetos podem ser organizados em grupos de características e comportamentos comuns. respectivamente. Porém. 2010. a classe não serve para organizar no sentido de guardar os objetos. Salve com o mesmo nome da classe mais “. Atividade 1 Vamos criar a classe Carro em Java? Então.) Criação de classes Falamos que objetos são entidades concretas que possuem características e comportamentos bem definidos.ela serve de modelo de construção. a linguagem Java é referência popular para o desenvolvimento de software na Internet.

Palavra obrigatória para indicar a criação de uma classe.

Nome da classe escolhido pelo programador. Por padrão, utilizase sempre a primeira letra maiúscula.

Conjunto de características dos objetos da Classe Carro. Listagem 1 - Esquema de criação para classe "Carro" em Java Observação: Esse arquivo será salvo como Carro.java

Perceba que não inserimos no código nada sobre o comportamento dos carros, como andar para frente ou para trás, virar a esquerda/direita, frear etc. Devemos ter em mente que a linguagem de programação é uma representação do mundo sob um ponto de vista. Você se lembra do paradigma? Esse ponto de vista ou paradigma é a orientação a objetos, porém, descrito nas regras da linguagem, que no nosso caso é a linguagem Java. Na linguagem Java, as características são chamadas de atributos e são escritas informando o tipo de atributo e o nome do atributo. É necessário escrever um ponto-e-vírgula após a declaração de cada atributo, pois é uma exigência da linguagem Java, bem como o “espaço” em que são definidos os atributos e métodos, que irão representar o comportamento, deverão estar dentro de chaves “{“ e “}”, outra exigência da linguagem Java. Programar é traduzir uma solução de um problema para uma linguagem de programação. Logo, é imprescindível conhecer as regras da linguagem. O programador é como um intérprete ou tradutor de um idioma para outro. Vamos a outro exemplo apresentado na Listagem 2 :

Cada atributo é definido com o par TIPO e NOME. String significa tipo de texto. Int significa tipo numérico inteiro.

Listagem 2 – Classe Pessoa em Java

Veja que uma pessoa, assim como um carro, possui milhares de características, porém, utilizando o princípio da abstração, iremos deixar de fora tudo que não nos interessa, ou que não seja importante ou relevante para o sistema que estamos desenvolvendo. Ora, se formos programar um sistema para uma locadora de veículos, precisamos saber algumas informaçõessobre a pessoaque irá alugar o veículo, como o seu nome, habilitação de condutor, idade e oque mais acharmos relevante. Porém, é muito pouco provável que iremos exigir dados escolares das pessoas, como notas de uma disciplina etc. Para os carros, também há essa observação, pois um sistema de oficina mecânica deverá conhecer mais detalhes “internos” do veículo, como numeração do motor, período das revisões, marcas de componentes, como amortecedores, dentre outros. Mas, como saber o que é relevante? Isso é determinado no estudo do problema que pretendemos resolver e comumente chamamos esse contexto do problema de domínio.

Atividade 2 Na aula anterior, fizemos um exercício que pedia para observar os objetos a sua volta, escolher um deles e descrever de 3 a 5 características (que agora chamamos de atributos). Faça o mesmo para dois outros objetos e identifique seus atributos. Em seguida, escreva o código das classes que representam tais objetos na linguagem Java, conforme mostrado nas Listagens 1 e 2.

Adicionando comportamento Os objetos das classes que criamos, Carro e Pessoa, precisam não só de suas características, mas também de comportamentos que expressem as ações possíveis de serem executadas, pois um carro precisa oferecer funções para que as pessoas os manobrem. E pessoas, por sua vez, precisam desempenhar suas atividades, como andar, correr, estudar etc. Percebam que falamos da capacidade dinâmica do objeto através dos métodos que possuem. Vamos dar ações aos nossos carros! Veja a Listagem 3 :

Listagem 3 – Classe Carro com métodos Observe que adicionamos novas linhas ao código, agora com dois métodos setCor(String cor) e getCor() .Esses métodos servem, respectivamente, para definir ou mudar o valor do atributo “cor” e retornarao valor desse atributo. Situação onde levaríamos o nosso carro a uma equipadora para modificar a sua cor. Atente para o fato de que os atributos são alterados por métodos da sua classe. Atente para o fato de que adicionamos a palavra this antes do atributo cor. Essa palavra-chave serve para que o compilador possa entender que o atributo cor está recebendo a informação contida no parâmetro cor. Outra maneira de implementar os métodos sem usar a palavra chave this é apresentado na Listagem 4 . Nesse caso, temos que mudar o nome do parâmetro para “c” evitando um erro de compilação.

Listagem 4 – Classe Carro com métodos sem a palavra chave this

senão construímos outros métodos que acessem e modifiquem os valores dos demais atributos – do tipo placa e numPortas– esses não poderão ser vistos fora do objeto nem alterados. veja a Listagem 6: . o nosso código ficará um pouco mais longo.A regra Java para definirmos os métodos é: Listagem 5 – Exemplos de métodos Logo. Com isso.

. vamos agora acrescentar os comportamentos dos objetos nas classes. crie uma classe chamada Livro e especifique os seus atributos e métodos.Listagem 6 – Classe Carro completa Atividade 3 1. Dando continuidade a Atividade 2. De acordo com os exemplos vistos. escrevendo o código de seus métodos. 2.

de atributos e métodos em código Java. Como se representam as características em uma classe? 4. Você aprendeu ainda que a classe organiza as características e comportamentos comuns dos objetos.sun.com/docs/books/tutorial/>. Como se escreve uma classe em Java? 3. Campinas: Instituto de Computação. O que é uma classe e para que serve? 2.Leituras complementares CESTA. Disponível em: <http://pt. .wikipedia. Quais tipos de atributos você conhece? 5. André Augusto. em: ______. WIKIPÉDIA. como também o conceito sobre classes. Acesso em: 13 maio 2010. Conheceu a ideia de concepção de uma classe.dcc.unicamp. Disponível em: <http://www. agora chamados. Você entendeu a criação de uma classe na linguagem Java. Viu também como representar as características e comportamentos. 1996.sun. Acesso em: 13 maio 2010. [Tutorial Oficial Java]. Resumo Nesta aula. E que essas características (atributos) podem sofrer alterações em suas informações através dos comportamentos (métodos). About the Java Technology. respectivamente. Disponível em: <http://java. Acesso em: 13 maio 2010. Acesso em: 13 maio 2010. Qual a regra básica de criação de um método de uma classe? Referencias THE JAVA: tutorials.você viu um breve histórico da linguagem Java.br/~cmrubira/aacesta/java/javatut9. Autoavaliação 1. Disponível <http://java. Material online introdutório sobre Classes.html>.com/docs/books/tutorial/getStarted/intro/definition.org/wiki/Máquina_virtual_Java>. Tutorial: a linguagem de programação Java.html>. Máquina virtual Java.

precisamos do arquivo Carro. figura central da Programação Orientada a Objetos.java em código executável . compilação e execução. Iremos também aprender como acontece a criação de um objeto. aprender como criar um objeto em Java. o qual veremos em detalhe na sequência. Objetivos Ao final desta aula.).. os demais serão ignorados enquanto o programa é executado. Esse método é responsável pelo início da execução do Aplicativo ou Programa escrito em Java. como costumamos dizer. O ponto de partida Para que um programa Java execute ou “rode”. Aplicativos são programas que podem ser executados sozinhos. passando por todos os passos necessários de edição. publicstaticvoidmain(String //corpo } arguments[]){ método do Se em um mesmo aplicativo houver mais de uma classe com o método main().quando ummain de uma das classes for executado. Todo aplicativoem Java precisa ter um método main(). falamos de aplicativo (ou programa)! Vamos escrevê-lo.class. Para isso. você vai colocar seus conhecimentos em prática escrevendo um programa real na linguagem Java. veja a Listagem 1: . Você vai visualizar a transformação do código fonte .. você será capaz de: • • • aprender como criar um programa executável em Java. conhecer o conceito e a criação dos métodos Construtores. Veja só. A classe que serve de ponto de partida para o aplicativo.java da aula anterior.Aula 3 – Um Programa em Java e a criação de Objetos Apresentação Nesta aula. é necessário que exista um método especial chamado main(.

Listagem 1 – Classe Carro Precisamos criar outra classe que irá conter o método main() para podermos executar nosso programa. como mostra a Listagem 2: .

java. Veja o acesso. Crie um diretório (pasta) chamado poo/aula3 e coloque os arquivos Carro.java. exibir seus atributos.java e Main.java. iremos editá-lo para que realize a seguinte sequência: • • • criar um objeto Carro. definir seus atributos. não faz nada.Listagem 2 – Classe Main Vamos salvar esse arquivo como Main. à pasta aula3 na Figura 1: . vamos preparar o nosso ambiente de desenvolvimento: Ambiente de desenvolvimento 1.java e Main. via comandos. O método main está vazio. agora temos dois arquivos Carro. Antes disso.

Veja a execução na Figura 3. Execute o método main() da classe Main. ou seja.java para arquivos executáveis . . Compile os códigos com o comando javac. o compilador java ou javacompiler. Esse comando executa um programa responsável por traduzir o código Java contido nos arquivos .class.Veja isso na Figura 2.Figura 1 –Prompt de comandos com as pastas poo\aula3 2. Figura 2 – Compilando os arquivos java 3.

Vamos editar o Main.obtemos o resultado apresentado na Figura 4: Figura 4 –Execução do Main com impressão de informação A nova linha escrita representa um comando responsável por exibir uma mensagem na tela do terminal. Porém. nada aconteceu . Bem. nosso programa executou corretamente..java e testar sua execução repetindo os passos 2 e 3 anteriores. não dizemos nada para ele fazer. o problema é que não definimos nada no código do método main(). como mostra a Listagem 3: Listagem 3 – Método main() com um comando de impressão de informação Após a execução.. essa instrução é construída como uma chamada do método println() do objeto out da . Como a linguagem Java é totalmente orientada a objetos.java terá uma linha a mais.Figura 3 – Execução da classe Main Mas. O arquivo Main.

mas nenhum de seus atributos foram ainda definidos. ou seja. no mundo da programação orientada a objetos chamamos isso de instanciação. Mais na frente. da variável que possui essa referência para os dados e métodos armazenados na memória. Vejamos a seguinte instrução na Figura 5: Figura 5 – Esquema de criação de um Objeto Toda a manipulação e consulta dos atributos do objeto serão feitas através de sua referência. Vamos utilizar o métodos da classe Carro para defini-lo como quisermos. para isso. Nesse instante. . basta sabermos que tal chamada imprime mensagens na tela do computador. vamos utilizar o conjunto de métodos setAtributo(valor). Um objeto ou instância é criado através do operador new. ou seja.classe System. veremos em detalhe essa instrução. Atividade 1 Insira uma instrução que exiba o seu nome e idade na saída do programa. nosso carro foi criado. Criando um Objeto Vamos criar um objeto da classe Carro. criaremos uma instância da classe Carro. Veja a Listagem 5. No momento.

Listagem 5 – Definição de atributos usando o método set Agora. Listagem 6 – Exibição dos valores dos atributos Logo. vamos exibir cada atributo com seu respectivo método getAtributo().Método main completo . a nossa classe Main ficará como mostra a Listagem 7: Listagem 7 . Como mostra aListagem 6 a seguir.

Considere a seguinte definição de um método construtor na classe Carro adicionando o método construtor mostrado na Listagem 8: . e você verá a saída do programa apresentada na Figura 6: Figura 6 – Execução do método main Atividade 2 1.Repita os passos 2 e 3. passar valores para alguns de seus atributos. Definindo os construtores. Crie no exemplo chamada outroCarro. E como seu próprio nome diz. por exemplo? É possível? É sim!! Para isso. ele constrói e objeto e nesse instante pode definir quaisquer atributos que desejarmos. como fizemos anteriormente. anteriores. Defina valores distintos aos seus atributos através de seus respectivos métodos set e os exiba como foi feito com a variável meuCarro. Métodos construtores Você pode estar se perguntando: E se eu quiser. Mas nesse caso será provavelmente necessário chamar métodos set. se a classe não tiver método construtor?O objeto ainda pode ser criado usando a instrução (ou operador) new. As diferenças do construtor para outros métodos é que o construtor sempre tem o mesmo nome da classe e nãopossui tipo de retorno. como placa e cor.Mas. quando ele é construído. ou seja. no momento da criação do objeto. precisamos definir um tipo especial de método chamado construtor. O método construtor é aquele chamado em um objeto. apresentado outra variável Carro 2. quando ele é criado. pode-se estabelecer valores iniciais para os atributos do objeto e chamar métodos de outros objetos.

por isso. com ou sem inicialização dos valores dos atributos. Isso significa que existem duas maneiras de se construir um objeto derivado da classe Carro. Quando em uma classe define-se outro construtor. Você sabe por quê? Toda classe possui um construtor implícito e padrão. pois seu retorno. fechamos a base para se criar um objeto a partir de uma classe e ainda executar um programa que utilize esse objeto.lembra-se disso? Atenção. utilizamos o operador new mais o nome classe Carro e os ( ): Carro meuCarro = new Carro(). ou do tipo Carro. não podemos mais usar o construtor padrão. como mostra o construtor 1 na Listagem 9. Listagem 9 – Dois construtores para uma mesma classe Observe que no primeiro construtor nada foi feito. é justamente a referência para o objeto na memória. a não ser que se defina explicitamente um construtor sem parâmetros. enquanto no segundo os atributos placa e numPortas foram inicializados (receberam valores).Listagem 8 – Construtor para classe carro Observe que esse método possui o mesmo nome da Classe Carro e não possui tipo de retorno. se fizermos apenas essa alteração. sem argumentos. como já mencionamos. Isso significa que podemos estar usando o construtor padrão (ou em inglês:default). Com isso. Observe que quando utilizamos o operador new não existem argumentos (ou parâmetros)dentro dos parênteses. O que são construtores? • Construtores são métodos especiais para a criação e inicialização . iremos nos deparar com um erro de compilação na classe Main. Com isso. a classe Carro ficará com dois construtores.

java para definir e exibir os novos atributos.wikipedia. gasolina ou flex). Disponível em: <http://en. 2. discutindo inclusive o método main.java adicionando mais atributos à classe.org/wiki/Java_%28linguagem_de_programa%C3%A7%C3%A 3o%29>. WIKIPÉDIA. pois você já sabe como escrever um código simples e transformá-lo em um código executável. Leituras complementares WIKIPÉDIA. criam todos os outros objetos de que esse objeto necessita e realizam todas as outras operações de que ele precisa para ser inicializado. modelo. acesse o link acima.org/wiki/Main_function_%28programming%29>. como marca. . mas já demos excelentes passos! Autoavaliação 1. Resumo Com esta aula. ano de fabricação. tipo de combustível (álcool. Disponível em: <http://pt. Realiza todas as outras operações que ele precisa para ser inicializado.wikipedia.• • • de novas instâncias de classe(objetos). Criam todos os outros objetos de que esse objeto necessita. Acesso em: 13 maio 2010. Java: linguagem de programação. O que faz o operador new? • Ele inicializa o novo objeto e seus atributos. Edite o arquivo Carro. Inicializam o novo objeto e seus atributos. A Wikipédia em português apresenta uma introdução a Java.você estudou o conceito e a prática sobre os métodos construtores e sua utilidade para a criação dos objetos. Acesso em: 13 maio 2010. Edite o arquivo Main. Se você quiser ver como o método main é definido em várias linguagens de programação existentes. Main function: programming. Podemos alterar e acrescentar novas classes aos nossos programas e aos poucos transformá-los em um grande sistema. Por fim.você já é capaz de se aventurar na programação orientada a objetos em Java. Nossa caminhada está apenas começando. Você viu também a estrutura de criação de um objeto em Java. bem como a definição dos valores para os atributos dos objetos.

você será apresentado ao verdadeiro mundo da Orientação a Objetos.. • • Sistema = mundo OO Quando falamos em sistema. KÖLLING. LEMAY..Aprenda Java em 21 dias. estamos falando em um programa complexo que implementa a solução de um problema complexo. Objetivos entender o que é realmente um Sistema OO. P. Você terá a oportunidade de estudar de que maneira construímos sistemas de grande porte utilizando princípios básicos desse paradigma e mecanismos da linguagem Java. São Paulo: Pearson Prentice Hall. Mas. vimos pequenos programas. compreender o mecanismo de troca de mensagem entre os objetos. pois sem eles não conseguimos sequer imaginar . Java como programar. David J. Laura. Referencias BARNES. específicos e simplificados. J. 2003.Programação orientada a objetos com Java. Porto Alegre: Bookman. Crie um segundo carro na classe Main utilizando o construtor com parâmetros. Até agora. 2004.H. 2003. Michael. Tradução:Daniel Vieira. DEITEL. O mundo em que vivemos está repleto de objetos (ou coisas) que nos cercam e fazem a nossa vida ser como é. Rio de Janeiro: Campos. DEITEL. M. pois trata-se de uma situação didática.3. iremos adicionando complexidade pouco a pouco e logo você será capaz de desenvolver suas próprias soluções. Aula 4 – Sistemas OO Apresentação Agora.

Todos têm uma finalidade. até um complexo sistema de controle de tráfego aéreo. óculos e bolsas. decido imprimi-la. por exemplo. por sua vez. aqui eu tenho um computador na minha frente. utilizamos nossos objetos pessoais. então. de um outro. todo programa por mais simples que seja. como é o caso da linguagem Java. mas preciso revisá-la. identifique um conjunto de 5 a 10 deles e descreva as seguintes características: nome e para que servem. o computador envia os dados (conteúdo desta aula) em forma de mensagem para a impressora. praticamente todos os objetos estão relacionados a outros. pois sem a tomada na parede ele não é nada. Estou digitando esta aula e sei que está prestes a faltar energia na área do meu escritório. e este. atribuímos nomes a eles e os ligamos a pessoas e a outros objetos. para poder ler o documento da aula enquanto estiver faltando energia. e assim por diante. ele precisa interagir com a impressora. se a linguagem assim o definir. . como relógios. Tais objetos definem nosso mundo por possuírem características próprias e se relacionarem entre si. que realiza a sua tarefa de imprimir o conteúdo do documento em papel para ser lido à luz natural ou de velas. Como foi visto na atividade anterior. Atividade 1 Verifique agora a sua volta a quantidade de objetos que o cerca. Essa analogia é importante para entendermos que um sistema computacional é abstrato. Essa comunicação é realizada através do mecanismo de troca de mensagem. É o nosso mundo! E esse mundo está sujeito a leis naturais e humanas. O meu objeto Computador não é capaz de sozinho fazer essa tarefa. são feitos por um conjunto de muitos objetos de várias classes diferentes. nela. Os objetos precisam se “comunicar”.como seria. Por exemplo. Um sistema é um verdadeiro mundo orientado a objetos. ou seja. Vejamos a seguinte situação. com edifícios que possuem escadas e elevadores. comunicar-me com meus amigos e diversão. mas segue um princípio de construção semelhante ao mundo que nos cerca. nem mesmo meu computador de última geração. então ai vai: Nome: Computador Serve para: Trabalhar (inclui preparar esta aula). vimos carros trafegando pelas ruas. Nele. Como mostrado na Figura 1. Pois. um objeto aciona um método de outro. pois nenhum faz tudo sozinho.

Envie mensagens para o objeto meuCarro definindo seus outros atributos (modificando seu estado interno). O nosso exemplo do mundo real expresso através do computador e da . e outras mensagens recuperando esses novos valores (acionando o comportamento de informar ao mundo exterior seu estado interior). relembrando nosso programa: Listagem 1 –Exemplo de troca de mensagem com um objeto da classe Carro Esse código escrito dentro da classe Main envia uma mensagem para definir um atributo e outra para recuperar a placa do carro. Durante a execução de um sistema. a troca de mensagem representa: (i) a mudança ou leitura do estado interno do objeto através da alteração de um de seus atributos.Figura 1 –Objetos do mundo real trocando mensagens Agora. ou cooperarem entre si por objetivos mútuos. este no mundo OO – Java. há várias. que se inicia sempre pelo método main() (não se esqueça!). Atividade 2 1. Em Java. Nos sistemas orientados a objetos. ou (ii) a chamada a um dos métodos do objeto que representam seu comportamento e as tarefas que são capazes de desempenhar. por possuírem uma autodependência forte. é comum estabelecermos um relacionamento entre essas classes. vejamos outro exemplo. precisamos projetar bem os sistemas e gerenciar a complexidade para que não se transforme em uma tarefa árdua diária. quando objetos de classes distintas possuem uma troca de mensagens muito frequente. milhares de trocas de mensagem entre objetos! Logo.

impressora possui um relacionamento entre ambos. teremos que ser mais observadores daqui pra frente. incluindo seu condutor. A outra combinação possível seria muitos-para-muitos. Tome como exemplo: Computador Relacionado com: é pessoal. a classe Computador possui um relacionamento com a classe Impressora. Em outras situações. Mas. Continuando nosso programa.Mas uma pessoa pode estar em quantos automóveis ao mesmo tempo? Até onde as leis da física permitem... quantas pessoas cabem em um automóvel? Na maioria deles. um (automóvel) para muitos (pessoas). quando relacionamos coisas no mundo real fazemos isso de forma natural e espontânea. terei que instalar uma nova. a lotação é de no máximo 5 pessoas. Logo. de cada vez! Chamamos esse relacionamento de um-para-muitos. Esses relacionamentos costumam ser definidos através de suas cardinalidades. Vamos ligar a classe Carro à classe Pessoa. fazendo com que uma pessoa possua um carro e esse carro só possa pertencer a uma única pessoa. Vejamos. se assim formos traduzir para o mundo OO. temos então um relacionamento umpara-um. só em um. pois do meu computador posso imprimir em várias impressoras e cada uma dessas podem receber documentos dos outros computadores do escritório. e somente uma. E está conectado a um mouse e a rede elétrica do meu escritório. caso contrário. Camila possui um carro vermelho Figura 2 –Exemplo de relacionamento entre objetos . e a recíproca é verdadeira. esposa. é meu. É o que chamados de relação um-para-um. o que verificamos no nosso exemplo computador e impressora. Atividade 3 Complemente a atividade anterior adicionando relacionamentos aos objetos listados por você. vemos que um marido é para uma. pois quando solicitada a impressão de um documento meu computador já possui um cadastro das impressoras de que disponho. o que é isso? Bem.

Iremos adicionar um atributo chamado dono. Exibindo a lista de atributos de Carro após a mudança: Listagem 2 –Codificação do relacionamento entre as classes Carro e Pessoa E os respectivos métodos get e set: Listagem 3 –Métodos que relacionam Carro a Pessoa Vamos utilizar esse relacionamento no exemplo seguinte: .A classe Carro precisa “saber que pertence” a alguém. que é do tipo Pessoa.

Vamos colocar um pouco da complexidade do mundo real no nosso . Os sistemas OO precisam de métodos mais complexos. unicamente. recuperando o seu dono. um objeto da classe Pessoa. realizem atualizações em outras entidades. atualizem objetos da interface etc. escrevam em arquivos de log. que verifiquem a validade dos dados. pesquisem em banco de dados. e esse recebe uma mensagem para que retorne o seu nome. A troca de método mensagens é comumente denominada de chamada de Até agora.Listagem 4 –Programa exemplo do relacionamento Carro e Pessoa Observe a linha: Listagem 5 –Comando com exemplo de troca de mensagem Neste ponto. a classe Main envia uma mensagem para o objeto carro.você estudou a troca de mensagens entre objetos para definir ou recuperar algum atributo.

tal atributo irá guardar um valor inteiro de 0 (zero) a 5 (cinco). acelerar().Adicionar os métodos ligar(). para tanto. 0 – neutro (ponto morto) 1 a 5 – marchas . um atributo câmbio que indicará qual a “marcha” que o carro está em um dado momento.programa?!Vamos lá! Faremos as seguintes alterações: 1.Vamos adicionar à classe Carro. desligar(). frear() à classe Carro. Listagem 6 –Novos métodos para a classe Carro 2 . ainda.

Listagem 7 – Novo atributo e métodos da classe Carro 3 . .Precisamos colocar uma referência do automóvel dentro da classe Pessoa.Vamos adicionar outros métodos à classe Pessoa para interagir (trocar mensagens) com seu carro. Listagem 8 –Métodos que implementam o relacionamento entre Carro e Pessoa 4 .

troque de marcha. criar uma Pessoa. 3. reduza a velocidade. acelere.Listagem 9 –Classe Pessoa recebe métodos para interagir com a classe Carro 5 . 2. . criar um Carro. troque de marcha e desligue o carro. e atribuí-lo a essa Pessoa. fazer com que a pessoa ligue o carro.Vamos ao Main! Nosso programa precisa: 1.

que consiste em guiá-lo. que executa a ação final desejada. Veja a ilustração a seguir: . manda ou repassa essa mensagem para seu objeto da classe Carro.Listagem 10 –Programa exemplo para testar o relacionamento entre Carro e Pessoa O que podemos ver é que o método Main envia uma mensagem para o objeto pessoa. por sua vez. que.

wives. É importante que neste ponto você revise o que foi visto até agora. É necessário um bom planejamento para manter a complexidade do sistema sob controle.br/java/oojava. Autoavaliação 1 – O que é a troca de mensagens entre objetos? 2 – Como os sistemas OO implementam sua solução? 3 – Dos exemplos apresentados. Resumo Nesta aula. pois os elementos fundamentais da orientação a objetos e os mecanismos básicos da linguagem Java foram apresentados e combinados para gerar uma aplicação simples. identifique os trechos onde há troca de mensagens envolvendo objetos das classes Carro e Pessoa. pois veremos mais técnicas de programação orientada a objetos na sequência das aulas.leandro.Figura 3 – Envio de mensagens entre objetos Leitura Complementar No site <http://www.htm>.nom. . Os sistemas são arranjos complexos de objetos que se relacionam trocando mensagens entre si e cooperando para atingir objetivos planejados pelo seu programador. você ampliou os horizontes. você encontrará informações sobre o que vimos nesta aula e um breve resumo do que ainda veremos. mas bastante significativa. Aconselho que leia apenas o que se sentir confortável e possa assimilar no momento.

Graças ao encapsulamento. Não visualizamos. Java como programar.Referências DEITEL. Porto Alegre: Bookman. o encapsulamento da classe acaba definindo um contrato que determina o que o mundo exterior pode fazer com objetos daquela classe. de que forma (como) o serviço (método) está implementado internamente na classe. Encapsulamento Encapsulamento é a característica da OO capaz de ocultar partes (dados e detalhes) de implementação interna de classes do mundo exterior. Aula 5 – Encapsulamento Apresentação Nesta aula. os detalhes de . que chamamos de interface. J. H. entender com a “correção” do exemplo como se aplica essa característica de encapsulamento. você será capaz de: • • • conhecer os conceitos ligados a encapsulamento. você sabe o que é isso? Cápsula nos lembra qualquer forma pequena que protege algo em seu interior. podemos ver que um objeto que possui a característica de encapsulamento fica protegido por uma cápsula. podemos ver as classes apenas pelos serviços (métodos) que elas devem oferecer para quem as utiliza. através de um contra-exemplo (exemplo errado). M. como um medicamento. que nos ajuda a desenvolver programas com maior qualidade e flexibilidade para mudanças futuras. entender. serve para ocultar e proteger de outros objetos. No fundo. Na Figura 1. vamos aprender sobre encapsulamento. Objetivos Ao final desta aula.. o encapsulamento. fruto seco ou mesmo um compartimento para astronautas cheio de instrumentos para uma missão espacial. 2003. nesse caso. Essa cápsula. a importância do encapsulamento. tão importante para a programação OO. P. Você verá na aula de hoje uma importante característica da Programação Orientada a Objetos. DEITEL.

Figura 2 – Pessoa usando a direção como interface para acessar os serviços de Automóvel Podemos dizer. o objeto só disponibiliza.. que estamos aplicando a característica de encapsulamento ao objeto Automóvel. Através da direção.implementação daquele objeto. sem saber COMO serão feitos ou estão implementados. a Pessoa solicita ao Automóvel esses serviços. nesse caso. Antes. uma explicação. pois ocultamos do objeto Pessoa os detalhes da implementação dos serviços oferecidos pelo Automóvel. através da interface. Dessa maneira.. para que se possa guiar o Automóvel para a esquerda ou para a direita. . Apenas o Automóvel sabe que mecanismos serão acionados para atender a solicitação da Pessoa. Você deve estar se perguntando: como isso acontece na prática? Antes de mostrarmos a implementação na linguagem Java do uso do encapsulamento. Observe a Figura 2. Considere um objeto Automóvel que disponibiliza para um objetoPessoa (na OO tudo é objeto!) a direção como parte da sua interface. precisamos conhecer os chamadosModificadores de Acesso da linguagem. os serviços ou funcionalidades que ele deseja receber mensagens (1) (solicitações) de outros objetos. Figura 1 – Um objeto com encapsulamento Para facilitar nosso entendimento. A Pessoa apenas usufrui do resultado da solicitação. vamos a um exemplo. (1) Veja mais sobre Troca de Mensagens na aula 4.

Outra pergunta seria: acesso a que? Para responder. protected : funciona como o private exceto que as classes filhas ou derivadas também terão acesso ao atributo ou método. e quais poderiam ser públicos. Falaremos sobre pacotes em aulas futuras). quando não possuem modificadores. é necessário interpretarmos: o acesso deve-se dar a quem e por quem? Para respondermos. Os atributos e métodos são chamados de Package ou Friendly. Isso significa que podem ser acessados por todas as classes pertencentes a um mesmo pacote (pacotes são pastas onde estão inseridos os arquivos das classes. public: garante que o atributo ou método da classe seja acessado ou executado a partir de qualquer outra classe. ACESSO nos traz a interpretação de acessar os atributos e métodos do objeto que possui encapsulamento pelos outros objetos do sistema ou pelos programadores. Veremos mais sobre classes filhas na aula 10. . são os atributos e métodos declarados sem modificadores. Package ou Friendly: não são palavras reservadas de modificadores de acesso. sendo totalmente oculto ao programador (ou outros objetos do sistema) que for usar instâncias dessa classe. devemos interpretar que o acesso será ao objeto que possui encapsulamento (ou está encapsulado). escolha 3 classes apresentadas e decida quais atributos e métodos seriam mais convenientes para serem declarados como privados. Veja-os a seguir. modificado ou executado apenas por métodos da mesma classe.Quando falarmos em ACESSO. Atividade 1 Relembrando os exemplos apresentados até agora. ou seja. que decidirá usar determinados objetos durante a construção de seus programas. Então. private: pode ser acessado. para ajudar a organizá-las. Modificadores de acesso Os Modificadores de Acesso são palavras chave ou reservadas da linguagem Java cuja utilidade é permitir ou proibir o acesso aos atributos e/ou métodos das classes. e será feito pelos outros objetos do sistema ou mesmo por você (programador). devemos interpretar como o acesso aos atributos e métodos do objeto encapsulado.

Se for uma data válida registra-se a anotação. conforme mostra a listagem 1 a seguir. vamos querer que essa classe anote a informação. nossa classe fica: . vamos ver como isso acontece na prática. Listagem 1 –Classe agenda Agora.Agora que vocêjá conhece os conceitos sobre encapsulamento. caso contrário a anotação recebe uma informação de data inválida. Assim. Vamos supor que temos uma classe Agenda que guarda apenas uma data e uma anotação importante a ser lembrada. Assim. nossa classifica: Listagem 2 – Adicionando comportamento É importante também verificar se a data da anotação é uma data válida. Um exemplo completo Iremos mostrar um exemplo que demonstre a importância de se usar o encapsulamento na Programação Orientada a Objetos.

. em especial a anotação que foi registrada. Para isso. Em seguida. iremos agora testar nossa classe Agenda com uma aplicação. vamos criar dois objetos com a classe Agenda: agenda1 e agenda2.Listagem 3 – Validação das datas Você até agora pode está se perguntando onde está o encapsulamento e aquela conversa toda do início da aula. Finalmente. não é mesmo? Calma! O objetivo desse exemplo é mostrar a fragilidade do código que não usa o encapsulamento. daremos a agenda1 – uma anotação com uma data válida. e a agenda2 – uma data inválida. Por isso. consultaremos os dados dos atributos de cada objeto. utilizando o método mostraAnotacao().

Veja o que acontece se fizéssemos uma método main(). Figura 3 .Modificando o método main .Saída impressa no terminal Perfeito!!! Não utilizamos o encapsulamento na classe Agenda e tudo funcionou perfeitamente! Sem nenhuma via de acesso desprotegida.Listagem 4 .Testando a agenda Para a agenda1. anotamos que dia 12 do mês 10 (Outubro) é o Dia da Criança. Com a sua atual experiência de programador. o que você acha que será impresso após termos rodado a aplicação? Vejamos então o resultado. já para a agenda2 anotamos que dia 7 do mês 15 (mês Inexistente) é o dia da Independência do Brasil. correto? Errado! Vamos identificar a falha da nossa codificação. observe a listagem 6 a seguir. observando a classe Agenda e os dados inseridos pela classe Principal. pequena modificação no Listagem 6 .

Qual é a solução? Respondendo.. imagine em um programa real que é usado diariamente pelas pessoas.. Isso significa que seu código está susceptível a falhas. Vamos ver como está a nossa classe Agenda com relação aos modificadores. Veja que sua Agenda permitiu que você inserisse uma data inválida para uma anotação. Em um programa simples como esse... Agora. isso não irá trazer nenhuma dor de cabeça. Listagem 7 .Exemplo sem modificadores de acesso explícito .O resultado dessa aplicação seria. Aplicando o encapsulamento ao exemplo Codificar em OO usando o encapsulamento nada mais é que aplicar os modificadores de acesso às classes. A solução é aplicar o encapsulamento.

e permitir os acessos para os métodos anote() e mostraAnotacao().. Temos: . Quando a classe Principal teve acesso aos atributos da classe Agenda? Respondendo: veja o trecho de código da classe Principal a seguir. Vimos. então. ele tem acesso aos atributos e métodos da classe Agenda. Vamos então aplicar o encapsulamento tornando privados os atributos e o método validaData()da classe Agenda com o uso do modificador de acesso private.. implicitamente ele está usando o modificador de acesso Package ou Friendly.A classe Agenda não usa nenhum dos modificadores de acesso de forma explícita. Você pode está perguntando.Acesso direto aos métodos e atributos da classe O método main() da classe Principal está acessando os atributos dia. Essa falha na codificação não é aceitável. que o modificador de acesso Package permite que classes do mesmo pacote acessem atributos ou métodos que estejam com tal modificador. mes e anotacao da classe Agenda. E modificando as informações sem passar pelo teste da validação da data. Considerando que a nossa classe Principal está no mesmo pacote (veja sobre pacotes na classificação de Package). anteriormente. Pela nossa classificação. Listagem 8 .

os atributos da classe Agenda agora são privados apenas para a uso da própria classe Agenda.Encapsulamento em ação Com essa modificação.Listagem 9 . como mostra a listagem 10. .Adicionando explicitamente os modificadores de acesso Agora. só é possível inserir uma anotação na classe Agenda usando o método anote(). Listagem 10 . que também é privado ao uso apenas da classe Agenda. o compilador já não aceita usar os comandos abaixo. Isso causaria erro! Ou seja. O método anote() garante que a data inserida para a anotação será validada com o método validaData().

reveja os conceitos e tente entender a importância do encapsulamento para seus códigos Leitura Complementar Na Wikipédia em português.e adicione os modificadores de acesso de seus atributos e métodos. Uma verdade que não pode ser omitida para os programadores: você pode optar em não usar a característica de encapsulamento em seus códigos. há um página exclusiva para encapsulamento.o qual será abordado posteriormente.wikipedia. Nesta aula. Resumo Nesta aula. isso seria uma péssima prática e um sinal que você não é um programador que segue as boas práticas. como consequência. é uma leitura rápida e com exemplos em Java. verifique e corrija os programas para que não tentem executar uma operação não permitida pelo encapsulamento. Mas.Antes de rever os conceitos. <http://pt. para que servem os modificadores de acesso: • • public private .org/wiki/Encapsulamento>. mas. Continuando a atividade anterior. Em seguida. você viu os conceitos que envolvem o encapsulamento e sua importância para a programação OO. você não estudou a aplicação do modificador de acesso protected porque ele envolve o conceito de herança entre classe.Sem consultar o material responda: O que você entende por encapsulamento? Para que serve? E como aplicar? 2 . Os conceitos foram inicialmente ilustrados através de um exemplo que não aplicava o encapsulamento. não permitindo modificações diretas e indevidas em seus atributos. Se você havia pensado nisso.Atividade 2 1. separe as classes Pessoa e Carro . Esse então fica para uma das próximas aulas! Autoavaliação 1 . aplicamos o encapsulamento ao exemplo e pudemos perceber que ele protegeu a classe Agenda. trazia falhas ou erros ao desenvolvimento.

não use encapsulamento e faça com que no método main() de Hacker seja possível modificar as informações (login.. Tais tipos são usados para declararmos as variáveis que auxiliam na . Além de conhecer os diferentes tipos oferecidos pela linguagem. saber sobre a classe String. P.Crie classes chamadas Usuario e Hacker. de um objeto da classe Usuário que você mesmo criar. saber onde podemos declarar as variáveis que representam tipos primitivos ou referências para objetos dentro de uma classe Java. Inicialmente. 2003. Tipos Primitivos em Java A linguagem Java oferece um total de 8 tipos primitivos para criação de nossos programas. a aula será finalizada com uma apresentação mais detalhada da classe String. Hacker possui o método main(). você será capaz de: • • • • saber quais são os tipos primitivos e respectivas características existentes na linguagem Java. apresentamos diversos exemplos de como usá-los e manipulá-los. J. você vai aprender um pouco sobre os tipos primitivos oferecidos pela linguagem Java. Porto Alegre: Bookman. DEITEL. Java como programar. Em seguida.• package 3 . Finalmente. H.Pense e reflita o que faria você decidir se um método deve ser usado como privado? 4 . M. Objetivos Ao final desta aula. Referências DEITEL.senha). Aula 6 – Tipos Primitivos em Java Apresentação Nesta aula. A classe Usuario possui os atributoslogin e senha. aprender como manipular alguns tipos numéricos. Esses tipos são fundamentais para a construção de programas e sistemas de médio e grande porte na linguagem. inicialmente definidas. aplique encapsulamento e verifique que Hacker terá suas tentativas frustradas.

como. variando em diferentes faixas de valores (ver detalhes na Tabela). Apesar de em alguns programas ser necessário o uso do tipo char para representar e permitir o processamento de caracteres de uma frase ou texto. por exemplo. Tal classe é usada para armazenar um conjunto de caracteres. Variáveis do tipo byte. while). as letras de alfabetos de línguas de diferentes países. muitos deles são capazes de representar os mesmos tipos de dados. .construção dos algoritmos e classes dos programas que descrevemos. O mesmo acontece com variáveis do tipo float e double. que são usadas para representar números reais. aprenderemos um pouco mais sobre o funcionamento e uso da classe String. por exemplo. sendo seu uso bem mais fácil e simples do que usar variáveis do tipo char. muito embora os tiposint e long sejam os mais usados. Tabela 1 – Tipos primitivos de Java Apesar da linguagem Java oferecer tantos tipos. Variáveis booleanas são bastante usadas para tomadas de decisões em comandos condicionais (if) ou de repetição (for. podem ser usadas para representar números inteiros. o tipo char é usado para representar caracteres. int e long. por exemplo. A Tabela 1 apresenta um resumo dos tipos primitivos oferecidos pela linguagem. O tipo boolean é usado para declarar variáveis que podem assumir um dos seguintes valores:true (verdadeiro) oufalse(falso). mas com uma capacidade de armazenamento maior (em uma maior quantidade de bits na memória do computador). o mais comum é usar a classe String. short. No final desta aula. Finalmente.

e a variável poupanca do tipo Double. 1. Vejamos alguns exemplos na Listagem 1. É possível também já inicializar as variáveis no momento da sua declaração. long tamanho. 4. Tabela 2 – Valores default de tipos primitivos de Java . Listagem 1 – Declaração e inicialização de variáveis em Java Na listagem. foram declaradas duas variáveis de valores inteiro (linhas 01-02). As variáveis booleanas casado eferias (linhas 05-06) podem assumir dois valores.0. A primeira é a variável idade do tipo int que foi inicializada com o valor 18. como ela do tipo int. que é inicializada com o valor default zero (0. true e false. boolean ferias = false. double poupanca = 100. podemos observar a declaração de 7 variáveis de tipos distintos. é declarada a variável caracter 1 que é inicializada com o valor ‘A’. ela é inicializada com o valor default inicial zero (0). Cada variável não inicializada em Java recebe um valor de inicialização (default) dependendo do tipo escolhido. No caso da variável tamanho. A Tabela 2 apresenta valores default escolhidos. 3. a variável casado é iniciada com o valor default false. 2. 6. já a variável ferias foi inicializada explicitamente com o valor false. Finalmente. Inicialmente. foram declaradas duas variáveis de valores reais: a variável salario Funcionario do tipo float.0. boolean casado.0). 7. No caso.que foi inicializada com o valor 100. float salarioFuncionario. Logo a seguir (linhas 03-04). basta declarar variáveis do tipo específico que você deseja usar. int idade = 18.Usando os tipos primitivos de Java Para usar os tipos primitivos de Java. A segunda é a variável tamanho do tipo long que não foi inicializada. char caracter1 = ‘A’. 5.

double. Em seguida. o compilador da linguagem Java reclama sempre que declaramos uma variável começando com números. Veja a listagem de todas as palavras reservadas no quadro 1 a seguir. por exemplo.println(). while. a declaração das variáveis caracter1esalarioFuncionario. Crie. if. int. por exemplo: main. compile e execute uma classe Java. e (ii) “#nome” – variável declarada incorretamente também porque se inicia com um “#”. existe um conjunto de regras que devem ser seguidas para nomear as variáveis. além de qualquer letra (maiúscula ou minúscula) e dos caracteres “_” e “$”. Assim. e dessa forma o compilador Java não permite que o desenvolvedor declare alguma variável de forma idêntica a alguma das palavras chaves. conforme foi ilustrado na declaração das variáveis da Listagem 1. 2. Observe durante a execução do programa que variáveis não inicializadas têm um valor inicial padrão conforme apresentado na Tabela 2. for. Na maioria dos programas. entretanto.Atividade 1 1.com um método main(). que declara as variáveis que foram apresentadas na Listagem 1. O primeiro símbolo de declaração de uma variável pode ser uma letra (minúscula – a até z – ou maiúscula – A até Z). Palavras Reservadas da Linguagem Java . experimente imprimir o valor de tais variáveis usando o método System. Regras e convenções para declarações de variáveis Na linguagem Java. caso a gente declare as seguintes variáveis. Os demais símbolos de declaração de uma variável podem ser. porque inicia com um número. é importante lembrar que existe um conjunto de palavras reservadas (do inglês: keywords) na linguagem Java. também algum número.out. ou qualquer outro símbolo que não sejam “_” e “$”. float. 3. Tais palavras são reservadas na linguagem para um determinado propósito. na Listagem 1. ou um dos seguintes caracteres “_” (underscore) ou “$” (cifrão). como. o compilador acusará erro:(i) “1minhaVariavel” – o nome dessa variável está incorreto. de nomeTesteTiposPrimitivos. Seguindo as regras acima. long. Observe. é comum declarar as variáveis com o primeiro símbolo sendo uma letra minúscula. Além das regras acima. new.

Catch: declara o bloco de código usado para tratar uma exceção. zrotected: acesso por classes no mesmo pacote e subclasses. Do: executa um bloco de código uma vez. Switch: indica a variável a ser comparada nas expressões case. Class: especifica uma classe. Extends: indica a superclasse que a subclasse está estendendo. Continue: pula a execução do código que viria após essa linha e vai para a próxima passagem do loop. Static: faz um método ou variável pertencer à classe ao invés de às instâncias. Volatile: indica que uma variável pode ser alterada durante o uso de threads. que um método seja sobrescrito ou que uma variável seja reinicializada. como o C. Controle de fluxo dentro de um bloco de código Break: sai do bloco de código em que ele está. chamando seu construtor. Tratamento de erros Assert: testa uma expressão condicional para verificar uma suposição do programador.Modificadores de acesso Private: acesso apenas dentro da classe. superclasse ou interface. Default: executa esse bloco de código caso nenhum dos teste de switch-case seja verdadeiro. e então realiza um teste em conjunto com o while para determinar se o bloco deverá ser executado novamente. Public: acesso de qualquer classe. Return: retorna de um método sem executar qualquer código que venha depois desta linha (também pode retornar uma variável). Final: impossibilita que uma classe seja estendida. New: instancia um novo objeto. While: executa um bloco de código repetidamente até que uma certa condição seja verdadeira. Else: executa um bloco de código alternativo caso o teste if seja falso. Strictfp: usado em frente a um método ou classe para indicar que os números de ponto flutuante seguirão as regras de ponto flutuante em todas as expressões. Modificadores de classes. For: usado para realizar um loop condicional de um bloco de código. variáveis ou métodos Abstract: classe que não pode ser instanciada ou método que precisa ser implementado por uma subclasse não abstrata. . interface: especifica uma interface. Instanceof: determina se um objeto é uma instância de determinada classe. Case: executa um bloco de código dependendo do teste do switch. Synchronized: indica que um método só pode ser acessado por uma thread de cada vez. Transient: impede a serialização de campos. If: usado para realizar um teste lógico de verdadeiro o falso. Implements: indica as interfaces que uma classe irá implementar. Native: indica que um método está escrito em uma linguagem dependente de plataforma.

Quadro 1 – Palavras reservadas da Linguagem Java. que é executado independentemente do fluxo de programa seguido ao lidar com uma exceção. null. Retorno de um método Void: indica que o método não tem retorno. Char: um caracterunicode (16-bit unsigned).com. Int: um inteiro de 32 bits (signed). Se você tentar criar algum identificador com esses valores.linhadecodigo. Goto: não implementada na linguagem Java por ser considerada prejudicial . Float: um número de ponto flutuante de 32 bits (signed). No caso de variáveis de tipos primitivos numéricos inteiros ou reais. Literais reservados De acordo com a Java LanguageSpecification. Throws: indica que um método pode passar uma exceção para o método que o chamou. além de declararmos e inicializarmos as variáveis. Variáveis de referência Super: refere-se à superclasse imediata. use publicstatic final.br/Artigo. Acesso em: 14 maio 2010. mas que pode causar uma exceção.aspx?id=83>. Short: um inteiro de 32 bits (signed). após um try-catch. podemos . Double: um número de ponto flutuante de 64 bits (signed). Trabalhando com os valores das variáveis Ao longo da criação dos nossos programas. Throw: usado para passar uma exceção para o método que o chamou. Package: especifica a que pacote todas as classes de um arquivo pertencem. trabalharmos com ela na lógica do nosso programa. você também terá um erro de compilação. This: refere-se à instância atual do objeto. Controle de pacotes Import: importa pacotes ou classes para dentro do código. Long: um inteiro de 64 bits (signed).Finally: bloco de código. Palavras reservadas não utilizadas Const: Não utilize para declarar constantes. true e false são tecnicamente chamados de valores literais. Byte: um inteiro de 8 bits (signed). Primitivos Boolean: um valor indicando verdadeiro ou falso. Try: bloco de código que tentará ser executado. é comum. Fonte: <http://www. e não palavras reservadas.

uma nova variável (somaSalario) é criada e seu valor é inicializado com a soma das variáveis salario1 e salario2. a variável idade é calculada como a subtração entre dois valores inteiros: 2010(que representa o ano corrente) e 1980(o ano do seu nascimento).usar os operadores matemáticos tradicionais como soma (“+”). Estenda a classeTesteTiposPrimitivoscriada no exercício anterior para incluir a declaração de variáveis acima. 4. A variável poupanca1 é calculada como o dobro do salario1. A variável do tipo double gastoMes é calculada como a subtração entre o valor do salario1 e o valor de 590. assim como de outra variávelnome2com o valor“Maria das Graças”. 3.Manipulação de variáveis de tipos numéricos Atividade 2 1. A classe String A classe String é usada em Java para representar um conjunto de caracteres. float salario1 = 700. a criação de objetos do tipo String não exige o uso da palavra chavenew. como pode ser visto no exemplo da variável nome2. int idade = 2010 – 1980. multiplicação (“*”) e divisão (“/”). double poupanca1 = salario1 * 2.0. float somaSalario = salario1 + salario2. ou seja.println(). 1. Em seguida. 2. Observe que para criar objetos do tipo Stringnão é necessário criar um objeto usando a palavra-chave new.0. Apesar de ser uma classe. são declaradas duas variáveis (salario1. imprima os valores de tais variáveis usando o método System. Finalmente. 5. Listagem 2 . subtração (“-“).out. 2.68.68. salario2 = 855. A Listagem 2 apresenta diversos exemplos de uso dos operadores. Em seguida. A Listagem 3 apresenta a declaração de uma variável nome1 sendo inicializada com o valor“João Santos”. salario2) do tipo float. . é o valor do salario1 multiplicado (operador “*”) pelo valor 2. Inicialmente. double gastoMes = salario1 – 590.

A terceira linha da listagem mostra a declaração da variável frase do tipo String. A Listagem 4 mostra uma classe que contém um método main() para impressão das variáveis apresentadas na Listagem 3. é possível usar o comandoSystem. public class ProgramaPrincipal { 2. 7. 3.println() normalmente. 2. Observe que essa concatenação é feita através do operador “+”.println(nome2). está sendo atribuído para ela a concatenação (união) da variável nome1 com a string “gosta de “ e. O próprio compilador Java consegue interpretar tais comandos e traduzir para que ocorra uma concatenação de strings em tais casos. String frase = nome + “ é o pai de “ + nome2. 9. 6. finalmente. System. String nome2 = “Maria das Graças”. 10. String nome 1 = “João Santos”. 1. de forma idêntica como fazemos com os tipos primitivos.} Listagem 4 – Declaração e inicialização de variáveis em Java Atividade 3 1. 1. String frase = nome + “ é o pai de “ + nome2.out. o valor final que a variável fraseirá armazenar será “João Santos é o pai de Maria das Graças”. Listagem 3 – Declaração e inicialização de variáveis em Java Para imprimir uma variável do tipo String. System. a variável nome2. String nome1 = new String(“João Santos”).println(nome1). String nome2 = “Maria das Graças”. 5.Uma string em Java é nada mais nada menos do que um conjunto de caracteres separados por aspas e que podem ser atribuídos diretamente para variáveis do tipoString.println(frase).out. Crie. 4. } 11. compile e nomeTesteStringscom execute uma as variáveis do classe de tipo String . Dessa forma. 8. System. public static void main(String args[]) 3.out.out. No caso.

idade = idadePessoa. private float salario. por exemplo. float salarioPessoa){ 10. 3. assim como o anoAtual. 20. idade = idadePessoa. Crie variáveis com o seu nome e alguém da sua família.. por exemplo. public Pessoa(String nomePessoa. Observe que tais atributos podem ser usados nos métodos set e get da própria classe Pessoa. // Método set e get de idade 15. Em seguida. nome = nomePessoa. 11. 12. as variáveis que declaramos tanto de tipo primitivos quanto de tipos de classes/objetos (como. se criarmos dois objetos da classe Pessoa. logo a seguir. private int idade. pessoa2). Declaração de variáveis em classes Em um programa Java. } 18. Nesse exemplo. Na Listagem 5. int idadePessoa. 17. além de uma variável inteira (anoAtual) do tipo int. 7. public class Pessoa { 2. Essa situação é ilustrada na Listagem 6. são também impressos. a classe String) podem ser declaradas e usadas tanto no método main() quanto diretamente como atributos de classes ou variáveis locais de métodos. public int getIdade(){ 16. idade e salario. 4. 5. estenda o programa criando novas variáveis que criam novas frases usando variáveis String. 13.. } 14. Essas variáveis da classe Pessoa são criadas para cada objeto que é instanciado em qualquer trecho de um programa Java. } 21. 1. cada objeto irá manter internamente em memória seu próprio nome. .declaradas na Listagem 4. // Construtor da classe 8. 9. . vemos inicialmente a declaração da variável idade do tipo inte salario do tipo float na forma de atributos da classe Pessoa. vemos a declaração de duas variáveis objetos da classe Pessoa (pessoa1. Ou seja. Faça concatenações das Strings usando o operador “+”. os nomes dos objetos da classe Pessoa. return idade. public void setIdade(int idadePessoa){ 19. // Atributos da classe 3. 4. 2. por exemplo. 6. Observe que. salario = salarioPessoa. private String nome.

você poderá adquirir mais conhecimentos sobre os seguintes assuntos: • variáveis: <http://java. 11. 4. você aprendeu a declarar.println(“Nome da pessoa 2: pessoa2. você viu os tipos primitivos da linguagem Java. modificar os valores e imprimir as variáveis de tipos primitivos e String. 8.com/docs/books/tutorial/java/data/strings.com/docs/books/tutorial/java/nutsandbolts/datatypes. Pessoa pessoa1 = new Pessoa(“João”. Aprendeu sobre a classe String e suas semelhanças com os tipos primitivos. Por fim.getNome()).sun. } 12.println(“Nome da pessoa 1: pessoa1.sun. 22.getNome()).com/docs/books/tutorial/java/nutsandbolts/variables.sun. public static void main(String args[]) 3.22. 1500.html> Resumo Nesta aula.out.0). int anoAtual = 2010. 6. Você estudou também como manipular esses tipos.0). public class ProgramaPrincipal { 2.html> • Strings: <http://java.out. 5.} “ “ + + Listagem 6 – Declaração de variáveis no métodomain Leitura Complementar No tutorial oficial da Linguagem Java.} Listagem 5 – Declaração de variáveis em uma Classe 1. 25. 10.println(“Ano Atual: “ + anoAtual).html> • tipos primitivos: <http://java. System. 9. 7. System. Pessoa pessoa2 = new Pessoa (“Maria”.out. . 2500. System.

3 . compile e execute as classes ProgramaPrincipal e Pessoa apresentadas nas Listagens 5 e 6.html>. Referências THE JAVA Tutorials. Crie também métodos set() e get() para cada um dos novos atributos. 4 .Autoavaliação 1 .Modifique a classe Pessoa para incluir dois novos atributos: (i) estaDeFerias do tipo boolean. . Disponível em: <http://java. Observe que a inclusão de tais atributos exige que seja modificado o construtor para ser passado novos parâmetros para inicializar os novos atributos.Modifique a classe ProgramaPrincipal para inicializar os novos atributos criados para a classe Pessoa. assim como os respectivos métodos de impressão dos dados. sendo inicializada com false.Crie. (ii) curso do tipo String para indicar algum curso atual que a pessoa esteja fazendo. que irão representar alguém da sua família ou amigos.sun.com/docs/books/tutorial/index. Acesso em: 14 maio 2010. 2 .Modifique a classe ProgramaPrincipal para criar três novos objetos Pessoa.

Tais comandos são também fundamentais para a construção de qualquer sistema e elaboração de nossos algoritmos. A seguir. Objetivos Ao final desta aula. Comando IF Um dos comandos mais conhecidos e usados nas linguagens de programação moderna é o comando IF. eles permitem que sejam feitos desvios ao longo da execução. Uma boa parte de tais comandos são derivados das linguagens C e C++. usar nas situações adequadas cada um desses comandos. Com a linguagem Java.Aula 7 – Comandos da Linguagem Apresentação Nesta aula. switch) e repetição (while. você será capaz de: • • saber quais são os comandos de fluxo de controle e repetição existentes na linguagem Java. você vai aprender um pouco mais sobre tais comandos. Em Java. que podemos utilizar na linguagem Java. Ou seja. Ela indica alguma condição de decisão que é feita para controlar se um dado trecho de código é executado. também não é diferente. iremos aprender um pouco mais sobre os comandos de fluxo de controle (if. Comandos condicionais Um dos principais tipos de comandos que existem em muitas linguagens são os comandos condicionais. ela oferece uma série de comandos para fluxos de controle e repetição. Introdução Toda linguagem de programação oferece comandos para o desenvolvimento de nossos programas e algoritmos. for). Eles servem para alterar o fluxo normal de execução seqüencial das instruções do seu programa. A palavra “IF” em inglês significa “se” em português. . o comando IF pode apresentar duas formas: IF e IFELSE (em português: “Se – Senão”). que serviram de inspiração para a criação de Java. afim de executar determinados trechos do programa apenas nas situações desejadas.

em que o programa só executa certo trecho de código. apresentando a implementação do método imprimirFaixaEtaria()da classePessoa. Observe que no conteúdo do código usa-se o comando IF para verificar se a Pessoa é “menor de idade” testando se a “idade” é menor que 18 anos. o comando é estruturado de tal forma a avaliar uma dada condição. Caso essa condição seja avaliada como verdadeira. Vimos a primeira forma de utilização do comando IF. o teste avaliado tiver resultado verdadeiro. o trecho de código que fica no bloco do comando (entre as chaves) é executado. Como pode ser visto. se e somente se. Já a segunda forma IF-ELSE fornece outro trecho de código para o caso onde o teste for avaliado como falso.Listagem 1 – Comando IF Na Listagem 1. Ele tem a seguinte forma geral: Listagem 3 – Comando IF-ELSE E para o nosso exemplo teríamos: . Listagem 2 – Exemplo do comando IF A Listagem 2 mostra um exemplo concreto de tal comando. é apresentada a estrutura mais simples do comando IF.

. Vamos mostrar através do refinamento do exemplo anterior. finalmente. E. Assim. mostra que o objeto Pessoa em questão é maior de idade. uma vez que já sabemos se a pessoa possui idade entre 16 e 17 anos.Listagem 4 – Exemplo do comando IF Inserimos na Listagem 4 o comando ELSE que determina o bloco de comandos a serem executados caso a condição de teste o IF for falsa. Comando IF aninhados Aninhar o comando IF significa que podemos colocar comandos IF’s dentro de outros comandos IF. caso a idade da pessoa seja menor que 18. Neste caso. pois não é necessário testar. como verifica se a pessoa é adolescente (linha 17). dado os testes dos IFs anteriores. temos simplesmente o comando ELSE(linha 19). Nosso programa também está analisando se a pessoa é criança (linha 15). Listagem 5 – Exemplo do comando IF Aninhado Observe que agora temos outras condições de teste.

ocasionando assim a saída do comando switch. Em seguida. Ou seja. ele permite várias possibilidades para a execução do programa. esses tipos são suficientes para tomar todas as decisões necessárias para o fluxo de seu programa. assim como o IF. será exibida a mensagem “Passou a 1ª marcha”. trocar). short. e verifica qual a faixa etária de tais pessoas chamando o métodoimprimirFaixaEtaria(). char e int. A Listagem 6 mostra a estrutura geral do comando SWITCH. Um detalhe é que o SWITCH efetua sua condição de teste apenas nos tipos primitivos: byte.Atividade 1 Modifique a classe apresentada na Listagem 5 usando o comando IF de forma aninhada para testar se a “Pessoa maior de idade” é adulto ou idoso. . Comando SWITCH Outro comando condicional existente na linguagem Java é o comando SWITCH (do inglês: desvio. crie um método main()que cria dois objetos da classe Pessoa com idades diferentes. assim como a avaliação de condição verdadeiro (true)ou falso (false) é suficiente para o comando IF. Mas. caso a variável cambio possua o valor 1. mudar. pois é ele quem define que uma vez encontrado um dadocase (caso). outro caso (case) não será procurado. Observe no exemplo que dependendo do valor que a variável cambio possui podemos imprimir a marcha que foi passada no automóvel. Vale observar o funcionamento do comando break. Listagem 6 – A forma geral do comando SWITCH A Listagem 7 mostra como seria o uso do SWITCH para um exemplo de um dos métodos usado pela classe Automóvel.

temos o mesmo caminho a seguir. . Pois enquanto o comando SWITCH não encontrar o break. caso o sensor disparado seja um dos sensores de 1 a 4.Listagem 7 – Exemplo com o comando SWITCH Outra possibilidade com o uso do SWITCH é a situação em que. exibir uma mensagem). Observe que nesse exemplo a busca só é interrompida pelo comandobreak quando se defineo que se deseja fazer (nesse caso. Como pode ser visto em tal exemplo. será mostrada a mensagem indicando que a mala do carro está aberta. A Listagem 8 mostra um exemplo de tal uso do SWITCH. Caso seja os sensores 5 ou 6. ele continuará verificando os demais casos. mesmo já tendo encontrado o case. para várias possibilidades. será mostrada uma mensagem indicando que existe uma porta aberta.

Comandos de repetição Os comandos de repetição das linguagens de programação são responsáveis pelas rotinas que nós humanos consideramos tediosas. pela capacidade de repetição automática. As possibilidades de comandos são: F = Frente. D = Direita. releia o exemplo da Listagem 7. Observação Veja as dicas seguintes: • • defina cases no comando switch usando o tipo primitivo char. Primeiro. segundo.Listagem 8 – Comando SWITCH com case sem break Atividade 2 1. E isso torna os computadores mais úteis. se tiver dúvidas na hora de uso do comando SWITCH. . imagine a tarefa de procurar um nome em um enorme banco de dados. em função da velocidade pelas quais são processadas. ou uma palavra em vários textos. Por exemplo. E = Esquerda. ou mesmo efetuar a mesma sequência de cálculos para uma grande lista de valores.. Crie um método publicvoidmudarDirecao(char direção)para a classe Automóvelque defina a direção que o automóvel deve tomar de acordo com os comandos recebidos.

Listagem 10 – Exemplo comando WHILE Atividade 3 1. E ainda quando executado será exibido cada valor do contador antes de ser incrementado. temos um método que inicia uma contagem de 0 a 99 para servir de temporizador para chamar outro método que trava as portas do automóvel. usando o comando WHILE que possua um contador que vá de 100 (cem) até 0 (zero) e imprime apenas os números pares. Nesse caso. No caso.Comando WHILE O comando WHILE (do inglês. Crie um método dentro de uma classe chamada OperacoesNumericas. “Enquanto”) repete um comando ou um bloco de comandos enquanto a condição de teste for verdadeira. o método disparaTravaPortas()não será executado. Ele possui a seguinte estrutura geral: Listagem 9 – Comando WHILE A Listagem 10 apresenta um exemplo do comando WHILE. Comando DO-WHILE . Vale observar que a instruçãocontador++(linha 07) representa o incremento da variável inteiracontadorem uma unidade. “enquanto” o contador for menor que 100. o que significa que sempre que essa linha é executada o valor da variávelcontador passa a ser o seu valor atual mais uma unidade.

Observe nesse exemplo. Para a nossa classe Automóvel.O comando DO-WHILE tem a mesma finalidade do comando WHILE com apenas uma diferença. Listagem 11 –Estrutura geral do comando DO-WHILE Para entendermos melhor a diferença. porque o teste é efetuado depois de pedir a senha. E ainda assim funciona exatamente como o comando WHILE. A diferença é que com o comando WHILE a condição de teste é efetuada antes de executar uma instrução ou bloco de instruções. Listagem 12 – Exemplo com o WHILE Observe. se a senhaDigitadafor diferente dasenha (=100). na Listagem 12. vejamos primeiro o exemplo usando WHILE. Para só então exibir a mensagem de “Acesso Permitido” e chamar o método ligarAutomovel(). veja na Listagem 13 o mesmo exemplo usando o DO-WHILE. . nosso método tem as linhas 9 e 10 idênticas às linhas 12 e 13. o programa entra no WHILE e repetidas vezes pede a senha (linhas 12 e 13) até que o usuário digite a senha correta. que agora não é necessário repetir as linhas 10 e 11. considere que para ligar o automóvel é preciso que o usuário entre através do método acesso com uma senha num teclado do painel do carro. que após a senha digitada (linha 10). Agora. A Listagem 11 apresenta a forma geral do comando.Nesse caso. já com o comando DO-WHILE a condição de teste só será efetuada depois de executar instrução ou bloco de instruções. como o teste do WHILE é executado antes das instruções.

é onde efetuamos o teste de repetição. Dentro do bloco dos comandos.é onde se define o valor inicial para o contador. essa variável terá seu valor modificado para ser comparada na condição de teste. temos que criar uma variável de controle e iniciar essa variável antes dos comandos. normalmente o contador pode ser incrementado ou decrementado. Listagem 14 – Comando FOR A Listagem 15 apresenta um exemplo concreto do Comando FOR. O comando FOR já possui uma estrutura especializada para a implementação de repetição controlada por contadores. que agrupa a inicialização do contador. Observe que usamos o mesmo exemplo do comando WHILE apresentado na Listagem 10. O comando FOR é interrompido apenas quando a condição de teste tem resultado falso. mas o código ficou mais enxuto devido à estrutura do FOR.Listagem 13 – Exemplo com o DO-WHILE Comando FOR Quando usamos os comandos de repetição WHILE e DO-WHILE controladas por contadores muito usualmente. Nacondição. E opassoé onde o contador sofre a modificação a cada iteração. . A Listagem 14 apresenta a estrutura geral do comando FOR. Na inicialização. modificação do contador e condição de teste em um único comando.

quando se trabalha com vetores ou coleções (do inglês: Arrays eCollections). quando não são necessários contadores. Comando FOR para vetores e coleções O comando FOR possui outra estrutura. .Listagem 15 –Exemplo do comando FOR Anote a Dica Use o comando WHILE e DO-WHILE quando não se sabe quando vai terminar a repetição. Por exemplo : o FOR não seria muito adequado para implementar os exemplos de leitura de senha a partir do teclado (Listagens 13 e 14). Normalmente. Normalmente. Por exemplo: quando se deseja percorrer as informações contidas em matrizes. Listagem 15 – Comando FOR aninhado O FOR Aninhado é usado quando se deseja trabalhar com a modificação do passo de dois (ou mais) contadores. quando os contadores são necessários. E o comando FOR quando se tem bem definido no términodo ciclo de repetição. Vejamos em um trecho de código um exemplo dessa estrutura.

Listagem 16 – Comando FOR para vetores e coleções

Observe que aqui a ideia de contador está implícita e existe uma variável do mesmo tipo do vetor (variável item do tipo int no exemplo) ou o item da coleção é que recebe uma nova informação a cada interação até passar por todos os itens do vetor.

Atividade 4 1. Usando o comando FOR, crie uma classe qualquer, que possua diferentes métodos que faça os seguintes tipos de contagem. a) Contagem e exibição crescente para um dado número inicial e final. b) Contagem e exibição decrescente para um dado número inicial e final. c) Contagem e exibição de números PARES para um dado número inicial e final. d) Contagem e exibição de números ÍMPARES para um dado número inicial e final. e) Contagem e exibição de números de passo 2 (contador varia de 2 em 2, ou seja, é incrementado em 2 a cada rodada do comando FOR) para um dado número inicial e final. f) Contagem e exibição de números de passo 3 (contador varia de 3 em 3, ou seja, é incrementado em 3 a cada rodada do comando FOR) para um dado número inicial e final. g) Contagem e exibição de números de passo 5 (contador varia de 5 em 5, ou seja, é incrementado em 5 a cada rodada do comando FOR) para um dado número inicial e final. h) Não deixe de criar um método main() na sua classe para fazer uma chamada de teste para cada um dos métodos acima.

Leitura Complementar Neste artigo, você verá o assunto da aula de hoje, explicado de outra forma e com algumas informações que não foram abordadas nesta aula. <http://javafree.uol.com.br/artigo/6946/Cap-4-Controle-de-Fluxo.html>

Resumo Na aula de hoje, você viu quais são os comandos de fluxo de controle e de repetição da linguagem Java. Estudou as estruturas de cada comando sempre acompanhadas de exemplo concretos, contemplando também alguma de suas variações.

Autoavaliação 1 - Quais são os comandos de controle de fluxo existentes na linguagem Java? 2 - Quando devemos usar os comandos de controle de fluxo? 3 - Quais são os comandos de repetição existentes na linguagem Java? 4 - Quando devemos usar os comandos de repetição?

Referências THE JAVA Tutorials. Disponível em: <http://java.sun.com/docs/books/tutorial/index.html>. Acesso em: 17 maio 2010.

Aula 8 – Composição ou Agregação

Apresentação Compor, juntar, reunir, formar, constituir... Essas ações nos levama uma ideia muito interessante na programação orientada a objetos, chamada Composição. Nesta aula, você vai ver esse interessante conceito da POO, que nos dá a grande possibilidade da reutilização de código. Além disso, a ideia de composição também aproxima a ideia da Orientação a Objetos ao senso comum de sistematização das coisas, em que um objeto mais complexo pode ser composto de partes mais simples. Boa aula!! Objetivos Ao final desta aula, você será capaz de: • • saber o que significa Composição ou Agregação; criar objetos na linguagem Java que são compostos por outros objetos, fazendo uso prático do conceito de Composição; entender como se comporta os modificadores de acesso de Java na Composição.

Composição ou Agregação Composição ou Agregação é um mecanismo de reaproveitamento (reutilização) de classesutilizado pela POO para aumentar a produtividade e a qualidade no desenvolvimento de software.

Reaproveitamento ou reutilização de classes significa que você pode usar uma ou várias classes para compor outra classe. Já o aumento de produtividade está relacionado com a possibilidade de não ser necessário reescrever código de determinadas classes, se alguma outra já existe com estado (atributos) e comportamento similar. Finalmente, com a composição, é possível também aumentar a qualidade dos sistemas gerados, porque há a possibilidade clara de reutilizar classes que já foram usadas em outros sistemas, e, portanto, já foram testadas e têm chances de conter menos erros. Vejamos um exemplo: um carro é um objeto COMPOSTO por vários outros objetos. Ele é composto pelos objetos motor, pneus, direção, faróis etc. A Figura 1 dá uma ideia do conceito de composição para um objeto do tipo Carro.

memória. outros exemplos de objetos do mundo real que são compostos por outros objetos menores. Dado uma classe Automóvel que é composta pelas classes Direção e Motor. mouse etc. como pode também usufruir dos atributos e métodos dessas classes. E tem mais. Exemplos na prática Vejamos agora um exemplo na prática! Vamos utilizar a mesma ideia do objeto Automóvel. E isso é muito natural. quando uma classe é composta de outras classes ela pode tanto usar os objetos que são gerados pelas classes que a compõem. . Atividade 1 Para praticar o conceito de composição que você acabou de aprender.Composição do objeto Automóvel Legal não é?!! Isso mesmo que você entendeu. placa mãe. tente olhar o mundo ao seu redor. você pode criar um objeto a partir de vários outros objetos.Figura 1 . ele é um objeto composto por outros objetos: teclado. monitor. Anote tais exemplos para que possamos usá-los em outros exercícios ao longo da nossa aula. Veja o computador que você está usando.

veja Listagem 1: Listagem 1 . eis aqui a nossa Composição! Mas. outras classes compostas de várias outras classes. As classes são: Classe Composta Classes Componentes (“Partes”) da Classe Composta . Crie. Elabore também classes para os exemplos que você mesmo criou no exercício 1.Composição da classe Automóvel: motor e direção Nas linhas de código. Atividade 2 1. baseado no exemplo apresentado. essa Composição é expressa da seguinte maneira. Direção e Automóvel Observe que a classe Automóvel é composta pelas classes Motor e Direção. lembre-se de que primeiro criamos as classes Motor e Direção para só a partir daí podermos criar a classe Automóvel.Figura 2 . Lembre-se: para que uma classe possa compor uma outra é necessário que ela já exista.Classes Motor.

. Título..Classe Direção .Boca..Olho. Mas. Cabeça.Braço. vamos incrementá-las um pouco mais e descobrir os benefícios de se utilizar a Composição. nossas classes ficam conforme indicam as listagens a seguir: Listagem 2. Observe que a classe Automovel possui atributos que são referências para instâncias (1) (objetos) das classes Motor e Direção.. Autor.Observe que as classes possuem a propriedade doEncapsulamento (visto na aula 5). Assim. Capítulo.. analisando as classes. para acessar os atributos das classes usaremos os métodos get e set (vistos na aula 2).Computador Livro Monstro Teclado. consequentemente. Editora ..Perna. Listagem 2 -Classe Motor Listagem 3 . Placa Mãe. Monitor. o conceito e vantagens do uso da Composição não acabam por aí. Memória. Listagem 3 e Listagem 4: (1) Ver aula 3.

Para mostrar cada uma dessas situações. podem ser chamados de três maneiras diferentes. já o segundo espera que o usuário forneça a informação da potência do motor quando criado o objeto Motor. se nós criarmos um objeto (instanciarmos) da classeAutomóvel. Acrescentamos dois métodos construtores para a classeMotor.Listagem 4 . . vamos considerar inicialmente que a classe Automóvelé composta apenas pela classe Motor. CASO 2: chamadas em qualquer método da classe que é composta. Isso significa que para instanciarmos os objetos classe Automóvel podemos decidir de que maneira faremos. os atributos motor e direção continuam com valor nulo (null). que compõem a A Composição e o método construtor Os métodos construtores das classes componentes (Motor.Direção) que fazem parte da classe composta (Automóvel).Classe Automóvel Da maneira que está o código das classes. CASO 3: chamadas fora da classe que é composta. Automovelautomovel = newAutomovel(). veja a Listagem 5. O primeiro utiliza a potência do motor 1000 (por default). são elas: • • • CASO 1: chamadas nos construtores da classe que é composta.

quando o construtor da classe componente é chamado no construtor da classe que usa a composição. temos: . ilustrada na Listagem 7.Classe Automóvel composta pela classe Motor • CASO 1: chamadas nos construtores da classe que é composta Para a primeira situação.Classe Motor com dois construtores Listagem 6 .Listagem 5 .

os construtores da classe motor são chamados dentro dos construtores da classe Automóvel. Considere que a classe Automóvel utilizada possui o código apresentado na Listagem 6. veja a Listagem 9. na qual os construtores são chamados em qualquer método da classe que é composta. Vejamos a Listagem 8: Listagem 8 .Listagem 7 .Construtor chamado a partir de um método • CASO 3: chamadas fora da classe que é composta Por fim.Classe Automóvel com dois métodos construtores Nesse exemplo. onde o construtor da classe componente é chamado de fora da classe que usa a composição. a terceira situação. . • CASO 2: chamadas em qualquer método da classe que é composta Outra maneira seria a situação.

antes de usar o métodosetMotor() o objeto motor não tem nenhum vínculo com o objeto automóvel.Possibilidades de criação da classe Motor para uso pela classe Automóvel . Comparando as possibilidades Observando a Listagem 10. Listagem 10 . Ou seja.Listagem 9 -Criação da classe Motor fora da classe Automóvel Observe que o construtor da classe Motor foi chamado de fora da classe Automóvel. dentro do método main()da classe. analisaremos as possíveis maneiras de criar o objeto da classe componente (Motor) através da classe composta (Automóvel) ou dentro do método main() que define o comportamento de execução de um programa Java.

em seguida. esses atributos podem não ser acessados facilmente. Para o caso 2. Elas estão mencionadas a seguir. Nesse caso. para o caso 3. define que esse objeto componha o objeto automóvel (linha 9. podemos observar na linha 3 que quando criamos o objeto automóvel o objeto motor ainda não existe. Já na linha 2. podemos considerar com relação à composição e aos modificadores de acesso (1). e o caso 3 para a classe Monstro que agrega cabeça e boca. respectivamente. Finalmente.) Atividade 3 Seguindo o exemplo apresentado para as classes Automóvel e Motor. na linha 1. Ele permanece nulo (null) dentro do objeto motor até que o automóvel seja ligado pela primeira vez. o caso 2 para a classe Livro que agrega seu título e autor. Para isso.Para o caso 1: temos duas possibilidades. o usuário cria normalmente o objeto motor. Aplique o caso 1 para a classe Computador que agrega uma placa mãe. Quando declaramos atributos públicos nas classes e reutilizamos essas classes dentro de outras. . o usuário define a potência a ser adotada pelo motor do automóvel. escolhendo um dos dois construtores (linhas 7 e 8) e. veja Listagem 11. pode-se usar um dos dois métodos ligarPrimeiraVez()(linhas 4 e 5). 1. tem-se a mesma observação da linha 3. apresentado a partir da linha 6. é ocultado do usuário a existência de um objeto motor que compõe a classe Automóvel. através da classe de composição. sem ou com parâmetro. (1) Veja sobre modificadores de acesso na Aula 5 sobre Encapsulamento. Composição e os modificadores de acesso Duas observações importantes.

porque o objeto Direção está encapsulado (é um atributo privado) dentro da classe Automóvel. • Quando temos atributos privados nas classes e reusamos essas classes.Tentativa de uso de um atributo público de um objeto privado No exemplo acima. apesar do atributo cor da classe Direção ser public.Tentativa de uso de um atributo privado de um objeto público.Listagem 11 . Aqui é o inverso do caso anterior. veja a Listagem 12. os atributos não passam a ser públicos. declarando suas instâncias como públicas. mas reforça que private não deixa de ser privado mesmo quando na classe que usa da Composição (Automóvel) torna seu . Listagem 12 . esse atributo não é diretamente acessível a partir do método main().

Autoavaliação 1 .respectivamente. Anote a Dica Quando uma classe usa a Composição para agregar outras classes.wikipedia.fee. o qual descreve um relacionamento em que uma classe contém uma instância de outra classe. também encontramos autores que fazem diferença entre Agregação e Composição.Sem consultar o material. Viu que composição é a capacidade de fazer com que uma classe seja composta de vários objetos de outras classes.html>. que além de possuir um atributo Nome será composta pelas classes Data. Agregação é um conceito bastante similar a Composição. Na literatura.atributo (Direção) public. . Eles usam o mesmo raciocínio usado para modelagem de Banco de Dados. veja um pouco mais sobre agregação no link a seguir: <http://www. na POO. qual você usaria se quisesse omitir a presença da composição para quem irá criar os objetos das classes que usa a composição? 4 .br/cursos/POOCPP/node14. Resumo Nesta aula.Quais são as vantagens de se usar a Composição? 3 . Leitura Complementar Como dissemos. Endereçoe Contato para os atributosdataNasc. enderecoe contato. É também uma ideia válida e interessante. Veja no link a seguir: <http://pt.org/wiki/Classe_%28programa%C3%A7%C3%A3o%29>.unicamp.Crie as classes apresentadas no diagrama abaixo e aplique a Composição para a classe Pessoa.dca. podemos dizer que ela tem um relacionamento chamado “Tem um”. dependendo da maneira que se escolhe para instanciar as classes componentes. você estudou o que é Composição. A Composição oferece a possibilidade de fazer uso do comportamento das classes que ela agrega (como atributos) de maneira implícita ou explícita. responda: O que você entendeu por Composição? 2 .Dos três casos de instanciação dos objetos componentes.

Para isso. Aula 9 .. M.H. é necessária uma estrutura que permita armazená-los e recuperá-los sempre que desejarmos. 2003. DEITEL. Objetivos . Porto Alegre: Bookman.Arrays. Tais coleções ajudam a armazenar e recuperar nossos objetos dentro de um sistema. Rafael. J. A linguagem Java oferece várias dessas estruturas de dados em um conjunto de classes chamadas de coleções. coleções e listas Apresentação Precisamos constantemente manipular muitas informações e muitos objetos ao mesmo tempo. Rio de Janeiro: Editora Campus. Java como programar.Referências DEITEL. P. É isso que você verá nesta aula. Introdução à programação orientada a objetos usando Java. SANTOS. 2003.

Esse fato ocorre.Ao final desta aula. não podemos criar 5 variáveis. suponha que você é um treinador de um atleta velocista de 100 metros raso. ou mesmo da escola inteira. apenas uma para comportar esses valores. um conjunto de classes da biblioteca padrão de Java relacionadas à manipulação de coleções de objetos. seria quando queremos encontrar um número de telefone e recorremos à lista telefônica.você irá fazer 5 medições de tiros de 100 metros. e é ela que veremos na sequência. Esse tipo de variável é o que chamamos de array. Por exemplo. ela é nosso repositório de dados. Arrays Considere a seguir um exemplo que motiva o uso de arrays. você vai medir o tempo e colocar o resultado em sua planilha de rendimento. você será capaz de: • • compreender como armazenar objetos em estruturas de dados conhecidas como arrays. Outro exemplo. conhecer e aprender como usar de forma introdutória. quando precisamos armazenar uma lista de alunos de uma turma. como parte do treinamento. Precisamos armazenar 5 valores numéricos reais para representar a marca de tempo obtida. e sim. onde a criação e manuseio de uma variável para cada um dos objetos torna-se impraticável. por exemplo. . Para cada tentativa do atleta. e precisamos medir sua média. Veja tal código na Listagem 1. Porém. e em um dado momento precisamos recuperar apenas um dos objetos aluno dessa lista. valores máximo e mínimo. Armazenando objetos Existem várias situações durante a construção de sistemas e programas que precisamos armazenar um número expressivo de objetos. precisamos tomar nota de um valor que muda ao longo do tempo. Constantemente. Imagine termos que criar 100 (cem) variáveis para 100 nomes de alunos! É possível criar um tipo especial de variável para armazenar um número específico de objetos ou valores primitivos.

No nosso caso.Declaração de um array Conforme pode ser observado. Dessa forma. Por conta de tais colchetes. caracteriza-se a declaração de uma variável/atributo do tipo array (também chamada de vetor) em Java. compreendendo 5 (cinco) posições conforme foi declarado. O código logo após a declaração indica uma atribuição de valor para armazenar uma determinadamarca em cada posição do array. Isso significa que no nosso exemplo o atributo marca será capaz de armazenar 5 elementos. após a chamada comnew. Eles servem para indicar uma dimensão. Esse valor sempre começa com 0 (zero) e vai até o comprimento do vetor menos uma unidade. é um valor que permanece fixo. o array marca vai de 0 (zero) a 4 (quatro). a palavra new é usada com o objetivo de indicar quantos valores do tipo Double serão necessários para armazenar tais valores. um novo operador entrou em cena: o par de colchetes “[“ e “]”. mas sim irá armazenar um conjunto de valores do tipo double. Listagem 2 . A quantidade de valores estipulada para armazenar no array. mas é necessário o operador new para alocar espaço para armazenar o conjunto de valores. Assim. Observe que o atributo marca representa um array.Listagem 1 . Veja que colocamos um número para indicar que posição estamos acessando. cinco (5) para o exemplo do atributo marca. a variável marcanão mais é capaz de armazenar um único valor do tipo double. ou seja.Impressão dos valores do Array . uma posição onde iremos colocar um valor inteiro que indica a quantidade de elementos que precisamos armazenar na variável em questão (marca).

pois naturalmente costumamos realizar contagens a partir do número 1 (um).Para exibirmos os valores. é possível usar um comando de repetição para acessá-lo diretamente. na programação diária. Listagem 4 .Outra forma de definir os valores de um Array Tanto na definição do array quanto no acesso para leitura ou escrita de suas posições. Inicialize cada uma das ferramentas armazenadas no array. Na verdade. Não indicamos a primeira tomada de tempo como sendo o tempo 0 (zero). isso é o mais comum. pois ele sabe de antemão pela quantidade de elementos definidos na sua inicialização. Arrays bidimensionais . imprima cada um deles. Observe que não precisarmos indicar o comprimento do vetor. Veja aListagem 3. crie um programa que declara uma lista (array) capaz de armazenar 10 (dez) nomes de ferramentas para uso de um mecânico. Vejamos como ficaria a exibição dos valores acima com um comando FOR naListagem 4. no momento de sua declaração podemos indicar seus valores.Impressão dos valores de um array usando comando FOR Atividade 1 Para praticar o conceito de array. Há outra forma de definir os valores de um array. o programa da Listagem 1pode ser incrementado pelas seguintes linhas de código (Listagem 2). Listagem 3 . em seguida. sendo que já precisamos conhecê-los de antemão.

Já para localizar uma peça em um tabuleiro de xadrez precisamos de duas coordenadas. em que cada casa irá conter a sua cor BRANCA ou PRETA. Ao invés disso. vamos definir o que é uma dimensão de um array. e. na prática. compreendendo 8 valores de cada. não é comum nem recomendável trabalhar com tantas dimensões. ou quantidade de dimensões. é o conjunto de valores que precisamos definir para localizar uma informação. Na prática. pois para localizar um aluno nessa lista basta indicar um valor da sequência. A Listagem 5mostra esse exemplo codificado em Java. Assim. porém. pois há outros recursos na programação orientada a objetos que desencorajam e oferecem alternativas melhores a essa prática. linha e coluna. Vamos também supor que cada valor representa uma String com o nome da peça que ocupa a casa. quase nunca com 3 (três) dimensões. como sendo valores do tipo String. Imprima cada uma das casas do array. A dimensão. Observe o tabuleiro da Figura 1abaixo e crie um programa em Java que o represente através de um array de duas dimensões. crie estruturas com comandos de repetição para preenchê-lo e imprimí-lo.Primeiramente. Observe a utilização de dois valores distintos para localizar uma casa no tabuleiro. uma lista de alunos de 0 a 100 pode ser organizada em um array de uma dimensão. Dica: não tente definir uma a uma. Atividade 2 1. para representarmos um tabuleiro de xadrez com arrays. um par para cada dimensão do array. pois serão 64 linhas de códigos. após iniciá-los.Exemplo de Array bidimensional É possível definir n dimensões. e para cada valor um par de colchetes. Suponha que iremos representar um tabuleiro de xadrez com linhas e colunas de 0 (zero) a 7 (sete).são necessárias duas dimensões. Por exemplo. . é extremamente comum trabalharmos com apenas 1 (uma). Listagem 5 . e algumas vezes com 2 (duas).

é preciso dizer que arrays são também objetos. como no caso de arrays. o length. nem mesmo o tipo. e para realizar operações de manutenção em seus dados. É necessário conhecê-lo para não passarmos do limite. . Tal programa modificado é apresentado naListagem 6. E em alguns casos.Exemplo de uso do atributo lenght de um array Coleções Java A linguagem Java possui um conjunto de classes que servem para armazenar na memória vários objetos. Há 3 (três) tipos principais de objetos Java definidos para esse fim. tais como Strings. Tais classes não possuem o inconveniente de termos que saber de antemão a quantidade exata de elementos que iremos armazenar.Tabuleiro Arrays como objetos Vimos que arrays são estruturas para armazenar objetos. Mas. os arrays possuem métodos e um atributo muito útil. por isso é usado o comando new() para alocar espaço de armazenamento para ele.Figura 1 . Graças a sua capacidade de se comportar como um objeto. Listagem 6 . Pois bem. vamos alterar o exemplo anterior (Listagem 1) que exibe os valores do array marcapara utilizar seu atributo length.que indica seu comprimento. veja-os a seguir.

1. Set – representa a mesma ideia de conjuntos da matemática, ou seja, um grupo de objetos sem ordem definida, porém, únicos. Como mostra a Figura 2.

Figura 2 - Conjunto de objetos

Nunca poderemos prever a ordem com a qual serão apresentados os seus elementos. Essa situação pode não ser um incômodo diante do problema que tivermos. Os sets possuem uma característica importante em relação às buscas de objetos em seu interior, pois não precisam percorrer todos eles. O principal representante dos Set é a classe HashSet, vejamos um exemplo da sua utilização, como mostra a Listagem 7:

Listagem 7 - Exemplo de um Set

2. List – como o próprio nome sugere, representa uma lista de objetos, sendo que nela os objetos podem se repetir. Veja a figura.

Figura 3 - Lista de objetos

Nas listas (List) definidas em Java, os objetos armazenados mantém a ordem com que foram adicionados. Uma classe do tipo List bastante utilizada é a ArrayList, a qual representa uma alternativa aos arrays convencionais vistos anteriormente. Vejamos um exemplo da utilização de um ArrayList na Listagem 8:

Listagem 8 - Exemplo de ArrayList

3. Map – Mapas são estruturas que relacionam um objeto a outro, por exemplo, um número de CEP ao nome de uma rua. Podemos imaginar dois conjuntos, um de campos-chave e outro de objetos-valor que queremos armazenar. Observe aFigura 4:

Figura 4 - Dois conjuntos de objetos

Observe que para encontrarmos nossos objetos precisamos localizá-los através de suas chaves. Vejamos uma aplicação desses conceitos na Listagem 9:

Listagem 9 - HashMap na prática

Os Sets e Lists são do tipo Collection. Apesar de Map não descender de Collection, é também uma classe que define métodos de armazenamento e recuperação de objetos.

Figura 5 -Collection e Map

Todas as classes do tipo Set e List descendem (implementam) a interface Collection. Veremos mais detalhes sobre interfaces em aulas futuras. Por hora, podemos entender interfaces como contratos que definem um conjunto de métodos que devem ser implementados pelas classes. No caso da interface Collection, ela define métodos para adicionar, remover, verificar a presença de um dado objeto. Tais métodos devem necessariamente existir em todas as List e Sets definidos para a linguagem Java. Segue abaixo uma lista básica desses métodos:

Lista básica de Métodos da Interface Collection boolean add(Object) Adiciona um elemento na coleção. Como algumas coleções não suportam elementos duplicados (exemplo: Sets), esses métodos retornam verdadeiro (true) ou falso (false) para indicar se a adição foi bem sucedida. Remove determinado elemento da coleção. Se ele não fizer parte da coleção, retorna falso (false). Retorna a quantidade de elementos presentes na coleção. Procura por um determinado objeto na coleção. Vale salientar: a comparação é feita pelo método equals().

boolean remove(Object) intsize() boolean contains(Object)

Anote a Dica As coleções Java mantêm um mecanismo interno de ordenação e recuperação de dados e para isso fazem uso de tabelas hash. Tais tabelas são utilizadas para que a pesquisa de um objeto seja feita de maneira rápida. Mas, como funciona? Cada objeto é “classificado” pelo seu hashCode, método de java.lang.Object que retorna um int, e com isso podemos agrupar os

Agora. ArrayList e HashMap.asp?comp=3162> <http://javafree.uol. Você viu que a linguagem Java oferece dois mecanismos para armazenar um grande número de objetos: arrays e coleções. que oferecem um conjunto de métodos padronizados para armazenamento e recuperação.Que tipo de coleção se assemelha a um conjunto matemático? Por quê? Explique. Autoavaliação 1 . Já as coleções podem ser usadas para armazenar um conjunto não-finito de elementos.devmedia. Arrays. carne.br/artigo/847654/Collections-Framework.sun.Elabore um programa que exiba um calendário do dia 1 ao dia 31.com. e são implementadas em Java como um conjunto de interfaces.objetos por esse valor. só é percorrido o grupo de objetos com o mesmo hashCode. Leitura Complementar Sobre definição de Arrays <http://pt. feijão.org/wiki/Array> Java na Wikipédia: Dois artigos que falam sobre Collections em <http://www.wikipedia. 2 . Utilize os três tipos de coleções vistos até aqui: oHashSet. é bastante comum precisarmos de um grande conjunto de objetos. Quando é realizada uma busca.com.br/articles/viewcomp. utilizando um array de duas dimensões. Disponível em: <http://java.html>.html> Java Resumo Você estudou hoje que em sistemas grandes. pão etc. Acesso . você já sabe que os Arrays permitem armazenar um conjunto de objetos com tamanho fixo definido na sua inicialização.Qual a principal diferença entre um array convencional e a classe ArrayList que você destacaria? 3 . Atividade 3 Crie um programa que registra uma lista de compras semanais com itens como: arroz.com/docs/books/tutorial/java/nutsandbolts/arrays. Referências THE JAVA tutorials.

sun.com/docs/books/tutorial/collections/interfaces/index. Acesso em: 15 maio 2010. Acesso em: 15 maio 2010. ______. em: ______.com/docs/books/tutorial/collections/implementations/index.html>.em: 15 maio 2010.sun. Lesson: implementations. Lesson: interfaces. Disponível em: <http://java. .html> . Disponível <http://java.

entender o funcionamento da Herança durante a execução do programa. Herança é o mecanismo que permite a uma classe herdar todos os atributos e métodos de outra classe. . o aluno deve: • • • • entender o que é Herança. Ela permite definir a implementação de uma nova classe na definição de uma classe previamente implementada.Orientação a Objetos Vamos começar pela definição de herança.Herança Apresentação Hoje. programar em Java usando a Herança. Figura 1 . conhecer quais os tipos de Herança existentes em POO. Ela é considerada um dos conceitos mais importantes na POO. até então não atendido pela Programação Estruturada. A herança trouxe para a programação um novo olhar sobre a maneira de se programar. você vai aprender sobre mais um pilar de sustentação da Programação Orientada a Objetos: aHerança. Objetivos Ao final da aula.Aula 10 . Herança Você já ouviu falar sobre herança relacionada à programação? Estranho não é? A Figura 1 mostra os pilares da orientação objetos com destaque para a Herança. Como exemplo. observe a Figura 2 a seguir.

Hierarquia de Classe ou de Herança:é o mapeamento do tipo árvore de relacionamentos que se formam entre as classes como resultado da herança. como consequência. Aéreo. A classe Automóvel herda de Terrestre. Considere capacidade como um atributo da classe Transporte. Barco. A Figura 2 apresenta um exemplo de Herança. E. Usando a mesma lógica. E Barco.Figura 2 -Exemplo de Herança entre classes Considere como classes as seguintes abstrações: Transporte. os seus atributos. Para a classe Aquático. também possui o atributo capacidade. Terrestre e Aéreo herdam da classe Transporte. percebemos que na herança os atributos (e também os métodos) são herdados naturalmente pelas classes subsequentes na hierarquia. Terrestre. número de portas e placa como atributos da classe Automóvel. de acordo com a Figura 2. que indica a quantidade de pessoas que o transporte em questão pode transportar.Automóvel e Avião. como herda deAquático. Avião de Aéreo. E cor. A classe Barco herda da classe Aquático. acaba herdando também. Exemplo: a Figura 2 representa uma hierarquia de herança ou hierarquia de classe. Já a classe Automóvel possui cinco atributos: capacidade (herdado de Transporte). a classe Transporte possui um atributo chamado capacidade. pode-se dizer que também possui o atributo capacidade. Aquático.número de rodas (herdado de . finalmente. E número de rodas como um atributo da classe Terrestre. Um aspecto importante que podemos também observar na figura é que toda classe que herda de uma outra. como ela herda de Transporte. Com essa lógica. responda: Quantos e quais são os atributos da classe Terrestre? E da classeAutomóvel? Respondendo: a classe Terrestre possui dois atributos: capacidade (que é herdado de Transporte) enúmero de rodas. onde as classes Aquático. Por exemplo.

• • • • Ancestral: é uma classe que aparece na hierarquia de classes em uma posição acima da progenitora (mãe). quanto mais alta na hierarquia. conseqüentemente. Descendente: dada uma classe.Terrestre). indique quantos e quais são os atributos de cada uma delas. Termos usados para Herança Na literatura. ela passa a ser uma classe mais concreta. cor. Em seguida. Classes que Fornecem a Herança Superclasse Mãe Tipo Classes que Herdam de Outras Subclasse Filha Subtipo Quadro 1 . são apresentados outros termos que são também comumente usados. baseado na hierarquia de herança da qual elas fazem parte. menos abstrata. não seria interessante nem faria sentido para as classesAquático e Aéreo herdar os atributos de Transporte (ou herdar de Transporte). além do atributo capacidade. mais ela tende a ser abstrata em comparação com as suas subsequentes. Isso também garante que a classe tenha mais chance de ser reusada por outras classes que herdem da mesma. Observe na Figura 2 que. menos definida (abstrata) é a classe. possuísse também o atributo número de rodas. número de portas e placa. pois o atributo número de rodas não é desejado por tais classes. são encontrados diversos termos para nomear tanto as classes que fornecem a herança quanto as classes que herdam de alguma outra. Ou seja. quanto mais alto na hierarquia. Entendeu? Não.Termos usados na Herança Nota: a classe filha não pode remover os atributos e métodos da classe mãe. . Atividade 1 Defina alguns atributos adicionais para as classes Aéreo e Avião da Figura 2. Suponha que a classe Transporte. toda classe que aparece abaixo dela na hierarquia é uma descendente da classe dada. Folha: é uma classe sem filhas. está a classe. Raiz (ou Base): é a classe topo da hierarquia. então vamos ao exemplo da figura. Abaixo. Veja exemplos de termos usados no Quadro 1 a seguir. Mas nesse caso. e assim ela define menos atributos e métodos. Ou seja.

classe descendente da classe Veículo. classes em posição inferior na hierarquia. classe ancestral da classe Automóvel. com mais detalhes de informações.Atividade 2 Considerando a hierarquia de herança entre classes da Figura 2. tal como a classe Automóvel. 3. ou seja. apresentada anteriormente. como a classe Transporte. classes superclasse e subclasse. dê exemplos de: 1. tem-se também nos extremos da árvore hierárquica de herança. 4. 2. representam generalizações de classes em posições inferiores (Automóvel. Terrestre) na hierarquia. classe raiz e classe folha. Terreste) Figura 3 -Generalização e Especialização . Na Generalização. A Figura 3 ilustra tais conceitos dentro da hierarquia de classes de transportes. os conceitos de Generalização e Especialização. há classes mais genéricas e abstratas disponíveis. superclasse dela. representam especializações de classes em posição superior (Transporte. Já a Especialização é usada para indicar que classes que estão numa posição inferior na hierarquia possuem estado e comportamento mais especializados. as quais podem ser usadas para outras descenderem delas. Já classes em posição superior. Como pode ser observado. subclasse dela. como o próprio nome sugere. que que não não seja seja Especialização e generalização Assim como os conceitos de classes Abstratas e Concretas.

Funcionamento da Herança Você viu os conceitos sobre Herança. Vale ressaltar que o Objeto1 não percorre toda a árvore hierárquica. não encontrando. No caso da Figura 4. Na linguagem Java. e assim sucessivamente até encontrar o atributo e o valor. Figura 4 -Herança em ação Sabemos que quando criamos um objeto. Herança Simples: Cada classe pode ter apenas uma superclasse. Agora. usa-se Interfaces. vejamos a Figura 4. o objeto consulta a classe da qual ele foi instanciado (ClasseC). mas apenas os atributos das classes . percorre o caminho da classe filha em direção à classe mãe. vamos supor que o Objeto2quer saber o valor do atributoX desse objeto. Para melhor entendermos o funcionamento da Herança durante a execução do programa. através do envio de uma mensagem. Para obter o valor do atributo X. Para simular a herança múltipla em Java. temos uma instância concreta da classe a qual esse objeto representa. esse objeto é representado pelo Objeto1. mas é importante também que possamos entender o que acontece com uma classe que utiliza a Herança durante sua execução. a Herança é simples e na codificação usa-se a palavra reservada extends para declarar que uma classe é herdeira de outra. Outro ponto importante é que o objeto não acumula todos os atributos das classes que fazem parte da hierarquia de herança. embora uma superclasse possa ter várias subclasses. Na Figura 3.Herança múltipla e simples Herança Múltipla: é a capacidade de uma classe possuir mais de uma superclasse e herdar as variáveis e métodos combinados de todas as superclasses. o Objeto1 sai consultando sua árvore hierárquica de classes até encontrar o atributo solicitado pelo Objeto2. consulta a classe mãe dessa mesma (ClasseB).

os atributos de Transporte e Terrestre. o programador (ou outro objeto) pode solicitar à classe Automóvel. para o exemplo acima. Listagem 1 . Veremos códigos mais completos na próxima aula. Como mencionamos anteriormente. Anote a Dica . Eles só não foram escritos para ressaltarmos a construção extends de Java definir a herança entre classes. em Java a palavra-chave extends é usada para indicar que uma dada classe herda de outra.Exemplo de Herança em Java Vale lembrar que quando uma classe herda de outra. tal como o Objeto 2 na Figura 4) de um determinado objeto não sabe (nem precisa saber) se o atributo é dele ou se o atributo é herdado de uma outra classe ancestral dele. Uma dúvida que você pode estar se perguntando é: como os atributos são acessíveis se eles estão declarados como private? Respondendo: considere que para os códigos das classes da Listagem 1 foram declarados os métodosget e set para cada um dos atributos. Herança em Java Depois de termos visto os conceitos sobre Herança. que são também herdados pelas subclasses. Isso significa que. todos os atributos (e métodos) da outra classe passam a fazer parte dessa mesma. Através desses métodos. E os atributos deTransporte são acessíveis a Automóvel devido ao fato de Terrestre herdar de Transporte. vamos finalmente ver a herança nas linhas de código Java. O usuário (programador ou outros objetos. A Listagem 1 apresenta exemplos de código em Java. indicando queTerrestre herda de Transporte e que Automóvel herda de Terrestre.ancestrais a ele. Os atributos deTerrestre são acessíveis na classe Automóvel porque a segunda herda da primeira. podemos acessar facilmente qualquer um dos atributos herdados.

apresentando mais exemplos interessantes do uso de Herança.Sem consultar o material responda: o que você entendeu por Herança? 2 . Leitura Complementar Não faz parte desta disciplina falar sobre interfaces. construtores e os modificadores na Herança. a classe Object é a classe raiz da hierarquia de todas as classes Java. que pode ser acessado pelo seguinte endereço: <http://java. Autoavaliação 1 . Assim. Tal relação também indica que uma classe é do mesmo tipo que outra. Conheceu como funciona a Herança durante a execução do programa e quais são os tipos em que ela é classificada. ancestral de todas as classes da linguagem.tiexpert. chamada Object. você aprendeu que Herança é a capacidade que uma classe tem de herdar as características (atributos) e comportamentos (métodos) de outra classe. Também não é mandatório que você já domine a “simulação” de herança múltipla usando interface em Java. Como leitura complementar. através da sobreposição de métodos. se . sendo. Assim. Na próxima aula. assim como que Terrestre “é um” (ou tipo de) Transporte.Como funcionaria o processo de busca pelos atributos na herança.Qual a diferença entre Herança simples e Herança múltipla? 3 . propomos o próprio tutorial Java da Sun. Anote a Dica Quando uma classe usa a relação de Herança. mesmo que a declaração extendsObject seja omitida.php> Resumo Nesta aula. Para isso. continuaremos abordando esse assunto.A classe Object: todas as classes em Java descende de uma classe.net/programacao/java/heranca.com/docs/books/tutorial/index. podemos dizer que essa classe possui um relacionamento chamado “É um” com a classe da qual ela herda. podemos dizer queAutomóvel “é um” transporte Terrestre. portanto. Você viu também pequenos exemplos de como aplicar a Herança na prática.sun. sugerimos que você primeiro domine a herança simples para no futuro procurar saber sobre o assunto.html> Artigo da web que fala sobre herança: <http://www. nos exemplos anteriores.

THE JAVA tutorials. que é possível chamar todos os métodos get() e set() herdados pela classe Automóvel. Terrestre e Automóvel apresentados na Figura 4. P. e chama todos os métodos set() e get() criados. em: 15 maio 2010. Tradução: João Eduardo Nóbrega Tortello. 2003. Acesso em: 15 maio 2010. 2004. em: Acesso . b) Herança é a característica da OO de ocultar partes da implementação interna de classes do mundo exterior. 2003.fosse solicitado ao objetoAutomóvel a sua capacidade? (Dica: dê uma relida na explicação da Figura 3 da nossa aula). 2002. Aprenda a programar orientada a objeto em 21 dias.Considerando o código das classes Transporte. KÖLLING. São Paulo: Pearson Prentice Hall. ______. Porto Alegre: Bookman. Rio de Janeiro: Editora Campus. SINTES. inclusive das classes Transporte e Terrestre. Em seguida.sun. J. SANTOS. DEITEL. 5 . finalize a implementação delas.html>.com/docs/books/tutorial/java/IandI/subclasses.html>. Observe no seu exemplo. qual se refere ao conceito de Herança? a) Herança é a capacidade de reaproveitar outras classes para compor uma nova classe. Rafael.What is inheritance?Disponível em: <http://java. DEITEL.Java como programar. São Paulo: Pearson Education doBrasil. crie uma classe Principal com um método main() que cria um objeto da classe Automóvel. M.. e) As letras a e d estão corretas Referências BARNES. Michael.Das opções abaixo.sun. 4 .com/docs/books/tutorial/java/concepts/inheritance. c) Herança é a habilidade de objetos de classes diferentes responderem a mesma mensagem de diferentes maneiras.. Introdução à programação orientada a objetos usando Java. d) Herança é o mecanismo que permite a uma classe herdar todos os atributos e métodos de outra classe. anthony.H. David J.Disponível <http://java. adicionando os métodos get() eset() para cada um de seus atributos. Inheritance.Programação orientada a objetos com Java.

ficamos de explicar melhor durante as aulas de Herança. foram dados os primeiros passos sobre o assunto Herança. A Herança e o protected Na aula sobre Encapsulamento (aula 5). durante a execução do programa. você deve ser capaz de: • • • relacionar a herança e o modificador de acesso protected. Isso significa que apenas as classes descendentes de uma determinada classe poderão ter acesso aos atributos e métodos declarados com esse modificador. Naquela aula. um dos pilares da POO. entender o uso da palavra-chave super no contexto de herança entre classes.Herança II Apresentação Na aula passada. Considerando a importância desse tema. Listagem 1 . Serão também apresentados outros exemplos mais sofisticados de implementação de herança na linguagem Java.Herança em Java com protected e private Figura 1 . continuaremos a abordá-lo na aula de hoje. Esse último. focalizando. saber como funciona a herança para os métodos. a herança de comportamento (método). você viu os tipos de modificadores de acesso: public.Aula 11 . sobretudo. Objetivos Ao final desta aula.Esquema de Herança . nós mencionamos que o modificador protected funciona como o private exceto que as classes filhas também terão acesso ao atributo ou método declarado como protected. private e protected.

para que tenham todos os seus atributos declarados como public. portanto. Terrestre e Automóvel da Listagem 1. Observe que tais atributos são acessados e usados livremente no método imprimeDadosAutomovel(). porque a classe Principal não herda da classe Terrestre e. As classes Transporte e Terrestre tiveram seus atributos modificados para serem protected. não é possível acessar tais atributos. isso significa que apenas classes que pertencem à hierarquia de herança podem acessar diretamente esses atributos. Em outras palavras. o qual faz acesso aos atributosprotectedcapacidade e numRodas. Isso só é possível porque agora eles foram declarados como protected. apenas subclasses (ou classes descendentes) de Transporte e Terrestre terão acesso aos seus atributos protected. Em seguida. Nesse caso. respectivamente.A Figura 1 e a Listagem 1 apresentam o exemplo da aula anterior com algumas pequenas modificações. Listagem 3 -Acesso a atributos protected Atividade 1 1. não tem direito a acessar os atributos protected. Modifique as classes Transporte. Listagem 2 -Acesso a atributos protected A Listagem 3 mostra uma tentativa frustrada de acesso aos atributos capacidade e numRodas herdados pela classe Automóvel. dentro de um método main(). tente novamente compilar e executar tais . definidos nas classes ancestrais Transporte e Terrestre. A Listagem 2 abaixo mostra a definição de mais um método na classe Automóvel. 2.

juntamente com a classePrincipal da Listagem 3. Listagem 4 . O que acontece? 4. além do material desta aula. Ela é usada nos construtores para chamada de construtores em cascata das classes mães. explique o que você acha que aconteceu.Herança em Java com uso do operador super A Listagem 4 ilustra um exemplo de herança em Java.classes. a classe mãe ou super-classe. que faz uso da palavrachave super. 3. A palavra super é mais uma das palavras reservadas da linguagem Java que tem uma forte ligação com a herança. . A Herança e o super Em suas pesquisas em outras fontes (tutoriais na internet. livros). Vamos então entender o que acontece quando usamos o comando super em tais contextos. você pode ter encontrado o uso da palavra (ou operador) super nos códigos exemplos. A palavra super refere-se à classe ancestral imediata da classe. A compilação e execução funcionaram corretamente? Se sim. ou seja.

o super tem como parâmetros a capacidade e o numRodasexigidos pelo construtor da classe Terrestre. não é possível incluir nenhum comando antes de super() no código de métodos construtores de classes. Já no construtor da classe Terrestre. observe que o super é usado para chamar o método construtor da classe mãe. Na hierarquia. se quiséssemos poderíamos omitir o super do construtor da classe Transporte. porque durante o processo de compilação ele insere explicitamente tal chamada. Já o construtor da classe Automóvel. acesso web. . Para o nosso exemplo. Na classe Transporte. o super tem como parâmetro a capacidade exigida no construtor da classeTransporte. Atividade 2 Hoje. Pode-se usar super.como a classe mãe de Transporte é Object (vimos na aula passada que Object é o ancestral de todas as classes). A chamada de super equivale a uma chamada explícita ao construtor sem parâmetro da classe Object.. Anote a Dica Apenas comentários são permitidos antes da palavra super nos construtores. mp3. o compilador Java aceita a omissão do super sem parâmetro. o super não tem parâmetro. aquele que simplesmente liga e atende ligações. Vale ressaltar que se o construtor não possui parâmetro. Para isso. a chamada a super na classe Terrestre é no fundo a chamada ao construtor deTransporte.. defina no mínimo três classes. e que vai sendo refinada com várias outras classes que definem celulares mais sofisticados e modernos. câmera digital. Assim. os celulares estão cada vez mais sofisticados. use a hierarquia e nos construtores das classes use o operador super.Primeiro. Observando a Listagem 4 dá para observar que uma chamada a super ocasiona a invocação do construtor da classe mãe. Portanto. para acessar os atributos (ou métodos) da classe mãe. Crie uma hierarquia de classes que possui no topo da hierarquia o celular mais básico. Anote a Dica Da mesma maneira que se usa a palavra-chave this para acessar os atributos (ou métodos) da própria classe. mp4. permitindo assim a configuração de todos os atributos herdados da classe. Isso acaba permitindo uma chamada em cadeia dos construtores de classes ancestrais.

Classe Terrestre .Um exemplo completo Vimos até agora diversos exemplos do uso de herança para acessar atributos das classes ancestrais. Listagem 5 . Vamos mostrar agora a herança utilizando os métodos dessas classes.Classe Transporte Listagem 6 .

Terrestre e Automóvel.Classe Automóvel As Listagens 5. em seguida. Observe pelas . chama dois métodos setCapacidade() e setNumRodas(). incluindo a implementação dos métodos get e set para cada atributo das classes.Listagem 7 . Cada um dos métodos declarados na classe Veículo são herdados pelas classes Terrestre e Automóvel. assim como os métodos declarados pela classe Terrestre são herdados pela classe Automóvel. exatamente como ocorre com os atributos. 6 e 7 apresentam o código das classes Veículo. A Figura 8 apresenta um demétodo main() que cria um objeto da classe Automóvel.

percebe-se claramente que uma vez declarado um método (público ou protected) em uma das classes ancestrais.Classe Principal Um pergunta: será que a Herança também permite o uso de outros métodos diferentes dos get e set para as classes descendentes? A resposta é sim. mesmo o método sendo da classe Terreste a classe Automóvel usa sem restrição. aquele método é visível em objetos das classes filhas.Classe Terrestre com método calculaNumPneusReserva() Na Figura 10. desde que a classe mãe permita. esse método não estará acessível para classes filhas. Como era de se esperar. Listagem 8 . Vejamos um exemplo do uso de outros métodos. os métodos declarados como public e protected na classe mãe. a Herança serve para todos os métodos.Figuras 5 . Assim. Dessa forma. . Vamos acrescentar agora à classe Terrestre um método que calcula o número de pneus reservas. mas são na verdade herdados de suas ancestrais. Listagem 9 . 6 e 7 que tais métodos não pertencem à classe Automóvel. vemos a classe Principal modificada para criar um objeto Automóvel e acessar diretamente o método calculaNumPneusReserva() que foi herdado da classe Transporte. Se um método estiver com modificador private. apenas estão acessíveis para classes filhas.

Uma observação é que os métodos ligar() e atender() não precisam ser criados novamente nas classes filhas. Quando o Objeto2 solicita a execução do metodoX() ao Objeto1.Herança e os métodos . Caso não encontre.Listagem 10 -Método main modificado Atividade 3 Continuando a Atividade 2. ele sai percorrendo sua árvore hierárquica. Nesse caso. em particular. esse último inicialmente procura pelo método na própria classe C que o define. Figura 2 . de maneira similar ao funcionamento para os atributos (ver Aula 10). a ClasseB. acrescente agora os métodos que darão as funcionalidades dos telefones móveis (celulares). A Figura 11 ilustra tal situação. Funcionamento da Herança para os métodos A Herança funciona para os métodos durante a execução do programa. o metodoX() é encontrado logo na primeira classe ancestral visitada. Uma vez que ele deve está presente na classe Mãe da hierarquia (celular mais simples).

unicamp.html> Resumo Nesta aula.org/java-quarta-aula-heranca/> <http://www.Para que serve o modificador de acesso protected? Como ele funciona no caso de Herança entre classes? 2 . substitua na figura o tipo Calendar por String) . Você viu que um método de uma classe mãe para ser herdado em Java por uma classe filha não pode ser declarado como private.dcc.Existe alguma diferença entre o funcionamento da Herança para os atributos e métodos? 4 . Em particular. temos dois links para artigos da web que tratam sobre Herança: • <http://terramel.Para que serve a palavra-chave super? Dê um exemplo concreto do seu funcionamento. obedecendo à hierarquia da figura abaixo: (Obs: Para facilitar. 3 .br/~cmrubira/aacesta/java/javatut10. Autoavaliação 1 .Leitura Complementar A seguir. você aprendeu que a Herança é a capacidade que uma classe tem de herdar as características e comportamentos (atributos e métodos) de outra classe.Descreva o que acontece com o acesso aos atributos e métodos quando são do tipo: • • • public private protected 5 .Crie as classes utilizando o princípio da Herança. foi enfatizado a herança de métodos entre classes.

mostrarChefe() e mostrarAluno().println() em cada um dos métodos. CPF e dataNasc. mostrarChefe() e mostrarAluno(). b) Insira os seguintes métodos. passando os atributos que são mantidos por ela e seus ancestrais. mostrarFuncionario(). o construtor da classe Funcionário deve ter a lista de seus atributos mais os atributos necessários para a classe Pessoa. mostrarPessoa(). mostrarFuncionario(). Para imprimir os atributos. para apresentar os valores dos atributos das classes. às classes Pessoa. E essa lista é acumulativa. respectivamente. a classe Pessoa deve ter nome. ou seja. Funcionário. use o método System. que instancia um objeto de cada uma das classe e exibe os valores dos atributos através de chamadas aos métodos mostrarPessoa().out. Por exemplo. Dica: não deixe de usar a palavra-chave super em cada um dos construtores para chamar o construtor da classe mãe.a) Acrescente aos construtores a lista de parâmetros necessária para instanciar o objeto. ChefeDepartamento e Aluno. . c) Crie uma classe TestaTudo com um método main().

Introdução à programação orientada a objetos usando Java.sun. Rafael. Acesso em: 16 maio 2010. . Disponível em: <http://java.com/docs/books/tutorial/>.Referências SANTOS. Rio de Janeiro: Editora Campus. 2003. THE JAVA tutorials.

Objetivos Ao final desta aula. saber quais são os tipos existentes de Polimorfismo. você deve ser capaz de: • • • • entender o princípio do Polimorfismo. saber o que é Conversão de Tipos. Ele é também bastante importante tanto para o entendimento de programas OO em Java e outras linguagens. ou que pode variar a forma. Esse princípio também aposta na ideia da reutilização para facilitar o dia a dia da programação. Polimorfismo O poliformismo deriva da palavra polimorfo. que significa multiforme.Aula 12 . de Sobreposição e de Inclusão. Para a POO. polimorfismo é a habilidade de objetos de classes diferentes responderem a mesma mensagem de diferentes maneiras. conhecer Polimorfismo de Sobrecarga. como também é um mecanismo bastante sofisticado para permitir a reutilização e flexibilidade durante o desenvolvimento de tais programas. iremos iniciar o aprendizado do último princípio que serve de base para a Programação Orientada a Objeto – o Polimorfismo.Polimorfismo Apresentação Hoje.Pilares da POO Vejamos o seguinte exemplo: um dono de uma fábrica de brinquedos solicitou que seus engenheiros criassem um mesmo controle remoto para todos os brinquedos . Figura 1 . Veja a figura a seguir para entender onde se localiza o pilar do poliformismo dentro da Programação Orientada a Objetos. Ou seja. várias formas de responder à mesma mensagem.

descreva em seu caderno de anotações uma situação em que aconteça o polimorfismo. O controle remoto teria vários botões. Figura 2 -Exemplo de polimorfismo Assim quando o brinquedo recebe o sinal MOVER. automóvel) respondam uma mesma mensagem (mover) de formas diferentes (voar. sendo que todos eles seriam úteis para todos os brinquedos. navegar e correr). barco. quando o usuário clicasse no botão mover. Para o avião. e para o automóvel CORRER. para o barco significa NAVEGAR. ele se move de acordo com a sua função. A Figura 2 ilustra tal situação. Temos aqui então um caso de polimorfismo. mover significa VOAR. Atividade 1 Para avaliar seu entendimento. A única restrição era que cada brinquedo atendesse aos comandos específicos definidos pelo controle.de sua fábrica.o controle enviaria o sinal MOVER para todos os brinquedos que estivessem no raio de dois metros. Tipos de polimorfismo O Polimorfismo pode ser classificado de três maneiras: • • • Polimorfismo de Sobrecarga Polimorfismo de Sobreposição Polimorfismo de Inclusão . O Polimorfismo permite que diferentes objetos (avião. Observe que os brinquedos respondem ao mesmo sinal de formas diferentes. Assim.

Observe agora o último método calcMaior() declarado na classe Maior. Esses métodos fazem a mesma coisa (calculam o maior entre dois números). Listagem 1 . os dois parâmetros são float. O que diferencia cada um deles é o tipo de parâmetros. cujo objetivo é indicar qual é o maior dentre dois números. no terceiro método. O motivo é que já existe um método com o nome calcMaior() e dois parâmetros do tipo double. no caso calcMaior().Polimorfismo de Sobrecarga com tipos de parâmetros diferentes Veja no exemplo uma aplicação prática do uso do polimorfismo de sobrecarga. Já no segundo método. Exemplo Considere uma classe Maior capaz de calcular e retornar o maior entre dois números de tipos diferentes. Esse método.Polimorfismo de sobrecarga Polimorfismo de sobrecarga permite que um método de determinado nome tenha comportamentos distintos. os parâmetros são do tipo double. não será aceito pelo compilador Java como um polimorfismo de sobrecarga. em função de diferentes parâmetros(1) que ele recebe. A Listagem 1 ilustra o código de tal classe. apesar de diferenciar do anterior pelo tipo de retorno de double para int. Esse método seria aceito se houvesse um número diferente de parâmetro ou um dos parâmetros tivesse o tipo diferente de double. No primeiro método. mas de maneiras diferentes. Observe que temos vários métodos com o mesmo nome. pois recebem e retornam tipos diferentes. Cada método difere no número e notipo de parâmetros. . os parâmetros são do tipo int. Finalmente. (1) Lembrando: parâmetros são as variáveis que estão dentro dos parêntesis na declaração do método. Como mostra a Listagem 2.

pois é comum para uma classe ter várias maneiras de instanciá-la. Observe que são declarados 3 construtores e todos eles têm o mesmo nome da classe.Polimorfismo de sobrecarga com tipo e número de parâmetros diferentes Observe que agora os dois últimos métodos possuem número e tipos de parâmetros diferentes dos métodos anteriores. por exemplo. . Assim.Listagem 2 . durante a criação de objetos do tipo Pessoa em um método main. Entretanto. o construtor que será chamado irá depender da quantidade e parâmetros passados durante a invocação do comando new. A Listagem 3 ilustra um exemplo de polimorfismo de sobrecarga nos construtores da classe Pessoa. A sobrecarga e os construtores O polimorfismo de sobrecarga normalmente acontece sobre os métodos construtores. cada um deles recebe um número diferente de parâmetros.

Polimorfismo de sobrecarga de construtores A sobrecarga e a conversão Conversão e sobrecarga frequentemente andam lado a lado. As conversões automáticas são permitidas para tipos de maior precisão e para tipos de menor precisão.Listagem 3 . Exemplos de Conversões Automáticas . Conversão de Tipos Primitivos Java converte um tipo de dado em outro sempre que isso for apropriado. Veja o quadro abaixo sobre conversão de tipos primitivos. A Conversão é a capacidade de um tipo ser convertido em outro tipo de maneira automática ou pela força bruta também chamada de coerção. As conversões ocorrem automaticamente quando há garantia de não haver perda de informação.

Classe Maior com o método calcMaior para os tipos int e float Agora suponha que em uma aplicação (método main) usamos um objeto da classe Maior. . e assim sucessivamente. Por exemplo. A conversão também pode fazer com que um método pareça como se fosse polimórfico. tivesse apenas atributos e métodos para lidar com o tipo primitivo. Observe também algumas conversões permitidas baseadas nas variáveis criadas pelas letras no quadro “Algumas conversões legais”. conforme ilustra a Listagem 4. até chegar o tipo de maior precisão. ao invés de valores do tipo float. internamente. valores do tipoint. na chamada de seu método calcMaior. de short para int. A conversão ocorre quando um argumento de um tipo é convertido para o tipo esperado. fossem passados.. Listagem 4 . descrita anteriormente. suponha que a classe Maior.São permitidas as conversões do tipo byte para o tipo short. que é o double. mas. conforme ilustra a Listagem 5.

Esquema da classe brinquedo Polimorfismo de sobreposição Polimorfismo de sobreposição é a redefinição de métodos em classes descendentes. e os converteu automaticamente para float dentro do método calcMaior da classe Maior apresentada na Listagem 5. parece um caso de polimorfismo de sobrecarga. apesar do método esperar parâmetros do tipo float. (iii)umaclasseC. que implementa um método com o mesmo nome. Figura 3 . Em seguida. . o compilador aceitou receber parâmetros do tipo int. que implementa ummetodoX(). Vejamos o exemplo da Figura 4. mas na verdade o que acontece é uma conversão automática de tipos. escreva um método main que cria diferentes brinquedos fazendo chamadas para seus diferentes métodos construtores e chamando diferentes métodos velocidade().Conversão automática de tipos primitivos Observe que. um método de uma classe filha com o mesmo nome de um método de uma classe mãe irá sobrepor esse último. e. (ii)uma classeB. a classe Brinquedo apresentada na Figura 3 a seguir.Listagem 5 . Nesse caso. Como pode ser observado na hierarquia de classes apresentada. finalmente. Ou seja. Atividade 2 Implemente em Java. que implementa um métodoY(). aplicando o polimorfismo de sobrecarga nos métodos apontados pelas setas. existe: (i) uma classeA.

O polimorfismo de sobreposição em Java Considere que a classe Brinquedo (usada no exercício anterior) possui como descendentes as classesCarro. Devemos observar que. o metodoX() da ClasseA jamais será alcançado. o métodoX() que também é implementado na ClasseB. Avião e Barco. esse método será procurado na hierarquia da classe instanciada pelo Objeto1.Figura 4 -Sobreposição de métodos em uma hierarquia de Herança O que aconteceria do metodoX() ? se fosse solicitado ao Objeto1 da classeC a execução Conforme você viu nas aulas anteriores sobre Herança. Dizemos então que ocorreu uma SOBREPOSIÇÃO DE MÉTODO ou um POLIMORFISMO DE SOBREPOSIÇÃO. O métodoX da classeB sobrepôs (ou redefiniu) o método de sua classe mãe. nesse caso. o método que de fato será executado será o da ClasseB. Nesse caso. . foi encontrado primeiro que o metodoX() da ClasseA. a menos que seja criado um objeto da ClasseA. E nesse caso. conforme ilustra a Figura 5.

ERROR: undefined OFFENDING COMMAND: ‘~ STACK: .