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 JavaQuantidade 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 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# APIQuantidade 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 valoresQuantidade 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] 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 PHPQuantidade 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 WindowsQuantidade 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 |
Software 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 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 |