SlideShare uma empresa Scribd logo
1 de 56
Programação Defensiva Glaucio Scheibel Glauco Vinicius Scheffel  v: 1.1 Facilidade e velocidade em fazer uma coisa não  oferece a solidez duradoura ou a exatidão da beleza. - Plutarco, Vida de Péricles
Agenda ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Objetivo ,[object Object]
Janelas Quebradas, um conto
Os donos foram embora
E levaram o cachorro (t-rex)
Meses se passaram
Veio o sol, veio a chuva
E a casa mantinha-se por meses
Ops, apareceu uma janela quebrada
Outra?!
O que esta havendo?
Manutenção de software? Não conviva com  janelas quebradas
Por que se preocupar ? ,[object Object],[object Object],[object Object],Caso a histórinha não tenha sido o suficiente
Boas maneiras
Conheça a linguagem ,[object Object],public class Demonstracao { public String concact() { String t = “a”; for (int i=0; i<30; i++) { t = t + “a”; } return t; } } StringBuilder t = new StringBuilder( “a”);  for(int i=0; i<30; i++) { t.append( “a” ); } return t.toString();
Termine o que começou Alocar recursos Usar os recursos Liberar os recursos ,[object Object],[object Object],[object Object],[object Object],[object Object]
Use todos parâmetros ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Sempre que  possível use a palavra  this para tornar o  código mais legível Java permite dois ou mais métodos com o mesmo nome  desde que possuam assinaturas diferentes
Cuidado com o exagero ,[object Object],[object Object],[object Object]
Cuidado com o exagero ,[object Object],[object Object],[object Object],[object Object],[object Object]
public class Aluno extends Pessoa { // outros atributos foram ocultados private float[] n; //  notas private static AlgoritmoMedia[]  algoritmo = new AlgoritmoMedia[2]; static { algoritmo[0] = new MediaAritmetica(); algoritmo[1] = new MediaPonderada(pesos[]); } public float getMedia(int algoritmo) { return this.algoritmo[algoritmo].getMedia(n); } } Possui um único propósito: retornar a média Usa a convenção  do JCC para  nomear elementos
Convenção de nomes JCC ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Convenção de nomes JCC ,[object Object],[object Object],[object Object]
Documentação ,[object Object],[object Object],[object Object],[object Object],[object Object]
Documentação ,[object Object],[object Object]
Documentação da classe ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],O comentário foi feito  no Slide anterior O método possui  um comentário
Exemplo de javadoc
Manipulação de Erros
Robusteza vs Precisão Especificação Precisão Robusteza Habilidade de funcionar mesmo em situações anormais  Habilidade de  executar as tarefas  para as quais foi  definido nos  requisitos
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],O que irá acontecer se qtdNotas for igual a zero ?
Tratamento de erros ,[object Object],[object Object],[object Object],[object Object],Em Java a divisão por zero só gera uma exceção quando  estamos no domínio  dos inteiros
Exceções ,[object Object]
Comandos Java ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Formato dos comandos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
E se não tratarmos uma exceção ? ,[object Object],InputFile.java:11: Exception  java.io.FileNotFoundException must be caught,  or it must be declared in the throws clause of this method. in = new FileReader(filename); ^
Como lançar uma exceção? ,[object Object],[object Object]
Exceções diretas x indiretas ,[object Object],[object Object]
Exceções de sistema ,[object Object],[object Object],[object Object],[object Object]
Exceções de aplicação ,[object Object],[object Object]
RuntimeException ,[object Object],[object Object]
E se não estiver nos limites do software ??? Especificação Precisão Robusteza
Asserções ,[object Object],[object Object],[object Object],[object Object]
Asserções e Contratos ,[object Object],[object Object],[object Object],[object Object]
Asserções e Java
Keyword assert ,[object Object],[object Object],[object Object],[object Object],[object Object]
Execução ,[object Object],[object Object]
Asserções vs Exceções ,[object Object],[object Object],[object Object]
Qual usar? ,[object Object],[object Object]
E se ocorrer um erro ? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
E se não for fora do limite? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Depure  o  Código
E se não for fora do limite? Divida para conquistar
[object Object],[object Object],[object Object],[object Object]
Dúvidas ?
Referências bibliográficas ,[object Object],[object Object],[object Object]
Referências bibliográficas ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

