Lista de Exercícios Resolvidos: Java | Python | VisuAlg | Portugol | C | C# | VB.NET | C++
Você está aqui: Java ::: Dicas & Truques ::: Programação Orientada a Objetos

Como usar classes abstratas em Java - Programação Orientada a Objetos - Java POO

Quantidade de visualizações: 21468 vezes
Classes abstratas (abstract classes) não diferem muito das classes que normalmente criamos, ou seja, elas também podem possuir propriedades e métodos. Porém, não é possível criar instâncias de uma classe abstrata usando o operador new. Veja:

abstract class Pessoa{
  public String nome;
  public int idade;
}

public class Estudos{ 
  public static void main(String args[]){ 
    // cria um objeto da classe Pessoa
    Pessoa p = new Pessoa();
  } 
}

Ao tentarmos compilar este exemplo teremos a seguinte mensagem:

Estudos.java:9: Pessoa is abstract; cannot be 
instantiated
    Pessoa p = new Pessoa();
               ^
1 error


Classes abstratas geralmente contém métodos abstratos (ainda que métodos não abstratos sejam também permitidos). Um método abstrato é um método que possui apenas a assinatura. Não há implementação. Esta implementação deverá ser fornecida pela subclasse ou classe derivada. Uma classe que contém métodos abstratos deverá, obrigatoriamente, ser declarada abstrata. Veja um exemplo de um método abstrato:

public abstract class Pessoa{ 
  public abstract String getNome();
}

Se a classe não fosse declarada com o modificador abstract, teríamos a seguinte mensagem de erro de compilação:

Pessoa.java:1: Pessoa is not abstract and does 
not override abstract method getNome() in 
Pessoa
public class Pessoa{
       ^
1 error


Classes abstratas são um dos tópicos mais complicados da linguagem Java e uma dor de cabeça enorme para aqueles que estão estudando para a certificação Java. Mostramos abaixo algumas dicas resultantes de nossas pesquisas sobre o assunto.

1)Uma classe não abstrata não pode conter métodos abstratos. Se uma classe concreta (não abstrata) herda de uma classe abstrata e não implementa todos os métodos abstratos, a classe derivada deve ser declarada abstract. Além disso, métodos abstratos não podem ser marcados como static. Insistir nisso pode gerar a seguinte mensagem de erro de compilação:

Pessoa.java:2: illegal combination of 
modifiers: abstract and static
  public static abstract String getNome();
                                ^


2) Embora uma classe abstrata não possa ser instanciada usando o operador new, ela pode conter construtores. Tais construtores serão invocados nos construtores das classes derivadas.

3) Uma subclasse pode ser abstrata até mesmo se sua superclasse for concreta. E isso é fácil de notar, uma vez que todas as classes Java herdam de Object, que é concreta.

4) Uma classe derivada pode sobrescrever um método de sua superclasse e declará-lo abstract. Isso faz sentido quando a classe derivada for abstract e quiser tornar o método herdado inválido.

5) Embora uma classe abstrata não possa ser instanciada usando o operador new, ela pode ser usada como um tipo de dados. Esta técnica é útil quando parte do time de desenvolvedores precisa adiantar códigos que dependem de classes que ainda não foram implementadas (e, portanto, herdarão das classes abstratas usadas como tipos de dados) por outra parte do mesmo time.

Link para compartilhar na Internet ou com seus amigos:
Anúncio Patrocinado
Chat de Sexo - Site para adultso - Maiores de 18 anos. Converse com pessoas de todo o Brasil, de forma discreta e anônima

wxWidgets ::: Dicas de Estudo e Anotações ::: Passos Iniciais

Como baixar, compilar a biblioteca e criar um projeto C++ wxWidgets usando o Visual Studio 2017

Quantidade de visualizações: 2065 vezes
O wxWidgets (conhecido anteriormente como wxWindows) é um toolkit para a criação de interfaces gráficas de usuário (UI) multiplataforma. É lançado sob uma licença livre, a wxWindows Library Licence.

