Você está aqui: Java ::: Desafios e Lista de Exercícios Resolvidos ::: Programação Orientada a Objetos

Exemplo de interface e polimorfismo em Java - A interface Forma e as classes Retangulo e Circulo - Exercícios Resolvidos de Java

Quantidade de visualizações: 298 vezes
Pergunta/Tarefa:

O objetivo deste exercício é demonstrar como podemos usar polimorfismo para manipular dois objetos diferentes a partir de uma interface em comum. Para isso, crie uma interface Forma contendo dois métodos: area() e perimetro().

Em seguida crie as classes Retangulo e Circulo, que implementam a interface Forma e fornecem suas próprias implementações para os métodos area() e perimetro(), ou seja, demonstre que as formas de calcular a área e o perímetro são diferentes entre os dois objetos.

Para finalizar, na classe principal da aplicação Java, crie objetos das classe Retangulo e Circulo e use um objeto da interface Forma para representá-los. Atenção: é permitido criar apenas uma variável do tipo Forma para acessar os dois objetos. Ao fazer isso você estará, obrigatoriamente, usando polimorfismo.

Sua saída deverá ser parecida com:

Base do retângulo: 5
Altura do retângulo: 3
A área do retângulo é: 15.0
O perímetro do retângulo é: 16.0

Raio do círculo: 4
A área do círculo é: 50.26548245743669
O perímetro do círculo é: 25.132741228718345 
Resposta/Solução:

Veja a resolução comentada deste exercício usando Java:

O primeiro passo é a criação da interface Forma, que declara os métodos area() e perimetro():

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package estudos;

// definição da interface Forma
public interface Forma {
  // método que calcula a área
  double area();
  // método que calcula o perímetro
  double perimetro();
}

Em seguida criamos a classe Retangulo, que implementa a interface Forma e fornece sua própria implementação para os métodos area() e perimetro():

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package estudos;

// definição da classe Retangulo, que implementa
// a interface Form
class Retangulo implements Forma {
  private double base;
  private double altura;

  // construtor da classe Retangulo
  public Retangulo(double base, double altura) {
    this.base = base;
    this.altura = altura;
  }

  // vamos sobrescrever o método area() definido na
  // interface Forma
  @Override
  public double area() {
    return this.base * this.altura;
  }

  // vamos sobrescrever o método perimetro() definido na
  // interface Forma
  @Override
  public double perimetro() {
    return 2 * (this.base + this.altura);
  }
}

Em seguida criamos a classe Circulo, que também implementa a interface Forma e sobrescreve os métodos area() e perimetro(), ou seja, fornece sua própria implementação desses métodos:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package estudos;

// definição da classe Circulo, que implementa a
// interface Forma
class Circulo implements Forma {
  private double raio;

  // construtor da classe Circulo
  public Circulo(double raio) {
    this.raio = raio;
  }

  // vamos sobrescrever o método area() da
  // interface Forma
  @Override
  public double area() {
    return Math.PI * this.raio * this.raio;
  }

  // vamos sobrescrever o método perimetro() da
  // interface Forma
  @Override
  public double perimetro() {
    return 2 * Math.PI * this.raio;
  }
}

Finalmente nós criamos a classe principal que nos permitirá criar um retângulo e um círculo e mostramos suas áreas e perímetros. Note o uso de uma variável do tipo Forma para acessar os objetos Retangulo e Circulo. Isso é polimorfismo ao vivo e a cores:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package estudos;

import java.util.Scanner;

