Exercicios Java

download Exercicios Java

of 10

description

Exercicios Java

Transcript of Exercicios Java

UNIVERSIDADE PAULISTA (UNIP)

Universidade Paulista (UNIP)

Campi: Paraso / Chacar Santo Antnio

Disciplina: Linguagem de Programao Orientada a Objetos (LPOO)

Prof. MSc. Vladimir Camelo

Exemplos e Exerccios de Java (Prtico e Terico)

Linguagem de Programao Orientada a Objetos (POO)

Na programao estruturada, as metodologias para a construo de um sistema so:

(i) Quebrar a tarefa principal em subtarefas e estas em subtarefas menores, at que seja possvel implement-las; (topo para a base)

(ii) Implementar procedimentos para resolver tarefas simples e depois agrup-los em procedimentos mais complexos, at se chegar resoluo da tarefa principal. (base para o topo).

As trs das principais atividades envolvidas em um projeto orientado a objetos so:

(i) Identificao dos objetos envolvidos com o sistema a ser desenvolvido e sua representao em forma de classes;

(ii) Identificao de suas caractersticas relevantes e sua representao em forma de atributos;

(iii) Identificao de aes realizadas e servios prestados por esses objetos e sua representao em forma de mtodos.

Como pode ser notado, para compreender a POO preciso analisar o significado de alguns elementos como objeto e classe. Mas para entend-los, dever tambm ser analisado o conceito de atributos e mtodos.

Objetos

Objeto qualquer entidade do mundo real que apresente algum significado, mesmo que tal entidade no se constitua algo concreto ou palpvel. Por exemplo, livro, calado para os ps, cada pea de roupa utilizada, mesa, cadeira, gato, cachorro, computador, caneta, disquete, caderno, carro, avio, etc.

As caractersticas, prprias de cada objeto so chamados de atributos. Os atributos so qualidades que permitem distinguir um objeto de outros semelhantes. Por exemplo, um cachorro pode ser diferenciado de outros por vrios atributos: cor, raa, altura, comprimento, etc. Em outro exemplo, um carro pode ser diferenciado pelos atributos: marca, modelo, ano, cor, placa, chassi, etc.

H atributos compartilhados por dois objetos, assim como h atributos especficos de determinados objetos. Por exemplo, existe uma infinidade de carros cuja cor vermelha, mas no pode haver 2 carros com a mesma placa. Alm de possuir atributos, os objetos podem manifestar comportamentos. Estes comportamentos dizem respeito s aes que os objetos podem realizar ou servios que eles podem prestar e so chamados de mtodos. As pessoas tambm so objetos, pois todas elas possuem caractersticas (nome, idade, pai, me, peso, altura, etc.) e tambm manifestam um comportamento atravs de aes (falam, andam, trabalham, estudam, dormem, etc.).

H tambm os chamados objetos abstratos, como as formas geomtricas, que so abstraes matemticas. No h como encontrar um crculo, uma elipse, um quadrado, um retngulo ou um tringulo no mundo real, mas apenas objetos que tenham essas formas. Isso significa que um crculo, por exemplo, no um objeto palpvel ou concreto, mas ele existe e tem suas caractersticas prprias (raio, rea, etc.).

Ao elaborar um projeto de sistemas, um objeto pode ser representado por meio de elipses. O termos Um e Uma foram utilizados para reforar a idia de que um objeto sempre uma entidade especfica. Um computador, por exemplo, representa um computador especfico e no um conjunto de computadores.

representao de objetos

Classe

O mais importante na POO a identificao de grupos de objetos com atributos comuns. Por exemplo, apesar dos diferentes valores de cada um de seus atributos, os cachorros possuem o mesmo conjunto de atributos: cor, raa, altura, comprimento e peso. Isto faz com que eles pertenam mesma categoria.

Uma classe representa um grupo de objetos com caractersticas comuns e compem-se, basicamente, de atributos e de mtodos. Os atributos representam as caractersticas dos objetos, e os mtodos representam as aes que eles podem realizar ou servios que eles podem prestar.

As classes so representadas, graficamente, atravs de um retngulo dividido em trs partes, como mostra a figura abaixo. A primeira parte contm a identificao da classe, neste exemplo Cliente. A segunda parte contm os atributos da classe: Nome, Endereo, Telefone, E-mail, CPF e RG. A terceira parte contm os mtodos: Compra(), Paga() e Devolve(). O par de parnteses auxilia a distingui-los dos atributos.

Representao de classes

Operaes de Abstrao

