Quiz sobre a classe GUI em Java
53 Questions
1 Views

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson

Questions and Answers

Qual é a função do método initGUI() na classe GUI?

  • Cria um canal de comunicação
  • Configura e manipula a interface gráfica (correct)
  • Inicializa a base de dados
  • Envia mensagens entre processos

A classe Application é responsável por abrir e fechar o canal de comunicação.

False (B)

Quais componentes gráficos são mencionados na classe GUI?

JLabel, JTextField, JButton, JCheckBox

O método enviarMensagem() utiliza o método putInt() de __________ para colocar a informação nos campos da mensagem.

<p>MappedByteBuffer</p> Signup and view all the answers

Associe as classes com suas responsabilidades principais:

<p>Classe GUI = Representar a interface gráfica do utilizador Classe Application = Iniciar o sistema e executar o programa CanalComunicacao = Gerenciar a comunicação entre processos CanalComunicacaoConsistente = Possibilitar a comunicação sincronizada entre robôs</p> Signup and view all the answers

Qual é o principal método da classe CanalComunicacao responsável por receber mensagens?

<p>receberMensagem() (B)</p> Signup and view all the answers

O método fecharCanal() é utilizado para liberar os recursos após a utilização do canal de comunicação.

<p>True (A)</p> Signup and view all the answers

Qual variável é inicializada como 0 no construtor da classe CanalComunicacao?

<p>indiceMensagens</p> Signup and view all the answers

Qual é o estado inicial do sistema?

<p>DORMIR (D)</p> Signup and view all the answers

O estado DORMIR pode ser ativado apenas pelo uso da interface gráfica do utilizador.

<p>False (B)</p> Signup and view all the answers

O que o código gui.getBD().getReproduzir() ativa?

<p>O estado REPRODUZIR.</p> Signup and view all the answers

O sistema volta ao estado DORMIR quando a reprodução é __________.

<p>terminada</p> Signup and view all the answers

Qual comando informa que a reprodução deve ser interrompida?

<p>!gui.getBD().getReproduzir() (C)</p> Signup and view all the answers

Associe os estados ao seu significado:

<p>DORMIR = Estado inicial do sistema GRAVAR = Inicia a gravação das mensagens REPRODUZIR = Executa as mensagens gravadas TERMINAR = Acaba com o funcionamento do sistema</p> Signup and view all the answers

O segundo robô pode reproduzir comandos gravados pelo primeiro robô.

<p>True (A)</p> Signup and view all the answers

Quais problemas foram identificados durante a experiência com o robô?

<p>O segundo robô não voltava a imitar o primeiro quando parado por alguns minutos.</p> Signup and view all the answers

Qual é a função do JCheckBox 'Ativar/Desativar' no código?

<p>Ativar ou desativar uma ação específica (C)</p> Signup and view all the answers

O JLabel 'Gravar' está alinhado à direita na interface.

<p>False (B)</p> Signup and view all the answers

Qual é o nome da fonte utilizada para os componentes nesta interface?

<p>Tahoma</p> Signup and view all the answers

O JLabel que indica a ação de _____ está localizado na posição (10, 173).

<p>Imitar</p> Signup and view all the answers

Associe os elementos com suas respectivas descrições:

<p>chckbxImprimir = Opção para imprimir lblRobotNome_1_1 = Indica a consola lblRobotNome_1_2 = Indica a ação de gravar lblRobotNome_1_3 = Indica a ação de imitar</p> Signup and view all the answers

Qual é a principal função do método getIndex() na classe CanalComunicacaoConsistente?

<p>Obter o índice da mensagem (A)</p> Signup and view all the answers

O método CanalLock() garante que múltiplos processos possam utilizar o canal ao mesmo tempo.

<p>False (B)</p> Signup and view all the answers

Qual método é chamado para liberar o canal de comunicação?

<p>CanalRelease</p> Signup and view all the answers

