Guia de Fatores de Qualidade de OO e Java



Documentos relacionados
Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Padrão Arquitetura em Camadas

Java. Marcio de Carvalho Victorino

Programação de Computadores - I. Profª Beatriz Profº Israel

Capítulo 13. Encapsulamento. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

1.6. Tratamento de Exceções

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

Técnicas de Programação II

Programação por Objectos. Java

Orientação a Objetos com Java

Projeto de Software Orientado a Objeto

Programação Orientada a Objetos em Java. Herança

Introdução à Programação. Interface, Polimorfismo e Dynamic Binding

Java 2 Standard Edition Como criar classes e objetos

Introdução à orientação a objetos. João Tito Almeida Vianna 25/05/2013

8 Classes Internas. Desenvolvimento OO com Java. Vítor E. Silva Souza

Reuso com Herança a e Composiçã

Orientação a Objetos

Unidade IV: Ponteiros, Referências e Arrays

Coleções. Conceitos e Utilização Básica. c Professores de ALPRO I 05/2012. Faculdade de Informática PUCRS

3 Classes e instanciação de objectos (em Java)

POO Programação Orientada a Objetos. Classes em Java

Tópicos em Engenharia de Computação

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Encapsulamento de Dados

Análise de Programação

Lidando de Forma Eficiente com Validações Locais de Objetos

Padrões de Projeto. Singleton

7 RTTI e Interfaces. Desenvolvimento OO com Java. Vítor E. Silva Souza (vitorsouza@inf.ufes.br)

2 Diagrama de Caso de Uso

Prof. Jhonatan Fernando

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo;

Programação Orientada a Objetos. Encapsulamento

FBV - Linguagem de Programação II. Um pouco sobre Java

UML Aspectos de projetos em Diagramas de classes

INTRODUÇÃO 12. DOCUMENTAÇÃO INTRODUÇÃO INTRODUÇÃO

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp

Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos

Aplicações, durante a execução, podem incorrer em muitas espécies de erros de vários graus de severidade Quando métodos são invocados sobre um objeto:

5 Caso de estudo O cartão fidelidade

A Introdução à Programação Orientada a Objetos. Programação e Sistemas de Informação

EMENTA DO CURSO. Tópicos:

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

CONVENÇÃO DE CÓDIGO JAVA

public Agenda() { compromissos = null; } public int getnumerodecompromissos() { if (compromissos==null) return 0; else return compromissos.

O que é uma Exceção? Call Stack. Java Tratamento de Exceção. de métodos que foram usados até chegar na presente instrução.

2ª LISTA DE EXERCÍCIOS CLASSES E JAVA Disciplina: PC-II. public double getgeracaoatual() {return geracaoatual;}

Implementando uma Classe e Criando Objetos a partir dela

Herança. Alberto Costa Neto DComp - UFS

Capítulo 14. Herança a e Polimorfismo. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Programação Orientada a Objetos em Java

Modulo IIa Extra: Object

Membros de classe e de instância. PARTE III: Java e OO - detalhes. Exemplo 1: método. Exercício. Exemplo 1 corrigido

Linguagem de Programação III

Exercícios de Revisão Java Básico

Módulo 06 Desenho de Classes

Herança. Algoritmos e Programação II. Aula 5 Herança

UNIVERSIDADE FEDERAL DO PARANÁ

Programação Orientada a Objetos em java. Polimorfismo

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

Programação Concorrente em java - Exercícios Práticos Abril 2004

BSI UFRPE Prof. Gustavo Callou

Programação Orientada a Objeto

Roteiro do Programa e Entrada/Saída

Geração de Código em C para Simples

UML: Diagrama de Casos de Uso, Diagrama de Classes

Objetivos: Sun recomenda que utilize o nome de domínio da Internet da empresa, para garantir um nome de pacote único

Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.

Construção de novas Classes em Java. Classes Atributos Métodos Herança...

Programação de Computadores - I. Profª Beatriz Profº Israel

Programação por Objectos. Java

Lógica de Programação

Polimorfismo. Prof. Leonardo Barreto Campos 1

Introdução a Java. Hélder Nunes

Sistemas Distribuídos

ProJuris 8: Manual de Integração com Provedores de Recortes

Sintaxe Básica de Java Parte 1

Módulo 07 Características Avançadas de Classes

Lição 9 Trabalhando com bibliotecas de classes

Coleções. Page 1. Coleções. Prof. Anderson Augustinho Uniandrade

Laboratório de Computação VI JAVA IDL. Fabricio Aparecido Breve

Computação II Orientação a Objetos

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

JavaScript 2.0X X

Engenharia de Software III

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB)

BCC221 Programação Orientada a Objetos. Prof. Marco Antonio M. Carvalho 2014/2