O processo de abstrao comea com a criao de uma classe para representar um conjunto de objetos dentro de um sistema. As classes no devem incluir todos os atributos dos objetos e nem todas as suas aes e servios. Somente devem incluir os atributos e as aes (ou servios) pertinentes ao papel a ser desempenhado dentro do programa.

O processo de abstrao compe-se de um conjunto de operaes realizadas com a finalidade de representar objetos do mundo real em forma de classes, de modo que eles possam interagir em um programa para realizar determinadas tarefas. Com isto, deve-se identificar os atributos e mtodos relevantes de cada classe e eliminar os atributos e mtodos desnecessrios.

A figura abaixo mostra o processo de abstrao, ou seja, retirada dos atributos e mtodos desnecessrios, deixando somente os atributos e mtodos relevantes para da classe Cliente.

processo de abstrao

Criar classes que representem os aspectos relevantes de objetos apenas um passo no contexto do processo de abstrao. H, na verdade, seis operaes de abstrao distintas a serem analisadas: (i) Classificao; (ii) Instanciao; (iii) Generalizao; (iv) Especializao; (v) Agregao; (vi) Decomposio.

1. Classificao versus Instanciao

A classificao a operao de abstrao por meio da qual so analisados os objetos do mundo real para identificar suas caractersticas comuns e definir a que classe cada um deles pertence, ou seja, a classificao refere-se criao de uma classe para representar vrios objetos que possuem os mesmos atributos e realizas as mesmas aes.

A instanciao segue o caminho inverso. Ela caracterizada pela criao de objetos a partir de uma classe j existente, ou seja, a operao de instanciao somente pode ser realizada depois de concluda a operao de classificao. A figura abaixo mostra os dois processos discutidos acima.

classificao e instanciao

2. Generalizao versus Especializao

A generalizao a operao de abstrao atravs da qual se procede a anlise de um conjunto de classes e a identificao de caractersticas comuns entre elas, com o objetivo de criar uma classe mais genrica para representar os atributos e mtodos existentes em duas ou mais classes especficas.

A especializao segue o caminho inverso da generalizao. Ela se caracteriza pela criao de duas ou mais classes especficas a partir de uma classe genrica para representar atributos e mtodos que so distintos entre elas. A figura abaixo mostra os dois processos discutidos acima.

generalizao versus especializao

3. Agregao versus Composio

Uma operao de agregao realizada quando um objeto utilizado como parte da composio de outro objeto. Uma operao de decomposio diz respeito atividade voltada para a separao dos objetos que compem outro objeto, isolando-os. A figura abaixo mostra os dois processos discutidos acima.

generalizao versus especializao

BIBLIOGRAFIA BSICA

Santos, Rui R. dos, Programando em Java 2 Teoria e Aplicaes, Rio de Janeiro, Axcel books, 1 edio, 2004.

Boente, A., Aprendendo a programar em Java 2 Orientado a objetos, Rio de Janeiro, Brasport, 1 edio, 2003.

BIBLIOGRAFIA COMPLEMENTAR

Morgan, Michael, Java 2, para programadores profissionais, Axcel books, 1 edio, 2004.

Deitel, H.M., Java, como Programar, So Paulo, Pearson, 1 reimpresso, 2006.

Implementao de Classes

1. Declarao

Para criar uma nova classe basta abrir um novo arquivo-fonte e declar-la de acordo com a sintaxe a seguir.

[encapsulamento] [qualificador] class ...

H dois tipos de classes: externa e interna. Classes externas so aquelas que possuem seus nomes coincidindo com o nome dos arquivos fontes. Classes internas so aquelas escritas dentro das classes externas.

Os termos para encapsulamento e qualificador so opcionais, com exceo para a classe externa que deve possuir o modificador public (pblico). Tanto o encapsulamento, quanto o qualificador possibilitam modificar o tipo de acesso classe. Os modificadores de acesso a uma classe so: public, protected, friendly e private. As formas de qualificar uma classe so: abstract (abstrata) e final (final).

Quando o modificador public, significa que a classe poder ser instanciada e utilizada livremente. Isso serve tanto para classes externas, quanto para classes internas. O modificador protected no se aplica s classes externas e significa que a classe pode ser utilizada apenas no mesmo package (pacote) ou em subclasses da classe externa. Quando a classe no possui modificador (friendly), ela pode ser instanciada e utilizada apenas entre as classes que esto no mesmo package. Finalmente, o modificador private no se aplica s classes externas e pode ser utilizado apenas na mesma classe externa, por classes internas.