Lançada em 1992 por Julian Smart, que continua como desenvolvedor, a biblioteca wxWidgets permite que um programa seja compilado e executado em diversas plataformas de computação, com poucas ou nenhuma modificação. Ela suporta sistemas como: Microsoft Windows, Apple Inc. Mac OS, Linux/Unix (para X11).

A biblioteca é implementada em C++, mas outras implementações estão disponíveis para várias das linguagens de programação mais comuns, entre elas: Python, Smalltalk, Perl e Java.

Fazendo o dowload do código fonte do wxWidgets

Agora que você já sabe o que é o wxWidgets, chegou a hora da notícia triste. Compilar e usar esta biblioteca em nossos programas C++ é um pesadelo, principalmente no Windows. Por isso, resolvi compartilhar com todos as minha experiência, já que o entendimento de todos os passos envolvidos me consumiu alguns finais de semana.

O primeiro passo é baixar o código fonte (source code) do wxWidgets. Para isso aponte o seu navegador para https://www.wxwidgets.org. Para esta dica eu usei a versão 3.1.3 no Visual Studio 2017. Acredito que outras versões, tanto do wxWidgets quanto do Visual Studio C++ tenham procedimentos parecidos.

Vá até a área de downloads e localize o instalador Windows Installer 1.3.1, com o tamanho de 53Mb. Lembre-se que estamos baixando o código fonte da biblioteca, e não os binários já prontos.

Finalizado o download, faça a instalação em um diretório sem espaços. Uma boa sugestão é "C:\wxWidgets-3.1.3"

Compilando o wxWidgets usando o Visual Studio 2017

Chegou a hora da compilação. Se você ainda não o fez, abra o VS 2017, vá no menu Abrir -> Pasta/Solução e navegue até o diretório C:\wxWidgets-3.1.3\build\msw. Neste diretório você encontrará projetos para as mais diferentes versões do Visual Studio. Como estamos usando o VS 2017, o projeto a ser aberto é wx_vc15.sln. Escolhe logo este arquivo e clique Abrir.

Para o processo de compilação nós temos quatro opções: Debug (static), DLL Debug, DLL Release e Release (static). O Debug deixa o executável maior, porque inclui verificações de faixas e outras informações importantes para o desenvolvimento. As versões com DLL são escolhas boas, pois deixa o executável menor e agiliza o processo de compilação. O alvo da CPU pode ser Win32 ou x64, dependendo do seu desejo. Para esta dica eu usei Win32.

Agora vamos compilar para estas quatro opções. Escolha a primeira (Debug), defina a CPU alvo e use a opção Compilar Solução. Pode ir buscar um cafezinho porque o processo é um pouco demorado. Faça isso com as outras três opções de compilação.

Correu tudo bem? Nada de erros? Vamos continuar então.

Criando o seu primeiro projeto wxWidgets para testar sua compilação

Em geral, quando terminamos de compilar o wxWidgets, a primeira coisa que fazemos é abrir uma das samples (amostras) que acompanham a biblioteca, tais como a "minimal", no diretório "C:\wxWidgets-3.1.3\samples\minimal". Se você fizer isso agora, verá que esta aplicação (minimal_vc15.sln) é compilada e executada com sucesso. O problema é quando queremos construir nossa aplicação a partir deste template. O simples fato de renomearmos o projeto ou movê-lo desse diretório já trará uma dor de cabeça danada.

Então vamos criar nosso próprio projeto. Feche e abra o VS 2017 novamente. Em seguida vá até o menu Arquivo -> Novo -> Projeto -> Projeto Vazio. Dê um nome e um local para este projeto, sempre sem espaços e caracteres especiais.

No Gerenciador de Soluções, clique com o botão auxiliar no nó Arquivos de Origem (Source Code) e escolha Adicionar -> Novo Item. Na janela que se abrirá, escolha Arquivo do C++ (.cpp), dê o nome "Main.cpp" e clique Adicionar.