public class Estudos {
  public static void main(String[] args) {
    // uma referência para a interface Forma 
    Forma forma;
    
    // para ler a entrada do usuário
    Scanner entrada = new Scanner(System.in);

    // vamos pedir para o usuário informar a base e a
    // altura do retângulo
    System.out.print("Base do retângulo: ");    
    double base = Double.parseDouble(entrada.nextLine());
    System.out.print("Altura do retângulo: ");    
    double altura = Double.parseDouble(entrada.nextLine());
    
    // agora criamos um objeto da classe Retangulo. Note que a
    // a variável é do tipo da interface Forma
    forma = new Retangulo(base, altura);
    
    // e mostramos a área e o perímetro do retângulo
    System.out.println("A área do retângulo é: " + forma.area());
    System.out.println("O perímetro do retângulo é: " + forma.perimetro());
    
    // vamos pedir para o usuário informar o raio do círculo
    System.out.print("\nRaio do círculo: ");    
    double raio = Double.parseDouble(entrada.nextLine());
    
    // agora criamos um objeto da classe Circulo. Note que a
    // a variável é do tipo da interface Forma
    forma = new Circulo(raio);
    
    // e mostramos a área e o perímetro do circulo
    System.out.println("A área do círculo é: " + forma.area());
    System.out.println("O perímetro do círculo é: " + forma.perimetro());
  }
}


Link para compartilhar na Internet ou com seus amigos:

JavaScript ::: Dicas & Truques ::: Strings e Caracteres

Como converter uma string em um valor de ponto-flutuante em JavaScript usando a função parseFloat()

Quantidade de visualizações: 7589 vezes
Em algumas situações nós precisamos receber uma string informada pelo usuário e convertê-la para um valor real válido. Um valor em JavaScript é o mesmo que um valor com casas decimais, ou seja, um valor de ponto-flutuante.

Esta tarefa pode ser realizada com o auxílio da função parseFloat(). Veja uma página HTML completa demonstrando o seu uso:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

<!doctype html>
<html>
<head>
  <title>Strings em JavaScript</title>
</head>
<body>

<script type="text/javascript">
  var valor1 = "87.32";
  var valor2 = "Arquivo";
  var valor3 = "65,54";
 
  // vamos exibir os resultados
  document.write(parseFloat(valor1) + "<br>");
  document.write(parseFloat(valor2) + "<br>");
  document.write(parseFloat(valor3));
</script>
  
</body>
</html>

Ao executarmos este código JavaScript nós teremos o seguinte resultado:

87.32
NaN
65

Note que apenas a primeira string pôde ser convertida para um valor fracionário com sucesso.


AutoCAD .NET API C# ::: Dicas & Truques ::: Linha, Linhas, Comando LINE

Como selecionar uma linha no AutoCAD e mostrar a equação da reta correspondente usando AutoCAD .NET C# API

Quantidade de visualizações: 172 vezes
Em algumas situações nós queremos posicionar pontos ou outros desenhos em cima de uma linha, ou seja, em cima de uma reta. Uma das melhores formas de fazer isso é obtendo a equação reduzida da reta e usar as coordenadas x e y correspondentes.

Nesta dica eu mostro como isso pode ser feito usando a AutoCAD .NET C# API. O primeiro passo é pedir para o usuário selecionar a linha na área de desenho do AutoCAD usando doc.Editor.GetEntity().

Em seguida nós obtemos as coordenadas iniciais e finais da linha usando as propriedades StartPoint e EndPoint do objeto AcadLine. Para finalizar nós calculamos a equação reduzida da reta e exibimos o resultado.

Fique atento ao código que calcula o coeficiente angular e linear da reta. Considere o caso em que o coeficiente angular ou linear é igual a 0.

Veja o código AutoCAD .NET API C# completo para o exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;

