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

Qual a diferença entre classe abstrata e interface em Java

Quantidade de visualizações: 551 vezes
Esta é uma pergunta clássica feita pelos estudantes de programação orientada a objetos em Java, e merece uma discussão mais aprofundada, com exemplos.

Vamos começar então.

1) Uma classe abstrata pode possuir variáveis de instância, enquanto uma interface não pode conter variáveis de instância. Veja:

package arquivodecodigos;

public interface Boleto{
......


Este código compila normalmente, mas, dentro da IDE, temos uma advertência do tipo "O nome da constante não segue as convenções de nome codigo". O que é isso? Este warning diz que devemos trocar a variável de instância por uma constante. Veja:

package arquivodecodigos;

public interface Boleto{
......


Agora a advertência some, ou seja, uma interface pode possuir constantes, mas não pode possuir variáveis de instância. E isso fazer sentido. Como não é possível usar new para construir uma instância de uma interface, não há vantagem nenhuma em definirmos variáveis de instância nas mesmas.

2) Uma classe abstrata pode possuir um construtor, enquanto uma interface não pode conter métodos construtores. Veja:

package arquivodecodigos;

public interface Boleto{
  // construtor da interface
......


Este código não compila, e temos duas mensagens de erro de compilação: "invalid method declaration: return type required" e "interface abstract methods cannot have body". Novamente isso faz sentido. Como não podemos usar new para construir um objeto de uma interface, não há porque ela possuir métodos construtores.

3) Uma classe abstrata pode conter métodos implementados com corpo (método não abstratos), enquanto uma interface pode conter somente métodos abstratos (sem corpo). Veja:

package arquivodecodigos;

public interface Boleto{
......


Este código não compila, e temos a mensagem de erro de compilação "interface abstract methods cannot have body". Para corrigir, basta retirarmos o corpo do método:

package arquivodecodigos;

public interface Boleto{
......


Agora o código compila normalmente, uma vez que o objetivo da interface é delegar a funcionalidade de seus métodos às classes que optarem por implementá-las (implements). Mas, tenha em mente que, a partir do Java 1.8, uma interface pode ter métodos estáticos. Veja:

package arquivodecodigos;

public interface Boleto{
  public static int somar(int a, int b){
    return a + b;
......


Link para compartilhar na Internet ou com seus amigos:

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

Exercícios Resolvidos de Python - Criando dois vetores de inteiros de forma que a soma dos elementos individuais de cada vetor seja igual a 30

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

Considere os seguintes vetores:

# dois vetores de 5 inteiros cada
a = [50, -2, 9, 5, 17]
b = [0 for x in range(5)]
Escreva um programa Python que preencha o segundo vetor de forma que a soma dos respectivos elementos individuais de cada vetor seja igual a 30.

Sua saída deverá ser parecida com:

Valores no vetor a: 50   -2   9   5   17   
Valores no vetor b: -20   32   21   25   13
Resposta/Solução:

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

# método principal
def main():
  # dois vetores de 5 inteiros cada
  a = [50, -2, 9, 5, 17]
  b = [0 for x in range(5)]
    
  # vamos preencher o segundo vetor de forma que a soma dos
  # valores de seus elementos seja 30
  for i in range(len(a)):
    b[i] = 30 - a[i]
    
  # vamos mostrar o resultado
  print("Valores no vetor a: ", end="")
......



C# ::: Desafios e Lista de Exercícios Resolvidos ::: C# Básico

Exercícios Resolvidos de C# - Como somar dois números em C# - Escreva um programa C# que leia dois números e mostre a sua soma

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

Escreva um programa C# que leia dois números e mostre a sua soma. Os dois números deverão ser informados pelo usuário e você deverá efetuar a leitura como dois inteiros e mostrar a soma também como um inteiro. Os valores informados pelo usuário podem ser positivos ou negativos.

Sua saída deverá ser parecida com:

Informe o primeiro valor: 8
Informe o segundo valor: 3
A soma dos dois valores é: 11
Resposta/Solução:

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

using System;

namespace Estudos {
  class Program {
    static void Main(string[] args) {
      // vamos ler o primeiro número
      Console.Write("Informe o primeiro valor: ");
      int n1 = int.Parse(Console.ReadLine());

      // vamos ler o segundo número
      Console.Write("Informe o segundo valor: ");
      int n2 = int.Parse(Console.ReadLine());
......



C ::: Estruturas de Dados ::: Lista Ligada Simples

Estruturas de Dados em C - Como inserir antes de um determinado nó em uma lista encadeada simples usando C

Quantidade de visualizações: 1583 vezes
Em algumas situações nós precisamos inserir o novo nó antes de um determinado nó na lista encadeada simples. Veja, por exemplo, uma lista com o seguintes valores:

45 | 3 | 98 | 47

Suponha que queremos inserir o valor 50 antes do 98, então o novo conteúdo da lista será:

45 | 3 | 50 | 98 | 47

Observe que neste exemplo eu tratei o caso de inserir antes do primeiro nó, ou seja, antes do 45, mas não tratei a lista vazia. Há também a questão do laço infinito caso o usuário queira inserir antes de um nó não existente (não tratada). Veja o código completo:

#include <stdio.h>
#include <stdlib.h>
 
// estrutura Nó
struct No{
  int valor;
  struct No *proximo;
};
// fim da estrutura Nó
 
// função que permite exibir os valores de
// todos os nós da lista
void exibir(struct No *n){
  if(n != NULL){
    do{
      printf("%d\n", n->valor);
      n = n->proximo;
    }while(n != NULL);
  }
  else
    printf("A lista esta vazia\n\n");
}
 
// função que permite inserir um novo nó
// antes de um determinado valor
struct No *inserir_antes_valor(struct No *n, int v, int v_antes){
  // reserva memória para o novo nó
  struct No *novo = (struct No*)malloc(sizeof(struct No));
  novo->valor = v;

  // guarda o nó antes do valor que procuramos
  struct No *anterior = NULL; 
  struct No *temp = n; // aponta para o início da lista
  // enquanto for diferente do valor que estamos procurando
  while(temp->valor != v_antes){
    anterior = temp; // anterior recebe temp
    // e temp recebe o seu próximo
    temp = temp->proximo;
  }
  
  // ATENÇÃO: não estamos tratando a condição
  // de lista vazia. Para isso veja minha dica
  // sobre como inserior no início da lista
  
  // devemos inserior no início da lista?
  if(anterior == NULL){
    // o próximo do novo nó é o início da lista
    novo->proximo = n;
    n = novo; // início da lista é o novo nó
  }
  else{
    // o proximo do anterior é o novo nó
    anterior->proximo = novo;
    // e o próximo do novo nó é temp
    novo->proximo = temp;
  }
  
  return n;
}

// função que permite inserir nós no
// final da lista.
// veja que a função recebe o valor a ser
// armazenado em cada nó e um ponteiro para o
// início da lista. A função retorna um
......



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

Como remover e retornar o primeiro elemento de um array PHP usando a função array_shift()

Quantidade de visualizações: 8782 vezes
A função array_shift() do PHP remove o primeiro elemento de um vetor (array) e retorna o seu valor. Nesse caso, se as chaves, ou índices, do vetor forem do tipo númerico, elas serão reorganizadas.

Veja um exemplo de seu uso no código PHP a seguir:

<?php
/*
  Este exemplo mostra como usar a função
  array_shift() para extrair e retornar o primeiro
  elemento de um array
*/

$pessoas[0] = "Carlos";
$pessoas[1] = "Juliana";
$pessoas[2] = "Igor";
$pessoas[3] = "Marcelo";

// extrai o primeiro elemento
......


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

O elemento extraido foi: Carlos
O array contém agora 3 elementos


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

Como criar sua própria função substring() para obter uma substring a partir de uma string em C

Quantidade de visualizações: 16533 vezes
Em algumas situações precisamos obter uma substring a partir de uma string. A linguagem C já fornece algumas funções que tornam isso possível. No entanto, nenhuma destas funções permite especificar o índice inicial da substring. Sendo assim, o trecho de código abaixo mostra como escrever uma função substring() que permite informar a string de origem, o índice inicial e a quantidade de caracteres que serão obtidos. O retorno da função será um ponteiro para a substring obtida:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *substring(char *origem, int inicio, int quant){
  char *res = origem;
  int i = 0;

  // posição inicial menor que 0 ou
  // posição inicial muito exagerada?
  if((inicio < 0) || (inicio > strlen(origem)))
    inicio = 0;

  // quantidade de caracteres muito exagerada?
  if(quant > inicio + strlen(origem))
    quant = strlen(origem) - inicio;

  // obtem os caracteres desejados
  for(i = 0; i <= quant - 1; i++){
    res[i] = origem[inicio + i];
......


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

muito de C
Gosto muito de C e C++


Desafios, Exercícios e Algoritmos Resolvidos de C

Veja mais Dicas e truques de C

Dicas e truques de outras linguagens

Quem Somos

Osmar J. Silva
Programador Freelancer
WhatsApp +55 (062) 98553-6711

Goiânia-GO
Programador Freelancer - Full Stack Developer, Professional Java Developer, PHP, C/C++, Python Programmer, wxWidgets Professional C++ Programmer, Freelance Programmer. Formado em Ciência da Computação pela UNIP (Universidade Paulista Campus Goiânia) e cursando Engenharia Civil pela PUC-Goiás. Possuo conhecimentos avançados de Java, Python, JavaScript, C, C++, PHP, C#, VB.NET, Delphi, Android, Perl, e várias tecnologias que envolvem o desenvolvimento web, desktop, front-end e back-end. Atuo há mais de 20 anos como programador freelancer, atendendo clientes no Brasil, Portugal, Argentina e vários outros paises.
Entre em contato comigo para, juntos, vermos em que posso contribuir para resolver ou agilizar o desenvolvimento de seus códigos.
José de Angelis
Programador Freelancer
WhatsApp +55 (062) 98243-1195

Goiânia-GO
Programador Freelancer - Formado em Sistemas de Informação pela Faculdade Delta, Pós graduado em Engenharia de Software (PUC MINAS), Pós graduado Marketing Digital (IGTI) com ênfase em Growth Hacking. Mais de 15 anos de experiência em programação Web. Marketing Digital focado em desempenho, desenvolvimento de estratégia competitiva, analise de concorrência, SEO, webvitals, e Adwords, Métricas de retorno. Especialista Google Certificado desde 2011 Possui domínio nas linguagens PHP, C#, JavaScript, MySQL e frameworks Laravel, jQuery, flutter. Atualmente aluno de mestrado em Ciência da Computação (UFG)
Não basta ter um site. É necessário ter um site que é localizado e converte usuários em clientes. Se sua página não faz isso, Fale comigo e vamos fazer uma analise e conseguir resultados mais satisfatórios..

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á 9 usuários muito felizes estudando em nosso site.