O qualificador abstract indica que a classe no poder ser instanciada. Isto significa que nenhum objeto poder ser criado diretamente a partir dela. Esse tipo de classe utilizado para definir superclasses genricas (operaes de generalizao). A aplicao desse qualificador se estende tanto s classes externas quanto s internas. O qualificador final indica que a classe no pode ser estendida, ou seja, no podem ser criadas outras classes a partir dela. Neste tipo de classe no possvel realizar uma operao de especializao. Os qualificadores abstract e final so exclusivos e jamais podem ser utilizados em conjunto.

//importaes ...

//classe externa

public class ClasseTeste {

//classe interna com encapsulador "public" e qualificador "final"

public abstract class ClasseI {

//...

}

protected class ClasseII { //classe interna com encapsulador "pritected"

//...

}

final class ClasseIII { //classe interna sem encapsulador e qualificador "final"

//...

}

//classe interna com encapsulador "private"

private class ClasseIV {

//...

}

//demais mtodos da classe externa ...

//mtodo principal

public static void main(String[] args) {

//...

}

}

2. Instanciao

Instanciar uma classe significa criar um novo objeto a partir dela. Lembrando que todo objeto pertence a uma classe. Todo objeto precisa ser declarado e instanciado. A declarao de objetos feita utilizando a seguinte sintaxe:

A declarao de um objeto sempre iniciar com o nome de uma classe.

Exemplos:

ClasseTeste obj;

String st;

Depois de declarado o objeto precisa ser instanciado atravs da seguinte sintaxe:

= new ([]);

O responsvel pela instanciao do objeto sempre ser um construtor disponvel em sua classe. Todo construtor possui o mesmo nome da classe a que se refere e h um construtor padro na maioria das classes que dispensa o uso de argumentos.

A instanciao feita atravs de uma operao de atribuio em que o objeto recebe o espao na memria que lhe for reservado pelo construtor. O operador new sempre preceder o construtor utilizado nessa operao. Caso seja utilizado o construtor padro, o nome do construtor ser seguido de um par de parnteses sem nada dentro.

Exemplos:

obj = new ClasseTeste();

st = new String(Texto);

A declarao e a instanciao podem ser feitas numa nica instruo atravs da seguinte sintaxe:

= new ([]);

Exemplos:

ClasseTeste obj = new ClasseTeste();

String st = new String(Texto);

possvel criar objetos annimos (aqueles que no possuem nome). Para isso no necessrio criar o nome do objeto durante a instanciao. Esses objetos so utilizados no caso em que a instncia de classe utilizada uma nica vez, diferente dos objetos com nome que podem ser utilizados enquanto estiverem na memria.

Exemplos:

new ClasseTeste();

//importaes ...

//classe externa

public class ClasseTeste {

//classe interna com encapsulador "pritected"

protected class ClasseI {

//...

}

//classe interna com encapsulador "private"

private class ClasseII {

//mtodo da classe interna ClasseII para acesso classe ClasseI

public void acesso() {

//objeto annimo que uma instncia da classe ClasseI

new ClasseI();

}

}

//demais mtodos da classe externa ...

//mtodo principal

public static void main(String[] args) {

//instncia da classe externa ClasseTeste - construtor padro

ClasseTeste obj = new ClasseTeste();

//instncia da classe String - construtor alternativo

String st = new String("Teste");

}

}

Atributos

Os atributos tambm so conhecidos como dados membros ou variveis de instncia. Eles representam as caractersticas dos objetos do mundo real que pertencem classe. Os atributos devem ser declarados entre o par de chaves, que delimita o corpo da classe. So recomendveis que os atributos sejam os primeiros elementos a serem listados. A sintaxe para a declarao de atributos est descrita abaixo.

[encapsulamento] [qualificador] class //declarao da classe

{

;

, ,, ;

... classes internas

... mtodos da classe

}

As diretivas encapsulamento e qualificador determinam as restries de acesso aplicveis ao atributo. No caso do encapsulamento, as restries podem ser public, protected, private ou friendly. Para o qualificador, as restries so final, static, transiente e volatile.

//importaes ...

//classe pblica

public class ClasseAtributo

{

//atributos da classe ClasseAtributo

public final double DB = 10.5; //encapsulamento public e qualificador final

protected int i, j; //encapsulamento protected

static String st; //sem encapsulamento e qualificador static

transient private char[ ] chVetor; //modificador private e qualificador transient

public volatile float db; //encapsulamento public e qualificador volatile

//classes internas ...

//mtodos ...

}

Quando o modificador public, significa que o atributo poder ser utilizado livremente. O modificador protected indica que o atributo poder ser utilizado apenas no mesmo package (pacote) ou em subclasses. Quando o atributo no possui modificador (friendly), ele pode ser utilizado apenas no mesmo package. Finalmente, o modificador private significa que o atributo poder ser utilizado apenas na mesma classe.