O método _______ é utilizado para enviar uma mensagem para o canal garantindo acesso exclusivo do processo.

<p>enviarMensagem</p> Signup and view all the answers

Combine os métodos com suas respectivas descrições:

<p>getIndex = Busca o índice da mensagem CanalLock = Bloqueia o canal para uso exclusivo CanalRelease = Libera o canal após o uso toString = Converte a mensagem em formato String</p> Signup and view all the answers

No contexto da classe Mensagem, qual é a função do método toString()?

<p>Retorna uma string que representa os campos da mensagem (B)</p> Signup and view all the answers

O método getAndSetConsumidor() sempre retorna true, indicando sucesso na operação.

<p>False (B)</p> Signup and view all the answers

O que o método getAndSetProdutor() faz?

<p>Recebe a mensagem do Produtor e retorna true se o comando for 0.</p> Signup and view all the answers

Qual é a função do OFFSET_IDXPUT no canal de comunicação?

<p>Indicar a posição onde o índice de escrita será armazenado. (D)</p> Signup and view all the answers

O botão do processo IG tinha um comando associado antes da correção.

<p>False (B)</p> Signup and view all the answers

Qual o tipo de arquivo criado ao abrir um canal de comunicação?

<p>RandomAccessFile</p> Signup and view all the answers

O método __________ é responsável por armazenar o índice de leitura no buffer.

<p>storeInBuffer</p> Signup and view all the answers

Associe os métodos às suas funções:

<p>loadFromBuffer = Recupera o índice de escrita armazenado storeInBuffer = Armazena o índice de leitura inicial abrirCanal = Inicia o canal de comunicação limparCanal = Limpa o canal após a abertura</p> Signup and view all the answers

Quais os valores atribuídos a OFFSET_IDXGET e OFFSET_IDXPUT após a abertura do canal?

<p>n_mensagens * TAMANHO_MENSAGEM e n_mensagens * TAMANHO_MENSAGEM + 4 (D)</p> Signup and view all the answers

O código contém tratamento para a exceção FileNotFoundException.

<p>True (A)</p> Signup and view all the answers

Qual é a finalidade do método Thread.yield() no método storeInBuffer?

<p>Permitir que outros threads sejam executados.</p> Signup and view all the answers

O valor inicial de OFFSET_IDXPUT é definido como __________.

<p>n_mensagens * TAMANHO_MENSAGEM</p> Signup and view all the answers

Associe as exceções às suas descrições:

<p>FileNotFoundException = Arquivo não encontrado durante a abertura IOException = Erro durante operações de entrada/saída</p> Signup and view all the answers

Qual é a finalidade da classe CanalComunicacao?

<p>Gerenciar a comunicação entre robôs e a aplicação. (A)</p> Signup and view all the answers

Os offsets servem para garantir que os dados escritos no buffer circular não sejam sobrescritos ou perdidos.

<p>True (A)</p> Signup and view all the answers

Qual é o tamanho em bytes de uma mensagem definida na classe CanalComunicacao?

<p>16</p> Signup and view all the answers

A função limparCanal(int n_mensagens) é utilizada para enviar mensagens _____ para o canal.

<p>vazias</p> Signup and view all the answers

Associe as classes com suas respectivas funções:

<p>CanalComunicacao = Gerenciar a comunicação com o robô CanalComunicacaoConsistente = Garantir operações de leitura e escrita consistentes Mensagem = Representar uma mensagem de controle Gravador = Registrar mensagens em um arquivo</p> Signup and view all the answers

O que acontece com o buffer quando receberMensagem() é chamado e não há mais mensagens disponíveis?

<p>O buffer é reposicionado para o início. (C)</p> Signup and view all the answers

A classe Gravador é responsável por enviar mensagens sem controle de simultaneidade.

<p>False (B)</p> Signup and view all the answers

Qual comando é associado ao valor 4 na classe Mensagem?

<p>Parar</p> Signup and view all the answers

