Skip to content

Coleção de algoritmos, exercícios e demonstrações em java. 📕 Programação de computadores em Java

Notifications You must be signed in to change notification settings

f2acode/programacao-de-computadores-em-java

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Programação de computadores em Java

💡 Esse repositório pode ser usado como referência para consultas rápidas (ctrl+f)

Capítulos:

01: Introdução ao Java

  • Entrada e saída de dados (input/output) com System.in e a classe JOptionPane.
  • Entrada de dados com a classe Scanner e saída formatada com System.out.printf()
  • Literais e Exercícios
  • Tipos primitivos, números inteiros e decimais
  • Conversões entre tipos numéricos, de caractere para número e vice versa, e de texto para tipos numéricos e vice versa
  • Constantes e formatação double para moeda com a classeNumberFormat
  • Exercícios

Códigos exemplos

  • Manipulação de texto classe String
  • Comparação de texto com a classe String
  • Utilização da classe Math
  • Demonstração de conversões com classes Boolean, Character, Byte, Short, Integer, Long, Float e Double.
  • Utilização da classe Character para verificações e conversões de letras e números
  • Geração de números aleatórios em diversos tipos de dados com a classe Random.

Exercícios

  • Manipulação de CEPs e CPFs.
  • Verificação de palavras e frases.
  • Exercícios com fórmulas matemáticas, como cálculos de círculo.
  • Geração de números aleatórios com Math.Random() e a classe Random.

Códigos exemplos

  • Operadores aritméticos, lógicos, relacionaise e operador ternário

Exercícios

  • Cálculo de velocidade média, porcentagem de impostos e juros, e cálculo de alíquota de imposto de renda
  • Verificação de números impares e pares, e verificações lógicas

Códigos exemplos

  • Estrutura if, if-else e switch.

Exercícios

  • Verificação de e-mail e CEP
  • Classificação de conceitos avaliativos
  • Cálculo e classificação de impostos (INSS) e cálculo de IMC

Códigos exemplos

  • Estrutura while, do-while e for.
  • Quebras de laço break e continue.
  • Laços aninhados.

Exercícios

  • Loop enquanto nome não for válido ou cancelada inserção de nome

Códigos exemplos

  • Vetores e matrizes dos diversos tipos de dados

Códigos exemplos

  • Estruturas de try-catch utilizando diversos tipos de Exceptions (inclui tratamento múltiplo e personalizado)
  • Finally

Capítulo conceitual abrangendo conceitos como classes, objetos, classificação e instanciação, generalização e especialização, agregação e decomposição, etc.

Construtores, atributos, métodos e conceitos relacionados às classes (aplicação do capítulo anterior).

Exercícios

  • Validar nome e pegar iniciais, cálculo de área de círculo e IMC

Conceito de encapsulamento, gets e sets, validações nos gets e sets e nos construtores, atributos estáticos e constantes, e métodos estáticos.

Encapsulamento tem como objetivo impedir a quebra de integridade de conteúdo, isso deve ser garantido por métodos para setar os valores nas próprias classes. Esse métodos servem tanto para garantir a integridade de tipo de dados, quanto para garantir integridade de regras de negócio em relação aos dados.

checked exceptions: Exceções que exigem um tratamento para compilar a classe que deve implementá-lo. unchecked exceptions: Exceções que não exigem um tratamento para compilar a classe que deve implementá-lo.

Exceções interessantes:

  • NullPointerException: Dado nulo
  • IllegalArgumentException: Argumento inválido (genericamente falando)
  • NumberFormatException: Formato de número inválido

Iniciar string vazia no construtor é diferente de deixá-la nula. Podemos realizar a utilização de try-catch quando implementamos exceções nas classes, para exibir a mensagem de retorno.

Quando realizamos o output de um dado, como quando utilizamos o JOptionPane.showMessageDialog(null, dado), é chamado automaticamente o método toString() do dado a ser mostrado, podemos então sobrescrever esse método dentro da classe do mesmo dado.

É possível realizar a validação de dados no construtor.