Agora copie o código abaixo (retirado do manual do wxWidgets) e cole no arquivo Main.cpp:

// wxWidgets "Hello World" Program
// For compilers that support precompilation, 
// includes "wx/wx.h".
#include <wx/wxprec.h>
#ifndef WX_PRECOMP
    #include <wx/wx.h>
#endif

class MyApp : public wxApp
{
  public:
    virtual bool OnInit();
};

class MyFrame : public wxFrame
{
  public:
    MyFrame();

  private:
    void OnHello(wxCommandEvent& event);
    void OnExit(wxCommandEvent& event);
    void OnAbout(wxCommandEvent& event);
};

enum
{
  ID_Hello = 1
};

wxIMPLEMENT_APP(MyApp);

bool MyApp::OnInit()
{
  MyFrame *frame = new MyFrame();
  frame->Show(true);
  return true;
}

MyFrame::MyFrame()
  : wxFrame(NULL, wxID_ANY, "Hello World")
{
  wxMenu *menuFile = new wxMenu;
  menuFile->Append(ID_Hello, "&Hello...\tCtrl-H",
    "Help string shown in status bar for this menu item");
  menuFile->AppendSeparator();
  menuFile->Append(wxID_EXIT);
  wxMenu *menuHelp = new wxMenu;
  menuHelp->Append(wxID_ABOUT);
  wxMenuBar *menuBar = new wxMenuBar;
  menuBar->Append(menuFile, "&File");
  menuBar->Append(menuHelp, "&Help");
  SetMenuBar(menuBar);
  CreateStatusBar();
  SetStatusText("Welcome to wxWidgets!");
  Bind(wxEVT_MENU, &MyFrame::OnHello, this, ID_Hello);
  Bind(wxEVT_MENU, &MyFrame::OnAbout, this, wxID_ABOUT);
  Bind(wxEVT_MENU, &MyFrame::OnExit, this, wxID_EXIT);
}

void MyFrame::OnExit(wxCommandEvent& event)
{
  Close(true);
}

void MyFrame::OnAbout(wxCommandEvent& event)
{
  wxMessageBox("This is a wxWidgets Hello World example",
    "About Hello World", wxOK | wxICON_INFORMATION);
}

void MyFrame::OnHello(wxCommandEvent& event)
{
  wxLogMessage("Hello world from wxWidgets!");
}


Assim que você colar esse código, você já verá um monte de erros, várias partes do código sublinhadas de vermelho. Não se desespere que nós vamos corrigir isso agora.

Clique com o botão direito no nó do seu projeto e escolha a opção Propriedades. Nessa janela, localize a opção Configuração e selecione Todas as configurações. Plataforma fica à sua escolha, Win32 (x86) ou x64. Na dúvida deixe Win32.

Agora vá em C/C++, na aba Geral e localize Diretórios de Inclusão Adicionais. Clique e escolha a opção Editar. Adicione uma nova entrada para o diretório "C:\wxWidgets-3.1.3\include" (sem as aspas). Clique a opção Aplicar. Agora, ainda na opção C/C++, escolha Pré-processador, clique Editar e vamos acrescentar o valor WXUSINGDLL. Clique Aplicar novamente e vamos agora até o Veiculador (Linker). Localize Diretórios de Bibliotecas Adicionais e adicione a entrada "C:\wxWidgets-3.1.3\lib\vc_dll". Clique Aplicar.

Agora mude a configuração para Release. Em seguida vá na seção C/C++, localize a opção Diretórios de Inclusão Adicionais e acrescente a entrada "C:\wxWidgets-3.1.3\lib\vc_dll\mswu" (sem aspas). Vá agora no Veiculador (Linker), opção Entrada e informe o valores wxbase31u.lib e wxmsw31u_core.lib para Dependências Adicionais, cada um em uma linha.