Mais conteúdo relacionado

Mais procurados

Minicurso PHP básico
Minicurso PHP básicoMinicurso PHP básico
Minicurso PHP básicoCezar Souza
 
Java: Introdução à Orientação a Objetos
Java: Introdução à Orientação a ObjetosJava: Introdução à Orientação a Objetos
Java: Introdução à Orientação a ObjetosArthur Emanuel
 
Desenhando Componentes de Software com UML
Desenhando Componentes de Software com UMLDesenhando Componentes de Software com UML
Desenhando Componentes de Software com UMLRildo (@rildosan) Santos
 
Apostila Lógica de Programação
Apostila Lógica de ProgramaçãoApostila Lógica de Programação
Apostila Lógica de ProgramaçãoRicardo Terra
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programaçãorodfernandes
 
Exercício resolvido normalização
Exercício resolvido normalizaçãoExercício resolvido normalização
Exercício resolvido normalizaçãoTicianne Darin
 
Histórias de Usuário: Como escrever a história perfeita?
Histórias de Usuário: Como escrever a história perfeita?Histórias de Usuário: Como escrever a história perfeita?
Histórias de Usuário: Como escrever a história perfeita?Priscila Ribeiro Chagas
 
Alinhamento Estratégico em TI
Alinhamento Estratégico em TIAlinhamento Estratégico em TI
Alinhamento Estratégico em TIMarcus Vinícius
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento webArlindo Santos
 
Estrutura de Dados - Procedimentos e Funções
Estrutura de Dados - Procedimentos e FunçõesEstrutura de Dados - Procedimentos e Funções
Estrutura de Dados - Procedimentos e FunçõesAdriano Teixeira de Souza
 
Apresentação Clean Code
Apresentação Clean CodeApresentação Clean Code
Apresentação Clean CodeAndré Leoni
 
Apostila excel 2016
Apostila excel 2016Apostila excel 2016
Apostila excel 2016ProsubSig
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a ObjetosIgor Takenami
 
Curso Linguagem de Programação I - PHP Básico
Curso Linguagem de Programação I - PHP BásicoCurso Linguagem de Programação I - PHP Básico
Curso Linguagem de Programação I - PHP BásicoNorton Guimarães
 
Hadoop - primeiros passos
Hadoop - primeiros passosHadoop - primeiros passos
Hadoop - primeiros passosrhpinotti
 

Mais procurados (20)

Minicurso PHP básico
Minicurso PHP básicoMinicurso PHP básico
Minicurso PHP básico
 
Java: Introdução à Orientação a Objetos
Java: Introdução à Orientação a ObjetosJava: Introdução à Orientação a Objetos
Java: Introdução à Orientação a Objetos
 
Desenhando Componentes de Software com UML
Desenhando Componentes de Software com UMLDesenhando Componentes de Software com UML
Desenhando Componentes de Software com UML
 
Apostila Lógica de Programação
Apostila Lógica de ProgramaçãoApostila Lógica de Programação
Apostila Lógica de Programação
 
Ciclo desenvolvimento de sistemas
Ciclo desenvolvimento de sistemasCiclo desenvolvimento de sistemas
Ciclo desenvolvimento de sistemas
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programação
 
Raid
RaidRaid
Raid
 
Exercício resolvido normalização
Exercício resolvido normalizaçãoExercício resolvido normalização
Exercício resolvido normalização
 
Histórias de Usuário: Como escrever a história perfeita?
Histórias de Usuário: Como escrever a história perfeita?Histórias de Usuário: Como escrever a história perfeita?
Histórias de Usuário: Como escrever a história perfeita?
 