[assembly: CommandClass(typeof(PluginEstudos.Class1))]
namespace PluginEstudos {
  public class Class1 {
    [CommandMethod("estudos")]
    public void Estudos() {
      // vamos obter o documento atual
      Document doc = Application.DocumentManager.MdiActiveDocument;
      // vamos obter a base de dados
      Database db = doc.Database;

      // opções da seleção
      PromptEntityOptions opcoes = new 
        PromptEntityOptions("\nSelecione uma linha: ");

      // obtemos o resultado da seleção
      PromptEntityResult resultado = doc.Editor.GetEntity(opcoes);

      // a seleção foi feita com sucesso
      if (resultado.Status != PromptStatus.OK) {
        Application.ShowAlertDialog("Nenhum elemento selecionado.");
        return;
      }

      // obtemos o id do objeto selecionado
      ObjectId id_objeto = resultado.ObjectId;

      // iniciamos uma transação
      using (Transaction trans = db.TransactionManager.StartTransaction()) {
        BlockTable tabela_blocos;
        BlockTableRecord reg_tabela_blocos;

        // obtemos a entidade selecionada
        Entity ent = trans.GetObject(id_objeto, OpenMode.ForWrite) as Entity;
        
        // a entidade selecionada é uma linha
        if (ent is Line) {
          Line linha = ent as Line;
          // vamos obter o ponto inicial da linha
          Point3d ponto_inicial = linha.StartPoint;
          // vamos obter o ponto final da linha
          Point3d ponto_final = linha.EndPoint;
          string sinal = "+";
          // vamos calcular o coeficiente angular da reta
          Double m = (ponto_final.Y - ponto_inicial.Y) / (ponto_final.X - ponto_inicial.X);
          // vamos calcular o coeficiente linear
          double n = ponto_inicial.Y - (m * ponto_inicial.X);

          // coeficiente linear menor que zero? O sinal será negativo   
          if (n < 0) {
            sinal = "-";
            n = n * -1;
          }

          // abre o model space para escrita
          tabela_blocos = trans.GetObject(db.BlockTableId,
            OpenMode.ForRead) as BlockTable;
          reg_tabela_blocos = trans.GetObject(tabela_blocos[BlockTableRecord.ModelSpace],
            OpenMode.ForWrite) as BlockTableRecord;

          // vamos calcular as coordenadas x e y do ponto médio que
          // será usado para posicionar o texto
          double x = (ponto_inicial.X + ponto_final.X) / 2;
          double y = (ponto_inicial.Y + ponto_final.Y) / 2;

          // criamos um novo texto
          DBText texto = new DBText();
          texto.TextString = "y = " + m.ToString("0.00") + "x"
            + " " + sinal + " " + n.ToString("0.00");
          texto.SetDatabaseDefaults();
          texto.Height = 5;
          texto.Position = new Point3d(x, y - texto.Height, 0);
          // adicionamos o texto no desenho
          reg_tabela_blocos.AppendEntity(texto);
          trans.AddNewlyCreatedDBObject(texto, true);
        }
        else {
          Application.ShowAlertDialog("Você não selecionou uma linha.");
        }

        // salvamos a transação
        trans.Commit();
      }
    }
  }
}

Ao executar este código AutoCAD .NET C# API e selecionar uma linha nós teremos um resultado parecido com:

Selecione uma linha [Usuário seleciona a linha]
[Mostra a equação reduzida da reta como um texto posicionado no ponto médio da linha]

Como forma de testar ainda mais o código, defina um valor para o x e experimente plotar um ponto na área de desenho do AutoCAD. Você verá que o ponto cai exatamente em cima da linha, ou seja, da reta que a representa.


Python ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes)

Exercício Resolvido de Python - Como percorrer todos os elementos de um vetor de inteiros e exibir a soma de seus valores

Quantidade de visualizações: 656 vezes
Pergunta/Tarefa:

Considere o seguinte vetor de inteiros:

// um vetor de inteiros contendo sete elementos
valores = [4, 5, 1, 8, 2, 2, 10]
Escreva um programa Python console ou GUI que usa um laço for para percorrer todos os elementos deste vetor e exibir a soma de seus valores. Seu programa deverá exibir uma saída com a mensagem:

A soma dos valores do vetor é: 32

Resposta/Solução:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