Vamos repetir a mesma coisa para a configuração Debug. Dessa vez os valores para Dependências Adicionais na opção Entrada do Veiculador serão wxbase31ud.lib e wxmsw31ud_core.lib (cada um em uma linha). Para finalizar, vá em C/C++ e adicione "C:\wxWidgets-3.1.3\lib\vc_dll\mswud" como uma nova entrada para Diretórios de Inclusão Adicionais.

Chegou o grande momento

Se você seguiu todos os passos atentamente, já está pronto para compilar seu projeto. Dispare a opção Compilar e cruze os dedos. É bem provável que você já veja de cara o erro abaixo:

Erro LNK2019 símbolo externo indefinido _main referenciado na função "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) estudos C:\estudos_wxwidgets\estudos\estudos\estudos\MSVCRTD.lib(exe_main.obj) 1

Se isso acontecer, vá de novo até as propriedades do projeto, selecione Todas as Configurações, localize a opção Veiculador (Linker) e depois Sistema. Em SubSystem, troque o valor Console (/SUBSYSTEM:CONSOLE) por Windows (/SUBSYSTEM:WINDOWS). Tente compilar novamente.

É provável que você encontre mais um erro, e esperamos que será o último.

O programa não pode ser iniciado porque está faltando wxmsw313u_core_vc_custom.dll no seu computador. Tente reinstalá-lo para resolver esse problema.

O programa não pode ser iniciado porque está faltando wxbase313u_vc_custom.dll no seu computador. Tente reinstalá-lo para resolver esse problema.

Isso aconteceu porque você deve estar compilando em Debug DLL ou Release DLL (o que não é uma má idéia). Para resolver, vá até "C:\wxWidgets-3.1.3\lib\vc_dll" e copie essas duas DLLs para o diretório do seu executável (que deve estar dentro da pasta Debug ou Release) ou para o diretório Windows. A opção de colocar junto ao seu executável é melhor, pois evita o risco de erros caso você tiver versões diferentes do wxWidgets no seu sistema.

Abraços e vida longa ao C/C++.


VB.NET ::: Dicas & Truques ::: Matemática e Estatística

Como testar se um número é primo em VB.NET

Quantidade de visualizações: 965 vezes
O Número Primo é o número maior que 1 e que só pode ser dividido por 1 e por ele mesmo, ou seja, números primos não podem ser divididos por outros números, a não ser por ele mesmo e pelo número 1. Dessa forma, 2, 3, 5, 7, 11, 13, 17, etc, são todos números primos.

É importante observar que 0 e 1 não são números primos, e que o número 2 é o único número primo par.

Veja agora um código VB.NET completo que pede para o usuário informar um número inteiro positivo e mostra uma mensagem indicando se o número informado é primo ou não:

Imports System

Module Program
  Sub Main(args As String())
    Dim primo As Boolean = True ' Vamos assumir que o número é primo

    ' vamos solicitar um número inteiro positivo
    Console.Write("Informe um número inteiro positivo: ")
    Dim numero As Integer = Integer.Parse(Console.ReadLine())

    ' o número é negativo?
    If numero < 0 Then
      Console.WriteLine("Número inválido.")
      ' é 0 ou 1?
    ElseIf ((numero = 0) Or (numero = 1)) Then
      Console.WriteLine("Número válido, mas não é primo.")

      ' passou até aqui. Vamos testar se o número é primo
    Else
      For i As Integer = 2 To (numero / 2) Step 1
        ' se passar no teste, não é primo
        If (numero Mod i = 0) Then
          primo = False ' recebe False
          Exit For
        End If
      Next


      If (primo) Then
        Console.WriteLine("O número informado é primo")
      Else
        Console.WriteLine("O número informado não é primo")
      End If
    End If

    Console.WriteLine("\nPressione qualquer tecla para sair...")
    ' pausa o programa
    Console.ReadKey()
  End Sub
End Module

Ao executar este código VB.NET nós teremos o seguinte resultado:

Informe um número inteiro positivo: 9
O número informado não é primo


PHP ::: Dicas & Truques ::: Data e Hora

Como retornar o dia da semana em PHP na forma abreviada e em português usando a função gmstrftime() e o sinalizador "%a"

Quantidade de visualizações: 8348 vezes
Como retornar o dia da semana em PHP na forma abreviada e em português usando a função gmstrftime() e o sinalizador "%a"

Nesta dica mostrarei um código que retorna o nome do dia da semana de forma abreviada e em português usando a função gmstrftime() combinada com o sinalizador "%a". O resultado será agora como "seg", "ter", "qua", etc.

Veja o código PHP completo para o exemplo:

<?php
  // obtemos o locale padrão
  $locale_anterior = setlocale(LC_ALL, NULL); 
  // ajustamos o locale para português brasileiro
  setlocale(LC_ALL, "pt_BR");
  // obtemos o dia da semana   
  $dia_semana = gmstrftime("%a", time());
  // voltamos o locale anterior
  setlocale(LC_ALL, $locale_anterior);
  // e mostramos o resultado
  echo "O dia da semana é: " . $dia_semana;
?>

Ao executar este código PHP nós teremos o seguinte resultado:

O dia da semana é: dom


C# ::: Dicas & Truques ::: Strings e Caracteres

C# para iniciantes - Qual a diferença entre string e String?

Quantidade de visualizações: 12214 vezes
Muitos usuários do nosso site nos enviam essa pergunta, pois ficam confusos com a escrita de "string" e "String". Nesta dica mostrarei a diferença entre esses dois tipos de dados. Comece analisando o código abaixo:

using System;

namespace Estudos{
  class Program{
    static void Main(string[] args) {
      string frase = "Sou uma string";
      String outra = "Sou outra string";

      Console.WriteLine("\n\nPressione uma tecla para sair...");
      Console.ReadKey();
    }
  }
}

Se você tentar compilar o código acima, verá que ele não somente compila como também executa sem problemas. Isso acontece porque, do ponto de vista do compilador e interpretador C#, não há diferença alguma entre "string" e "String".

O tipo string representa uma string de caracteres Unicode (16 bits - 2 bytes) e é um apelido para a classe String da plataforma .NET. O fato de os projetistas da linguagem C# terem permitido a escrita toda em letras minúsculas se deve à frequência com que esse tipo é usado em nossos códigos, se asemelhando aos tipos primitivos int, float, double, etc.


PHP ::: Dicas & Truques ::: Formulários

Como obter o valor do radio button selecionado no formulário HTML usando PHP

Quantidade de visualizações: 50342 vezes
Controles do tipo radio button são úteis quando o usuário deverá marcar apenas UMA entre as várias opções fornecidas. Veja um exemplo abaixo:

<form name="cadastro" method="post" action="testes.php">
  <b></b>Qual sua linguagem favorita?</b><br>
  <input name="linguagem" type="radio" 
    value="Java" checked>Java<br>
  <input type="radio" name="linguagem" 
    value="Delphi">Delphi<br>
  <input type="radio" name="linguagem" 
    value="C++">C++<br>
  <input type="radio" name="linguagem" 
    value="Python">Python<br>
  <input type="submit" value="Enviar!">
</form>

Lembre-se de que um grupo de radio button relacionados deverá ter o mesmo valor para a propriedade name.

Para obter o valor do radio button selecionado, podemos usar o seguinte código PHP:

<?php
  // Obtém o radio button selecionado
  $opcao = $_POST["linguagem"];
  
  // Exibe o resultado
  echo "Sua linguagem favorita é: " . $opcao;
?>



Desafios, Exercícios e Algoritmos Resolvidos de PHP

Veja mais Dicas e truques de PHP

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

Anúncio Patrocinado
Chat de Sexo - Site para adultso - Maiores de 18 anos. Converse com pessoas de todo o Brasil, de forma discreta e anônima


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