Alinhamento Estratégico em TI
Alinhamento Estratégico em TIAlinhamento Estratégico em TI
Alinhamento Estratégico em TI
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento web
 
Estrutura de Dados - Procedimentos e Funções
Estrutura de Dados - Procedimentos e FunçõesEstrutura de Dados - Procedimentos e Funções
Estrutura de Dados - Procedimentos e Funções
 
PHP - Introdução
PHP - IntroduçãoPHP - Introdução
PHP - Introdução
 
Aula 6 - Constantes e variáveis
Aula 6 - Constantes e variáveisAula 6 - Constantes e variáveis
Aula 6 - Constantes e variáveis
 
Apresentação Clean Code
Apresentação Clean CodeApresentação Clean Code
Apresentação Clean Code
 
Apostila excel 2016
Apostila excel 2016Apostila excel 2016
Apostila excel 2016
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
 
Curso Linguagem de Programação I - PHP Básico
Curso Linguagem de Programação I - PHP BásicoCurso Linguagem de Programação I - PHP Básico
Curso Linguagem de Programação I - PHP Básico
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Hadoop - primeiros passos
Hadoop - primeiros passosHadoop - primeiros passos
Hadoop - primeiros passos
 

Semelhante a Programação Defensiva

Semelhante a Programação Defensiva (20)

JUnit
JUnitJUnit
JUnit
 
Introdução a tdd
Introdução a tddIntrodução a tdd
Introdução a tdd
 
Testes de Sofware
Testes de SofwareTestes de Sofware
Testes de Sofware
 
TDD (Resumo)
TDD (Resumo)TDD (Resumo)
TDD (Resumo)
 
Java3
Java3Java3
Java3
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 
Introdução ao Java 5
Introdução ao Java 5Introdução ao Java 5
Introdução ao Java 5
 
Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01
 
Guia Rápido de Referência Java
Guia Rápido de Referência JavaGuia Rápido de Referência Java
Guia Rápido de Referência Java
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
 
Java1
Java1Java1
Java1
 
Aop Aspect J 1.5.4
Aop Aspect J 1.5.4Aop Aspect J 1.5.4
Aop Aspect J 1.5.4
 
FC-Logic
FC-LogicFC-Logic
FC-Logic
 
TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
 
Padrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por TestesPadrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por Testes
 
Matando o Java e Mostrando o Python
Matando o Java e Mostrando o PythonMatando o Java e Mostrando o Python
Matando o Java e Mostrando o Python
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnit
 
Java 12
Java 12Java 12
Java 12
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade III
 

Mais de Glaucio Scheibel

Mais de Glaucio Scheibel (12)

Kanban
KanbanKanban
Kanban
 
Bancos de Dados Orientados a Objetos
Bancos de Dados Orientados a ObjetosBancos de Dados Orientados a Objetos
Bancos de Dados Orientados a Objetos
 
Modelos NoSQL e a Persistência Poliglota
Modelos NoSQL e a Persistência PoliglotaModelos NoSQL e a Persistência Poliglota
Modelos NoSQL e a Persistência Poliglota
 
SQALE Software Quality Assessment based on Lifecycle Expectations
SQALE Software Quality Assessment based on Lifecycle ExpectationsSQALE Software Quality Assessment based on Lifecycle Expectations
SQALE Software Quality Assessment based on Lifecycle Expectations
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Apache e Java
Apache e JavaApache e Java
Apache e Java
 
Logging
LoggingLogging
Logging
 
Servlets e JSP
Servlets e JSPServlets e JSP
Servlets e JSP
 
Programação Paralela - Threads
Programação Paralela - ThreadsProgramação Paralela - Threads
Programação Paralela - Threads
 
Tecnologia Java
Tecnologia JavaTecnologia Java
Tecnologia Java
 
Java e Software Livre
Java e Software LivreJava e Software Livre
Java e Software Livre
 
Batalhas com Robocode
Batalhas com RobocodeBatalhas com Robocode
Batalhas com Robocode
 

Programação Defensiva