A classe BD é responsável por _____ interagir com a interface gráfica e o robô.

<p>controlar</p> Signup and view all the answers

Qual é a função do método canalLock() na classe CanalComunicacao?

<p>Capturar um bloqueio no canal. (A)</p> Signup and view all the answers

O método getAndSetConsumidor() lê mensagens antigas sem limpá-las do buffer.

<p>False (B)</p> Signup and view all the answers

O que é a classe RobotLegoEV3 utilizada para?

<p>Controlar o robô Lego EV3.</p> Signup and view all the answers

O parâmetro 'comando' da classe Mensagem controla a _____ do robô.

<p>ação</p> Signup and view all the answers

O método enviarMensagem(Mensagem msg) faz parte de qual classe?

<p>CanalComunicacao (D)</p> Signup and view all the answers

Flashcards

Classe GUI

Esta classe representa a interface gráfica do utilizador. Contém diversos componentes gráficos (ex.: JLabel, JTextField, JButton, JCheckBox) que permitem a interação com o utilizador. Inclui campos para 'Imitar' e 'Gravar' para guardar e reproduzir ações.

Classe Application

Esta é a classe principal que inicia o sistema. Configura a interface (GUI) e tem o método main() que executa o programa.

Classe CanalComunicacao

Esta classe permite a comunicação entre o TP1 e a interface gráfica (IG), preparando o caminho para a sincronização entre robôs.

Construtor CanalComunicacao()

O construtor da classe CanalComunicacao, que inicializa a classe com valores padrão para as variáveis.

Signup and view all the flashcards

abrirCanal()

Este método abre um canal de comunicação criando um ficheiro chamado "comunicacao.dat" e mapeando o seu conteúdo para memória.

Signup and view all the flashcards

receberMensagem()

Este método recebe uma mensagem e decompõe-a em quatro campos inteiros (index, comando, argumento1 e argumento2).

Signup and view all the flashcards

enviarMensagem(Mensagem msg)

Este método envia um objeto Mensagem como uma mensagem, colocando a informação nos campos index, comando, argumento1 e argumento2 no buffer.

Signup and view all the flashcards

fecharCanal()

Este método fecha o canal de comunicação para liberar os recursos.

Signup and view all the flashcards

O que faz o método getIndex()?

O método getIndex() retorna o índice da mensagem. Este método pertence à classe CanalComunicacaoConsistente.

Signup and view all the flashcards

O que é a classe CanalComunicacaoConsistente?

A classe CanalComunicacaoConsistente herda da classe CanalComunicacao e implementa novos métodos para gerenciar a comunicação com o canal.

Signup and view all the flashcards

Como o construtor CanalComunicacaoConsistente() funciona?

O método construtor CanalComunicacaoConsistente() utiliza o construtor da classe pai (super()) para herdar suas funcionalidades.

Signup and view all the flashcards

Qual é o propósito do método CanalLock()?

O método CanalLock() bloquea o canal usando FileLock, garantindo que apenas um processo (TP1 ou IG) possa acessá-lo por vez.

Signup and view all the flashcards

Para que serve o método CanalRelease()?

O método CanalRelease() libera o canal, permitindo que outros processos acessem-no após o uso.

Signup and view all the flashcards

Como o método enviarMensagem() garante a comunicação segura?

O método enviarMensagem() usa FileLock para garantir acesso exclusivo ao canal durante o envio de uma mensagem.

Signup and view all the flashcards

Como o método receberMensagem() garante comunicação segura?

O método receberMensagem() utiliza FileLock para garantir acesso exclusivo ao canal durante o recebimento de uma mensagem.

Signup and view all the flashcards

O que faz o método getAndSetConsumidor()?

O método getAndSetConsumidor() recebe uma mensagem do Consumidor (IG). Se o comando da mensagem for 0, ele reenvia a mensagem para o canal e retorna true. Caso contrário, retorna false.

