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

Algebra - Livro texto II (UNIP/Matemática) 2018
Algebra - Livro texto II (UNIP/Matemática) 2018Algebra - Livro texto II (UNIP/Matemática) 2018
Algebra - Livro texto II (UNIP/Matemática) 2018Antonio Marcos
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Mario Jorge Pereira
 
Subject Pronouns & Verb to be
Subject Pronouns & Verb to beSubject Pronouns & Verb to be
Subject Pronouns & Verb to beNarielyn Elias
 
Exercícios onda,som,luz,espelho,lente
Exercícios onda,som,luz,espelho,lenteExercícios onda,som,luz,espelho,lente
Exercícios onda,som,luz,espelho,lenteRoberto Bagatini
 
Aula 5 - Dias da semana
Aula 5 - Dias da semanaAula 5 - Dias da semana
Aula 5 - Dias da semanaPedro Henrique
 
2017 aula fisica atomica e nuclear i
2017 aula fisica atomica e nuclear i2017 aula fisica atomica e nuclear i
2017 aula fisica atomica e nuclear iIPEN - CNEN / SP
 
Tensão, Corrente e Resistencia Elétrica.pptx
Tensão, Corrente e Resistencia Elétrica.pptxTensão, Corrente e Resistencia Elétrica.pptx
Tensão, Corrente e Resistencia Elétrica.pptxLuizHenrique772524
 
Velocidade média, instantânea e aceleração escalar
Velocidade média, instantânea e aceleração escalarVelocidade média, instantânea e aceleração escalar
Velocidade média, instantânea e aceleração escalarCatarina Lopes
 

Mais procurados (20)

Imperative Form.ppt
Imperative Form.pptImperative Form.ppt
Imperative Form.ppt
 
Relative pronouns
Relative pronounsRelative pronouns
Relative pronouns
 
Algebra - Livro texto II (UNIP/Matemática) 2018
Algebra - Livro texto II (UNIP/Matemática) 2018Algebra - Livro texto II (UNIP/Matemática) 2018
Algebra - Livro texto II (UNIP/Matemática) 2018
 
Energia mecanica resumo
Energia mecanica   resumoEnergia mecanica   resumo
Energia mecanica resumo
 
Variaveis complexas
Variaveis complexasVariaveis complexas
Variaveis complexas
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java
 
Energia potencial
Energia potencialEnergia potencial
Energia potencial
 
Cinemática Vetorial
Cinemática VetorialCinemática Vetorial
Cinemática Vetorial
 
Vozes do verbo
Vozes do verboVozes do verbo
Vozes do verbo
 
Subject Pronouns & Verb to be
Subject Pronouns & Verb to beSubject Pronouns & Verb to be
Subject Pronouns & Verb to be
 
"Somos Físicos" Leis de Ohm
"Somos Físicos" Leis de Ohm"Somos Físicos" Leis de Ohm
"Somos Físicos" Leis de Ohm
 
Exercícios onda,som,luz,espelho,lente
Exercícios onda,som,luz,espelho,lenteExercícios onda,som,luz,espelho,lente
Exercícios onda,som,luz,espelho,lente
 
1 leitermodinâmica.ppt
1 leitermodinâmica.ppt1 leitermodinâmica.ppt
1 leitermodinâmica.ppt
 
Aula 5 - Dias da semana
Aula 5 - Dias da semanaAula 5 - Dias da semana
Aula 5 - Dias da semana
 
2017 aula fisica atomica e nuclear i
2017 aula fisica atomica e nuclear i2017 aula fisica atomica e nuclear i
2017 aula fisica atomica e nuclear i
 
O Substantivo
 O Substantivo O Substantivo
O Substantivo
 
Trabalho e Energia - Física.
Trabalho e Energia - Física.Trabalho e Energia - Física.
Trabalho e Energia - Física.
 
Tensão, Corrente e Resistencia Elétrica.pptx
Tensão, Corrente e Resistencia Elétrica.pptxTensão, Corrente e Resistencia Elétrica.pptx
Tensão, Corrente e Resistencia Elétrica.pptx
 
Velocidade média, instantânea e aceleração escalar
Velocidade média, instantânea e aceleração escalarVelocidade média, instantânea e aceleração escalar
Velocidade média, instantânea e aceleração escalar
 
Trabalho e Energia Slide
Trabalho e Energia SlideTrabalho e Energia Slide
Trabalho e Energia Slide
 

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