Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação Apontamento 4 Fevereiro de 2004 LP: Laboratório de Programação Prof. ISVega Ambiente BlueJ CONTEÚDO 4.1 BlueJ como Ferramenta de Programação 4.1.1 Ativação do Ambiente . . . . . . . 4.1.2 Área de Modelagem . . . . . . . . 4.1.3 Edição e Compilação de Classes . 4.2 Computação com Objetos . . . . . . . . . Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 2 3 5 8 4.1 BlueJ como Ferramenta de Programação O ambiente BlueJ foi desenvolvido como uma ferramenta para o ensino de modelagem com UML1 e desenvolvimento de sistemas de software orientados a objetos em Java. O site oficial do BlueJ é: http://www.bluej.org/. Nele, podem ser encontrados material de apoio, instituições que o utilizam para ensino, experimentos complementares e o próprio ambiente em diversas plataformas. 4.1.1 Ativação do Ambiente A ativação do ambiente BlueJ abre a janela mostrada na Figura 4.1. 1 Unified Modeling Language (UML) é uma notação apropriada para a descrição de vistas de modelos de sistemas de software. O BlueJ faz uso apenas da parte da notação UML referente à representação de classes de objetos. 1 Laboratório de Programação Fevereiro de 2004 Área de Modelagem Serviços Espaço de Objetos Figura 4.1: Janela de abertura do ambiente BlueJ. Esta janela contém uma área de modelagem UML, botões de comandos e um espaço de objetos (na parte inferior). Projetos de Programação A criação de um novo projeto é feita ativando-se o comando Project→New... Este comando habilita o desenho de classes na área de modelagem, conforme ilustrado na Figura 4.2. Figura 4.2: Situação do ambiente BlueJ após a criação de um novo projeto. O ícone na área de modelagem destaca a documentação do projeto. (A estrutura deste documento será apresentada oportunamente.) 4.1.2 Área de Modelagem A área de modelagem do BlueJ é utilizada para a elaboração de diagramas que descrevem vistas estruturais de modelos de software, com ênfase nas classes de objetos. Uma vez aberto um projeto, pode-se desenhar novas classes, como a classe ContaCorrente por exemplo (Figura 4.3). c Copyright °1998-2004, Dr. Italo S. Vega 4-2 Laboratório de Programação Fevereiro de 2004 Figura 4.3: Inserção da classe ContaCorrente na área de modelagem. Observa-se que o desenho da classe ContaCorrente encontra-se hachurado. Isto é uma indicação feita pelo ambiente BlueJ. A indicação se refere à necessidade de se compilar a classe, produzindo a sua versão binária em bytecode. 4.1.3 Edição e Compilação de Classes Antes da compilação, entretanto, será feita uma alteração no texto que descreve a classe ContaCorrente, de modo que seja possível a realização de depósitos de valores. Com o botão direito sobre a classe ContaCorrente, pode-se abrir o editor de classes (Figura 4.4). Figura 4.4: Abertura do editor de classes: seleção de classe e acionamento do botão direito. Apenas para teste inicial, a Figura 4.5 mostra a alteração a ser feita no texto de especificação da classe ContaCorrente. c Copyright °1998-2004, Dr. Italo S. Vega 4-3 Laboratório de Programação Fevereiro de 2004 Figura 4.5: Janela de edição mostrando o texto de uma classe em Java. A alteração introduz o atributo saldo e o método depositar() na classse ContaCorrente: public class ContaCorrente { public double saldo; public void depositar( double valor ) { saldo = saldo + valor; } } O atributo saldo será utilizado para armazenar o valor do saldo de uma particular conta-corrente. O método de depósito, denominado depositar(), será executado por uma particular conta-corrente quando houver uma solicitação para isto. Tal solicitação é conhecida por envio de mensagem. Compilação Nesta mesma janela de edição, acionando-se o botão Compile, ativa-se a compilação do texto presente no editor. Alternativamente, pode-se pressionar o botão direito sobre a classe ContaCorrente (na área de modelagem) e selecionar a opção Compile Figura 4.6. Figura 4.6: Seleção ContaCorrente. da opção que compila a classe Na ausência de erros de compilação, o desenho da classe ContaCorrente na área de modelagem fica “liso”, indicando que a tradução para bytecode foi bem sucedida. c Copyright °1998-2004, Dr. Italo S. Vega 4-4 Laboratório de Programação Fevereiro de 2004 4.2 Computação com Objetos Uma vez compilada, uma classe pode ser utilizada para fabricar objetos. No caso da classe ContaCorrente, pode-se criar um objeto (também conhecido como instância de ContaCorrente), denominado cc1, a partir da própria área de modelagem UML. Com o botão direito sobre a classe ContaCorrente, seleciona-se a opção new ContaCorrente() (Figura 4.7). Figura 4.7: Opção para criação de novos objetos da classe ContaCorrente. O ambiente BlueJ solicita um nome para o novo objeto (neste caso, indica-se cc1), criando e inserindo-o no espaço de objetos (Figura 4.8). O BlueJ colore os objetos com vermelho, deixando as classes em amarelo. Figura 4.8: Os objetos criados são inseridos no espaço de objetos. Mensagens Objetos realizam tarefas quando recebem mensagens, ou seja, quando há uma solicitação para a realização de serviços. Este objeto, em particular, sabe como realizar o serviço denominado depositar(). A lista de serviços que um objeto sabe realizar pode ser determinada clicando-se o botão direito sobre ele. Assim, para solicitar a realização do serviço depositar(), clica-se botão direito sobre o objeto cc1, e, em seguida, o botão esquerdo sobre o serviço depositar(). Este procedimento irá resultar na realização da tarefa de depósito em conta-corrente (Figura 4.9). c Copyright °1998-2004, Dr. Italo S. Vega 4-5 Laboratório de Programação Fevereiro de 2004 Figura 4.9: Momento de envio de uma mensagem para um objeto. Métodos Quando se envia uma mensagem para um objeto, ele passa a executar um método. A solicitação de um serviço corresponde ao envio de uma mensagem, enquanto a realização do serviço corresponde à execução de um método. Um método descreve como um objeto deverá realizar um serviço. Como conseqüência da mensagem solicitando a realização do serviço de depósito, o objeto cc1 passa a executar o método depositar(), que necessita do valor a ser depositado. O ambiente BlueJ abre uma janela solicitando este valor, conforme ilustrado na Figura 4.10. Figura 4.10: Janela do ambiente BlueJ solicitando o valor a ser depositado. Uma vez informado o valor do depósito, pode-se inspecionar a situação do atributo saldo, que deverá ser igual a 100, se este tiver sido o valor informado durante a execução do método depositar(). A inspeção do estado de um objeto pode ser feito como sugerido pela Figura 4.11. Figura 4.11: Mecanismo para inspeção do estado de um objeto no ambiene BlueJ. c Copyright °1998-2004, Dr. Italo S. Vega 4-6 Laboratório de Programação Fevereiro de 2004 A Figura 4.12 mostra o particular estado do objeto cc1 após a realização do serviço de depósito em conta. Figura 4.12: Estado da conta cc1 após o processamento da mensagem depositar(100). Observa-se que o atributo saldo armazena o valor 100.0, conforme a regra de depósito estabelecida no método depositar(). c Copyright °1998-2004, Dr. Italo S. Vega 4-7 Laboratório de Programação Fevereiro de 2004 E XERCÍCIOS 4.1 S ITE DO B LUE J O site oficial do Ambiente BlueJ é www.bluej.org. Tarefa 4.1.1 Faça o download do BlueJ a partir do seu site oficial. Salve o arquivo no diretório c:\bluej. Tarefa 4.1.2 Instale o BlueJ, ativando o arquivo c:\bluej\bluejNNN.jar: > java -jar c:\bluej\bluejNNN.jar 4.2 M ODELAGEM Tarefa 4.2.1 COM C LASSES Seguindo o roteiro descrito no texto: Crie um novo projeto no BlueJ, denominado conta. Tarefa 4.2.2 Na área de modelagem crie a classe ContaCorrente. Porque seu desenho está hachurado? 4.3 E DIÇÃO E C OMPILAÇÃO DE C ONTAS - CORRENTE Seguindo o roteiro descrito no texto: Tarefa 4.3.1 Utilize o editor do ambiente para codificar o método depositar(): public class ContaCorrente { public double saldo; public void depositar( double valor ) { saldo = saldo + valor; } } Tarefa 4.3.2 Compile a classe ContaCorrente utilizando o BlueJ. Se a compilação terminou com sucesso, como se modificou o desenho na área de modelagem? 4.4 C OMPUTAÇÃO E C ONTAS - CORRENTE Seguindo o roteiro descrito no texto: Tarefa 4.4.1 Utilize a área de modelagem e crie um objeto da classe ContaCorrente, batizando-o de cc1. Tarefa 4.4.2 Solicite para o objeto cc1, o depósito de 50. Tarefa 4.4.3 Verifique se o saldo do objeto cc1 é igual â 50. 4.5 D IVERSAS C ONTAS - CORRENTE Seguindo o roteiro descrito no texto: Tarefa 4.5.1 Utilize a área de modelagem e crie dois objetos da classe ContaCorrente, batizando-os de cc1 e cc2. Tarefa 4.5.2 Solicite para o objeto cc1, o depósito de 50. Tarefa 4.5.3 Solicite para o objeto cc1, o depósito de 70. Tarefa 4.5.4 Verifique o saldo dos objetos cc1 e cc2. O que deveria ser feito para que eles passassem a ter o mesmo valor de saldo? c Copyright °1998-2004, Dr. Italo S. Vega 4-8 Laboratório de Programação Fevereiro de 2004 4.6 S AQUES E Tarefa 4.6.1 Utilize o editor do ambiente e codifique o método sacar(): D EPÓSITOS EM C ONTAS - CORRENTE ContaCorrente do exercício anterior: Considerando a classe public class ContaCorrente { public double saldo; public void depositar( double valor ) { saldo = saldo + valor; } public void sacar( double valor ) { saldo = saldo - valor; } } Tarefa 4.6.2 Utilizando a área de modelagem crie um objeto da classe ContaCorrente, batizando-o de cc1. Tarefa 4.6.3 Solicite para o objeto cc1, o depósito de 50. Verifique se o saldo é igual â 50 após o depósito. Tarefa 4.6.4 Solicite para o objeto cc1, o saque de 30. Verifique se o saldo após o saque está correto. Tarefa 4.6.5 O que acontece quando o cc1.saldo == 20 e solicita-se um saque de 40 para cc1? Altere o método sacar() de modo que objetos da classe ContaCorrente rejeitem a realização de serviços de saque que tornem o seu saldo negativo. Tarefa 4.6.6 Crie uma outra conta-corrente identificada por cc2. Faça um depósito de 100 nesta conta. Compare o estado de cc1 com o estado de cc2: eles são iguais? O que deve ser feito para tornar o estado destes objetos iguais? (Proponha uma seqüência de mensagens para atingir tal objetivo.) 4.7 C RITÉRIOS AVALIAÇÃO Em uma escola, os alunos matriculados em um período letivo realizam duas provas (p1 e p2) cujas notas são utilizadas pelos professores para calcular a sua média final: DE mf = (p1 + p2) 2 Tarefa 4.7.1 Crie um novo projeto no BlueJ, denominado avaliacao. Tarefa 4.7.2 Na área de modelagem crie a classe Professor. Tarefa 4.7.3 Utilizando o editor do ambiente, codifique o método calcularMF(): public class Professor { public void calcularMF( double p1, double p2 ) { return ( p1 + p2 ) / 2.0; } } c Copyright °1998-2004, Dr. Italo S. Vega 4-9 Laboratório de Programação Fevereiro de 2004 Tarefa 4.7.4 Utilizando a área de modelagem crie um objeto da classe Professor, batizando-o de ze. Tarefa 4.7.5 Solicite para o objeto ze, a média final de um aluno com notas: p1 = 4.5 e p2 = 6.5. Tarefa 4.7.6 Crie um outro objeto da classe Professor chamado ana e faça a mesma solicitação de cálculo de média final. A professora ana informa o mesmo resultado que o professor ze? Porquê? 4.8 R EVISÃO 1 2 3 4 5 6 7 8 9 10 11 12 Horizontais: 3 Nome da notação utilizada na área de modelagem do BlueJ. 7 Nome popular para as computações realizadas pelos objetos. 10 Área principal de aplicação da ferramente BlueJ. 11 Codificação de um algoritmo para uso de um objeto; descreve como um serviço deverá ser realizado por um objeto. 12 Seu envio desencadeia a execução de um método. c Copyright °1998-2004, Dr. Italo S. Vega Verticais: 1 São fabricadas pelas classes de objetos. 2 Atua como uma variável interna ao objeto, capaz de armazenar valores. 4 Dizse do desenho de uma classe no BlueJ, após uma compilação bem sucedida. 5 Dispositivo computacional responsável pela execução de métodos. 6 Ato de traduzir um programa escrito em uma linguagem de programação de alto nível para uma linguagem de baixo nível. 8 Prncipal elemento de modelagem utilizado na área de modelagem; descreve a estrutura estática e o comportamento dinâmico de uma categoria de objetos. 9 Nome de linguagem binária; é utilizada na compilação de programas escritos em Java. 4-10