O documento descreve princípios de projeto de software como SRP, OCP, LSP, ISP e DIP. Também apresenta padrões de projeto como Strategy e State. Strategy separa algoritmos em classes distintas para permitir troca de comportamento em tempo de execução. State permite que um objeto altere seu comportamento com base em seu estado interno.
Javascript não é só um linguagem de apoio a web, ela é muito mais do que isso, ela pode ser utilizada muito bem no lugar de tantas outras, desde que você saiba o verdadeiro potencial dela. Nesta apresentação eu coloco vários atributos introduzidos e possibilitados no ECMA5.
O documento apresenta um exemplo de como implementar injeção de dependência em PHP usando anotações em propriedades para definir as dependências. É mostrado como parsear as anotações para obter as dependências de uma classe, verificar se elas existem em um container e injetá-las no objeto. Isso permite construir objetos sem precisar instanciar diretamente suas dependências.
Veja neste artigo como trabalhar com a classe StringBuilder na linguagem Java, muito utilizada na manipulação de objetos do tipo String, porém com mais flexibilidade e melhor desempenho.
O documento descreve o I Encontro do PHPSP sobre o framework Zend. Ele apresenta os objetivos do encontro que são discutir a arquitetura e componentes do Zend Framework e boas práticas de desenvolvimento. Também resume os principais conceitos e componentes do framework como MVC, models, views, controllers, autenticação e autorização.
Este documento fornece um resumo das principais mudanças introduzidas na versão 7 do PHP. Em três frases ou menos:
1) Apresenta quebras de compatibilidade e novos recursos como operadores, tipagem escalar, classes anônimas e palavras-chave. 2) Descreve melhorias internas como árvore de sintaxe abstrata, suporte a 64 bits, gerenciamento de memória e desempenho. 3) Menciona o roadmap do PHP.NEXT para evoluir ainda mais a linguagem.
O documento discute o desafio de testar integrações com serviços externos através de um proxy, e apresenta uma solução utilizando um servidor HTTP minimalista implementado com AnyEvent para simular respostas de um proxy durante testes.
Javascript não é só um linguagem de apoio a web, ela é muito mais do que isso, ela pode ser utilizada muito bem no lugar de tantas outras, desde que você saiba o verdadeiro potencial dela. Nesta apresentação eu coloco vários atributos introduzidos e possibilitados no ECMA5.
O documento apresenta um exemplo de como implementar injeção de dependência em PHP usando anotações em propriedades para definir as dependências. É mostrado como parsear as anotações para obter as dependências de uma classe, verificar se elas existem em um container e injetá-las no objeto. Isso permite construir objetos sem precisar instanciar diretamente suas dependências.
Veja neste artigo como trabalhar com a classe StringBuilder na linguagem Java, muito utilizada na manipulação de objetos do tipo String, porém com mais flexibilidade e melhor desempenho.
O documento descreve o I Encontro do PHPSP sobre o framework Zend. Ele apresenta os objetivos do encontro que são discutir a arquitetura e componentes do Zend Framework e boas práticas de desenvolvimento. Também resume os principais conceitos e componentes do framework como MVC, models, views, controllers, autenticação e autorização.
Este documento fornece um resumo das principais mudanças introduzidas na versão 7 do PHP. Em três frases ou menos:
1) Apresenta quebras de compatibilidade e novos recursos como operadores, tipagem escalar, classes anônimas e palavras-chave. 2) Descreve melhorias internas como árvore de sintaxe abstrata, suporte a 64 bits, gerenciamento de memória e desempenho. 3) Menciona o roadmap do PHP.NEXT para evoluir ainda mais a linguagem.
O documento discute o desafio de testar integrações com serviços externos através de um proxy, e apresenta uma solução utilizando um servidor HTTP minimalista implementado com AnyEvent para simular respostas de um proxy durante testes.
1) O documento descreve conceitos e recursos do Spring Framework como loaders de recursos, herança de definições de beans, validações, wrappers, post processors e internacionalização.
2) Inclui exemplos de uso de herança, validações e bean post processors no Spring.
3) Explica como customizar a inicialização de beans através de callbacks como bean post processors e bean factory post processors.
Este documento discute SQL e o uso de bancos de dados relacionais. Ele fornece uma introdução aos principais conceitos de SQL como DDL, DML, consultas, funções agregadas e operadores relacionais. Também apresenta exemplos de como criar e manipular tabelas, banco de dados e consultas em SQL.
O documento discute os principais frameworks PHP, comparando suas características e funcionalidades. Apresenta detalhes sobre arquitetura, acesso a dados, formulários, validações, cache, segurança, internacionalização e documentação de frameworks como CakePHP, CodeIgniter, Symfony e Zend Framework.
O documento descreve a biblioteca de validação Respect\Validation para PHP, que fornece mais de 100 regras de validação de forma fluente. Exemplos mostram como validar emails com diferentes frameworks como Zend, Symfony e Illuminate, e como a biblioteca oferece flexibilidade para customizar mensagens de erro e traduzi-las.
O documento descreve os principais comandos DML do MySQL para selecionar dados de uma tabela, incluindo SELECT, WHERE, ORDER BY, funções como COUNT e AVG, e operadores como BETWEEN e LIKE. Ele também fornece exemplos de como usar esses comandos em consultas a uma tabela Funcionários e exercícios relacionados.
O documento discute técnicas e boas práticas para lidar com código legado, como versionamento, testes, organização do código e programação orientada a objetos. Algumas das técnicas discutidas incluem utilizar ferramentas como Git para versionamento, Composer para gerenciamento de pacotes, PHPUnit e SimpleTest para testes, EditorConfig para padronização de estilos e CodeSniffer para análises estáticas. O documento também apresenta a técnica de "Programação Calistênica" para melhorar o design do código.
um breve treinamento sobre SQL e suas funcionalidadesWilliam Costa
Este documento fornece um resumo sobre SQL e suas funcionalidades. Ele introduz o que é SQL, seus principais subconjuntos e comandos como SELECT, WHERE, GROUP BY e ORDER BY. Também explica conceitos como junções, agregações, conversão de dados e operadores lógicos e matemáticos.
Lidando com desafios dos microserviços com a stack Spring Cloud NetflixEmmanuel Neri
Quando adotamos os conceitos de microserviços automaticamente começamos encarar alguns desafios de aplicações distribuídas, como: gerenciamento das aplicações, falhas distribuídas, indisponibilidade, numerosas configurações, diversas hosts de serviços, entre outros, com isso o Spring Cloud e o Spring Cloud Netflix oferecem um conjunto tecnologias para solucionar esses desafios com conceitos já consolidados na computação distribuída como service discovery, circuit breaker, proxies, load balance, etc. Com isso, essa apresentação tem como objetivo demonstrar esses conceitos aplicados em tecnologias que simplificam o desenvolvimento de aplicações distribuídas.
O documento resume as orientações do método Object Calisthenics para escrever códigos simples e de alta qualidade. As orientações incluem: 1) usar apenas um nível de identação por método; 2) evitar usar a palavra-chave "else"; 3) encapsular tipos primitivos se tiverem comportamento.
O documento apresenta classes e métodos para modelar produtos, categorias, médicos, pacientes e veículos. Há também exemplos de uso de dicionários, listas, propriedades get/set, métodos estáticos, tratamento de exceções e formatação de dados com strings.
No 2º PHP-MG fiz uma palestra sobre como desenvolver um ecommerce em menos de 2 horas. Para isso foi desenvolvido um microframework em PHP que com auxilio de PDO e MVC resolve os problemas mais comuns de desenvolvimento. Para a implementação do checkout foi usado o gateway de pagamento PagSeguro. Também detalho sobre SVN e porque usá-lo.
O documento descreve o desenvolvimento de um CRUD (criar, ler, atualizar, deletar) utilizando stored procedures no SQL Server. Ele explica o que são stored procedures, suas vantagens e sintaxe, e então demonstra como criar stored procedures para inserir, consultar, atualizar e excluir dados de uma tabela de clientes. O documento também mostra como implementar esses procedimentos em um sistema Windows Forms C# para realizar as operações CRUD na base de dados.
O documento descreve recursos avançados da linguagem SQL e do banco de dados PostgreSQL. Ele apresenta conceitos como Common Table Expression (CTEs), Window Functions e Full Text Search no PostgreSQL, além de detalhar a organização do padrão SQL e recursos de manipulação de dados externos. O objetivo é mostrar como otimizar consultas e acesso a dados usando recursos do padrão SQL e extensões do PostgreSQL.
Criando APIs usando o micro-framework RespectIvan Rosolen
O documento apresenta como criar uma API RESTful usando o micro-framework PHP Respect. Ele descreve como instalar as dependências do Respect como Config, Relational e Validation e configurar um projeto de exemplo chamado RestBeer para gerenciar recursos de cerveja. Também mostra como implementar rotas para listar, criar, atualizar e remover cervejas usando validação e mapeamento de objetos relacionais.
As 3 frases são:
Este documento descreve características e exemplos de funções em PHP, incluindo declaração, parâmetros, passagem de valores, retorno de valores e recursividade. É apresentado um exemplo ilustrando a diferença entre passagem de parâmetros por valor e por referência.
1) O documento discute técnicas de programação para acessar bancos de dados usando JDBC, incluindo como configurar o acesso ao banco de dados, executar consultas SQL, e lidar com resultados e erros.
2) É explicado como configurar o driver JDBC, JNDI e conexão no Tomcat e como usar classes como Connection, Statement e ResultSet para executar consultas e processar resultados.
3) É destacada a importância de fechar corretamente os recursos abertos para evitar vazamentos de memória.
O documento discute Stored Procedures no SQL Server, que são coleções de comandos SQL armazenados no banco de dados para executar tarefas repetitivas. Stored Procedures melhoram o desempenho, segurança e manutenção de aplicações que acessam bancos de dados. O autor também discute como criar, alterar e executar Stored Procedures.
Slides para aula de como acessar bancos de dados em Java usando JDBC.
A apresentação é curta, mas inclui as principais informações sobre a API JDBC (DataSource, Connection, Statement, PreparedStatement) e exemplos de código para explanação.
O código-fonte de exemplo está disponível no GitHub: https://github.com/utluiz/jdbc-example
O documento descreve o que são triggers no SQL, como são associados a tabelas específicas e executados automaticamente sempre que há modificações nos dados da tabela. Explica também que triggers não podem ser chamados diretamente e fazem parte da mesma transação que disparou sua execução. Fornece orientações sobre como criar triggers e como funcionam para inserções, exclusões e atualizações.
Como conectar programas em linguagem java a bases de dadosHenrique Fernandes
O documento descreve como conectar programas Java a bancos de dados usando padrões Factory e DAO. Ele cria um banco de dados MySQL, define classes para acessar e manipular dados, e fornece um exemplo conectando-se ao banco de dados, inserindo, atualizando e listando registros.
Evento Front End SP - Organizando o JavascriptMichel Ribeiro
O documento fornece 3 dicas principais para escrever códigos JavaScript melhores:
1) Aprenda bem a linguagem JavaScript e seus conceitos-chave.
2) Aplique padrões como o Module Pattern para organizar e encapsular o código.
3) Use arquiteturas como MVC para separar as preocupações da aplicação.
Além disso, fornece dicas gerais como documentar o código, criar arquivos separados, injetar dependências e realizar testes. O objetivo é ajudar a escrever códigos mais
1) O documento descreve conceitos e recursos do Spring Framework como loaders de recursos, herança de definições de beans, validações, wrappers, post processors e internacionalização.
2) Inclui exemplos de uso de herança, validações e bean post processors no Spring.
3) Explica como customizar a inicialização de beans através de callbacks como bean post processors e bean factory post processors.
Este documento discute SQL e o uso de bancos de dados relacionais. Ele fornece uma introdução aos principais conceitos de SQL como DDL, DML, consultas, funções agregadas e operadores relacionais. Também apresenta exemplos de como criar e manipular tabelas, banco de dados e consultas em SQL.
O documento discute os principais frameworks PHP, comparando suas características e funcionalidades. Apresenta detalhes sobre arquitetura, acesso a dados, formulários, validações, cache, segurança, internacionalização e documentação de frameworks como CakePHP, CodeIgniter, Symfony e Zend Framework.
O documento descreve a biblioteca de validação Respect\Validation para PHP, que fornece mais de 100 regras de validação de forma fluente. Exemplos mostram como validar emails com diferentes frameworks como Zend, Symfony e Illuminate, e como a biblioteca oferece flexibilidade para customizar mensagens de erro e traduzi-las.
O documento descreve os principais comandos DML do MySQL para selecionar dados de uma tabela, incluindo SELECT, WHERE, ORDER BY, funções como COUNT e AVG, e operadores como BETWEEN e LIKE. Ele também fornece exemplos de como usar esses comandos em consultas a uma tabela Funcionários e exercícios relacionados.
O documento discute técnicas e boas práticas para lidar com código legado, como versionamento, testes, organização do código e programação orientada a objetos. Algumas das técnicas discutidas incluem utilizar ferramentas como Git para versionamento, Composer para gerenciamento de pacotes, PHPUnit e SimpleTest para testes, EditorConfig para padronização de estilos e CodeSniffer para análises estáticas. O documento também apresenta a técnica de "Programação Calistênica" para melhorar o design do código.
um breve treinamento sobre SQL e suas funcionalidadesWilliam Costa
Este documento fornece um resumo sobre SQL e suas funcionalidades. Ele introduz o que é SQL, seus principais subconjuntos e comandos como SELECT, WHERE, GROUP BY e ORDER BY. Também explica conceitos como junções, agregações, conversão de dados e operadores lógicos e matemáticos.
Lidando com desafios dos microserviços com a stack Spring Cloud NetflixEmmanuel Neri
Quando adotamos os conceitos de microserviços automaticamente começamos encarar alguns desafios de aplicações distribuídas, como: gerenciamento das aplicações, falhas distribuídas, indisponibilidade, numerosas configurações, diversas hosts de serviços, entre outros, com isso o Spring Cloud e o Spring Cloud Netflix oferecem um conjunto tecnologias para solucionar esses desafios com conceitos já consolidados na computação distribuída como service discovery, circuit breaker, proxies, load balance, etc. Com isso, essa apresentação tem como objetivo demonstrar esses conceitos aplicados em tecnologias que simplificam o desenvolvimento de aplicações distribuídas.
O documento resume as orientações do método Object Calisthenics para escrever códigos simples e de alta qualidade. As orientações incluem: 1) usar apenas um nível de identação por método; 2) evitar usar a palavra-chave "else"; 3) encapsular tipos primitivos se tiverem comportamento.
O documento apresenta classes e métodos para modelar produtos, categorias, médicos, pacientes e veículos. Há também exemplos de uso de dicionários, listas, propriedades get/set, métodos estáticos, tratamento de exceções e formatação de dados com strings.
No 2º PHP-MG fiz uma palestra sobre como desenvolver um ecommerce em menos de 2 horas. Para isso foi desenvolvido um microframework em PHP que com auxilio de PDO e MVC resolve os problemas mais comuns de desenvolvimento. Para a implementação do checkout foi usado o gateway de pagamento PagSeguro. Também detalho sobre SVN e porque usá-lo.
O documento descreve o desenvolvimento de um CRUD (criar, ler, atualizar, deletar) utilizando stored procedures no SQL Server. Ele explica o que são stored procedures, suas vantagens e sintaxe, e então demonstra como criar stored procedures para inserir, consultar, atualizar e excluir dados de uma tabela de clientes. O documento também mostra como implementar esses procedimentos em um sistema Windows Forms C# para realizar as operações CRUD na base de dados.
O documento descreve recursos avançados da linguagem SQL e do banco de dados PostgreSQL. Ele apresenta conceitos como Common Table Expression (CTEs), Window Functions e Full Text Search no PostgreSQL, além de detalhar a organização do padrão SQL e recursos de manipulação de dados externos. O objetivo é mostrar como otimizar consultas e acesso a dados usando recursos do padrão SQL e extensões do PostgreSQL.
Criando APIs usando o micro-framework RespectIvan Rosolen
O documento apresenta como criar uma API RESTful usando o micro-framework PHP Respect. Ele descreve como instalar as dependências do Respect como Config, Relational e Validation e configurar um projeto de exemplo chamado RestBeer para gerenciar recursos de cerveja. Também mostra como implementar rotas para listar, criar, atualizar e remover cervejas usando validação e mapeamento de objetos relacionais.
As 3 frases são:
Este documento descreve características e exemplos de funções em PHP, incluindo declaração, parâmetros, passagem de valores, retorno de valores e recursividade. É apresentado um exemplo ilustrando a diferença entre passagem de parâmetros por valor e por referência.
1) O documento discute técnicas de programação para acessar bancos de dados usando JDBC, incluindo como configurar o acesso ao banco de dados, executar consultas SQL, e lidar com resultados e erros.
2) É explicado como configurar o driver JDBC, JNDI e conexão no Tomcat e como usar classes como Connection, Statement e ResultSet para executar consultas e processar resultados.
3) É destacada a importância de fechar corretamente os recursos abertos para evitar vazamentos de memória.
O documento discute Stored Procedures no SQL Server, que são coleções de comandos SQL armazenados no banco de dados para executar tarefas repetitivas. Stored Procedures melhoram o desempenho, segurança e manutenção de aplicações que acessam bancos de dados. O autor também discute como criar, alterar e executar Stored Procedures.
Slides para aula de como acessar bancos de dados em Java usando JDBC.
A apresentação é curta, mas inclui as principais informações sobre a API JDBC (DataSource, Connection, Statement, PreparedStatement) e exemplos de código para explanação.
O código-fonte de exemplo está disponível no GitHub: https://github.com/utluiz/jdbc-example
O documento descreve o que são triggers no SQL, como são associados a tabelas específicas e executados automaticamente sempre que há modificações nos dados da tabela. Explica também que triggers não podem ser chamados diretamente e fazem parte da mesma transação que disparou sua execução. Fornece orientações sobre como criar triggers e como funcionam para inserções, exclusões e atualizações.
Como conectar programas em linguagem java a bases de dadosHenrique Fernandes
O documento descreve como conectar programas Java a bancos de dados usando padrões Factory e DAO. Ele cria um banco de dados MySQL, define classes para acessar e manipular dados, e fornece um exemplo conectando-se ao banco de dados, inserindo, atualizando e listando registros.
Evento Front End SP - Organizando o JavascriptMichel Ribeiro
O documento fornece 3 dicas principais para escrever códigos JavaScript melhores:
1) Aprenda bem a linguagem JavaScript e seus conceitos-chave.
2) Aplique padrões como o Module Pattern para organizar e encapsular o código.
3) Use arquiteturas como MVC para separar as preocupações da aplicação.
Além disso, fornece dicas gerais como documentar o código, criar arquivos separados, injetar dependências e realizar testes. O objetivo é ajudar a escrever códigos mais
Este documento fornece uma introdução ao framework Play! para desenvolvimento de aplicações web com Java. Ele discute a instalação do framework, criação de um projeto de exemplo, estrutura de pastas, configuração do banco de dados, criação de modelos, controllers e views. Além disso, aborda tópicos como validações, interceptações, templates, módulos e recursos avançados do framework.
SOLID - Os cinco princípios ágeis de POORamon Valerio
O documento resume os cinco princípios SOLID da programação orientada a objetos. São eles: SRP (Princípio da Responsabilidade Única), OCP (Princípio Aberto-Fechado), LSP (Princípio da Substituição de Liskov), ISP (Princípio da Segregação de Interfaces) e DIP (Princípio da Inversão de Dependência). Exemplos de cada um dos princípios são fornecidos para ilustrar como aplicá-los corretamente na programação orientada a objetos.
De a máxima cobertura nos seus testes de APIElias Nogueira
Palestra ministrada no Reginonal Scrum Gathering Rio 2019 no dia 27/06/2019 sobre como dar uma cobertura de testes para uma API além do teste unitário e de integração, com um foco totalmente prático e com execução em pipeline.
O documento discute princípios de programação em JavaScript, incluindo comentários, nomeação de variáveis e funções, módulos, namespaces e o princípio SOLID de ter classes/módulos com uma única responsabilidade. Ele recomenda escrever código conciso, claro e fácil de ler para facilitar a manutenção no futuro.
Refatoração de código com Capitão Nascimento versão completaEduardo Bregaida
O documento discute o conceito de refatoração de código e apresenta um exemplo de como refatorar um código para melhorar sua estrutura e legibilidade. O Capitão Nascimento explica que a refatoração envolve reescrever um programa preservando seu comportamento para facilitar a manutenção e entendimento do código. Ele também destaca a importância de testar o código e sentir quando ele tem "mau cheiro" para identificar onde pode ser refatorado.
O documento discute funções em JavaScript, cobrindo três tópicos principais: 1) parâmetros de entrada e saída de funções, 2) exemplos demonstrando o uso de parâmetros, e 3) escopo de variáveis e objetos em diferentes contextos de execução de funções.
O documento discute como otimizar aplicações Node para o motor V8. Ele explica como o V8 compila código JavaScript para código de máquina nativo e como o Crankshaft e o TurboFan otimizam esse processo. O documento também lista 12 técnicas que podem prejudicar a otimização, como atribuições em argumentos, vazamentos do arguments e uso de for-in em objetos.
Como usar a biblioteca SimpleTest do PHP para ganhar tempo resolvendo os problemas mas simples do dia-a-dia. Essa apresentação foi elaborada para o PHPConference2008 que aconteceu em Osasco, SP Brasil.
Qualidade no desenvolvimento de software com PHPUnitDiego Tremper
O documento discute testes de unidade no PHP usando o framework PHPUnit. Aborda tópicos como: introdução ao PHPUnit; como escrever e executar testes unitários; utilização de asserções e provedores de dados; verificação de exceções.
O documento apresenta uma agenda de cursos sobre desenvolvimento web com AJAX e WEB 2.0. No primeiro dia, o curso irá cobrir XMLHttpRequest, API DOM, frameworks AJAX como ExtJS e Mootools e exemplo de aplicações. No segundo dia, os alunos irão finalizar um projeto de aplicação WEB 2.0 iniciado no dia anterior e ter uma conclusão sobre o assunto. O documento também fornece detalhes sobre as tecnologias abordadas no curso.
O documento apresenta o framework VRaptor 4 para desenvolvimento web Java. Apresenta seus principais conceitos como MVC, CDI, controllers, views, validação, testes e plugins. Inclui também exemplos de código para controllers, formulários, redirecionamento, interceptação e serialização JSON/XML.
O documento descreve como configurar e usar testes com RSpec e Cucumber em uma aplicação Ruby on Rails. Ele explica como instalar o RSpec e gerar arquivos de teste inicial, como usar factories para criar objetos de teste e como escrever especificações para validar modelos, controllers e outros componentes da aplicação.
(A11) LabMM3 - JavaScript - Subalgoritmos e scopeCarlos Santos
Este documento discute escopo de variáveis em JavaScript e fornece exemplos de funções e variáveis locais versus globais. Explica que variáveis declaradas dentro de funções só podem ser acessadas dentro da função, enquanto variáveis globais podem ser acessadas em todo o código.
Spring + Tapestry Um novo paradigma de desenvolvimento webelliando dias
O documento discute o framework Spring, incluindo sua organização, inversão de controle, integração com bancos de dados e frameworks web, transações declarativas, uso de mocks e projetos relacionados. O Spring é um container leve que facilita o desenvolvimento web, diminui código e integra com diversas tecnologias de forma portável e testável.
O documento discute princípios de design orientado a objetos como encapsulamento, entidades e value objects, a lei de Demeter e princípios como responsabilidade única, aberto/fechado, substituição de Liskov e inversão de dependência. Ele apresenta exemplos de como aplicar esses princípios para melhorar a manutenibilidade, reuso e legibilidade do código.
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
Julio Viegas é um engenheiro de software e instrutor com 15 anos de experiência trabalhando com tecnologia. Ele fala sobre o framework Spring, ferramentas como Spring Roo, Spring Tool Suite, Grails e CloudFoundry.
Rafael Garcia - Yii Framework, principais características e em açãoRafael Garcia
O documento apresenta Rafael Alves Nogueira Garcia, desenvolvedor PHP há 9 anos que desenvolve com o framework Yii há 2 anos. Ele já desenvolveu algumas extensões para o Yii, como wrappers para extensões Jquery e integração com PHP IDS.
4. public class CalculadoraDeSalario
(m) double calcula(Funcionario)
public class Funcionario
// mais campos
(f) Cargo cargo;
(f) double salarioBase;
(m) double calculaSalario;
public enum Cargo {
DESENVOLVEDOR(new DezOuVintePorCento()),
DBA(new QuinzeOuVinteCincoPorCento()),
TESTER(new QuinzeOuVinteCincoPorCento());
(f) RegraDeCalculo regra;
(c) Cargo(RegraDeCalculo regra) this.regra = regra;
(m) RegraDeCalculo getRegra
public interface RegraDeCalculo
(m) double calcula(Funcionario)
public double calculaSalario() {
return cargo.getRegra().calcula(this);
}
5. OCP - Open/Closed Principle
- Aberta para extensão
- Fechada para modificação
6. LSP - Liskov Substitutive Principle
- Classes derivadas devem ser substituíveis por suas
classes bases
- Deve-se pensar muito nas pré-condições e pós-condições
7. ISP - Interface Segregation Principle
- Clientes não devem ser forçados a depender de métodos
que não usam
8. DIP - Dependency Inversion Principle
- Dependa sempre de abstração, não de implementação
9. Don’t repeat yourself - Não repetir código, movendo partes
que precisam ser reutilizadas para métodos ou classes.
WET -
“Write Everything Twice”
“We Enjoy Typing”
“Waste Everyone’s Time”
DRY
11. private static String semana(int dia) {
switch (dia){
case 1:
return "Segunda-feira";
case 2:
return "Terça-feira";
case 3:
return "Quarta-feira";
case 4:
return "Quinta-feira";
case 5:
return "Sexta-feira";
case 6:
return "Sabado";
case 7:
return "Domingo";
default:
throw new IllegalArgumentException("Dia
inválido: Somente números entre 1 e 7");
}
}
private static String semana(int dia) {
if(dia < 1 || dia > 7) throw new
IllegalArgumentException("Dia inválido: Somente
números entre 1 e 7");
String[] diasDaSemana = {
"Segunda-feira",
"Terça-feira",
"Quarta-feira",
"Quinta-feira",
"Sexta-feira",
"Sábado",
"Domingo"
};
return diasDaSemana[dia - 1];
}
12. API Best Practices
1) HTTP aplicado a REST
- Conhecer bem a base
2) Não retorne texto puro
- Passar o content-type!
13. 3) Evite usar verbos nas URIs
- Metodos HTTP devem ser suficiente para
descrever a ação
4) Use plurais nos recursos
- É preferível o uso de plurais para garantir a
padronização
GET /loja/listaClientes/
GET /loja/clientes/
GET /loja/cliente/1
GET /loja/clientes/
GET /loja/clientes/
POST /loja/clientes/
14. 5) Retorne detalhes dos erros no body
- Retornar detalhes de erros ajuda a fazer o
debug
6) Retorne StatusCodes significativos
{
“error” : “Email inválido”
“detail” : {
“surname” :
“...”
}
}
HTTP/1.1 200 OK
Content-Type: text/html
{
"status": "failure",
"data": {
"error": "Nome é obrigatório"
}
}
15. 7) Use StatusCode consistentemente
- Use um padrão
- Retorne sempre o mesmo StatusCode para
aquele tipo de requisição
8) Evite Nested Resources
- Pode ficar confuso
- Prefira QueryParams
GET /pacientes/5/prontuario
GET /prontuarios/?paciente_id=5
16. 9) Lide com barras finais 10) Use QueryParams para filtros e paginação
POST /pacientes
POST /pacientes/
GET /artigos/?page=8&size=10
GET /artigos/revisados
GET /artigos/?revisados=true&page=5&size=10
17. Style Guide - Java
Um conjunto de regras para padronizar a escrita do código,
regendo desde a identação do código até a criação do Javadoc
18. Algumas regras
Segundo o Google JavaStryleGuide: https://google.github.io/styleguide/javaguide.html
- Estrutura do arquivo-fonte;
- Caracteres especiais
- Formatação;
- Nomenclatura;
20. Strategy
- Separa os algoritmos para alcançar a reusabilidade
- Permite selecionar um algoritmo durante a execução
Contexto
<<interface>>
Estratégia
+executa()
Estratégia
1
+executa()
Estratégia
2
+executa()
21. public class CalculadoraDeImpostos {
public void realizaCalculo(Orcamento orcamento, String imposto) {
if(imposto.equals("ICMS")) System.out.println(orcamento.getValor() * 0.1);
else if (imposto.equals("ISS")) System.out.println(orcamento.getValor() * 0.06);
// else if mais um
// else if e outro
// else if continua crescendo
// else if não para
}
}
22. public class CalculadoraDeImpostos {
public void realizaCalculoICMS(Orcamento orcamento) {
System.out.println(new ICMS().calculaICMS(orcamento));
}
public void realizaCalculoISS(Orcamento orcamento) {
System.out.println(new ISS().calculaISS(orcamento));
}
// E mais um método
// E outro
// E aqui mais um
}
23. public class CalculadoraDeImpostos {
public void realizaCalculo(Orcamento orcamento, Imposto
imposto) {
System.out.println(imposto.calcula(orcamento));
}
}
public interface Imposto {
double calcula(Orcamento orcamento);
}
public class ICMS implements Imposto {
@Override
public double calcula(Orcamento orcamento) {
return orcamento.getValor() * 0.1;
}
}
public class ISS implements Imposto {
@Override
public double calcula(Orcamento orcamento) {
return orcamento.getValor() * 0.06;
}
}
public class TesteCalculadora {
public static void main(String[] args) {
Orcamento orcamento = new Orcamento(500);
var calculadora = new CalculadoraDeImpostos();
System.out.println("******* ICMS *********");
calculadora.realizaCalculo(orcamento, new ICMS());
System.out.println("******* ISS *********");
calculadora.realizaCalculo(orcamento, new ISS());
}
}
24. State
- Permite alterar o comportamento baseado no estado interno do objeto
<<interface>>
Estado
+acao1()
+ação2()
Estado 1
+acao1()
+acao2()
Estado 2
+acao1()
+acao2()
Contexto
+metodo()
estado;
25. public class Orcamento {
private double valor;
private List<Item> itens;
public Orcamento(double valor) {
this.valor = valor;
this.itens = new ArrayList<Item>();
}
public double getValor() { return valor; }
public void desconta(double valor) {
this.valor -= valor;
}
public List<Item> getItens() {
return Collections.unmodifiableList(itens);
}
public void adicionaItem(Item item) {
itens.add(item);
}
}
public class Orcamento {
public static final int EM_APROVACAO = 1;
public static final int APROVADO = 2;
public static final int REPROVADO = 3;
public static final int FINALIZADO = 4;
private double valor;
private List<Item> itens;
private int estadoAtual;
// resto da classe escondida porque não cabia mais na tela
public void aplicaDescontoExtra() {
if(estadoAtual == EM_APROVACAO) valor = valor - (valor * 0.05);
else if(estadoAtual == APROVADO) valor = valor - (valor * 0.02);
else throw new RuntimeException("Orçamentos reprovados não
recebem desconto extra!");
}
}
26. public class Orcamento {
private double valor;
private List<Item> itens;
private EstadoAtualDeUmOrcamento estadoAtual;
public Orcamento(double valor) {
this.valor = valor;
this.itens = new ArrayList<Item>();
this.estadoAtual = new EmAprovacao();
}
// resto da classe porque não cabia mais na tela
public void aplicaDescontoExtra() {
estadoAtual.aplicaDescontoExtra(this);
}
}
Em Aprovação
Aprovado Reprovado
Finalizado
27. public class Orcamento {
// resto da classe porque não cabia mais na tela
public void
alteraEstado(EstadoAtualDeUmOrcamento
novoEstado) {
this.estadoAtual = novoEstado;
}
public void aprova() {
estadoAtual.aprova(this);
}
public void reprova() {
estadoAtual.reprova(this);
}
public void finaliza() {
estadoAtual.finaliza(this);
}
}
public interface EstadoAtualDeUmOrcamento {
void aplicaDescontoExtra(Orcamento orcamento);
void aprova(Orcamento orcamento);
void reprova(Orcamento orcamento);
void finaliza(Orcamento orcamento);
}
public class EmAprovacao implements EstadoAtualDeUmOrcamento {
@Override
public void aplicaDescontoExtra(Orcamento orcamento) {
orcamento.desconta(orcamento.getValor() * 0.05); }
@Override
public void aprova(Orcamento orcamento) {
orcamento.alteraEstado(new Aprovado()); }
@Override
public void reprova(Orcamento orcamento) {
orcamento.alteraEstado(new Reprovado());}
@Override
public void finaliza(Orcamento orcamento) {
throw new IllegalStateException("Orçamentos em aprovação não
podem ser finalizados"); }
}