Signup and view all the flashcards

Diagrama de Estados (Classe Gravar): Estado DORMIR e GRAVAR

A classe Gravar encontra-se no estado DORMIR inicialmente. O sistema entra no estado GRAVAR ou REPRODUZIR quando o utilizador escolhe uma destas opções. O estado GRAVAR ativa o código gui.getBD().getGravar(), começando a gravação dos movimentos do robô. Depois de gravar todas as mensagens, o sistema volta para o estado DORMIR.

Signup and view all the flashcards

Diagrama de Estados (Classe Gravar): Estado REPRODUZIR

O estado REPRODUZIR é iniciado com gui.getBD().getReproduzir() e reproduz as mensagens gravadas. O estado termina quando todas as mensagens são reproduzidas ou por ordem do utilizador. O comando !gui.getBD().getReproduzir() ativa a transição de volta para o estado DORMIR.

Signup and view all the flashcards

Diagrama de Estados (Classe Gravar): Terminar o Sistema

Quando o sistema está em DORMIR, o utilizador pode terminar o sistema.

Signup and view all the flashcards

GUI TP1: Campo de Procura de Ficheiros IG

Um campo para procura de ficheiros IG foi adicionado à GUI do TP1. Após a gravação de movimentos do primeiro robô, o ficheiro IG pode ser carregado para reproduzir no segundo robô.

Signup and view all the flashcards

Problema: Robô Imitador

O segundo robô não consegue imitar o primeiro robô após ser parado por alguns minutos e depois ativado novamente.

Signup and view all the flashcards

Código: Iniciar Gravação

O código gui.getBD().getGravar() inicia a gravação de movimentos do robô.

Signup and view all the flashcards

Código: Verificar Mensagens Gravadas

O código gui.getBD().getMensagensGravar().isEmpty() verifica se existem mensagens gravadas.

Signup and view all the flashcards

Código: Iniciar Reprodução

O código gui.getBD().getReproduzir() inicia a reprodução das mensagens gravadas.

Signup and view all the flashcards

OFFSET_IDXPUT e OFFSET_IDXGET

Variáveis utilizadas para controlar os índices de escrita e leitura no buffer de comunicação, garantindo uma manipulação eficiente de mensagens e evitando colisões.

Signup and view all the flashcards

abrirCanal(String ficheiro, int n_mensagens)

Método que abre um canal de comunicação com um ficheiro, mapeia-o para memória e inicializa os índices de escrita e leitura.

Signup and view all the flashcards

loadFromBuffer(int offset)

Função que recupera o índice armazenado no buffer, permitindo que o processo de escrita continue a partir do ponto em que parou.

Signup and view all the flashcards

OFFSET_IDXPUT

Localização no buffer onde é armazenado o índice de escrita.

Signup and view all the flashcards

storeInBuffer(int offset, int value)

Função que armazena o índice de leitura no buffer, sincronizando o estado de leitura no buffer.

Signup and view all the flashcards

OFFSET_IDXGET

Localização no buffer onde é armazenado o índice de leitura.

Signup and view all the flashcards

FileLock fl = canalLock()

Bloquear o acesso ao buffer antes de realizar uma operação, permitindo que apenas um processo tenha acesso ao buffer simultaneamente.

Signup and view all the flashcards

canalRelease(fl)

Liberar o acesso ao buffer após uma operação, permitindo que outros processos possam aceder ao buffer.

Signup and view all the flashcards

limparCanal(int n_mensagens)

Função que limpa o canal de comunicação, preparando-o para uma nova sessão de comunicação.

Signup and view all the flashcards

Thread.yield()

Utilizar o método 'Thread.yield()' para dar tempo a outros processos para executar.

Signup and view all the flashcards

O que a variável bd e o método getImitar() representam?

A variável bd é usada para acessar e modificar o estado de um objeto que provavelmente controla ações de imitação e gravação do robô. O método getImitar() retorna o estado atual da imitação (verdadeiro ou falso).