# método principal
def main():
  # um vetor de inteiros contendo sete elementos
  valores = [4, 5, 1, 8, 2, 2, 10]
    
  # o primeiro passo é criar uma variável que vai receber a soma
  # dos valores dos elementos
  soma = 0

  # agora vamos usar uma laço for para percorrer todos os elementos
  # do vetor, obter o valor do elemento atual e adicionar ao valor atual
  # da variável soma
  for valor in valores:
    soma = soma + valor
  
  # vamos exibir a soma dos valores do vetor
  print("A soma dos valores do vetor é: {0}".format(soma))
    
if __name__== "__main__":
  main()



PHP ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes)

Vetores e Matrizes em PHP - Como sortear um ou mais elementos de um vetor em PHP

Quantidade de visualizações: 14449 vezes
Nesta dica mostrarei como usar a função array_rand() da linguagem PHP para sortear elementos de um vetor (array). Coloque o código abaixo na sua página e atualize-a várias vezes para ver o resultado:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

<html>
<head>
<title>Estudando PHP</title>
</head>
<body>
 
<?php
  $pessoas = array();  
  $pessoas[0] = "Carlos";
  $pessoas[1] = "Juliana";
  $pessoas[2] = "Igor";
  $pessoas[3] = "Marcelo";
 
  // sorteia um elemento
  $sorteado = array_rand($pessoas, 1);
  echo "O sorteado foi: " . $pessoas[$sorteado] . 
    "<br><br>";
 
  // sorteia dois elementos
  $sorteados = array_rand($pessoas, 2);
  echo "Os sorteados foram: <br>";
  for($i = 0; $i < count($sorteados); $i++){
    echo $pessoas[$sorteados[$i]] . "<br>";
  }
?>

</body>
</html>

Ao executar este código nós teremos um resultado parecido com:

O sorteado foi: Carlos

Os sorteados foram:
Carlos
Igor


C# ::: Windows Forms ::: TextBox

C# Windows Forms Avançado - Como rolar as linhas de um TextBox para o fundo (parte inferior) usando a API do Windows

Quantidade de visualizações: 6687 vezes
Em algumas situações gostaríamos de rolar para baixo (fundo) o conteúdo de um TextBox de múltiplas. Para isso podemos usar a API do Windows, mais especificamente a mensagem WM_VSCROLL com o valor SB_BOTTOM para seu parâmetro wParam. O valor do parâmetro lParam é zero.

Veja um trecho de código que rola para baixo o conteúdo de um TextBox. Antes de executar este exemplo, tenha a certeza de ter um TextBox de múltiplas, com barras de rolagem e conteúdo que force o aparecimento das barras de rolagem.

Comece adicionando a linha:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

using System.Runtime.InteropServices;

na seção de usings do seu formulário ou classe. Em seguida adicione o trecho de código abaixo no corpo da classe, como um método:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

[DllImport("user32.dll", EntryPoint = "SendMessage", 
  CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, 
  IntPtr wParam, IntPtr lParam);

Finalmente coloque o código abaixo no evento Click de um botão:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

private void button2_Click(object sender, EventArgs e){
  // antes de executar este exemplo certifique-se de que
  // a propriedade Multiline do TextBox esteja definida
  // como true e a propriedade ScrollBars contenha o valor
  // Vertical ou Both
  textBox1.Multiline = true;
  textBox1.ScrollBars = ScrollBars.Vertical;
    
  // constante para a mensagem WM_VSCROLL
  const uint WM_VSCROLL = 0x115;
  // constante para o parâmetro wParam
  const int SB_BOTTOM = 7;
  
  // handle para a caixa de texto
  IntPtr handle = textBox1.Handle;
  IntPtr wParam = (IntPtr)SB_BOTTOM;
  IntPtr lParam = IntPtr.Zero;
  
  // vamos fazer com que o TextBox role para o fundo (parte inferior)
  SendMessage(textBox1.Handle, WM_VSCROLL, wParam, lParam);
}



Desafios, Exercícios e Algoritmos Resolvidos de C#

Veja mais Dicas e truques de C#

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: Delphi
6º lugar: C
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2024 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 64 usuários muito felizes estudando em nosso site.