O qualificador final indica que o atributo constante. O qualificador static indica que o atributo pode ser utilizado a partir do nome da classe. Ao modificar o contedo de um atributo static, a alterao reflete para todos os objetos. Quando no h qualificador, a alterao realizada num atributo s reverte ao prprio objeto que o alterou, os demais permanecem com seus respectivos valores. O qualificador transient indica que o atributo no persistente e, portanto, no pode ser serializado. Finalmente, o qualificador volatile no permite que o atributo seja armazenado em cache. O tipo pode ser um dos tipos de dados primitivos ou uma classe (tipo objeto) e o nome a identificao do atributo.

Os atributos servem para armazenar informaes, mas para utiliz-los necessrio instanciar a classe a qual eles pertencem, ou seja, criar um objeto a partir dela.

Representao grfica da classe Cliente

O grfico de classe acima representa a classe Cliente com os atributos nome e email do tipo String e credito do tipo double e um mtodo chamado main com um parmetro (vetor) args do tipo String. Um cdigo possvel para a classe acima est descrito abaixo:

//classe externa

public class Cliente {

//atributos

public String nome;

public String email;

public static double credito = 1000.0;

//mtodo principal

public static void main(String[ ] args) {

//instanciaes da classe Cliente

Cliente objcli1 = new Cliente(); //criao do objeto objcli1

Cliente objcli2 = new Cliente(); //criao do objeto objcli2

//manipulao dos atributos da classe Cliente a partir do objeto objcli1

objcli1.nome = new String("Jos da Silva");

objcli1.email = new String("[email protected]");

objcli1.credito = 2600.0; //sem efeito

//manipulao dos atributos da classe Cliente a partir do objeto objcli2

objcli2.nome = new String("Joo dos Santos");

objcli2.email = new String("[email protected]");

objcli2.credito = 8500.0;

//preparao da sada de dados para o cliente 1

String st = "Dados do cliente 1:\n";

st = st + "\nNOME:\t\t" + objcli1.nome;

st = st + "\nEMAIL:\t\t" + objcli1.email;

st = st + "\nCRDITO:\t\t" + objcli1.credito + "\n";

//impresso dos dados do cliente 1

System.out.println(st);

//preparao da sada de dados para o cliente 2

st = "Dados do cliente 2:\n";

st = st + "\nNOME:\t\t" + objcli2.nome;

st = st + "\nEMAIL:\t\t" + objcli2.email;

st = st + "\nCRDITO:\t\t" + objcli2.credito + "\n\n";

//impresso dos dados do cliente 1

System.out.println(st);

}

}

Exerccio

Implemente um cdigo possvel para a classe da figura abaixo.

representao grfica da classe NotaAluno

BIBLIOGRAFIA BSICA

Santos, Rui R. dos, Programando em Java 2 Teoria e Aplicaes, Rio de Janeiro, Axcel books, 1 edio, 2004.

Boente, A., Aprendendo a programar em Java 2 Orientado a objetos, Rio de Janeiro, Brasport, 1 edio, 2003.

BIBLIOGRAFIA COMPLEMENTAR

Morgan, Michael, Java 2, para programadores profissionais, Axcel books, 1 edio, 2004.

Deitel, H.M., Java, como Programar, So Paulo, Pearson, 1 reimpresso, 2006.

1.0 Estruturas Condicionais

O condicional contm a palavra chave if, seguido por um teste booleano. Um opcional else como palavra chave pode ser executado na caso do teste ser falso, Exemplo:

if ( x < y)

System.out.println( x e menor do que y);

else

System.out.println( y e maior);

1.1 Bloco

Um bloco definido por ({}) e contm um grupo de outros blocos. Quando um novo bloco criado um novo escopo local aberto e permite a definio de variveis locais. As variveis definidas dentro de um bloco s podem ser vistas internamente a este, e so terminadas ou extintas no final da execuo deste(}).

void testblock(){

int x = 10, w=1;

if (x> w) { // inicio do bloco

int y=50;

System.out.println(dentro do bloco);

System.out.println(x: + x);

System.out.println(y: + y);

} // final do bloco

System.out.println(w: + w);

System.out.println(y: + y); // erro varivel no conhecida

}

1.2 O operador Condicional

Uma alternativa para o uso do if e else um operador ternrio condicional. Este operador ternrio (?: ) , chamado assim porque tem trs termos como parmetro.

test ? trueresult : falseresult