A relação entre os atributos e os métodos de leitura e escrita (gets-sets) é assimétrica.

Atributos estáticos - static: Atributos que podem ser compartilhadas por todas as instâncias de uma classe.

Atributos constantes - final: Atributos que não podem ser modificados.

Uma boa prática pode ser usar o padrão is[Atributo] para atributos booleanos.

Conceito de herança (extends) e polimorfismo (mútiplas formas), classes finais e abstratas. Manipulação polimórfica de objetos.

Herança

O qualificador final na classe faz com que ela não possa conter subclasses e consequentemente não tenha seu comportamento alterado. A vantagem é o ganho de desempenho, porque ele não verifica se existe alguma polimorfismo de sobreposição.

A referência this é usada para se referir à classe corrente e a super é utilizada para se referir à superclasse. Uma observação é a chamada do construtor da superclasse: super();, dentro do construtor da subclasse, para setar os valores que vem da superclasse.

Uma maneira enxuta de chamar um construtor default: this("nome_exemplo","telefone_exemplo"), normalmente fazem um construtor chamar outro, passando esses parâmetros, para inicializar as variáveis (evitando informações nulas).

Polimorfismo

Dois tipos:

  • Sobrecarga: Mesmo método com diferentes parâmetros
  • Sobreposição: Reescrita de um método com os mesmos parâmetros em classes derivadas daquelas que contém sua implementação original

Classe abstrata - public abstract class nome_da_classe()

Ela é utilizada para definir atributos e métodos comuns a outras classes. Ela não pode ser instanciada, por isso deve haver uma subclasse especializada que herde dela. Caso ela possua um método abstrato automaticamente ela deve ser abstrata.

Método abstrato - public abstract [nome_do_metodo]

Ele não contém corpo e deve ser implementado na subclasse. A obrigatoriedade de sua implementação na subclasse é justamente a sua melhor utilização.

Método constante -- public final [nome_do_metodo]

Ele não pode ser alterado na subclasse.

Manipulação polimórfica de objetos

É possível verificar a classe de um objeto utilizando getClass().getName(). É possível verificar se a referência de uma classe pertence à uma classe específica ou uma de suas subclasses da seguinte maneira: [nome_da_referência](instância) instanceof [nome_da_classe] Podemos realizar o cast de uma referência para a classe real de um objeto: ([nome_da_classe]) [nome_da_referência] O cast pode acarretar a falta de algum método específico de acordo com cada cast realizado, por isso é interessante usar o instanceof para realizar a manipulação dinâmica

interface e ìmplements.

Tem por objetivo suprir a herança multipla, oferecendo um mecanismo mais eficiente.

Problemas da herança múltipla:

  • Conflito entre nomes de métodos
  • Compilação complexa (compiladores ineficientes)

A interface é um tipo de contrato assinado pelas classes. As classes que o assinam devem implementar os métodos abstratos definidos nas interfaces.

Uma mesma classe pode implementar múltiplas interfaces e por isso pode ter múltiplos tipos.

Funcionam como classes abstratas, não possuem construtores e não podem ser estanciadas. Só há uma maneira de instanciar um objeto cujo tipo seja uma interface: utilizar um construtor de uma classe que tenha a tenha implementado.

Uma interface só pode herdar de outro interface, assim como uma classe só pode derivar de outra classe.

Se uma classe herda outra e implementa outra, é possível que os métodos que ela herda da primeira e precisa implementar da segunda se anulem, ou seja, não seja necessária a implementação.

Extra: Compilando e executando com .bat (apenas para Windows) - Código aqui

Foi criado um arquivo .bat para compilar e executar os exemplos de códigos, assim como os exercícios mais facilmente:

run_java.bat <numero_capitulo> <codigo_ou_exercicio> <nome_arquivo_java>

Exemplo código:

run_java.bat 05 c Matematica

Exemplo exercício:

run_java.bat 04 e Exercicio0401

About

Coleção de algoritmos, exercícios e demonstrações em java. 📕 Programação de computadores em Java

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages