Italo Info


Busca

Resultados encontrados: 32
Calculadora em Java

Olá pessoal, este artigo trata de ensinar como desenhar uma estrela em Java 2D. Caso sinta dificuldade em compreender sobre java swing e Java 2D, bem como, desenhos em Java, recomendo o seguinte artigo para ser estudado antes deste: desenhando-em-java. Então, vamos lá: O resultado final deve ficar conforme a figura abaixo: O painel de desenho tem uma posição na jenala, bem como, largura e altura. Por exemplo, o painel pode ter 500px de largura e 400px de altura. A estrela que queremos desenhar deve ficar centralizada no painel de desenho. Veja abaixo um progótipo da geometria da estrela: Entenda que há um círculo dentro do outro, com ráio correspondente a metade do ráio do círculo maior. Perceba também que esses 2 circulos foram divididos em 5 partes. Como o ângulo total de um circulo inteiro é 360º, cada fatia do círculo corresponde a 360/5, que é igual a 75º. Logo cada fatia tem 1/5 dos círculos. Mas, você deve estar se perguntando: O que é que isso tem há ver com o desenho de uma estrela? Então, a estrela tem cinco pontas. Perceba que as linhas que dividem os círculos em 5 fatias poderiam ser as pontas de uma estrela circunscrita no círculo maior. Agora, entenda a figura abaixo: Agora veja abaixo uma figura que ilustra melhor a geometria da estrela: Perceba que a figura acima tem 10 pontos laranjas. São eles que devem ser as 10 coordenadas armazenadas em 2 vetores de 10 posições. Se conseguirmos calcular as coordenadas desses pontos, a sequencia deles corresponde ao polígono representante da estrela que queremos desenhar. Acima, o código fonte da parte lógica relacionada ao desenho da estrela centralizada. Perceba que foram definidos dois vetores de 10 posições para armazenar as coordenadas X e Y dos pontos pintados de laranja na figura anterior. Nas variáveis "w" e "h" ficam armazenadas as dimensões do painel e nas variáveis "x" e "y", ficam as coordenadas do centro do painel de desenho. Perceba que os dois raios: "r1" e "r2", correspondem aos raios dos círculos maior e menor, respectivamente. Perceba o ângulo 0º e o -90º. Queremos que nosso polígono começe com as coordenadas polares (r1, -90º) ou (r1, -PI/2). Perceba também, a variável "ainc", que corresponde a 1/5 do ângulo total do círculo que é 360°. Logo, "ainc" é iqual a 75º, sendo que o valor está em radianos no programa Java acima. Como 180° correspondem a PI, -90º correspondem a -PI/2. O for tem a variável "i" que varia de "0" a "4". Logo, em cada iteração, as variáveis "a" e "a2" assumem os seguintes valores: A expressão "i*2" corresponde, respectivamente em cada iteração, a: 0, 2, 4, 6, 8 A expressão "i*2+1" corresponde a: 1, 3, 5, 7, 9 Logo, veja agora cada ponto do polígono em coordenadas polares: (r1,-90º),(r2,-52.5º),(r1,-15º),(r2,21.5º),(r1,60º),(r2,107.5°),(r1,135º),(r2,172.5º),(r1,210º),(r2,247.5º) Para converter de coordenadas polares para cartesianas, basta seguir as seguintes fórmulas: Por isso essas fórmulas foram utilizadas em: Onde, o raio é "r1", e o ângulo é "a", e os valores "x" e "y" são somados as coordenadas cartesianas para centralizar a estrela. Os valores das coordenadas encontradas com a aplicação das fórmulas é armazenado em "xvet[i*2]", que corresponde a "X" na fórmula, e em "yvet[i*2]", que corresponde a "Y" na fórmula de conversão de coordenadas polares para cartesianas. A seguir o código completo da classe que desenha a estrela e, também, de uma thread que altera o valor de "ainicial", que inicia em -90º, de modo a rotacionar a figura e, fazendo assim, uma animação com a rotação da estrela: Experimente colocar o código acima numa classe Java, compilar e rodar para ver o resultado! É isso pessoal, até a próxima! e, em Quadrado, a chamada de qualquer um desses métodos seta, tanto a base quanto a altura, com o mesmo valor. Dado isto, analise o código da classe Testador. Perceba que o método "teste" dela recebe uma instância de Retangulo como parâmetro. No entanto, se uma instância de Quadrado for passada como parâmetro, uma exceção é lançada. Dado isto, podemos chegar a conclusão que não é uma boa ideia, nesse exemplo, fazer Quadrado extender Retangulo! Uma possível solução de refatoramento é mostrada logo abaixo: Perceba agora que a responsabilidade para alterar os atributos das classes Quadrado e Retangulo foi passada para o método "main" da classe Principal. Inclusive, o método "teste" da classe Testador também foi alterado para receber, agora, uma Figura, que pode ser uma instância de Quadrado ou Retangulo, e um valor esperado para testar. No método "main", agora é passado o valor esperado como parâmetro para o método "teste". Agora, vamos ver o Interface Segregation Principle (ou Princípio da Segregação de Interface). Esse, princípio também é simples de entender. A ideia é evitar que interfaces sejam implementadas com métodos vazios na classe derivada. Veja o exemplo abaixo: O cachorro é um animal, e ele nada e caminha. Por isso, os dois métodos da interface Animal são implementados pela classe Cachorro. No entanto, o cavalo é também um Animal, só que não nada! Por isso, o método "nada" da classe Cavalo está vazio. Então, há no código acima uma violação ao Princípio da Segregação de Interface. Onde deve-se atribuir a cada interface, apenas os métodos que serão herdados por todas as suas classes derivadas! Veja abaixo como ficaria então a alteração para não violar o princípio: Perceba agora que foi criada mais uma interface: A interface AnimalQueNada. Dado que esta herda de Animal, herdando também seu método "caminha". Logo, a classe Cachorro deve implementar a interface AnimalQueNada e a classe Cavalo deve implementar a interface Animal, evitando assim a sobrescrita com métodos vazios. Agora, vamos ao último princípio: O Dependency Inversion Principle (Princípio da Inversão de Dependência). Esse princípio pode visto como o seguinte: A inversão de dependência está na dependência da abstração, ao invés da depencência direta da classe com a implementação concreta. Agora vamos analisar o exemplo de código abaixo: Perceba no código acima que o módulo de mais baixo nível é a classe Pintor e a classe de mais alto nível é a classe PainelDesenho. Perceba que a classe PainelDesenho depende da implementação, isto é, da classe concreta Pintor. Logo, se quisessemos mudar o desenho de "desenhaQuadrado" para "desenhaCirculo", seria necessário alterar em PainelDesenho A seguinte linha: Isto é um problema porque o ideal é não necessitar mexer na classe PainelDesenho para alterar o desenho a ser mostrado. Dado o problema, vamos ao exemplo que resolve o problema, respeitando ao princípio da inversão de dependência por criar uma abstração dos "desenhos": Assim, se precisarmos alterar o desenho, basta fazer sem depender de alterações na classe PainelDesenho. Por exemplo, apenas passando para o método "setDesenho" da classe PainelDesenho o devido desenho que deve ser mostrado, conforme acontece no método "main" da classe Principal! Chegamos ao final de mais um artigo. Este foi sobre os princípios S.O.L.I.D. Até o próximo! (Oloruntoba, S) - SOLID: os primeiros 5 princípios do design orientado a objeto. Acessado em: 27/10/2023. Disponível em: https://www.digitalocean.com/community/conceptual-articles/s-o-l-i-d-the-first-five-principles-of-object-oriented-design-pt (Dirani, L) - Princípio da Substituição de Liskov (LSP). Acessado em: 27/10/2023. Disponível em: https://medium.com/fora-de-assunto/princ%C3%ADpio-da-substitui%C3%A7%C3%A3o-de-liskov-lsp-78628484e97d (Paixão, J) - O que é SOLID: O guia completo para você entender os 5 princípios da POO. Acessado em: 27/10/2023. Disponível em: https://medium.com/desenvolvendo-com-paixao/o-que-%C3%A9-solid-o-guia-completo-para-voc%C3%AA-entender-os-5-princ%C3%ADpios-da-poo-2b937b3fc530 o método main está a instanciação dos decoradores. Esse código desenha um retângulo, um losango e um círculo, formando uma figura semelhante a bandeira do Brasil. Veja abaixo o resultado: Decoradores de desenhos - Bandeira do Brasil Agora veja o resultado com a pequena alteração abaixo no método "main": DesenhoDecorator decorator = new TelaDesenho(); decorator = new RetanguloDesenho( decorator, 300, 250, Color.WHITE ); decorator = new CirculoDesenho( decorator, 75, Color.RED ); Decoradores de desenhos - Bandeira do Japão Abaixo o link de download do código fonte do projeto que desenha uma bandeira. Link de download: decorator-exemplo.zip Após baixar o projeto, você pode compilar se estiver com o JDK. Então, use a linha de comandos para entrar na pasta base do projeto descompactado e utilize o seguinte comando para compilar: javac -d bin src/bandeira/desenho/*.java src/bandeira/*.java Agora para rodar, basta utilizar o seguinte comando: java -cp bin bandeira.BandeiraMain Baixe, compile e rode o projeto e experimente adicionar novos decoradores, ou remover decoradores encadeados ou, mesmo, alterar a ordem das instâncias e teste novamente para ver que gráfico é gerado! Finalizando... Esse é o final de mais um artigo sobre padrões de projeto. Desta vez, o padrão decorator foi discutido aqui. Espero que tenham gostado e, até o próximo! 1435 Escrito por: Ítalo Herbert Última alteração feita em: 25/10/2024 19:37:57 Tags relacionadas: decorator, prog, programação, java, padrão, design, patterns, qualidade, código Você também pode gostar: Desenho da bandeira do BrasilPadrão SingletonPadrão ObserverPrincípios SOLIDDesenhando em Java Deixe seu comentário Nome: E-Mail: Comentario: obrigatório Mostrar na lista de comentários Código de verificação: Digite o código: obrigatório Enviar Limpar Comentários postados: Nenhum comentario visível postado até o momento, deixe o seu! Política de privacidade Produzido por Ítalo Herbert 0