int menor = x < y ? x : y ; //A varivel menor recebe o valor do menor entre x e y.

1.3 O switch

Um comum mecanismo para substituio de ifs que pode ser usado para um grupo de testes e aes junto a um simples agrupamento chama-se switch.

switch (teste){

case valorum;

resultum;

break;

case valordois;

resultdois;

break;

case valortres:

resulttres;

break;

default: defaultresult;

}

O valor comparado com cada um dos casos relacionados. Se a combinao no for encontrada, o bloco default executado. O default opcional, ento caso este no esteja associado ao comando, o bloco do swicth sem executar nada.

Exerccios para fixao do contedosobre Estruturas condicionais

1. Crie uma classe em Java que receba dois nmeros inteiros positivos e realize a comparao para verificar e apresentar ao usurio qual dos dois nmeros o maior.

2. Crie uma classe em Java que receba do usurio um nmero qualquer e informe ao usurio se este nmero primo ou no.

3. Crie uma classe em Java que implemente um menu com 5 opes, sendo estas: (1) Hambrguer, (2) Sanduche, (3) Misto Quente, (4) Misto Frio e (5) Sair. Apresente este menu para o usurio e solicite que o mesmo informe qual opo deseja escolher. Aps a escolha da opo apresente ao usurio a opo informada.

Exemplos de Classes

Implemente os cdigos das classes em java apresentados abaixo. Anlise e explique como funcionam estas classes neste contexto. Crie o diagrama de classes para os cdigos apresentados abaixo com suas devidas associaes.

----------TestaCarro.java----------------

class TestaCarro{

public static void main(String args[]){

Carro corsa = new Carro();

corsa.setMarca("GM");

corsa.setModelo("Corsa Sedam");

corsa.setCor("Prata");

corsa.setAno(2001);

Carro vectra = new Carro("GM","Vectra 16V","Azul",2000);

System.out.println ("Meu carro e " + corsa.getModelo() );

System.out.println ("Outro carro " + vectra.getModelo() );

}

}

--------------Carro.java----------------

public class Carro {

private Motor motor;

private String modelo;

public Carro(String modelo, int idMotor, int cv) {

this.modelo=modelo;

this.motor=new Motor(idMotor, cv);

}

public int getCV() {

return this.motor.getCV();

}

}

--------------Motor.java----------------

public class Motor {

private int id;

private int cv;

public Motor(int id, int cv) {

this.id=id;

this.cv=cv;

}

public int getCV() {

return this.cv;

}

}

Exerccio 1: Primeira Classe

Descrio do Trabalho: Defina uma classe simples denominada CS em Java com os seguintes atributos: nome, endereco e cargo (todos do tipo String). Crie mtodos de gravao e leitura para os atributos. Faa um programa que crie um objeto dessa classe e leia e mostre os valores referentes a esses atributos. Use a classe Tela para apresentar estes resultados.

Exerccio 2: Atributo Esttico

Descrio do Trabalho: Crie uma classe denominada Est com um atributo esttico do tipo inteiro e um atributo do tipo inteiro no esttico (atr1 e atr2). Crie mtodos mostra_atr1 e mostra_atr2 para apresentar o valor desses atributos. Crie os mtodos inc_atr1 e inc_atr2 para incrementar o valor desses atributos (estes mtodos devem receber um parmetro do tipo inteiro que o valor utilizado como incremento). Faa um programa que crie dois objetos denominados est1 e est2 da classe Est, todos alterando e lendo esse atributo. Faa cada uma das classes incrementar os dois atributos separadamente e mostre seus valores aps os incrementos.

Exerccio 3: Excees

Descrio do Trabalho: Compile o arquivo opcoes.java, erros.java e erros2.java. Execute os programas erros.java e erros2.java. Explique qual a diferena entres essas duas abordagens.

Exerccio 3: Excees - Resposta:

--------- CLASSE OPCOES ---------

public class opcoes {

public void escolha(int op){

switch (op) {

case 1:

System.out.println("Voce escolheu a opcao 1");break;

case 2:

System.out.println("Voce escolheu a opcao 2");break;

default:

throw new RuntimeException("Deu erro");

}

} }

--------- PROGRAMA ERROS ---------

public class erros{

public static void main (String [] arg) {

opcoes op = new opcoes();

try{ op.escolha(4); }

catch (Exception e) { System.out.println("Algum erro");}

finally { System.out.println("Erro tratado");}

} }

--------- PROGRAMA ERROS2 ---------

public class erros2{

public static void main (String [] arg) {

opcoes op = new opcoes();

op.escolha(4);

} }