Signup and view all the flashcards

O que o botão chckbxImprimir faz?

Esta linha de código define um botão de seleção (JCheckBox) chamado chckbxImprimir que permite ao usuário ativar ou desativar a impressão. Quando o botão é pressionado, uma ação (ActionListener) é configurada para atualizar o estado de impressão do robô usando o método getImprimir() da variável bd.

Signup and view all the flashcards

O que o código JLabel lblRobotNome_1_1 = new JLabel("Consola"); define?

Este código define um rótulo (JLabel) chamado lblRobotNome_1_1 e o configura como a palavra "Consola". Este tipo de rótulo provavelmente serve para indicar uma caixa de texto ou área onde o usuário interage e recebe mensagens do robô.

Signup and view all the flashcards

O que o botão chckbxAtivardesativar faz?

Este código define um botão de seleção (JCheckBox) chamado chckbxAtivardesativar para ativar ou desativar a ação de imitar. O botão está inicialmente desabilitado (setEnabled(false)) e provavelmente será ativado por outros componentes da interface.

Signup and view all the flashcards

Como a ação do botão chckbxAtivardesativar afeta a imitação do robô?

O código bd.setImitar(!bd.getImitar()); dentro do ActionListener do botão chckbxAtivardesativar inverte o estado atual de imitação do robô. O método setImitar() atualiza o estado de imitação, usando a negação (!) para inverter a ação de imitar.

Signup and view all the flashcards

Classe CanalComunicacaoConsistente

A classe representa um canal de comunicação consistente. Ele estende a classe CanalComunicacao e adiciona mecanismos de sincronização para evitar acesso simultâneo ao canal por diferentes partes do sistema.

Signup and view all the flashcards

index

O atributo representa o índice atual da última mensagem lido no canal. Serve para rastrear a posição do leitor no buffer circular.

Signup and view all the flashcards

canalLock()

O método tenta obter um bloqueio no canal, garantindo que apenas um processo possa aceder ao canal de cada vez. Isto é essencial para garantir a consistência e evitar conflitos de acesso.

Signup and view all the flashcards

canalRelease(FileLock fl)

O método libera o bloqueio previamente obtido no canal, permitindo que outros processos possam aceder ao canal de comunicação.

Signup and view all the flashcards

getAndSetProdutor(Mensagem m)

O método getAndSetProdutor envia uma mensagem para o canal de comunicação. Ele verifica se há um espaço vazio, reposiçãoa o buffer, envia a mensagem e incrementa o índice.

Signup and view all the flashcards

getAndSetConsumidor()

O método getAndSetConsumidor lê uma mensagem do canal de comunicação. Ele verifica se a mensagem não é vazia, reposiciona o buffer para limpar a mensagem lida, envia uma mensagem vazia para o canal e aumenta o índice.

Signup and view all the flashcards

Classe Mensagem

O método representa a classe Mensagem, que encapsula a informação a ser transmitida através do canal. A informação é organizada utilizando os atributos index, comando, arg1 e arg2.

Signup and view all the flashcards

getIndex()

O método implementa o atributo index da classe Mensagem, que representa o índice da mensagem na sequência de mensagens enviadas.

Signup and view all the flashcards

Study Notes