Programação por Objectos. Java

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

Programação com Acesso a BD. Programação com OO Acesso em Java

Orientação a Objetos com Java

Criando documentação com javadoc

Transcrição:

Qualiti Software Processes Guia de Fatores de Qualidade de OO e Java Versã o 1.0 Este documento só pode ser utilizado para fins educacionais, no Centro de Informática da Universidade Federal de Pernambuco. Qualquer outro tipo de utilização deste documento tem que ser expressamente autorizada pela Qualiti Software Processes (www.qualiti.com.br). 2000 Qualiti Software Processes. 1 de 6

1 Introdução Este documento apresenta diretrizes para programação orientada a objetos e Java com o intuito de promover a melhoria da qualidade do código escrito segundo os fatores de qualidade: modularidade, legibilidade, robustez e corretude. Assume-se que o código já tenha sido estruturado em camadas independentes conforme o Guia de Estruturação de Aplicações em Camadas Independentes. 2 Legibilidade 2.1 Segue-se o padrão de codificação Java. 2.2 Variáveis auxiliares são declaradas como variáveis locais dos métodos que as utilizam; não são declaradas como variáveis de instância da classe. 2.3 O método padrão "equals" de objetos complexos 1 usa o método "public static boolean equals(object a, Object b)", da classe Funcoes, que retorna (a == null) && (b == null)) ((a!= null) && (b!= null) && (a.equals(b))). 2.4 Os métodos com tipo de retorno void não invocam o comando return. 2.5 O comando condicional abreviado condição? comando : comando não é usado. 2.6 Constantes são declaradas para evitar o uso direto e repetido de valores específicos. 2.7 A cláusula de importação genérica, como import nome.do.pacote.*, só é usada nos arquivos em que declara-se uma classe com o mesmo nome de uma classe definida em nome.do.pacote. 2.8 O comando for só é utilizado quando sabe-se exatamente o número de iterações a serem realizadas. 2.9 Tipos enumerados, os quais contêm um número finito de elementos, são representados por interfaces que declaram apenas constantes. Veja o exemplo: public interface DiasSemana { public static final int DOMINGO = 1; public static final int SEGUNDA = 2; public static final int TERCA = 3;... 1 Objetos que fazem referência a outros objetos 2 de 6

2.10 Desde que sejam equivalentes, utiliza-se um único comando try-catch-finally com várias cláusulas catch ao invés de vários comandos try-catch-finally cada um com apenas uma cláusula catch. 3 Modularidade 3.1 Variáveis de instância são private ou protected. 3.1.1 Variáveis de instância são private e são acompanhadas por métodos set, com qualificador protected, caso elas precisem ser alteradas diretamente nas suas subclasses. 3.2 O construtor de uma classe X recebe como argumento os objetos que serão utilizados para inicializar os atributos de X, ao invés de receber as informações necessárias para a criação desses objetos. 3.3 O código da GUI trabalha com os objetos da camada de negócio ( Conta, Cliente, etc.) e não apenas com String, int, etc. 3.4 O código da GUI só verifica as regras de negócio relativas à validação de dados fornecidos pelos usuários; as demais regras ficam por conta da camada de negócio. (Por exemplo, a verificação de que o nome de um cliente não pode ser a String vazia é feita pela GUI) 3.4.1 O código da GUI não realiza novas operações, conceitualmente falando, sobre os objetos da camada de negócio. (Por exemplo, ao invés da GUI realizar um crédito em uma conta seguido de um débito em outra, a GUI chama diretamente o método transfere da camada de negócio) 3.5 Conceitos que podem ser diretamente representados por uma String ou um tipo primitivo ( int, double, etc.) são representados por uma classe caso seja preciso realizar alguma operação sobre os elementos associados aos conceitos. Veja o exemplo: public class AutorLivro { String nomeautor; public String getultimonome() {... public String getnome() {... 3 de 6

3.6 As classes do sistema são distribuídas em pacotes. 3.6.1 Os pacotes agrupam classes conceitualmente relacionadas. 3.6.2 Os pacotes não têm dependências mútuas. 3.7 Classes são normalizadas no sentido de que elas não representam mais de um conceito.(por exemplo, uma classe Cliente não tem variáveis de instância rua e cidade, mas sim uma variável endereco. Da mesma forma, uma classe Recebimento não tem variáveis de instância banco e agencia, mas sim referenciabancaria ) 3.8 O padrão de projeto Item-Item description é utilizado. Por exemplo, tem-se a classe Livro, com código, localização na biblioteca, descrição, etc., e a classe DescricaoDeLivro, com título, autor, ISBN, etc., a classe FitaDeVideo e a classe Filme, a classe ItemDeVenda e a classe Produto. 3.9 Métodos são declarados públicos (public) ou protegidos (protected) quando há justificativa. 3.10 Variáveis estáticas são usadas apenas em casos excepcionais, devendo haver uma boa justificativa para seu uso. (Por exemplo, o número da próxima conta a ser cadastrada é um atributo de CadastroContas, e não uma variável estática de Conta ) 3.11 Métodos estáticos são usados apenas em casos excepcionais, devendo haver uma boa justificativa para seu uso. (Por exemplo, é bem justificado o uso de métodos estáticos para definir novas operações relacionadas a tipos primitivos, ou a tipos prédefinidos e finais, como String.) 3.12 A camada de negócio não contém código relativo à GUI. (Por exemplo, o código da camada de negócio não contém chamadas ao método System.out.print ) 3.12.1 Os atributos de uma exceção, inclusive o atributo de Exception, não são mensagens a serem impressas pela GUI, mas sim informações que possam ser utilizadas para gerar tais mensagens, independente da língua a ser utilizada por uma determinada configuração da aplicação. 3.12.2 A camada de negócio não verifica as regras de negócio relativas à validação de dados fornecidos pelos usuários, a menos que estas regras sejam essenciais para o correto funcionamento das operações de negócio. (Estas regras podem até ser implementadas através de métodos da camada de negócio, mas são verificadas pela GUI) 3.13 Métodos auxiliares, privados, são definidos para evitar duplicação de código nos métodos de uma classe. 4 de 6

3.14 As exceções de APIs específicas utilizadas pelas camadas de dados e comunicação não são propagadas para a camada de negócio; ao invés disso, estas exceções são trocadas por exceções genéricas. 4 Robustez 4.1 Situações de erro na execução de um método são indicadas por exceções. 4.1.1 Erros tratados de maneiras diferentes são indicados por exceções de classes diferentes. (Por exemplo, ao invés de usar IllegalArgumentException, usa-se as suas subclasses EnderecoNuloException e ClienteNuloException caso os tipos de erros associados devam ser tratados de maneiras diferentes de outros erros causados por argumentos inválidos) 4.1.2 Exceções de classes diferentes, mas que devem ser tratadas do mesmo jeito em algumas situações, são agrupadas através da definição de uma superclasse comum, a ser utilizada na cláusula catch quando as exceções tiverem que ser tratadas do mesmo jeito. 4.2 Todas as exceções são tratadas, em lugares apropriados, dependendo de que providências queira-se tomar. (Por exemplo, exceções que correspondem a situações que devem ser reportadas aos usuários são tratadas na GUI) 4.2.1 Exceções não são tratadas por cláusulas do tipo catch (TipoException e) { ou catch (TipoException e) {System.out.print("Erro Interno..."); 4.2.2 Uma exceção é tratada por uma cláusula do tipo catch (TipoException e) {throw new ErroInternoException(e); caso tenha-se certeza de que a exceção não será levantada. ( ErroInternoException é uma subclasse de RunTimeException, de forma que não precisa ser declarada em cláusulas throws ) 4.3 Métodos e construtores que recebem referências para objetos como argumento geram indicações de erro caso alguma das referências seja null, a menos que exista uma boa justificativa para aceitar uma referência null. 5 Corretude 5.1 O contexto de uma chamada de método como o.m(argumentos) garante que a variável o não contém null. 5.2 Cada classe tem um método public static void main(string[] argc) que testa os métodos mais críticos e não-triviais da classe. 5 de 6

5.2.1 Os métodos mais críticos e não-triviais são exaustivamente testados, explorando situações não equivalentes. 5.3 Casts são usados em contextos que garantem que eles serão bem sucedidos. (Por exemplo, após um teste com instanceof. 5.4 Nenhum método possui uma cláusula de acesso mais abrangente do que a necessária para sua utilização. 5.5 Um método que não retorna void possui apenas um ( 1) comando return. if (condicao) { a = x + VALOR_CONSTANTE;... return a; return y - x; //ERRADO TipoRetorno retorno; if (condicao) { a = x + VALOR_CONSTANTE;... retorno = a; else { retorno = y - x; return retorno; //CORRETO 5.6 Objetos armazenados pelas coleções de negócio não são retornados por métodos da fachada, a menos que o tipo de retorno do método seja uma interface que contém apenas os métodos de leitura do objeto retornado, caso contrário, retorna-se clones ou versões protegidas com atualização proibida. 5.7 Redefinições de métodos concretos preservam o comportamento dos métodos originais; isto é, toda redefinição de método tem o mesmo efeito do método original sobre os atributos da superclasse, mas pode ter qualquer efeito sobre os atributos da subclasse. 6 de 6