SlideShare a Scribd company logo
1 of 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]

More Related Content

What's hot

BD I - Aula 08 B - Algebra Relacional - Exercicios Resolucao
BD I - Aula 08 B - Algebra Relacional - Exercicios ResolucaoBD I - Aula 08 B - Algebra Relacional - Exercicios Resolucao
BD I - Aula 08 B - Algebra Relacional - Exercicios ResolucaoRodrigo Kiyoshi Saito
 
Segurança da informação - Aula 7 - ISO 27002
Segurança da informação - Aula 7 - ISO 27002Segurança da informação - Aula 7 - ISO 27002
Segurança da informação - Aula 7 - ISO 27002Cleber Fonseca
 
Introdução a linguagem Swift
Introdução a linguagem SwiftIntrodução a linguagem Swift
Introdução a linguagem SwiftGabriel Rodrigues
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenaçãoJonas Mendonça
 
Lista duplamente encadeada em python
Lista duplamente encadeada em pythonLista duplamente encadeada em python
Lista duplamente encadeada em pythonCiro Rafael
 
Introdução ao Android
Introdução ao AndroidIntrodução ao Android
Introdução ao AndroidJanynne Gomes
 
Seminário - Scrum , Kaban e XP
Seminário - Scrum , Kaban e XPSeminário - Scrum , Kaban e XP
Seminário - Scrum , Kaban e XPLays Lopes
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em PythonLuciano Ramalho
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosLudimila Monjardim Casagrande
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Alamo Saravali
 

What's hot (20)

Árvores balanceadas - AVL
Árvores balanceadas - AVLÁrvores balanceadas - AVL
Árvores balanceadas - AVL
 
BD I - Aula 08 B - Algebra Relacional - Exercicios Resolucao
BD I - Aula 08 B - Algebra Relacional - Exercicios ResolucaoBD I - Aula 08 B - Algebra Relacional - Exercicios Resolucao
BD I - Aula 08 B - Algebra Relacional - Exercicios Resolucao
 
Recursividade
RecursividadeRecursividade
Recursividade
 
Segurança da informação - Aula 7 - ISO 27002
Segurança da informação - Aula 7 - ISO 27002Segurança da informação - Aula 7 - ISO 27002
Segurança da informação - Aula 7 - ISO 27002
 
Introdução a linguagem Swift
Introdução a linguagem SwiftIntrodução a linguagem Swift
Introdução a linguagem Swift
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
 
MongoDB e Bancos de Dados Orientados a Documentos
MongoDB e Bancos de Dados Orientados a DocumentosMongoDB e Bancos de Dados Orientados a Documentos
MongoDB e Bancos de Dados Orientados a Documentos
 
Banco de dados aula 2
Banco de dados  aula 2Banco de dados  aula 2
Banco de dados aula 2
 
Curso struts e hibernate
Curso struts e hibernateCurso struts e hibernate
Curso struts e hibernate
 
Selection Sort
Selection SortSelection Sort
Selection Sort
 
Lista duplamente encadeada em python
Lista duplamente encadeada em pythonLista duplamente encadeada em python
Lista duplamente encadeada em python
 
Apostila C++
Apostila C++ Apostila C++
Apostila C++
 
Introdução ao Android
Introdução ao AndroidIntrodução ao Android
Introdução ao Android
 
POO - Aula 1
POO - Aula 1POO - Aula 1
POO - Aula 1
 
Seminário - Scrum , Kaban e XP
Seminário - Scrum , Kaban e XPSeminário - Scrum , Kaban e XP
Seminário - Scrum , Kaban e XP
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1
 
Hadoop
HadoopHadoop
Hadoop
 
Visão Geral - pfSense
Visão Geral - pfSenseVisão Geral - pfSense
Visão Geral - pfSense
 

Similar to Programação Defensiva

Similar to 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
 

More from Glaucio Scheibel

More from 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