Fundamentos de Sistemas Operativos - Trabalho Prático 2

  • Autores: Pedro Grilo (A51319), Fernando Prates (A51635), Ana Silva (A50247)
  • Data: 27-12-2024
  • Título do Trabalho: TP2 - 32D - G05
  • Objectivo: Implementar uma interface gráfica intuitiva usando a biblioteca Swing e desenvolver uma aplicação multiprocesso para a gestão e comunicação entre dois processos JAVA com memória partilhada usando a classe JAVA MappedByteBuffer.
  • Introdução: O trabalho apresenta o desenvolvimento de uma interface gráfica intuitiva e uma aplicação multiprocesso que permite a comunicação entre dois processos JAVA, criando um desafio interessante para compreender melhor a gestão entre processos e, como consequência, controlar os robôs de forma sincronizada.
  • Desenvolvimento:
    • Aula Prática 1: Desenvolvimento da GUI para os processos, baseado na GUI do TP1, com funcionalidades como Lançar IG, procurar ficheiros, e a activação do modo Debug.
    • Aula Prática 2: Mapeamento do código em UML utilizando a ferramenta MagicDraw para documentar os requisitos, a arquitectura e o design do software e identificar possíveis problemas.
    • Aula Prática 3: Elaboração das classes CanalComunicacao e CanalComunicacaoConsistente, responsáveis pela comunicação entre os processos TP1 e IG. As classes permitem abertura e fecho do canal, envio e recepção de mensagens, e sincronização dos robôs.
    • Aula Prática 4: Desenvolvimento e implementação do código de sincronização de movimento dos dois robôs e criação da classe Imitar.
    • Aula Prática 5: Criação de um diagrama UML de estados para guiar a implementação do código, especificamente para a gestão de tarefas no processo Gravar.
    • Aula Prática 6: Melhorias na GUI e na sincronização dos robôs, incluindo um campo na GUI do TP1 para a selecção de ficheiros de comunicação (Ficheiro IG) para reprodução futura das acções do processo TP1.
    • Pontos Corrigidos: Corrigidos problemas de comunicação, falhas no comportamento do segundo robô e funcionalidades do botão no processo IG.
  • Conclusão: O documento apresenta os resultados do trabalho prático, descrevendo as funcionalidades e ajustes realizados, para uma maior consistência e estabilidade no canal de comunicação entre os processos.

Código e Classes

  • O documento contém vários ficheiros de código-fonte (java) para diferentes funcionalidades e classes, incluindo detalhamento para classes como:
    • CanalComunicacao.java: Classe responsável por gerir a comunicação entre processos, providenciando métodos para abrir, fechar, receber e enviar mensagens.
    • CanalComunicacaoConsistente.java: Classe que estende CanalComunicacao, adicionando o recurso de FileLock para garantir acesso exclusivo ao canal.
    • Mensagem.java: Classe representando uma mensagem de comunicação entre processos, contendo os parâmetros de uma mensagem.
    • Gravador.java, Imitar.java, Reproduzir.java, Evitar.java, Fugir.java, Vaguear.java. Classes contendo lógica para tarefas específicas, controlando o comportamento do robot (ex: gravação de acções, execução de comandos, etc.).
    • App.BD.java: Classe com um armazenamento e gestão de variáveis necessárias para o correcto funcionamento da aplicação e dos seus componentes, incluindo atributos para a gestão do robot.
    • App.GUI.java: Classe responsável por toda a interface gráfica.
    • Application.java: Classe principal que controla o início e a execução global da aplicação, configurando as interfaces dos processos e controlando thread.

Relações entre as Classes

  • O documento descreve as relações das classes usando diagramas UML, incluindo:
  • Relações de Herança: Classes que herdam funcionalidades de outras.
  • Relações de Uso: Classes que usam os serviços de outras.
  • Classes como Mensagem, CanalComunicacao, e CanalComunicacaoConsistente têm conexões específicas, indicando como a comunicação e sincronização entre os processos são implementadas.

Índice de Imagens

  • As imagens apresentam representações gráficas e exemplos visuais do programa, permitindo o entendimento visual da aplicação.

Studying That Suits You

Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

Quiz Team

Related Documents

Description

Teste seus conhecimentos sobre a classe GUI em Java, incluindo o método initGUI() e suas interações com outras classes como Application e CanalComunicacao. Explore os componentes gráficos, estados do sistema e responsabilidades das classes. Avalie sua compreensão dos métodos utilizados na comunicação entre robôs.

More Like This

Use Quizgecko on...
Browser
Browser