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

Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Luciano Ramalho
 
Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...
Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...
Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...Jackson Meires
 
Lenguajes de interfaz
Lenguajes de interfazLenguajes de interfaz
Lenguajes de interfazXavi Flores
 

Mais procurados (6)

Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)
 
Intro to c++
Intro to c++Intro to c++
Intro to c++
 
Aula02
Aula02Aula02
Aula02
 
Principios de Programacion
Principios de ProgramacionPrincipios de Programacion
Principios de Programacion
 
Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...
Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...
Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...
 
Lenguajes de interfaz
Lenguajes de interfazLenguajes de interfaz
Lenguajes de interfaz
 

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