TDD com Java e JUnit
Interfaces
Enums
Generics
Collections
Exceptions
Serialization
Abstração de Dados
Encapsulamento
Herança
Polimorfismo
Composição
Associação
Classes Abstratas x Classes Concretas
Técnicas TDD e BDD
Teste unitários e Suites de Testes
Testes de integração
JUnit
asserts e matchers
Hamcrest
Mockito
Cucumber
Implementar uma calculadora usando
Java
Boom da internet 1995 => Sun viu oportunidade na Web, nessa época nas páginas não existia muita interatividade.
Anuncio oficial do JAVA em Maio de 1995 => Em uma conferência
Em 2004 Java atingiu a marca de 3 milhões de desenvolvedores em todo mundo
Oracle 2008 => Oracle Corporation adquire a Sun Microsystems, por US$ 7,4 bilhões
É a linguagem de maior referência no mercado de desenvolvimento de software.
Abstração de processo.
JOptionPane.
showMessageDialog(
null, "Acertei de novo!",
"Jogo dos Animais",
JOptionPane.DEFAULT_OPTION);Em tempo de execução os objetos são alocados e deslocados da memória conforme a sua utilidade
Essa alocação e desalocação são feitas de maneira implícita pelo usuário
Os tipos de dados em alguns casos podem ser parametrizados.
Estas construções permite que os atributos e métodos possam ser definidos através de parâmetros.
Listas<int> Listas<char> Listas<Pessoa>
Este é um importante recurso da abstração de dados, tanto na ocultação como na exposição dos tipos de dados.
O ocultamento de informação que garante confiabilidade em termos de programação para a abstração de dados.
Níveis de encapsulamento
Mínimo
Médio
Alto
Componentes
Micro services
package br.uem;
public class Pessoa {
private String nome;
private int idade;
private char sexo;
private Integer identidade;
private Telefone telefone;
// private Endereço endereco;
public Pessoa(String nome, int idade, char sexo, Integer identidade, Telefone telefone) {
this.nome = nome;
this.idade = idade;
this.sexo = sexo;
this.identidade = identidade;
this.telefone = telefone;
}
public String getNome() {
return nome;
}
package br.uem;
import br.uem.endereco.Endereco;
public class Pessoa {
private String nome;
private int idade;
private char sexo;
private Integer identidade;
private Telefone telefone;
private Endereco endereco;
public Pessoa(String nome, int idade, char sexo, Integer identidade, Telefone telefone) {
this.nome = nome;
this.idade = idade;
this.sexo = sexo;
this.identidade = identidade;
this.telefone = telefone;
}
Livro: Microservices for Java Developers
Em Java o encapsulamento mínimo e médio são definidas por meio dos modificadores de acesso que são anexadas as definições de atributos, métodos e classes
O encapsulamento alto é definido por meio dos pacotes (package)
A componentização por meio de bibliotecas (library ou lib).
POJO - Plain Old Java Object
A Herança em POO vem resolver alguns problemas programação procedural como: baixa produtividade, baixo reuso de software e problemas com uso somente dos tipos de dados abstratos.
MembroDaComunidade
Empregado
Aluno
Corpo Docente
Funcionarios
Administrador
Professor
Diferenças mais comuns entre uma classe pai e suas subclasses:
Classe pai pode definir membros privados que não podem ser acessados nas subclasses, fazendo com que esse membros não sejam visíveis na subclasse
A subclasse pode adicionar membros (atributos e métodos) novos a subclasse
Diferenças mais comuns entre uma classe pai e suas subclasses:
A subclasse pode adicionar comportamento de um ou mais métodos herdados. Um método herdado tem o mesmo nome e a mesma assinatura. O novo método sobrescreve o método herdado, também chamado de método sobrescrito. O propósito mais comum é fornecer um comportamento específico para aquele objeto da classe derivada que não é apropriado para classe pai.
Uma “desvantagem” do uso de herança é que ela cria dependências entre as classes em uma hierarquia
Isso vai contra a uma das vantagem de tipo abstrato de dados, que é a independência de um tipo em relação a outro
Porém em muitos casos as dependências (hierárquicas) espelham a realidade dos problemas reais
Classes aninhadas:
Ocultamento de informações, escopo de informações
Sistemas Legados
Etimologia da palavra: várias formas
O propósito deste recurso é permitir que os sistemas sejam melhores estendidos durante o desenvolvimento e manutenção
Exemplo, laço de interação em objetos polimórficos
Portanto, pode se dizer que, o uso do polimorfismo é a evidência de maturidade no uso de dados abstratos em uma estrutura hierárquica em um projeto orientado a objetos.
Associação, Agregação e Composição
Pessoa abstrata
Pessoa fisica
Pessoa jurídica
Associação, Agregação e Composição
Hands on
Test-Driven Development (TDD) is a technique for building software that guides software development by writing tests. It was developed by Kent Beck in the late 1990's as part of Extreme Programming. In essence you follow three simple steps repeatedly:
Test-Driven Development (TDD) is a technique for building software that guides software development by writing tests. It was developed by Kent Beck in the late 1990's as part of Extreme Programming. In essence you follow three simple steps repeatedly:
Os Estados Unidos estimam que bugs de software lhes custam aproximadamente 60 bilhões de dólares por ano!
Alguns bugs de software famosos:
Um desenvolvimento software com TDD não diz se o software é bom ou não! Não é esseo objetivo do TDD.
Com TDD podemos afirmar que o software atende a determinados cenários implementados nos testes.
Essa é a garantia que podemos dar ao software desenvolvido usando as técnicas de TDD.
Um desenvolvimento software com TDD não diz se o software é bom ou não! Não é esse o objetivo do TDD.
Com TDD podemos afirmar que o software atende a determinados cenários implementados nos testes.
Essa é a garantia que podemos dar ao software desenvolvido usando as técnicas de TDD.
Testar é caro! Dado um sistema já desenvolvido, se uma pessoa precisasse testá-lo do começo ao fim, quanto tempo ela levaria?
Pagar um mês de uma pessoa a cada mudança feita no código é simplesmente impossível.
Os desenvolvedores também sabem que uma mudança em um trecho pode gerar problemas em outro
“Doutor, o senhor poderia não lavar a mão e terminar a cirurgia 15 minutos mais cedo?”
Qual desenvolvedor nunca escreveu um código de má qualidade de maneira consciente?
Quem nunca escreveu uma “gambiarra"?
Quem nunca colocou software em produção sem executar o mínimo suficiente de testes para tal?
Testar é divertido, pode aumentar a qualidade do software, e ajudá a identificar trechos de código que foram mal escritos
ou projetados, por meio da prática de TDD.
Os números são representados por sete diferentes símbolos.
• I, unus, 1, (um)
• V, quinque, 5 (cinco)
• X, decem, 10 (dez)
• L, quinquaginta, 50 (cinquenta)
• C, centum, 100 (cem)
• D, quingenti, 500 (quinhentos)
• M, mille, 1.000 (mil)
Para representar outros números, os símbolos são combinados entre si, começando do algarismo de maior valor e seguindo as regras:
Por exemplo, XV representa 15 (10 + 5) e o número XXVIII representa 28 (10 + 10+ 5 + 1 + 1 + 1). Última regra:
Dado um numeral romano, o programa deve convertê-lo para o número inteiro correspondente.
Hands on
MembroDaComunidade
Empregado
Aluno
Corpo Docente
Funcionário
Administrador
Professor
O empregado tem um salario base inicial e a cada 12 meses recebe um aumento segundo a sua categoria sobre o salario base
Professor pode ter um adicional se ele títulos
Um docente que também é administrador (chefe de departamento) tem um adicional proporcional a quantidade de cursos do seu departamento
Caso um empregado falte no serviço, é realizado um desconto fixo + um proporcional do salario, segundo a categoria, multiplicado pela quantidade de faltas no mês.
O desafio é apresentar uma folha de pagamento (do mês) dos empregados da universidade (funcionários, professores e chefe de departamento)
Eduardo é funcionário há 15 anos no ultimo mes ele teve uma falta. Supondo que o salario base de funcionário é de R$2000,00 e que o aumento da sua categoria em 12 meses é de 8% e o desconto da falta é de R$50,00 e a porcentagem de desconto é 2% do salario
seu salario final do mês seria:
4400 - (50,00 + 88)
4400 - 138 = 4262,00
Monica é Professora, tem doutorado, da aula há 3 anos, no ultimo mes ele teve duas falta. Supondo que o salario base de professor é de R$3000,00 e que o aumento da sua categoria em 12 meses é de 12%, o adicional de doutorado é 7% e o desconto da falta é de R$50,00 e a porcentagem de desconto é 3% do salario
seu salario final do mês seria:
(4080 + 285,6) - (50,00 + 261,9) => 4365,6 - 311,9 = 4053,66
Marta é Professora, tem mestrado, da aula há 5 anos e é chefe de departamento com 3 cursos, no ultimo mes ele teve uma falta. Supondo que o salario base de professor é de R$3000,00 e que o aumento da sua categoria em 12 meses é de 12%, o adicional de mestrado é 5%, o adicional por curso é de 0,5% e o desconto da falta é de R$50,00 e a porcentagem de desconto é 3% do salario
seu salario final do mês seria:
(4800 + 252 + 720) - (50,00 + 144)
5760 - 194 = 5566,00